SHARE
TWEET

New Level Select

a guest Nov 6th, 2017 230 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ===========================================================================
  2. ; loc_92F6:
  3. MenuScreen_LevelSelect:
  4.     ; Load foreground (sans zone icon)
  5.     lea (Chunk_Table).l,a1
  6.     lea (MapEng_LevSel).l,a0    ; 2 bytes per 8x8 tile, compressed
  7.     move.w  #make_art_tile(ArtTile_VRAM_Start,0,0),d0
  8.     bsr.w   EniDec
  9.  
  10.     lea (Chunk_Table).l,a1
  11.     move.l  #vdpComm(VRAM_Plane_A_Name_Table,VRAM,WRITE),d0
  12.     moveq   #$27,d1
  13.     moveq   #$1B,d2 ; 40x28 = whole screen
  14.     jsrto   (PlaneMapToVRAM_H40).l, JmpTo_PlaneMapToVRAM_H40    ; display patterns
  15.  
  16.     ; Draw sound test number
  17.     moveq   #palette_line_0,d3
  18.     bsr.w   LevelSelect_DrawSoundNumber
  19.  
  20.     ; Load zone icon
  21.     lea (Chunk_Table+$8C0).l,a1
  22.     lea (MapEng_LevSelIcon).l,a0
  23.     move.w  #make_art_tile(ArtTile_ArtNem_LevelSelectPics,0,0),d0
  24.     bsr.w   EniDec
  25.  
  26.     bsr.w   LevelSelect_DrawIcon
  27.  
  28.     clr.w   (Player_mode).w
  29.     clr.w   (Results_Screen_2P).w   ; VsRSID_Act
  30.     clr.b   (Level_started_flag).w
  31.     clr.w   (Anim_Counters).w
  32.  
  33.     ; Animate background (loaded back in MenuScreen)
  34.     lea (Anim_SonicMilesBG).l,a2
  35.     jsrto   (Dynamic_Normal).l, JmpTo2_Dynamic_Normal   ; background
  36.  
  37.     moveq   #PalID_Menu,d0
  38.     bsr.w   PalLoad_ForFade
  39.  
  40.     lea (Normal_palette_line3).w,a1
  41.     lea (Target_palette_line3).w,a2
  42.  
  43.     moveq   #bytesToLcnt(palette_line_size),d1
  44. -   move.l  (a1),(a2)+
  45.     clr.l   (a1)+
  46.     dbf d1,-
  47.  
  48.     move.b  #MusID_Options,d0
  49.     jsrto   (PlayMusic).l, JmpTo_PlayMusic
  50.  
  51.     move.w  #$707,(Demo_Time_left).w
  52.     clr.w   (Two_player_mode).w
  53.     clr.l   (Camera_X_pos).w
  54.     clr.l   (Camera_Y_pos).w
  55.     clr.w   (Correct_cheat_entries).w
  56.     clr.w   (Correct_cheat_entries_2).w
  57.  
  58.     move.b  #VintID_Menu,(Vint_routine).w
  59.     bsr.w   WaitForVint
  60.  
  61.     move.w  (VDP_Reg1_val).w,d0
  62.     ori.b   #$40,d0
  63.     move.w  d0,(VDP_control_port).l
  64.  
  65.     bsr.w   Pal_FadeFromBlack
  66.  
  67. ;loc_93AC:
  68. LevelSelect_Main:   ; routine running during level select
  69.     move.b  #VintID_Menu,(Vint_routine).w
  70.     bsr.w   WaitForVint
  71.  
  72.     move    #$2700,sr
  73.  
  74.     moveq   #palette_line_0-palette_line_0,d3   ; palette line << 13
  75.     bsr.w   LevelSelect_MarkFields  ; unmark fields
  76.     bsr.w   LevSelControls  ; possible change selected fields
  77.     move.w  #palette_line_3-palette_line_0,d3   ; palette line << 13
  78.     bsr.w   LevelSelect_MarkFields  ; mark fields
  79.  
  80.     bsr.w   LevelSelect_DrawIcon
  81.  
  82.     move    #$2300,sr
  83.  
  84.     lea (Anim_SonicMilesBG).l,a2
  85.     jsrto   (Dynamic_Normal).l, JmpTo2_Dynamic_Normal
  86.  
  87.     move.b  (Ctrl_1_Press).w,d0
  88.     or.b    (Ctrl_2_Press).w,d0
  89.     andi.b  #button_start_mask,d0   ; start pressed?
  90.     bne.s   LevelSelect_PressStart  ; yes
  91.     bra.w   LevelSelect_Main    ; no
  92. ; ===========================================================================
  93.  
  94. ;loc_93F0:
  95. LevelSelect_PressStart:
  96.     move.w  (Level_select_zone).w,d0
  97.     add.w   d0,d0
  98.     move.w  LevelSelect_Order(pc,d0.w),d0
  99.     bmi.w   LevelSelect_Return  ; sound test
  100.     cmpi.w  #$4000,d0
  101.     bne.w   LevelSelect_StartZone
  102.  
  103. LevelSelect_SpecialStage:
  104.     move.b  #GameModeID_SpecialStage,(Game_Mode).w ; => SpecialStage
  105.     clr.w   (Current_ZoneAndAct).w
  106.     move.b  #3,(Life_count).w
  107.     move.b  #3,(Life_count_2P).w
  108.     moveq   #0,d0
  109.     move.w  d0,(Ring_count).w
  110.     move.l  d0,(Timer).w
  111.     move.l  d0,(Score).w
  112.     move.w  d0,(Ring_count_2P).w
  113.     move.l  d0,(Timer_2P).w
  114.     move.l  d0,(Score_2P).w
  115.     move.l  #5000,(Next_Extra_life_score).w
  116.     move.l  #5000,(Next_Extra_life_score_2P).w
  117.     move.w  (Player_option).w,(Player_mode).w
  118.     rts
  119. ; ===========================================================================
  120.  
  121. ;loc_944C:
  122. LevelSelect_Return:
  123.     move.b  #GameModeID_SegaScreen,(Game_Mode).w ; => SegaScreen
  124.     rts
  125. ; ===========================================================================
  126. ; -----------------------------------------------------------------------------
  127. ; Level Select Level Order
  128.  
  129. ; One entry per item in the level select menu. Just set the value for the item
  130. ; you want to link to the level/act number of the level you want to load when
  131. ; the player selects that item.
  132. ; -----------------------------------------------------------------------------
  133. ;Misc_9454:
  134. LevelSelect_Order:
  135.     dc.w    $0000   ; EHZ   1 00
  136.     dc.w    $0001   ;       2 01
  137.     dc.w    $0002   ;       3 02
  138.     dc.w    $0003   ;       4 03
  139.     dc.w    $0100   ; ???       1 04
  140.     dc.w    $0101   ;       2 05
  141.     dc.w    $0102   ;       3 06
  142.     dc.w    $0103   ;       4 07
  143.     dc.w    $0200   ; WZ        1 08
  144.     dc.w    $0201   ;       2 09
  145.     dc.w    $0202   ;       3 0A
  146.     dc.w    $0203   ;       4 0B
  147.     dc.w    $0300   ; ???       1 0C
  148.     dc.w    $0301   ;       2 0D
  149.     dc.w    $0302   ;       3 0E
  150.     dc.w    $0303   ;       4 0F
  151.     dc.w    $0400   ; MTZ   1 10
  152.     dc.w    $0401   ;       2 11
  153.     dc.w    $0402   ;       3 12
  154.     dc.w    $0403   ;       4 13
  155.     dc.w    $0500   ; MTZ3  1 14
  156.     dc.w    $0501   ;       2 15
  157.     dc.w    $0502   ;       3 16
  158.     dc.w    $0503   ;       4 17
  159.     dc.w    $0600   ; WFZ   1 18
  160.     dc.w    $0601   ;       2 19
  161.     dc.w    $0602   ;       3 1A
  162.     dc.w    $0603   ;       4 1B
  163.     dc.w    $0700   ; HTZ   1 1C
  164.     dc.w    $0701   ;       2 1D
  165.     dc.w    $0702   ;       3 1E
  166.     dc.w    $0703   ;       4 1F
  167.     dc.w    $0800   ; HPZ   1 20
  168.     dc.w    $0801   ;       2 21
  169.     dc.w    $0802   ;       3 22
  170.     dc.w    $0803   ;       4 23
  171.     dc.w    $0900   ; ???       1 24
  172.     dc.w    $0901   ;       2 25
  173.     dc.w    $0902   ;       3 26
  174.     dc.w    $0903   ;       4 27
  175.     dc.w    $0A00   ; OOZ   1 28
  176.     dc.w    $0A01   ;       2 29
  177.     dc.w    $0A02   ;       3 2A
  178.     dc.w    $0A03   ;       4 2B
  179.     dc.w    $0B00   ; MCZ   1 2C
  180.     dc.w    $0B01   ;       2 2D
  181.     dc.w    $0B02   ;       3 2E
  182.     dc.w    $0B03   ;       4 2F
  183.     dc.w    $0C00   ; CNZ   1 30
  184.     dc.w    $0C01   ;       2 31
  185.     dc.w    $0C02   ;       3 32
  186.     dc.w    $0C03   ;       4 33
  187.     dc.w    $0D00   ; CPZ   1 34
  188.     dc.w    $0D01   ;       2 35
  189.     dc.w    $0D02   ;       3 36
  190.     dc.w    $0D03   ;       4 37
  191.     dc.w    $0E00   ; DEZ   1 38
  192.     dc.w    $0E01   ;       2 39
  193.     dc.w    $0E02   ;       3 3A
  194.     dc.w    $0E03   ;       4 3B
  195.     dc.w    $0F00   ; ARZ   1 3C
  196.     dc.w    $0F01   ;       2 3D
  197.     dc.w    $0F02   ;       3 3E
  198.     dc.w    $0F03   ;       4 3F
  199.     dc.w    $1000   ; SCZ   1 40
  200.     dc.w    $1001   ;       2 41
  201.     dc.w    $1002   ;       3 42
  202.     dc.w    $1003   ;       4 43
  203.     dc.w    $4000   ; special stage (44)
  204.     dc.w    $FFFF   ; sound test 45
  205. ; ===========================================================================
  206.  
  207. ;loc_9480:
  208. LevelSelect_StartZone:
  209.     andi.w  #$3FFF,d0
  210.     move.w  d0,(Current_ZoneAndAct).w
  211.     move.b  #GameModeID_Level,(Game_Mode).w ; => Level (Zone play mode)
  212.     move.b  #3,(Life_count).w
  213.     move.b  #3,(Life_count_2P).w
  214.     moveq   #0,d0
  215.     move.w  d0,(Ring_count).w
  216.     move.l  d0,(Timer).w
  217.     move.l  d0,(Score).w
  218.     move.w  d0,(Ring_count_2P).w
  219.     move.l  d0,(Timer_2P).w
  220.     move.l  d0,(Score_2P).w
  221.     move.b  d0,(Continue_count).w
  222.     move.l  #5000,(Next_Extra_life_score).w
  223.     move.l  #5000,(Next_Extra_life_score_2P).w
  224.     move.b  #MusID_FadeOut,d0
  225.     jsrto   (PlaySound).l, JmpTo_PlaySound
  226.     moveq   #0,d0
  227.     move.w  d0,(Two_player_mode_copy).w
  228.     move.w  d0,(Two_player_mode).w
  229.     rts
  230.  
  231. ; ===========================================================================
  232. ; ---------------------------------------------------------------------------
  233. ; Change what you're selecting in the level select
  234. ; ---------------------------------------------------------------------------
  235. ; loc_94DC:
  236. LevSelControls:
  237.     move.b  (Ctrl_1_Press).w,d1
  238.     andi.b  #button_up_mask|button_down_mask,d1
  239.     bne.s   +   ; up/down pressed
  240.     subq.w  #1,(LevSel_HoldTimer).w
  241.     bpl.w   LevSelControls_CheckLR
  242.  
  243. +
  244.     move.w  #$B,(LevSel_HoldTimer).w
  245.     move.b  (Ctrl_1_Held).w,d1
  246.     andi.b  #button_up_mask|button_down_mask,d1
  247.     beq.w   LevSelControls_CheckLR  ; up/down not pressed, check for left & right
  248.     move.w  (Level_select_zone).w,d0    ; left or right pressed
  249.     move.w  (Level_select_zone).w,d7    ; left or right pressed
  250.     add.w   d0,d7
  251.     add.w   d7,d7
  252.     move.w  d7,d0
  253.     moveq   #0,d7
  254.     btst    #button_up,d1
  255.     beq.s   +
  256.     add.w   #2,d0
  257.     move.b  LevelSelect_SwitchTable(pc,d0.w),d0 ; set selected zone according to table
  258.     and.w   #$FF,d0
  259.     cmpi.w  #0,d0
  260.     bge.s   no_reset_up
  261.     moveq   #45,d0
  262. no_reset_up:
  263.     move.w  d0,(Level_select_zone).w
  264.     rts
  265.  
  266. +   add.w   #3,d0
  267.     move.b  LevelSelect_SwitchTable(pc,d0.w),d0 ; set selected zone according to table
  268.     and.w   #$FF,d0
  269.     cmpi.w  #$46,d0
  270.     ble.s       no_reset_dn
  271.     moveq   #0,d0
  272. no_reset_dn:
  273.     move.w  d0,(Level_select_zone).w
  274.     rts
  275. ; ===========================================================================
  276. ; loc_958A:
  277. LevSelControls_SwitchSide:  ; not in soundtest, not up/down pressed
  278.     move.b  (Ctrl_1_Press).w,d1
  279.     andi.b  #button_left_mask|button_right_mask,d1
  280.     beq.s   +               ; no direction key pressed
  281.     move.w  (Level_select_zone).w,d0    ; left or right pressed
  282.     move.w  (Level_select_zone).w,d2    ; left or right pressed
  283.     add.w   d0,d2
  284.     add.w   d2,d2
  285.     move.w  d2,d0
  286.     moveq   #0,d2
  287.     btst        #button_left,d1
  288.     bne.s   switchtbl_left
  289.     add.w   #1,d0
  290. switchtbl_left:
  291.     move.b  LevelSelect_SwitchTable(pc,d0.w),d0 ; set selected zone according to table
  292.     move.w  d0,(Level_select_zone).w
  293. +
  294.     rts
  295. ; ===========================================================================
  296. ;byte_95A2:
  297. LevelSelect_SwitchTable:
  298.     ;<left> <right> <up> <down>
  299.     dc.b $3,   $1,$45,  $4      ;EHZ        1 00
  300.     dc.b $0,   $2,$45,  $5      ;       2 01
  301.     dc.b $1,   $3,$45,  $6      ;       3 02
  302.     dc.b $2,   $0,$45,  $7      ;       4 03
  303.     dc.b $7,   $5,  $0,  $8 ;???        1 04
  304.     dc.b $4,   $6,  $1,  $9 ;       2 05
  305.     dc.b $5,   $7,  $2,  $A ;       3 06
  306.     dc.b $6,   $4,  $3,  $B ;       4 07
  307.     dc.b $B,   $9,  $4,  $C ;WZ     1 08
  308.     dc.b $8,   $A,  $5,  $D ;       2 09
  309.     dc.b $9,   $B,  $6,  $E ;       3 0A
  310.     dc.b $A,   $8,  $7,  $F ;       4 0B
  311.     dc.b $F,   $D,  $8,$10  ;???        1 0C
  312.     dc.b $C,   $E,  $9,$11  ;       2 0D
  313.     dc.b $D,   $F,  $A,$12  ;       3 0E
  314.     dc.b $E,   $C,  $B,$13  ;       4 0F
  315.     dc.b $13,$11,  $C,$14   ;MTZ        1 10
  316.     dc.b $10,$12,  $D,$15   ;       2 11
  317.     dc.b $11,$13,  $E,$16   ;       3 12
  318.     dc.b $12,$10,  $F,$17   ;       4 13
  319.     dc.b $17,$15,$10,$18    ;MTZ    3   1 14
  320.     dc.b $14,$16,$11,$19    ;       2 15
  321.     dc.b $15,$17,$12,$1A    ;       3 16
  322.     dc.b $16,$14,$13,$1B    ;       4 17
  323.     dc.b $1B,$19,$14,$1C    ;WFZ    1 18
  324.     dc.b $18,$1A,$15,$1D    ;       2 19
  325.     dc.b $19,$1B,$16,$1E    ;       3 1A
  326.     dc.b $1A,$18,$17,$1F    ;       4 1B
  327.     dc.b $1F,$1D,$18,$20    ;HTZ        1 1C
  328.     dc.b $1C,$1E,$19,$21    ;       2 1D
  329.     dc.b $1D,$1F,$1A,$22    ;       3 1E
  330.     dc.b $1E,$1C,$1B,$23    ;       4 1F
  331.     dc.b $23,$21,$1C,$24    ;HPZ        1 20
  332.     dc.b $20,$22,$1D,$25    ;       2 21
  333.     dc.b $21,$23,$1E,$26    ;       3 22
  334.     dc.b $22,$20,$1F,$27    ;       4 23
  335.       ; --------------------------------------------------------------
  336.     dc.b $27,$25,$20,$28    ;???        1 24
  337.     dc.b $24,$26,$21,$29    ;       2 25
  338.     dc.b $25,$27,$22,$2A    ;       3 26
  339.     dc.b $26,$24,$23,$2B    ;       4 27
  340.     dc.b $2B,$29,$24,$2C    ;OOZ        1 28
  341.     dc.b $28,$2A,$25,$2D    ;       2 29
  342.     dc.b $29,$2B,$26,$2E    ;       3 2A
  343.     dc.b $2A,$28,$27,$2F    ;       4 2B
  344.     dc.b $2F,$2D,$28,$30    ;MCZ        1 2C
  345.     dc.b $2C,$2E,$29,$31    ;       2 2D
  346.     dc.b $2D,$2F,$2A,$32    ;       3 2E
  347.     dc.b $2E,$2C,$2B,$33    ;       4 2F
  348.     dc.b $33,$31,$2C,$34    ;CNZ        1 30
  349.     dc.b $30,$32,$2D,$35    ;       2 31
  350.     dc.b $31,$33,$2E,$36    ;       3 32
  351.     dc.b $32,$30,$2F,$37    ;       4 33
  352.     dc.b $37,$35,$30,$38    ;CPZ        1 34
  353.     dc.b $34,$36,$31,$39    ;       2 35
  354.     dc.b $35,$37,$32,$3A    ;       3 36
  355.     dc.b $36,$34,$33,$3B    ;       4 37
  356.     dc.b $3B,$39,$34,$3C    ;DEZ        1 38
  357.     dc.b $38,$3A,$35,$3D    ;       2 39
  358.     dc.b $39,$3B,$36,$3E    ;       3 3A
  359.     dc.b $3A,$38,$37,$3F    ;       4 3B
  360.     dc.b $3F,$3D,$38,$40    ;ARZ        1 3C
  361.     dc.b $3C,$3E,$39,$41    ;       2 3D
  362.     dc.b $3D,$3F,$3A,$42    ;       3 3E
  363.     dc.b $3E,$3C,$3B,$43    ;       4 3F
  364.     dc.b $43,$41,$3C,$44    ;SCZ        1 40
  365.     dc.b $40,$42,$3D,$44    ;       2 41
  366.     dc.b $41,$43,$3E,$44    ;       3 42
  367.     dc.b $42,$40,$3F,$44    ;       4 43
  368.     dc.b $44,$44,$40,$45    ;SS        44
  369.       ; --------------------------------------------------------------
  370.     dc.b $45,$45,$44,  $0   ;Sound Test 45
  371.     even
  372. ; ===========================================================================
  373. ; loc_9522:
  374. LevSelControls_CheckLR:
  375.     cmpi.w  #$45,(Level_select_zone).w  ; are we in the sound test?
  376.     bne.w   LevSelControls_SwitchSide   ; no
  377.     move.w  (Sound_test_sound).w,d0
  378.     move.b  (Ctrl_1_Press).w,d1
  379.     btst    #button_left,d1
  380.     beq.s   +
  381.     subq.b  #1,d0
  382.     bcc.s   +
  383.     moveq   #$7F,d0
  384.  
  385. +
  386.     btst    #button_right,d1
  387.     beq.s   +
  388.     addq.b  #1,d0
  389.     cmpi.w  #$80,d0
  390.     blo.s   +
  391.     moveq   #0,d0
  392.  
  393. +
  394.     btst    #button_A,d1
  395.     beq.s   +
  396.     addi.b  #$10,d0
  397.     andi.b  #$7F,d0
  398.  
  399. +
  400.     move.w  d0,(Sound_test_sound).w
  401.     andi.w  #button_B_mask|button_C_mask,d1
  402.     beq.s   +   ; rts
  403.     move.w  (Sound_test_sound).w,d0
  404.     addi.w  #$80,d0
  405.     jsrto   (PlayMusic).l, JmpTo_PlayMusic
  406.     lea (debug_cheat).l,a0
  407.     lea (super_sonic_cheat).l,a2
  408.     lea (Debug_options_flag).w,a1
  409.     moveq   #1,d2   ; flag to tell the routine to enable the Super Sonic cheat
  410.     bsr.w   CheckCheats
  411.  
  412. +
  413.     rts
  414.  
  415. ;loc_95B8:
  416. LevelSelect_MarkFields:
  417.     lea (Chunk_Table).l,a4
  418.     lea (LevSel_MarkTable).l,a5
  419.     lea (VDP_data_port).l,a6
  420.     moveq   #0,d0
  421.     move.w  (Level_select_zone).w,d0
  422.     lsl.w   #2,d0
  423.     lea (a5,d0.w),a3
  424.     moveq   #0,d0
  425.     move.b  (a3),d0
  426.     mulu.w  #$50,d0
  427.     moveq   #0,d1
  428.     move.b  1(a3),d1
  429.     add.w   d1,d0
  430.     lea (a4,d0.w),a1
  431.     moveq   #0,d1
  432.     move.b  (a3),d1
  433.     lsl.w   #7,d1
  434.     add.b   1(a3),d1
  435.     addi.w  #VRAM_Plane_A_Name_Table,d1
  436.     lsl.l   #2,d1
  437.     lsr.w   #2,d1
  438.     ori.w   #vdpComm($0000,VRAM,WRITE)>>16,d1
  439.     swap    d1
  440.     move.l  d1,4(a6)
  441.  
  442.     moveq   #$D,d2
  443. -   move.w  (a1)+,d0
  444.     add.w   d3,d0
  445.     move.w  d0,(a6)
  446.     dbf d2,-
  447.  
  448.     addq.w  #2,a3
  449.     moveq   #0,d0
  450.     move.b  (a3),d0
  451.     beq.s   +
  452.     mulu.w  #$50,d0
  453.     moveq   #0,d1
  454.     move.b  1(a3),d1
  455.     add.w   d1,d0
  456.     lea (a4,d0.w),a1
  457.     moveq   #0,d1
  458.     move.b  (a3),d1
  459.     lsl.w   #7,d1
  460.     add.b   1(a3),d1
  461.     addi.w  #VRAM_Plane_A_Name_Table,d1
  462.     lsl.l   #2,d1
  463.     lsr.w   #2,d1
  464.     ori.w   #vdpComm($0000,VRAM,WRITE)>>16,d1
  465.     swap    d1
  466.     move.l  d1,4(a6)
  467.     move.w  (a1)+,d0
  468.     add.w   d3,d0
  469.     move.w  d0,(a6)
  470.  
  471. +
  472.     cmpi.w  #$45,(Level_select_zone).w
  473.     bne.s   +   ; rts
  474.     bsr.w   LevelSelect_DrawSoundNumber
  475. +
  476.     rts
  477. ; ===========================================================================
  478. ;loc_965A:
  479. LevelSelect_DrawSoundNumber:
  480.     move.l  #vdpComm(VRAM_Plane_A_Name_Table+planeLocH40(20,23),VRAM,WRITE),(VDP_control_port).l
  481.     move.w  (Sound_test_sound).w,d0
  482.     move.b  d0,d2
  483.     lsr.b   #4,d0
  484.     bsr.s   +
  485.     move.b  d2,d0
  486.  
  487. +
  488.     andi.w  #$F,d0
  489.     cmpi.b  #$A,d0
  490.     blo.s   +
  491.     addi.b  #4,d0
  492.  
  493. +
  494.     addi.b  #$10,d0
  495.     add.w   d3,d0
  496.     move.w  d0,(a6)
  497.     rts
  498. ; ===========================================================================
  499.  
  500. ;loc_9688:
  501. LevelSelect_DrawIcon:
  502.     move.w  (Level_select_zone).w,d0
  503.     lea (LevSel_IconTable).l,a3
  504.     lea (a3,d0.w),a3
  505.     lea (Chunk_Table+$8C0).l,a1
  506.     moveq   #0,d0
  507.     move.b  (a3),d0
  508.     lsl.w   #3,d0
  509.     move.w  d0,d1
  510.     add.w   d0,d0
  511.     add.w   d1,d0
  512.     lea (a1,d0.w),a1
  513.     move.l  #vdpComm(VRAM_Plane_A_Name_Table+planeLocH40(27,22),VRAM,WRITE),d0
  514.     moveq   #3,d1
  515.     moveq   #2,d2
  516.     jsrto   (PlaneMapToVRAM_H40).l, JmpTo_PlaneMapToVRAM_H40
  517.     lea (Pal_LevelIcons).l,a1
  518.     moveq   #0,d0
  519.     move.b  (a3),d0
  520.     lsl.w   #5,d0
  521.     lea (a1,d0.w),a1
  522.     lea (Normal_palette_line3).w,a2
  523.  
  524.     moveq   #bytesToLcnt(palette_line_size),d1
  525. -   move.l  (a1)+,(a2)+
  526.     dbf d1,-
  527.  
  528.     rts
  529. ; ===========================================================================
  530. ;byte_96D8
  531. LevSel_IconTable:
  532.     dc.b    $0,$0,$0,$0 ;00 EHZ
  533.     dc.b    $D,$D,$D,$D ;01 ???
  534.     dc.b    $D,$D,$D,$D ;02 WZ
  535.     dc.b    $D,$D,$D,$D ;03 ???
  536.     dc.b    $1,$1,$1,$1 ;04 MTZ
  537.     dc.b    $1,$1,$1,$1 ;05 MTZ3
  538.     dc.b  $A,$A,$A,$A   ;06 WFZ
  539.     dc.b    $2,$2,$2,$2 ;07 HTZ
  540.     dc.b  $3,$3,$3,$3   ;08 HPZ
  541.     dc.b    $D,$D,$D,$D ;09 ???
  542.     dc.b    $4,$4,$4,$4 ;0A OOZ
  543.     dc.b    $5,$5,$5,$5 ;0B MCZ
  544.     dc.b    $6,$6,$6,$6 ;0C CNZ
  545.     dc.b    $7,$7,$7,$7 ;0D CPZ
  546.     dc.b  $B,$B,$B,$B   ;0E DEZ
  547.     dc.b    $8,$8,$8,$8 ;0F ARZ
  548.     dc.b    $9,$9,$9,$9 ;10 SCZ
  549.     dc.b  $C            ;Special Stage
  550.     dc.b  $E            ;Sound Test
  551.     even
  552. ;byte_96EE:
  553. LevSel_MarkTable:   ; 4 bytes per level select entry
  554. ; line primary, 2*column ($E fields), line secondary, 2*column secondary (1 field)
  555.     dc.b       2,     2,      2,    $1E ;EHZ1
  556.     dc.b       2,     2,      2,    $20 ;EHZ2
  557.     dc.b       2,     2,      2,    $22 ;EHZ3
  558.     dc.b       2,     2,      2,    $24 ;EHZ4
  559.     dc.b       4,     2,      4,    $1E ;???1
  560.     dc.b       4,     2,      4,    $20 ;???2
  561.     dc.b       4,     2,      4,    $22 ;???3
  562.     dc.b       4,     2,      4,    $24 ;???4
  563.     dc.b       6,     2,      6,    $1E ;WZ1
  564.     dc.b       6,     2,      6,    $20 ;WZ2
  565.     dc.b       6,     2,      6,    $22 ;WZ3
  566.     dc.b       6,     2,      6,    $24 ;WZ4
  567.     dc.b       8,     2,      8,    $1E ;???1
  568.     dc.b       8,     2,      8,    $20 ;???2
  569.     dc.b       8,     2,      8,    $22 ;???3
  570.     dc.b       8,     2,      8,    $24 ;???4
  571.     dc.b     $A,      2,    $A, $1E ;MTZ1
  572.     dc.b     $A,      2,    $A, $20 ;MTZ2
  573.     dc.b     $A,      2,    $A, $22 ;MTZ3
  574.     dc.b     $A,      2,    $A, $24 ;MTZ4
  575.     dc.b     $C,      2,    $C, $1E ;MTZ3_1
  576.     dc.b     $C,      2,    $C, $20 ;MTZ3_2
  577.     dc.b     $C,      2,    $C, $22 ;MTZ3_3
  578.     dc.b     $C,      2,    $C, $24 ;MTZ3_4
  579.     dc.b     $E,      2,    $E, $1E ;WFZ1
  580.     dc.b     $E,      2,    $E, $20 ;WFZ2
  581.     dc.b     $E,      2,    $E, $22 ;WFZ3
  582.     dc.b     $E,      2,    $E, $24 ;WFZ4
  583.     dc.b $10,     2, $10,   $1E ;HTZ1
  584.     dc.b $10,     2, $10,   $20 ;HTZ2
  585.     dc.b $10,     2, $10,   $22 ;HTZ3
  586.     dc.b $10,     2, $10,   $24 ;HTZ4
  587.     dc.b $12,     2, $12,   $1E ;HPZ1
  588.     dc.b $12,     2, $12,   $20 ;HPZ2
  589.     dc.b $12,     2, $12,   $22 ;HPZ3
  590.     dc.b $12,     2, $12,   $24 ;HPZ4
  591.     dc.b       2,$28,     2,    $46 ;???1
  592.     dc.b       2,$28,     2,    $48 ;???2
  593.     dc.b       2,$28,     2,    $4A ;???3
  594.     dc.b       2,$28,     2,    $4C ;???4
  595.     dc.b       4,$28,     4,    $46 ;OOZ1
  596.     dc.b       4,$28,     4,    $48 ;OOZ2
  597.     dc.b       4,$28,     4,    $4A ;OOZ3
  598.     dc.b       4,$28,     4,    $4C ;OOZ4
  599.     dc.b       6,$28,     6,    $46 ;MCZ1
  600.     dc.b       6,$28,     6,    $48 ;MCZ2
  601.     dc.b       6,$28,     6,    $4A ;MCZ3
  602.     dc.b       6,$28,     6,    $4C ;MCZ4
  603.     dc.b       8,$28,     8,    $46 ;CNZ1
  604.     dc.b       8,$28,     8,    $48 ;CNZ2
  605.     dc.b       8,$28,     8,    $4A ;CNZ3
  606.     dc.b       8,$28,     8,    $4C ;CNZ4
  607.     dc.b     $A,$28,    $A, $46 ;CPZ1
  608.     dc.b     $A,$28,    $A, $48 ;CPZ2
  609.     dc.b     $A,$28,    $A, $4A ;CPZ3
  610.     dc.b     $A,$28,    $A, $4C ;CPZ4
  611.     dc.b     $C,$28,    $C, $46 ;DEZ1
  612.     dc.b     $C,$28,    $C, $48 ;DEZ2
  613.     dc.b     $C,$28,    $C, $4A ;DEZ3
  614.     dc.b     $C,$28,    $C, $4C ;DEZ4
  615.     dc.b     $E,$28,    $E, $46 ;ARZ1
  616.     dc.b     $E,$28,    $E, $48 ;ARZ2
  617.     dc.b     $E,$28,    $E, $4A ;ARZ3
  618.     dc.b     $E,$28,    $E, $4C ;ARZ4
  619.     dc.b $10,$28,  $10, $46 ;SCZ1
  620.     dc.b $10,$28,  $10, $48 ;SCZ2
  621.     dc.b $10,$28,  $10, $4A ;SCZ3
  622.     dc.b $10,$28,  $10, $4C ;SCZ4
  623.     dc.b $12,$28,  $12, $28 ;Special Stage
  624.     dc.b $17,$10,  $17, $28 ;Sound Test
  625. ; ===========================================================================
  626. ; loc_9746:
  627. CheckCheats:    ; This is called from 2 places: the options screen and the level select screen
  628.     move.w  (Correct_cheat_entries).w,d0    ; Get the number of correct sound IDs entered so far
  629.     adda.w  d0,a0               ; Skip to the next entry
  630.     move.w  (Sound_test_sound).w,d0     ; Get the current sound test sound
  631.     cmp.b   (a0),d0             ; Compare it to the cheat
  632.     bne.s   +               ; If they're different, branch
  633.     addq.w  #1,(Correct_cheat_entries).w    ; Add 1 to the number of correct entries
  634.     tst.b   1(a0)               ; Is the next entry 0?
  635.     bne.s   ++              ; If not, branch
  636.     move.w  #$101,(a1)          ; Enable the cheat
  637.     move.b  #SndID_Ring,d0          ; Play the ring sound
  638.     jsrto   (PlaySound).l, JmpTo_PlaySound
  639. +
  640.     move.w  #0,(Correct_cheat_entries).w    ; Clear the number of correct entries
  641. +
  642.     move.w  (Correct_cheat_entries_2).w,d0  ; Do the same procedure with the other cheat
  643.     adda.w  d0,a2
  644.     move.w  (Sound_test_sound).w,d0
  645.     cmp.b   (a2),d0
  646.     bne.s   ++
  647.     addq.w  #1,(Correct_cheat_entries_2).w
  648.     tst.b   1(a2)
  649.     bne.s   +++ ; rts
  650.     tst.w   d2              ; Test this to determine which cheat to enable
  651.     bne.s   +               ; If not 0, branch
  652.     move.b  #$1F,(Continue_count).w     ; Give 31 continues
  653.     ; The next line causes the bug where the OOZ music plays until reset.
  654.     ; Remove "&$7F" to fix the bug.
  655.     move.b  #SndID_ContinueJingle,d0    ; Play the continue jingle
  656.     jsrto   (PlayMusic).l, JmpTo_PlayMusic
  657.     bra.s   ++
  658. ; ===========================================================================
  659. +
  660.     move.w  #7,(Got_Emerald).w      ; Give 7 emeralds to the player
  661.     move.b  #MusID_Emerald,d0       ; Play the emerald jingle
  662.     jsrto   (PlayMusic).l, JmpTo_PlayMusic
  663. +
  664.     move.w  #0,(Correct_cheat_entries_2).w  ; Clear the number of correct entries
  665. +
  666.     rts
  667. ; ===========================================================================
  668. level_select_cheat: dc.b $19, $65,   9, $17,   0    ; 17th September 1965, Yuji Naka's birthdate
  669.     rev02even
  670. ; byte_97B7
  671. continues_cheat:    dc.b   1,   9,   9,   1,   6,   2,   3,   0     ; 23rd of June, 1991, Sonic1's release date
  672.     rev02even
  673. debug_cheat:        dc.b   1,   9,   9,   2,   1,   1,   2,   4,   0    ; 24th November 1992, Sonic 2's release date in the EU and US: "Sonic 2sday"
  674.     rev02even
  675. ; byte_97C5
  676. super_sonic_cheat:  dc.b   4,   1,   2,   6,   0    ; Book of Genesis, 41:26
  677.     rev02even
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top