ref: c5f16c86c80b1b486c534ec855e46d455721c813
dir: /engine/events/lucky_number.asm/
CheckForLuckyNumberWinners: xor a ld [wScriptVar], a ld [wTempByteValue], a ld a, [wPartyCount] and a ret z ld d, a ld hl, wPartyMon1ID ld bc, wPartySpecies .PartyLoop: ld a, [bc] inc bc cp EGG call nz, .CompareLuckyNumberToMonID push bc ld bc, PARTYMON_STRUCT_LENGTH add hl, bc pop bc dec d jr nz, .PartyLoop ld a, BANK(sBox) call OpenSRAM ld a, [sBoxCount] and a jr z, .SkipOpenBox ld d, a ld hl, sBoxMon1ID ld bc, sBoxSpecies .OpenBoxLoop: ld a, [bc] inc bc cp EGG jr z, .SkipOpenBoxMon call .CompareLuckyNumberToMonID jr nc, .SkipOpenBoxMon ld a, TRUE ld [wTempByteValue], a .SkipOpenBoxMon: push bc ld bc, BOXMON_STRUCT_LENGTH add hl, bc pop bc dec d jr nz, .OpenBoxLoop .SkipOpenBox: call CloseSRAM ld c, $0 .BoxesLoop: ld a, [wCurBox] and $f cp c jr z, .SkipBox ld hl, .BoxBankAddresses ld b, 0 add hl, bc add hl, bc add hl, bc ld a, [hli] call OpenSRAM ld a, [hli] ld h, [hl] ld l, a ; hl now contains the address of the loaded box in SRAM ld a, [hl] and a jr z, .SkipBox ; no mons in this box push bc ld b, h ld c, l inc bc ld de, sBoxMon1ID - sBox add hl, de ld d, a .BoxNLoop: ld a, [bc] inc bc cp EGG jr z, .SkipBoxMon call .CompareLuckyNumberToMonID ; sets wScriptVar and wCurPartySpecies appropriately jr nc, .SkipBoxMon ld a, TRUE ld [wTempByteValue], a .SkipBoxMon: push bc ld bc, BOXMON_STRUCT_LENGTH add hl, bc pop bc dec d jr nz, .BoxNLoop pop bc .SkipBox: inc c ld a, c cp NUM_BOXES jr c, .BoxesLoop call CloseSRAM ld a, [wScriptVar] and a ret z ; found nothing farcall StubbedTrainerRankings_LuckyNumberShow ld a, [wTempByteValue] and a push af ld a, [wCurPartySpecies] ld [wNamedObjectIndex], a call GetPokemonName ld hl, .LuckyNumberMatchPartyText pop af jr z, .print ld hl, .LuckyNumberMatchPCText .print jp PrintText .CompareLuckyNumberToMonID: push bc push de push hl ld d, h ld e, l ld hl, wMonIDDigitsBuffer lb bc, PRINTNUM_LEADINGZEROS | 2, 5 call PrintNum ld hl, wLuckyNumberDigitsBuffer ld de, wLuckyIDNumber lb bc, PRINTNUM_LEADINGZEROS | 2, 5 call PrintNum ld b, 5 ld c, 0 ld hl, wLuckyNumberDigitsBuffer + 4 ld de, wMonIDDigitsBuffer + 4 .loop ld a, [de] cp [hl] jr nz, .done dec de dec hl inc c dec b jr nz, .loop .done pop hl push hl ld de, MON_SPECIES - MON_ID add hl, de ld a, [hl] pop hl pop de push af ld a, c ld b, 1 cp 5 jr z, .okay ld b, 2 cp 3 jr nc, .okay ld b, 3 cp 2 jr nz, .nomatch .okay inc b ld a, [wScriptVar] and a jr z, .bettermatch cp b jr c, .nomatch .bettermatch dec b ld a, b ld [wScriptVar], a pop bc ld a, b ld [wCurPartySpecies], a pop bc scf ret .nomatch pop bc pop bc and a ret .BoxBankAddresses: table_width 3, CheckForLuckyNumberWinners.BoxBankAddresses for n, 1, NUM_BOXES + 1 dba sBox{d:n} endr assert_table_length NUM_BOXES .LuckyNumberMatchPartyText: text_far _LuckyNumberMatchPartyText text_end .LuckyNumberMatchPCText: text_far _LuckyNumberMatchPCText text_end PrintTodaysLuckyNumber: ld hl, wStringBuffer3 ld de, wLuckyIDNumber lb bc, PRINTNUM_LEADINGZEROS | 2, 5 call PrintNum ld a, "@" ld [wStringBuffer3 + 5], a ret