Skip to content

Commit 632b5f6

Browse files
committed
Port remaining features from IFB practice hack
1 parent f2fc5d0 commit 632b5f6

28 files changed

+1340
-290
lines changed

Diff for: TODO.txt

+12-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ For other TODO items, recommend using the github issue system
55
================================================================
66

77
================================================================
8-
Features that have not been ported yet
8+
Features that are being ported now
99
================================================================
1010

1111
- Capture Cropping
@@ -24,6 +24,8 @@ Features that have not been ported yet
2424

2525
- Phantoon always visible
2626

27+
- Random bubble SFX
28+
2729
- Randomize on load
2830

2931
- Randomize RNG shortcut
@@ -39,17 +41,23 @@ and there isn't much benefit in porting or backporting them
3941

4042
- Resources folder structure and unusued resources
4143

42-
- Order of included sources
44+
- Order of included sources and bank freespace locations
4345

4446
- Structure of defines.asm and main.asm (and separating printdebug.asm from main.asm)
4547

4648
- The SM Practice Hack title screen (the difference helps identify which practice hack is being used)
4749

4850
- Various sound effect macros
4951

50-
- Walk Through Walls option
52+
- Walk Through Walls option and unfinished dboost infohud mode
53+
54+
- Detect emulator inaccuracy developer option
55+
56+
- The taller menu (this is available as a build option)
57+
58+
- Leading > or arrow on menu items, or menuing layout and text differences in general
5159

52-
- Leading > or arrow on menu items, or menuing differences in general
60+
- Differences in how menu options can be scrolled through
5361

5462
- AREA_ID stored in custom presets
5563

Diff for: layout/layoutmenutemplate.asm

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11

2-
pushpc
32
%startfree(E4)
43

54
; -------------------------
@@ -9,8 +8,8 @@ pushpc
98

109
LayoutMenu:
1110
dw #layout_itempickups
12-
dw #$FFFF
1311
dw #layout_bombtorizodoor
12+
dw #layout_steamcollision
1413
dw #layout_magnetstairs
1514
dw #layout_arearando
1615
dw #layout_antisoftlock
@@ -322,8 +321,11 @@ layout_bombtorizodoor:
322321
db #$28, "r SLOW", #$FF
323322
db #$FF
324323

