Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ===============================================================
- ; SONIC WINTER ADVENTURES LOGO
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Constants
- ; ---------------------------------------------------------------
- _Nametbl_PlaneA = $C000 ;
- _Nametbl_PlaneB = $E000 ;
- _VRAM_LogoBG = $20
- _VRAM_LogoBG_Pat = (_VRAM_LogoBG/$20)
- _VRAM_MenuFont = $2000
- _VRAM_MenuFont_Pat = (_VRAM_MenuFont/$20)
- _VRAM_Logo = $8000
- _VRAM_Logo_Pat = (_VRAM_Logo/$20)
- _VRAM_PSB = $A000
- _VRAM_PSB_Pat = (_VRAM_PSB/$20)
- Logo_BGTiles = $FF0000 ; uncompressed logo bg tiles
- Logo_BGMap = $FFFF8000 ; uncompressed logo bg mappings
- Logo_PSBTiles = $FFFF8E00 ; rendered PSB message
- Logo_PSBTimer = $FFFFA000 ; w PSB fade valuator (8 fix'd)
- Logo_CheatPos = $FFFFA002 ; b Cheat position
- Logo_CheatDone = $FFFFA003 ; b Flag that indicates cheat done
- Logo_MenuID = $FFFFA004 ; b Currently selected menu
- Logo_MenuItemID = $FFFFA005 ; b Currently selected menu item
- Logo_MenuSize = $FFFFA006 ; b Number of items in the menu
- Logo_MenuStatus = $FFFFA007 ; b Indicates menu status ($80 - working, indicates number of objects remain)
- Logo_MenuAnim_In = $FFFFA008 ; b Menu appear animation
- Logo_MenuAnim_Out = $FFFFA009 ; b Menu hide anim
- Logo_TargetPos = $FFFFA00A ; w Logo Target position
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Init Screen Mode
- ; ---------------------------------------------------------------
- Logo:
- moveq #$FFFFFFE0,d0
- jsr PlaySound ; fade out sounds
- jsr Pal_FadeFrom
- move #$2700,sr
- lea VDP_Ctrl,a6
- move.w #$8C81,(a6) ; use 320x224 resolution
- move.w #$8004,(a6) ; disable HInt
- move.w #$8700,(a6) ; Backdrop Color: 0
- move.w #$8200|(_Nametbl_PlaneA/$400),(a6) ; plane A base
- move.w #$8400|(_Nametbl_PlaneB/$2000),(a6) ; plane B base
- move.w #$8ADF,(a6)
- move.w #$9001,(a6) ; plane size: 64x32
- move.w #$8B03,(a6) ; VScroll: full; HScroll: 1px
- move.w #$8134,(a6) ; disable display
- jsr ClearScreen
- jsr Pal_FadeToWhite
- bra.s LogoMain2
- ; ---------------------------------------------------------------
- LogoMain:
- jsr WaitVSync
- move #$2700,sr
- lea VDP_Ctrl,a6
- move.w #$8C81,(a6) ; use 320x224 resolution
- move.w #$8004,(a6) ; disable HInt
- move.w #$8ADF,(a6)
- move.w #$8700,(a6) ; Backdrop Color: 0
- move.w #$9001,(a6) ; plane size: 64x32
- move.w #$8B03,(a6) ; VScroll: full; HScroll: 1px
- move.w #$8134,(a6) ; disable display
- jsr ClearScreen
- ; #############
- vram $F400
- lea Nem_Lamp,a0
- jsr NemDec
- vram $F580
- lea Nem_Ring,a0
- jsr NemDec
- ; Fill CRAM with white to prevent graphical issues
- lea VDP_Data,a5
- cram 0,4(a5)
- move.l #-1,d1
- moveq #7,d0
- @1 move.l d1,(a5)
- move.l d1,(a5)
- move.l d1,(a5)
- move.l d1,(a5)
- dbf d0,@1
- ; ---------------------------------------------------------------
- LogoMain2:
- ; Clear objects RAM
- lea objSonic,a0
- move.w #$2000/$10-1,d0
- moveq #0,d1
- @clr move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- dbf d0,@clr
- ; Load palette ($40 bytes)
- lea sysPallete+$80,a0
- lea LogoMain_Palette,a1
- lea -$80(a0),a2
- moveq #5,d0
- @0 move.l (a1)+,(a0)+ ; $10 bytes
- move.l (a1)+,(a0)+ ;
- move.l (a1)+,(a0)+ ;
- move.l (a1)+,(a0)+ ;
- dbf d0,@0
- ; Load patterns
- vram _VRAM_Logo,(a6) ; SWA Logo
- lea LogoMain_Tiles,a0
- jsr NemDec
- lea Kos_MenuFont,a0 ; Menu font
- lea $FF0000,a1
- jsr KosDec
- writeVRAM $FF0000, $1380, _VRAM_MenuFont
- lea LogoBG_Tiles,a0 ; Background
- lea Logo_BGTiles,a1
- jsr KosDec
- writeVRAM Logo_BGTiles, 7328, _VRAM_LogoBG
- ; Load mappings
- lea $FFFF8000,a1 ; SWA Logo
- lea LogoMain_Map,a0
- move.w #$8000+_VRAM_Logo_Pat,d0
- jsr EniDec
- vram $C380,d0
- lea $FFFF8000,a1
- moveq #24,d1
- moveq #13,d2
- jsr ShowVDPGraphics
- lea Logo_BGMap,a1 ; Background
- lea LogoBG_Map,a0
- move.w #$8000+(1<<13)+_VRAM_LogoBG_Pat,d0
- jsr EniDec
- writeVRAM Logo_BGMap, $E00, $E000
- ; Generate PSB mappings
- vram $CB1A,(a5) ; ~~
- subq.w #4,a5
- move.w #$8000+(2<<13)+_VRAM_PSB_Pat,d0 ; d0 = Start pattern
- moveq #20,d1
- @2 move.w d0,(a5)
- addq.w #1,d0
- dbf d1,@2
- ; Play title screen theme
- moveq #$FFFFFF9B,d0
- tst.b SegaCDMode
- beq.s @NoCD
- moveq #_CDA_TitleScreen,d0
- @NoCD jsr PlaySound
- ; Setup screen vars
- moveq #0,d0
- move.w d0,$FFFFF616
- move.w d0,LevelTimer
- move.w d0,CamXPos
- move.w d0,Logo_PSBTimer
- move.w d0,Logo_CheatPos
- jsr LogoMain_BGParalax
- jsr LogoMain_RenderPSB
- ; Prepare screen to show up
- move.l #LogoMain_VBlank_Init,VBlank_Sub
- move.l #HBlank,HBlank_Sub ; set standard HBlank routine
- move.w #$3F0F,PalEngine_FadeLen
- lea sysPallete,a0
- lea $80(a0),a1
- jsr Pal_SingleFadeWhite
- jsr Pal_FadeFromWhite
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Logo Main Intro
- ; ---------------------------------------------------------------
- LogoMain_IntroLoop:
- jsr WaitVSync
- addq.w #4,CamXPos ; scroll bg
- jsr LogoMain_BGParalax
- jsr LogoMain_RenderPSB
- jsr LogoMain_AnimatePSB
- jsr LogoMain_EnterCheat
- tst.b Joypad|Press ; was start pressed?
- bpl LogoMain_IntroLoop ; if not, branch
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Prepare to menu appearence loop
- ; ---------------------------------------------------------------
- ; Play ding-dong sounda
- moveq #$FFFFFFA1,d0
- jsr PlaySound_Special
- ; Remove PSB tiles from screen (21 tiles)
- jsr WaitVSync ; PSB tiles are rendered for the last time (sayonara!)
- lea VDP_Ctrl,a6
- vram $CB1A,(a6) ; ~~
- subq.w #4,a6
- moveq #0,d0 ; d0 = Start pattern
- moveq #21-1,d1 ; d1 = Number of tiles
- @2 move.w d0,(a6)
- dbf d1,@2
- addq.w #2,CamXPos ; scroll bg
- jsr LogoMain_BGParalax
- ; Load the first menu & rock
- moveq #0,d1
- tst.b sysGameComplete ; was the game completed?
- bne.s @3 ; if yes, branch
- moveq #1,d1
- @3 move.b d1,Logo_MenuID
- moveq #0,d0
- move.b d0,Logo_MenuItemID
- move.b d0,Logo_MenuAnim_In
- jsr LogoMain_LoadMenu
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Menu appearence loop
- ; ---------------------------------------------------------------
- move.l #LogoMain_VBlank_Menu,VBlank_Sub
- move.w #$1000,Logo_PSBTimer ; use PSB fade timer for BG fade here
- LogoMain_MenuAppearLoop:
- jsr WaitVSync
- addq.w #2,CamXPos ; scroll bg
- jsr LogoMain_BGParalax
- ; Run menu objects
- jsr ObjectsLoad
- jsr BuildSprites
- ; Fade out the BG
- cmpi.b #8,Logo_PSBTimer ; is palette faded 50%?
- beq.s @FadeBG_Done ; if yes, quit
- subi.w #$C0,Logo_PSBTimer
- lea sysPallete+$20,a0 ; active palette
- lea $80(a0),a1 ; source palette
- moveq #0,d0
- move.b Logo_PSBTimer,d0 ; fade factor
- moveq #$F,d6 ; number of colors
- jsr Pal_FadeAlpha_Black
- @FadeBG_Done:
- ; Move logo
- moveq #1,d1 ; move speed
- move.w $FFFFF616,d0
- cmp.w Logo_TargetPos,d0 ; is logo at its position?
- beq.s @Logo_Done ; if yes, branch
- bcs.s @Logo_Move
- moveq #-1,d1
- @Logo_Move:
- add.w d1,d0 ; move logo
- move.w d0,$FFFFF616 ;
- bra.s LogoMain_MenuAppearLoop ; if no, continue loop
- @Logo_Done:
- ; Check if menu items appearence animation is done
- tst.b Logo_MenuStatus
- bne LogoMain_MenuAppearLoop
- ; ---------------------------------------------------------------
- ; Menu controls loop
- ; ---------------------------------------------------------------
- LogoMain_MenuControlLoop:
- jsr WaitVSync
- addq.w #2,CamXPos ; scroll bg
- jsr LogoMain_BGParalax
- ; Run menu objects
- jsr ObjectsLoad
- jsr BuildSprites
- jsr LogoMain_ControlMenu
- beq LogoMain_MenuControlLoop ; if nothing was selected, branch
- jmp LogoMain_MenuExecute
- ; ---------------------------------------------------------------
- ; Menu hide loop
- ; ---------------------------------------------------------------
- LogoMain_MenuHide:
- moveq #$FFFFFFA1,d0
- jsr PlaySound_Special ; Play ding-dong sounda
- move.b Logo_MenuSize,d0
- neg.b d0
- move.b d0,Logo_MenuStatus
- LogoMain_MenuHideLoop:
- jsr WaitVSync
- addq.w #2,CamXPos ; scroll bg
- jsr LogoMain_BGParalax
- jsr ObjectsLoad
- jsr BuildSprites
- tst.b Logo_MenuStatus ; has all items been done?
- bne.s LogoMain_MenuHideLoop ; if not, branch
- jsr LogoMain_LoadMenu ; load new menu
- bra LogoMain_MenuAppearLoop
- ; ---------------------------------------------------------------
- ; Menu hide loop 2
- ; ---------------------------------------------------------------
- LogoMain_MenuHide2:
- moveq #$FFFFFFA1,d0
- jsr PlaySound_Special ; Play ding-dong sounda
- move.b Logo_MenuSize,d0
- neg.b d0
- move.b d0,Logo_MenuStatus
- move.w #8,Logo_PSBTimer
- move.b #$3F,PalEngine_FadeLen
- LogoMain_MenuHideLoop2:
- jsr WaitVSync
- addq.w #2,CamXPos ; scroll bg
- jsr LogoMain_BGParalax
- jsr ObjectsLoad
- jsr BuildSprites
- ; Move logo down
- subq.w #1,$FFFFF616
- ; Do events
- subq.w #1,Logo_PSBTimer
- bpl.s LogoMain_MenuHideLoop2
- move.w Logo_PSBTimer,d0
- cmpi.w #-30,d0
- bne.s @0
- moveq #$FFFFFFE0,d0
- jsr PlaySound_Special
- bra LogoMain_MenuHideLoop2
- @0 cmpi.w #-180,d0
- beq.s @Quit
- ; Fade out BG
- btst #0,d0
- bne LogoMain_MenuHideLoop2
- lea sysPallete,a0
- jsr Pal_SingleFadeFrom
- bra.s LogoMain_MenuHideLoop2
- @Quit: move.w #$8C81,VDP_Ctrl ; turn off SH
- tst.b SegaCDMode
- beq.s @Nope
- moveq #$FFFFFFE4,d0
- jmp PlaySound ; stop CDA
- @Nope rts
- ; ===============================================================
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Subroutine to load a menu
- ; ---------------------------------------------------------------
- ypos = $A
- index = $1F
- LogoMain_LoadMenu:
- moveq #0,d3 ; d3 = Frame Bank
- tst.b sysLang
- beq.s @0
- moveq #Logo_MenuFrames,d3
- @0
- moveq #0,d0
- move.b Logo_MenuID,d0 ; d0 = Menu ID
- add.w d0,d0
- lea LogoMain_MenuElements,a1
- add.w (a1,d0),a1 ; get data pointer for this menu
- move.w (a1)+,Logo_TargetPos
- move.b (a1)+,Logo_MenuItemID ; set default item
- moveq #0,d0
- move.b (a1)+,d0
- move.b d0,Logo_MenuStatus ; set menu status for processing shit
- move.b d0,Logo_MenuSize
- subq.w #1,d0 ; d0 = Number of elements
- lea objSonic,a0
- moveq #$FFFFFF8F,d1
- move.l #Obj_MenuItem,d2
- @CreateItem:
- move.b d1,(a0)
- move.l d2,obj(a0) ; code offset
- move.b (a1)+,index(a0)
- move.b (a1)+,frame(a0)
- add.b d3,frame(a0)
- move.w (a1)+,ypos(a0)
- lea $40(a0),a0 ; next object
- dbf d0,@CreateItem
- rts
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Subroutine to control menu 'n' shit
- ; ---------------------------------------------------------------
- LogoMain_ControlMenu:
- move.b Joypad|Press,d3
- move.b Logo_MenuItemID,d1
- move.b Logo_MenuSize,d2
- btst #iDown,d3 ; Down pressed?
- beq.s @ChkUp ; if not, branch
- addq.b #1,d1
- cmp.b d2,d1
- bne.s @SetNewItem
- moveq #0,d1
- bra.s @SetNewItem
- @ChkUp btst #iUp,d3 ; Up pressed?
- beq.s @ChkSelect ; if not, branch
- subq.b #1,d1
- bpl.s @SetNewItem
- subq.b #1,d2 ; d2 = max item index
- move.b d2,d1
- @SetNewItem:
- move.b d1,Logo_MenuItemID
- moveq #$FFFFFFCD,d0
- jsr PlaySound_Special ; play switch sound
- @ChkSelect:
- andi.b #A+B+C+Start,d3 ; A/B/C/Start pressed?
- rts
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Subroutine to exeCUTE menu commanda
- ; ---------------------------------------------------------------
- LogoMain_MenuExecute:
- moveq #0,d0
- move.b Logo_MenuID,d0
- add.w d0,d0
- lea LogoMain_MenuCommands,a1
- add.w (a1,d0),a1 ; get array
- move.b Logo_MenuItemID,d0
- add.w d0,d0 ; d0 = 2x
- move.w d0,d1
- add.w d0,d0 ; d0 = 4x
- add.w d0,d0 ; d0 = 8x
- add.w d1,d0 ; d0 = 10x
- adda.w d0,a1 ; get commanda
- move.w (a1)+,Logo_MenuAnim_In
- movea.l (a1)+,a2
- pea (a2) ; loop handler
- movea.l (a1),a1
- jmp (a1) ; commanda handler
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Menu Datas
- ; ---------------------------------------------------------------
- ; Intro Animations
- _FromBottom = $00
- _FromRight = $01
- _FromLeft = $02
- ; Outro Animations
- _ToLeft = $00
- _ToRight = $01
- _ToBottom = $02
- LogoMain_MenuCommands:
- @L dc.w MainMenu_Full_Cmd-@L ; $00
- dc.w MainMenu_Locked_Cmd-@L ; $01
- dc.w OptionsMenu_Cmd-@L ; $02
- dc.w SRAMChoice_Cmd-@L ; $03
- LogoMain_MenuElements:
- @L dc.w MainMenu_Full-@L ; $00
- dc.w MainMenu_Locked-@L ; $01
- dc.w OptionsMenu-@L ; $02
- dc.w SRAMChoice-@L ; $03
- ; ---------------------------------------------------------------
- MainMenu_Full:
- dc.w $18 ; Logo Position
- dc.b 0 ; Default Item
- dc.b 3 ; Size
- dc.w $0000, $120 ; Index/Frame, Y-pos
- dc.w $0101, $132 ;
- dc.w $0202, $144 ;
- MainMenu_Full_Cmd:
- ; PLAY
- dc.b 0,_ToBottom ; In/Out anim
- dc.l LogoMain_MenuHide2 ; Loop handler
- dc.l Hwnd_MainMenu_Play ; Code handler
- ; CHALLENGES
- dc.b 0,_ToBottom ; In/Out anim
- dc.l LogoMain_MenuHide2 ; Loop handler
- dc.l Hwnd_MainMenu_Challenges ; Code handler
- ; OPTIONS
- dc.b _FromRight,_ToLeft ; In/Out anim
- dc.l LogoMain_MenuHide ; Loop handler
- dc.l Hwnd_MainMenu_Options ; Code handler
- ; ---------------------------------------------------------------
- MainMenu_Locked:
- dc.w $18 ; Logo Position
- dc.b 0 ; Default Item
- dc.b 3 ; Size
- dc.w $0000, $120 ; Index/Frame, Y-pos
- dc.w $0107, $132 ;
- dc.w $0202, $144 ;
- MainMenu_Locked_Cmd:
- ; PLAY
- dc.b 0,_ToBottom ; In/Out anim
- dc.l LogoMain_MenuHide2 ; Loop handler
- dc.l Hwnd_MainMenu_Play ; Code handler
- ; ? ? ?
- dc.b 0,_ToBottom ; In/Out anim
- dc.l LogoMain_MenuControlLoop ; Loop handler
- dc.l Hwnd_Locked ; Code handler
- ; OPTIONS
- dc.b _FromRight,_ToLeft ; In/Out anim
- dc.l LogoMain_MenuHide ; Loop handler
- dc.l Hwnd_MainMenu_Options ; Code handler
- ; ---------------------------------------------------------------
- OptionsMenu:
- dc.w $28 ; Logo Position
- dc.b 0 ; Default Item
- dc.b 4 ; Size
- dc.w $0003, $10E ; Index/Frame, Y-pos
- dc.w $0104, $120 ;
- dc.w $0205, $132 ;
- dc.w $0306, $144 ;
- OptionsMenu_Cmd:
- ; LANGUAGE
- dc.b _FromRight,_ToRight ; In/Out anim
- dc.l LogoMain_MenuHide ; Loop handler
- dc.l Hwnd_Options_Lang ; Code handler
- ; CLEAR SRAM
- dc.b _FromRight,_ToLeft ; In/Out anim
- dc.l LogoMain_MenuHide ; Loop handler
- dc.l Hwnd_Options_ClearSRAM ; Code handler
- ; SOUND TEST
- dc.b 0,_ToLeft ; In/Out anim
- dc.l LogoMain_MenuHide2 ; Loop handler
- dc.l Hwnd_Options_SoundTest ; Code handler
- ; BACK
- dc.b _FromLeft,_ToRight ; In/Out anim
- dc.l LogoMain_MenuHide ; Loop handler
- dc.l Hwnd_Options_Back ; Code handler
- ; ---------------------------------------------------------------
- SRAMChoice:
- dc.w $28 ; Logo Position
- dc.b 1 ; Default Item
- dc.b 2 ; Size
- dc.w $0008, $128 ; Index/Frame, Y-pos
- dc.w $0109, $138 ;
- SRAMChoice_Cmd:
- ; YES
- dc.b 0,_ToBottom ; In/Out anim
- dc.l LogoMain_MenuHide2 ; Loop handler
- dc.l Hwnd_SRAMChoice_Yes ; Code handler
- ; NO
- dc.b _FromLeft,_ToRight ; In/Out anim
- dc.l LogoMain_MenuHide ; Loop handler
- dc.l Hwnd_SRAMChoice_No ; Code handler
- ; ---------------------------------------------------------------
- ; Menu Handlers
- ; ---------------------------------------------------------------
- Hwnd_MainMenu_Play:
- clr.b $FFFFFE30 ; clear lamp post counter
- clr.b sysLevelMission ; clear mission
- move.b #3,$FFFFFE12 ; set lives counter to 3
- moveq #$08,d0 ; --> Level Select
- tst.b sysGameComplete ; was the game completed?
- bne.s @0 ; if yes, branch
- moveq #$0C,d0 ; --> Level
- move.w #$0000,sysLevelID ; --> GHZ 1
- @0 tst.b Logo_CheatDone ; Debug menu cheat on?
- beq.s @1 ; if not, branch
- moveq #$20,d0 ; --> Debug Menu
- @1 move.b d0,GameMode
- move.b #$04,LastGameMode
- rts
- ; ---------------------------------------------------------------
- Hwnd_MainMenu_Challenges:
- move.b #$14,GameMode
- rts
- ; ---------------------------------------------------------------
- Hwnd_MainMenu_Options:
- move.b #$02,Logo_MenuID
- rts
- ; ---------------------------------------------------------------
- Hwnd_Locked:
- moveq #$FFFFFFD4,d0 ; play locked sounda
- jmp PlaySound
- ; ---------------------------------------------------------------
- Hwnd_Options_Lang:
- move.b sysLang,d0
- not.b d0
- andi.b #1,d0
- move.b d0,sysLang
- jmp SRAM_Save
- ; ---------------------------------------------------------------
- Hwnd_Options_ClearSRAM:
- lea objSonic+$40,a0 ; get DeleteProgress object
- move.l #MenuItem_Hide_MarkGone,obj(a0) ; delete it...
- move.l #Obj_SRAMChoice_Title,d1
- jsr CreateObject2 ; create object as (A0) child
- move.w $A(a0),$A(a1) ; fix ypos
- move.b frame(a0),frame(a1)
- move.b #$03,Logo_MenuID ; change menus
- rts
- Hwnd_SRAMChoice_Yes:
- move.b #$00,GameMode
- jmp SRAM_SetDefaults
- Hwnd_SRAMChoice_No:
- move.b #$02,Logo_MenuID
- rts
- ; ---------------------------------------------------------------
- Hwnd_Options_SoundTest:
- move.b #$18,GameMode
- rts
- ; ---------------------------------------------------------------
- Hwnd_Options_Back:
- moveq #$00,d1 ; Missions locked
- tst.b sysGameComplete
- bne.s @0
- moveq #$01,d1 ; Missions unlocked
- @0 move.b d1,Logo_MenuID
- rts
- ; ===============================================================
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Subroutine to enter debugger menu cheat
- ; ---------------------------------------------------------------
- LogoMain_EnterCheat:
- tst.b Logo_CheatDone ; was the cheat marked as entered?
- bne.s @Return ; if yeah, branch
- move.b Joypad|Press,d0
- beq.s @Return ; if no input was done, branch
- moveq #0,d1
- move.b Logo_CheatPos,d1
- cmp.b @CheatData(pc,d1),d0 ; is the button correct?
- beq.s @NextPos ; if yeah, branch
- moveq #-1,d1 ; reset CheatPos
- @NextPos:
- addq.b #1,d1
- move.b d1,Logo_CheatPos
- cmpi.b #@CheatData_End-@CheatData,d1
- bne.s @Return
- st.b Logo_CheatDone
- moveq #$FFFFFFCE,d0
- jmp PlaySound_Special
- @Return:
- rts
- ; ---------------------------------------------------------------
- @CheatData:
- dc.b a;B, Left, A, B, Left, A, B, Left, A
- @CheatData_End:
- even
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Logo BG Deformation
- ; ---------------------------------------------------------------
- LogoMain_BGParalax:
- addq.w #1,LevelTimer ; scroll water
- lea $FFFFCC00,a1 ; a1 => H-Scroll Buffer
- moveq #60,d0
- move.w CamXPos,d1 ; d1 -> Cam Xpos
- swap d0
- ; Sky & Far Icebergs ----------------------------------
- move.w #15,d6;#130-1,d6 ; do 130 lines
- move.w d1,d0 ; d0 -> CamXpos
- asr.w #4,d0 ; d0 -> CamXpos / 16 ~~ $10
- neg.w d0
- @loop: move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- dbf d6,@loop
- move.l d0,(a1)+
- move.l d0,(a1)+
- ; Near Iceburgs -----------------------------------
- moveq #3,d6;#37-1,d6 ; do 37 lines
- move.w d1,d0
- asr.w #3,d0 ; d0 -> CamXPos / 8 ~~ $20
- neg.w d0
- @loop2: move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- dbf d6,@loop2
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- move.l d0,(a1)+
- ; Iceburg Shadows in the water -------------------------
- moveq #9-1,d6 ; do 9 lines
- addq.b #1,($FFFFF718).w
- moveq #0,d3
- move.b ($FFFFF718).w,d3 ; d3 -> Water Mirror wave value
- lsr.b #3,d3 ; d3 is updated every 8th frame
- move.w d0,d2
- @loop3: andi.b #$F,d3
- move.b @WaterWave(pc,d3.w),d0
- ext.w d0
- add.w d2,d0
- move.l d0,(a1)+
- addq.b #3,d3
- dbf d6,@loop3
- bra.s @DeformWater
- ; ------------------------------------------------------
- @WaterWave:
- dc.b 0, 1, 2, 2, 1, 1, 0, 0, -1, -1, -2, -1, 0, 1, 2, 2
- ; ------------------------------------------------------
- @DeformWater:
- lea $28*4(a1),a1
- move.w ($FFFFFE04).w,d2 ; d2 -> Frames Counter
- asr.w d2 ; d2 -> Frames / 2
- add.w d2,d1 ; d1 -> CamXpos + (Frames / 2)
- swap d1
- clr.w d1
- asr.l d1 ; d1 -> (CamXpos + (Frames / 2)) / 2
- andi.l #$7FFFFF,d1 ; deformation period is $80 pixels
- neg.l d1
- move.l d1,d2 ; d2 -> Near Edge value
- asr.l #6,d2 ; d2 -> Deform Value (Near Edge / 64)
- moveq #$27,d6 ; do 40 lines
- @loop4: swap d1
- move.w d1,-(a1)
- move.w d1,-(a1)
- swap d1
- sub.l d2,d1
- dbf d6,@loop4
- rts
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Animates Press start button message
- ; ---------------------------------------------------------------
- LogoMain_AnimatePSB:
- addi.w #$C0,Logo_PSBTimer ; animation speed (0.75)
- move.b Logo_PSBTimer,d0
- btst #4,d0
- beq.s @skip
- not.b d0 ; negate fading state (for backwards fading)
- @skip:
- move.b d0,PalEngine_FadeFactor
- move.b #$F,PalEngine_FadeLen
- lea sysPallete+$40,a0 ; load palette row 2
- lea $80(a0),a1
- jmp Pal_SingleFadeWhite
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Renders Press start button message
- ; ---------------------------------------------------------------
- _startY = $B0
- LogoMain_RenderPSB:
- lea LogoMain_PSBMask+192,a0 ; a0 = PSB Mask Base (RU)
- tst.b sysLang
- beq.s @Lng
- lea LogoMain_PSBMask,a0 ; a0 = PSB Mask Base (EN)
- @Lng ; = ; a1 = Mappings
- lea Logo_PSBTiles,a2 ; a2 = Output Tiles Base
- ; = ; a3 = Output Tiles Pos
- lea $FFFFCC00+_startY*4,a4 ; a4 = Scroll Array
- lea Logo_BGTiles,a5 ; a5 = Source Tiles
- lea LogoMain_PSBMask,a6 ; a6 = PSB Mask Pos
- moveq #$F,d4 ; d4 = Mask selector
- moveq #$20,d5 ; d5 = Tile size (add factor)
- moveq #0,d7 ; d7 = Row factor (0-$18)
- @RenderScanline:
- lea Logo_BGMap+$B1A,a1
- lea (a0),a6 ; get psb mask pos
- lea (a2),a3 ; get tiles pos
- move.w (a4),d0 ; get scroll value
- moveq #20,d6 ; d6 = Number of tiles in row
- neg.w d0 ; d0 = ScrollPos
- ; Fill tiles with zero until start tile
- moveq #0,d1
- @0 subq.w #8,d0
- bmi.s @1
- move.l d1,(a3) ; fill tile row with zero
- adda.w d5,a3 ; next tile
- addq.w #2,a1 ; next mappings item
- bra.s @0
- ; Prepare to render the first tile
- @1 not.w d0 ; d0 = Pixels to render for Mask in the first tile
- move.b (a6)+,d1 ; d1 = 1bpp Mask
- moveq #7,d2 ; d2 = 1bpp refresh counter
- ; Render tile loop
- @RenderTileRow:
- moveq #0,d3 ; d3 = Final Pixel mask
- @MaskLoop:
- lsl.l #4,d3 ; next pixel in mask
- add.b d1,d1
- bcc.s @2 ; branch if current bit in mask is 0
- or.w d4,d3
- @2 dbf d2,@3 ; branch if 1bpp mask shouldn't be refreshed
- move.b (a6)+,d1 ; fetch new mask
- moveq #7,d2
- @3 dbf d0,@MaskLoop
- tst.l d3 ; is mask zero?
- bne.s @GetTile ; if not, branch
- move.l d3,(a3) ; render empty line
- add.w d5,a3 ; next tile
- moveq #7,d0 ; restore mask counter
- addq.w #2,a1 ; next mappings item
- dbf d6,@RenderTileRow
- bra.s @NextScanline
- @GetTile:
- move.w (a1)+,d0 ; d0 = Mappings Entry
- subq.w #1,d0
- andi.w #$FFF,d0
- bclr #11,d0 ; reset _fh bit
- bra.s @ApplyMask_Normal ; if tile wasn't flipped, branch ########## BEQ!!!
- @ApplyMask_HFlip:
- lsl.w #5,d0 ; tile address
- add.w d7,d0 ; add row factor
- move.l (a5,d0),d0 ; d0 = 0123 4567
- ror.b #4,d0 ; d0 = 0123 4576
- rol.w #8,d0 ; d0 = 0123 7645
- ror.b #4,d0 ; d0 = 0123 7654
- swap d0 ; d0 = 7654 0123
- ror.b #4,d0 ; d0 = 7654 0132
- rol.w #8,d0 ; d0 = 7654 3201
- ror.b #4,d0 ; d0 = 7654 3210
- and.l d3,d0 ; apply mask
- move.l d0,(a3) ; output row
- add.w d5,a3 ; next tile
- moveq #7,d0 ; restore mask counter
- dbf d6,@RenderTileRow
- bra.s @NextScanline
- @ApplyMask_Normal:
- lsl.w #5,d0 ; tile address
- add.w d7,d0 ; add row factor
- move.l (a5,d0),d0 ; get tile row
- and.l d3,d0 ; apply mask
- move.l d0,(a3) ; output row
- add.w d5,a3 ; next tile
- moveq #7,d0 ; restore mask counter
- dbf d6,@RenderTileRow
- @NextScanline:
- addi.w #24,a0 ;######
- addq.w #4,a2 ; next row in output tiles
- addq.w #4,a4 ; next scroll pos
- addq.w #4,d7 ; next row factor
- cmp.w d5,d7 ; was the row of tiles completely rendered?
- bcs @RenderScanline ; branch if not
- rts
- ; ---------------------------------------------------------------
- LogoMain_PSBMask:
- incbin '#modes\logo\LogoMain_PSBMask.bin'
- even
- ; ===============================================================
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Object: Menu Items
- ; ---------------------------------------------------------------
- xpos = 8
- ypos = $A
- index = $1F
- xpos2 = $30
- ypos2 = $34
- acc = $38
- timer = $3A
- Obj_MenuItem:
- ; Select appear routine according to menu animation
- moveq #0,d0
- move.b Logo_MenuAnim_In,d0
- add.w d0,d0
- add.w d0,d0
- move.l @AppearRoutines(pc,d0),obj(a0)
- move.l #ObjMap_MenuItems,maps(a0)
- rts
- @AppearRoutines:
- dc.l MenuItem_Appear_Bottom
- dc.l MenuItem_Appear_Right
- dc.l MenuItem_Appear_Left
- ; ---------------------------------------------------------------
- ; Menu appears from bottom
- ; ---------------------------------------------------------------
- MenuItem_Appear_Bottom:
- move.l #@Appear_Process,obj(a0)
- move.w #$80+160,xpos(a0)
- ; Setup entry position and speeds
- moveq #0,d0
- move.b index(a0),d0
- add.w d0,d0 ; d0 = index*2
- move.w d0,d1
- add.w d0,d0 ; d0 = index*4
- add.w d1,d0 ; d0 = index*6
- lea @Appear_Data(pc,d0),a1
- move.w ypos(a0),d0
- add.w (a1)+,d0
- move.w d0,ypos2(a0)
- move.w (a1)+,yvel(a0)
- move.w (a1)+,acc(a0)
- rts
- ; ---------------------------------------------------------------
- @Appear_Process:
- move.w yvel(a0),d1
- bmi MenuItem_Goto_ProcessNormal
- move.w d1,d0
- ext.l d0
- lsl.l #8,d0
- sub.l d0,ypos2(a0)
- sub.w acc(a0),d1
- move.w d1,yvel(a0)
- move.w ypos2(a0),d0
- move.w d0,ypos(a0)
- cmpi.w #$80+240,d0
- bls MenuItem_Display
- rts
- ; ---------------------------------------------------------------
- @Appear_Data:
- ; Position Start Speed Acceleration
- dc.w $80+4, $800, $40
- dc.w $100+$8, $1000, $80
- dc.w $180+$C, $1800, $C0
- ; ---------------------------------------------------------------
- ; Menu appears from right
- ; ---------------------------------------------------------------
- MenuItem_Appear_Right:
- move.w #-$2000,xvel(a0)
- move.w #$80+160+$100,xpos2(a0)
- move.b index(a0),d0
- add.b d0,d0
- add.b d0,d0
- move.b d0,timer(a0)
- move.l #@Appear_Wait,obj(a0)
- @Appear_Wait:
- subq.b #1,timer(a0)
- bmi.s @Appear_Process
- rts
- @Appear_Process:
- move.w #$1E8,d1
- bsr MenuItem_MoveXAcc
- tst.w xvel(a0)
- bmi.s MenuItem_Display
- move.l #MenuItem_Appear_ChkPos,obj(a0)
- bra.s MenuItem_Appear_ChkPos
- ; ---------------------------------------------------------------
- ; Menu appears from left
- ; ---------------------------------------------------------------
- MenuItem_Appear_Left:
- move.w #$2000,xvel(a0)
- move.w #$80+160-$100,xpos2(a0)
- move.b index(a0),d0
- add.b d0,d0
- add.b d0,d0
- move.b d0,timer(a0)
- move.l #@Appear_Wait,obj(a0)
- @Appear_Wait:
- subq.b #1,timer(a0)
- bmi.s @Appear_Process
- rts
- @Appear_Process:
- move.w #-$1E8,d1
- bsr MenuItem_MoveXAcc
- tst.w xvel(a0)
- bpl.s MenuItem_Display
- move.l #MenuItem_Appear_ChkPos,obj(a0)
- MenuItem_Appear_ChkPos:
- moveq #1,d0
- cmpi.w #$80+160,xpos(a0)
- beq.s MenuItem_Goto_ProcessNormal
- bcs.s @Move
- moveq #-1,d0
- @Move: add.w d0,xpos(a0)
- bra.s MenuItem_Display
- ; ---------------------------------------------------------------
- MenuItem_Goto_ProcessNormal:
- move.l #MenuItem_ProcessNormal,obj(a0)
- subq.b #1,Logo_MenuStatus
- ; ---------------------------------------------------------------
- ; Menu item works in menu
- ; ---------------------------------------------------------------
- MenuItem_ProcessNormal:
- tst.b Logo_MenuStatus
- bmi.s MenuItem_Hide
- ; ---------------------------------------------------------------
- MenuItem_Display:
- move.w #$8000+_VRAM_MenuFont_Pat,d1
- move.b Logo_MenuItemID,d0
- cmp.b index(a0),d0 ; is this item selected?
- beq.s @skip ; if yes, branch
- addi.w #pal4,d1
- @skip move.w d1,art(a0)
- MenuItem_Display2:
- jmp DisplaySprite
- ; ---------------------------------------------------------------
- MenuItem_Hide:
- ; Select hide routine according to menu animation
- moveq #0,d0
- move.b Logo_MenuAnim_Out,d0
- add.w d0,d0
- add.w d0,d0
- move.l @HideRoutines(pc,d0),obj(a0)
- bra.s MenuItem_Display2
- @HideRoutines:
- dc.l MenuItem_Hide_Left
- dc.l MenuItem_Hide_Right
- dc.l MenuItem_Hide_Bottom
- ; ---------------------------------------------------------------
- ; Menu Items move left
- ; ---------------------------------------------------------------
- MenuItem_Hide_Left:
- move.w #-$180,acc(a0)
- MenuItem_Hide_Directional:
- move.b index(a0),d0
- add.b d0,d0
- add.b d0,d0
- move.b d0,timer(a0)
- move.l #@Hide_WaitTurn,obj(a0)
- ; ---------------------------------------------------------------
- @Hide_WaitTurn:
- subq.b #1,timer(a0) ; is it time to hide?
- bpl.s MenuItem_Display2 ; if nop, branch
- move.w xpos(a0),xpos2(a0)
- move.l #@Hide_Process,obj(a0)
- ; ---------------------------------------------------------------
- @Hide_Process:
- move.w acc(a0),d1
- bsr.s MenuItem_MoveXAcc
- move.w xpos(a0),d0
- lsl.w #6,d0
- bpl MenuItem_Display2
- bra.s MenuItem_Hide_MarkGone
- ; ---------------------------------------------------------------
- ; Menu Items move right
- ; ---------------------------------------------------------------
- MenuItem_Hide_Right:
- move.w #$180,acc(a0)
- bra MenuItem_Hide_Directional
- ; ---------------------------------------------------------------
- ; Menu Items move bottom
- ; ---------------------------------------------------------------
- MenuItem_Hide_Bottom:
- moveq #$40/$20,d0
- add.b index(a0),d0
- lsl.w #5,d0 ; d0 *= $20
- move.w d0,acc(a0)
- move.w ypos(a0),ypos2(a0)
- clr.w yvel(a0)
- move.l #@Hide_Process,obj(a0)
- @Hide_Process:
- move.w yvel(a0),d1
- move.w d1,d0
- ext.l d0
- lsl.l #8,d0
- add.l d0,ypos2(a0)
- add.w acc(a0),d1
- move.w d1,yvel(a0)
- move.w ypos2(a0),d0
- move.w d0,ypos(a0)
- cmpi.w #$80+240,d0
- bls MenuItem_Display
- MenuItem_Hide_MarkGone:
- addq.b #1,Logo_MenuStatus ; mark obj as gone
- jmp DeleteObject
- ; ---------------------------------------------------------------
- ; Subroutine to make item move with acceleration
- ; ---------------------------------------------------------------
- MenuItem_MoveXAcc:
- move.w xvel(a0),d0
- add.w d1,d0
- move.w d0,xvel(a0)
- ext.l d0
- lsl.l #8,d0
- add.l d0,xpos2(a0)
- move.w xpos2(a0),xpos(a0)
- rts
- ; ---------------------------------------------------------------
- ObjMap_MenuItems:
- @L dc.w @PLAY_RU-@L ; $00
- dc.w @CHAL_RU-@L ; $01
- dc.w @OPTS_RU-@L ; $02
- dc.w @LANG_RU-@L ; $03
- dc.w @SRAM_RU-@L ; $04
- dc.w @SNDT_RU-@L ; $05
- dc.w @BACK_RU-@L ; $06
- dc.w @LOCKED-@L ; $07
- dc.w @YES_RU-@L ; $08
- dc.w @NO_RU-@L ; $09
- dc.w @PLAY_EN-@L ; $00+Logo_MenuFrames
- dc.w @CHAL_EN-@L ; $01+Logo_MenuFrames
- dc.w @OPTS_EN-@L ; $02+Logo_MenuFrames
- dc.w @LANG_EN-@L ; $03+Logo_MenuFrames
- dc.w @SRAM_EN-@L ; $04+Logo_MenuFrames
- dc.w @SNDT_EN-@L ; $05+Logo_MenuFrames
- dc.w @BACK_EN-@L ; $06+Logo_MenuFrames
- dc.w @LOCKED-@L ; $07+Logo_MenuFrames
- dc.w @YES_EN-@L ; $08+Logo_MenuFrames
- dc.w @NO_EN-@L ; $09+Logo_MenuFrames
- Logo_MenuFrames equ (*-@l)/4 ; define number of frames for the menu
- ; ---------------------------------------------------------------
- @LOCKED:
- Xdisp = $28/2
- dc.b 3
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $3C, $00-Xdisp ; ?
- dc.b $F8, %0001, $00, $3C, $10-Xdisp ; ?
- dc.b $F8, %0001, $00, $3C, $20-Xdisp ; ?
- ; ---------------------------------------------------------------
- @PLAY_EN:
- Xdisp = $10
- dc.b 4
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $5E, $00-Xdisp ; P
- dc.b $F8, %0001, $00, $56, $08-Xdisp ; L
- dc.b $F8, %0001, $00, $40, $10-Xdisp ; A
- dc.b $F8, %0001, $00, $70, $18-Xdisp ; Y
- @CHAL_EN:
- Xdisp = $50/2
- dc.b 10
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $44, $00-Xdisp ; C
- dc.b $F8, %0001, $00, $4E, $08-Xdisp ; H
- dc.b $F8, %0001, $00, $40, $10-Xdisp ; A
- dc.b $F8, %0001, $00, $56, $18-Xdisp ; L
- dc.b $F8, %0001, $00, $56, $20-Xdisp ; L
- dc.b $F8, %0001, $00, $48, $28-Xdisp ; E
- dc.b $F8, %0001, $00, $5A, $30-Xdisp ; N
- dc.b $F8, %0001, $00, $4C, $38-Xdisp ; G
- dc.b $F8, %0001, $00, $48, $40-Xdisp ; E
- dc.b $F8, %0001, $00, $64, $48-Xdisp ; S
- @OPTS_EN:
- Xdisp = $38/2
- dc.b 6
- ; YY WWHH TT XX
- dc.b $F8, %0101, $00, $5C, $00-Xdisp ; 0P
- dc.b $F8, %0001, $00, $66, $10-Xdisp ; T
- dc.b $F8, %0001, $00, $50, $18-Xdisp ; I
- dc.b $F8, %0001, $00, $5C, $20-Xdisp ; 0
- dc.b $F8, %0001, $00, $5A, $28-Xdisp ; N
- dc.b $F8, %0001, $00, $64, $30-Xdisp ; S
- @LANG_EN:
- Xdisp = $88/2
- dc.b 16
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $56, $00-Xdisp ; L
- dc.b $F8, %0001, $00, $40, $08-Xdisp ; A
- dc.b $F8, %0001, $00, $5A, $10-Xdisp ; N
- dc.b $F8, %0001, $00, $4C, $18-Xdisp ; G
- dc.b $F8, %0001, $00, $68, $20-Xdisp ; U
- dc.b $F8, %0001, $00, $40, $28-Xdisp ; A
- dc.b $F8, %0001, $00, $4C, $30-Xdisp ; G
- dc.b $F8, %0001, $00, $48, $38-Xdisp ; E
- dc.b $F8, %0001, $00, $32, $40-Xdisp ; :
- dc.b $F8, %0001, $00, $48, $50-Xdisp ; E
- dc.b $F8, %0001, $00, $5A, $58-Xdisp ; N
- dc.b $F8, %0001, $00, $4C, $60-Xdisp ; G
- dc.b $F8, %0001, $00, $56, $68-Xdisp ; L
- dc.b $F8, %0001, $00, $50, $70-Xdisp ; I
- dc.b $F8, %0001, $00, $64, $78-Xdisp ; S
- dc.b $F8, %0001, $00, $4E, $80-Xdisp ; H
- @SRAM_EN:
- Xdisp = $80/2
- dc.b 14
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $46, $00-Xdisp ; D
- dc.b $F8, %0001, $00, $48, $08-Xdisp ; E
- dc.b $F8, %0001, $00, $56, $10-Xdisp ; L
- dc.b $F8, %0001, $00, $48, $18-Xdisp ; E
- dc.b $F8, %0001, $00, $66, $20-Xdisp ; T
- dc.b $F8, %0001, $00, $48, $28-Xdisp ; E
- dc.b $F8, %0001, $00, $64, $38-Xdisp ; S
- dc.b $F8, %0001, $00, $40, $40-Xdisp ; A
- dc.b $F8, %0001, $00, $6A, $48-Xdisp ; V
- dc.b $F8, %0001, $00, $48, $50-Xdisp ; E
- dc.b $F8, %0001, $00, $46, $60-Xdisp ; D
- dc.b $F8, %0001, $00, $40, $68-Xdisp ; A
- dc.b $F8, %0001, $00, $66, $70-Xdisp ; T
- dc.b $F8, %0001, $00, $40, $78-Xdisp ; A
- @SNDT_EN:
- Xdisp = $50/2
- dc.b 8
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $64, $00-Xdisp ; S
- dc.b $F8, %0001, $00, $5C, $08-Xdisp ; 0
- dc.b $F8, %0001, $00, $68, $10-Xdisp ; U
- dc.b $F8, %0001, $00, $5A, $18-Xdisp ; N
- dc.b $F8, %0001, $00, $46, $20-Xdisp ; D
- dc.b $F8, %0001, $00, $66, $30-Xdisp ; T
- dc.b $F8, %0001, $00, $48, $38-Xdisp ; E
- dc.b $F8, %0101, $00, $64, $40-Xdisp ; ST
- @BACK_EN:
- Xdisp = $20/2
- dc.b 4
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $42, $00-Xdisp ; B
- dc.b $F8, %0001, $00, $40, $08-Xdisp ; A
- dc.b $F8, %0001, $00, $44, $10-Xdisp ; C
- dc.b $F8, %0001, $00, $54, $18-Xdisp ; K
- @YES_EN:
- Xdisp = $18/2
- dc.b 3
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $70, $00-Xdisp ; Y
- dc.b $F8, %0001, $00, $48, $08-Xdisp ; E
- dc.b $F8, %0001, $00, $64, $10-Xdisp ; S
- @NO_EN:
- Xdisp = $10/2
- dc.b 2
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $5A, $00-Xdisp ; N
- dc.b $F8, %0001, $00, $5C, $08-Xdisp ; 0
- ; ---------------------------------------------------------------
- @PLAY_RU:
- Xdisp = $30/2
- fh = 1<<3
- dc.b 6
- ; YY WWHH TT XX
- dc.b $F8, %0001, fh, $5A, $00-Xdisp ; И
- dc.b $F8, %0001, $00, $76, $08-Xdisp ; Г
- dc.b $F8, %0001, $00, $5E, $10-Xdisp ; P
- dc.b $F8, %0001, $00, $40, $18-Xdisp ; A
- dc.b $F8, %0001, $00, $66, $20-Xdisp ; T
- dc.b $F8, %0001, $00, $94, $28-Xdisp ; Ь
- @CHAL_RU:
- Xdisp = $30/2
- dc.b 6
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $58, $00-Xdisp ; M
- dc.b $F8, %0001, fh, $5A, $08-Xdisp ; И
- dc.b $F8, %0001, $00, $44, $10-Xdisp ; C
- dc.b $F8, %0001, $00, $44, $18-Xdisp ; C
- dc.b $F8, %0001, fh, $5A, $20-Xdisp ; И
- dc.b $F8, %0001, fh, $5A, $28-Xdisp ; И
- @OPTS_RU:
- Xdisp = $48/2
- dc.b 9
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $4E, $00-Xdisp ; H
- dc.b $F8, %0001, $00, $40, $08-Xdisp ; A
- dc.b $F8, %0001, $00, $44, $10-Xdisp ; C
- dc.b $F8, %0001, $00, $66, $18-Xdisp ; T
- dc.b $F8, %0001, $00, $5E, $20-Xdisp ; P
- dc.b $F8, %0001, $00, $5C, $28-Xdisp ; 0
- dc.b $F8, %0001, $00, $7E, $30-Xdisp ; Й
- dc.b $F8, %0001, $00, $54, $38-Xdisp ; K
- dc.b $F8, %0001, fh, $5A, $40-Xdisp ; И
- @LANG_RU:
- Xdisp = $68/2
- dc.b 12
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $9A, $00-Xdisp ; Я
- dc.b $F8, %0001, $00, $7C, $08-Xdisp ; З
- dc.b $F8, %0001, $00, $92, $10-Xdisp ; Ы
- dc.b $F8, %0001, $00, $54, $18-Xdisp ; K
- dc.b $F8, %0001, $00, $32, $20-Xdisp ; :
- dc.b $F8, %0001, $00, $5E, $30-Xdisp ; P
- dc.b $F8, %0001, $00, $84, $38-Xdisp ; У
- dc.b $F8, %0001, $00, $44, $40-Xdisp ; C
- dc.b $F8, %0001, $00, $44, $48-Xdisp ; C
- dc.b $F8, %0001, $00, $54, $50-Xdisp ; K
- dc.b $F8, %0001, fh, $5A, $58-Xdisp ; И
- dc.b $F8, %0001, $00, $7E, $60-Xdisp ; Й
- @SRAM_RU:
- Xdisp = $80/2
- dc.b 15
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $84, $00-Xdisp ; У
- dc.b $F8, %0001, $00, $78, $08-Xdisp ; Д
- dc.b $F8, %0001, $00, $40, $10-Xdisp ; A
- dc.b $F8, %0001, $00, $80, $18-Xdisp ; Л
- dc.b $F8, %0001, fh, $5A, $20-Xdisp ; И
- dc.b $F8, %0001, $00, $66, $28-Xdisp ; T
- dc.b $F8, %0001, $00, $94, $30-Xdisp ; Ь
- dc.b $F8, %0001, $00, $82, $40-Xdisp ; П
- dc.b $F8, %0001, $00, $5E, $48-Xdisp ; P
- dc.b $F8, %0001, $00, $5C, $50-Xdisp ; 0
- dc.b $F8, %0001, $00, $76, $58-Xdisp ; Г
- dc.b $F8, %0001, $00, $5E, $60-Xdisp ; P
- dc.b $F8, %0001, $00, $48, $68-Xdisp ; E
- dc.b $F8, %0001, $00, $44, $70-Xdisp ; C
- dc.b $F8, %0001, $00, $44, $78-Xdisp ; C
- @SNDT_RU:
- Xdisp = $60/2
- dc.b 11
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $42, $00-Xdisp ; B
- dc.b $F8, %0001, $00, $92, $08-Xdisp ; Ы
- dc.b $F8, %0001, $00, $74, $10-Xdisp ; Б
- dc.b $F8, %0001, $00, $5C, $18-Xdisp ; 0
- dc.b $F8, %0001, $00, $5E, $20-Xdisp ; P
- dc.b $F8, %0001, $00, $58, $30-Xdisp ; M
- dc.b $F8, %0001, $00, $84, $38-Xdisp ; У
- dc.b $F8, %0001, $00, $7C, $40-Xdisp ; З
- dc.b $F8, %0001, $00, $92, $48-Xdisp ; Ы
- dc.b $F8, %0001, $00, $54, $50-Xdisp ; K
- dc.b $F8, %0001, fh, $5A, $58-Xdisp ; И
- @BACK_RU:
- Xdisp = $28/2
- dc.b 5
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $4E, $00-Xdisp ; H
- dc.b $F8, %0001, $00, $40, $08-Xdisp ; A
- dc.b $F8, %0001, $00, $7C, $10-Xdisp ; З
- dc.b $F8, %0001, $00, $40, $18-Xdisp ; A
- dc.b $F8, %0001, $00, $78, $20-Xdisp ; Д
- @YES_RU:
- Xdisp = $10/2
- dc.b 2
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $78, $00-Xdisp ; Д
- dc.b $F8, %0001, $00, $40, $08-Xdisp ; A
- @NO_RU:
- Xdisp = $18/2
- dc.b 3
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $4E, $00-Xdisp ; H
- dc.b $F8, %0001, $00, $48, $08-Xdisp ; E
- dc.b $F8, %0001, $00, $66, $10-Xdisp ; T
- even
- ; ===============================================================
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Object: Delete Progress title in a specific menu
- ; ---------------------------------------------------------------
- xpos = 8
- ypos = $A
- Obj_SRAMChoice_Title:
- move.l #ObjMap_MenuItems,maps(a0)
- move.w #$8000+_VRAM_MenuFont_Pat,art(a0)
- move.l #@WaitAppear,obj(a0)
- ; Create question mark object
- move.l #Obj_SRAMChoice_QuestionMark,d1
- jsr CreateObject2
- move.w a1,parent(a0)
- ; ---------------------------------------------------------------
- @WaitAppear:
- ; Wait until the menu starts appearing
- tst.b Logo_MenuStatus
- bmi.s @Display
- ; Move menu
- subq.w #1,ypos(a0)
- cmpi.w #$110,ypos(a0)
- bne.s @Display
- move.l #@WaitHide,obj(a0)
- ; ---------------------------------------------------------------
- @WaitHide:
- ; Wait until the menu starts disapp
- tst.b Logo_MenuStatus
- bpl.s @Display
- move.l #MenuItem_Hide_Left,d0 ; MEGA HACK
- movea.w parent(a0),a1
- move.l d0,obj(a0)
- move.l d0,obj(a1)
- subq.b #2,Logo_MenuStatus ; simulate extra 2 items
- ; ---------------------------------------------------------------
- @Display:
- jmp DisplaySprite
- ; ===============================================================
- timer = $38
- Obj_SRAMChoice_QuestionMark:
- move.l #@Maps,maps(a0)
- move.w #$8000+_VRAM_MenuFont_Pat,art(a0)
- moveq #$80/2-8,d0 ; RU disp
- tst.b sysLang
- beq.s @0
- moveq #$80/2-8,d0 ; EN disp
- @0 add.w d0,xpos(a0)
- move.w #8,timer(a0)
- move.l #@Move,obj(a0)
- ; ---------------------------------------------------------------
- @Move:
- addq.w #1,xpos(a0)
- subq.w #1,timer(a0)
- bne.s @Display
- move.l #@Display,obj(a0)
- @Display
- movea.w parent(a0),a1
- move.w ypos(a1),ypos(a0)
- jmp DisplaySprite
- @Maps:
- Xdisp = $00
- dc.w 2
- dc.b 1
- ; YY WWHH TT XX
- dc.b $F8, %0001, $00, $3C, $00-Xdisp ; ?
- even
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Logo VBlank routine
- ; ---------------------------------------------------------------
- LogoMain_VBlank_Init:
- movem.l d0-a6,-(sp)
- lea VDP_Ctrl,a6
- move.w #$8174,(a6) ; enable display
- move.w #$8C89,(a6) ; enable SH
- move.l #LogoMain_VBlank_Intro,VBlank_Sub
- bra.s LogoMain_VBlank_Common
- ; ---------------------------------------------------------------
- LogoMain_VBlank_Intro:
- movem.l d0-a6,-(sp)
- tst.b $FFFFF62A
- beq LogoMain_VBlank_Misc
- writeVRAM Logo_PSBTiles, $2A0, _VRAM_PSB
- bra.s LogoMain_VBlank_Common
- ; ---------------------------------------------------------------
- LogoMain_VBlank_Menu:
- movem.l d0-a6,-(sp)
- tst.b $FFFFF62A
- beq LogoMain_VBlank_Misc
- writeVRAM $FFF800,$280,$F800 ; transfer sprites
- LogoMain_VBlank_Common:
- sf.b $FFFFF62A ; reset VBlank pending flag
- lea VDP_Ctrl,a6
- move.l #$40000010,(a6) ; access VSRAM at addess $00
- move.l ($FFFFF616).w,-4(a6) ; send to VSRAM
- jsr ReadJoypads
- writeCRAM $FFFFFB00, $80, 0 ; transfer palette
- writeVRAM $FFFFCC00, $380, $FC00 ; transfer HSRAM
- LogoMain_VBlank_Misc:
- jsr Int_SoundDriver
- movem.l (sp)+,d0-a6
- rte
- ; ===============================================================
- ; ---------------------------------------------------------------
- ; Data
- ; ---------------------------------------------------------------
- ; LOGO **********************************************************
- ; Enigma compressed mappings
- LogoMain_Map:
- incbin '#modes\logo\logomain_map.bin'
- even
- ; Nemesis compressed tiles
- LogoMain_Tiles:
- incbin '#modes\logo\logomain_tiles.bin'
- even
- ; BACKGROUND ****************************************************
- ; Enigma compressed mappings
- LogoBG_Map:
- incbin '#modes\logo\logobg_map.bin'
- even
- ; Kosinski compressed tiles
- LogoBG_Tiles:
- incbin '#modes\logo\logobg_tiles.bin'
- even
- ; SHARED ********************************************************
- ; Palette
- LogoMain_Palette:
- incbin '#modes\logo\logomain_palette.bin'
- incbin '#modes\logo\logobg_palette.bin'
- incbin '#modes\logo\logobg_palette.bin'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement