diff options
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/events/overworld.asm | 6 | ||||
-rwxr-xr-x | engine/events/whiteout.asm | 2 | ||||
-rw-r--r-- | engine/menus/intro_menu.asm | 6 | ||||
-rwxr-xr-x | engine/overworld/map_objects.asm | 10 | ||||
-rw-r--r-- | engine/overworld/map_setup.asm | 256 | ||||
-rwxr-xr-x | engine/overworld/player_object.asm | 2 | ||||
-rw-r--r-- | engine/overworld/spawn_points.asm | 56 |
7 files changed, 325 insertions, 13 deletions
diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm index f4e420bb..a0633db2 100755 --- a/engine/events/overworld.asm +++ b/engine/events/overworld.asm @@ -555,7 +555,7 @@ TryToFly: jr z, .asm_caaa cp $1c jr nc, .asm_caaa - ld [wceec], a + ld [wDefaultSpawnpoint], a call CloseWindow ld a, $1 ret @@ -592,7 +592,7 @@ FlyScript: callasm FlyFromAnimation farscall Script_AbortBugContest special WarpToSpawnPoint - callasm DelayLoadingNewSprites ; 1560c + callasm SkipUpdateMapSprites loadvar VAR_MOVEMENT, PLAYER_NORMAL newloadmap MAPSETUP_TELEPORT callasm FlyToAnimation @@ -868,7 +868,7 @@ TryTeleport: rst FarCall jr nc, .asm_cc9c ld a, c - ld [wceec], a + ld [wDefaultSpawnpoint], a ld a, $1 ret diff --git a/engine/events/whiteout.asm b/engine/events/whiteout.asm index bcab820b..fd273b51 100755 --- a/engine/events/whiteout.asm +++ b/engine/events/whiteout.asm @@ -71,5 +71,5 @@ GetWhiteoutSpawn: xor a ; SPAWN_HOME .yes - ld [wceec], a + ld [wDefaultSpawnpoint], a ret diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm index 83456b80..0d8f7712 100644 --- a/engine/menus/intro_menu.asm +++ b/engine/menus/intro_menu.asm @@ -254,7 +254,7 @@ MainMenu_NewGame: call OakSpeech call InitializeWorld ld a, $0 - ld [wceec], a + ld [wDefaultSpawnpoint], a ld a, $f1 ldh [hMapEntryMethod], a jp FinishContinueFunction @@ -522,13 +522,13 @@ MainMenu_Continue: .asm_5e42 ld a, $e - ld [wceec], a + ld [wDefaultSpawnpoint], a call PostCreditsSpawn jp FinishContinueFunction SpawnAfterRed: ; 5e4d (1:5e4d) ld a, $1a - ld [wceec], a + ld [wDefaultSpawnpoint], a PostCreditsSpawn: ; 5e52 (1:5e52) xor a ld [wd1db], a diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm index 8aab8d53..6909af22 100755 --- a/engine/overworld/map_objects.asm +++ b/engine/overworld/map_objects.asm @@ -933,12 +933,12 @@ Function5730:: ; 5730 (1:5730) ld [wPlayerObjectStepFrame], a call Function574f farcall CheckWarpFacingDown - call c, Function5770 + call c, SpawnInFacingDown call Function5761 ret Function574f: ; 574f (1:574f) - ld hl, wd182 + ld hl, wPlayerSpriteSetupFlags bit 7, [hl] jr nz, .asm_575b bit 6, [hl] @@ -951,16 +951,16 @@ Function574f: ; 574f (1:574f) ret Function5761: ; 5761 (1:5761) - ld hl, wd182 + ld hl, wPlayerSpriteSetupFlags bit 5, [hl] ret z - ld a, [wd182] + ld a, [wPlayerSpriteSetupFlags] and $3 add a add a jr asm_5772 -Function5770: ; 5770 (1:5770) +SpawnInFacingDown: ld a, $0 asm_5772: ld bc, wObjectStructs diff --git a/engine/overworld/map_setup.asm b/engine/overworld/map_setup.asm new file mode 100644 index 00000000..cf1c7d03 --- /dev/null +++ b/engine/overworld/map_setup.asm @@ -0,0 +1,256 @@ +RunMapSetupScript:: + ldh a, [hMapEntryMethod] + and $f + dec a + ld c, a + ld b, 0 + ld hl, MapSetupScripts + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + call ReadMapSetupScript + ret + +INCLUDE "data/maps/setup_scripts.asm" + +ReadMapSetupScript: +.loop + ld a, [hli] + cp map_end + ret z + + push hl + + ld c, a + ld b, 0 + ld hl, MapSetupCommands + add hl, bc + add hl, bc + add hl, bc + + ; bank + ld b, [hl] + inc hl + + ; address + ld a, [hli] + ld h, [hl] + ld l, a + + ; Bit 7 of the bank indicates a parameter. + ; This is left unused. + bit 7, b + jr z, .go + + pop de + ld a, [de] + ld c, a + inc de + push de + +.go + ld a, b + and $7f + rst FarCall + + pop hl + jr .loop + +MapSetupCommands: +; entries correspond to command indexes in constants/map_setup_constants.asm + dba EnableLCD ; 00 + dba DisableLCD ; 01 + dba InitSound ; 02 + dba PlayMapMusic ; 03 + dba RestartMapMusic ; 04 + dba FadeToMapMusic ; 05 + dba FadeMapMusicAndPalettes ; 06 + dba PlayMapMusicBike ; 07 + dba ForceMapMusic ; 08 + dba FadeInMusic ; 09 + dba LoadBlockData ; 0a (callback 1) + dba LoadConnectionBlockData ; 0b + dba SaveScreen ; 0c + dba BufferScreen ; 0d + dba LoadMapGraphics ; 0e + dba LoadMapTileset ; 0f + dba LoadMapTimeOfDay ; 10 + dba LoadMapPalettes ; 11 + dba LoadWildMonData ; 12 + dba RefreshMapSprites ; 13 + dba HandleNewMap ; 14 + dba HandleContinueMap ; 15 + dba LoadMapObjects ; 16 + dba EnterMapSpawnPoint ; 17 + dba EnterMapConnection ; 18 + dba EnterMapWarp ; 19 + dba LoadMapAttributes ; 1a + dba LoadMapAttributes_SkipObjects ; 1b + dba ClearBGPalettes ; 1c + dba FadeOutPalettes ; 1d + dba FadeInPalettes ; 1e + dba GetMapScreenCoords ; 1f + dba GetWarpDestCoords ; 20 + dba SpawnInFacingDown ; 21 + dba SpawnPlayer ; 22 + dba RefreshPlayerCoords ; 23 + dba ResetPlayerObjectAction ; 24 + dba SkipUpdateMapSprites ; 25 + dba UpdateRoamMons ; 26 + dba JumpRoamMons ; 27 + dba FadeOutMapMusic ; 28 + dba ActivateMapAnims ; 29 + dba SuspendMapAnims ; 2a + dba ApplyMapPalettes ; 2b + dba EnableTextAcceleration ; 2c + +EnableTextAcceleration: + xor a + ld [wDisableTextAcceleration], a + ret + +UnusedActivateMapAnims: + ld a, $1 + ldh [hMapAnims], a + ret + +UnusedSuspendMapAnims: + xor a + ldh [hMapAnims], a + ret + +LoadMapObjects: + ld a, MAPCALLBACK_OBJECTS + call RunMapCallback + farcall LoadObjectMasks + farcall InitializeVisibleSprites + ret + +; unused + ret + +ResetPlayerObjectAction: + ld hl, wPlayerSpriteSetupFlags + set PLAYERSPRITESETUP_RESET_ACTION_F, [hl] + ret + +SkipUpdateMapSprites: + ld hl, wPlayerSpriteSetupFlags + set PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F, [hl] + ret + +CheckReplaceChrisSprite:: + nop + call .CheckBiking + jr c, .ok + call .CheckSurfing + jr c, .ok + call .CheckSurfing2 + jr c, .ok + ret + +.ok + call ReplaceChrisSprite + ret + +.CheckBiking: + and a + ld hl, wBikeFlags + bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl] + ret z + ld a, PLAYER_BIKE + ld [wPlayerState], a + scf + ret + +.CheckSurfing2: + ld a, [wPlayerState] + cp PLAYER_NORMAL + jr z, .nope + cp PLAYER_SKATE + jr z, .nope + cp PLAYER_SURF + jr z, .surfing + cp PLAYER_SURF_PIKA + jr z, .surfing + call GetMapEnvironment + cp INDOOR + jr z, .no_biking + cp ENVIRONMENT_5 + jr z, .no_biking + cp DUNGEON + jr z, .no_biking + jr .nope +.no_biking + ld a, [wPlayerState] + cp PLAYER_BIKE + jr nz, .nope +.surfing + ld a, PLAYER_NORMAL + ld [wPlayerState], a + scf + ret + +.nope + and a + ret + +.CheckSurfing: + call CheckOnWater + jr nz, .nope2 + ld a, [wPlayerState] + cp PLAYER_SURF + jr z, .is_surfing + cp PLAYER_SURF_PIKA + jr z, .is_surfing + ld a, PLAYER_SURF + ld [wPlayerState], a +.is_surfing + scf + ret + +.nope2 + and a + ret + +FadeOutMapMusic: + ld a, 6 + call SkipMusic + ret + +ActivateMapAnims: + ld a, $1 + ldh [hMapAnims], a + ret + +SuspendMapAnims: + xor a + ldh [hMapAnims], a + ret + +ApplyMapPalettes: + farcall _UpdateTimePals + ret + +FadeMapMusicAndPalettes: + ld e, 0 + ld a, [wMusicFadeID] + ld d, 0 + ld a, [wMusicFadeID + 1] + ld a, $4 + ld [wMusicFade], a + call RotateThreePalettesRight + ret + +ForceMapMusic: + ld a, [wPlayerState] + cp PLAYER_BIKE + jr nz, .notbiking + call MinVolume + ld a, $88 + ld [wMusicFade], a +.notbiking + call TryRestartMapMusic + ret diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm index 5cde13e7..e5a0c374 100755 --- a/engine/overworld/player_object.asm +++ b/engine/overworld/player_object.asm @@ -206,7 +206,7 @@ CopyMapObjectToTempObject: ; 870d (2:470d) ld [wcea1], a ret -InitializeVariableSprites: +InitializeVisibleSprites: ld bc, wMap2Object ld a, $2 .asm_876c diff --git a/engine/overworld/spawn_points.asm b/engine/overworld/spawn_points.asm new file mode 100644 index 00000000..1b92b1e0 --- /dev/null +++ b/engine/overworld/spawn_points.asm @@ -0,0 +1,56 @@ +EnterMapSpawnPoint: + ; loads the spawn point in wDefaultSpawnpoint + push hl + push de + ld a, [wDefaultSpawnpoint] + cp SPAWN_N_A + jr z, .spawn_n_a + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, SpawnPoints + add hl, de + ld a, [hli] + ld [wMapGroup], a + ld a, [hli] + ld [wMapNumber], a + ld a, [hli] + ld [wXCoord], a + ld a, [hli] + ld [wYCoord], a +.spawn_n_a + pop de + pop hl + ret + +IsSpawnPoint: +; Checks if the map loaded in de is a spawn point. Returns carry if it's a spawn point. + ld hl, SpawnPoints + ld c, 0 +.loop + ld a, [hl] + cp SPAWN_N_A + jr z, .nope + cp d + jr nz, .next + inc hl + ld a, [hld] + cp e + jr z, .yes + +.next + push bc + ld bc, 4 ; length of a spawn table entry + add hl, bc + pop bc + inc c + jr .loop + +.nope + and a + ret + +.yes + scf + ret |