324+
layout_steamcollision:
325+
%cm_toggle_bit("Remove Steam Collision", !sram_room_layout, !ROOM_LAYOUT_NO_STEAM_COLLISION, #0)
326+
325327
layout_magnetstairs:
326-
%cm_toggle_bit("Remove Magnet Stairs", !sram_room_layout, !ROOM_LAYOUT_MAGNET_STAIRS, #0)
328+
%cm_toggle_bit("Remove Magnet Stairs", !sram_room_layout, !ROOM_LAYOUT_NO_MAGNET_STAIRS, #0)
327329

328330
layout_arearando:
329331
%cm_toggle_bit("Area Rando Patches", !sram_room_layout, !ROOM_LAYOUT_AREA_RANDO, #0)
@@ -870,4 +872,3 @@ portals_down_vanilla_table:
870872

871873

872874
%endfree(E4)
873-
pullpc

Diff for: src/BRBmenu.asm

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ brb_menu_palette_cycle:
7676
%cm_toggle_bit_inverted("Cycle Palettes", !ram_cm_brb_palette, #$FFFF, #0)
7777

7878
brb_menu_scroll:
79-
%cm_toggle("Screen Scrolling", !ram_cm_brb_scroll, #$0001, #0)
79+
%cm_toggle("Screen Scrolling", !ram_cm_brb_scroll, #$01, #0)
8080

8181
brb_menu_music_toggle:
8282
dw !ACTION_CHOICE

Diff for: src/crash.asm

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
; This resource adds a crash handler to dump data to SRAM
88
; whenever one of these "crash vectors" is triggered
99

10-
pushpc
11-
1210
; Hijack generic crash handler
1311
org $808573
1412
hook_crash_handler:
@@ -185,7 +183,7 @@ COPHandler:
185183

186184
%endfree(80)
187185

188-
pullpc
186+
%startfree(89)
189187

190188
CrashViewer:
191189
{
@@ -1125,3 +1123,5 @@ CrashTextInfo11:
11251123
; Press LRSlSt to soft reset
11261124
db "Press ", #$8D, #$8C, #$85, #$84, " to soft reset", #$FF
11271125

1126+
%endfree(89)
1127+

Diff for: src/cropmenu.asm

+174
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
2+
%startfree(8E)
3+
4+
; ----------------
5+
; Capture Cropping
6+
; ----------------
7+
8+
CaptureCroppingMenu:
9+
dw #ccm_launch_crop_mode
10+
dw #$FFFF
11+
dw #ccm_crop_mode
12+
dw #ccm_crop_tile
13+
dw #$0000
14+
%cm_header("CAPTURE CROPPING MODE")
15+
16+
ccm_launch_crop_mode:
17+
%cm_jsl("Capture Crop Mode", .routine, #0)
18+
.routine
19+
JSL cm_crop_mode
20+
JML refresh_cgram_long
21+
22+
ccm_crop_mode:
23+
dw !ACTION_CHOICE
24+
dl #!ram_cm_crop_mode
25+
dw #$0000
26+
db #$28, "Drawing Method", #$FF
27+
db #$28, " BORDER", #$FF
28+
db #$28, " FILL", #$FF
29+
db #$FF
30+
31+
ccm_crop_tile:
32+
dw !ACTION_CHOICE
33+
dl #!ram_cm_crop_tile
34+
dw #$0000
35+
db #$28, "Cropping Tile", #$FF
36+
db #$28, " ", #$90, #$FF
37+
db #$28, " ", #$91, #$FF
38+
db #$FF
39+
40+
cm_crop_mode:
41+
{
42+
PHP : %a16() : %i8()
43+
44+
; turn on forced blank
45+
LDX #$80 : STX $2100
46+
47+
; fix BG3 scroll offset
48+
LDX #$FF : STX $2112
49+
LDX #$03 : STX $2112
50+
51+
TDC : STA !ram_crash_palette
52+
53+
; pattern or solid color?
54+
LDA !ram_cm_crop_tile : BEQ .boxes
55+
LDA #$2891 : STA $C1
56+
BRA .draw
57+
58+
.boxes
59+
LDA #$2890 : STA $C1
60+
61+
.draw
62+
; wait for lag frame
63+
LDX !NMI_COUNTER : CPX !NMI_COUNTER : BEQ .draw
64+
65+
; draw around the border or fill the screen?
66+
LDA !ram_cm_crop_mode : BNE .fill
67+
JSR cm_crop_border
68+
BRA .drawingdone
69+
70+
.fill
71+
JSR cm_crop_fill
72+
73+
.drawingdone
74+
; turn off forced blank
75+
LDX #$0F : STX $2100
76+
77+
.loop
78+
; Make sure we don't read joysticks twice in the same frame
79+
; wait for lag frame
80+
LDX !NMI_COUNTER : CPX !NMI_COUNTER : BEQ .loop
81+
LDA !FRAME_COUNTER : CMP !ram_cm_input_counter : PHP
82+
STA !ram_cm_input_counter
83+
PLP : BNE .inputRead
84+
JSL $809459 ; Read controller input
85+
86+
.inputRead
87+
LDA !IH_CONTROLLER_PRI_NEW : BEQ .loop
88+
CMP !CTRL_B : BEQ .end
89+
CMP !CTRL_L : BEQ .decPalette
90+
CMP !CTRL_R : BEQ .incPalette
91+
BRA .loop
92+
93+
.decPalette
94+
LDA !ram_crash_palette : BNE .decSetPalette
95+
LDA #$0008
96+
.decSetPalette
97+
DEC : STA !ram_crash_palette
98+
JSL crash_cgram_transfer
99+
BRA .loop
100+
101+
.incPalette
102+
LDA !ram_crash_palette : CMP #$0007 : BMI .incSetPalette
103+
LDA #$FFFF
104+
.incSetPalette
105+
INC : STA !ram_crash_palette
106+
JSL crash_cgram_transfer
107+
BRA .loop
108+
109+
.end
110+
; restore BG3 scroll offset
111+
LDA !REG_2112_BG3_Y
112+
%ai8()
113+
LDX #$80 : STX $2100
114+
STA $2112 : XBA : STA $2112
115+
LDX #$0F : STX $2100
116+
117+
PLP
118+
RTL
119+
}
120+
121+
cm_crop_border:
122+
{
123+
; top
124+
LDX #$80 : STX $2115
125+
LDA #$5800 : STA $2116
126+
LDA $C1 : LDX #$00
127+
.topLoop
128+
STA $2118
129+
INX : CPX #$20 : BNE .topLoop
130+
131+
; bottom
132+
LDX #$80 : STX $2115
133+
LDA #$5B60 : STA $2116
134+
LDA $C1 : LDX #$00
135+
.bottomLoop
136+
STA $2118
137+
INX : CPX #$40 : BNE .bottomLoop
138+
139+
; left
140+
LDX #$81 : STX $2115
141+
LDA #$5820 : STA $2116
142+
LDA $C1 : LDX #$00
143+
.leftLoop
144+
STA $2118
145+
INX : CPX #$1D : BNE .leftLoop
146+
147+
; right
148+
LDX #$81 : STX $2115
149+
LDA #$583F : STA $2116
150+
LDA $C1 : LDX #$00
151+
.rightLoop
152+
STA $2118
153+
INX : CPX #$1D : BNE .rightLoop
154+
155+
RTS
156+
}
157+
158+
cm_crop_fill:
159+
{
160+
LDX #$80 : STX $2115
161+
LDA #$5800 : STA $2116
162+
PHP : %i16()
163+
LDA $C1 : LDX #$0400
164+
165+
.loop
166+
STA $2118
167+
DEX : BPL .loop
168+
169+
PLP
170+
RTS
171+
}
172+
173+
%endfree(8E)
174+

0 commit comments

Comments
 (0)