summaryrefslogtreecommitdiff
path: root/home/misc_32c8.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/misc_32c8.asm')
-rw-r--r--home/misc_32c8.asm98
1 files changed, 98 insertions, 0 deletions
diff --git a/home/misc_32c8.asm b/home/misc_32c8.asm
new file mode 100644
index 0000000..3eabb12
--- /dev/null
+++ b/home/misc_32c8.asm
@@ -0,0 +1,98 @@
+include "constants.asm"
+
+if DEBUG
+SECTION "Unknown 32c8", ROM0[$32c8]
+else
+SECTION "Unknown 32c8", ROM0[$328c]
+endc
+
+Function32c8::
+ predef Functionce10
+ ld a, b
+ and a
+ ret
+
+Function32d0::
+ ld hl, .Data
+ ret
+
+.Data: ; 00:32d4
+ db "@"
+
+SubtractSigned::
+ sub b
+ ret nc
+ cpl
+ add $1
+ scf
+ ret
+
+if DEBUG
+SECTION "Unknown 3686", ROM0[$3686]
+else
+SECTION "Unknown 3686", ROM0[$364a]
+endc
+
+GiveMonToPlayer:: ; 3686
+; Give to the player Pokemon of species b at level c.
+ ld a, b
+ ld [wMonDexIndex], a
+ ld a, c
+ ld [wCurPartyLevel], a
+ xor a
+ ld [wMonType], a
+ jpba Function1130a
+
+WaitPressedAny:: ; 369a
+; Waits for one of the buttons in d to be pressed.
+; If bc is negative, waits forever.
+; Otherwise, times out after bc frames then returns z.
+
+; Reset hJoypadSum to clear button history
+ xor a
+ ldh [hJoypadSum], a
+.loop: ; 00:369d
+; Wait for joypad polling.
+ call DelayFrame
+
+; If any of the buttons in d were pressed, return nz.
+ ldh a, [hJoypadSum]
+ and a
+ jr z, .not_pressed
+ and d
+ ret nz
+.not_pressed: ; 00:36a7
+
+; If bc < 0, don't check timeout.
+ bit 7, b
+ jr nz, .loop
+
+; Count down to timeout.
+ dec bc
+ ld a, b
+ or c
+ jr nz, .loop
+
+; Return z, signifying that the request timed out.
+ ret
+
+CountSetBits:: ; 36b1
+; Count the number of bits set in b bytes at hl.
+; Return to a, c, and wce37.
+ ld c, $0
+.asm_36b3: ; 00:36b3
+ ld a, [hli]
+ ld e, a
+ ld d, $8
+.asm_36b7: ; 00:36b7
+ srl e
+ ld a, $0
+ adc c
+ ld c, a
+ dec d
+ jr nz, .asm_36b7
+ dec b
+ jr nz, .asm_36b3
+ ld a, c
+ ld [wce37], a
+ ret