summaryrefslogtreecommitdiff
path: root/engine/odd_eggs.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/odd_eggs.asm')
-rw-r--r--engine/odd_eggs.asm96
1 files changed, 96 insertions, 0 deletions
diff --git a/engine/odd_eggs.asm b/engine/odd_eggs.asm
new file mode 100644
index 000000000..5d67358f0
--- /dev/null
+++ b/engine/odd_eggs.asm
@@ -0,0 +1,96 @@
+GiveOddEgg: ; 1fb4b6
+ ; Figure out which egg to give.
+
+ ; Compare a random word to
+ ; probabilities out of 0xffff.
+ call Random
+ ld hl, OddEggProbabilities
+ ld c, 0
+ ld b, c
+.loop
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+
+ ; Break on $ffff.
+ ld a, d
+ cp $ffff / $100
+ jr nz, .not_done
+ ld a, e
+ cp $ffff % $100
+ jr z, .done
+.not_done
+
+ ; Break when [hRandom] <= de.
+ ld a, [hRandom + 1]
+ cp d
+ jr c, .done
+ jr z, .ok
+ jr .next
+.ok
+ ld a, [hRandom + 0]
+ cp e
+ jr c, .done
+ jr z, .done
+.next
+ inc bc
+ jr .loop
+.done
+
+ ld hl, OddEggs
+ ld a, OddEgg2 - OddEgg1
+ call AddNTimes
+
+ ld de, OddEggSpecies
+ ld bc, PARTYMON_STRUCT_LENGTH + 2 * PKMN_NAME_LENGTH
+ call CopyBytes
+
+ ld a, EGG_TICKET
+ ld [CurItem], a
+ ld a, 1
+ ld [wItemQuantityChangeBuffer], a
+ ld a, -1
+ ld [CurItemQuantity], a
+ ld hl, NumItems
+ call TossItem
+
+ ; load species in wcd2a
+ ld a, EGG
+ ld [wMobileMonSpeciesBuffer], a
+
+ ; load pointer to (wMobileMonSpeciesBuffer - 1) in wMobileMonSpeciesPointerBuffer
+ ld a, (wMobileMonSpeciesBuffer - 1) % $100
+ ld [wMobileMonSpeciesPointerBuffer], a
+ ld a, (wMobileMonSpeciesBuffer - 1) / $100
+ ld [wMobileMonSpeciesPointerBuffer + 1], a
+ ; load pointer to OddEggSpecies in wMobileMonStructurePointerBuffer
+ ld a, OddEggSpecies % $100
+ ld [wMobileMonStructurePointerBuffer], a
+ ld a, OddEggSpecies / $100
+ ld [wMobileMonStructurePointerBuffer + 1], a
+
+ ; load Odd Egg Name in wTempOddEggNickname
+ ld hl, .Odd
+ ld de, wTempOddEggNickname
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+
+ ; load pointer to wTempOddEggNickname in wMobileMonOTNamePointerBuffer
+ ld a, wTempOddEggNickname % $100
+ ld [wMobileMonOTNamePointerBuffer], a
+ ld a, wTempOddEggNickname / $100
+ ld [wMobileMonOTNamePointerBuffer + 1], a
+ ; load pointer to wOddEggName in wMobileMonNicknamePointerBuffer
+ ld a, wOddEggName % $100
+ ld [wMobileMonNicknamePointerBuffer], a
+ ld a, wOddEggName / $100
+ ld [wMobileMonNicknamePointerBuffer + 1], a
+ farcall AddMobileMonToParty
+ ret
+; 1fb546
+
+.Odd:
+ db "ODD@@@@@@@@@"
+
+INCLUDE "data/odd_eggs.asm"