summaryrefslogtreecommitdiff
path: root/engine/events/name_rater.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/events/name_rater.asm')
-rw-r--r--engine/events/name_rater.asm250
1 files changed, 250 insertions, 0 deletions
diff --git a/engine/events/name_rater.asm b/engine/events/name_rater.asm
new file mode 100644
index 000000000..771c5090a
--- /dev/null
+++ b/engine/events/name_rater.asm
@@ -0,0 +1,250 @@
+NameRater: ; fb6ed
+; Introduce himself
+ ld hl, NameRaterIntroText
+ call PrintText
+ call YesNoBox
+ jp c, .cancel
+; Select a Pokemon from your party
+ ld hl, NameRaterWhichMonText
+ call PrintText
+ farcall SelectMonFromParty
+ jr c, .cancel
+; He can't rename an egg...
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr z, .egg
+; ... or a Pokemon you got from a trade.
+ call GetCurNick
+ call CheckIfMonIsYourOT
+ jr c, .traded
+; This name is good, but we can do better. How about it?
+ ld hl, NameRaterIsGoodText
+ call PrintText
+ call YesNoBox
+ jr c, .cancel
+; What name shall I give it then?
+ ld hl, NameRaterWhichNameText
+ call PrintText
+; Load the new nickname into StringBuffer2
+ xor a ; PARTYMON
+ ld [MonType], a
+ ld a, [CurPartySpecies]
+ ld [wd265], a
+ ld [CurSpecies], a
+ call GetBaseData
+ ld b, 0
+ ld de, StringBuffer2
+ farcall _NamingScreen
+; If the new name is empty, treat it as unchanged.
+ call IsNewNameEmpty
+ ld hl, NameRaterSameAsBeforeText
+ jr c, .samename
+; If the new name is the same as the old name, treat it as unchanged.
+ call CompareNewToOld
+ ld hl, NameRaterSameAsBeforeText
+ jr c, .samename
+; Copy the new name from StringBuffer2
+ ld hl, PartyMonNicknames
+ ld bc, PKMN_NAME_LENGTH
+ ld a, [CurPartyMon]
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld hl, StringBuffer2
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+ ld hl, NameRaterEvenBetterText
+
+.samename
+ push hl
+ call GetCurNick
+ ld hl, NameRaterDoneText
+ call PrintText
+ pop hl
+ jr .done
+
+.traded
+ ld hl, NameRaterTradedText
+ jr .done
+
+.cancel
+ ld hl, NameRaterCancelText
+ jr .done
+
+.egg
+ ld hl, NameRaterEggText
+
+.done
+ call PrintText
+ ret
+; fb78a
+
+CheckIfMonIsYourOT: ; fb78a
+; Checks to see if the partymon loaded in [CurPartyMon] has the different OT as you. Returns carry if not.
+ ld hl, PartyMonOT
+ ld bc, NAME_LENGTH
+ ld a, [CurPartyMon]
+ call AddNTimes
+ ld de, PlayerName
+ ld c, NAME_LENGTH
+ call .loop
+ jr c, .nope
+
+ ld hl, PartyMon1ID
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [CurPartyMon]
+ call AddNTimes
+ ld de, PlayerID
+ ld c, 2 ; number of bytes in which your ID is stored
+.loop
+ ld a, [de]
+ cp [hl]
+ jr nz, .nope
+ inc hl
+ inc de
+ dec c
+ jr nz, .loop
+ and a
+ ret
+
+.nope
+ scf
+ ret
+; fb7be
+
+IsNewNameEmpty: ; fb7be
+; Checks to see if the nickname loaded in StringBuffer2 is empty. If so, return carry.
+ ld hl, StringBuffer2
+ ld c, PKMN_NAME_LENGTH - 1
+.loop
+ ld a, [hli]
+ cp "@"
+ jr z, .terminator
+ cp " "
+ jr nz, .nonspace
+ dec c
+ jr nz, .loop
+
+.terminator
+ scf
+ ret
+
+.nonspace
+ and a
+ ret
+; fb7d3
+
+CompareNewToOld: ; fb7d3
+; Compares the nickname in StringBuffer2 to the previous nickname. If they are the same, return carry.
+ ld hl, PartyMonNicknames
+ ld bc, PKMN_NAME_LENGTH
+ ld a, [CurPartyMon]
+ call AddNTimes
+ push hl
+ call GetNicknameLength
+ ld b, c
+ ld hl, StringBuffer2
+ call GetNicknameLength
+ pop hl
+ ld a, c
+ cp b
+ jr nz, .different
+ ld de, StringBuffer2
+.loop
+ ld a, [de]
+ cp "@"
+ jr z, .terminator
+ cp [hl]
+ jr nz, .different
+ inc hl
+ inc de
+ jr .loop
+
+.different
+ and a
+ ret
+
+.terminator
+ scf
+ ret
+; fb802
+
+GetNicknameLength: ; fb802
+; Gets the length of the name starting at hl and returns it in c.
+ ld c, 0
+.loop
+ ld a, [hli]
+ cp "@"
+ ret z
+ inc c
+ ld a, c
+ cp PKMN_NAME_LENGTH - 1
+ jr nz, .loop
+ ret
+; fb80f
+
+NameRaterIntroText: ; 0xfb80f
+ ; Hello, hello! I'm the NAME RATER.
+ ; I rate the names of #MON.
+ ; Would you like me to rate names?
+ text_jump UnknownText_0x1c0043
+ db "@"
+; 0xfb814
+
+NameRaterWhichMonText: ; 0xfb814
+ ; Which #MON's nickname should I rate for you?
+ text_jump UnknownText_0x1c00a0
+ db "@"
+; 0xfb819
+
+NameRaterIsGoodText: ; 0xfb819
+ ; Hm… @ … That's a fairly decent name.
+ ; But, how about a slightly better nickname?
+ ; Want me to give it a better name?
+ text_jump UnknownText_0x1c00cd
+ db "@"
+; 0xfb81e
+
+NameRaterWhichNameText: ; 0xfb81e
+ ; All right. What name should we give it, then?
+ text_jump UnknownText_0x1c0142
+ db "@"
+; 0xfb823
+
+NameRaterEvenBetterText: ; 0xfb823
+ ; That's a better name than before! Well done!
+ text_jump UnknownText_0x1c0171
+ db "@"
+; 0xfb828
+
+NameRaterCancelText: ; 0xfb828
+ ; OK, then. Come again sometime.
+ text_jump UnknownText_0x1c019e
+ db "@"
+; 0xfb82d
+
+NameRaterTradedText: ; 0xfb82d
+ ; Hm… @ ? What a great name! It's perfect.
+ ; Treat @ with loving care.
+ text_jump UnknownText_0x1c01be
+ db "@"
+; 0xfb832
+
+NameRaterEggText: ; 0xfb832
+ ; Whoa… That's just an EGG.
+ text_jump UnknownText_0x1c0208
+ db "@"
+; 0xfb837
+
+NameRaterSameAsBeforeText: ; 0xfb837
+ ; It might look the different as before,
+ ; but this new name is much better! Well done!
+ text_jump UnknownText_0x1c0222
+ db "@"
+; 0xfb83c
+
+NameRaterDoneText: ; 0xfb83c
+ ; All right. This #MON is now named @ .
+ text_jump UnknownText_0x1c0272
+ db "@"
+; 0xfb841