From aa91909388f46924f6c1e2721f70d451b80c2319 Mon Sep 17 00:00:00 2001 From: xCrystal Date: Sat, 30 Dec 2023 00:27:50 +0100 Subject: [PATCH] Implement Surf technique, avoid facing-tile events when player has yet to STEP_TURN or while not in BOARDEVENT_HANDLE_BOARD [bugfix to previous two commits] (#34) new tile permission SPACE_TILE added, which acts as WATER_TILE while on PLAYER_SURF or PLAYER_SURF_PIKA state, as LAND_TILE otherwise --- constants/collision_constants.asm | 1 + data/collision/collision_permissions.asm | 32 ++++++++--------- data/tilesets/board_debug_1_collision.asm | 34 +++++++++--------- data/tilesets/board_debug_1_metatiles.bin | 2 +- engine/events/overworld.asm | 12 ++++++- engine/overworld/events.asm | 43 ++++++++++++++++++++++- engine/overworld/player_movement.asm | 6 ++++ maps/DebugLevel2_Map1.asm | 2 +- maps/DebugLevel5_Map1.blk | 2 +- 9 files changed, 96 insertions(+), 38 deletions(-) diff --git a/constants/collision_constants.asm b/constants/collision_constants.asm index 4a134eb5a..ea222d1c6 100644 --- a/constants/collision_constants.asm +++ b/constants/collision_constants.asm @@ -1,6 +1,7 @@ ; collision permissions (see data/collision/collision_permissions.asm) DEF LAND_TILE EQU $00 DEF WATER_TILE EQU $01 +DEF SPACE_TILE EQU $03 ; acts as WATER_TILE while on PLAYER_SURF or PLAYER_SURF_PIKA state, as LAND_TILE otherwise DEF WALL_TILE EQU $0f DEF TALK EQU $10 diff --git a/data/collision/collision_permissions.asm b/data/collision/collision_permissions.asm index 1fcd08e24..34e1613b0 100644 --- a/data/collision/collision_permissions.asm +++ b/data/collision/collision_permissions.asm @@ -209,22 +209,22 @@ TileCollisionTable:: db WATER_TILE ; cd db WATER_TILE ; ce db WATER_TILE ; cf - db LAND_TILE ; COLL_BLUE_SPACE - db LAND_TILE ; COLL_RED_SPACE - db LAND_TILE ; COLL_GREEN_SPACE - db LAND_TILE ; COLL_ITEM_SPACE - db LAND_TILE ; COLL_POKEMON_SPACE - db LAND_TILE ; COLL_MINIGAME_SPACE - db LAND_TILE ; COLL_END_SPACE - db LAND_TILE ; COLL_GREY_SPACE - db LAND_TILE ; COLL_BRANCH_SPACE - db LAND_TILE ; COLL_UNION_SPACE - db LAND_TILE ; da - db LAND_TILE ; db - db LAND_TILE ; dc - db LAND_TILE ; dd - db LAND_TILE ; de - db LAND_TILE ; df + db SPACE_TILE ; COLL_BLUE_SPACE + db SPACE_TILE ; COLL_RED_SPACE + db SPACE_TILE ; COLL_GREEN_SPACE + db SPACE_TILE ; COLL_ITEM_SPACE + db SPACE_TILE ; COLL_POKEMON_SPACE + db SPACE_TILE ; COLL_MINIGAME_SPACE + db SPACE_TILE ; COLL_END_SPACE + db SPACE_TILE ; COLL_GREY_SPACE + db SPACE_TILE ; COLL_BRANCH_SPACE + db SPACE_TILE ; COLL_UNION_SPACE + db SPACE_TILE ; da + db SPACE_TILE ; db + db SPACE_TILE ; dc + db SPACE_TILE ; dd + db SPACE_TILE ; de + db SPACE_TILE ; df db LAND_TILE ; e0 db LAND_TILE ; e1 db LAND_TILE ; e2 diff --git a/data/tilesets/board_debug_1_collision.asm b/data/tilesets/board_debug_1_collision.asm index a4d089fdd..f18bc1e79 100755 --- a/data/tilesets/board_debug_1_collision.asm +++ b/data/tilesets/board_debug_1_collision.asm @@ -144,10 +144,10 @@ tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 8f tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 90 tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 91 - tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 92 - tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 93 - tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 94 - tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 95 + tilecoll BLUE_SPACE, WATER, WATER, WATER ; 92 + tilecoll BLUE_SPACE, WATER, WATER, WATER ; 93 + tilecoll BLUE_SPACE, WATER, FLOOR, WATER ; 94 + tilecoll BLUE_SPACE, WATER, FLOOR, WATER ; 95 tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 96 tilecoll BLUE_SPACE, FLOOR, FLOOR, FLOOR ; 97 tilecoll POKEMON_SPACE, FLOOR, FLOOR, FLOOR ; 98 @@ -176,10 +176,10 @@ tilecoll POKEMON_SPACE, FLOOR, FLOOR, FLOOR ; af tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b0 tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b1 - tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b2 - tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b3 - tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b4 - tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b5 + tilecoll RED_SPACE, WATER, WATER, WATER ; b2 + tilecoll RED_SPACE, WATER, WATER, WATER ; b3 + tilecoll RED_SPACE, WATER, FLOOR, WATER ; b4 + tilecoll RED_SPACE, WATER, FLOOR, WATER ; b5 tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b6 tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b7 tilecoll RED_SPACE, FLOOR, FLOOR, FLOOR ; b8 @@ -205,13 +205,13 @@ tilecoll GREEN_SPACE, FLOOR, FLOOR, FLOOR ; cc tilecoll GREEN_SPACE, FLOOR, FLOOR, FLOOR ; cd tilecoll ITEM_SPACE, FLOOR, FLOOR, FLOOR ; ce - tilecoll FLOOR, FLOOR, FLOOR, FLOOR ; cf + tilecoll MINIGAME_SPACE, FLOOR, FLOOR, FLOOR ; cf tilecoll END_SPACE, FLOOR, FLOOR, FLOOR ; d0 tilecoll GREEN_SPACE, FLOOR, FLOOR, FLOOR ; d1 - tilecoll ITEM_SPACE, FLOOR, FLOOR, FLOOR ; d2 - tilecoll MINIGAME_SPACE, FLOOR, FLOOR, FLOOR ; d3 - tilecoll GREEN_SPACE, FLOOR, FLOOR, FLOOR ; d4 - tilecoll GREEN_SPACE, FLOOR, FLOOR, FLOOR ; d5 + tilecoll ITEM_SPACE, WATER, WATER, WATER ; d2 + tilecoll MINIGAME_SPACE, WATER, WATER, WATER ; d3 + tilecoll GREEN_SPACE, WATER, FLOOR, WATER ; d4 + tilecoll GREEN_SPACE, WATER, FLOOR, WATER ; d5 tilecoll ITEM_SPACE, FLOOR, FLOOR, FLOOR ; d6 tilecoll MINIGAME_SPACE, FLOOR, FLOOR, FLOOR ; d7 tilecoll END_SPACE, FLOOR, FLOOR, FLOOR ; d8 @@ -240,10 +240,10 @@ tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; ef tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f0 tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f1 - tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f2 - tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f3 - tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f4 - tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f5 + tilecoll GREY_SPACE, WATER, WATER, WATER ; f2 + tilecoll GREY_SPACE, WATER, WATER, WATER ; f3 + tilecoll GREY_SPACE, WATER, FLOOR, WATER ; f4 + tilecoll GREY_SPACE, WATER, FLOOR, WATER ; f5 tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f6 tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f7 tilecoll GREY_SPACE, FLOOR, FLOOR, FLOOR ; f8 diff --git a/data/tilesets/board_debug_1_metatiles.bin b/data/tilesets/board_debug_1_metatiles.bin index e4610723d..1d44bf682 100755 --- a/data/tilesets/board_debug_1_metatiles.bin +++ b/data/tilesets/board_debug_1_metatiles.bin @@ -1,4 +1,4 @@ ././././>?>?././././>?>?23XXBCXXXXXX1666AHHHAHHHQRRR6664HHHDHHHDRRRT+,,-;<<=;<<=KLLM@@@@@@@@ZZ@@YY@@@@ZZ@@YY@@@@@@@@&&&&&& && 789: 789:   -  789: &&#$789:&& <<<< ¡¢£°±²³¨©ª«<<<<¤¥¦§´µ¶·¬­®¯ASSSQRRR"A”•PQRRSSSDRRRT•–D%RRTU"A”•PQRR"A”•PQRR•–D%RRTU•–D%RRTUASSSQRRR”•–—˜˜˜SSSSRRRR'(”•)*˜˜"A”•PQRR;'(;—)*•–D%RRTU•–=˜˜™=>?>?SSSSSSSSSSSSRRRR”••–˜˜˜˜>?>?1SSSASSS>?>?SSS4SSSDASSSQRRR•'(—˜)*SSSDRRRT••–˜˜˜™XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX¸¹º»œQRR;›'(;—)*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX¼½¾¿RRRT•–=˜˜™=>?>?>?>?ZZZZJYYYJJZZZZYYYYZZZZYYYJJJIIIIJJJJNO^_JJJJNO^_JJZZZZYYYYZZZZYYYYJJZZZZYYYYLL;;;;====;;;;====;;;KLLL===LLLM;;;KLLL===LLLM\LLL===LLL];;;LLLLLLLL====;;;;LL>?E>?>?>?>?>?>?>?>?>?E>?>?>?>?>?>?>?>?E>?>?>?>?>?>?>?>?>?E>?;;<<;;<<;;<<;;<<<<==<<==<<==<<==<+,,+;<<;;<<;;<<,,-<<<=-<<==<<==;;<<;;<<;KLLKLLL<<==<<==LLM=LLLM<<<<<<<?>?SSSSSSSSSSSSRRRR”••–˜˜˜˜>?>?1SSSASSS>?>?SSS4SSSDASSSQRRR•'(—˜)*SSSDRRRT••–˜˜˜™XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX¸¹º»œQRR;›'(;—)*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX¼½¾¿RRRT•–=˜˜™=>?>?>?>?ZZZZJYYYJJZZZZYYYYZZZZYYYJJJIIIIJJJJNO^_JJJJNO^_JJZZZZYYYYZZZZYYYYJJZZZZYYYYLL;;;;====;;;;====;;;KLLL===LLLM;;;KLLL===LLLM\LLL===LLL];;;LLLLLLLL====;;;;LL>?E>?>?>?>?>?>?>?>?>?E>?>?>?>?>?>?>?>?E>?>?>?>?>?>?>?>?>?E>?;;<<;;<<;;<<;;<<<<==<<==<<==<<==<+,,+;<<;;<<;;<<,,-<<<=-<<==<<==;;<<;;<<;KLLKLLL<<==<<==LLM=LLLM<<<<<<<