Advertisement
vladikcomper

Sonic Winter Adventures - Title Screen Code

May 8th, 2014
529
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. ; ===============================================================
  3. ; SONIC WINTER ADVENTURES LOGO
  4. ; ===============================================================
  5.  
  6. ; ---------------------------------------------------------------
  7. ; Constants
  8. ; ---------------------------------------------------------------
  9.  
  10. _Nametbl_PlaneA = $C000 ;
  11. _Nametbl_PlaneB = $E000 ;
  12.  
  13. _VRAM_LogoBG    = $20
  14. _VRAM_LogoBG_Pat = (_VRAM_LogoBG/$20)
  15. _VRAM_MenuFont  = $2000
  16. _VRAM_MenuFont_Pat = (_VRAM_MenuFont/$20)
  17. _VRAM_Logo  = $8000
  18. _VRAM_Logo_Pat  = (_VRAM_Logo/$20)
  19. _VRAM_PSB   = $A000
  20. _VRAM_PSB_Pat   = (_VRAM_PSB/$20)
  21.  
  22. Logo_BGTiles    = $FF0000       ;   uncompressed logo bg tiles
  23. Logo_BGMap  = $FFFF8000     ;   uncompressed logo bg mappings
  24. Logo_PSBTiles   = $FFFF8E00     ;   rendered PSB message
  25.  
  26. Logo_PSBTimer   = $FFFFA000     ; w PSB fade valuator (8 fix'd)
  27. Logo_CheatPos   = $FFFFA002     ; b Cheat position
  28. Logo_CheatDone  = $FFFFA003     ; b Flag that indicates cheat done
  29. Logo_MenuID = $FFFFA004     ; b Currently selected menu
  30. Logo_MenuItemID = $FFFFA005     ; b Currently selected menu item
  31. Logo_MenuSize   = $FFFFA006     ; b Number of items in the menu  
  32. Logo_MenuStatus = $FFFFA007     ; b Indicates menu status ($80 - working, indicates number of objects remain)
  33. Logo_MenuAnim_In = $FFFFA008        ; b Menu appear animation
  34. Logo_MenuAnim_Out = $FFFFA009       ; b Menu hide anim
  35. Logo_TargetPos  = $FFFFA00A     ; w Logo Target position
  36.  
  37. ; ===============================================================
  38. ; ---------------------------------------------------------------
  39. ; Init Screen Mode
  40. ; ---------------------------------------------------------------
  41.  
  42. Logo:
  43.     moveq   #$FFFFFFE0,d0
  44.     jsr PlaySound       ; fade out sounds
  45.  
  46.     jsr Pal_FadeFrom
  47.     move    #$2700,sr
  48.  
  49.     lea VDP_Ctrl,a6
  50.     move.w  #$8C81,(a6)     ; use 320x224 resolution
  51.     move.w  #$8004,(a6)     ; disable HInt
  52.     move.w  #$8700,(a6)     ; Backdrop Color: 0
  53.     move.w  #$8200|(_Nametbl_PlaneA/$400),(a6)  ; plane A base
  54.     move.w  #$8400|(_Nametbl_PlaneB/$2000),(a6) ; plane B base
  55.     move.w  #$8ADF,(a6)
  56.     move.w  #$9001,(a6)     ; plane size: 64x32
  57.     move.w  #$8B03,(a6)     ; VScroll: full; HScroll: 1px
  58.     move.w  #$8134,(a6)     ; disable display
  59.     jsr ClearScreen
  60.  
  61.     jsr Pal_FadeToWhite
  62.     bra.s   LogoMain2
  63.  
  64. ; ---------------------------------------------------------------
  65. LogoMain:
  66.     jsr WaitVSync
  67.     move    #$2700,sr
  68.  
  69.     lea VDP_Ctrl,a6
  70.     move.w  #$8C81,(a6)     ; use 320x224 resolution
  71.     move.w  #$8004,(a6)     ; disable HInt
  72.     move.w  #$8ADF,(a6)
  73.     move.w  #$8700,(a6)     ; Backdrop Color: 0
  74.     move.w  #$9001,(a6)     ; plane size: 64x32
  75.     move.w  #$8B03,(a6)     ; VScroll: full; HScroll: 1px
  76.     move.w  #$8134,(a6)     ; disable display
  77.     jsr ClearScreen
  78.  
  79.     ; #############
  80.     vram    $F400
  81.     lea Nem_Lamp,a0
  82.     jsr NemDec
  83.     vram    $F580
  84.     lea Nem_Ring,a0
  85.     jsr NemDec
  86.  
  87.     ; Fill CRAM with white to prevent graphical issues
  88.     lea VDP_Data,a5
  89.     cram    0,4(a5)
  90.     move.l  #-1,d1
  91.     moveq   #7,d0
  92. @1  move.l  d1,(a5)
  93.     move.l  d1,(a5)
  94.     move.l  d1,(a5)
  95.     move.l  d1,(a5)
  96.     dbf d0,@1
  97.  
  98. ; ---------------------------------------------------------------
  99. LogoMain2:
  100.     ; Clear objects RAM
  101.     lea objSonic,a0
  102.     move.w  #$2000/$10-1,d0
  103.     moveq   #0,d1
  104. @clr    move.l  d1,(a0)+
  105.     move.l  d1,(a0)+
  106.     move.l  d1,(a0)+
  107.     move.l  d1,(a0)+
  108.     dbf d0,@clr
  109.  
  110.     ; Load palette ($40 bytes)
  111.     lea sysPallete+$80,a0
  112.     lea LogoMain_Palette,a1
  113.     lea -$80(a0),a2
  114.     moveq   #5,d0
  115. @0  move.l  (a1)+,(a0)+     ; $10 bytes
  116.     move.l  (a1)+,(a0)+     ;
  117.     move.l  (a1)+,(a0)+     ;
  118.     move.l  (a1)+,(a0)+     ;
  119.     dbf d0,@0
  120.  
  121.     ; Load patterns
  122.     vram    _VRAM_Logo,(a6)     ; SWA Logo
  123.     lea LogoMain_Tiles,a0
  124.     jsr NemDec
  125.  
  126.     lea Kos_MenuFont,a0     ; Menu font
  127.     lea $FF0000,a1
  128.     jsr KosDec
  129.     writeVRAM $FF0000, $1380, _VRAM_MenuFont
  130.  
  131.     lea LogoBG_Tiles,a0     ; Background
  132.     lea Logo_BGTiles,a1
  133.     jsr KosDec
  134.     writeVRAM Logo_BGTiles, 7328, _VRAM_LogoBG
  135.  
  136.     ; Load mappings
  137.     lea $FFFF8000,a1        ; SWA Logo
  138.     lea LogoMain_Map,a0
  139.     move.w  #$8000+_VRAM_Logo_Pat,d0
  140.     jsr EniDec
  141.     vram    $C380,d0
  142.     lea $FFFF8000,a1
  143.     moveq   #24,d1
  144.     moveq   #13,d2
  145.     jsr ShowVDPGraphics
  146.  
  147.     lea Logo_BGMap,a1       ; Background
  148.     lea LogoBG_Map,a0
  149.     move.w  #$8000+(1<<13)+_VRAM_LogoBG_Pat,d0
  150.     jsr EniDec
  151.     writeVRAM Logo_BGMap, $E00, $E000
  152.  
  153.     ; Generate PSB mappings
  154.     vram    $CB1A,(a5)          ; ~~
  155.     subq.w  #4,a5
  156.     move.w  #$8000+(2<<13)+_VRAM_PSB_Pat,d0 ; d0 = Start pattern
  157.     moveq   #20,d1
  158. @2  move.w  d0,(a5)
  159.     addq.w  #1,d0
  160.     dbf d1,@2
  161.  
  162.     ; Play title screen theme
  163.     moveq   #$FFFFFF9B,d0
  164.     tst.b   SegaCDMode
  165.     beq.s   @NoCD
  166.     moveq   #_CDA_TitleScreen,d0
  167. @NoCD   jsr PlaySound
  168.  
  169.     ; Setup screen vars
  170.     moveq   #0,d0
  171.     move.w  d0,$FFFFF616
  172.     move.w  d0,LevelTimer
  173.     move.w  d0,CamXPos
  174.     move.w  d0,Logo_PSBTimer
  175.     move.w  d0,Logo_CheatPos
  176.     jsr LogoMain_BGParalax
  177.     jsr LogoMain_RenderPSB
  178.  
  179.     ; Prepare screen to show up
  180.     move.l  #LogoMain_VBlank_Init,VBlank_Sub
  181.     move.l  #HBlank,HBlank_Sub          ; set standard HBlank routine
  182.     move.w  #$3F0F,PalEngine_FadeLen
  183.     lea sysPallete,a0
  184.     lea $80(a0),a1
  185.     jsr Pal_SingleFadeWhite
  186.     jsr Pal_FadeFromWhite
  187.  
  188.  
  189. ; ===============================================================
  190. ; ---------------------------------------------------------------
  191. ; Logo Main Intro
  192. ; ---------------------------------------------------------------
  193.  
  194. LogoMain_IntroLoop:
  195.     jsr WaitVSync
  196.  
  197.     addq.w  #4,CamXPos      ; scroll bg
  198.     jsr LogoMain_BGParalax
  199.     jsr LogoMain_RenderPSB
  200.     jsr LogoMain_AnimatePSB
  201.     jsr LogoMain_EnterCheat
  202.  
  203.     tst.b   Joypad|Press        ; was start pressed?
  204.     bpl LogoMain_IntroLoop  ; if not, branch
  205.  
  206. ; ===============================================================
  207. ; ---------------------------------------------------------------
  208. ; Prepare to menu appearence loop
  209. ; ---------------------------------------------------------------
  210.  
  211.     ; Play ding-dong sounda
  212.     moveq   #$FFFFFFA1,d0
  213.     jsr PlaySound_Special
  214.  
  215.     ; Remove PSB tiles from screen (21 tiles)
  216.     jsr WaitVSync       ; PSB tiles are rendered for the last time (sayonara!)
  217.     lea VDP_Ctrl,a6
  218.     vram    $CB1A,(a6)      ; ~~
  219.     subq.w  #4,a6
  220.     moveq   #0,d0           ; d0 = Start pattern
  221.     moveq   #21-1,d1        ; d1 = Number of tiles
  222. @2  move.w  d0,(a6)
  223.     dbf d1,@2
  224.     addq.w  #2,CamXPos      ; scroll bg
  225.     jsr LogoMain_BGParalax
  226.  
  227.     ; Load the first menu & rock
  228.     moveq   #0,d1  
  229.     tst.b   sysGameComplete     ; was the game completed?
  230.     bne.s   @3          ; if yes, branch
  231.     moveq   #1,d1
  232. @3  move.b  d1,Logo_MenuID
  233.     moveq   #0,d0
  234.     move.b  d0,Logo_MenuItemID
  235.     move.b  d0,Logo_MenuAnim_In
  236.     jsr LogoMain_LoadMenu
  237.  
  238. ; ===============================================================
  239. ; ---------------------------------------------------------------
  240. ; Menu appearence loop
  241. ; ---------------------------------------------------------------
  242.  
  243.     move.l  #LogoMain_VBlank_Menu,VBlank_Sub
  244.     move.w  #$1000,Logo_PSBTimer    ; use PSB fade timer for BG fade here
  245.  
  246. LogoMain_MenuAppearLoop:
  247.     jsr WaitVSync
  248.     addq.w  #2,CamXPos      ; scroll bg
  249.     jsr LogoMain_BGParalax
  250.  
  251.     ; Run menu objects
  252.     jsr ObjectsLoad
  253.     jsr BuildSprites
  254.  
  255.         ; Fade out the BG
  256.     cmpi.b  #8,Logo_PSBTimer    ; is palette faded 50%?
  257.     beq.s   @FadeBG_Done        ; if yes, quit
  258.     subi.w  #$C0,Logo_PSBTimer
  259.     lea sysPallete+$20,a0   ; active palette
  260.     lea $80(a0),a1      ; source palette
  261.     moveq   #0,d0
  262.     move.b  Logo_PSBTimer,d0    ; fade factor
  263.     moveq   #$F,d6          ; number of colors
  264.     jsr Pal_FadeAlpha_Black
  265. @FadeBG_Done:
  266.  
  267.     ; Move logo
  268.     moveq   #1,d1           ; move speed
  269.     move.w  $FFFFF616,d0
  270.     cmp.w   Logo_TargetPos,d0   ; is logo at its position?
  271.     beq.s   @Logo_Done      ; if yes, branch
  272.     bcs.s   @Logo_Move
  273.     moveq   #-1,d1
  274. @Logo_Move:
  275.     add.w   d1,d0           ; move logo
  276.     move.w  d0,$FFFFF616        ;
  277.     bra.s   LogoMain_MenuAppearLoop ; if no, continue loop
  278. @Logo_Done:
  279.  
  280.     ; Check if menu items appearence animation is done
  281.     tst.b   Logo_MenuStatus
  282.     bne LogoMain_MenuAppearLoop
  283.  
  284. ; ---------------------------------------------------------------
  285. ; Menu controls loop
  286. ; ---------------------------------------------------------------
  287.  
  288. LogoMain_MenuControlLoop:
  289.     jsr WaitVSync
  290.     addq.w  #2,CamXPos      ; scroll bg
  291.     jsr LogoMain_BGParalax
  292.  
  293.     ; Run menu objects
  294.     jsr ObjectsLoad
  295.     jsr BuildSprites
  296.     jsr LogoMain_ControlMenu
  297.     beq LogoMain_MenuControlLoop ; if nothing was selected, branch
  298.  
  299.     jmp LogoMain_MenuExecute
  300.  
  301. ; ---------------------------------------------------------------
  302. ; Menu hide loop
  303. ; ---------------------------------------------------------------
  304.  
  305. LogoMain_MenuHide:
  306.     moveq   #$FFFFFFA1,d0
  307.     jsr PlaySound_Special   ; Play ding-dong sounda
  308.     move.b  Logo_MenuSize,d0
  309.     neg.b   d0
  310.     move.b  d0,Logo_MenuStatus
  311.  
  312. LogoMain_MenuHideLoop:
  313.     jsr WaitVSync
  314.     addq.w  #2,CamXPos      ; scroll bg
  315.     jsr LogoMain_BGParalax
  316.     jsr ObjectsLoad
  317.     jsr BuildSprites
  318.     tst.b   Logo_MenuStatus     ; has all items been done?
  319.     bne.s   LogoMain_MenuHideLoop   ; if not, branch
  320.    
  321.     jsr LogoMain_LoadMenu   ; load new menu
  322.     bra LogoMain_MenuAppearLoop
  323.  
  324. ; ---------------------------------------------------------------
  325. ; Menu hide loop 2
  326. ; ---------------------------------------------------------------
  327.  
  328. LogoMain_MenuHide2:
  329.     moveq   #$FFFFFFA1,d0
  330.     jsr PlaySound_Special   ; Play ding-dong sounda
  331.     move.b  Logo_MenuSize,d0
  332.     neg.b   d0
  333.     move.b  d0,Logo_MenuStatus
  334.     move.w  #8,Logo_PSBTimer
  335.     move.b  #$3F,PalEngine_FadeLen
  336.  
  337. LogoMain_MenuHideLoop2:
  338.     jsr WaitVSync
  339.     addq.w  #2,CamXPos      ; scroll bg
  340.     jsr LogoMain_BGParalax
  341.     jsr ObjectsLoad
  342.     jsr BuildSprites
  343.    
  344.     ; Move logo down
  345.     subq.w  #1,$FFFFF616
  346.  
  347.     ; Do events
  348.     subq.w  #1,Logo_PSBTimer
  349.     bpl.s   LogoMain_MenuHideLoop2
  350.     move.w  Logo_PSBTimer,d0
  351.  
  352.     cmpi.w  #-30,d0
  353.     bne.s   @0
  354.     moveq   #$FFFFFFE0,d0
  355.     jsr PlaySound_Special
  356.     bra LogoMain_MenuHideLoop2
  357.  
  358. @0  cmpi.w  #-180,d0
  359.     beq.s   @Quit
  360.  
  361.     ; Fade out BG
  362.     btst    #0,d0
  363.     bne LogoMain_MenuHideLoop2
  364.     lea sysPallete,a0
  365.     jsr Pal_SingleFadeFrom
  366.     bra.s   LogoMain_MenuHideLoop2
  367.  
  368. @Quit:  move.w  #$8C81,VDP_Ctrl     ; turn off SH
  369.     tst.b   SegaCDMode
  370.     beq.s   @Nope
  371.     moveq   #$FFFFFFE4,d0
  372.     jmp PlaySound       ; stop CDA
  373. @Nope   rts
  374.  
  375. ; ===============================================================
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387. ; ===============================================================
  388. ; ---------------------------------------------------------------
  389. ; Subroutine to load a menu
  390. ; ---------------------------------------------------------------
  391.                
  392. ypos = $A
  393. index = $1F
  394.  
  395. LogoMain_LoadMenu:
  396.     moveq   #0,d3           ; d3 = Frame Bank
  397.     tst.b   sysLang
  398.     beq.s   @0
  399.     moveq   #Logo_MenuFrames,d3
  400. @0
  401.     moveq   #0,d0
  402.     move.b  Logo_MenuID,d0      ; d0 = Menu ID
  403.     add.w   d0,d0
  404.     lea LogoMain_MenuElements,a1
  405.     add.w   (a1,d0),a1      ; get data pointer for this menu
  406.     move.w  (a1)+,Logo_TargetPos
  407.     move.b  (a1)+,Logo_MenuItemID   ; set default item
  408.     moveq   #0,d0
  409.     move.b  (a1)+,d0
  410.     move.b  d0,Logo_MenuStatus  ; set menu status for processing shit
  411.     move.b  d0,Logo_MenuSize
  412.     subq.w  #1,d0           ; d0 = Number of elements
  413.  
  414.     lea objSonic,a0
  415.     moveq   #$FFFFFF8F,d1
  416.     move.l  #Obj_MenuItem,d2
  417.  
  418. @CreateItem:
  419.     move.b  d1,(a0)
  420.     move.l  d2,obj(a0)      ; code offset
  421.     move.b  (a1)+,index(a0)
  422.     move.b  (a1)+,frame(a0)
  423.     add.b   d3,frame(a0)
  424.     move.w  (a1)+,ypos(a0)
  425.     lea $40(a0),a0      ; next object
  426.     dbf d0,@CreateItem
  427.     rts
  428.  
  429. ; ===============================================================
  430. ; ---------------------------------------------------------------
  431. ; Subroutine to control menu 'n' shit
  432. ; ---------------------------------------------------------------
  433.  
  434. LogoMain_ControlMenu:
  435.     move.b  Joypad|Press,d3
  436.     move.b  Logo_MenuItemID,d1
  437.     move.b  Logo_MenuSize,d2
  438.    
  439.     btst    #iDown,d3       ; Down pressed?
  440.     beq.s   @ChkUp          ; if not, branch
  441.     addq.b  #1,d1
  442.     cmp.b   d2,d1
  443.     bne.s   @SetNewItem
  444.     moveq   #0,d1
  445.     bra.s   @SetNewItem
  446.  
  447. @ChkUp  btst    #iUp,d3         ; Up pressed?
  448.     beq.s   @ChkSelect      ; if not, branch
  449.     subq.b  #1,d1
  450.     bpl.s   @SetNewItem      
  451.     subq.b  #1,d2           ; d2 = max item index
  452.     move.b  d2,d1
  453.  
  454. @SetNewItem:
  455.     move.b  d1,Logo_MenuItemID
  456.     moveq   #$FFFFFFCD,d0
  457.     jsr PlaySound_Special   ; play switch sound
  458.  
  459. @ChkSelect:
  460.     andi.b  #A+B+C+Start,d3     ; A/B/C/Start pressed?
  461.     rts
  462.  
  463. ; ===============================================================
  464. ; ---------------------------------------------------------------
  465. ; Subroutine to exeCUTE menu commanda
  466. ; ---------------------------------------------------------------
  467.  
  468. LogoMain_MenuExecute:
  469.     moveq   #0,d0
  470.     move.b  Logo_MenuID,d0
  471.     add.w   d0,d0
  472.     lea LogoMain_MenuCommands,a1
  473.     add.w   (a1,d0),a1      ; get array
  474.     move.b  Logo_MenuItemID,d0
  475.     add.w   d0,d0           ; d0 = 2x
  476.     move.w  d0,d1
  477.     add.w   d0,d0           ; d0 = 4x
  478.     add.w   d0,d0           ; d0 = 8x
  479.     add.w   d1,d0           ; d0 = 10x
  480.     adda.w  d0,a1           ; get commanda
  481.     move.w  (a1)+,Logo_MenuAnim_In
  482.     movea.l (a1)+,a2
  483.     pea (a2)            ; loop handler
  484.     movea.l (a1),a1
  485.     jmp (a1)            ; commanda handler
  486.  
  487.  
  488. ; ===============================================================
  489. ; ---------------------------------------------------------------
  490. ; Menu Datas
  491. ; ---------------------------------------------------------------
  492.  
  493. ; Intro Animations
  494. _FromBottom = $00
  495. _FromRight = $01
  496. _FromLeft = $02
  497.  
  498. ; Outro Animations
  499. _ToLeft = $00
  500. _ToRight = $01
  501. _ToBottom = $02
  502.  
  503. LogoMain_MenuCommands:
  504. @L  dc.w    MainMenu_Full_Cmd-@L    ; $00
  505.     dc.w    MainMenu_Locked_Cmd-@L  ; $01
  506.     dc.w    OptionsMenu_Cmd-@L  ; $02
  507.     dc.w    SRAMChoice_Cmd-@L   ; $03
  508.  
  509. LogoMain_MenuElements:
  510. @L  dc.w    MainMenu_Full-@L    ; $00
  511.     dc.w    MainMenu_Locked-@L  ; $01
  512.     dc.w    OptionsMenu-@L      ; $02
  513.     dc.w    SRAMChoice-@L       ; $03
  514. ; ---------------------------------------------------------------
  515.  
  516. MainMenu_Full:
  517.     dc.w    $18     ; Logo Position
  518.     dc.b    0       ; Default Item
  519.     dc.b    3       ; Size
  520.     dc.w    $0000, $120 ; Index/Frame, Y-pos
  521.     dc.w    $0101, $132 ;
  522.     dc.w    $0202, $144 ;
  523.    
  524. MainMenu_Full_Cmd:
  525.     ; PLAY
  526.     dc.b    0,_ToBottom         ; In/Out anim
  527.     dc.l    LogoMain_MenuHide2      ; Loop handler
  528.     dc.l    Hwnd_MainMenu_Play      ; Code handler
  529.  
  530.     ; CHALLENGES
  531.     dc.b    0,_ToBottom         ; In/Out anim
  532.     dc.l    LogoMain_MenuHide2      ; Loop handler
  533.     dc.l    Hwnd_MainMenu_Challenges    ; Code handler
  534.  
  535.     ; OPTIONS
  536.     dc.b    _FromRight,_ToLeft      ; In/Out anim
  537.     dc.l    LogoMain_MenuHide       ; Loop handler
  538.     dc.l    Hwnd_MainMenu_Options       ; Code handler
  539.  
  540. ; ---------------------------------------------------------------
  541. MainMenu_Locked:
  542.     dc.w    $18     ; Logo Position
  543.     dc.b    0       ; Default Item
  544.     dc.b    3       ; Size
  545.     dc.w    $0000, $120 ; Index/Frame, Y-pos
  546.     dc.w    $0107, $132 ;
  547.     dc.w    $0202, $144 ;
  548.  
  549. MainMenu_Locked_Cmd:
  550.     ; PLAY
  551.     dc.b    0,_ToBottom         ; In/Out anim
  552.     dc.l    LogoMain_MenuHide2      ; Loop handler
  553.     dc.l    Hwnd_MainMenu_Play      ; Code handler
  554.  
  555.     ; ? ? ?
  556.     dc.b    0,_ToBottom         ; In/Out anim
  557.     dc.l    LogoMain_MenuControlLoop    ; Loop handler
  558.     dc.l    Hwnd_Locked         ; Code handler
  559.  
  560.     ; OPTIONS
  561.     dc.b    _FromRight,_ToLeft      ; In/Out anim
  562.     dc.l    LogoMain_MenuHide       ; Loop handler
  563.     dc.l    Hwnd_MainMenu_Options       ; Code handler
  564.  
  565. ; ---------------------------------------------------------------
  566. OptionsMenu:
  567.     dc.w    $28     ; Logo Position
  568.     dc.b    0       ; Default Item
  569.     dc.b    4       ; Size
  570.     dc.w    $0003, $10E ; Index/Frame, Y-pos
  571.     dc.w    $0104, $120 ;
  572.     dc.w    $0205, $132 ;
  573.     dc.w    $0306, $144 ;
  574.    
  575. OptionsMenu_Cmd:
  576.     ; LANGUAGE
  577.     dc.b    _FromRight,_ToRight     ; In/Out anim
  578.     dc.l    LogoMain_MenuHide       ; Loop handler
  579.     dc.l    Hwnd_Options_Lang       ; Code handler
  580.  
  581.     ; CLEAR SRAM
  582.     dc.b    _FromRight,_ToLeft      ; In/Out anim
  583.     dc.l    LogoMain_MenuHide       ; Loop handler
  584.     dc.l    Hwnd_Options_ClearSRAM      ; Code handler
  585.  
  586.     ; SOUND TEST
  587.     dc.b    0,_ToLeft           ; In/Out anim
  588.     dc.l    LogoMain_MenuHide2      ; Loop handler
  589.     dc.l    Hwnd_Options_SoundTest      ; Code handler
  590.  
  591.     ; BACK
  592.     dc.b    _FromLeft,_ToRight      ; In/Out anim
  593.     dc.l    LogoMain_MenuHide       ; Loop handler
  594.     dc.l    Hwnd_Options_Back       ; Code handler
  595.  
  596. ; ---------------------------------------------------------------
  597. SRAMChoice:
  598.     dc.w    $28     ; Logo Position
  599.     dc.b    1       ; Default Item
  600.     dc.b    2       ; Size
  601.     dc.w    $0008, $128 ; Index/Frame, Y-pos
  602.     dc.w    $0109, $138 ;
  603.  
  604. SRAMChoice_Cmd:
  605.     ; YES
  606.     dc.b    0,_ToBottom         ; In/Out anim
  607.     dc.l    LogoMain_MenuHide2      ; Loop handler
  608.     dc.l    Hwnd_SRAMChoice_Yes     ; Code handler
  609.  
  610.     ; NO
  611.     dc.b    _FromLeft,_ToRight      ; In/Out anim
  612.     dc.l    LogoMain_MenuHide       ; Loop handler
  613.     dc.l    Hwnd_SRAMChoice_No      ; Code handler
  614.  
  615.  
  616. ; ---------------------------------------------------------------
  617. ; Menu Handlers
  618. ; ---------------------------------------------------------------
  619.  
  620. Hwnd_MainMenu_Play:
  621.     clr.b   $FFFFFE30       ; clear lamp post counter
  622.     clr.b   sysLevelMission     ; clear mission
  623.     move.b  #3,$FFFFFE12        ; set lives counter to 3
  624.  
  625.     moveq   #$08,d0         ; --> Level Select
  626.     tst.b   sysGameComplete     ; was the game completed?
  627.     bne.s   @0          ; if yes, branch
  628.     moveq   #$0C,d0         ; --> Level
  629.     move.w  #$0000,sysLevelID   ; --> GHZ 1
  630.  
  631. @0  tst.b   Logo_CheatDone      ; Debug menu cheat on?
  632.     beq.s   @1          ; if not, branch
  633.     moveq   #$20,d0         ; --> Debug Menu
  634. @1  move.b  d0,GameMode
  635.     move.b  #$04,LastGameMode
  636.     rts
  637.  
  638. ; ---------------------------------------------------------------
  639. Hwnd_MainMenu_Challenges:
  640.     move.b  #$14,GameMode
  641.     rts
  642.  
  643. ; ---------------------------------------------------------------
  644. Hwnd_MainMenu_Options:
  645.     move.b  #$02,Logo_MenuID
  646.     rts
  647.  
  648. ; ---------------------------------------------------------------
  649. Hwnd_Locked:
  650.     moveq   #$FFFFFFD4,d0       ; play locked sounda
  651.     jmp PlaySound
  652.  
  653. ; ---------------------------------------------------------------
  654. Hwnd_Options_Lang:
  655.     move.b  sysLang,d0
  656.     not.b   d0
  657.     andi.b  #1,d0
  658.     move.b  d0,sysLang
  659.     jmp SRAM_Save
  660.  
  661. ; ---------------------------------------------------------------
  662. Hwnd_Options_ClearSRAM:
  663.     lea objSonic+$40,a0     ; get DeleteProgress object
  664.     move.l  #MenuItem_Hide_MarkGone,obj(a0) ; delete it...
  665.     move.l  #Obj_SRAMChoice_Title,d1
  666.     jsr CreateObject2       ; create object as (A0) child
  667.     move.w  $A(a0),$A(a1)       ; fix ypos
  668.     move.b  frame(a0),frame(a1)
  669.     move.b  #$03,Logo_MenuID    ; change menus
  670.     rts
  671.  
  672. Hwnd_SRAMChoice_Yes:
  673.     move.b  #$00,GameMode
  674.     jmp SRAM_SetDefaults
  675.    
  676. Hwnd_SRAMChoice_No:
  677.     move.b  #$02,Logo_MenuID
  678.     rts
  679.  
  680. ; ---------------------------------------------------------------
  681. Hwnd_Options_SoundTest:
  682.     move.b  #$18,GameMode
  683.     rts
  684.  
  685. ; ---------------------------------------------------------------
  686. Hwnd_Options_Back:
  687.     moveq   #$00,d1     ; Missions locked
  688.     tst.b   sysGameComplete
  689.     bne.s   @0
  690.     moveq   #$01,d1     ; Missions unlocked
  691. @0  move.b  d1,Logo_MenuID
  692.     rts
  693.  
  694.  
  695. ; ===============================================================
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714. ; ===============================================================
  715. ; ---------------------------------------------------------------
  716. ; Subroutine to enter debugger menu cheat
  717. ; ---------------------------------------------------------------
  718.  
  719. LogoMain_EnterCheat:
  720.     tst.b   Logo_CheatDone      ; was the cheat marked as entered?
  721.     bne.s   @Return         ; if yeah, branch
  722.    
  723.     move.b  Joypad|Press,d0
  724.     beq.s   @Return         ; if no input was done, branch
  725.     moveq   #0,d1
  726.     move.b  Logo_CheatPos,d1
  727.     cmp.b   @CheatData(pc,d1),d0    ; is the button correct?
  728.     beq.s   @NextPos        ; if yeah, branch
  729.     moveq   #-1,d1          ; reset CheatPos
  730.  
  731. @NextPos:
  732.     addq.b  #1,d1
  733.     move.b  d1,Logo_CheatPos
  734.     cmpi.b  #@CheatData_End-@CheatData,d1
  735.     bne.s   @Return
  736.     st.b    Logo_CheatDone
  737.     moveq   #$FFFFFFCE,d0
  738.     jmp PlaySound_Special
  739.  
  740. @Return:
  741.     rts
  742.  
  743. ; ---------------------------------------------------------------
  744. @CheatData:
  745.     dc.b    a;B, Left, A, B, Left, A, B, Left, A
  746. @CheatData_End:
  747.     even
  748.  
  749. ; ===============================================================
  750. ; ---------------------------------------------------------------
  751. ; Logo BG Deformation
  752. ; ---------------------------------------------------------------
  753.  
  754. LogoMain_BGParalax:
  755.     addq.w  #1,LevelTimer       ; scroll water
  756.     lea $FFFFCC00,a1        ; a1 => H-Scroll Buffer
  757.     moveq   #60,d0
  758.     move.w  CamXPos,d1      ; d1 -> Cam Xpos
  759.     swap    d0
  760.  
  761. ; Sky & Far Icebergs    ----------------------------------
  762.     move.w  #15,d6;#130-1,d6        ; do 130 lines
  763.     move.w  d1,d0           ; d0 -> CamXpos
  764.     asr.w   #4,d0           ; d0 -> CamXpos / 16    ~~ $10
  765.     neg.w   d0
  766.  
  767. @loop:  move.l  d0,(a1)+
  768.     move.l  d0,(a1)+
  769.     move.l  d0,(a1)+
  770.     move.l  d0,(a1)+
  771.     move.l  d0,(a1)+
  772.     move.l  d0,(a1)+
  773.     move.l  d0,(a1)+
  774.     move.l  d0,(a1)+
  775.     dbf d6,@loop
  776.     move.l  d0,(a1)+
  777.     move.l  d0,(a1)+
  778.  
  779. ; Near Iceburgs     -----------------------------------
  780.     moveq   #3,d6;#37-1,d6      ; do 37 lines
  781.     move.w  d1,d0
  782.     asr.w   #3,d0           ; d0 -> CamXPos / 8 ~~ $20
  783.     neg.w   d0
  784.  
  785. @loop2: move.l  d0,(a1)+
  786.     move.l  d0,(a1)+
  787.     move.l  d0,(a1)+
  788.     move.l  d0,(a1)+
  789.     move.l  d0,(a1)+
  790.     move.l  d0,(a1)+
  791.     move.l  d0,(a1)+
  792.     move.l  d0,(a1)+
  793.     dbf d6,@loop2
  794.     move.l  d0,(a1)+
  795.     move.l  d0,(a1)+
  796.     move.l  d0,(a1)+
  797.     move.l  d0,(a1)+
  798.     move.l  d0,(a1)+
  799.  
  800. ; Iceburg Shadows in the water  -------------------------
  801.     moveq   #9-1,d6         ; do 9 lines
  802.     addq.b  #1,($FFFFF718).w
  803.     moveq   #0,d3
  804.     move.b  ($FFFFF718).w,d3    ; d3 -> Water Mirror wave value
  805.     lsr.b   #3,d3           ; d3 is updated every 8th frame
  806.     move.w  d0,d2
  807.  
  808. @loop3: andi.b  #$F,d3
  809.     move.b  @WaterWave(pc,d3.w),d0
  810.     ext.w   d0
  811.     add.w   d2,d0
  812.     move.l  d0,(a1)+
  813.     addq.b  #3,d3
  814.     dbf d6,@loop3
  815.     bra.s   @DeformWater
  816.  
  817. ; ------------------------------------------------------
  818. @WaterWave:
  819.     dc.b    0, 1, 2, 2, 1, 1, 0, 0, -1, -1, -2, -1, 0, 1, 2, 2
  820. ; ------------------------------------------------------
  821.  
  822. @DeformWater:
  823.     lea $28*4(a1),a1
  824.     move.w  ($FFFFFE04).w,d2    ; d2 -> Frames Counter
  825.     asr.w   d2          ; d2 -> Frames / 2
  826.     add.w   d2,d1           ; d1 -> CamXpos + (Frames / 2)
  827.     swap    d1
  828.     clr.w   d1
  829.     asr.l   d1          ; d1 -> (CamXpos + (Frames / 2)) / 2
  830.     andi.l  #$7FFFFF,d1     ; deformation period is $80 pixels
  831.     neg.l   d1
  832.     move.l  d1,d2           ; d2 -> Near Edge value
  833.     asr.l   #6,d2           ; d2 -> Deform Value (Near Edge / 64)
  834.     moveq   #$27,d6         ; do 40 lines
  835.  
  836. @loop4: swap    d1
  837.     move.w  d1,-(a1)
  838.     move.w  d1,-(a1)
  839.     swap    d1
  840.     sub.l   d2,d1
  841.     dbf d6,@loop4
  842.  
  843.     rts
  844.  
  845. ; ===============================================================
  846. ; ---------------------------------------------------------------
  847. ; Animates Press start button message
  848. ; ---------------------------------------------------------------
  849.  
  850. LogoMain_AnimatePSB:
  851.     addi.w  #$C0,Logo_PSBTimer  ; animation speed (0.75)
  852.     move.b  Logo_PSBTimer,d0
  853.     btst    #4,d0
  854.     beq.s   @skip
  855.     not.b   d0          ; negate fading state (for backwards fading)
  856. @skip:
  857.     move.b  d0,PalEngine_FadeFactor
  858.     move.b  #$F,PalEngine_FadeLen
  859.     lea sysPallete+$40,a0   ; load palette row 2
  860.     lea $80(a0),a1
  861.     jmp Pal_SingleFadeWhite
  862.  
  863. ; ===============================================================
  864. ; ---------------------------------------------------------------
  865. ; Renders Press start button message
  866. ; ---------------------------------------------------------------
  867.  
  868. _startY = $B0
  869.  
  870. LogoMain_RenderPSB:
  871.  
  872.     lea LogoMain_PSBMask+192,a0 ; a0 = PSB Mask Base (RU)
  873.     tst.b   sysLang
  874.     beq.s   @Lng
  875.     lea LogoMain_PSBMask,a0 ; a0 = PSB Mask Base (EN)
  876. @Lng    ; =             ; a1 = Mappings
  877.     lea Logo_PSBTiles,a2    ; a2 = Output Tiles Base
  878.     ; =             ; a3 = Output Tiles Pos
  879.     lea $FFFFCC00+_startY*4,a4  ; a4 = Scroll Array
  880.     lea Logo_BGTiles,a5     ; a5 = Source Tiles
  881.     lea LogoMain_PSBMask,a6 ; a6 = PSB Mask Pos
  882.  
  883.     moveq   #$F,d4          ; d4 = Mask selector
  884.     moveq   #$20,d5         ; d5 = Tile size (add factor)
  885.     moveq   #0,d7           ; d7 = Row factor (0-$18)
  886.  
  887. @RenderScanline:
  888.     lea Logo_BGMap+$B1A,a1
  889.     lea (a0),a6         ; get psb mask pos
  890.     lea (a2),a3         ; get tiles pos
  891.     move.w  (a4),d0         ; get scroll value
  892.     moveq   #20,d6          ; d6 = Number of tiles in row
  893.     neg.w   d0          ; d0 = ScrollPos
  894.  
  895.     ; Fill tiles with zero until start tile
  896.     moveq   #0,d1
  897. @0  subq.w  #8,d0
  898.     bmi.s   @1
  899.     move.l  d1,(a3)         ; fill tile row with zero
  900.     adda.w  d5,a3           ; next tile
  901.     addq.w  #2,a1           ; next mappings item
  902.     bra.s   @0
  903.  
  904.     ; Prepare to render the first tile
  905. @1  not.w   d0          ; d0 = Pixels to render for Mask in the first tile
  906.     move.b  (a6)+,d1        ; d1 = 1bpp Mask
  907.     moveq   #7,d2           ; d2 = 1bpp refresh counter
  908.  
  909.     ; Render tile loop
  910. @RenderTileRow:
  911.     moveq   #0,d3           ; d3 = Final Pixel mask
  912.  
  913. @MaskLoop:
  914.     lsl.l   #4,d3           ; next pixel in mask
  915.     add.b   d1,d1
  916.     bcc.s   @2          ; branch if current bit in mask is 0
  917.     or.w    d4,d3
  918. @2  dbf d2,@3           ; branch if 1bpp mask shouldn't be refreshed
  919.     move.b  (a6)+,d1        ; fetch new mask
  920.     moveq   #7,d2
  921. @3  dbf d0,@MaskLoop
  922.  
  923.     tst.l   d3          ; is mask zero?
  924.     bne.s   @GetTile        ; if not, branch
  925.     move.l  d3,(a3)         ; render empty line
  926.     add.w   d5,a3           ; next tile
  927.     moveq   #7,d0           ; restore mask counter
  928.     addq.w  #2,a1           ; next mappings item
  929.     dbf d6,@RenderTileRow
  930.     bra.s   @NextScanline
  931.  
  932. @GetTile:
  933.     move.w  (a1)+,d0        ; d0 = Mappings Entry
  934.     subq.w  #1,d0
  935.     andi.w  #$FFF,d0
  936.     bclr    #11,d0          ; reset _fh bit
  937.     bra.s   @ApplyMask_Normal   ; if tile wasn't flipped, branch  ########## BEQ!!!
  938.  
  939. @ApplyMask_HFlip:
  940.     lsl.w   #5,d0           ; tile address
  941.     add.w   d7,d0           ; add row factor
  942.     move.l  (a5,d0),d0      ; d0 = 0123 4567
  943.     ror.b   #4,d0           ; d0 = 0123 4576
  944.     rol.w   #8,d0           ; d0 = 0123 7645
  945.     ror.b   #4,d0           ; d0 = 0123 7654
  946.     swap    d0          ; d0 = 7654 0123
  947.     ror.b   #4,d0           ; d0 = 7654 0132
  948.     rol.w   #8,d0           ; d0 = 7654 3201
  949.     ror.b   #4,d0           ; d0 = 7654 3210
  950.     and.l   d3,d0           ; apply mask
  951.     move.l  d0,(a3)         ; output row
  952.     add.w   d5,a3           ; next tile
  953.     moveq   #7,d0           ; restore mask counter
  954.     dbf d6,@RenderTileRow
  955.     bra.s   @NextScanline
  956.  
  957. @ApplyMask_Normal:
  958.     lsl.w   #5,d0           ; tile address
  959.     add.w   d7,d0           ; add row factor
  960.     move.l  (a5,d0),d0      ; get tile row
  961.     and.l   d3,d0           ; apply mask
  962.     move.l  d0,(a3)         ; output row
  963.     add.w   d5,a3           ; next tile
  964.     moveq   #7,d0           ; restore mask counter
  965.     dbf d6,@RenderTileRow
  966.  
  967. @NextScanline:
  968.     addi.w  #24,a0  ;######
  969.     addq.w  #4,a2           ; next row in output tiles
  970.     addq.w  #4,a4           ; next scroll pos
  971.     addq.w  #4,d7           ; next row factor
  972.     cmp.w   d5,d7           ; was the row of tiles completely rendered?
  973.     bcs @RenderScanline     ; branch if not
  974.  
  975.     rts
  976.  
  977. ; ---------------------------------------------------------------
  978. LogoMain_PSBMask:
  979.     incbin  '#modes\logo\LogoMain_PSBMask.bin'
  980.     even
  981.  
  982. ; ===============================================================
  983.  
  984.    
  985.    
  986.    
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998. ; ===============================================================
  999. ; ---------------------------------------------------------------
  1000. ; Object: Menu Items
  1001. ; ---------------------------------------------------------------
  1002.  
  1003. xpos = 8
  1004. ypos = $A
  1005. index = $1F
  1006. xpos2 = $30
  1007. ypos2 = $34
  1008. acc = $38
  1009. timer = $3A
  1010.  
  1011. Obj_MenuItem:
  1012.  
  1013.     ; Select appear routine according to menu animation
  1014.     moveq   #0,d0
  1015.     move.b  Logo_MenuAnim_In,d0
  1016.     add.w   d0,d0
  1017.     add.w   d0,d0
  1018.     move.l  @AppearRoutines(pc,d0),obj(a0)
  1019.     move.l  #ObjMap_MenuItems,maps(a0)
  1020.     rts
  1021.    
  1022. @AppearRoutines:
  1023.     dc.l    MenuItem_Appear_Bottom
  1024.     dc.l    MenuItem_Appear_Right
  1025.     dc.l    MenuItem_Appear_Left
  1026.  
  1027. ; ---------------------------------------------------------------
  1028. ; Menu appears from bottom
  1029. ; ---------------------------------------------------------------
  1030.  
  1031. MenuItem_Appear_Bottom:
  1032.     move.l  #@Appear_Process,obj(a0)
  1033.     move.w  #$80+160,xpos(a0)
  1034.  
  1035.     ; Setup entry position and speeds
  1036.     moveq   #0,d0
  1037.     move.b  index(a0),d0
  1038.     add.w   d0,d0       ; d0 = index*2
  1039.     move.w  d0,d1
  1040.     add.w   d0,d0       ; d0 = index*4
  1041.     add.w   d1,d0       ; d0 = index*6
  1042.     lea @Appear_Data(pc,d0),a1
  1043.     move.w  ypos(a0),d0
  1044.     add.w   (a1)+,d0
  1045.     move.w  d0,ypos2(a0)
  1046.     move.w  (a1)+,yvel(a0)
  1047.     move.w  (a1)+,acc(a0)
  1048.     rts
  1049.  
  1050. ; ---------------------------------------------------------------
  1051. @Appear_Process:
  1052.     move.w  yvel(a0),d1
  1053.     bmi MenuItem_Goto_ProcessNormal
  1054.     move.w  d1,d0
  1055.     ext.l   d0
  1056.     lsl.l   #8,d0
  1057.     sub.l   d0,ypos2(a0)
  1058.  
  1059.     sub.w   acc(a0),d1
  1060.     move.w  d1,yvel(a0)
  1061.  
  1062.     move.w  ypos2(a0),d0
  1063.     move.w  d0,ypos(a0)
  1064.     cmpi.w  #$80+240,d0
  1065.     bls MenuItem_Display
  1066.     rts    
  1067.  
  1068. ; ---------------------------------------------------------------
  1069. @Appear_Data:
  1070.     ;   Position    Start Speed Acceleration
  1071.     dc.w    $80+4,      $800,       $40
  1072.     dc.w    $100+$8,    $1000,      $80
  1073.     dc.w    $180+$C,    $1800,      $C0
  1074.  
  1075. ; ---------------------------------------------------------------
  1076. ; Menu appears from right
  1077. ; ---------------------------------------------------------------
  1078.  
  1079. MenuItem_Appear_Right:
  1080.     move.w  #-$2000,xvel(a0)
  1081.     move.w  #$80+160+$100,xpos2(a0)
  1082.     move.b  index(a0),d0
  1083.     add.b   d0,d0
  1084.     add.b   d0,d0
  1085.     move.b  d0,timer(a0)
  1086.     move.l  #@Appear_Wait,obj(a0)
  1087.  
  1088. @Appear_Wait:
  1089.     subq.b  #1,timer(a0)
  1090.     bmi.s   @Appear_Process
  1091.     rts
  1092.  
  1093. @Appear_Process:
  1094.     move.w  #$1E8,d1
  1095.     bsr MenuItem_MoveXAcc
  1096.     tst.w   xvel(a0)
  1097.     bmi.s   MenuItem_Display
  1098.     move.l  #MenuItem_Appear_ChkPos,obj(a0)
  1099.     bra.s   MenuItem_Appear_ChkPos
  1100.  
  1101. ; ---------------------------------------------------------------
  1102. ; Menu appears from left
  1103. ; ---------------------------------------------------------------
  1104.  
  1105. MenuItem_Appear_Left:
  1106.     move.w  #$2000,xvel(a0)
  1107.     move.w  #$80+160-$100,xpos2(a0)
  1108.     move.b  index(a0),d0
  1109.     add.b   d0,d0
  1110.     add.b   d0,d0
  1111.     move.b  d0,timer(a0)
  1112.     move.l  #@Appear_Wait,obj(a0)
  1113.  
  1114. @Appear_Wait:
  1115.     subq.b  #1,timer(a0)
  1116.     bmi.s   @Appear_Process
  1117.     rts
  1118.  
  1119. @Appear_Process:
  1120.     move.w  #-$1E8,d1
  1121.     bsr MenuItem_MoveXAcc
  1122.     tst.w   xvel(a0)
  1123.     bpl.s   MenuItem_Display
  1124.     move.l  #MenuItem_Appear_ChkPos,obj(a0)
  1125.  
  1126. MenuItem_Appear_ChkPos:
  1127.     moveq   #1,d0
  1128.     cmpi.w  #$80+160,xpos(a0)
  1129.     beq.s   MenuItem_Goto_ProcessNormal
  1130.     bcs.s   @Move
  1131.     moveq   #-1,d0
  1132. @Moveadd.w   d0,xpos(a0)
  1133.     bra.s   MenuItem_Display
  1134.  
  1135. ; ---------------------------------------------------------------
  1136. MenuItem_Goto_ProcessNormal:
  1137.     move.l  #MenuItem_ProcessNormal,obj(a0)
  1138.     subq.b  #1,Logo_MenuStatus
  1139.  
  1140. ; ---------------------------------------------------------------
  1141. ; Menu item works in menu
  1142. ; ---------------------------------------------------------------
  1143.  
  1144. MenuItem_ProcessNormal:
  1145.     tst.b   Logo_MenuStatus
  1146.     bmi.s   MenuItem_Hide
  1147.  
  1148. ; ---------------------------------------------------------------
  1149. MenuItem_Display:
  1150.     move.w  #$8000+_VRAM_MenuFont_Pat,d1
  1151.     move.b  Logo_MenuItemID,d0
  1152.     cmp.b   index(a0),d0        ; is this item selected?
  1153.     beq.s   @skip           ; if yes, branch
  1154.     addi.w  #pal4,d1
  1155. @skip   move.w  d1,art(a0)
  1156.  
  1157. MenuItem_Display2:
  1158.     jmp DisplaySprite
  1159.  
  1160. ; ---------------------------------------------------------------
  1161.  
  1162. MenuItem_Hide:
  1163.  
  1164.     ; Select hide routine according to menu animation
  1165.     moveq   #0,d0
  1166.     move.b  Logo_MenuAnim_Out,d0
  1167.     add.w   d0,d0
  1168.     add.w   d0,d0
  1169.     move.l  @HideRoutines(pc,d0),obj(a0)
  1170.     bra.s   MenuItem_Display2
  1171.    
  1172. @HideRoutines:
  1173.     dc.l    MenuItem_Hide_Left
  1174.     dc.l    MenuItem_Hide_Right
  1175.     dc.l    MenuItem_Hide_Bottom
  1176.  
  1177. ; ---------------------------------------------------------------
  1178. ; Menu Items move left
  1179. ; ---------------------------------------------------------------
  1180.  
  1181. MenuItem_Hide_Left:
  1182.     move.w  #-$180,acc(a0)
  1183.    
  1184. MenuItem_Hide_Directional:
  1185.     move.b  index(a0),d0
  1186.     add.b   d0,d0
  1187.     add.b   d0,d0
  1188.     move.b  d0,timer(a0)
  1189.     move.l  #@Hide_WaitTurn,obj(a0)
  1190.  
  1191. ; ---------------------------------------------------------------
  1192. @Hide_WaitTurn:
  1193.     subq.b  #1,timer(a0)        ; is it time to hide?
  1194.     bpl.s   MenuItem_Display2   ; if nop, branch
  1195.     move.w  xpos(a0),xpos2(a0)
  1196.     move.l  #@Hide_Process,obj(a0)
  1197.  
  1198. ; ---------------------------------------------------------------
  1199. @Hide_Process:
  1200.     move.w  acc(a0),d1
  1201.     bsr.s   MenuItem_MoveXAcc
  1202.     move.w  xpos(a0),d0
  1203.     lsl.w   #6,d0
  1204.     bpl MenuItem_Display2
  1205.     bra.s   MenuItem_Hide_MarkGone
  1206.  
  1207. ; ---------------------------------------------------------------
  1208. ; Menu Items move right
  1209. ; ---------------------------------------------------------------
  1210.  
  1211. MenuItem_Hide_Right:
  1212.     move.w  #$180,acc(a0)
  1213.     bra MenuItem_Hide_Directional
  1214.  
  1215. ; ---------------------------------------------------------------
  1216. ; Menu Items move bottom
  1217. ; ---------------------------------------------------------------
  1218.  
  1219. MenuItem_Hide_Bottom:
  1220.     moveq   #$40/$20,d0
  1221.     add.b   index(a0),d0
  1222.     lsl.w   #5,d0           ; d0 *= $20
  1223.     move.w  d0,acc(a0)
  1224.     move.w  ypos(a0),ypos2(a0)
  1225.     clr.w   yvel(a0)
  1226.     move.l  #@Hide_Process,obj(a0)
  1227.    
  1228. @Hide_Process:
  1229.     move.w  yvel(a0),d1
  1230.     move.w  d1,d0
  1231.     ext.l   d0
  1232.     lsl.l   #8,d0
  1233.     add.l   d0,ypos2(a0)
  1234.  
  1235.     add.w   acc(a0),d1
  1236.     move.w  d1,yvel(a0)
  1237.  
  1238.     move.w  ypos2(a0),d0
  1239.     move.w  d0,ypos(a0)
  1240.     cmpi.w  #$80+240,d0
  1241.     bls MenuItem_Display
  1242.  
  1243. MenuItem_Hide_MarkGone:
  1244.     addq.b  #1,Logo_MenuStatus  ; mark obj as gone
  1245.     jmp DeleteObject
  1246.  
  1247. ; ---------------------------------------------------------------
  1248. ; Subroutine to make item move with acceleration
  1249. ; ---------------------------------------------------------------
  1250.  
  1251. MenuItem_MoveXAcc:
  1252.     move.w  xvel(a0),d0
  1253.     add.w   d1,d0
  1254.     move.w  d0,xvel(a0)
  1255.     ext.l   d0
  1256.     lsl.l   #8,d0
  1257.     add.l   d0,xpos2(a0)
  1258.     move.w  xpos2(a0),xpos(a0)
  1259.     rts
  1260.  
  1261.  
  1262. ; ---------------------------------------------------------------
  1263. ObjMap_MenuItems:
  1264. @L  dc.w    @PLAY_RU-@L ; $00
  1265.     dc.w    @CHAL_RU-@L ; $01
  1266.     dc.w    @OPTS_RU-@L ; $02
  1267.     dc.w    @LANG_RU-@L ; $03
  1268.     dc.w    @SRAM_RU-@L ; $04
  1269.     dc.w    @SNDT_RU-@L ; $05
  1270.     dc.w    @BACK_RU-@L ; $06
  1271.     dc.w    @LOCKED-@L  ; $07
  1272.     dc.w    @YES_RU-@L  ; $08
  1273.     dc.w    @NO_RU-@L   ; $09
  1274.  
  1275.     dc.w    @PLAY_EN-@L ; $00+Logo_MenuFrames
  1276.     dc.w    @CHAL_EN-@L ; $01+Logo_MenuFrames
  1277.     dc.w    @OPTS_EN-@L ; $02+Logo_MenuFrames
  1278.     dc.w    @LANG_EN-@L ; $03+Logo_MenuFrames
  1279.     dc.w    @SRAM_EN-@L ; $04+Logo_MenuFrames
  1280.     dc.w    @SNDT_EN-@L ; $05+Logo_MenuFrames
  1281.     dc.w    @BACK_EN-@L ; $06+Logo_MenuFrames
  1282.     dc.w    @LOCKED-@L  ; $07+Logo_MenuFrames
  1283.     dc.w    @YES_EN-@L  ; $08+Logo_MenuFrames
  1284.     dc.w    @NO_EN-@L   ; $09+Logo_MenuFrames
  1285.    
  1286. Logo_MenuFrames equ (*-@l)/4        ; define number of frames for the menu
  1287.  
  1288. ; ---------------------------------------------------------------
  1289. @LOCKED:
  1290. Xdisp = $28/2
  1291.  
  1292.     dc.b    3
  1293.     ;    YY   WWHH        TT   XX
  1294.     dc.b    $F8, %0001, $00, $3C, $00-Xdisp ; ?
  1295.     dc.b    $F8, %0001, $00, $3C, $10-Xdisp ; ?
  1296.     dc.b    $F8, %0001, $00, $3C, $20-Xdisp ; ?
  1297.  
  1298. ; ---------------------------------------------------------------
  1299. @PLAY_EN:
  1300. Xdisp = $10
  1301.  
  1302.     dc.b    4
  1303.     ;    YY   WWHH        TT   XX
  1304.     dc.b    $F8, %0001, $00, $5E, $00-Xdisp ; P
  1305.     dc.b    $F8, %0001, $00, $56, $08-Xdisp ; L
  1306.     dc.b    $F8, %0001, $00, $40, $10-Xdisp ; A
  1307.     dc.b    $F8, %0001, $00, $70, $18-Xdisp ; Y
  1308.  
  1309. @CHAL_EN:
  1310. Xdisp = $50/2
  1311.  
  1312.     dc.b    10
  1313.     ;    YY   WWHH        TT   XX
  1314.     dc.b    $F8, %0001, $00, $44, $00-Xdisp ; C
  1315.     dc.b    $F8, %0001, $00, $4E, $08-Xdisp ; H
  1316.     dc.b    $F8, %0001, $00, $40, $10-Xdisp ; A
  1317.     dc.b    $F8, %0001, $00, $56, $18-Xdisp ; L
  1318.     dc.b    $F8, %0001, $00, $56, $20-Xdisp ; L
  1319.     dc.b    $F8, %0001, $00, $48, $28-Xdisp ; E
  1320.     dc.b    $F8, %0001, $00, $5A, $30-Xdisp ; N
  1321.     dc.b    $F8, %0001, $00, $4C, $38-Xdisp ; G
  1322.     dc.b    $F8, %0001, $00, $48, $40-Xdisp ; E
  1323.     dc.b    $F8, %0001, $00, $64, $48-Xdisp ; S
  1324.  
  1325. @OPTS_EN:
  1326. Xdisp = $38/2
  1327.  
  1328.     dc.b    6
  1329.     ;    YY   WWHH        TT   XX
  1330.     dc.b    $F8, %0101, $00, $5C, $00-Xdisp ; 0P
  1331.     dc.b    $F8, %0001, $00, $66, $10-Xdisp ; T
  1332.     dc.b    $F8, %0001, $00, $50, $18-Xdisp ; I
  1333.     dc.b    $F8, %0001, $00, $5C, $20-Xdisp ; 0
  1334.     dc.b    $F8, %0001, $00, $5A, $28-Xdisp ; N
  1335.     dc.b    $F8, %0001, $00, $64, $30-Xdisp ; S
  1336.    
  1337.  
  1338. @LANG_EN:
  1339. Xdisp = $88/2
  1340.  
  1341.     dc.b    16
  1342.     ;    YY   WWHH        TT   XX
  1343.     dc.b    $F8, %0001, $00, $56, $00-Xdisp ; L
  1344.     dc.b    $F8, %0001, $00, $40, $08-Xdisp ; A
  1345.     dc.b    $F8, %0001, $00, $5A, $10-Xdisp ; N
  1346.     dc.b    $F8, %0001, $00, $4C, $18-Xdisp ; G
  1347.     dc.b    $F8, %0001, $00, $68, $20-Xdisp ; U
  1348.     dc.b    $F8, %0001, $00, $40, $28-Xdisp ; A
  1349.     dc.b    $F8, %0001, $00, $4C, $30-Xdisp ; G
  1350.     dc.b    $F8, %0001, $00, $48, $38-Xdisp ; E
  1351.     dc.b    $F8, %0001, $00, $32, $40-Xdisp ; :
  1352.  
  1353.     dc.b    $F8, %0001, $00, $48, $50-Xdisp ; E
  1354.     dc.b    $F8, %0001, $00, $5A, $58-Xdisp ; N
  1355.     dc.b    $F8, %0001, $00, $4C, $60-Xdisp ; G
  1356.     dc.b    $F8, %0001, $00, $56, $68-Xdisp ; L
  1357.     dc.b    $F8, %0001, $00, $50, $70-Xdisp ; I
  1358.     dc.b    $F8, %0001, $00, $64, $78-Xdisp ; S
  1359.     dc.b    $F8, %0001, $00, $4E, $80-Xdisp ; H
  1360.    
  1361. @SRAM_EN:
  1362. Xdisp = $80/2
  1363.  
  1364.     dc.b    14
  1365.     ;    YY   WWHH        TT   XX
  1366.     dc.b    $F8, %0001, $00, $46, $00-Xdisp ; D
  1367.     dc.b    $F8, %0001, $00, $48, $08-Xdisp ; E
  1368.     dc.b    $F8, %0001, $00, $56, $10-Xdisp ; L
  1369.     dc.b    $F8, %0001, $00, $48, $18-Xdisp ; E
  1370.     dc.b    $F8, %0001, $00, $66, $20-Xdisp ; T
  1371.     dc.b    $F8, %0001, $00, $48, $28-Xdisp ; E
  1372.  
  1373.     dc.b    $F8, %0001, $00, $64, $38-Xdisp ; S
  1374.     dc.b    $F8, %0001, $00, $40, $40-Xdisp ; A
  1375.     dc.b    $F8, %0001, $00, $6A, $48-Xdisp ; V
  1376.     dc.b    $F8, %0001, $00, $48, $50-Xdisp ; E
  1377.  
  1378.     dc.b    $F8, %0001, $00, $46, $60-Xdisp ; D
  1379.     dc.b    $F8, %0001, $00, $40, $68-Xdisp ; A
  1380.     dc.b    $F8, %0001, $00, $66, $70-Xdisp ; T
  1381.     dc.b    $F8, %0001, $00, $40, $78-Xdisp ; A
  1382.    
  1383. @SNDT_EN:
  1384. Xdisp = $50/2
  1385.  
  1386.     dc.b    8
  1387.     ;    YY   WWHH        TT   XX
  1388.     dc.b    $F8, %0001, $00, $64, $00-Xdisp ; S
  1389.     dc.b    $F8, %0001, $00, $5C, $08-Xdisp ; 0
  1390.     dc.b    $F8, %0001, $00, $68, $10-Xdisp ; U
  1391.     dc.b    $F8, %0001, $00, $5A, $18-Xdisp ; N
  1392.     dc.b    $F8, %0001, $00, $46, $20-Xdisp ; D
  1393.  
  1394.     dc.b    $F8, %0001, $00, $66, $30-Xdisp ; T
  1395.     dc.b    $F8, %0001, $00, $48, $38-Xdisp ; E
  1396.     dc.b    $F8, %0101, $00, $64, $40-Xdisp ; ST
  1397.    
  1398. @BACK_EN:
  1399. Xdisp = $20/2
  1400.  
  1401.     dc.b    4
  1402.     ;    YY   WWHH        TT   XX
  1403.     dc.b    $F8, %0001, $00, $42, $00-Xdisp ; B
  1404.     dc.b    $F8, %0001, $00, $40, $08-Xdisp ; A
  1405.     dc.b    $F8, %0001, $00, $44, $10-Xdisp ; C
  1406.     dc.b    $F8, %0001, $00, $54, $18-Xdisp ; K
  1407.    
  1408. @YES_EN:
  1409. Xdisp   = $18/2
  1410.  
  1411.     dc.b    3
  1412.     ;    YY   WWHH        TT   XX
  1413.     dc.b    $F8, %0001, $00, $70, $00-Xdisp ; Y
  1414.     dc.b    $F8, %0001, $00, $48, $08-Xdisp ; E
  1415.     dc.b    $F8, %0001, $00, $64, $10-Xdisp ; S
  1416.  
  1417. @NO_EN:
  1418. Xdisp   = $10/2
  1419.  
  1420.     dc.b    2
  1421.     ;    YY   WWHH        TT   XX
  1422.     dc.b    $F8, %0001, $00, $5A, $00-Xdisp ; N
  1423.     dc.b    $F8, %0001, $00, $5C, $08-Xdisp ; 0
  1424.  
  1425. ; ---------------------------------------------------------------
  1426. @PLAY_RU:
  1427. Xdisp = $30/2
  1428. fh = 1<<3
  1429.  
  1430.     dc.b    6
  1431.     ;    YY   WWHH        TT   XX
  1432.     dc.b    $F8, %0001,  fh, $5A, $00-Xdisp ; И
  1433.     dc.b    $F8, %0001, $00, $76, $08-Xdisp ; Г
  1434.     dc.b    $F8, %0001, $00, $5E, $10-Xdisp ; P
  1435.     dc.b    $F8, %0001, $00, $40, $18-Xdisp ; A
  1436.     dc.b    $F8, %0001, $00, $66, $20-Xdisp ; T
  1437.     dc.b    $F8, %0001, $00, $94, $28-Xdisp ; Ь
  1438.    
  1439. @CHAL_RU:
  1440. Xdisp = $30/2
  1441.  
  1442.     dc.b    6
  1443.     ;    YY   WWHH        TT   XX
  1444.     dc.b    $F8, %0001, $00, $58, $00-Xdisp ; M
  1445.     dc.b    $F8, %0001,  fh, $5A, $08-Xdisp ; И
  1446.     dc.b    $F8, %0001, $00, $44, $10-Xdisp ; C
  1447.     dc.b    $F8, %0001, $00, $44, $18-Xdisp ; C
  1448.     dc.b    $F8, %0001,  fh, $5A, $20-Xdisp ; И
  1449.     dc.b    $F8, %0001,  fh, $5A, $28-Xdisp ; И
  1450.  
  1451. @OPTS_RU:
  1452. Xdisp = $48/2
  1453.  
  1454.     dc.b    9
  1455.     ;    YY   WWHH        TT   XX
  1456.     dc.b    $F8, %0001, $00, $4E, $00-Xdisp ; H
  1457.     dc.b    $F8, %0001, $00, $40, $08-Xdisp ; A
  1458.     dc.b    $F8, %0001, $00, $44, $10-Xdisp ; C
  1459.     dc.b    $F8, %0001, $00, $66, $18-Xdisp ; T
  1460.     dc.b    $F8, %0001, $00, $5E, $20-Xdisp ; P
  1461.     dc.b    $F8, %0001, $00, $5C, $28-Xdisp ; 0
  1462.     dc.b    $F8, %0001, $00, $7E, $30-Xdisp ; Й
  1463.     dc.b    $F8, %0001, $00, $54, $38-Xdisp ; K
  1464.     dc.b    $F8, %0001,  fh, $5A, $40-Xdisp ; И
  1465.    
  1466. @LANG_RU:
  1467. Xdisp = $68/2
  1468.  
  1469.     dc.b    12
  1470.     ;    YY   WWHH        TT   XX
  1471.     dc.b    $F8, %0001, $00, $9A, $00-Xdisp ; Я
  1472.     dc.b    $F8, %0001, $00, $7C, $08-Xdisp ; З
  1473.     dc.b    $F8, %0001, $00, $92, $10-Xdisp ; Ы
  1474.     dc.b    $F8, %0001, $00, $54, $18-Xdisp ; K
  1475.     dc.b    $F8, %0001, $00, $32, $20-Xdisp ; :
  1476.  
  1477.     dc.b    $F8, %0001, $00, $5E, $30-Xdisp ; P
  1478.     dc.b    $F8, %0001, $00, $84, $38-Xdisp ; У
  1479.     dc.b    $F8, %0001, $00, $44, $40-Xdisp ; C
  1480.     dc.b    $F8, %0001, $00, $44, $48-Xdisp ; C
  1481.     dc.b    $F8, %0001, $00, $54, $50-Xdisp ; K
  1482.     dc.b    $F8, %0001,  fh, $5A, $58-Xdisp ; И
  1483.     dc.b    $F8, %0001, $00, $7E, $60-Xdisp ; Й
  1484.    
  1485. @SRAM_RU:
  1486. Xdisp = $80/2
  1487.  
  1488.     dc.b    15
  1489.     ;    YY   WWHH        TT   XX
  1490.     dc.b    $F8, %0001, $00, $84, $00-Xdisp ; У
  1491.     dc.b    $F8, %0001, $00, $78, $08-Xdisp ; Д
  1492.     dc.b    $F8, %0001, $00, $40, $10-Xdisp ; A
  1493.     dc.b    $F8, %0001, $00, $80, $18-Xdisp ; Л
  1494.     dc.b    $F8, %0001,  fh, $5A, $20-Xdisp ; И
  1495.     dc.b    $F8, %0001, $00, $66, $28-Xdisp ; T
  1496.     dc.b    $F8, %0001, $00, $94, $30-Xdisp ; Ь
  1497.  
  1498.     dc.b    $F8, %0001, $00, $82, $40-Xdisp ; П
  1499.     dc.b    $F8, %0001, $00, $5E, $48-Xdisp ; P
  1500.     dc.b    $F8, %0001, $00, $5C, $50-Xdisp ; 0
  1501.     dc.b    $F8, %0001, $00, $76, $58-Xdisp ; Г
  1502.     dc.b    $F8, %0001, $00, $5E, $60-Xdisp ; P
  1503.     dc.b    $F8, %0001, $00, $48, $68-Xdisp ; E
  1504.     dc.b    $F8, %0001, $00, $44, $70-Xdisp ; C
  1505.     dc.b    $F8, %0001, $00, $44, $78-Xdisp ; C
  1506.    
  1507. @SNDT_RU:
  1508. Xdisp = $60/2
  1509.  
  1510.     dc.b    11
  1511.     ;    YY   WWHH        TT   XX
  1512.     dc.b    $F8, %0001, $00, $42, $00-Xdisp ; B
  1513.     dc.b    $F8, %0001, $00, $92, $08-Xdisp ; Ы
  1514.     dc.b    $F8, %0001, $00, $74, $10-Xdisp ; Б
  1515.     dc.b    $F8, %0001, $00, $5C, $18-Xdisp ; 0
  1516.     dc.b    $F8, %0001, $00, $5E, $20-Xdisp ; P
  1517.  
  1518.     dc.b    $F8, %0001, $00, $58, $30-Xdisp ; M
  1519.     dc.b    $F8, %0001, $00, $84, $38-Xdisp ; У
  1520.     dc.b    $F8, %0001, $00, $7C, $40-Xdisp ; З
  1521.     dc.b    $F8, %0001, $00, $92, $48-Xdisp ; Ы
  1522.     dc.b    $F8, %0001, $00, $54, $50-Xdisp ; K
  1523.     dc.b    $F8, %0001,  fh, $5A, $58-Xdisp ; И
  1524.    
  1525. @BACK_RU:
  1526. Xdisp = $28/2
  1527.  
  1528.     dc.b    5
  1529.     ;    YY   WWHH        TT   XX
  1530.     dc.b    $F8, %0001, $00, $4E, $00-Xdisp ; H
  1531.     dc.b    $F8, %0001, $00, $40, $08-Xdisp ; A
  1532.     dc.b    $F8, %0001, $00, $7C, $10-Xdisp ; З
  1533.     dc.b    $F8, %0001, $00, $40, $18-Xdisp ; A
  1534.     dc.b    $F8, %0001, $00, $78, $20-Xdisp ; Д
  1535.    
  1536. @YES_RU:
  1537. Xdisp   = $10/2
  1538.  
  1539.     dc.b    2
  1540.     ;    YY   WWHH        TT   XX
  1541.     dc.b    $F8, %0001, $00, $78, $00-Xdisp ; Д
  1542.     dc.b    $F8, %0001, $00, $40, $08-Xdisp ; A
  1543.  
  1544. @NO_RU:
  1545. Xdisp   = $18/2
  1546.  
  1547.     dc.b    3
  1548.     ;    YY   WWHH        TT   XX
  1549.     dc.b    $F8, %0001, $00, $4E, $00-Xdisp ; H
  1550.     dc.b    $F8, %0001, $00, $48, $08-Xdisp ; E
  1551.     dc.b    $F8, %0001, $00, $66, $10-Xdisp ; T
  1552.  
  1553.     even
  1554.  
  1555. ; ===============================================================
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568. ; ===============================================================
  1569. ; ---------------------------------------------------------------
  1570. ; Object: Delete Progress title in a specific menu
  1571. ; ---------------------------------------------------------------
  1572.  
  1573. xpos = 8
  1574. ypos = $A
  1575.  
  1576. Obj_SRAMChoice_Title:
  1577.  
  1578.     move.l  #ObjMap_MenuItems,maps(a0)
  1579.     move.w  #$8000+_VRAM_MenuFont_Pat,art(a0)
  1580.     move.l  #@WaitAppear,obj(a0)
  1581.  
  1582.     ; Create question mark object
  1583.     move.l  #Obj_SRAMChoice_QuestionMark,d1
  1584.     jsr CreateObject2
  1585.     move.w  a1,parent(a0)
  1586.  
  1587. ; ---------------------------------------------------------------
  1588. @WaitAppear:
  1589.     ; Wait until the menu starts appearing
  1590.     tst.b   Logo_MenuStatus
  1591.     bmi.s   @Display
  1592.    
  1593.     ; Move menu
  1594.     subq.w  #1,ypos(a0)
  1595.     cmpi.w  #$110,ypos(a0)
  1596.     bne.s   @Display
  1597.     move.l  #@WaitHide,obj(a0)
  1598.  
  1599. ; ---------------------------------------------------------------
  1600. @WaitHide:
  1601.     ; Wait until the menu starts disapp
  1602.     tst.b   Logo_MenuStatus
  1603.     bpl.s   @Display
  1604.     move.l  #MenuItem_Hide_Left,d0  ; MEGA HACK
  1605.     movea.w parent(a0),a1
  1606.     move.l  d0,obj(a0)
  1607.     move.l  d0,obj(a1)
  1608.     subq.b  #2,Logo_MenuStatus  ; simulate extra 2 items
  1609.  
  1610. ; ---------------------------------------------------------------
  1611. @Display:
  1612.     jmp DisplaySprite
  1613.  
  1614. ; ===============================================================
  1615.  
  1616. timer   = $38
  1617.  
  1618. Obj_SRAMChoice_QuestionMark:
  1619.     move.l  #@Maps,maps(a0)
  1620.     move.w  #$8000+_VRAM_MenuFont_Pat,art(a0)  
  1621.     moveq   #$80/2-8,d0 ; RU disp
  1622.     tst.b   sysLang
  1623.     beq.s   @0
  1624.     moveq   #$80/2-8,d0 ; EN disp
  1625. @0  add.w   d0,xpos(a0)
  1626.     move.w  #8,timer(a0)
  1627.     move.l  #@Move,obj(a0)
  1628.  
  1629. ; ---------------------------------------------------------------
  1630. @Move:
  1631.     addq.w  #1,xpos(a0)
  1632.     subq.w  #1,timer(a0)
  1633.     bne.s   @Display
  1634.     move.l  #@Display,obj(a0)
  1635.  
  1636. @Display
  1637.     movea.w parent(a0),a1
  1638.     move.w  ypos(a1),ypos(a0)
  1639.     jmp DisplaySprite
  1640.  
  1641. @Maps:
  1642. Xdisp = $00
  1643.  
  1644.     dc.w    2
  1645.     dc.b    1
  1646.     ;    YY   WWHH        TT   XX
  1647.     dc.b    $F8, %0001, $00, $3C, $00-Xdisp ; ?
  1648.     even
  1649.  
  1650.  
  1651.  
  1652. ; ===============================================================
  1653. ; ---------------------------------------------------------------
  1654. ; Logo VBlank routine
  1655. ; ---------------------------------------------------------------
  1656.  
  1657. LogoMain_VBlank_Init:
  1658.     movem.l d0-a6,-(sp)
  1659.     lea VDP_Ctrl,a6
  1660.     move.w  #$8174,(a6)     ; enable display
  1661.     move.w  #$8C89,(a6)     ; enable SH
  1662.     move.l  #LogoMain_VBlank_Intro,VBlank_Sub
  1663.     bra.s   LogoMain_VBlank_Common
  1664.  
  1665. ; ---------------------------------------------------------------
  1666. LogoMain_VBlank_Intro:
  1667.     movem.l d0-a6,-(sp)
  1668.     tst.b   $FFFFF62A
  1669.     beq LogoMain_VBlank_Misc
  1670.     writeVRAM Logo_PSBTiles, $2A0, _VRAM_PSB
  1671.     bra.s   LogoMain_VBlank_Common
  1672.  
  1673. ; ---------------------------------------------------------------
  1674. LogoMain_VBlank_Menu:
  1675.     movem.l d0-a6,-(sp)
  1676.     tst.b   $FFFFF62A
  1677.     beq LogoMain_VBlank_Misc
  1678.     writeVRAM $FFF800,$280,$F800    ; transfer sprites
  1679.  
  1680. LogoMain_VBlank_Common:
  1681.     sf.b    $FFFFF62A       ; reset VBlank pending flag
  1682.     lea VDP_Ctrl,a6
  1683.     move.l  #$40000010,(a6)     ; access VSRAM at addess $00
  1684.     move.l  ($FFFFF616).w,-4(a6)    ; send to VSRAM
  1685.     jsr ReadJoypads
  1686.     writeCRAM $FFFFFB00, $80, 0 ; transfer palette
  1687.     writeVRAM $FFFFCC00, $380, $FC00 ; transfer HSRAM
  1688.  
  1689. LogoMain_VBlank_Misc:
  1690.     jsr Int_SoundDriver
  1691.     movem.l (sp)+,d0-a6
  1692.     rte
  1693.  
  1694. ; ===============================================================
  1695. ; ---------------------------------------------------------------
  1696. ; Data
  1697. ; ---------------------------------------------------------------
  1698.  
  1699. ; LOGO **********************************************************
  1700.  
  1701. ; Enigma compressed mappings
  1702. LogoMain_Map:
  1703.     incbin  '#modes\logo\logomain_map.bin'
  1704.     even
  1705.  
  1706. ; Nemesis compressed tiles
  1707. LogoMain_Tiles:
  1708.     incbin  '#modes\logo\logomain_tiles.bin'
  1709.     even
  1710.  
  1711.  
  1712.  
  1713. ; BACKGROUND ****************************************************
  1714.  
  1715. ; Enigma compressed mappings
  1716. LogoBG_Map:
  1717.     incbin  '#modes\logo\logobg_map.bin'
  1718.     even
  1719.  
  1720. ; Kosinski compressed tiles
  1721. LogoBG_Tiles:            
  1722.     incbin  '#modes\logo\logobg_tiles.bin'
  1723.     even
  1724.  
  1725.  
  1726. ; SHARED ********************************************************
  1727.  
  1728. ; Palette
  1729. LogoMain_Palette:
  1730.     incbin  '#modes\logo\logomain_palette.bin'
  1731.     incbin  '#modes\logo\logobg_palette.bin'
  1732.     incbin  '#modes\logo\logobg_palette.bin'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement