Winner's Path modifications

- Added a Strength Switch puzzle to floor 2, which took an unhealthy amount of time to do. This is possible in GSC but requires a lot of extremely hacky solutions. There is a glitch that causes the boulder not to move once on the switch if you reload the map but I have been doing this for 3-4 hours, shush.
- Added a depressed switch tile to accomodate the new functionality.
- New switch collision type for boulder puzzles.
- Removed a lot of unused/unreferenced stuff that isn't necessary in Crystal to save space.
This commit is contained in:
Llinos Evans 2024-07-19 11:48:04 +01:00
parent 980b8dc47a
commit 13a253073b
16 changed files with 108 additions and 48 deletions

View file

@ -62,7 +62,7 @@ DEF COLL_PIT EQU $60
DEF COLL_VIRTUAL_BOY EQU $61 ; garbage
DEF COLL_64 EQU $64 ; garbage
DEF COLL_65 EQU $65 ; garbage
DEF COLL_PIT_68 EQU $68 ; unused
DEF COLL_SWITCH EQU $68 ; Previously PIT_68, changed to make a non-warping equivalent to the pit, allowing for RBY cave switch mechanics
DEF COLL_WARP_CARPET_DOWN EQU $70
DEF COLL_DOOR EQU $71
DEF COLL_LADDER EQU $72

View file

@ -1503,7 +1503,10 @@
const EVENT_RADIO_TOWER_5F_ULTRA_BALL
const EVENT_DARK_CAVE_VIOLET_ENTRANCE_DIRE_HIT
const EVENT_BATTLE_TOWER_OPEN_CIVILIANS
; Unused: next 48 events
const EVENT_WINNERS_PATH_ITEM1
const EVENT_WINNERS_PATH_ITEM2
const EVENT_WINNERS_PATH_SWITCH_PRESSED
; Unused: next 45 events
; Nihon Trainers
const EVENT_BEAT_BUG_CATCHER_ELWYN

View file

@ -105,7 +105,7 @@ TileCollisionTable::
db LAND_TILE ; COLL_65
db LAND_TILE ; 66
db LAND_TILE ; 67
db LAND_TILE ; COLL_PIT_68
db LAND_TILE ; COLL_SWITCH
db LAND_TILE ; 69
db WALL_TILE ; 6a
db LAND_TILE ; 6b

Binary file not shown.

View file

@ -77,7 +77,7 @@
tilecoll FLOOR, FLOOR, WALL, FLOOR ; 4c
tilecoll UP_WALL, UP_WALL, FLOOR, FLOOR ; 4d
tilecoll UP_WALL, UP_WALL, FLOOR, FLOOR ; 4e
tilecoll FLOOR, FLOOR, FLOOR, FLOOR ; 4f
tilecoll FLOOR, SWITCH, FLOOR, FLOOR ; 4f
tilecoll FLOOR, WALL, FLOOR, FLOOR ; 50
tilecoll WALL, FLOOR, FLOOR, FLOOR ; 51
tilecoll WALL, FLOOR, FLOOR, LADDER ; 52
@ -85,4 +85,6 @@
tilecoll WATER, WATER, WATER, WATER ; 54
tilecoll WATER, WALL, WATER, WALL ; 55
tilecoll WATER, WALL, WALL, WALL ; 56
tilecoll WALL, WALL, FLOOR, WARP_CARPET_DOWN ; 57
tilecoll WALL, WALL, WALL, FLOOR ; 57
tilecoll FLOOR, WALL, FLOOR, WARP_CARPET_DOWN ; 58
tilecoll FLOOR, SWITCH, FLOOR, FLOOR ; 59

Binary file not shown.

View file

@ -82,9 +82,6 @@ LoadMapObjects:
farcall InitializeVisibleSprites
ret
MapSetup_DummyFunction: ; unreferenced
ret
ResetPlayerObjectAction:
ld hl, wPlayerSpriteSetupFlags
set PLAYERSPRITESETUP_RESET_ACTION_F, [hl]

View file

@ -3,8 +3,6 @@ CheckWarpCollision::
ld a, [wPlayerTile]
cp COLL_PIT
jr z, .warp
cp COLL_PIT_68
jr z, .warp
and $f0
cp HI_NYBBLE_WARPS
jr z, .warp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -153,7 +153,7 @@ CheckCounterTile::
CheckPitTile::
cp COLL_PIT
ret z
cp COLL_PIT_68
cp COLL_SWITCH
ret
CheckIceTile::
@ -519,16 +519,6 @@ _GetMovementIndex::
ld a, h
ret
SetVramState_Bit0:: ; unreferenced
ld hl, wVramState
set 0, [hl]
ret
ResetVramState_Bit0:: ; unreferenced
ld hl, wVramState
res 0, [hl]
ret
UpdateSprites::
ld a, [wVramState]
bit 0, a

View file

@ -282,17 +282,17 @@ BurnedTower1F_MapEvents:
warp_event 9, 15, ECRUTEAK_CITY, 13
warp_event 10, 15, ECRUTEAK_CITY, 13
warp_event 10, 9, BURNED_TOWER_B1F, 1
warp_event 5, 5, BURNED_TOWER_B1F, 1 ; inaccessible, left over from G/S
warp_event 5, 6, BURNED_TOWER_B1F, 1 ; inaccessible, left over from G/S
warp_event 4, 6, BURNED_TOWER_B1F, 1 ; inaccessible, left over from G/S
warp_event 15, 4, BURNED_TOWER_B1F, 2 ; inaccessible, left over from G/S
warp_event 15, 5, BURNED_TOWER_B1F, 2 ; inaccessible, left over from G/S
warp_event 10, 7, BURNED_TOWER_B1F, 3 ; inaccessible, left over from G/S
warp_event 5, 14, BURNED_TOWER_B1F, 4 ; inaccessible, left over from G/S
warp_event 4, 14, BURNED_TOWER_B1F, 4 ; inaccessible, left over from G/S
warp_event 14, 14, BURNED_TOWER_B1F, 5 ; inaccessible, left over from G/S
warp_event 15, 14, BURNED_TOWER_B1F, 5 ; inaccessible, left over from G/S
warp_event 7, 15, BURNED_TOWER_B1F, 6 ; inaccessible, left over from G/S
; warp_event 5, 5, BURNED_TOWER_B1F, 1 ; inaccessible, left over from G/S
; warp_event 5, 6, BURNED_TOWER_B1F, 1 ; inaccessible, left over from G/S
; warp_event 4, 6, BURNED_TOWER_B1F, 1 ; inaccessible, left over from G/S
; warp_event 15, 4, BURNED_TOWER_B1F, 2 ; inaccessible, left over from G/S
; warp_event 15, 5, BURNED_TOWER_B1F, 2 ; inaccessible, left over from G/S
; warp_event 10, 7, BURNED_TOWER_B1F, 3 ; inaccessible, left over from G/S
; warp_event 5, 14, BURNED_TOWER_B1F, 4 ; inaccessible, left over from G/S
; warp_event 4, 14, BURNED_TOWER_B1F, 4 ; inaccessible, left over from G/S
; warp_event 14, 14, BURNED_TOWER_B1F, 5 ; inaccessible, left over from G/S
; warp_event 15, 14, BURNED_TOWER_B1F, 5 ; inaccessible, left over from G/S
; warp_event 7, 15, BURNED_TOWER_B1F, 6 ; inaccessible, left over from G/S
def_coord_events
coord_event 11, 9, SCENE_BURNEDTOWER1F_RIVAL_BATTLE, BurnedTowerRivalBattleScript

View file

@ -155,12 +155,6 @@ BurnedTowerSuicuneMovement2:
remove_sliding
step_end
BurnedTowerUnusedMovement: ; unreferenced
set_sliding
big_step DOWN
remove_sliding
step_end
BurnedTowerSuicuneMovement3:
set_sliding
big_step UP

View file

@ -502,7 +502,7 @@ DebugRoom_MapEvents:
warp_event 19, 34, BLUE_FOREST, 1 ; southern warp
warp_event 33, 33, BLUE_FOREST, 1 ; southeast warp
warp_event 5, 3, AZALEA_TOWN, 1
warp_event 34, 11, WINNERS_PATH_OUTSIDE, 1
warp_event 34, 11, WINNERS_PATH, 3
def_coord_events

View file

@ -420,9 +420,6 @@ IlexForestHiddenSuperPotion:
IlexForestHiddenFullHeal:
hiddenitem FULL_HEAL, EVENT_ILEX_FOREST_HIDDEN_FULL_HEAL
IlexForestBoulder: ; unreferenced
jumpstd StrengthBoulderScript
IlexForestSignpost:
jumptext IlexForestSignpostText

View file

