summaryrefslogtreecommitdiff
path: root/src/engine/overworld/npcs.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/overworld/npcs.asm')
-rw-r--r--src/engine/overworld/npcs.asm195
1 files changed, 195 insertions, 0 deletions
diff --git a/src/engine/overworld/npcs.asm b/src/engine/overworld/npcs.asm
new file mode 100644
index 0000000..6528714
--- /dev/null
+++ b/src/engine/overworld/npcs.asm
@@ -0,0 +1,195 @@
+; loads a pointer into hl found on NPCHeaderPointers
+GetNPCHeaderPointer:
+ rlca
+ add LOW(NPCHeaderPointers)
+ ld l, a
+ ld a, HIGH(NPCHeaderPointers)
+ adc 0
+ ld h, a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+LoadNPCSpriteData:
+ push hl
+ push bc
+ call GetNPCHeaderPointer
+ ld a, [hli]
+ ld [wTempNPC], a
+ ld a, [hli]
+ ld [wNPCSpriteID], a
+ ld a, [hli]
+ ld [wNPCAnim], a
+ ld a, [hli]
+ push af
+ ld a, [hli]
+ ld [wNPCAnimFlags], a
+ pop bc
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ jr nz, .not_cgb
+ ld a, b
+ ld [wNPCAnim], a
+.not_cgb
+ pop bc
+ pop hl
+ ret
+
+; Loads Name into wCurrentNPCNameTx and gets Script ptr into bc
+GetNPCNameAndScript:
+ push hl
+ call GetNPCHeaderPointer
+ ld bc, NPC_DATA_SCRIPT_PTR
+ add hl, bc
+ ld c, [hl]
+ inc hl
+ ld b, [hl]
+ inc hl
+ ld a, [hli]
+ ld [wCurrentNPCNameTx], a
+ ld a, [hli]
+ ld [wCurrentNPCNameTx + 1], a
+ pop hl
+ ret
+
+; Sets Dialog Box title to the name of the npc in 'a'
+SetNPCDialogName:
+ push hl
+ push bc
+ call GetNPCHeaderPointer
+ ld bc, NPC_DATA_NAME_TEXT
+ add hl, bc
+ ld a, [hli]
+ ld [wCurrentNPCNameTx], a
+ ld a, [hli]
+ ld [wCurrentNPCNameTx + 1], a
+ pop bc
+ pop hl
+ ret
+
+; set the opponent name and portrait for the NPC id in register a
+SetNPCOpponentNameAndPortrait:
+ push hl
+ push bc
+ call GetNPCHeaderPointer
+ ld bc, NPC_DATA_NAME_TEXT
+ add hl, bc
+ ld a, [hli]
+ ld [wOpponentName], a
+ ld a, [hli]
+ ld [wOpponentName + 1], a
+ ld a, [hli]
+ ld [wOpponentPortrait], a
+ pop bc
+ pop hl
+ ret
+
+; set the deck id and duel theme for the NPC id in register a
+SetNPCDeckIDAndDuelTheme:
+ push hl
+ push bc
+ call GetNPCHeaderPointer
+ ld bc, NPC_DATA_DECK_ID
+ add hl, bc
+ ld a, [hli]
+ ld [wNPCDuelDeckID], a
+ ld a, [hli]
+ ld [wDuelTheme], a
+ pop bc
+ pop hl
+ ret
+
+; set the start theme for the NPC id in register a
+SetNPCMatchStartTheme:
+ push hl
+ push bc
+ push af
+ call GetNPCHeaderPointer
+ ld bc, NPC_DATA_MATCH_START_ID
+ add hl, bc
+ ld a, [hli]
+ ld [wMatchStartTheme], a
+ pop af
+ cp NPC_RONALD1
+ jr nz, .not_ronald_final_duel
+ ld a, [wCurMap]
+ cp POKEMON_DOME
+ jr nz, .not_ronald_final_duel
+ ld a, MUSIC_MATCH_START_3
+ ld [wMatchStartTheme], a
+
+.not_ronald_final_duel
+ pop bc
+ pop hl
+ ret
+
+INCLUDE "data/npcs.asm"
+
+_GetNPCDuelConfigurations:
+ push hl
+ push bc
+ push de
+ ld a, [wNPCDuelDeckID]
+ ld e, a
+ ld bc, 9 ; size of struct - 1
+ ld hl, DeckIDDuelConfigurations
+.loop_deck_ids
+ ld a, [hli]
+ cp -1 ; end of list?
+ jr z, .done
+ cp e
+ jr nz, .next_deck_id
+ ld a, [hli]
+ ld [wOpponentPortrait], a
+ ld a, [hli]
+ ld [wOpponentName], a
+ ld a, [hli]
+ ld [wOpponentName + 1], a
+ ld a, [hl]
+ ld [wNPCDuelPrizes], a
+ scf
+ jr .done
+.next_deck_id
+ add hl, bc
+ jr .loop_deck_ids
+.done
+ pop de
+ pop bc
+ pop hl
+ ret
+
+_GetChallengeMachineDuelConfigurations:
+ push bc
+ push de
+ ld a, [wNPCDuelDeckID]
+ ld e, a
+ ld bc, 9 ; size of struct - 1
+ ld hl, DeckIDDuelConfigurations
+.loop_deck_ids
+ ld a, [hli]
+ cp -1 ; end of list?
+ jr z, .done
+ cp e
+ jr nz, .next_deck_id
+ push hl
+ ld a, [hli]
+ ld [wOpponentPortrait], a
+ ld a, [hli]
+ ld [wOpponentName], a
+ ld a, [hli]
+ ld [wOpponentName + 1], a
+ inc hl
+ ld a, [hli]
+ ld [wDuelTheme], a
+ pop hl
+ dec hl
+ scf
+ jr .done
+.next_deck_id
+ add hl, bc
+ jr .loop_deck_ids
+.done
+ pop de
+ pop bc
+ ret