summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rwxr-xr-xengine/events/forced_movement.asm51
-rwxr-xr-xengine/events/heal_machine_anim.asm262
-rwxr-xr-xengine/events/whiteout.asm76
-rw-r--r--engine/facings.asm3
-rwxr-xr-xengine/sprites_dump.asm0
5 files changed, 389 insertions, 3 deletions
diff --git a/engine/events/forced_movement.asm b/engine/events/forced_movement.asm
new file mode 100755
index 00000000..69f27bfe
--- /dev/null
+++ b/engine/events/forced_movement.asm
@@ -0,0 +1,51 @@
+Script_ForcedMovement::
+ checkcode VAR_FACING
+ ifequal DOWN, .down
+ ifequal UP, .up
+ ifequal LEFT, .left
+ ifequal RIGHT, .right
+ end
+
+.up
+ applymovement PLAYER, .MovementData_up
+ end
+
+.down
+ applymovement PLAYER, .MovementData_down
+ end
+
+.right
+ applymovement PLAYER, .MovementData_right
+ end
+
+.left
+ applymovement PLAYER, .MovementData_left
+ end
+
+.MovementData_up:
+ step_dig 16
+ turn_in DOWN
+ step_dig 16
+ turn_head DOWN
+ step_end
+
+.MovementData_down:
+ step_dig 16
+ turn_in UP
+ step_dig 16
+ turn_head UP
+ step_end
+
+.MovementData_right:
+ step_dig 16
+ turn_in LEFT
+ step_dig 16
+ turn_head LEFT
+ step_end
+
+.MovementData_left:
+ step_dig 16
+ turn_in RIGHT
+ step_dig 16
+ turn_head RIGHT
+ step_end
diff --git a/engine/events/heal_machine_anim.asm b/engine/events/heal_machine_anim.asm
new file mode 100755
index 00000000..9770c35b
--- /dev/null
+++ b/engine/events/heal_machine_anim.asm
@@ -0,0 +1,262 @@
+; HealMachineAnim.Jumptable indexes
+ const_def
+ const HEALMACHINESTATE_LOADGFX
+ const HEALMACHINESTATE_PCLOADBALLS
+ const HEALMACHINESTATE_HOFLOADBALLS
+ const HEALMACHINESTATE_PLAYMUSIC
+ const HEALMACHINESTATE_HOFPLAYSFX
+ const HEALMACHINESTATE_FINISH
+
+HealMachineAnim:
+ ; If you have no Pokemon, don't change the buffer. This can lead to some glitchy effects if you have no Pokemon.
+ ld a, [wPartyCount]
+ and a
+ ret z
+ ; The location of the healing machine relative to the player is stored in wScriptVar.
+ ; 0: Up and left (Pokemon Center)
+ ; 1: Left (Elm's Lab)
+ ; 2: Up (Hall of Fame)
+ ld a, [wScriptVar]
+ ld [wBuffer1], a
+ ldh a, [rOBP1]
+ ld [wBuffer2], a
+ call .DoJumptableFunctions
+ ld a, [wBuffer2]
+ call DmgToCgbObjPal1
+ ret
+
+.DoJumptableFunctions:
+ xor a
+ ld [wBuffer3], a
+.jumpable_loop
+ ld a, [wBuffer1]
+ ld e, a
+ ld d, 0
+ ld hl, .Pointers
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wBuffer3]
+ ld e, a
+ inc a
+ ld [wBuffer3], a
+ add hl, de
+ ld a, [hl]
+ cp HEALMACHINESTATE_FINISH
+ jr z, .finish
+ ld hl, .Jumptable
+ rst JumpTable
+ jr .jumpable_loop
+
+.finish
+ ret
+
+.Pointers:
+; entries correspond to HEALMACHINE_* constants
+ dw .Pokecenter
+ dw .ElmLab
+ dw .HallOfFame
+
+healmachineanimseq: MACRO
+rept _NARG
+ db HEALMACHINESTATE_\1
+ shift
+endr
+ENDM
+
+.Pokecenter:
+ healmachineanimseq LOADGFX, PCLOADBALLS, PLAYMUSIC, FINISH
+.ElmLab:
+ healmachineanimseq LOADGFX, PCLOADBALLS, PLAYMUSIC, FINISH
+.HallOfFame:
+ healmachineanimseq LOADGFX, HOFLOADBALLS, HOFPLAYSFX, FINISH
+
+.Jumptable:
+; entries correspond to HEALMACHINESTATE_* constants
+ dw .LoadGFX
+ dw .PC_LoadBallsOntoMachine
+ dw .HOF_LoadBallsOntoMachine
+ dw .PlayHealMusic
+ dw .HOF_PlaySFX
+ dw .dummy_5 ; never encountered
+
+.LoadGFX:
+ call .LoadPalettes
+ ld de, .HealMachineGFX
+ ld hl, vTiles0 tile $7c
+ lb bc, BANK(.HealMachineGFX), 2
+ call Request2bpp
+ ret
+
+.PC_LoadBallsOntoMachine:
+ ld hl, wVirtualOAMSprite32
+ ld de, .PC_ElmsLab_OAM
+ call .PlaceHealingMachineTile
+ call .PlaceHealingMachineTile
+ jr .LoadBallsOntoMachine
+
+.HOF_LoadBallsOntoMachine:
+ ld hl, wVirtualOAMSprite32
+ ld de, .HOF_OAM
+
+.LoadBallsOntoMachine:
+ ld a, [wPartyCount]
+ ld b, a
+.party_loop
+ call .PlaceHealingMachineTile
+ push de
+ ld de, SFX_SECOND_PART_OF_ITEMFINDER
+ call PlaySFX
+ pop de
+ ld c, 30
+ call DelayFrames
+ dec b
+ jr nz, .party_loop
+ ret
+
+.PlayHealMusic:
+ ld de, MUSIC_HEAL
+ call PlayMusic
+ jp .FlashPalettes8Times
+
+.HOF_PlaySFX:
+ ld de, SFX_GAME_FREAK_LOGO_GS
+ call PlaySFX
+ call .FlashPalettes8Times
+ call WaitSFX
+ ld de, SFX_BOOT_PC
+ call PlaySFX
+ ret
+
+.dummy_5
+ ret
+
+.PC_ElmsLab_OAM:
+ dsprite 4, 0, 4, 2, $7c, PAL_OW_TREE | OBP_NUM
+ dsprite 4, 0, 4, 6, $7c, PAL_OW_TREE | OBP_NUM
+ dsprite 4, 6, 4, 0, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 4, 6, 5, 0, $7d, PAL_OW_TREE | OBP_NUM | X_FLIP
+ dsprite 5, 3, 4, 0, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 5, 3, 5, 0, $7d, PAL_OW_TREE | OBP_NUM | X_FLIP
+ dsprite 6, 0, 4, 0, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 6, 0, 5, 0, $7d, PAL_OW_TREE | OBP_NUM | X_FLIP
+
+.HealMachineGFX:
+INCBIN "gfx/overworld/heal_machine.2bpp"
+
+.HOF_OAM:
+ dsprite 7, 4, 10, 1, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 7, 4, 10, 6, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 7, 3, 9, 5, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 7, 3, 11, 2, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 7, 1, 9, 1, $7d, PAL_OW_TREE | OBP_NUM
+ dsprite 7, 1, 11, 5, $7d, PAL_OW_TREE | OBP_NUM
+
+.LoadPalettes:
+ call IsCGB
+ jr nz, .cgb
+ ld a, %11100000
+ ldh [rOBP1], a
+ ret
+
+.cgb
+ ld hl, .palettes
+ ld de, wOBPal6
+ ld bc, 1 palettes
+ call CopyBytes
+ ld a, $1
+ ldh [hCGBPalUpdate], a
+ ret
+
+.palettes
+ rst $38
+ ld a, a
+ ld a, a
+ ld a, [hl+]
+ rst $38
+ inc b
+ nop
+ nop
+;INCLUDE "gfx/overworld/heal_machine.pal"
+
+.FlashPalettes8Times:
+ ld c, 8
+.palette_loop
+ push bc
+ call .FlashPalettes
+ ld c, 10
+ call DelayFrames
+ pop bc
+ dec c
+ jr nz, .palette_loop
+ ret
+
+.FlashPalettes:
+ call IsCGB
+ jr nz, .go
+ ldh a, [rOBP1]
+ xor %00101000
+ ldh [rOBP1], a
+ ret
+
+.go
+ ld hl, wOBPal6
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ push de
+ ld c, $3
+.palette_loop_2
+ ld a, [hli]
+ ld e, a
+ ld a, [hld]
+ ld d, a
+ dec hl
+ ld a, d
+ ld [hld], a
+ ld a, e
+ ld [hli], a
+ inc hl
+ inc hl
+ inc hl
+ dec c
+ jr nz, .palette_loop_2
+ pop de
+ dec hl
+ ld a, d
+ ld [hld], a
+ ld a, e
+ ld [hl], a
+
+ ld a, $1
+ ldh [hCGBPalUpdate], a
+ ret
+
+.PlaceHealingMachineTile:
+ push bc
+ ld a, [wBuffer1]
+ bcpixel 2, 4
+ cp HEALMACHINE_ELMS_LAB
+ jr z, .okay
+ bcpixel 0, 0
+
+.okay
+ ld a, [de]
+ add c
+ inc de
+ ld [hli], a ; y
+ ld a, [de]
+ add b
+ inc de
+ ld [hli], a ; x
+ ld a, [de]
+ inc de
+ ld [hli], a ; tile id
+ ld a, [de]
+ inc de
+ ld [hli], a ; attributes
+ pop bc
+ ret
diff --git a/engine/events/whiteout.asm b/engine/events/whiteout.asm
new file mode 100755
index 00000000..33098f13
--- /dev/null
+++ b/engine/events/whiteout.asm
@@ -0,0 +1,76 @@
+Script_BattleWhiteout::
+ callasm BattleBGMap
+ jump Script_Whiteout
+
+Script_OverworldWhiteout::
+ refreshscreen
+ callasm OverworldBGMap
+
+Script_Whiteout:
+ writetext .WhitedOutText
+ waitbutton
+ special FadeOutPalettes
+ pause 40
+ special HealParty
+ checkflag ENGINE_BUG_CONTEST_TIMER
+ iftrue .bug_contest
+ callasm HalveMoney
+ callasm GetWhiteoutSpawn
+ farscall Script_AbortBugContest
+ special WarpToSpawnPoint
+ newloadmap MAPSETUP_WARP
+ endall
+
+.bug_contest
+ jumpstd bugcontestresultswarp
+
+.WhitedOutText:
+ ; is out of useable #MON! whited out!
+ text_far UnknownText_0x1c0a4e
+ db "@"
+
+OverworldBGMap:
+ call ClearPalettes
+ call FillScreenWithTextboxPal
+ call Function3456
+ call HideSprites
+ call RotateThreePalettesLeft
+ ret
+
+BattleBGMap:
+ ld b, SCGB_BATTLE_GRAYSCALE
+ call GetSGBLayout
+ call SetPalettes
+ ret
+
+HalveMoney:
+; Halve the player's money.
+ ld hl, wMoney
+ ld a, [hl]
+ srl a
+ ld [hli], a
+ ld a, [hl]
+ rra
+ ld [hli], a
+ ld a, [hl]
+ rra
+ ld [hl], a
+ ret
+
+GetWhiteoutSpawn:
+ ld a, [wd9fb]
+ ld d, a
+ ld a, [wd9fc]
+ ld e, a
+
+ ld a, $05
+ ld hl, $5465
+ rst $08
+
+ ld a, c
+ jr c, .yes
+ xor a ; SPAWN_HOME
+
+.yes
+ ld [wceec], a
+ ret
diff --git a/engine/facings.asm b/engine/facings.asm
index 871b0985..a5669c2b 100644
--- a/engine/facings.asm
+++ b/engine/facings.asm
@@ -42,11 +42,8 @@ NUM_FACINGS EQU (FacingsEnd - Facings) / 2
; db y, x, attributes, tile index
; Attributes:
-X_FLIP EQU 1 << OAM_X_FLIP
-Y_FLIP EQU 1 << OAM_Y_FLIP
BEHIND_BG EQU 1 << OAM_PRIORITY
-
Facing00:
Facing02:
Facing24:
diff --git a/engine/sprites_dump.asm b/engine/sprites_dump.asm
deleted file mode 100755
index e69de29b..00000000
--- a/engine/sprites_dump.asm
+++ /dev/null