Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions inc/enums.inc
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,49 @@ ScrollExtend_Top equ 02h
ScrollExtend_Bottom equ 03h
ScrollExtend_None equ 0FFh

ClipdataTile_Air equ 0000h
ClipdataTile_Solid equ 0010h
ClipdataTile_DoorTransition equ 0020h
ClipdataTile_2x2TopLeftNeverReform equ 0050h
ClipdataTile_2x2TopRightNeverReform equ 0051h
ClipdataTile_WeakNeverReform equ 0052h
ClipdataTile_WeakReform equ 0053h
ClipdataTile_MissileNeverReform equ 0054h
ClipdataTile_BombNeverReform equ 0055h
ClipdataTile_BombReform equ 0056h
ClipdataTile_PBomb equ 0057h
ClipdataTile_SpeedNoReform equ 0058h
ClipdataTile_ScrewAttack equ 0059h
ClipdataTile_Crumble equ 005Ah
ClipdataTile_WeakNoReform equ 005Bh
ClipdataTile_MissileNoReform equ 005Eh
ClipdataTile_2x2TopLeftNoReform equ 005Ch
ClipdataTile_2x2TopRightNoReform equ 005Dh
ClipdataTile_2x2BottomLeftNeverReform equ 0060h
ClipdataTile_2x2BottomRightNeverReform equ 0061h
ClipdataTile_MissileTankHidden equ 0064h
ClipdataTile_EngergyTankHidden equ 0065h
ClipdataTile_PBombTankHidden equ 0069h
ClipdataTile_SpeedReform equ 006Bh
ClipdataTile_2x2BottomLeftNoReform equ 006Ch
ClipdataTile_2x2BottomRightNoReform equ 006Dh
ClipdataTile_VerticalBombChain1 equ 0070h
ClipdataTile_VerticalBombChain2 equ 0071h
ClipdataTile_VerticalBombChain3 equ 0072h
ClipdataTile_VerticalBombChain4 equ 0073h
ClipdataTile_HorizontalBombChain1 equ 0074h
ClipdataTile_HorizontalBombChain2 equ 0075h
ClipdataTile_HorizontalBombChain3 equ 0076h
ClipdataTile_HorizontalBombChain4 equ 0077h

ClipdataRevealed_Crumble equ 800Bh
ClipdataRevealed_Weak equ 800Ch
ClipdataRevealed_Bomb equ 8005h
ClipdataRevealed_Missile equ 8006h
ClipdataRevealed_PBomb equ 8007h
ClipdataRevealed_Speed equ 8008h
ClipdataRevealed_ScrewAttack equ 800Ah

; non-vanilla enums

Upgrade_None equ 0
Expand Down
2 changes: 2 additions & 0 deletions inc/functions.inc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Nightmare_MakeMissilesFall equ 0805DD40h
LockHatches equ 08063070h
ChangeSuit equ 08063190h
SetEventEffect equ 0806342Ch
RemoveNeverReformBlocksAndCollectedTanks equ 08064ADCh
RemoveNeverReformBlocks equ 0806B130h
SetBg1Tile equ 0806C614h
SetSpecialBg1Tile equ 0806C6E4h
SetClipdata equ 0806C82Ch
Expand Down
8 changes: 8 additions & 0 deletions inc/structs.inc
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
DecompressedBG0Data equ 02029000h
DecompressedBG1Data equ 0202C000h
DecompressedBG2Data equ 0202F000h
DecompressedBG3Data equ 02032000h
.sym off
DecompressBGData_Size equ 3000h
.sym on

MinimapData equ 02034000h
DecompressedMinimapData equ 02034800h
MinimapVisited equ 02037C00h
Expand Down
4 changes: 3 additions & 1 deletion src/main.s
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ EnvironmentalHazardDps equ 087FF065h
MissileLimit equ 087FF06Ah
MinorLocationsAddr equ 087FF06Ch
RoomNamesAddr equ 087FF070h
RevealHiddenTilesFlag equ 087FF08Ch

