From 229aed1dfae7cbda2da80ce779a5f4f538a48aab Mon Sep 17 00:00:00 2001 From: clue cat Date: Sat, 8 Feb 2025 00:29:57 -0500 Subject: [PATCH 01/10] feat: start work for unhidden breakable blocks. --- inc/functions.inc | 1 + inc/structs.inc | 8 +++ src/main.s | 6 ++ src/qol/unhidden-breakable-tiles.s | 104 +++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 src/qol/unhidden-breakable-tiles.s diff --git a/inc/functions.inc b/inc/functions.inc index 89a4a463..2a0991c3 100644 --- a/inc/functions.inc +++ b/inc/functions.inc @@ -13,6 +13,7 @@ Nightmare_MakeMissilesFall equ 0805DD40h LockHatches equ 08063070h ChangeSuit equ 08063190h SetEventEffect equ 0806342Ch +RemoveNeverReformBlocksAndCollectedTanks equ 08064ADCh SetBg1Tile equ 0806C614h SetSpecialBg1Tile equ 0806C6E4h SetClipdata equ 0806C82Ch diff --git a/inc/structs.inc b/inc/structs.inc index 29521ed5..5bdd678a 100644 --- a/inc/structs.inc +++ b/inc/structs.inc @@ -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 diff --git a/src/main.s b/src/main.s index 43d03e2c..a0487ddf 100644 --- a/src/main.s +++ b/src/main.s @@ -35,6 +35,9 @@ .ifndef UNHIDDEN_MAP .definelabel UNHIDDEN_MAP, 0 .endif +.ifndef UNHIDDEN_BREAKABLE_TILES +.definelabel UNHIDDEN_BREAKABLE_TILES, 1 ; CHANGE ME BEFORE PR +.endif .include "inc/constants.inc" .include "inc/enums.inc" @@ -107,6 +110,9 @@ RoomNamesAddr equ 087FF070h .if UNHIDDEN_MAP .include "src/qol/unhidden-map.s" .endif +.if UNHIDDEN_BREAKABLE_TILES +.include "src/qol/unhidden-breakable-tiles.s" +.endif .endif ; Physics patches diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s new file mode 100644 index 00000000..ccfe4145 --- /dev/null +++ b/src/qol/unhidden-breakable-tiles.s @@ -0,0 +1,104 @@ +.org RemoveNeverReformBlocksAndCollectedTanks +.area 10h, 0 + .skip 0Ah + bl RevealHiddenBreakableTiles +.endarea + +.autoregion + .align 2 +.func RevealHiddenBreakableTiles + push { r4-r7 } + mov r7, r11 + mov r6, r10 + mov r5, r9 + mov r4, r8 + push { r4 - r7 } + ; Check if we should reveal the tiles + ldr r0, =@@RevealHiddenTilesFlag + ldrb r0, [r0] + cmp r0, #0 + beq @@return + b @@load_room_info + +@@RevealHiddenTilesFlag: +.if UNHIDDEN_BREAKABLE_TILES + .dh 01h +.else + .dh 00h +.endif + +@@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] ; keep width + str r6, [sp, #4] ; keep height + 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 r1, r2 + ldrh r0, [r7, r2] ; tile pos = tile + (width + (height * room width)) + cmp r0, #00h ; Skip Air Block + beq @@inc_width + cmp r0, #10h ; Skip Solid Block + beq @@inc_width + + + +@@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 + ldr r5, [sp] + b @@loop + +@@return: + + mov r0, #40h + mov r1, 5 + mov r2, 5 + bl SetBg1Tile + + add sp, #8 + pop { r4-r7 } + mov r11, r7 + mov r10, r6 + mov r9, r5 + mov r8, r4 + pop { r4 - r7} + pop { r0 } + bx r0 + .pool +.endfunc +.endautoregion + +.autoregion + .align 2 +@ClipDataReplacements: + ;.db Clip to check, replacement clip + .db 5Ah, 40h ; Crumble Blocks + .db 55h, 41h ; Bomb Block (never reform) + .db 56h, 41h ; Bomb Block (reform) + .db 58h, 42h ; Speed Block (no reform) + .db 6Bh, 42h ; Speed Block (reform) + .db 54h, 43h ; Missile Block (never reform) + .db 5Eh, 43h ; Missile Block (no reform) + .db 57h, 44h ; PBomb Block + .db 59h, 45h ; Screw Attack Block + .dh 0FFFFh ; +.endautoregion From 35fe1edbcb62eac2e8705ab27993051bc267e71c Mon Sep 17 00:00:00 2001 From: clue cat Date: Sat, 8 Feb 2025 23:03:05 -0500 Subject: [PATCH 02/10] start block replacement --- inc/enums.inc | 16 +++++ src/qol/unhidden-breakable-tiles.s | 107 ++++++++++++++++++++++------- 2 files changed, 100 insertions(+), 23 deletions(-) diff --git a/inc/enums.inc b/inc/enums.inc index cc9997c8..a4d2f161 100644 --- a/inc/enums.inc +++ b/inc/enums.inc @@ -452,6 +452,22 @@ 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_Crumble equ 005Ah +ClipdataTile_BombNeverRevorm equ 0055h +ClipdataTile_BombReform equ 0056h +ClipdataTile_SpeedNoReform equ 0058h +ClipdataTile_SpeedReform equ 006Bh +ClipdataTile_MissileNeverReform equ 0054h +ClipdataTile_MissileNoReform equ 005Eh +ClipdataTile_PBomb equ 0057h +ClipdataTile_ScrewAttack equ 0059h +ClipdataTile_MissileTankHidden equ 0064h +ClipdataTile_EngergyTankHidden equ 0065h +ClipdataTile_PBombTankHidden equ 0069h + ; non-vanilla enums Upgrade_None equ 0 diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index ccfe4145..276ae921 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -39,20 +39,37 @@ mov r6, #0 @@loop: - mov r1, r7 + mov r1, r7 ; clipdata ldr r3, [sp] mov r2, r6 mul r2, r3 ; height * room width add r2, r2, r5 ; + width lsl r2, #1 - add r1, r2 + add r0, r1, r2 + ldr r1, =3001h + cmp r1, r2 ; don't read past Clipdata RAM + beq @@return ldrh r0, [r7, r2] ; tile pos = tile + (width + (height * room width)) - cmp r0, #00h ; Skip Air Block + cmp r0, #ClipdataTile_Air beq @@inc_width - cmp r0, #10h ; Skip Solid Block + 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: + mov r0, #40h ; value + mov r1, r6 ; Y Pos + mov r2, r5 ; X Pos + bl SetSpecialBg1Tile @@inc_width: add r5, #1 @@ -64,23 +81,17 @@ ldr r0, [sp, #4] cmp r6, r0 beq @@return - ldr r5, [sp] + mov r5, #1 b @@loop @@return: - - mov r0, #40h - mov r1, 5 - mov r2, 5 - bl SetBg1Tile - add sp, #8 pop { r4-r7 } mov r11, r7 mov r10, r6 mov r9, r5 mov r8, r4 - pop { r4 - r7} + pop { r4-r7 } pop { r0 } bx r0 .pool @@ -91,14 +102,64 @@ .align 2 @ClipDataReplacements: ;.db Clip to check, replacement clip - .db 5Ah, 40h ; Crumble Blocks - .db 55h, 41h ; Bomb Block (never reform) - .db 56h, 41h ; Bomb Block (reform) - .db 58h, 42h ; Speed Block (no reform) - .db 6Bh, 42h ; Speed Block (reform) - .db 54h, 43h ; Missile Block (never reform) - .db 5Eh, 43h ; Missile Block (no reform) - .db 57h, 44h ; PBomb Block - .db 59h, 45h ; Screw Attack Block - .dh 0FFFFh ; + .dh ClipdataTile_Crumble, 8000h ;40h + .dh ClipdataTile_BombNeverRevorm, 8000h ;41h + .dh ClipdataTile_BombReform, 8005h ;41h + .dh ClipdataTile_SpeedNoReform, 8008h ;42h + .dh ClipdataTile_SpeedReform, 8009h ;42h + .dh ClipdataTile_MissileNeverReform, 8000h ;43h + .dh ClipdataTile_MissileNoReform, 8000h ;43h + .dh ClipdataTile_PBomb, 8007h ;44h + .dh ClipdataTile_ScrewAttack, 800Ah ;45h + + .dh ClipdataTile_MissileTankHidden, 8000h + .dh ClipdataTile_EngergyTankHidden, 8000h + .dh ClipdataTile_PBombTankHidden, 801Eh + .dh 0FFFFh, 0FFFFh +.endautoregion + + +.autoregion +; input +; r0 = Block to Search For +; output +; ??? +.align 2 +.func @SearchForHiddenBlocks + push { r1-r4, lr } + sub sp, #4 + mov r3, #0 + str r3, [sp] +@@search: + ldr r3, [sp] + lsl r3, #1 + ldr r4, =@ClipDataReplacements + add r4, r4, r3 + ldrh r2, [r4] + mov r1, #0 + mvn r1, r1 + lsl r1, r1, 10h + lsr r1, r1, 10h ; 0FFFFh + cmp r0, r1 + beq @@return_none ; return if end of list + ; increment counter + + + +@@return_replacement: + ldr r2, =@ClipDataReplacements+2 + ;mov r2, r4 + add r2, r2, r3 + ldrh r2, [r2, #0] + add sp, #4 + pop { r1-r4, pc } + + + +@@return_none: + ldr r0, =0FFFFh + add sp, #4 + pop { r1-r4, pc } + +.endfunc .endautoregion From ab08f6072be73b4babb3d3b07d65fbf047f70d81 Mon Sep 17 00:00:00 2001 From: clue cat Date: Sun, 9 Feb 2025 03:29:56 -0500 Subject: [PATCH 03/10] check all breakable except tanks, fix some bugs, cleanup some comments and style --- inc/enums.inc | 39 ++++++++-- src/qol/unhidden-breakable-tiles.s | 121 +++++++++++++++-------------- 2 files changed, 97 insertions(+), 63 deletions(-) diff --git a/inc/enums.inc b/inc/enums.inc index a4d2f161..09a044d3 100644 --- a/inc/enums.inc +++ b/inc/enums.inc @@ -455,18 +455,45 @@ ScrollExtend_None equ 0FFh ClipdataTile_Air equ 0000h ClipdataTile_Solid equ 0010h ClipdataTile_DoorTransition equ 0020h -ClipdataTile_Crumble equ 005Ah -ClipdataTile_BombNeverRevorm equ 0055h -ClipdataTile_BombReform equ 0056h -ClipdataTile_SpeedNoReform equ 0058h -ClipdataTile_SpeedReform equ 006Bh +ClipdataTile_2x2TopLeftNeverReform equ 0050h +ClipdataTile_2x2TopRightNeverReform equ 0051h +ClipdataTile_WeakNeverReform equ 0052h +ClipdataTile_WeakReform equ 0053h ClipdataTile_MissileNeverReform equ 0054h -ClipdataTile_MissileNoReform equ 005Eh +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 diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index 276ae921..761f86d6 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -8,18 +8,12 @@ .align 2 .func RevealHiddenBreakableTiles push { r4-r7 } - mov r7, r11 - mov r6, r10 - mov r5, r9 - mov r4, r8 - push { r4 - r7 } - ; Check if we should reveal the tiles ldr r0, =@@RevealHiddenTilesFlag ldrb r0, [r0] cmp r0, #0 beq @@return b @@load_room_info - +; TODO: determine if this needs to be static location ROM flag @@RevealHiddenTilesFlag: .if UNHIDDEN_BREAKABLE_TILES .dh 01h @@ -29,27 +23,26 @@ @@load_room_info: ldr r7, =LevelLayers + LevelLayers_Clipdata - ldrh r6, [r7, LevelLayer_Rows] ; height - ldrh r5, [r7, LevelLayer_Stride] ; width + ldrh r6, [r7, LevelLayer_Rows] ; height + ldrh r5, [r7, LevelLayer_Stride] ; width ldr r7, [r7] sub sp, #8 - str r5, [sp] ; keep width - str r6, [sp, #4] ; keep height + str r5, [sp] + str r6, [sp, #4] mov r5, #0 mov r6, #0 - @@loop: - mov r1, r7 ; clipdata + mov r1, r7 ldr r3, [sp] mov r2, r6 - mul r2, r3 ; height * room width - add r2, r2, r5 ; + width + 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 + cmp r1, r2 ; don't read past Clipdata RAM beq @@return - ldrh r0, [r7, r2] ; tile pos = tile + (width + (height * room width)) + ldrh r0, [r7, r2] cmp r0, #ClipdataTile_Air beq @@inc_width cmp r0, #ClipdataTile_Solid @@ -59,18 +52,16 @@ bl @SearchForHiddenBlocks mov r1, #0 mvn r1, r1 - lsl r1, 10h - lsr r1, 10h + lsl r1, #10h + lsr r1, #10h cmp r1, r0 ; if not FFFF bne @@reveal_hidden_block b @@inc_width - @@reveal_hidden_block: - mov r0, #40h ; value - mov r1, r6 ; Y Pos - mov r2, r5 ; X Pos + ; 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] @@ -83,15 +74,9 @@ beq @@return mov r5, #1 b @@loop - @@return: add sp, #8 pop { r4-r7 } - mov r11, r7 - mov r10, r6 - mov r9, r5 - mov r8, r4 - pop { r4-r7 } pop { r0 } bx r0 .pool @@ -102,19 +87,42 @@ .align 2 @ClipDataReplacements: ;.db Clip to check, replacement clip - .dh ClipdataTile_Crumble, 8000h ;40h - .dh ClipdataTile_BombNeverRevorm, 8000h ;41h - .dh ClipdataTile_BombReform, 8005h ;41h - .dh ClipdataTile_SpeedNoReform, 8008h ;42h - .dh ClipdataTile_SpeedReform, 8009h ;42h - .dh ClipdataTile_MissileNeverReform, 8000h ;43h - .dh ClipdataTile_MissileNoReform, 8000h ;43h - .dh ClipdataTile_PBomb, 8007h ;44h - .dh ClipdataTile_ScrewAttack, 800Ah ;45h - - .dh ClipdataTile_MissileTankHidden, 8000h - .dh ClipdataTile_EngergyTankHidden, 8000h - .dh ClipdataTile_PBombTankHidden, 801Eh + .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 + ; TODO: Need to change Bomb Chains as the gfx will always point to + ; tile_index + 1. We either need to write code to have bomb chains + ; behave differently or update the table and gfx to have an + ; invisible tile after bomb tiles + .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 @@ -123,7 +131,7 @@ ; input ; r0 = Block to Search For ; output -; ??? +; r0 = Replacement Tile, or None (0FFFFh) .align 2 .func @SearchForHiddenBlocks push { r1-r4, lr } @@ -132,34 +140,33 @@ str r3, [sp] @@search: ldr r3, [sp] - lsl r3, #1 + 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 ; 0FFFFh - cmp r0, r1 - beq @@return_none ; return if end of list + 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 - ;mov r2, r4 add r2, r2, r3 - ldrh r2, [r2, #0] + 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 From 52bc059330f5c02f8406d62fb9598618e01b85c2 Mon Sep 17 00:00:00 2001 From: clue cat Date: Sun, 9 Feb 2025 20:23:18 -0500 Subject: [PATCH 04/10] ensure flag for unhidden breakable tiles is in a consistent spot in ROM --- src/main.s | 5 ++--- src/qol/unhidden-breakable-tiles.s | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main.s b/src/main.s index a0487ddf..fd6dbdde 100644 --- a/src/main.s +++ b/src/main.s @@ -70,6 +70,7 @@ EnvironmentalHazardDps equ 087FF065h MissileLimit equ 087FF06Ah MinorLocationsAddr equ 087FF06Ch RoomNamesAddr equ 087FF070h +RevealUnhiddenTilesFlag equ 087FF08Ch ; Mark end-of-file padding as free space @@EOF equ 0879ECC8h @@ -106,13 +107,11 @@ 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" .endif -.if UNHIDDEN_BREAKABLE_TILES -.include "src/qol/unhidden-breakable-tiles.s" -.endif .endif ; Physics patches diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index 761f86d6..18a157ba 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -4,22 +4,24 @@ bl RevealHiddenBreakableTiles .endarea +.org RevealUnhiddenTilesFlag +.area 1 +.if UNHIDDEN_BREAKABLE_TILES + .db 01h +.else + .db 00h +.endif +.endarea + .autoregion .align 2 .func RevealHiddenBreakableTiles push { r4-r7 } - ldr r0, =@@RevealHiddenTilesFlag + ldr r0, =RevealUnhiddenTilesFlag ldrb r0, [r0] cmp r0, #0 beq @@return b @@load_room_info -; TODO: determine if this needs to be static location ROM flag -@@RevealHiddenTilesFlag: -.if UNHIDDEN_BREAKABLE_TILES - .dh 01h -.else - .dh 00h -.endif @@load_room_info: ldr r7, =LevelLayers + LevelLayers_Clipdata From 24aa0c9925dc92da1a910b8a1bf7d89dd76745aa Mon Sep 17 00:00:00 2001 From: clue cat Date: Mon, 10 Feb 2025 11:46:55 -0500 Subject: [PATCH 05/10] change flag name to better represent functionality --- src/main.s | 2 +- src/qol/unhidden-breakable-tiles.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.s b/src/main.s index 42e69c18..6647f6d8 100644 --- a/src/main.s +++ b/src/main.s @@ -70,7 +70,7 @@ EnvironmentalHazardDps equ 087FF065h MissileLimit equ 087FF06Ah MinorLocationsAddr equ 087FF06Ch RoomNamesAddr equ 087FF070h -RevealUnhiddenTilesFlag equ 087FF08Ch +RevealHiddenTilesFlag equ 087FF08Ch ; Mark end-of-file padding as free space @@EOF equ 0879ECC8h diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index 18a157ba..f12c2c3f 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -17,7 +17,7 @@ .align 2 .func RevealHiddenBreakableTiles push { r4-r7 } - ldr r0, =RevealUnhiddenTilesFlag + ldr r0, =RevealHiddenTilesFlag ldrb r0, [r0] cmp r0, #0 beq @@return From f6589b2347206ae24d19bed063b37592202c33a0 Mon Sep 17 00:00:00 2001 From: clue cat Date: Wed, 12 Feb 2025 16:09:14 -0500 Subject: [PATCH 06/10] move room-names to autoregion and load room name changes last to avoid build errors. The amount of data being added in room-name-display.s causes important functions to exceed their branch distance if loaded first, loading them last and allows autoregion to find sufficient space towards the end of the ROM. --- src/main.s | 2 +- src/qol/unhidden-breakable-tiles.s | 2 +- src/randomizer/room-name-display.s | 37 ++++++++++++++++++------------ 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/main.s b/src/main.s index 6647f6d8..2c824a02 100644 --- a/src/main.s +++ b/src/main.s @@ -169,10 +169,10 @@ RevealHiddenTilesFlag equ 087FF08Ch .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 diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index f12c2c3f..4fe7605c 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -4,7 +4,7 @@ bl RevealHiddenBreakableTiles .endarea -.org RevealUnhiddenTilesFlag +.org RevealHiddenTilesFlag .area 1 .if UNHIDDEN_BREAKABLE_TILES .db 01h diff --git a/src/randomizer/room-name-display.s b/src/randomizer/room-name-display.s index b286ea36..d2aa2563 100644 --- a/src/randomizer/room-name-display.s +++ b/src/randomizer/room-name-display.s @@ -8,7 +8,7 @@ ; ldr r2, [r7] ; mov r1, #0FFh ; r7 is a pointer to the text to show for the Objective/Room Name message box. -; Loading the desired pointer to r7, then running the original lines will get +; Loading the desired pointer to r7, then running the original lines will get ; the room name text to be loaded .func @LoadRoomName @@ -47,7 +47,8 @@ .dw @@Names_Sector6 .endarea -.region 56h * 4 +.autoregion + .align 4 @@Names_MainDeck: .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom @@ -71,9 +72,10 @@ .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom -.endregion +.endautoregion -.region 35h * 4 +.autoregion + .align 4 @@Names_Sector1: .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom @@ -89,9 +91,10 @@ .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom -.endregion +.endautoregion -.region 3Ch * 4 +.autoregion + .align 4 @@Names_Sector2: .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom @@ -108,9 +111,10 @@ .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom -.endregion +.endautoregion -.region 26h * 4 +.autoregion + .align 4 @@Names_Sector3: .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom @@ -122,9 +126,10 @@ .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom -.endregion +.endautoregion -.region 2Fh * 4 +.autoregion + .align 4 @@Names_Sector4: .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom @@ -138,9 +143,10 @@ .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom -.endregion +.endautoregion -.region 33h * 4 +.autoregion + .align 4 @@Names_Sector5: .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom @@ -155,9 +161,10 @@ .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom -.endregion +.endautoregion -.region 28h * 4 +.autoregion + .align 4 @@Names_Sector6: .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom @@ -169,4 +176,4 @@ .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom .dw @UnknownRoom, @UnknownRoom, @UnknownRoom, @UnknownRoom -.endregion \ No newline at end of file +.endautoregion From fa62f58dde42ab5399e3d94cff82c3068f8c705c Mon Sep 17 00:00:00 2001 From: clue cat Date: Sat, 22 Feb 2025 16:05:33 -0500 Subject: [PATCH 07/10] Handle bomb chain tile data when hidden tiles are revealed --- src/qol/unhidden-breakable-tiles.s | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index 4fe7605c..7ef9c248 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -13,6 +13,32 @@ .endif .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 @@ -134,7 +160,7 @@ ; r0 = Block to Search For ; output ; r0 = Replacement Tile, or None (0FFFFh) -.align 2 + .align 2 .func @SearchForHiddenBlocks push { r1-r4, lr } sub sp, #4 From 364c39796f191acb18fdd6a1027c38c1433d42df Mon Sep 17 00:00:00 2001 From: clue cat Date: Sat, 22 Feb 2025 16:19:49 -0500 Subject: [PATCH 08/10] set reveal hidden blocks flag to false by default --- src/main.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.s b/src/main.s index 2c824a02..2e41a519 100644 --- a/src/main.s +++ b/src/main.s @@ -36,7 +36,7 @@ .definelabel UNHIDDEN_MAP, 0 .endif .ifndef UNHIDDEN_BREAKABLE_TILES -.definelabel UNHIDDEN_BREAKABLE_TILES, 1 ; CHANGE ME BEFORE PR +.definelabel UNHIDDEN_BREAKABLE_TILES, 0 .endif .include "inc/constants.inc" From 998fc6cb7faba6605ece096ca1fb689547961b1a Mon Sep 17 00:00:00 2001 From: clue cat Date: Sat, 22 Feb 2025 16:21:12 -0500 Subject: [PATCH 09/10] clean up todo --- src/qol/unhidden-breakable-tiles.s | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index 7ef9c248..10d31c9b 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -139,10 +139,6 @@ .dh ClipdataTile_2x2BottomRightNeverReform, ClipdataRevealed_Weak .dh ClipdataTile_2x2BottomLeftNoReform, ClipdataRevealed_Weak .dh ClipdataTile_2x2BottomRightNoReform, ClipdataRevealed_Weak - ; TODO: Need to change Bomb Chains as the gfx will always point to - ; tile_index + 1. We either need to write code to have bomb chains - ; behave differently or update the table and gfx to have an - ; invisible tile after bomb tiles .dh ClipdataTile_VerticalBombChain1, ClipdataRevealed_Bomb .dh ClipdataTile_VerticalBombChain2, ClipdataRevealed_Bomb .dh ClipdataTile_VerticalBombChain3, ClipdataRevealed_Bomb From 39c8e6adfac5b46c943bc63e9ecd40328d6f5f6f Mon Sep 17 00:00:00 2001 From: clue cat Date: Sat, 22 Feb 2025 18:08:34 -0500 Subject: [PATCH 10/10] Remove assembler flag for unhidden tiles. Fix a bug caused by a janky hijack --- inc/functions.inc | 1 + src/main.s | 3 --- src/qol/unhidden-breakable-tiles.s | 26 ++++++++++++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/inc/functions.inc b/inc/functions.inc index 2a0991c3..6157462b 100644 --- a/inc/functions.inc +++ b/inc/functions.inc @@ -14,6 +14,7 @@ LockHatches equ 08063070h ChangeSuit equ 08063190h SetEventEffect equ 0806342Ch RemoveNeverReformBlocksAndCollectedTanks equ 08064ADCh +RemoveNeverReformBlocks equ 0806B130h SetBg1Tile equ 0806C614h SetSpecialBg1Tile equ 0806C6E4h SetClipdata equ 0806C82Ch diff --git a/src/main.s b/src/main.s index 2e41a519..44fab183 100644 --- a/src/main.s +++ b/src/main.s @@ -35,9 +35,6 @@ .ifndef UNHIDDEN_MAP .definelabel UNHIDDEN_MAP, 0 .endif -.ifndef UNHIDDEN_BREAKABLE_TILES -.definelabel UNHIDDEN_BREAKABLE_TILES, 0 -.endif .include "inc/constants.inc" .include "inc/enums.inc" diff --git a/src/qol/unhidden-breakable-tiles.s b/src/qol/unhidden-breakable-tiles.s index 10d31c9b..f865e80d 100644 --- a/src/qol/unhidden-breakable-tiles.s +++ b/src/qol/unhidden-breakable-tiles.s @@ -1,16 +1,26 @@ .org RemoveNeverReformBlocksAndCollectedTanks -.area 10h, 0 - .skip 0Ah - bl RevealHiddenBreakableTiles +.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 -.if UNHIDDEN_BREAKABLE_TILES - .db 01h -.else .db 00h -.endif .endarea .org 0806B962h ; Editing UpdateBlockAnimation, case 07h @@ -42,7 +52,7 @@ .autoregion .align 2 .func RevealHiddenBreakableTiles - push { r4-r7 } + push { r4-r7, lr } ldr r0, =RevealHiddenTilesFlag ldrb r0, [r0] cmp r0, #0