diff options
author | libjet <libj3t@gmail.com> | 2020-06-06 02:03:29 +0100 |
---|---|---|
committer | libjet <libj3t@gmail.com> | 2020-06-06 02:03:29 +0100 |
commit | 44229a6cd68bf1e4937f2dab6efe6025dd703bf6 (patch) | |
tree | 9a82e02f4f7b5bafa8f2b21de3636c99a4b16166 /engine | |
parent | 29e2695d6eb6bf954ffbaa4993b23c6209cade89 (diff) |
Add engine/events/name_rater.asm
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/events/name_rater.asm | 219 | ||||
-rwxr-xr-x | engine/link/time_capsule.asm | 6 |
2 files changed, 223 insertions, 2 deletions
diff --git a/engine/events/name_rater.asm b/engine/events/name_rater.asm new file mode 100755 index 00000000..e2b24c4c --- /dev/null +++ b/engine/events/name_rater.asm @@ -0,0 +1,219 @@ +_NameRater: +; Introduce himself + ld hl, NameRaterHelloText + 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, [wCurPartySpecies] + 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, NameRaterBetterNameText + call PrintText + call YesNoBox + jr c, .cancel +; What name shall I give it then? + ld hl, NameRaterWhatNameText + call PrintText +; Load the new nickname into wStringBuffer2 + xor a ; PARTYMON + ld [wMonType], a + ld a, [wCurPartySpecies] + ld [wNamedObjectIndexBuffer], a + ld [wCurSpecies], a + call GetBaseData + ld b, NAME_MON + ld de, wStringBuffer2 + farcall _NamingScreen +; If the new name is empty, treat it as unchanged. + call IsNewNameEmpty + ld hl, NameRaterSameNameText + jr c, .samename +; If the new name is the same as the old name, treat it as unchanged. + call CompareNewToOld + ld hl, NameRaterSameNameText + jr c, .samename +; Copy the new name from wStringBuffer2 + ld hl, wPartyMonNicknames + ld bc, MON_NAME_LENGTH + ld a, [wCurPartyMon] + call AddNTimes + ld e, l + ld d, h + ld hl, wStringBuffer2 + ld bc, MON_NAME_LENGTH + call CopyBytes + ld hl, NameRaterFinishedText + +.samename + push hl + call GetCurNick + ld hl, NameRaterNamedText + call PrintText + pop hl + jr .done + +.traded + ld hl, NameRaterPerfectNameText + jr .done + +.cancel + ld hl, NameRaterComeAgainText + jr .done + +.egg + ld hl, NameRaterEggText + +.done + call PrintText + ret + +CheckIfMonIsYourOT: +; Checks to see if the partymon loaded in [wCurPartyMon] has the different OT as you. Returns carry if not. + ld hl, wPartyMonOT + ld bc, NAME_LENGTH + ld a, [wCurPartyMon] + call AddNTimes + ld de, wPlayerName + ld c, NAME_LENGTH + call .loop + jr c, .nope + + ld hl, wPartyMon1ID + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [wCurPartyMon] + call AddNTimes + ld de, wPlayerID + 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 + +IsNewNameEmpty: +; Checks to see if the nickname loaded in wStringBuffer2 is empty. If so, return carry. + ld hl, wStringBuffer2 + ld c, MON_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 + +CompareNewToOld: +; Compares the nickname in wStringBuffer2 to the previous nickname. If they are the same, return carry. + ld hl, wPartyMonNicknames + ld bc, MON_NAME_LENGTH + ld a, [wCurPartyMon] + call AddNTimes + push hl + call GetNicknameLength + ld b, c + ld hl, wStringBuffer2 + call GetNicknameLength + pop hl + ld a, c + cp b + jr nz, .different + ld de, wStringBuffer2 +.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 + +GetNicknameLength: +; 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 MON_NAME_LENGTH - 1 + jr nz, .loop + ret + +NameRaterHelloText: + text_far _NameRaterHelloText + text_end + +NameRaterWhichMonText: + text_far _NameRaterWhichMonText + text_end + +NameRaterBetterNameText: + text_far _NameRaterBetterNameText + text_end + +NameRaterWhatNameText: + text_far _NameRaterWhatNameText + text_end + +NameRaterFinishedText: + text_far _NameRaterFinishedText + text_end + +NameRaterComeAgainText: + text_far _NameRaterComeAgainText + text_end + +NameRaterPerfectNameText: + text_far _NameRaterPerfectNameText + text_end + +NameRaterEggText: + text_far _NameRaterEggText + text_end + +NameRaterSameNameText: + text_far _NameRaterSameNameText + text_end + +NameRaterNamedText: + text_far _NameRaterNamedText + text_end diff --git a/engine/link/time_capsule.asm b/engine/link/time_capsule.asm index f0aa9460..adbb3300 100755 --- a/engine/link/time_capsule.asm +++ b/engine/link/time_capsule.asm @@ -1,4 +1,6 @@ -ValidateOTTrademon:: +; These functions seem to be related to backwards compatibility + +ValidateOTTrademon: ld a, [wceee] ld hl, wOTPartyMon1Species call GetPartyLocation @@ -62,7 +64,7 @@ ValidateOTTrademon:: scf ret -Functionfb6ed:: +Functionfb6ed: ld a, [wceed] ld d, a ld a, [wPartyCount] |