; Mark end-of-file padding as free space
@@EOF equ 0879ECC8h
Expand Down Expand Up @@ -103,6 +104,7 @@ RoomNamesAddr equ 087FF070h
.include "src/qol/screw-unbonk.s"
.include "src/qol/skip-ending.s"
.include "src/qol/skip-intro.s"
.include "src/qol/unhidden-breakable-tiles.s"

.if UNHIDDEN_MAP
.include "src/qol/unhidden-map.s"
Expand Down Expand Up @@ -164,10 +166,10 @@ RoomNamesAddr equ 087FF070h
.include "src/randomizer/less-map-info.s"
.include "src/randomizer/menu-edits.s"
.include "src/randomizer/open-escape.s"
.include "src/randomizer/room-name-display.s"
.include "src/randomizer/start-warp.s"
.include "src/randomizer/start-location.s"
.include "src/randomizer/tank-majors.s"
.include "src/randomizer/room-name-display.s"
.endif

.close
206 changes: 206 additions & 0 deletions src/qol/unhidden-breakable-tiles.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
.org RemoveNeverReformBlocksAndCollectedTanks
.area 08064AEBh-08064ADCh, 0
push { lr }
bl @RemoveMiscTilesFromRoom
pop { r0 }
bx r0
.endarea

.autoregion
.align 2
.func @RemoveMiscTilesFromRoom
push { lr }
bl RemoveNeverReformBlocks
bl RemoveCollectedTanks
bl RevealHiddenBreakableTiles
pop { r0 }
bx r0
.endfunc
.endautoregion

.org RevealHiddenTilesFlag
.area 1
.db 00h
.endarea

.org 0806B962h ; Editing UpdateBlockAnimation, case 07h
.area 0806B968h-0806B962h, 0
bl @BreakStateIfRevealed
.endarea

.autoregion
.align 2
.func @BreakStateIfRevealed
push { r4, lr }
ldr r4, =RevealHiddenTilesFlag
ldrb r4, [r4]
cmp r4, 0
bne @@if_revealed
@@if_vanilla:
add r0, #01h
b @@return
@@if_revealed:
sub r0, #05h
@@return:
lsl r0, r0, #10h
lsr r5, r0, #10h
pop { r4, lr }
.pool
.endfunc
.endautoregion

.autoregion
.align 2
.func RevealHiddenBreakableTiles
push { r4-r7, lr }
ldr r0, =RevealHiddenTilesFlag
ldrb r0, [r0]
cmp r0, #0
beq @@return
b @@load_room_info

