Advertisement
Guest User

New Level Select

a guest
Nov 6th, 2017
390
0
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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement