summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rwxr-xr-xengine/events/overworld.asm6
-rwxr-xr-xengine/events/whiteout.asm2
-rw-r--r--engine/menus/intro_menu.asm6
-rwxr-xr-xengine/overworld/map_objects.asm10
-rw-r--r--engine/overworld/map_setup.asm256
-rwxr-xr-xengine/overworld/player_object.asm2
-rw-r--r--engine/overworld/spawn_points.asm56
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