summaryrefslogtreecommitdiff
path: root/engine/link/mystery_gift_2.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/link/mystery_gift_2.asm')
-rw-r--r--engine/link/mystery_gift_2.asm150
1 files changed, 150 insertions, 0 deletions
diff --git a/engine/link/mystery_gift_2.asm b/engine/link/mystery_gift_2.asm
new file mode 100644
index 00000000..493db05c
--- /dev/null
+++ b/engine/link/mystery_gift_2.asm
@@ -0,0 +1,150 @@
+PrepMysteryGiftDataToSend:
+ ld de, wMysteryGiftStaging
+ ld a, $1 + GS_VERSION
+ ld [de], a
+ inc de ; wc701
+ ld a, BANK(sGameData)
+ call OpenSRAM
+ ld hl, sPlayerData + wPlayerID - wPlayerData
+ ld a, [hli]
+ ld [de], a
+ ld b, a
+ inc de ; wc702
+ ld a, [hl]
+ ld [de], a
+ ld c, a
+ inc de ; wc703
+ push bc
+ ld hl, sPlayerData + wPlayerName - wPlayerData
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ push de ; wc70e
+ ld hl, sPokemonData + wPokedexCaught - wPokemonData
+ ld b, wEndPokedexCaught - wPokedexCaught
+ call CountSetBits
+ pop de
+ pop bc
+ ld a, [wNumSetBits]
+ ld [de], a
+ inc de ; wc70f
+ call CloseSRAM
+ call Random
+ and 1
+ ld [de], a
+ inc de ; wc710
+ call .RandomSample
+ ld [de], a
+ inc de ; wc711
+ ld a, c
+ ld c, b
+ ld b, a
+ call .RandomSample
+ ld [de], a
+ inc de ; wc712
+ ld a, BANK(sBackupMysteryGiftItem)
+ call OpenSRAM
+ ld a, [sBackupMysteryGiftItem]
+ ld [de], a
+ inc de
+ ld a, [sBackupMysteryGiftItem + 1]
+ ld [de], a
+ ld a, $14
+ ld [wc900], a
+ call CloseSRAM
+ ld hl, wMysteryGiftStaging
+ ld de, wMysteryGiftPlayerData
+ ld bc, wMysteryGiftPlayerDataEnd - wMysteryGiftPlayerData
+ jp CopyBytes
+
+.RandomSample:
+ push de
+ call Random
+ cp 10 percent
+ jr c, .tenpercent
+ call Random
+ and %111
+ ld d, a
+ rl d
+ ld e, $80
+.loop
+ rlc e
+ dec a
+ jr nz, .loop
+ ld a, e
+ and c
+ jr z, .skip
+ ld a, $1
+.skip
+ add d
+ jr .done
+
+.tenpercent
+ call Random
+ cp 20 percent - 1
+ jr c, .twopercent
+ call Random
+ and %011
+ ld d, a
+ rl d
+ ld e, $80
+.loop2
+ rlc e
+ dec a
+ jr nz, .loop2
+ ld a, e
+ and b
+ jr z, .skip2
+ ld a, $1
+.skip2
+ add d
+ add $10
+ jr .done
+
+.twopercent
+ call Random
+ cp 20 percent - 1
+ jr c, .pointfourpercent
+ ld a, b
+ swap a
+ and $7
+ add $18
+ jr .done
+
+.pointfourpercent
+ ld a, b
+ and $80
+ ld a, $20
+ jr z, .done
+ ld a, $21
+
+.done
+ pop de
+ ret
+
+MysteryGiftGetItemHeldEffect:
+ ld a, c
+ cp MysteryGiftItems.End - MysteryGiftItems
+ jr nc, MysteryGiftFallbackItem
+ ld hl, MysteryGiftItems
+ ld b, 0
+ add hl, bc
+ ld c, [hl]
+ ret
+
+MysteryGiftGetDecoration:
+ ld a, c
+ cp MysteryGiftDecos.End - MysteryGiftDecos
+ jr nc, MysteryGiftFallbackItem
+ ld hl, MysteryGiftDecos
+ ld b, 0
+ add hl, bc
+ ld c, [hl]
+ ret
+
+MysteryGiftFallbackItem:
+ ld c, DECO_POLKADOT_BED ; GREAT_BALL
+ ret
+
+INCLUDE "data/items/mystery_gift_items.asm"
+
+INCLUDE "data/decorations/mystery_gift_decos.asm"