Difference between revisions of "Store New Seed and Lay Eggs"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(One intermediate revision by one other user not shown)
Line 117: Line 117:
 
  00125bb8: 34100002 ori r16,r0,0x0002 Monster Rarity = 2 (Uncommon)
 
  00125bb8: 34100002 ori r16,r0,0x0002 Monster Rarity = 2 (Uncommon)
 
  00125bbc: 2a300020 slti r16,r17,0x0020
 
  00125bbc: 2a300020 slti r16,r17,0x0020
  00125bc0: 12000043 beq r16,r0,0x00125cd0 Branch if Random < 32 (6.25%; Monster Rarity = 1 (Common))
+
  00125bc0: 12000043 beq r16,r0,0x00125cd0 Don't branch if Random < 32 (6.25%; Monster Rarity = 1 (Common))
 
  00125bc4: 00000000 nop
 
  00125bc4: 00000000 nop
 
  00125bc8: 0c0088c3 jal 0x0002230c Random Number Generator
 
  00125bc8: 0c0088c3 jal 0x0002230c Random Number Generator

Latest revision as of 03:28, 13 April 2017

# Store New RNG seed depends on current game time, and lay eggs.
# Description
# When you arrive at a location, RNG seed is updated depends on current game time.
# Which means if you arrive in exactly same game time, you can reproduce same things.
# new RNG seed = Milsec * 101 + Seconds * 10 + Minutes + Hours
00125a04: 3c058004 lui r5,0x8004
00125a08: 8ca559b8 lw r5,0x59b8(r5)		r5 = Milsecs (60 counts per 1 sec)
00125a0c: 3c038004 lui r3,0x8004
00125a10: 8c6359bc lw r3,0x59bc(r3)		r3 = Seconds
00125a14: 27bdffa0 addiu r29,r29,0xffa0
00125a18: afb50054 sw r21,0x0054(r29)
00125a1c: 0000a821 addu r21,r0,r0		Skillset Counter = 0
00125a20: afb60058 sw r22,0x0058(r29)
00125a24: 0000b021 addu r22,r0,r0		Level Counter = 0
00125a28: afb40050 sw r20,0x0050(r29)
00125a2c: 0000a021 addu r20,r0,r0		Party ID = 0
00125a30: afbf005c sw r31,0x005c(r29)
00125a34: afb3004c sw r19,0x004c(r29)
00125a38: afb20048 sw r18,0x0048(r29)
00125a3c: afb10044 sw r17,0x0044(r29)
00125a40: afb00040 sw r16,0x0040(r29)
00125a44: 00052040 sll r4,r5,0x01
00125a48: 00852021 addu r4,r4,r5
00125a4c: 000420c0 sll r4,r4,0x03
00125a50: 00852021 addu r4,r4,r5
00125a54: 00042080 sll r4,r4,0x02		r4 = Milsec * 100
00125a58: 00031080 sll r2,r3,0x02
00125a5c: 00431021 addu r2,r2,r3
00125a60: 00021040 sll r2,r2,0x01		r2 = Seconds * 10
00125a64: 00822021 addu r4,r4,r2		r4 = Milsec * 100 + Seconds * 10
00125a68: 3c028004 lui r2,0x8004
00125a6c: 8c4259c0 lw r2,0x59c0(r2)		r2 = Minutes
00125a70: 3c038004 lui r3,0x8004
00125a74: 8c6359c4 lw r3,0x59c4(r3)		r3 = Hours
00125a78: 00822021 addu r4,r4,r2
00125a7c: 00832021 addu r4,r4,r3
00125a80: 0c0088c7 jal 0x0002231c		srand(r4)  (Store new RNG seed depends on current game time)
00125a84: 00852021 addu r4,r4,r5		r4 = Milsec * 101 + Seconds * 10 + Minutes + Hours
00125a88: 0c0166bc jal 0x00059af0		Get Party Data Pointer
00125a8c: 02802021 addu r4,r20,r0		r4 = Party ID
00125a90: 00409021 addu r18,r2,r0		r18 = Unit's Party Data Pointer
00125a94: 92430001 lbu r3,0x0001(r18)		Load Unit's Party ID
00125a98: 340200ff ori r2,r0,0x00ff		(0xFF Unit doesn't exist)
00125a9c: 10620038 beq r3,r2,0x00125b80		Branch if Unit doesn't exist
00125aa0: 00000000 nop
00125aa4: 92420004 lbu r2,0x0004(r18)		Load Unit's Gender Byte
00125aa8: 00000000 nop
00125aac: 30420004 andi r2,r2,0x0004		(normally ??? stats; used as Egg Flag here)
00125ab0: 10400026 beq r2,r0,0x00125b4c		Branch if unit isn't an Egg
00125ab4: 27a20028 addiu r2,r29,0x0028		r2 = Stack Pointer + 0x28
00125ab8: 92420005 lbu r2,0x0005(r18)		Load Unit's Birthday (used as Egg Counter)
00125abc: 00000000 nop
00125ac0: 3050000f andi r16,r2,0x000f		r16 = Birthday Low Nybble (Egg Counter)
00125ac4: 2610ffff addiu r16,r16,0xffff		Egg Counter --
00125ac8: 304200f0 andi r2,r2,0x00f0		r3 = Birthday High Nybble (Starting Egg Counter * 0x10)
00125acc: 00501025 or r2,r2,r16			r2 = Starting Egg Counter + Egg Counter
00125ad0: 1600002b bne r16,r0,0x00125b80	Branch if Egg Counter != 0
00125ad4: a2420005 sb r2,0x0005(r18)		Store new Egg Counter Data
00125ad8: 34020020 ori r2,r0,0x0020
00125adc: a2420004 sb r2,0x0004(r18)		Store Unit's Gender Byte = Monster (0x20)
00125ae0: 0c03bc6a jal 0x000ef1a8		Load Main Variable
00125ae4: 3404002f ori r4,r0,0x002f		r4 = 0x2f (Get Day) (these are likely *4 then load words
00125ae8: 3404002e ori r4,r0,0x002e		r4 = 0x2e (Get Month) starting from 0x5771c)
00125aec: 0c03bc6a jal 0x000ef1a8		Load Main Variable
00125af0: 00409821 addu r19,r2,r0		r19 = Day
00125af4: 34100001 ori r16,r0,0x0001		Counter = 1
00125af8: 00402021 addu r4,r2,r0		r4 = Month
00125afc: 0204102a slt r2,r16,r4
00125b00: 10400009 beq r2,r0,0x00125b28		Branch if Counter >= Month
00125b04: 00008821 addu r17,r0,r0		Day Total = 0
00125b08: 3c018019 lui r1,0x8019
00125b0c: 00300821 addu r1,r1,r16
00125b10: 9022deac lbu r2,-0x2154(r1)		Load Month's Total Days
00125b14: 26100001 addiu r16,r16,0x0001		Counter ++
00125b18: 02228821 addu r17,r17,r2		Day Total += Month's Total Days
00125b1c: 0204102a slt r2,r16,r4
00125b20: 1440fff9 bne r2,r0,0x00125b08		Branch if Counter < Month
00125b24: 00000000 nop
00125b28: 02338821 addu r17,r17,r19		Day Total += Day
00125b2c: 0c049664 jal 0x00125990
00125b30: 02602821 addu r5,r19,r0		r5 = Day
00125b34: 00021300 sll r2,r2,0x0c
00125b38: 02228825 or r17,r17,r2
00125b3c: 00111203 sra r2,r17,0x08
00125b40: a2510005 sb r17,0x0005(r18)		Store Unit's Birthday
00125b44: 080496e0 j 0x00125b80
00125b48: a2420006 sb r2,0x0006(r18)		Store Unit's Zodiac sign
00125b4c: 92430016 lbu r3,0x0016(r18)		Load Unit's Level
00125b50: 00561021 addu r2,r2,r22		Stack Pointer + 0x28 + Stack Counter
00125b54: a0430000 sb r3,0x0000(r2)		Store Unit's Level
00125b58: 92440002 lbu r4,0x0002(r18)		Load Unit's Job ID
00125b5c: 0c0489db jal 0x0012276c		Get job's skillset
00125b60: 26d60001 addiu r22,r22,0x0001		Level Counter ++
00125b64: 2442ff50 addiu r2,r2,0xff50		Skillset - 0xb0 (Monster skillset)
00125b68: 2c420030 sltiu r2,r2,0x0030
00125b6c: 10400004 beq r2,r0,0x00125b80		Branch if Skillset isn't a monster skillset
00125b70: 27a20010 addiu r2,r29,0x0010		r2 = Stack Pointer + 0x10
00125b74: 00551021 addu r2,r2,r21		Stack Pointer + 0x10 + Skillset Counter
00125b78: a0540000 sb r20,0x0000(r2)		Store Monster's Party ID
00125b7c: 26b50001 addiu r21,r21,0x0001		Skillset Counter ++
00125b80: 26940001 addiu r20,r20,0x0001		Party ID ++
00125b84: 2a820014 slti r2,r20,0x0014
00125b88: 1440ffbf bne r2,r0,0x00125a88		Branch if Party ID < 0x14
00125b8c: 00000000 nop
00125b90: 12a0004f beq r21,r0,0x00125cd0	Branch if Skillset Counter = 0 (no monsters)
00125b94: 00000000 nop
00125b98: 0c0088c3 jal 0x0002230c		Random Number Generator
00125b9c: 00000000 nop
00125ba0: 305100ff andi r17,r2,0x00ff		Random = rand(0..255)
00125ba4: 2a220006 slti r2,r17,0x0006
00125ba8: 14400005 bne r2,r0,0x00125bc0		Branch if Random < 6 (~2.3%)
00125bac: 34100003 ori r16,r0,0x0003		Monster Rarity = 3 (Rare)
00125bb0: 2a220010 slti r2,r17,0x0010
00125bb4: 14400002 bne r2,r0,0x00125bc0		Branch if Random < 16 (~3.9%)
00125bb8: 34100002 ori r16,r0,0x0002		Monster Rarity = 2 (Uncommon)
00125bbc: 2a300020 slti r16,r17,0x0020
00125bc0: 12000043 beq r16,r0,0x00125cd0	Don't branch if Random < 32 (6.25%; Monster Rarity = 1 (Common))
00125bc4: 00000000 nop
00125bc8: 0c0088c3 jal 0x0002230c		Random Number Generator
00125bcc: 00000000 nop
00125bd0: 0055001a div r2,r21
00125bd4: 0000a810 mfhi r21			rand(0..Skillset Counter)
00125bd8: 00000000 nop
00125bdc: 03b51021 addu r2,r29,r21
00125be0: 90440010 lbu r4,0x0010(r2)		Load Chosen Skillset
00125be4: 0c0166bc jal 0x00059af0		Get Party Data Pointer
00125be8: 00000000 nop
00125bec: 90420002 lbu r2,0x0002(r2)		Load Unit's Job ID
00125bf0: 00000000 nop
00125bf4: 2442ffa2 addiu r2,r2,0xffa2		ID - 0x5e (Monster Job ID)
00125bf8: 00021080 sll r2,r2,0x02		ID * 4
00125bfc: 00501021 addu r2,r2,r16		ID * 4 + Monster Rarity
00125c00: 3c018019 lui r1,0x8019
00125c04: 00220821 addu r1,r1,r2
00125c08: 9030debc lbu r16,-0x2144(r1)		Load Child Job ID
00125c0c: 0c0088c3 jal 0x0002230c		Random Number Generator
00125c10: 00000000 nop
00125c14: 2603ffa2 addiu r3,r16,0xffa2		Child ID - 0x5e
00125c18: 00031880 sll r3,r3,0x02		ID * 4
00125c1c: 3c018019 lui r1,0x8019
00125c20: 00230821 addu r1,r1,r3
00125c24: 9023debc lbu r3,-0x2144(r1)		Load Egg Timer
00125c28: 00000000 nop
00125c2c: 0043001a div r2,r3			Random / Egg Timer
00125c30: 00001810 mfhi r3			r3 = rand(0..Egg Timer - 1)
00125c34: 00000000 nop
00125c38: 24740001 addiu r20,r3,0x0001		Egg Mod = rand(1..Egg Timer)
00125c3c: 2a820002 slti r2,r20,0x0002
00125c40: 10400002 beq r2,r0,0x00125c4c		Branch if Egg Mod >= 2
00125c44: 00000000 nop
00125c48: 34140002 ori r20,r0,0x0002		Egg Mod = Min of 2
00125c4c: 3c12801d lui r18,0x801d
00125c50: 2652d8c4 addiu r18,r18,0xd8c4
00125c54: 3c02801d lui r2,0x801d
00125c58: 8c42d8c8 lw r2,-0x2738(r2)		Load ? (to override current value)
00125c5c: 8e510000 lw r17,0x0000(r18)		Load ? (to store back later)
00125c60: 0c0088c3 jal 0x0002230c		Random Number Generator
00125c64: ae420000 sw r2,0x0000(r18)		Store new ?
00125c68: 04410002 bgez r2,0x00125c74			Branch if Random is positive
00125c6c: 00403021 addu r6,r2,r0		r6 = Random
00125c70: 24460003 addiu r6,r2,0x0003
00125c74: 02002021 addu r4,r16,r0		r4 = Monster Job ID (Child)
00125c78: 00142900 sll r5,r20,0x04		Egg Mod * 16
00125c7c: 02852821 addu r5,r20,r5		Egg Mod * 17
00125c80: 00063083 sra r6,r6,0x02
00125c84: 00063080 sll r6,r6,0x02		Random / 4 * 4
00125c88: 0c016786 jal 0x00059e18		Create Monster Egg
00125c8c: 00463023 subu r6,r2,r6		rand(0..3)
00125c90: 00408021 addu r16,r2,r0		r16 = Party ID of Egg
00125c94: 2402ffff addiu r2,r0,0xffff
00125c98: 1202000d beq r16,r2,0x00125cd0	Branch if Egg Creation failed
00125c9c: ae510000 sw r17,0x0000(r18)		Store old ?
00125ca0: 0c0166bc jal 0x00059af0		Get Party Data Pointer
00125ca4: 02002021 addu r4,r16,r0		r4 = Party ID
00125ca8: 0c0088c3 jal 0x0002230c		Random Number Generator
00125cac: 00409021 addu r18,r2,r0		r18 = Unit's Party Data Pointer
00125cb0: 0056001a div r2,r22			Random / Level Counter
00125cb4: 00001810 mfhi r3			rand(0..Level Counter)
00125cb8: 00000000 nop
00125cbc: 03a31021 addu r2,r29,r3		Stack Pointer + Level Random
00125cc0: 90450028 lbu r5,0x0028(r2)		Load Chosen Level
00125cc4: 02402021 addu r4,r18,r0		r4 = Unit's Party Data Pointer
00125cc8: 0c01763f jal 0x0005d8fc		Level Unit to Specific Level
00125ccc: 24a5ffff addiu r5,r5,0xffff		r5 = Chosen Level
00125cd0: 8fbf005c lw r31,0x005c(r29)
00125cd4: 8fb60058 lw r22,0x0058(r29)
00125cd8: 8fb50054 lw r21,0x0054(r29)
00125cdc: 8fb40050 lw r20,0x0050(r29)
00125ce0: 8fb3004c lw r19,0x004c(r29)
00125ce4: 8fb20048 lw r18,0x0048(r29)
00125ce8: 8fb10044 lw r17,0x0044(r29)
00125cec: 8fb00040 lw r16,0x0040(r29)
00125cf0: 27bd0060 addiu r29,r29,0x0060
00125cf4: 03e00008 jr r31
00125cf8: 00000000 nop