From 29f98ccb8c07d7ca9e9bb2120c4a1f7aeb7c3cf0 Mon Sep 17 00:00:00 2001 From: xCrystal Date: Sat, 28 Oct 2023 19:09:58 +0200 Subject: [PATCH] Effects of branch (and union) space [Commit 2] (#28) --- constants/collision_constants.asm | 1 + data/collision/collision_permissions.asm | 4 +- data/sprites/secondary_sprites.asm | 8 +-- data/tilesets/board_debug_1_collision.asm | 6 +- data/tilesets/board_debug_1_metatiles.bin | Bin 4096 -> 4096 bytes engine/board/spaces.asm | 62 ++++++++++++++++++ engine/overworld/events.asm | 1 + gfx/tilesets/board_debug_1.png | Bin 4729 -> 2249 bytes gfx/tilesets/board_debug_1_palette_map.asm | 4 +- gfx/tilesets/spaces/fixed_spaces.png | Bin 384 -> 390 bytes gfx/tilesets/spaces/variable_spaces_1.png | Bin 244 -> 424 bytes .../spaces/variable_spaces_1_palette_map.asm | 4 +- macros/scripts/maps.asm | 10 ++- maps/DebugLevel5_Map1.asm | 18 ++++- maps/DebugLevel5_Map1.blk | 2 +- 15 files changed, 104 insertions(+), 16 deletions(-) diff --git a/constants/collision_constants.asm b/constants/collision_constants.asm index 30b54204f..a46b37950 100644 --- a/constants/collision_constants.asm +++ b/constants/collision_constants.asm @@ -124,6 +124,7 @@ DEF COLL_UP_LEFT_BUOY EQU $c7 ; unused const COLL_END_SPACE ; $d6 const COLL_GREY_SPACE ; $d7 const COLL_BRANCH_SPACE ; $d8 + const COLL_UNION_SPACE ; $d9 DEF NUM_COLL_SPACES EQU const_value - $d0 DEF COLL_FF EQU $ff ; garbage diff --git a/data/collision/collision_permissions.asm b/data/collision/collision_permissions.asm index 564c6813c..586406e2c 100644 --- a/data/collision/collision_permissions.asm +++ b/data/collision/collision_permissions.asm @@ -217,8 +217,8 @@ TileCollisionTable:: db LAND_TILE ; COLL_MINIGAME_SPACE db LAND_TILE ; COLL_END_SPACE db LAND_TILE ; COLL_GREY_SPACE - db LAND_TILE ; d8 - db LAND_TILE ; d9 + db LAND_TILE ; COLL_BRANCH_SPACE + db LAND_TILE ; COLL_UNION_SPACE db LAND_TILE ; da db LAND_TILE ; db db LAND_TILE ; dc diff --git a/data/sprites/secondary_sprites.asm b/data/sprites/secondary_sprites.asm index 4c97144b6..3dad145c7 100644 --- a/data/sprites/secondary_sprites.asm +++ b/data/sprites/secondary_sprites.asm @@ -116,7 +116,7 @@ SpacesLeftNumberOAM: BranchArrowsOAM: ; the PAL_ argument is unused (actual palette comes from the player gender) - dbsprite 10, 7, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE, PAL_OW_RED ; right - dbsprite 8, 7, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE + 1, PAL_OW_RED ; left - dbsprite 9, 6, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE + 2, PAL_OW_RED ; up - dbsprite 9, 8, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE + 3, PAL_OW_RED ; down + dbsprite 11, 10, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE, PAL_OW_RED ; right + dbsprite 7, 10, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE + 1, PAL_OW_RED ; left + dbsprite 9, 8, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE + 2, PAL_OW_RED ; up + dbsprite 9, 12, 4, 0, BRANCH_ARROWS_OAM_FIRST_TILE + 3, PAL_OW_RED ; down diff --git a/data/tilesets/board_debug_1_collision.asm b/data/tilesets/board_debug_1_collision.asm index c7fc2d998..75bf6cd53 100755 --- a/data/tilesets/board_debug_1_collision.asm +++ b/data/tilesets/board_debug_1_collision.asm @@ -67,7 +67,7 @@ tilecoll WALL, WALL, FLOOR, WALL ; 42 tilecoll WATER, WATER, WATER, WATER ; 43 tilecoll WALL, FLOOR, WALL, FLOOR ; 44 - tilecoll WALL, FLOOR, FLOOR, FLOOR ; 45 + tilecoll FLOOR, FLOOR, FLOOR, FLOOR ; 45 tilecoll FLOOR, WALL, FLOOR, WALL ; 46 tilecoll FLOOR, FLOOR, FLOOR, WALL ; 47 tilecoll WALL, FLOOR, WALL, WALL ; 48 @@ -124,8 +124,8 @@ tilecoll WALL, WALL, WALL, WALL ; 7b tilecoll WALL, WALL, WALL, WALL ; 7c tilecoll WALL, WALL, WALL, WALL ; 7d - tilecoll WALL, WALL, WALL, WALL ; 7e - tilecoll WALL, WALL, WALL, WALL ; 7f + tilecoll BRANCH_SPACE, FLOOR, FLOOR, FLOOR ; 7e + tilecoll UNION_SPACE, FLOOR, FLOOR, FLOOR ; 7f tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 80 tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 81 tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 82 diff --git a/data/tilesets/board_debug_1_metatiles.bin b/data/tilesets/board_debug_1_metatiles.bin index ccd37cf62650f7a51ea1a6ffe60d91362c070019..e625f6a4fd9e5f8c9ab39a0e2b0f3a8d7f2e5211 100755 GIT binary patch delta 43 kcmZorXi(VjfL-CiLpHV#AKBpG(PLKDPoG)gU=arg05hQrdH?_b delta 43 wcmZorXi(VjfL)=Xv9YnaWpZn0S9i~Zi4!LRxlL`8+dF!@`}%?0NsBl*0K=ga-~a#s diff --git a/engine/board/spaces.asm b/engine/board/spaces.asm index f338cc9d2..36c909e8f 100755 --- a/engine/board/spaces.asm +++ b/engine/board/spaces.asm @@ -127,6 +127,8 @@ LandedInRegularSpace: BranchSpaceScript:: scall .ArriveToBranchSpaceScript + callasm .PromptPlayerToChooseDirection + wait 200 end .ArriveToBranchSpaceScript: @@ -152,3 +154,63 @@ BranchSpaceScript:: .DisableDirectionsRequiringLockedTechniques: ret + +.PromptPlayerToChooseDirection: +; compute available directions in b as joypad dpad flags + ld hl, wTempSpaceBranchStruct + ld b, 0 + ld a, [hli] + cp -1 + jr z, .not_right + set D_RIGHT_F, b +.not_right + ld a, [hli] + cp -1 + jr z, .not_left + set D_LEFT_F, b +.not_left + ld a, [hli] + cp -1 + jr z, .not_up + set D_UP_F, b +.not_up + ld a, [hli] + cp -1 + jr z, .joypad_loop + set D_DOWN_F, b + +; sample input of an available direction +.joypad_loop + call GetJoypad + ldh a, [hJoyPressed] + and b + jr z, .joypad_loop + +; load the next space for the chosen direction + ld hl, wTempSpaceBranchStruct + bit D_RIGHT_F, a + jr nz, .ok + inc hl + bit D_LEFT_F, a + jr nz, .ok + inc hl + bit D_UP_F, a + jr nz, .ok + inc hl +.ok + ld a, [hl] + ld [wCurSpaceNextSpace], a + ld hl, wDisplaySecondarySprites + res SECONDARYSPRITES_BRANCH_ARROWS_F, [hl] + jp PlayClickSFX + +UnionSpaceScript:: + callasm .ArriveToUnionSpace + end + +.ArriveToUnionSpace: +; these are just transition spaces, so simply load the next space + ld a, [wCurSpaceNextSpace] + ld [wCurSpace], a + call LoadCurSpaceData + end diff --git a/engine/overworld/events.asm b/engine/overworld/events.asm index 89107d76e..b274f94fa 100644 --- a/engine/overworld/events.asm +++ b/engine/overworld/events.asm @@ -385,6 +385,7 @@ CheckBoardEvent: dw EndSpaceScript ; COLL_END_SPACE dw GreySpaceScript ; COLL_GREY_SPACE dw BranchSpaceScript ; COLL_BRANCH_SPACE + dw UnionSpaceScript ; COLL_UNION_SPACE assert_table_length NUM_COLL_SPACES CheckTrainerEvent: diff --git a/gfx/tilesets/board_debug_1.png b/gfx/tilesets/board_debug_1.png index 94f098e87d72de4a1a038bbc09a8b15a38a67e65..ce38d6dfa1edfb64a423af4d1163bf30ae927dfc 100755 GIT binary patch literal 2249 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 XGd@=*+?O;100000NkvXXu0mjf=$euq delta 319 zcmV-F0l@x-1AqgN83+OZ002=s;NOuUHGdUJL_t(oN9~y54uUWYgop1q9+ExeJa=VT zkPWSg*24E=Y4K>xbt}rWEK3Mso@cCMs3e#E8J+&o0I1uWdsNv8^)W_X9FS5{)SnPh zjr+^>efSM<4_2G{u}7??tIznA`dr_te`7vYgN?wNzIA6>k-V_6@00qwsOw7ue1AaS z;RRtTpIOCE189BDS@NR+#;yL>|*!X4U^QY;uP RQn&yB002ovPDHLkV1h^ynL7Xg diff --git a/gfx/tilesets/spaces/variable_spaces_1.png b/gfx/tilesets/spaces/variable_spaces_1.png index 0e07d546a5bfbdc493b6ec869d128d8901cbb72c..c1bf07410ba6aca54d4b140653141ef596112adb 100755 GIT binary patch delta 360 zcmV-u0hj*t0jL9z83+ad007=tcZiW8G=Bj-NklAZJKCiOWiH8r5e zL@;^%KwC&n=>7U^0N5CS!ji#91OV`FP18jE7Jc7SkGX-+`}Hrn5=ip_uGuInsDGEu zf_3sBR~veteiZ;Vi<1TT+G-?&;K(2a&tw$ z0BQ!}9ybk-dCn8Txhw%V!a&~l<=(Hy(AT~rxR%ulpv?k$41E~*KQwItTi}hM*0^Tx zfigIbRRFYMx^YeIO`+64NgLe95>)_gm~LRNfqS&UIW%nnXPVD{Pg=;;hTf;gX>Rt$ zXDlBE_vmq`#LB{lOe<0odcU3m@Ey7b`4BDW2M)bQpV9}vXlogAaq58p0000#6VP z$$k{>FT3B@$_4D5aNh?Y6b=B!0l+u_7zY630AL&dj01pi0I)uQeHm}KfV~s$`5-fH h=}gbx(Mu