@ -3,10 +3,10 @@
A&1@2'
ST 0U
$&VN#M .................... 
+)K
)))!
))(
( !+JWN#M ....................  
+K
)O+) )
(*))((
( +JXJN#M ....................  
*E*B



View file

@ -1,9 +1,71 @@
object_const_def
const WINNERS_PATH_COOLTRAINERM1
const WINNERS_PATH_COOLTRAINERM2
const WINNERS_PATH_BEAUTY
const WINNERS_PATH_BOULDER1
const WINNERS_PATH_NPCITEM1
const WINNERS_PATH_NPCITEM2
const WINNERS_PATH_ROCK
WinnersPath_MapScripts:
def_scene_scripts
def_callbacks
callback MAPCALLBACK_TILES, WinnersPathSwitchClickCallback
callback MAPCALLBACK_CMDQUEUE, WinnersPathSwitchCallback
; This replicates the boulder switch functionality of RBY.
; Not sure why they removed this to be honest, it's quite nice.
; This is extremely hacky and the boulder won't move if you reload the map and put it back on the switch, but given there's no function for switches and I can't be bothered to make one, this will do.
WinnersPathSwitchCallback:
checkevent EVENT_WINNERS_PATH_SWITCH_PRESSED
iftrue .noBoulderNeeded
writecmdqueue .CommandQueue
.noBoulderNeeded
endcallback
.CommandQueue:
cmdqueue CMDQUEUE_STONETABLE, .StoneTable ; check if any stones are sitting on a warp (or in our case, the switch)
.StoneTable:
stonetable 7, WINNERS_PATH_BOULDER1, .Boulder1
db -1 ; end
.Boulder1:
checkevent EVENT_WINNERS_PATH_SWITCH_PRESSED
iftrue .skip
pause 30
scall .switchClicked
setevent EVENT_WINNERS_PATH_SWITCH_PRESSED
opentext
writetext WinnersPathDoorOpenedText
waitbutton
closetext
changeblock 2, 22, $1C ; boulder gate
changeblock 4, 24, $59 ; switch
reloadmappart
delcmdqueue CMDQUEUE_STONETABLE, .StoneTable
; fallthrough
.skip
end
.switchClicked:
playsound SFX_STRENGTH
earthquake 80
end
WinnersPathSwitchClickCallback:
checkevent EVENT_WINNERS_PATH_SWITCH_PRESSED
iffalse .keepBlock
changeblock 2, 22, $1C ; boulder gate
changeblock 4, 24, $59 ; switch
.keepBlock
endcallback
WinnersPathDoorOpenedText:
text "The switch was"
line "pressed!"
done
WinnersPathSign1Script:
jumptext WinnersPathSign1Text
@ -119,16 +181,29 @@ BeautyJaclynAfterBattleText:
line "CHAMPIONs! Eek!"
done
WinnersPathBoulder:
jumpstd StrengthBoulderScript
WinnersPathRock:
jumpstd SmashRockScript
WinnersPathItem1:
itemball TM_CURSE
WinnersPathItem2:
itemball TM_ROLLOUT
WinnersPath_MapEvents:
db 0, 0 ; filler
def_warp_events
warp_event 3, 49, WINNERS_PATH_OUTSIDE, 3
warp_event 17, 39, WINNERS_PATH, 3
warp_event 17, 29, WINNERS_PATH, 2
warp_event 15, 29, WINNERS_PATH, 2
warp_event 3, 21, WINNERS_PATH, 5
warp_event 3, 11, WINNERS_PATH, 4
warp_event 17, 5, WINNERS_PATH_OUTSIDE, 4 ; Some Route...
warp_event 5, 24, WINNERS_PATH_OUTSIDE, 4 ; Dummy warp for the switch. Hope this works!
def_coord_events
@ -138,5 +213,9 @@ WinnersPath_MapEvents:
def_object_events
object_event 9, 43, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 2, TrainerCoolTrainerErick, -1
object_event 5, 22, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 2, TrainerCoolTrainerAndy, -1
object_event 8, 22, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 2, TrainerCoolTrainerAndy, -1
object_event 7, 8, SPRITE_BEAUTY, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 2, TrainerBeautyJaclyn, -1
object_event 14, 23, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, WinnersPathBoulder, -1
object_event 10, 6, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, WinnersPathItem1, EVENT_WINNERS_PATH_ITEM1
object_event 2, 29, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, WinnersPathItem2, EVENT_WINNERS_PATH_ITEM2
object_event 3, 28, SPRITE_ROCK, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, WinnersPathRock, -1