summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--home.asm233
-rwxr-xr-xhome/hm_moves.asm25
-rwxr-xr-xhome/names.asm268
-rw-r--r--pokegold.link1
-rw-r--r--pokesilver.link1
-rw-r--r--wram.asm2
6 files changed, 301 insertions, 229 deletions
diff --git a/home.asm b/home.asm
index 90dc8345..b7b2bc65 100644
--- a/home.asm
+++ b/home.asm
@@ -1,5 +1,9 @@
INCLUDE "constants.asm"
+SECTION "NULL", ROM0
+
+NULL::
+
; rst vectors
INCLUDE "home/rst.asm"
INCLUDE "home/interrupts.asm"
@@ -252,234 +256,7 @@ GetWeekday::
ret
INCLUDE "home/pokedex_flags.asm"
-
-NamesPointers:: ; 35ee (0:35ee)
- dba PokemonNames
- dba MoveNames
- dbw 0, 0
- dba ItemNames
- dbw 0, wPartyMonOT
- dbw 0, $de7d
- dba TrainerClassNames
- dba DoPlayerMovement
-
-GetName:: ; 3606
- ldh a, [hROMBank]
- push af
- push hl
- push bc
- push de
- ld a, [wce61]
- cp $1
- jr nz, .asm_3624
- ld a, [wCurSpecies]
- ld [wd151], a
- call GetPokemonName
- ld hl, $b
- add hl, de
- ld e, l
- ld d, h
- jr .asm_3646
-.asm_3624
- ld a, [wce61]
- dec a
- ld e, a
- ld d, $0
- ld hl, NamesPointers
- add hl, de
- add hl, de
- add hl, de
- ld a, [hli]
- rst Bankswitch
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wCurSpecies]
- dec a
- call GetNthString
- ld de, wStringBuffer1
- ld bc, $d
- call CopyBytes
-.asm_3646
- ld a, e
- ld [wcffe], a
- ld a, d
- ld [wcfff], a
- pop de
- pop bc
- pop hl
- pop af
- rst Bankswitch
- ret
-
-GetNthString:: ; 3654 (0:3654)
- and a
- ret z
- push bc
- ld b, a
- ld c, "@"
-.asm_365a
- ld a, [hli]
- cp c
- jr nz, .asm_365a
- dec b
- jr nz, .asm_365a
- pop bc
- ret
-
-GetBasePokemonName::
- push hl
- call GetPokemonName
- ld hl, wStringBuffer1
-.loop
- ld a, [hl]
- cp "@"
- jr z, .quit
- cp "♂"
- jr z, .end
- cp "♀"
- jr z, .end
- inc hl
- jr .loop
-.end
- ld [hl], "@"
-.quit
- pop hl
- ret
-
-GetPokemonName:: ; 367e (0:367e)
- ldh a, [hROMBank]
- push af
- push hl
- ld a, BANK(PokemonNames)
- rst Bankswitch
- ld a, [wd151]
- dec a
- ld hl, PokemonNames
- ld e, a
- ld d, $0
-rept MON_NAME_LENGTH +- 1
- add hl, de
-endr
- ld de, wStringBuffer1
- push de
- ld bc, MON_NAME_LENGTH - 1
- call CopyBytes
- ld hl, wStringBuffer1 + MON_NAME_LENGTH - 1
- ld [hl], "@"
- pop de
- pop hl
- pop af
- rst Bankswitch
- ret
-
-GetItemName::
- push hl
- push bc
- ld a, [wd151]
- cp TM01
- jr nc, .TM
- ld [wCurSpecies], a
- ld a, $4
- ld [wce61], a
- call GetName
- jr .copied
-
-.TM
- call GetTMHMName
-.copied
- ld de, wStringBuffer1
- pop bc
- pop hl
- ret
-
-GetTMHMName:: ; 36cc (0:36cc)
- push hl
- push de
- push bc
- ld a, [wd151]
- push af
- cp HM01
- push af
- jr c, .TM
- ld hl, .HMText ; $3721
- ld bc, $2
- jr .copy
-
-.TM
- ld hl, .TMText ; $371e
- ld bc, $2
-.copy
- ld de, wStringBuffer1
- call CopyBytes
- push de
- ld a, [wd151]
- ld c, a
- callfar GetTMHMNumber
- pop de
- pop af
- ld a, c
- jr c, .not_hm
- sub NUM_TMS
-.not_hm
- ld b, "0"
-.mod10
- sub 10
- jr c, .done_mod
- inc b
- jr .mod10
-
-.done_mod
- add 10
- push af
- ld a, b
- ld [de], a
- inc de
- pop af
- ld b, "0"
- add b
- ld [de], a
- inc de
- ld a, "@"
- ld [de], a
- pop af
- ld [wd151], a
- pop bc
- pop de
- pop hl
- ret
-
-.TMText db "TM@"
-.HMText db "HM@"
-
-IsHM::
- cp HM01
- jr c, .not_HM
- scf
- ret
-
-.not_HM
- and a
- ret
-
-IsHMMove::
- ld hl, .HMMoves
- ld de, $1
- jp IsInArray
-
-.HMMoves
- db CUT, FLY, SURF, STRENGTH, FLASH, WATERFALL, WHIRLPOOL, $FF
-
-GetMoveName::
- push hl
- ld a, $2
- ld [wce61], a
- ld a, [wd151]
- ld [wCurSpecies], a
- call GetName
- ld de, wStringBuffer1
- pop hl
- ret
+INCLUDE "home/names.asm"
ScrollingMenu::
call CopyMenuData
diff --git a/home/hm_moves.asm b/home/hm_moves.asm
new file mode 100755
index 00000000..0e3cafb6
--- /dev/null
+++ b/home/hm_moves.asm
@@ -0,0 +1,25 @@
+; HM moves can't be forgotten
+
+IsHM::
+ cp HM01
+ jr c, .NotHM
+ scf
+ ret
+.NotHM:
+ and a
+ ret
+
+IsHMMove::
+ ld hl, .HMMoves
+ ld de, 1
+ jp IsInArray
+
+.HMMoves:
+ db CUT
+ db FLY
+ db SURF
+ db STRENGTH
+ db FLASH
+ db WATERFALL
+ db WHIRLPOOL
+ db -1 ; end \ No newline at end of file
diff --git a/home/names.asm b/home/names.asm
new file mode 100755
index 00000000..d5b2f55e
--- /dev/null
+++ b/home/names.asm
@@ -0,0 +1,268 @@
+NamesPointers::
+; entries correspond to GetName constants (see constants/text_constants.asm)
+ dba PokemonNames ; MON_NAME (not used; jumps to GetPokemonName)
+ dba MoveNames ; MOVE_NAME
+ dba NULL ; DUMMY_NAME
+ dba ItemNames ; ITEM_NAME
+ dbw 0, wPartyMonOT ; PARTY_OT_NAME
+ dbw 0, wOTPartyMonOT ; ENEMY_OT_NAME
+ dba TrainerClassNames ; TRAINER_NAME
+ dbw 4, MoveDescriptions ; MOVE_DESC_NAME_BROKEN (wrong bank)
+
+GetName::
+; Return name wCurSpecies from name list wNamedObjectTypeBuffer in wStringBuffer1.
+
+ ldh a, [hROMBank]
+ push af
+ push hl
+ push bc
+ push de
+
+ ld a, [wNamedObjectTypeBuffer]
+ cp MON_NAME
+ jr nz, .NotPokeName
+
+ ld a, [wCurSpecies]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld hl, MON_NAME_LENGTH
+ add hl, de
+ ld e, l
+ ld d, h
+ jr .done
+
+.NotPokeName:
+ ld a, [wNamedObjectTypeBuffer]
+ dec a
+ ld e, a
+ ld d, 0
+ ld hl, NamesPointers
+ add hl, de
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ rst Bankswitch
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld a, [wCurSpecies]
+ dec a
+ call GetNthString
+
+ ld de, wStringBuffer1
+ ld bc, ITEM_NAME_LENGTH
+ call CopyBytes
+
+.done
+ ld a, e
+ ld [wcffe], a
+ ld a, d
+ ld [wcffe + 1], a
+
+ pop de
+ pop bc
+ pop hl
+ pop af
+ rst Bankswitch
+ ret
+
+GetNthString::
+; Return the address of the
+; ath string starting from hl.
+
+ and a
+ ret z
+
+ push bc
+ ld b, a
+ ld c, "@"
+.readChar
+ ld a, [hli]
+ cp c
+ jr nz, .readChar
+ dec b
+ jr nz, .readChar
+ pop bc
+ ret
+
+GetBasePokemonName::
+; Discards gender (Nidoran).
+
+ push hl
+ call GetPokemonName
+
+ ld hl, wStringBuffer1
+.loop
+ ld a, [hl]
+ cp "@"
+ jr z, .quit
+ cp "♂"
+ jr z, .end
+ cp "♀"
+ jr z, .end
+ inc hl
+ jr .loop
+.end
+ ld [hl], "@"
+.quit
+ pop hl
+ ret
+
+GetPokemonName::
+; Get Pokemon name for wNamedObjectIndexBuffer.
+
+ ldh a, [hROMBank]
+ push af
+ push hl
+ ld a, BANK(PokemonNames)
+ rst Bankswitch
+
+; Each name is ten characters
+ ld a, [wNamedObjectIndexBuffer]
+ dec a
+ ld hl, PokemonNames
+ ld e, a
+ ld d, $0
+
+rept MON_NAME_LENGTH - 1
+ add hl, de
+endr
+
+; Terminator
+ ld de, wStringBuffer1
+ push de
+ ld bc, MON_NAME_LENGTH - 1
+ call CopyBytes
+ ld hl, wStringBuffer1 + MON_NAME_LENGTH - 1
+ ld [hl], "@"
+ pop de
+
+ pop hl
+ pop af
+ rst Bankswitch
+ ret
+
+GetItemName::
+; Get item name for wNamedObjectIndexBuffer.
+
+ push hl
+ push bc
+ ld a, [wNamedObjectIndexBuffer]
+
+ cp TM01
+ jr nc, .TM
+
+ ld [wCurSpecies], a
+ ld a, ITEM_NAME
+ ld [wNamedObjectTypeBuffer], a
+ call GetName
+ jr .Copied
+.TM:
+ call GetTMHMName
+.Copied:
+ ld de, wStringBuffer1
+ pop bc
+ pop hl
+ ret
+
+GetTMHMName::
+; Get TM/HM name for item wNamedObjectIndexBuffer.
+
+ push hl
+ push de
+ push bc
+ ld a, [wNamedObjectIndexBuffer]
+ push af
+
+; TM/HM prefix
+ cp HM01
+ push af
+ jr c, .TM
+
+ ld hl, .HMText
+ ld bc, .HMTextEnd - .HMText
+ jr .copy
+
+.TM:
+ ld hl, .TMText
+ ld bc, .TMTextEnd - .TMText
+
+.copy:
+ ld de, wStringBuffer1
+ call CopyBytes
+
+; TM/HM number
+ push de
+ ld a, [wNamedObjectIndexBuffer]
+ ld c, a
+ callfar GetTMHMNumber
+ pop de
+
+; HM numbers start from 51, not 1
+ pop af
+ ld a, c
+ jr c, .not_hm
+ sub NUM_TMS
+
+.not_hm:
+; Divide and mod by 10 to get the top and bottom digits respectively
+ ld b, "0"
+
+.mod10:
+ sub 10
+ jr c, .done_mod
+ inc b
+ jr .mod10
+
+.done_mod:
+ add 10
+
+ push af
+ ld a, b
+ ld [de], a
+ inc de
+ pop af
+
+ ld b, "0"
+ add b
+ ld [de], a
+
+; End the string
+ inc de
+ ld a, "@"
+ ld [de], a
+
+ pop af
+ ld [wNamedObjectIndexBuffer], a
+ pop bc
+ pop de
+ pop hl
+ ret
+
+.TMText:
+ db "TM"
+.TMTextEnd:
+ db "@"
+
+.HMText:
+ db "HM"
+.HMTextEnd:
+ db "@"
+
+INCLUDE "home/hm_moves.asm"
+
+GetMoveName::
+ push hl
+
+ ld a, MOVE_NAME
+ ld [wNamedObjectTypeBuffer], a
+
+ ld a, [wNamedObjectIndexBuffer] ; move id
+ ld [wCurSpecies], a
+
+ call GetName
+ ld de, wStringBuffer1
+
+ pop hl
+ ret \ No newline at end of file
diff --git a/pokegold.link b/pokegold.link
index cb686478..522d6a8b 100644
--- a/pokegold.link
+++ b/pokegold.link
@@ -1,5 +1,6 @@
ROM0
org $0000
+ "NULL"
"rst0"
org $0008
"rst8"
diff --git a/pokesilver.link b/pokesilver.link
index cb686478..522d6a8b 100644
--- a/pokesilver.link
+++ b/pokesilver.link
@@ -1,5 +1,6 @@
ROM0
org $0000
+ "NULL"
"rst0"
org $0008
"rst8"
diff --git a/wram.asm b/wram.asm
index 7447f1d8..36f02fcb 100644
--- a/wram.asm
+++ b/wram.asm
@@ -2098,7 +2098,7 @@ wLinkTimeoutFrames:: ds 2
wce5d:: ds 2 ; ce5d
wMonType:: ds 1 ; ce5f
wCurSpecies:: ds 1 ; ce60
-wce61:: ds 1 ; ce61
+wNamedObjectTypeBuffer:: ds 1 ; ce61
wce62:: ds 1 ; ce62
wce63::
wJumpTableIndex::