@@load_room_info:
ldr r7, =LevelLayers + LevelLayers_Clipdata
ldrh r6, [r7, LevelLayer_Rows] ; height
ldrh r5, [r7, LevelLayer_Stride] ; width
ldr r7, [r7]
sub sp, #8
str r5, [sp]
str r6, [sp, #4]
mov r5, #0
mov r6, #0
@@loop:
mov r1, r7
ldr r3, [sp]
mov r2, r6
mul r2, r3 ; height * room width
add r2, r2, r5 ; + width
lsl r2, #1
add r0, r1, r2
ldr r1, =3001h
cmp r1, r2 ; don't read past Clipdata RAM
beq @@return
ldrh r0, [r7, r2]
cmp r0, #ClipdataTile_Air
beq @@inc_width
cmp r0, #ClipdataTile_Solid
beq @@inc_width
cmp r0, #ClipdataTile_DoorTransition
beq @@inc_width
bl @SearchForHiddenBlocks
mov r1, #0
mvn r1, r1
lsl r1, #10h
lsr r1, #10h
cmp r1, r0 ; if not FFFF
bne @@reveal_hidden_block
b @@inc_width
@@reveal_hidden_block:
; r0 should contain value of new tile
mov r1, r6 ; Y Pos
mov r2, r5 ; X Pos
bl SetSpecialBg1Tile
@@inc_width:
add r5, #1
ldr r0, [sp]
cmp r5, r0
ble @@loop
@@inc_height:
add r6, #1
ldr r0, [sp, #4]
cmp r6, r0
beq @@return
mov r5, #1
b @@loop
@@return:
add sp, #8
pop { r4-r7 }
pop { r0 }
bx r0
.pool
.endfunc
.endautoregion

.autoregion
.align 2
@ClipDataReplacements:
;.db Clip to check, replacement clip
.dh ClipdataTile_Crumble, ClipdataRevealed_Crumble
.dh ClipdataTile_WeakReform, ClipdataRevealed_Weak
.dh ClipdataTile_BombNeverReform, ClipdataRevealed_Bomb
.dh ClipdataTile_BombReform, ClipdataRevealed_Bomb
.dh ClipdataTile_SpeedNoReform, ClipdataRevealed_Speed
.dh ClipdataTile_SpeedReform, ClipdataRevealed_Speed
.dh ClipdataTile_MissileNeverReform, ClipdataRevealed_Missile
.dh ClipdataTile_MissileNoReform, ClipdataRevealed_Missile
.dh ClipdataTile_PBomb, ClipdataRevealed_PBomb
.dh ClipdataTile_ScrewAttack, ClipdataRevealed_ScrewAttack
; Not revealing tanks at this time
;.dh ClipdataTile_MissileTankHidden, 801Ch
;.dh ClipdataTile_EngergyTankHidden, 801Dh
;.dh ClipdataTile_PBombTankHidden, 801Eh
.dh ClipdataTile_2x2TopLeftNeverReform, ClipdataRevealed_Weak
.dh ClipdataTile_2x2TopRightNeverReform, ClipdataRevealed_Weak
.dh ClipdataTile_WeakNeverReform, ClipdataRevealed_Weak
.dh ClipdataTile_WeakNoReform, ClipdataRevealed_Weak
.dh ClipdataTile_2x2TopLeftNoReform, ClipdataRevealed_Weak
.dh ClipdataTile_2x2TopRightNoReform, ClipdataRevealed_Weak
.dh ClipdataTile_2x2BottomLeftNeverReform, ClipdataRevealed_Weak
.dh ClipdataTile_2x2BottomRightNeverReform, ClipdataRevealed_Weak
.dh ClipdataTile_2x2BottomLeftNoReform, ClipdataRevealed_Weak
.dh ClipdataTile_2x2BottomRightNoReform, ClipdataRevealed_Weak
.dh ClipdataTile_VerticalBombChain1, ClipdataRevealed_Bomb
.dh ClipdataTile_VerticalBombChain2, ClipdataRevealed_Bomb
.dh ClipdataTile_VerticalBombChain3, ClipdataRevealed_Bomb
.dh ClipdataTile_VerticalBombChain4, ClipdataRevealed_Bomb
.dh ClipdataTile_HorizontalBombChain1, ClipdataRevealed_Bomb
.dh ClipdataTile_HorizontalBombChain2, ClipdataRevealed_Bomb
.dh ClipdataTile_HorizontalBombChain3, ClipdataRevealed_Bomb
.dh ClipdataTile_HorizontalBombChain4, ClipdataRevealed_Bomb
.dh 0FFFFh, 0FFFFh
.endautoregion


.autoregion
; input
; r0 = Block to Search For
; output
; r0 = Replacement Tile, or None (0FFFFh)
.align 2
.func @SearchForHiddenBlocks
push { r1-r4, lr }
sub sp, #4
mov r3, #0
str r3, [sp]
@@search:
ldr r3, [sp]
lsl r3, #2
ldr r4, =@ClipDataReplacements
add r4, r4, r3
ldrh r2, [r4]
mov r1, #0
mvn r1, r1
lsl r1, r1, 10h
lsr r1, r1, 10h
cmp r2, r1
beq @@return_none
cmp r0, r2
beq @@return_replacement
; increment counter
lsr r3, #2
add r3, #1
str r3, [sp]
b @@search
@@return_replacement:
ldr r2, =@ClipDataReplacements+2
add r2, r2, r3
ldrh r0, [r2, #0]
add sp, #4
pop { r1-r4, pc }
@@return_none:
ldr r0, =0FFFFh
add sp, #4
pop { r1-r4, pc }
.pool
.endfunc
.endautoregion
Loading