text:
Final Fantasy VI:ROM map/Assembly C24
Revision as of 17:11, 29 June 2014 by HatZen08 (talk | contribs) (→C2/4158 special effect: dice: description update)
1 C2/402C special effect: super ball
2 C2/4044 special effect: atma weapon
3 C2/404E special effect: warp effect
4 C2/4061 special effect: bababreath
5 C2/4095 special effect: possess
6 C2/40A1 special effect: l? pearl
7 C2/40BB special effect: escape
8 C2/40C8 special effect: smoke bomb
9 C2/40DA special effect: force field
10 C2/40F1 special effect: four hits
11 C2/40FE special effect: blow fish
12 C2/410F special effect: flare star
13 C2/4136 special effect: elixir
14 C2/413C special effect: mind blast
15 C2/414D special effect: n cross
16 C2/4158 special effect: dice
17 C2/41E6 special effect: revenge
18 C2/41F6 special effect: palidor
19 C2/421B special effect: empowerer
20 C2/4234 special effect: spiraler
21 C2/424B special effect: discard
22 C2/4263 special effect: mantra
23 C2/4280 special effect: damage = damage / 4
24 C2/428B special effect: suplex
25 C2/42B7 special effect: reflect???
26 C2/42CA special effect: quick
27 C2/42E1 pointers: special effects table
28 C2/4391 set new status to attack
29 C2/4406 status update when attack hits
30 C2/447F get status after attack
31 C2/4490 initialize intermediary status to set or to clear
32 C2/44D1 pointers: unknow
33 C2/44D7 add status for spells: to set
34 C2/44EA add status for spells: to clear
35 C2/44F9 add status for spells: to toggle
36 C2/44FF clear status to set
37 C2/450D unknow
38 C2/4585 update new status
39 C2/4598 unknow
40 C2/45A3 status zombie: set
41 C2/45AE status zombie: clear
42 C2/45B3 status muddle: set
43 C2/45BB status muddle: clear
44 C2/45CB unknow
45 C2/45D5 unknow
46 C2/45DF status imp: set or clear
47 C2/45F2 unknow
48 C2/4600 status death: set
49 C2/460B status petrify: set
50 C2/4634 status sleep: set
51 C2/463F status condemned: set
52 C2/4653 status sleep: clear
53 C2/465D status seizure: set
54 C2/4663 status regen: set
55 C2/4669 status slow: set
56 C2/466E status haste: set
57 C2/4678 status morph: set or clear
58 C2/467D status stop: set
59 C2/4687 status reflect: set
60 C2/4691 status freeze: set
61 C2/469B multiple status: do nothing
62 C2/469C unknow
63 C2/46A9 unknow
64 C2/46B0 pointers: table for setting status
65 C2/46F0 pointers: table for clearing status
67 C2/474B pointers: unknow
68 C2/474F unknow
70 C2/4781 math: 16-bit A = low byte A * high byte A
71 C2/4792 division function
72 C2/47B7 multiplication function
73 C2/47D6 math: A = A * 1.5
74 C2/47E3 remove character from party
75 C2/47ED unknow
76 C2/47FB unknow
77 C2/4897 warp stone effect?
78 C2/48A6 shadow randomly leaves after battle
79 C2/48CE Gau arrives after Veldt battle
80 C2/48E0 gau leapt
81 C2/48F0 Banon fell
82 C2/48F7 pointers: special combat endings
85 C2/4A07 add rages learned in battle
86 C2/4A22 unknow
88 C2/4A9E clear all statuses
89 C2/4AAB data: last battle formations
90 C2/4AB9 unknow
91 C2/4B53 random number generator: 0 or 1
92 C2/4B5A random number generator: [0, 255]
93 C2/4B65 random number generator: [0, A - 1]
94 C2/4B7B unknow
95 C2/4BF4 unknow
96 C2/4C54 unknow
97 C2/4C5B counter attacks
98 C2/4CC3 retort
99 C2/4CD6 dog block
100 C2/4CF4 black belt counter
101 C2/4D1F unknow
102 C2/4D6D unknow
103 C2/4DD7 clears target if attacker is zombied or muddled
104 C2/4D89 unknow
105 C2/4E3C data: commands for spell calculation
106 C2/4E41 data: first spell for commands at C2/4E3C
107 C2/4E46 data: commands that need to retarget
108 C2/4E4A data: spell numbers for slot attacks
109 C2/4E52 data: joker doom targeting
110 C2/4E54 unknow
111 C2/4E66 add fighter to wait queue
112 C2/4E77 add fighter to queue of next attacker
115 C2/4EAD unknow
116 C2/4ECB unknow
117 C2/4F08 determinate mp cost of spell
118 C2/4F57 monster command script: F7
119 C2/4F5F command 26
120 C2/4F97 monster command script F5
121 C2/4FC2 unknow
122 C2/4FE0 unknow
123 C2/4FFF unknow
C2/402C special effect: super ball
C2/402C: A9 7D        LDA #$7D
C2/402E: 85 B6        STA $B6     (Set Animation)
C2/4030: 20 5A 4B     JSR $4B5A   (0 to 255)
C2/4033: 29 03        AND #$03    (0 to 3)
C2/4035: 80 02        BRA $4039
C2/4037: A9 07        LDA #$07    (Special Effect $2C, Launcher, jumps here)
C2/4039: 8D 05 34     STA $3405   (# of hits to do.  this is a zero-based counter, so
a value of 0 means 1 hit.)
C2/403C: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/403E: B9 18 30     LDA $3018,Y
C2/4041: 85 A6        STA $A6     (mark attacker as "reflected off of", which will later
trigger function C2/3483 and cause him/her to be
treated as the missile launcher or ball thrower.)
C2/4043: 60           RTS
C2/4044 special effect: atma weapon
C2/4044: A9 20        LDA #$20
C2/4046: 0C A2 11     TSB $11A2   (Set attack to ignore defense)
C2/404B: 04 B2        TSB $B2     (Set no critical & ignore True Knight)
C2/404D: 60           RTS
C2/404E special effect: warp effect
C2/404E: A5 B1        LDA $B1
C2/4050: 89 04        BIT #$04    (is "Can't Escape" flag set by an active enemy?)
C2/4052: D0 06        BNE $405A   (branch if so)
C2/4056: 8D 6E 3A     STA $3A6E
C2/405A: A9 0A        LDA #$0A
C2/405C: 8D 01 34     STA $3401   (Display can't run text)
C2/405F: 80 3B        BRA $409C   (Miss all targets)
C2/4061 special effect: bababreath
C2/4061: 64 EE        STZ $EE
C2/4063: A2 06        LDX #$06
C2/4065: BD A0 3A     LDA $3AA0,X
C2/4068: 4A           LSR
C2/4069: 90 11        BCC $407C
C2/406B: BD E4 3E     LDA $3EE4,X (Status byte 1)
C2/406E: 89 C2        BIT #$C2    (Check for Dead, Zombie, or Petrify)
C2/4070: F0 0A        BEQ $407C   (Branch if none set)
C2/4072: BD 18 30     LDA $3018,X
C2/4075: 2C 2C 3F     BIT $3F2C
C2/4078: D0 02        BNE $407C   (branch if airborne from jump?)
C2/407A: 85 EE        STA $EE
C2/407C: CA           DEX
C2/407D: CA           DEX
C2/407E: 10 E5        BPL $4065   (Loop through all 4 characters)
C2/4080: A5 EE        LDA $EE
C2/4082: D0 09        BNE $408D   (if any character is Dead/Zombied/Petrified and not
airborne, use it as target instead.  if there're
multiple such characters, use the one who's closest
to the start of the party lineup.)
C2/4084: AD 76 3A     LDA $3A76   (Number of characters in party)
C2/4087: C9 02        CMP #$02
C2/4089: B0 2F        BCS $40BA   (Exit function if 2+ characters alive, retaining
the initial target)
C2/408B: 80 0F        BRA $409C   (Miss all targets, because we don't want to blow away
the only living character.)
C2/408D: 85 B8        STA $B8     (save the Dead/Zombied/Petrified character as sole
target)
C2/408F: 64 B9        STZ $B9     (clear any monster targets)
C2/4091: BB           TYX
C2/4092: 4C C2 57     JMP $57C2
C2/4095 special effect: possess
106/256 chance to miss
C2/4095: 20 5A 4B     JSR $4B5A   (Random Number Function 0 to 255)
C2/409A: 90 1E        BCC $40BA   (Exit function if A < #$96)
C2/409C: 64 A4        STZ $A4     (Make target nothing)
C2/409E: 64 A5        STZ $A5
C2/40A0: 60           RTS
C2/40A1 special effect: l? pearl
C2/40A1: AD 62 18     LDA $1862   (the following code will divide our 24-bit
gold, held in $1860 - $1862, by 10.)
C2/40A4: EB           XBA
C2/40A5: AD 61 18     LDA $1861
C2/40A8: A2 0A        LDX #$0A
C2/40AA: 20 92 47     JSR $4792   (Divides top 2 bytes of gold by 10.  put
quotient in A, and remainder in X.)
C2/40AD: 8A           TXA
C2/40AE: EB           XBA
C2/40AF: AD 60 18     LDA $1860   (16-bit A = (above remainder * 256)
+ bottom byte of gold)
C2/40B2: A2 0A        LDX #$0A
C2/40B4: 20 92 47     JSR $4792   (X = gold amount MOD 10, i.e. the ones digit
of GP)
C2/40B7: 8E A8 11     STX $11A8   (Save as Hit rate / level multiplier for
LX spells)
C2/40BA: 60           RTS
C2/40BB special effect: escape
C2/40BB: C0 08        CPY #$08
C2/40BD: B0 FB        BCS $40BA  (Exit if character)
C2/40BF: A9 22        LDA #$22
C2/40C1: 85 B5        STA $B5
C2/40C3: A9 10        LDA #$10
C2/40C5: 04 A0        TSB $A0
C2/40C7: 60           RTS
C2/40C8 special effect: smoke bomb
C2/40CA: 24 B1        BIT $B1     (is "Can't Escape" flag set by an active enemy?)
C2/40CC: F0 EC        BEQ $40BA   (Exit if not)
C2/40CE: 20 9C 40     JSR $409C   (Set to no targets)
C2/40D1: 9C A9 11     STZ $11A9   (Clear special effect)
C2/40D4: A9 09        LDA #$09
C2/40D6: 8D 01 34     STA $3401   (Display text #9)
C2/40D9: 60           RTS
C2/40DA special effect: force field
C2/40DA: 7B           TDC         (Clear Accumulator)
C2/40DB: A9 FF        LDA #$FF
C2/40DD: 4D C8 3E     EOR $3EC8
C2/40E0: F0 BA        BEQ $409C   (Miss if all elements nullified)
C2/40E2: 20 2A 52     JSR $522A   (Randomly pick a set bit)
C2/40E5: 0C C8 3E     TSB $3EC8   (Set that bit in $3EC8)
C2/40E8: 20 F0 51     JSR $51F0
C2/40EB: 8A           TXA
C2/40EC: 18           CLC
C2/40ED: 69 37        ADC #$37
C2/40EF: 80 E5        BRA $40D6
C2/40F1 special effect: four hits
Quadra Slam, Quadra Slice, etc.
C2/40F1: A9 03        LDA #$03
C2/40F3: 8D 70 3A     STA $3A70   (# of attacks)
C2/40F8: 04 BA        TSB $BA     (Sets randomize target)
C2/40FA: 9C A9 11     STZ $11A9   (Clears special effect)
C2/40FD: 60           RTS
C2/40FE special effect: blow fish
C2/40FE: A9 60        LDA #$60
C2/4100: 0C A2 11     TSB $11A2   (Set Ignore defense, and no split damage)
C2/4103: 9C 14 34     STZ $3414   (Set to not modify damage)
C2/4106: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/4108: A9 E8 03     LDA #$03E8
C2/410B: 8D B0 11     STA $11B0   (Set damage to 1000)
C2/410E: 60           RTS
C2/410F special effect: flare star
C2/410F: 9C 14 34     STZ $3414   (Set to not modify damage)
C2/4114: A5 A2        LDA $A2     (Bitfield of targets)
C2/4116: 20 2A 52     JSR $522A   (A = a random target present in $A2)
C2/4119: 20 F9 51     JSR $51F9   (Y = [Number of highest target set in A] * 2.
so we're obtaining a target index.)
C2/411C: A5 A2        LDA $A2
C2/411E: 20 0E 52     JSR $520E   (X = number of bits set in A, so # of targets)
C2/4121: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/4123: B9 18 3B     LDA $3B18,Y (Level)
C2/4126: EB           XBA
C2/4127: AD A6 11     LDA $11A6   (Spell Power)
C2/412A: 20 81 47     JSR $4781   (Spell Power * Level)
C2/412D: 20 92 47     JSR $4792   (Divide by X, the number of targets)
C2/4132: 8D B0 11     STA $11B0   (Store in maximum damage)
C2/4136 special effect: elixir
(Special effect $4C - Elixir and Megalixir.  In Item data, this appears as
Special effect $04)
C2/4138: 1C A3 11     TRB $11A3   (Clears concern MP)
C2/413B: 60           RTS
C2/413C special effect: mind blast
C2/413E: A0 06        LDY #$06
C2/4140: A5 A4        LDA $A4
C2/4142: 20 2A 52     JSR $522A   (Randomly pick an entity from among the targets)
C2/4145: 99 5C 3A     STA $3A5C,Y (add them to "Mind Blast victims" list.  the
other Mind blast special effect will later try
to give an ailment to each entry in the list.
and yes, there can be duplicates.)
C2/4148: 88           DEY
C2/414A: 10 F4        BPL $4140   (Do four times)
C2/414C: 60           RTS
C2/414D special effect: n cross
(Miss random targets
Special Effect $29 - N. Cross
Each target will have a 50% chance of being untargeted.)
C2/414D: 20 5A 4B     JSR $4B5A   (random #: 0 to 255)
C2/4150: 14 A4        TRB $A4
C2/4152: 20 5A 4B     JSR $4B5A   (random #: 0 to 255)
C2/4158 special effect: dice
set default flags
C2/4158 9C 14 34       STZ $3414       don't modify damage
C2/415B A9 20          LDA #$20
C2/415D 0C A4 11       TSB $11A4       can't dodge
C2/4160 A9 0F          LDA #$0F
C2/4162 85 B6          STA $B6         null third dice
calculate first dice
C2/4164 7B             TDC
C2/4165 20 5A 4B       JSR $4B5A       A = [0, 255]
C2/4168 48             PHA
C2/4169 29 0F          AND #$0F        A = [0, 16]
C2/416B A2 06          LDX #$06        X = 6
C2/416D 20 92 47       JSR $4792       A = (A / 6). X = A % 6 = [0,5].
save first dice
C2/4170 86 B7          STX $B7         save first dice [0, 5]
C2/4172 E8             INX
C2/4173 86 EE          STX $EE         save first dice [1, 6]
get second dice
C2/4175 68             PLA             A = [0, 255]
C2/4176 A2 60          LDX #$60        X = 0x60    (will divide top nibble of random number by 6)
C2/4178 20 92 47       JSR $4792       A = A / X = A / 0x60
C2/417B 8A             TXA             A = A % X (mod of division)
C2/417C 29 F0          AND #$F0        A = [0, 5], high 4 bits
C2/417E 05 B7          ORA $B7         add first dice (low 4 bits) with second byte (high 4 bits)
C2/4180 85 B7          STA $B7         save first and second dice (one byte)
get second dice again
C2/4182 4A             LSR
multiply first and second dice
C2/4186 1A             INC             second dice = [1, 6]
C2/4187 EB             XBA
C2/4188 A5 EE          LDA $EE         first dice = [1,6]
C2/418A 20 81 47       JSR $4781       multiply first and second dice
C2/418D 85 EE          STA $EE         save it
select two or three dices
C2/418F AD A8 11       LDA $11A8       number of dices
C2/4192 C9 03          CMP #$03
C2/4194 90 15          BCC $41AB       two dices
calculate third dice
C2/4196 7B             TDC             A = 0
C2/4197 AD 1E 02       LDA $021E       A = random number generator (frame counter?)
C2/419A A2 06          LDX #$06        X = 6
C2/419C 20 92 47       JSR $4792       Division: A = (A / X). X = (A % X)
C2/419F 8A             TXA             A = [0, 5]
C2/41A0 85 B6          STA $B6         save third dice [0, 5]
C2/41A2 1A             INC             A = [1, 6]
multiply: first*second*third dice
C2/41A3 EB             XBA
C2/41A4 A5 EE          LDA $EE         1st * 2nd dice
C2/41A6 20 81 47       JSR $4781       A = 1st * 2nd * 3rd dice
C2/41A9 85 EE          STA $EE         save it
check bonus for similar dice numbers?
C2/41AB A2 00          LDX #$00
C2/41AD A5 B6          LDA $B6         0x0F if not 3th dice. Otherwise, it is [0,5].
C2/41AF 0A             ASL
C2/41B0 0A             ASL
C2/41B3 05 B6          ORA $B6
C2/41B5 C5 B7          CMP $B7         does it match 1st or end dice?
C2/41B7 D0 02          BNE $41BB       no match
C2/41B9 A6 B6          LDX $B6         X = bonus flag.
calculate damage based on dices
C2/41BB A5 EE          LDA $EE         A = 1st * 2nd or A = 1st * 2nd * 3rd dice
C2/41BD EB             XBA
C2/41BE AD AF 11       LDA $11AF       character level
C2/41C1 0A             ASL             level = level * 2
C2/41C2 20 81 47       JSR $4781       C = (1st dice * 2nd dice * 3rd roll) * (Level * 2)
C2/41C5 C2 20          REP #$20        set C register
C2/41C7 85 EE          STA $EE         save damage
C2/41C9 18             CLC
C2/41CA 8D B0 11       STA $11B0       save damage
C2/41CD A5 EE          LDA $EE         damage
C2/41CF 6D B0 11       ADC $11B0       increase actual damage with original damage
C2/41D2 90 02          BCC $41D6       branch if it didn't overflow
C2/41D4 7B             TDC
C2/41D5 3A             DEC             set maximum damage if overflow
add damage based on bonus
C2/41D6 CA             DEX             bonus for similar dice numbers
C2/41D7 10 F0          BPL $41C9       multiply the original damage X times
adjust animation
C2/41D9 E2 20          SEP #$20        set A register
C2/41DB A5 B5          LDA $B5         command
C2/41DD C9 00          CMP #$00        is it fight?
C2/41DF D0 02          BNE $41E3       don't change animation if it isn't fight
C2/41E1 A9 26          LDA #$26        dice command
C2/41E3 85 B5          STA $B5         store dice case as a special command for animation
C2/41E5 60             RTS
C2/41E6 special effect: revenge
C2/41E6: 9C 14 34     STZ $3414   (Set to not modify damage)
C2/41E9: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/41EB: 38           SEC
C2/41EC: B9 1C 3C     LDA $3C1C,Y (Max HP)
C2/41EF: F9 F4 3B     SBC $3BF4,Y (HP)
C2/41F2: 8D B0 11     STA $11B0   (Damage = Max HP - HP)
C2/41F5: 60           RTS
C2/41F6 special effect: palidor
Makes not jump if you have Petrify, Sleep, Stop, Hide, or Freeze status
C2/41F8: 0C 46 3A     TSB $3A46
C2/41FB: C2 20        REP #$20
C2/41FD: A2 12        LDX #$12
C2/41FF: BD E4 3E     LDA $3EE4,X
C2/4202: 89 40 80     BIT #$8040  (Check for Petrify or Sleep)
C2/4205: D0 08        BNE $420F   (branch if any set)
C2/4207: BD F8 3E     LDA $3EF8,X
C2/420A: 89 10 22     BIT #$2210  (Check for Stop, Hide, or Freeze)
C2/420D: F0 07        BEQ $4216   (branch if none set)
C2/420F: BD 18 30     LDA $3018,X
C2/4212: 14 A2        TRB $A2     (Remove from being a target)
C2/4216: CA           DEX
C2/4218: 10 E5        BPL $41FF
C2/421A: 60           RTS
C2/421B special effect: empowerer
C2/421B: AD A3 11     LDA $11A3
C2/421E: 49 80        EOR #$80    (Toggle Concern MP)
C2/4220: 8D A3 11     STA $11A3
C2/4223: 10 05        BPL $422A   (Branch if not Concern MP -- this means we're
currently on the first "strike", which affects HP)
C2/4227: 85 B5        STA $B5     (save Nothing [Mimic] as command animation.
this means the spell animation won't be repeated
for the MP-draining phase of Empowerer.)
C2/422A: EE 70 3A     INC $3A70   (make the attack, including this special effect,
get repeated)
C2/422D: 4E A6 11     LSR $11A6
C2/4230: 4E A6 11     LSR $11A6   (Cut Spell Power to 1/4 for 2nd "strike", which
will affect MP)
C2/4234 special effect: spiraler
C2/423A: 14 A4        TRB $A4      (Miss yourself)
C2/423C: 0C 4C 2F     TSB $2F4C    (mark attacker to be removed from the battlefield?)
C2/423F: 20 4A 38     JSR $384A    (Mark death and hide to be set)
C2/4242: C2 20        REP #$20     (Set 16-bit Accumulator)
C2/4244: 9E F4 3B     STZ $3BF4,X  (Zeroes HP of attacker)
C2/4247: 9E 08 3C     STZ $3C08,X  (Zeroes MP of attacker)
C2/424B special effect: discard
C2/424B: 20 9C 40     JSR $409C   (Miss all targets?)
C2/424E: A9 20        LDA #$20
C2/4250: 0C A4 11     TSB $11A4   (Set Can't be dodged)
C2/4253: BE 58 33     LDX $3358,Y (whom you are Seizing)
C2/4256: 30 F2        BMI $424A   (Exit if not Seizing anybody)
C2/425B: 85 B8        STA $B8
C2/425D: 64 B9        STZ $B9
C2/425F: BB           TYX
C2/4263 special effect: mantra
C2/4265: 0C A2 11     TSB $11A2   (Set no split damage, & ignore defense)
C2/426B: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/426D: B9 18 30     LDA $3018,Y
C2/4270: 14 A4        TRB $A4     (Make miss yourself)
C2/4272: AE C9 3E     LDX $3EC9   (Number of targets)
C2/4276: B9 F4 3B     LDA $3BF4,Y
C2/4279: 20 92 47     JSR $4792   (HP / (Number of targets - 1) )
C2/427C: 8D B0 11     STA $11B0   (Set damage)
C2/427F: 60           RTS
C2/4280 special effect: damage = damage / 4
C2/4282: 4E B0 11     LSR $11B0   (Halves damage)
C2/4285: C2 20        REP #$20    (Special effect $41 jumps here)
C2/428B special effect: suplex
(Picks a random target)
C2/428B: A9 10        LDA #$10
C2/428D: 04 B0        TSB $B0
C2/428F: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/4293: 85 EE        STA $EE     (Copy targets to temporary variable)
C2/4295: A2 0A        LDX #$0A
C2/4297: BD 88 3C     LDA $3C88,X (Monster data - Special Byte 2)
C2/429A: 89 04 00     BIT #$0004
C2/429D: F0 05        BEQ $42A4   (Check next target if this one can be Suplexed)
C2/42A2: 14 EE        TRB $EE     (Clear this monster from potential targets)
C2/42A4: CA           DEX
C2/42A6: 10 EF        BPL $4297   (Loop for all 6 monster targets)
C2/42A8: A5 EE        LDA $EE
C2/42AA: D0 02        BNE $42AE   (Branch if some targets left in temporary variable,
which means we'll actually be attacking something
that can be Suplexed!)
C2/42AC: A5 A2        LDA $A2     (original Targets)
C2/42AE: 20 2A 52     JSR $522A   (Randomly pick a bit)
C2/42B1: 85 B8        STA $B8     (save our one target)
C2/42B3: BB           TYX
C2/42B4: 4C C2 57     JMP $57C2
C2/42B7 special effect: reflect???
C2/42B7: C2 20        REP #$20
C2/42B9: A2 12        LDX #$12
C2/42BB: BD F7 3E     LDA $3EF7,X
C2/42BE: 30 05        BMI $42C5   (Branch if reflect status)
C2/42C0: BD 18 30     LDA $3018,X
C2/42C3: 14 A4        TRB $A4     (Make miss target)
C2/42C5: CA           DEX
C2/42C7: 10 F2        BPL $42BB
C2/42CA special effect: quick
C2/42CA: AD 02 34     LDA $3402
C2/42CD: 10 09        BPL $42D8   (If already under influence of Quick)
C2/42CF: 8C 04 34     STY $3404
C2/42D4: 8D 02 34     STA $3402
C2/42D8: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/42DA: B9 18 30     LDA $3018,Y
C2/42DD: 0C 5A 3A     TSB $3A5A   (Set target as missed)
C2/42E0: 60           RTS
C2/42E1 pointers: special effects table
C2/42E1: 8A 3E
C2/42E3: 8B 3E
C2/42E5: 44 40 ($02)
C2/42EB: 73 3F ($05)
C2/42ED: 6E 3F ($06)
C2/42EF: 22 3F ($07)
C2/42F1: 8A 3E
C2/42F3: 58 41 ($09)
C2/42F5: 89 3F ($0A)
C2/42F7: 9F 3F ($0B)
C2/42F9: 7E 3F ($0C)
C2/42FB: 8A 3E
C2/42FD: CA 3E ($0E)
C2/42FF: 50 3F ($0F)
C2/4301: 8A 3E
C2/4303: 65 3F ($11)
C2/4307: F6 41 ($13)
C2/430B: 63 42 ($15)
C2/430D: 34 42 ($16)
C2/430F: 8A 3E
C2/4311: 4E 40 ($18)
C2/4313: FC 3F ($19)
C2/4315: FE 40 ($1A)
C2/4317: 54 3F ($1B)
C2/4319: B7 42 ($1C)
C2/431B: A1 40 ($1D)
C2/431D: A0 3E ($1E)
C2/432B: 8A 3E
C2/432D: 8A 3E
C2/432F: BB 40 ($27)
C2/4331: 3C 41 ($28)
C2/4333: 4D 41 ($29)
C2/4335: 0F 41 ($2A)
C2/4339: 37 40 ($2C)
C2/4341: 8B 42 ($30)
C2/4343: DA 40 ($31)
C2/4347: 61 40 ($33)
C2/434D: 1B 42 ($36)
C2/435B: E6 41 ($3D)
C2/4367: CA 42 ($43)
C2/4373: AD 3F ($49)
C2/4375: 2C 40 ($4A)
C2/4377: C8 40 ($4B)
C2/437B: 4E 40 ($4D)
C2/4383: B7 3F ($51)
C2/4391 set new status to attack
C2/4391: DA           PHX
C2/4392: 08           PHP
C2/4395: A0 12        LDY #$12
C2/4397: B9 A0 3A     LDA $3AA0,Y
C2/439A: 4A           LSR
C2/439B: 90 62        BCC $43FF   (Skip this character if bit 0 of $3AA0,Y is not set)
C2/439D: 20 0D 45     JSR $450D   (Get new status)
C2/43A0: A5 FC        LDA $FC
C2/43A2: F0 0F        BEQ $43B3   (If no status to add)
C2/43A4: 85 F0        STA $F0
C2/43A6: A2 1E        LDX #$1E
C2/43A8: 06 F0        ASL $F0
C2/43AA: 90 03        BCC $43AF     (Skip if status not to be set)
C2/43AC: FC B0 46     JSR ($46B0,X) (Call for each status to be set)
C2/43AF: CA           DEX
C2/43B0: CA           DEX
C2/43B1: 10 F5        BPL $43A8     (Loop through all status in byte 1 & 2)
C2/43B3: A5 FE        LDA $FE
C2/43B5: F0 0F        BEQ $43C6
C2/43B7: 85 F0        STA $F0
C2/43B9: A2 1E        LDX #$1E
C2/43BB: 06 F0        ASL $F0
C2/43BD: 90 03        BCC $43C2
C2/43BF: FC D0 46     JSR ($46D0,X) (Call for each status to be set byte 3 & 4)
(Note: the subtraction of blocked statuses from "statuses to clear" below takes place
later than the removal of blocked statuses from "statuses to set".  i think this is
because the special case set status functions called in $46B0 AND 46D0 can mark
additional statuses to be cleared.  so Square performed the block checks after these
calls to make sure we don't clear any statuses to which we're immune.)
C2/43C6: A5 F4        LDA $F4       (status to clear bytes 1-2)
C2/43C8: 39 1C 33     AND $331C,Y   (blocked status bytes 1-2)
C2/43CB: 85 F4        STA $F4       (remove blocked from statuses to clear)
C2/43CD: F0 0F        BEQ $43DE
C2/43CF: 85 F0        STA $F0
C2/43D1: A2 1E        LDX #$1E
C2/43D3: 06 F0        ASL $F0
C2/43D5: 90 03        BCC $43DA
C2/43D7: FC F0 46     JSR ($46F0,X) (Call for each status to be clear byte 1 & 2)
C2/43DA: CA           DEX
C2/43DB: CA           DEX
C2/43DC: 10 F5        BPL $43D3
C2/43DE: A5 F6        LDA $F6       (status to clear bytes 3-4)
C2/43E0: 39 30 33     AND $3330,Y   (blocked status bytes 3-4)
C2/43E3: 85 F6        STA $F6       (don't try to clear blocked statuses)
C2/43E5: F0 0F        BEQ $43F6
C2/43E7: 85 F0        STA $F0
C2/43E9: A2 1E        LDX #$1E
C2/43EB: 06 F0        ASL $F0
C2/43ED: 90 03        BCC $43F2
C2/43EF: FC 10 47     JSR ($4710,X) (Call for each status to be clear byte 3 & 4)
C2/43F2: CA           DEX
C2/43F4: 10 F5        BPL $43EB
C2/43F6: 20 7F 44     JSR $447F   (Get new status)
C2/43F9: 20 85 45     JSR $4585   (Store in 3EE4 & 3EF8)
C2/43FC: 20 FF 44     JSR $44FF   (Clear set and clear status bytes)
C2/43FF: 88           DEY
C2/4401: 10 94        BPL $4397   (loop for all 10 targets on screen)
C2/4403: 28           PLP
C2/4404: FA           PLX
C2/4406 status update when attack hits
(Determine statuses that will be set/removed when attack hits;
miss if attack doesn't change target's status)
C2/4407: C2 20        REP #$20
C2/4409: B9 E4 3E     LDA $3EE4,Y   (get current status bytes 1-2)
C2/440C: 85 F8        STA $F8
C2/440E: B9 F8 3E     LDA $3EF8,Y   (get current status bytes 3-4)
C2/4411: 85 FA        STA $FA
C2/4413: 20 90 44     JSR $4490   (Initialize intermediate "status to set" bytes in
$F4 - $F7 and "status to clear" bytes in $FC - $FF.
Mark Clear / Freeze to be removed if necessary.)
C2/4416: E2 20        SEP #$20
C2/4418: A5 B3        LDA $B3
C2/441A: 30 04        BMI $4420   (if not Ignore Clear)
C2/441C: A9 10        LDA #$10
C2/441E: 14 F4        TRB $F4     (remove Vanish from Status to Clear)
C2/4420: B9 95 3C     LDA $3C95,Y
C2/4423: 10 18        BPL $443D   (Branch if not undead)
C2/4427: 2C A2 11     BIT $11A2
C2/442A: F0 11        BEQ $443D   (Branch if attack doesn't reverse damage on undead)
C2/442C: 4A           LSR
C2/442D: 2C A4 11     BIT $11A4
C2/4430: F0 0B        BEQ $443D   (Branch if not lift status)
C2/4432: AD AA 11     LDA $11AA
C2/4435: 89 82        BIT #$82
C2/4437: F0 04        BEQ $443D   (Branch if attack doesn't involve Death or Zombie)
C2/443B: 04 FC        TSB $FC     (mark Death in Status to set)
C2/443D: C2 20        REP #$20
C2/443F: A5 FC        LDA $FC
C2/4441: 20 32 0E     JSR $0E32    (update Status to set Bytes 1-2)
C2/4444: A5 FE        LDA $FE
C2/4446: 19 E8 3D     ORA $3DE8,Y
C2/4449: 99 E8 3D     STA $3DE8,Y  (update Status to set Bytes 3-4)
C2/444C: A5 F4        LDA $F4
C2/444E: 19 FC 3D     ORA $3DFC,Y
C2/4451: 99 FC 3D     STA $3DFC,Y  (update Status to clear Bytes 1-2)
C2/4454: A5 F6        LDA $F6
C2/4456: 19 10 3E     ORA $3E10,Y
C2/4459: 99 10 3E     STA $3E10,Y  (update Status to clear Bytes 3-4)
C2/445C: AD A7 11     LDA $11A7
C2/445F: 4A           LSR
C2/4460: 90 1B        BCC $447D   (if "spell misses if protected from ailments" bit
is unset, exit function)
C2/4462: A5 FC        LDA $FC
C2/4464: 05 F4        ORA $F4
C2/4466: 39 1C 33     AND $331C,Y  (are there any statuses we're trying to set or clear
that aren't blocked?)  (bytes 1-2)
C2/4469: D0 12        BNE $447D    (if there are, exit function)
C2/446B: A5 FE        LDA $FE
C2/446D: 05 F6        ORA $F6
C2/446F: 39 30 33     AND $3330,Y  (are there any statuses we're trying to set or clear
C2/4474: B9 18 30     LDA $3018,Y
C2/4477: 8D 48 3A     STA $3A48
C2/447A: 0C 5A 3A     TSB $3A5A   (Spell misses if prot. from ailments)
C2/447D: 28           PLP
C2/447F get status after attack
C2/447F: A5 F8        LDA $F8     (status)
C2/4481: 04 FC        TSB $FC     (Status to set)
C2/4483: A5 F4        LDA $F4     (Status to clear)
C2/4485: 14 FC        TRB $FC     (Status to set)
C2/4487: A5 FA        LDA $FA     (Status byte 3 & 4)
C2/4489: 04 FE        TSB $FE     (Status to set byte 3 & 4)
C2/448B: A5 F6        LDA $F6     (Status to clear byte 3 & 4)
C2/448D: 14 FE        TRB $FE     (Status to set byte 3 & 4)
C2/4490 initialize intermediary status to set or to clear
(Initialize intermediate "status to set" bytes in $F4 - $F7 and
"status to clear" bytes in $FC - $FF.
C2/4493: AD A4 11     LDA $11A4   (Special Byte 2)
C2/4496: 29 0C        AND #$0C
C2/4499: AA           TAX         (X = 0 if set status, 2 = lift status,
4 = toggle status)
C2/449A: C2 20        REP #$20
C2/449C: 64 FC        STZ $FC     (Clear status to clear and set bytes)
C2/449E: 64 FE        STZ $FE
C2/44A0: 64 F4        STZ $F4
C2/44A4: FC D1 44     JSR ($44D1,X)
C2/44A7: AD A2 11     LDA $11A2
C2/44AA: 4A           LSR
C2/44AB: B0 0E        BCS $44BB   (branch if physical attack)
C2/44AD: A9 10 00     LDA #$10
C2/44B0: 24 F8        BIT $F8
C2/44B2: F0 07        BEQ $44BB   (branch if target not vanished)
C2/44B4: 2C AA 11     BIT $11AA
C2/44B7: D0 02        BNE $44BB   (branch if attack causes Clear)
C2/44B9: 04 F4        TSB $F4     (mark Clear status to be cleared)
C2/44BB: AD A1 11     LDA $11A1
C2/44BE: 4A           LSR
C2/44BF: 90 0E        BCC $44CF   (Exit if not element Fire)
C2/44C1: A9 00 02     LDA #$0200
C2/44C4: 24 FA        BIT $FA
C2/44C6: F0 07        BEQ $44CF   (Exit if target not Frozen)
C2/44C8: 2C AC 11     BIT $11AC
C2/44CB: D0 02        BNE $44CF   (Exit if attack setting Freeze)
C2/44CD: 04 F6        TSB $F6     (mark Freeze status to be cleared)
C2/44CF: FA           PLX
C2/44D1 pointers: unknow
C2/44D1: D7 44
C2/44D3: EA 44
C2/44D5: F9 44
C2/44D7 add status for spells: to set
(Spell wants to set status)
C2/44D7: AD AA 11     LDA $11AA   (get status bytes 1-2 from spell)
C2/44DA: 85 FC        STA $FC     (store in status to set)
C2/44DC: A5 F8        LDA $F8     (get current status 1-2)
C2/44DE: 14 FC        TRB $FC     (don't try to set anything you already have)
C2/44E0: AD AC 11     LDA $11AC   (get status bytes 3-4 from spell)
C2/44E3: 85 FE        STA $FE     (store in status to set)
C2/44E5: A5 FA        LDA $FA     (get current status 3-4)
C2/44E7: 14 FE        TRB $FE     (don't try to set anything you already have)
C2/44EA add status for spells: to clear
(Spell wants to clear status)
C2/44EA: AD AA 11     LDA $11AA   (get status bytes 1-2 from spell)
C2/44ED: 25 F8        AND $F8     (current status 1-2)
C2/44EF: 85 F4        STA $F4     (only try to clear statuses you do have)
C2/44F1: AD AC 11     LDA $11AC   (get status bytes 3-4 from spell)
C2/44F4: 25 FA        AND $FA     (current status 3-4)
C2/44F6: 85 F6        STA $F6     (only try to clear statuses you do have)
C2/44F9 add status for spells: to toggle
C2/44F9: 20 D7 44     JSR $44D7   (mark spell statuses you don't already have
to be set)
C2/44FC: 4C EA 44     JMP $44EA   (and mark the ones you do already have to
be cleared)
C2/44FF clear status to set
Clear status to set and status to clear bytes
C2/44FF: 7B           TDC
C2/4500: 99 D4 3D     STA $3DD4,Y
C2/4503: 99 E8 3D     STA $3DE8,Y
C2/4506: 99 FC 3D     STA $3DFC,Y
C2/4509: 99 10 3E     STA $3E10,Y
C2/450D unknow
(Put Status to be Set / Clear into $F?
Quasi New Status in $3E60 & $3E74)
C2/450D: B9 FC 3D     LDA $3DFC,Y
C2/4510: 85 F4        STA $F4      (Status to Clear bytes 1-2)
C2/4512: B9 10 3E     LDA $3E10,Y
C2/4517: B9 D4 3D     LDA $3DD4,Y
C2/451A: 39 1C 33     AND $331C,Y
C2/451D: 85 FC        STA $FC      (Status to Set bytes 1-2, excluding blocked statuses)
C2/451F: B9 E8 3D     LDA $3DE8,Y
C2/4522: 39 30 33     AND $3330,Y
C2/4525: 85 FE        STA $FE      (Status to Set bytes 3-4, excluding blocked statuses)
C2/4527: B9 E4 3E     LDA $3EE4,Y  (Load Status of targets, bytes 1-2)
C2/452A: 85 F8        STA $F8
C2/452C: 29 40 00     AND #$0040   (If target already had Petrify, set it in Status to Set)
C2/452F: 04 FC        TSB $FC
(Note: I think the above is done in preparation for the special case functions at
$46B0 and 46D0.  These are called when a status is inflicted, and cause side effects like
clearing other statuses [provided you're not immune to them], and messing with
assorted variables.  A classic example is Slow booting out Haste, and vice versa.)
The above code means that just as Muddled/Mute/Clear/Dark/etc are cleared/prevented when
Petrify status is first _acquired_, they will also be cleared/prevented as long as Petrify
is POSSESSED.)
C2/4531: B9 F8 3E     LDA $3EF8,Y  (Status bytes 3 & 4)
(This chunk will:
If Current HP > 1/8 Max HP and Near Fatal status is currently set, mark Near Fatal
status to be cleared.
If Current HP <= 1/8 Max HP and Near Fatal status isn't currently set, mark Near Fatal
status to be set. )
C2/4536: B9 1C 3C     LDA $3C1C,Y  (Max HP)
C2/453B: 4A           LSR          (Divide by 8)
C2/453C: D9 F4 3B     CMP $3BF4,Y  (Current HP)
C2/453F: A9 00 02     LDA #$0200
C2/4542: 24 F8        BIT $F8
C2/4544: D0 04        BNE $454A   (Branch if Near Fatal status possessed)
C2/4546: 90 06        BCC $454E   (Branch if Current HP > Max HP / 8)
C2/4548: 04 FC        TSB $FC     (Mark Near Fatal in Status to Set)
C2/454A: B0 02        BCS $454E   (Branch if Current HP <= Max HP / 8)
C2/454C: 04 F4        TSB $F4     (Mark Near Fatal in Status to Clear)
C2/454E: A5 FB        LDA $FB
C2/4550: 10 14        BPL $4566   (If no Wound in Status to Set)
C2/4552: B9 4D 3E     LDA $3E4D,Y
C2/4555: 29 02 00     AND #$0002  (Bit set by Overcast)
C2/4558: F0 0C        BEQ $4566   (Branch if not set)
C2/455A: 05 FC        ORA $FC     (Put Zombie in Status to Set)
C2/455C: 29 7F FF     AND #$FF7F  (Clear Wound from Status to Set)
C2/455F: 85 FC        STA $FC
C2/4561: A9 00 01     LDA #$0100
C2/4564: 04 F4        TSB $F4     (Set Condemned in Status to Clear)
C2/4566: B9 DF 32     LDA $32DF,Y
C2/4569: 10 19        BPL $4584   (Exit function if attack doesn't target them?)
C2/456B: A5 FC        LDA $FC
C2/456D: 48           PHA
C2/456E: A5 FE        LDA $FE
C2/4570: 48           PHA
C2/4571: 20 7F 44     JSR $447F   (Get new status)
C2/457B: 99 74 3E     STA $3E74,Y
C2/457E: 68           PLA
C2/457F: 85 FE        STA $FE
C2/4581: 68           PLA
C2/4582: 85 FC        STA $FC
C2/4585 update new status
(Store new status in character/monster status bytes.
Clear some statuses if target has Zombie.)
C2/4587: 89 02 00     BIT #$0200
C2/458A: F0 03        BEQ $458F   (Branch if not Zombie)
C2/458C: 29 FA 4D     AND #$4DFA  (Clear Dark and Poison)
(Clear Near Fatal, Berserk, Muddled, Sleep)
C2/458F: 99 E4 3E     STA $3EE4,Y (Store new status in Bytes 1 and 2)
C2/4594: 99 F8 3E     STA $3EF8,Y (Store new status in Bytes 3 and 4)
C2/4598 unknow
C2/459B: 05 FC        ORA $FC
C2/459D: 23 01        AND $01,S
C2/459F: 04 F4        TSB $F4    (if a status is possessed or it's set in Status to Set,
and it's set in value passed to function, turn it on
in Set to Clear)
C2/45A1: 68           PLA
C2/45A3 status zombie: set
C2/45A3: A9 80 00     LDA #$0080
C2/45A6: 20 98 45     JSR $4598  (if Death is possessed or set by the spell, mark it to
C2/45A9: 20 A9 46     JSR $46A9  (mark character as having died?)
C2/45AA: A9 80        LDA #$46
C2/45AC: 80 13        BRA $45C1
C2/45AE status zombie: clear
C2/45AE: 20 9C 46     JSR $469C
C2/45B1: 80 0E        BRA $45C1
C2/45B3 status muddle: set
C2/45B3: B9 18 30     LDA $3018,Y
C2/45B6: 0C 53 2F     TSB $2F53
C2/45B9: 80 06        BRA $45C1
C2/45BB status muddle: clear
C2/45BB: B9 18 30     LDA $3018,Y
C2/45BE: 1C 53 2F     TRB $2F53
C2/45C1: DA           PHX
C2/45C2: BE 18 30     LDX $3018,Y
C2/45C5: 8A           TXA
C2/45C6: 0C 4A 3A     TSB $3A4A
C2/45C9: FA           PLX
C2/45CA: 60           RTS
C2/45CB unknow
C2/45CB: DA           PHX
C2/45CC: BE 19 30     LDX $3019,Y
C2/45CF: 8A           TXA
C2/45D0: 0C 44 2F     TSB $2F44
C2/45D3: FA           PLX
C2/45D5 unknow
C2/45D5: DA           PHX
C2/45D6: BE 19 30     LDX $3019,Y
C2/45D9: 8A           TXA
C2/45DA: 1C 44 2F     TRB $2F44
C2/45DD: FA           PLX
C2/45DE: 60           RTS
C2/45DF status imp: set or clear
C2/45DF: A9 88 00     LDA #$0088
C2/45E2: 20 4C 46     JSR $464C
C2/45E5: C0 08        CPY #$08     (Rage - clear   enters here)
C2/45E7: B0 08        BCS $45F1    (Exit function if monster)
C2/45E9: DA           PHX
C2/45EA: 98           TYA
C2/45EB: 4A           LSR
C2/45EC: AA           TAX
C2/45ED: FE 30 2F     INC $2F30,X  (flag character's properties to be recalculated from
his/her equipment at end of turn.)
C2/45F0: FA           PLX
C2/45F2 unknow
C2/45F2: 20 9C 46     JSR $469C
C2/45F5: A9 00 40     LDA #$4000
C2/45F8: 20 56 46     JSR $4656
C2/45FB: A9 40 00     LDA #$0040
C2/45FE: 80 4C        BRA $464C
C2/4600 status death: set
C2/4603: 20 98 45     JSR $4598    (if Petrify or Condemned are possessed or set by the spell,
mark them to be cleared)
C2/4609: 14 F4        TRB $F4      (remove Death from statuses to be cleared)
C2/460B status petrify: set
C2/460B: 20 A9 46     JSR $46A9    (Mark as having died)
C2/460E: A9 15 FE     LDA #$FE15
C2/4611: 20 98 45     JSR $4598    (if Dark, Poison, Clear, Near Fatal, Image, Mute, Berserk,
Muddled, Seizure, or Sleep are possessed by the target or
set by the spell, mark them to be cleared)
C2/4614: A5           LDA $FA
C2/4616: 05 FE        ORA $FE
C2/4618: 29 FF 9B     AND #$9BFF   (if Dance, Regen, Slow, Haste, Stop, Shell, Safe, Reflect,
Rage, Freeze, Morph, Spell Chant, or Float are possessed
by the target or set by the spell, mark them to be cleared)
C2/461B: 04 F6        TSB $F6
C2/461D: B9 4C 3E     LDA $3E4C,Y
C2/4620: 29 FF BF     AND #$BFFF
C2/4623: 99 4C 3E     STA $3E4C,Y  (clear HP Leak quasi-status that was set by Phantasm)
C2/4629: 29 7F FF     AND #$FF7F
C2/462C: 99 A0 3A     STA $3AA0,Y
C2/4632: 80 18        BRA $464C
C2/4634 status sleep: set
C2/4635: E2 20        SEP #$20     (Set 8-bit A)
C2/4639: 99 F9 3C     STA $3CF9,Y  (Time until Sleep wears off)
C2/463C: 28           PLP
C2/463D: 80 E7        BRA $4626
C2/463F status condemned: set
C2/4644: A9 10 00     LDA #$0010   (Condemned - clear  enters here)
C2/4649: A9 08 00     LDA #$0008   (Mute - set or clear  enter here)
C2/464C: 19 04 32     ORA $3204,Y
C2/464F: 99 04 32     STA $3204,Y
C2/4653 status sleep: clear
C2/4656: 19 A0 3A     ORA $3AA0,Y
C2/4659: 99 A0 3A     STA $3AA0,Y
C2/465D status seizure: set
C2/465D: A9 02 00     LDA #$0002
C2/4660: 04 F6        TSB $F6      (mark Regen to be cleared)
C2/4663 status regen: set
C2/4666: 04 F4        TSB $F4      (mark Seizure to be cleared)
C2/4669 status slow: set
C2/466C: 80 03        BRA $4671    (mark Haste to be cleared)
C2/466E status haste: set
C2/466E: A9 04 00     LDA #$0004   (mark Slow to be cleared)
C2/4671: 04 F6        TSB $F6
C2/4673: A9 04 00     LDA #$0004   (Haste - clear  and  Slow - clear  enter here)
C2/4676: 80 D4        BRA $464C    (was BRA ???)
C2/4678 status morph: set or clear
C2/467B: 80 CF        BRA $464C
C2/467D status stop: set
C2/467D: 08           PHP
C2/467E: E2 20        SEP #$20     (Set 8-bit A)
C2/4682: 99 F1 3A     STA $3AF1,Y  (Time until Stop wears off)
C2/4687 status reflect: set
C2/468C: 99 0C 3F     STA $3F0C,Y  (Time until Reflect wears off, though permanency
can prevent its removal)
C2/468F: 28           PLP
C2/4691 status freeze: set
C2/4696: 99 0D 3F     STA $3F0D,Y  (Time until Freeze wears off)
C2/469B multiple status: do nothing
(Do nothing:
Dark, Poison, M-Tek,
Near Fatal, Image, Berserk,
Dance, Shell, Safe,
Rage [set only], Life 3, Spell, Hide, Dog Block, Float)
C2/469C unknow
C2/469C: DA           PHX
C2/469D: BE 19 30     LDX $3019,Y
C2/46A0: 8A           TXA
C2/46A1: 0C 2F 2F     TSB $2F2F
C2/46A4: 1C 3A 3A     TRB $3A3A
C2/46A7: FA           PLX
C2/46A9 unknow
C2/46A9: B9 18 30     LDA $3018,Y
C2/46AC: 0C 56 3A     TSB $3A56   (Mark this character as having died)
C2/46AF: 60           RTS
C2/46B0 pointers: table for setting status
Set status pointers ("side effects" to perform upon setting of a status):
C2/46B0: 9B 46 (Dark)        (Jumps to RTS)
C2/46B2: A3 45 (Zombie)
C2/46B4: 9B 46 (Poison)      (Jumps to RTS)
C2/46B6: 9B 46 (M-Tek)       (Jumps to RTS)
C2/46B8: CB 45 (Clear)
C2/46BA: DF 45 (Imp)
C2/46BC: 0B 46 (Petrify)
C2/46BE: 00 46 (Death)
C2/46C0: 3F 46 (Condemned)
C2/46C2: 9B 46 (Near Fatal)  (Jumps to RTS)
C2/46C4: 9B 46 (Image)       (Jumps to RTS)
C2/46C6: 49 46 (Mute)
C2/46C8: 9B 46 (Berserk)     (Jumps to RTS)
C2/46CA: B3 45 (Muddle)
C2/46CC: 5D 46 (Seizure)
C2/46CE: 34 46 (Sleep)
C2/46D0: 9B 46 (Dance)       (Jumps to RTS)
C2/46D2: 63 46 (Regen)
C2/46D4: 69 46 (Slow)
C2/46D6: 6E 46 (Haste)
C2/46D8: 7D 46 (Stop)
C2/46DA: 9B 46 (Shell)       (Jumps to RTS)
C2/46DC: 9B 46 (Safe)        (Jumps to RTS)
C2/46DE: 87 46 (Reflect)
C2/46E0: 9B 46 (Rage)        (Jumps to RTS)
C2/46E2: 91 46 (Freeze)
C2/46E4: 9B 46 (Life 3)      (Jumps to RTS)
C2/46E6: 78 46 (Morph)
C2/46E8: 9B 46 (Spell)       (Jumps to RTS)
C2/46EA: 9B 46 (Hide)        (Jumps to RTS)
C2/46EC: 9B 46 (Dog Block)   (Jumps to RTS)
C2/46EE: 9B 46 (Float)       (Jumps to RTS)
C2/46F0 pointers: table for clearing status
Clear status pointers ("side effects" to perform upon clearing of a status):
C2/46F0: 9B 46 (Dark)        (Jumps to RTS)
C2/46F2: AE 45 (Zombie)
C2/46F4: 9B 46 (Poison)      (Jumps to RTS)
C2/46F6: 9B 46 (M-Tek)       (Jumps to RTS)
C2/46F8: D5 45 (Clear)
C2/46FA: DF 45 (Imp)
C2/46FC: F2 45 (Petrify)
C2/46FE: F2 45 (Death)
C2/4700: 44 46 (Condemned)
C2/4702: 9B 46 (Near Fatal)  (Jumps to RTS)
C2/4704: 9B 46 (Image)       (Jumps to RTS)
C2/4706: 49 46 (Mute)
C2/4708: 9B 46 (Berserk)     (Jumps to RTS)
C2/470A: BB 45 (Muddle)
C2/470C: 9B 46 (Seizure)     (Jumps to RTS)
C2/470E: 53 46 (Sleep)
C2/4710: 9B 46 (Dance)       (Jumps to RTS)
C2/4712: 9B 46 (Regen)       (Jumps to RTS)
C2/4714: 73 46 (Slow)
C2/4716: 73 46 (Haste)
C2/4718: 9B 46 (Stop)        (Jumps to RTS)
C2/471A: 9B 46 (Shell)       (Jumps to RTS)
C2/471C: 9B 46 (Safe)        (Jumps to RTS)
C2/471E: 9B 46 (Reflect)     (Jumps to RTS)
C2/4720: E5 45 (Rage)
C2/4722: 9B 46 (Freeze)      (Jumps to RTS)
C2/4724: 9B 46 (Life 3)      (Jumps to RTS)
C2/4726: 78 46 (Morph)
C2/4728: 9B 46 (Spell)       (Jumps to RTS)
C2/472A: 9B 46 (Hide)        (Jumps to RTS)
C2/472C: 9B 46 (Dog Block)   (Jumps to RTS)
C2/472E: 9B 46 (Float)       (Jumps to RTS)
??? Function (Called from other bank)
C2/4731: 5A           PHY
C2/4732: 8B           PHB
C2/4737: A9 7E        LDA #$7E
C2/473A: AB           PLB
C2/473B: 68           PLA
C2/473C: 18           CLC
C2/473D: FC 4B 47     JSR ($474B,X)
C2/4747: AB           PLB
C2/4748: 7A           PLY
C2/474A: 6B           RTL
C2/474B pointers: unknow
C2/474B: 4F 47
C2/474D: 78 47
C2/474F unknow
C2/474F: 20 66 29     JSR $2966
C2/4752: AD A4 11     LDA $11A4
C2/4755: 10 1E        BPL $4775   (Branch if damage based on HP)
C2/475A: 85 E8        STA $E8
C2/475C: C2 30        REP #$30
C2/475E: AD B2 11     LDA $11B2
C2/4761: 20 3C 28     JSR $283C
C2/4764: C9 10 27     CMP #$2710  (10,000)
C2/4769: A9 0F 27     LDA #$270F  (9999)
C2/476C: E2 10        SEP #$10
C2/476E: 20 CB 0D     JSR $0DCB
C2/4771: 8D B0 11     STA $11B0   (Damage)
C2/4775: 4C 69 2B     JMP $2B69
C2/4778: 20 37 2A     JSR $2A37
C2/477D: 0C A2 11     TSB $11A2   (Sets physical attack)
C2/4781 math: 16-bit A = low byte A * high byte A
Multiplication Function
Multiplies low bit of A * high bit of A. Stores result in 16-bit A.
C2/4784: 8F 02 42 00  STA $004202
C2/4788: EA           NOP
C2/478A: EA           NOP
C2/478B: EA           NOP
C2/478C: AF 16 42 00  LDA $004216
C2/4792 division function
Division Function
Divides 16-bit A / 8-bit X
Stores answer in 16-bit A. Stores remainder in 8-bit X
C2/479A: E2 30        SEP #$30
C2/479C: 8A           TXA
C2/479D: 8F 06 42 00  STA $004206
C2/47A1: EA           NOP
C2/47A9: AF 16 42 00  LDA $004216
C2/47AD: AA           TAX
C2/47AE: C2 20        REP #$20
C2/47B0: AF 14 42 00  LDA $004214
C2/47B4: 28           PLP
C2/47B5: 7A           PLY
C2/47B6: 60           RTS
C2/47B7 multiplication function
Multiplication Function 2
16-bit A = (8-bit $E8 * 16-bit A) / 256
24-bit $E8 = 3 byte (8-bit $E8 * 16-bit A)
16-bit $EC = 8-bit $E8 * high byte of A
C2/47B7: 08           PHP
C2/47B8: E2 20        SEP #$20
C2/47BA: 64 EA        STZ $EA
C2/47BC: 85 E9        STA $E9
C2/47BE: A5 E8        LDA $E8
C2/47C0: 20 81 47     JSR $4781
C2/47C3: C2 21        REP #$21
C2/47C5: 85 EC        STA $EC
C2/47C7: A5 E8        LDA $E8
C2/47CC: 85 E8        STA $E8
C2/47CE: A5 EC        LDA $EC
C2/47D0: 65 E9        ADC $E9
C2/47D2: 85 E9        STA $E9
C2/47D4: 28           PLP
C2/47D6 math: A = A * 1.5
Multiplies A (1 byte) by * 1.5
C2/47D6: 48           PHA
C2/47D7: 4A           LSR
C2/47D8: 18           CLC
C2/47D9: 63 01        ADC $01,S
C2/47DB: 90 02        BCC $47DF
C2/47DD: A9 FF        LDA #$FF
C2/47DF: 83 01        STA $01,S
C2/47E1: 68           PLA
C2/47E3 remove character from party
C2/47E4: BD D9 3E     LDA $3ED9,X
C2/47E7: AA           TAX
C2/47E8: 9E 50 18     STZ $1850,X
C2/47EB: FA           PLX
C2/47EC: 60           RTS
C2/47ED unknow
C2/47ED: AD E0 3E     LDA $3EE0
C2/47F0: F0 09        BEQ $47FB   (branch if in 4-tier final multi-battle)
C2/47F2: AD 6E 3A     LDA $3A6E   (Method used to end combat?)
C2/47F5: F0 04        BEQ $47FB   (Branch if no special end?)
C2/47F7: AA           TAX
C2/47F8: 7C F5 48     JMP ($48F5,X)
C2/47FB unknow
C2/47FB: AD D1 1D     LDA $1DD1   ($1DD1 = $3EB8)
C2/47FE: 29 20        AND #$20
C2/4800: F0 05        BEQ $4807
C2/4802: 0C BC 3E     TSB $3EBC
C2/4807: AD 95 3A     LDA $3A95
C2/480A: D0 E0        BNE $47EC   (Exit if $3A95 != 0)
C2/480C: AD 74 3A     LDA $3A74
C2/480F: D0 22        BNE $4833
C2/4811: AD 8A 3A     LDA $3A8A
C2/4814: F0 0C        BEQ $4822   (If no characters engulfed)
C2/4816: CD 8D 3A     CMP $3A8D
C2/4819: D0 07        BNE $4822
C2/481D: 0C BC 3E     TSB $3EBC
C2/4820: 80 7F        BRA $48A1
C2/4825: D0 70        BNE $4897   (If 1 or more characters escaped)
C2/482A: D0 02        BNE $482E
C2/482E: 20 CA 5F     JSR $5FCA
C2/4831: 80 5C        BRA $488F
C2/4833: AD 77 3A     LDA $3A77   (Number of monsters left in combat)
C2/4836: D0 B4        BNE $47EC   (Exit if 1 or more monsters still alive)
C2/4838: AD E0 3E     LDA $3EE0
C2/483B: D0 03        BNE $4840
C2/483D: 20 76 4A     JSR $4A76
C2/4840: AE 0B 30     LDX $300B   (Which character is Gau)
C2/4843: 30 1C        BMI $4861   (branch if Gau not in party.  note that "in party" can
mean Gau's actively in the party, or that he's Leapt on
the Veldt, you're fighting on the Veldt, and there's a
free spot in your party for him to return.)
C2/4847: 1C E4 11     TRB $11E4
C2/484A: F0 15        BEQ $4861
C2/484C: 20 5A 4B     JSR $4B5A   (0 to 255)
C2/484F: C9 A0        CMP #$A0
C2/4851: B0 0E        BCS $4861   (3 in 8 chance branch)
C2/4853: AD BD 3E     LDA $3EBD
C2/4856: 89 02        BIT #$02    (maybe this bit is set after you've enlisted Gau the
first time?)
C2/4858: D0 74        BNE $48CE   (branch if it is set)
C2/485A: AD 76 3A     LDA $3A76   (Number of characters in party)
C2/485D: C9 02        CMP #$02
C2/485F: B0 6D        BCS $48CE   (Branch if 2 or more characters in party -- this ensures
that Sabin and Cyan are both *alive* to see the original
Gau hijinx)
C2/4861: AE 03 30     LDX $3003   (Which character is Shadow)
C2/4864: 30 26        BMI $488C   (Branch if Shadow not in party)
C2/486B: B0 1F        BCS $488C   (15 in 16 chance branch)
C2/486D: AD 1F 20     LDA $201F   (get encounter type:  0 = front, 1 = back,
2 = pincer, 3 = side)
C2/4870: D0 1A        BNE $488C   (if not a front attack, branch)
C2/4877: 90 13        BCC $488C   (Branch if less than 2 characters in party)
C2/4879: BD E4 3E     LDA $3EE4,X
C2/487C: 89 C2        BIT #$C2    (Check for Dead, Zombie, or Petrify)
C2/487E: D0 0C        BNE $488C   (Branch if any set on Shadow)
C2/4882: 2C BD 3E     BIT $3EBD
C2/4885: D0 05        BNE $488C
C2/4887: 2C DE 1E     BIT $1EDE   (Which characters are in party)
C2/488A: D0 1A        BNE $48A6   (Branch if Shadow in party)
C2/488C: 20 57 5D     JSR $5D57
C2/4897 warp stone effect?
(Warp)
C2/4897: A9 FF        LDA #$FF
C2/4899: 8D 05 02     STA $0205
C2/489E: 0C BC 3E     TSB $3EBC
(   FB 02-Usual monster script way to end a battle  enters here)
C2/48A1: 20 03 49     JSR $4903
C2/48A4: 80 E9        BRA $488F
C2/48A6 shadow randomly leaves after battle
C2/48A6: 1C DE 1E     TRB $1EDE    (Remove Shadow from party)
C2/48A9: 20 E3 47     JSR $47E3
C2/48AC: C2 10        REP #$10
C2/48AE: BC 10 30     LDY $3010,X  (get offset to character info block)
C2/48B1: A9 FF        LDA #$FF
C2/48B3: 99 1E 16     STA $161E,Y  (clear his equipped Esper)
C2/48B8: A9 FE        LDA #$FE
C2/48BA: 20 92 07     JSR $0792
C2/48BD: A9 02        LDA #$02
C2/48BF: 0C 49 2F     TSB $2F49    (turn on "No Winning Stand" aka
"No victory dance" in extra formation
data.  this bit is checked at C1/0124.)
C2/48C2: A2 0B        LDX #$0B
C2/48C4: 68           PLA
C2/48C8: 20 91 4E     JSR $4E91
C2/48CB: 4C 19 00     JMP $0019
C2/48CE Gau arrives after Veldt battle
(Gau arrives after Veldt battle)
C2/48CE: BD 18 30     LDA $3018,X
C2/48D1: 0C 4E 2F     TSB $2F4E
C2/48D4: 0C 40 3A     TSB $3A40   (mark Gau as a "character acting as enemy" target)
C2/48D9: 0C 46 3A     TSB $3A46
C2/48DC: A2 1B        LDX #$1B
C2/48DE: 80 E4        BRA $48C4
C2/48E0 gau leapt
(Gau leapt)
C2/48E0: AE 0B 30     LDX $300B  (which character is Gau)
C2/48E3: 20 E3 47     JSR $47E3
C2/48E6: A9 08        LDA #$08
C2/48E8: 1C DF 1E     TRB $1EDF  (remove Gau from party)
(   FB 09-Used by returning Gau when he joins the party  enters here)
C2/48EB: 20 07 4A     JSR $4A07
C2/48EE: 80 9F        BRA $488F
C2/48F0 Banon fell
(Banon fell)
C2/48F2: 20 CA 5F     JSR $5FCA
C2/48F5: 80 98        BRA $488F
C2/48F7 pointers: special combat endings
C2/48F7: 97 48    (02-Warp)
C2/48F9: E0 48    (04-Gau leapt)
C2/48FB: F0 48    (06-Banon fell)
C2/48FD: A1 48    (08-FB 02-Usual monster script way to end a battle)
C2/48FF: EB 48    (0A-FB 09-Used by returning Gau when he joins the
party)
C2/4901: 22 4A    (0C-Annihilation perhaps?)
C2/4903: 20 36 0B     JSR $0B36     (Establish new value for Morph supply based on its
previous value and the current Morph timer)
C2/4908: 9E 04 3B     STZ $3B04,X   (Zero this entity's Morph gauge)
C2/490B: 8A           TXA
C2/490D: 85 10        STA $10
C2/490F: A9 03        LDA #$03
C2/4911: 20 11 64     JSR $6411
C2/4916: 10 F0        BPL $4908
C2/491A: 04 B1        TSB $B1
C2/491C: A2 20        LDX #$20
C2/4924: D0 F8        BNE $491E
C2/4926: A9 0F        LDA #$0F
C2/4928: 0C 8C 3A     TSB $3A8C   (mark all characters to have their applicable items
added to inventory.  in particular, this will
handle an item they tried to use (the game depletes
it on issuing the command), but were killed before
before they could actually execute the command and
use it.)
C2/492B: 20 C7 62     JSR $62C7   (add items [back] to inventory)
C2/492E: A9 0A        LDA #$0A
C2/4933: 4C 95 20     JMP $2095
C2/4938: BD D8 3E     LDA $3ED8,X  (get which character this is)
C2/493B: 30 3E        BMI $497B    (if it's undefined, skip it)
C2/493F: F0 04        BEQ $4945    (branch if it's 1st ghost)
C2/4943: D0 07        BNE $494C    (branch if it's not 2nd ghost)
C2/4945: BD E4 3E     LDA $3EE4,X  (Check for Dead, Zombie, or Petrify)
C2/4948: 89 C2        BIT #$C2
C2/494A: D0 08        BNE $4954    (branch if one or more ^)
C2/494C: BD 18 30     LDA $3018,X
C2/494F: 2C 88 3A     BIT $3A88    (was this character flagged to be removed from
party? [by Possessing or getting hit by
BabaBreath])
C2/4952: F0 03        BEQ $4957    (branch if not)
C2/4954: 20 E3 47     JSR $47E3
C2/4957: BD F9 3E     LDA $3EF9,X  (in-battle status byte 4)
C2/495A: 29 C0        AND #$C0     (only keep Dog Block and Float after battle)
C2/495C: EB           XBA
C2/495D: BD E4 3E     LDA $3EE4,X  (in-battle status byte 1)
C2/4960: C2 30        REP #$30     (Set 16-bit Accumulator, 16-bit X and Y)
C2/4962: BC 10 30     LDY $3010,X  (get offset to character info block)
C2/4965: 99 14 16     STA $1614,Y  (save in-battle status bytes 1 and 4 to our
two out-of-battle status bytes)
C2/4968: BD F4 3B     LDA $3BF4,X
C2/496B: 99 09 16     STA $1609,Y  (save current HP in out-of-battle stat)
C2/496E: BD 30 3C     LDA $3C30,X
C2/4971: F0 06        BEQ $4979    (Branch if max MP is zero)
C2/4973: BD 08 3C     LDA $3C08,X
C2/4976: 99 0D 16     STA $160D,Y  (otherwise, save current MP in out-of-battle stat)
C2/497B: CA           DEX
C2/497D: 10 B9        BPL $4938    (loop for all 4 party members)
C2/497F: C2 10        REP #$10
C2/4981: A2 FF 00     LDX #$00FF
C2/4984: A0 FB 04     LDY #$04FB
C2/498A: 9D 69 18     STA $1869,X
C2/498D: 1A           INC
C2/498E: F0 03        BEQ $4993
C2/4993: 9D 69 19     STA $1969,X
C2/499A: 88           DEY
C2/499C: 10 E9        BPL $4987
C2/499E: AD 97 3A     LDA $3A97
C2/49A1: F0 21        BEQ $49C4    (branch if not Colosseum brawl?)
C2/49A3: AD 05 02     LDA $0205    (item wagered)
C2/49A6: C9 FF        CMP #$FF
C2/49A8: F0 1A        BEQ $49C4    (branch if null)
C2/49AA: A2 FF 00     LDX #$00FF
C2/49AD: DD 69 18     CMP $1869,X  (is item wagered in this slot?)
C2/49B0: D0 0F        BNE $49C1    (branch if not)
C2/49B2: DE 69 19     DEC $1969,X  (if it was, decrement the item's count as
a Colosseum fee)
C2/49B5: F0 02        BEQ $49B9    (if there's none of the item left, empty
out its slot)
C2/49B7: 10 08        BPL $49C1    (if there's a nonzero and positive quantity
of the item, don't empty out its slot)
C2/49BB: 9D 69 18     STA $1869,X  (store Empty item)
C2/49BE: 9E 69 19     STZ $1969,X  (with a quantity of 0)
C2/49C1: CA           DEX          (move to next lowest item slot)
C2/49C2: 10 E9        BPL $49AD    (loop for all 256 item slots)
C2/49C4: E2 10        SEP #$10
C2/49C6: AE FA 33     LDX $33FA
C2/49C9: 30 0A        BMI $49D5   (If Doom Gaze not in battle)
C2/49CB: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/49CD: BD F4 3B     LDA $3BF4,X (Monster's HP)
C2/49D0: 8D BE 3E     STA $3EBE   (Set Doom Gaze's HP to monsters's HP)
C2/49D3: E2 20        SEP #$20    (Set 8-bit A)
C2/49D5: A2 13        LDX #$13
C2/49D7: BD B4 3E     LDA $3EB4,X  (copy in-battle event bytes)
C2/49DA: 9D C9 1D     STA $1DC9,X  ( back into normal out-of-battle event bytes)
C2/49DD: CA           DEX
C2/49DE: 10 F7        BPL $49D7    (loop 14 times)
C2/49E0: AD 4B 2F     LDA $2F4B
C2/49E3: 89 02        BIT #$02
C2/49E5: D0 1F        BNE $4A06   (exit if this formation has "Don't appear on Veldt"
property)
C2/49E7: A2 0A        LDX #$0A
C2/49E9: BD 02 20     LDA $2002,X (Get MSB of monster #)
C2/49EC: D0 14        BNE $4A02   (If they're a boss, don't mark formation as found,
but check next monster)
C2/49EE: AD D5 3E     LDA $3ED5
C2/49F1: 4A           LSR         (Move bit 8 of formation # into Carry and out of A)
C2/49F2: D0 12        BNE $4A06   (If any of bits 9-15 were set, the formation # is
over 511.  skip it.)
C2/49F4: AD D4 3E     LDA $3ED4   (Get bits 0-7 of battle formation)
C2/49F7: 20 17 52     JSR $5217   (X=formation DIV 8, A=2^(formation MOD 8) )
C2/49FA: 1D DD 1D     ORA $1DDD,X
C2/49FD: 9D DD 1D     STA $1DDD,X (Update structure of encountered groups for Veldt)
C2/4A00: 80 04        BRA $4A06   (Once Veldt structure is updated once, we can exit)
C2/4A02: CA           DEX
C2/4A04: 10 E3        BPL $49E9   (Move to next enemy and loop)
C2/4A06: 60           RTS
C2/4A07 add rages learned in battle
C2/4A07: A2 0A        LDX #$0A
C2/4A09: BD 02 20     LDA $2002,X
C2/4A0C: D0 0F        BNE $4A1D    (Branch if monster # >= 256)
C2/4A0E: DA           PHX
C2/4A0F: 18           CLC
C2/4A10: BD 01 20     LDA $2001,X  (Low byte of monster #)
C2/4A13: 20 17 52     JSR $5217    (X = monster # DIV 8, A = 2^(monster # MOD 8))
C2/4A16: 1D 2C 1D     ORA $1D2C,X
C2/4A19: 9D 2C 1D     STA $1D2C,X  (Add rage to list of known ones)
C2/4A1C: FA           PLX
C2/4A1D: CA           DEX
C2/4A1E: CA           DEX
C2/4A1F: 10 E8        BPL $4A09    (Check for all monsters)
C2/4A22 unknow
C2/4A22: 20 67 02     JSR $0267
C2/4A2B: A2 12        LDX #$12
C2/4A2D: E0 08        CPX #$08
C2/4A2F: B0 34        BCS $4A65    (branch if monster)
C2/4A31: BD A0 3A     LDA $3AA0,X
C2/4A34: 4A           LSR
C2/4A35: 90 1D        BCC $4A54
C2/4A37: BD E4 3E     LDA $3EE4,X
C2/4A3A: 89 C2        BIT #$C2     (Check for Dead, Zombie, or Petrify)
C2/4A3C: D0 16        BNE $4A54    (branch if some possessed)
C2/4A3E: BD 05 32     LDA $3205,X
C2/4A41: 89 04        BIT #$04
C2/4A43: F0 0F        BEQ $4A54
C2/4A45: C2 20        REP #$20     (set 16-bit A)
C2/4A47: BD F8 3E     LDA $3EF8,X  (status bytes 3 and 4)
C2/4A4A: 29 FE EE     AND #$EEFE
C2/4A4D: 9D F8 3E     STA $3EF8,X  (clear Dance, Rage, and Spell Chant statuses)
C2/4A50: E2 20        SEP #$20     (set 8-bit A)
C2/4A52: 80 14        BRA $4A68
C2/4A54: A9 FF        LDA #$FF
C2/4A56: 9D D8 3E     STA $3ED8,X  (indicate null for "which character this is")
C2/4A5C: 1C 2C 3F     TRB $3F2C    (clear entity from jumpers)
C2/4A5F: 1C 2E 3F     TRB $3F2E
C2/4A62: 1C 2F 3F     TRB $3F2F
C2/4A65: 20 9E 4A     JSR $4A9E    (Clear all statuses)
C2/4A6A: 10 C1        BPL $4A2D    (loop for all onscreen entities)
C2/4A6C: A9 0C        LDA #$0C
C2/4A6E: 20 11 64     JSR $6411
C2/4A71: 68           PLA
C2/4A73: 4C 16 00     JMP $0016
C2/4A76: C2 20        REP #$20
C2/4A78: A2 04        LDX #$04
C2/4A7A: BF AB 4A C2  LDA $C24AAB,X
C2/4A7E: CD E0 11     CMP $11E0      (is Battle formation one of the first
3 tiers of the final 4-tier multi-battle?)
C2/4A81: D0 14        BNE $4A97      (branch and check another if no match)
C2/4A83: BF AD 4A C2  LDA $C24AAD,X
C2/4A87: 8D E0 11     STA $11E0      (update Battle formation to the next
one of the tiers)
C2/4A8A: E2 20        SEP #$20
C2/4A8C: BF B3 4A C2  LDA $C24AB3,X
C2/4A90: 8D E1 3E     STA $3EE1
C2/4A94: 68           PLA            (clear caller address from stack?)
C2/4A95: 80 8B        BRA $4A22      (.. this will result in us returning
somewhere other than C2/483D)
C2/4A99: 10 DF        BPL $4A7A      (loop 3 times)
C2/4A9B: E2 20        SEP #$20
C2/4A9D: 60           RTS            (return normally)
C2/4A9E clear all statuses
C2/4A9E: 9E E4 3E     STZ $3EE4,X   (Clear Status Byte 1)
C2/4AA1: 9E E5 3E     STZ $3EE5,X   (Clear Status Byte 2)
C2/4AA4: 9E F8 3E     STZ $3EF8,X   (Clear Status Byte 3)
C2/4AAA: 60           RTS
C2/4AAB data: last battle formations
Data for changing formations in last battle
C2/4AAB: D7 01     (Short Arm, Long Arm, Face)
C2/4AAD: 00 02     (Hit, Tiger, Tools)
C2/4AAF: 01 02     (Girl, Sleep)
C2/4AB1: 02 02     (Final Kefka)
C2/4AB3: 90 90
C2/4AB7: 8F 8F
C2/4AB9 unknow
C2/4AB9: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/4ABB: AD 4C 2F     LDA $2F4C
C2/4ABE: 49 FF FF     EOR #$FFFF
C2/4AC1: 2D 4E 2F     AND $2F4E
C2/4AC4: 8D 4E 2F     STA $2F4E
C2/4AC7: 8D 78 3A     STA $3A78
C2/4ACA: 9C 74 3A     STZ $3A74
C2/4ACD: 9C 42 3A     STZ $3A42
C2/4AD0: E2 20        SEP #$20
C2/4AD2: A2 06        LDX #$06
C2/4AD4: BD A0 3A     LDA $3AA0,X
C2/4AD7: 4A           LSR
C2/4AD8: BD 18 30     LDA $3018,X
C2/4ADB: 2C 4C 2F     BIT $2F4C
C2/4ADE: D0 22        BNE $4B02
C2/4AE0: 2C 4E 2F     BIT $2F4E
C2/4AE3: D0 0E        BNE $4AF3
C2/4AE5: 90 1B        BCC $4B02
C2/4AE7: 0C 78 3A     TSB $3A78
C2/4AEA: EB           XBA
C2/4AEB: BD E4 3E     LDA $3EE4,X
C2/4AEE: 89 C2        BIT #$C2     (zombie, Petrify or death status?)
C2/4AF0: D0 10        BNE $4B02    (if so, branch)
C2/4AF2: EB           XBA
C2/4AF3: 2D 08 34     AND $3408
C2/4AF6: 0C 74 3A     TSB $3A74
C2/4AF9: 2D 40 3A     AND $3A40
C2/4AFC: 0C 42 3A     TSB $3A42
C2/4AFF: 1C 74 3A     TRB $3A74
C2/4B02: CA           DEX
C2/4B04: 10 CE        BPL $4AD4
C2/4B06: A2 0A        LDX #$0A
C2/4B08: BD A8 3A     LDA $3AA8,X
C2/4B0B: 4A           LSR
C2/4B0C: BD 21 30     LDA $3021,X
C2/4B0F: 2C 4D 2F     BIT $2F4D
C2/4B12: D0 1E        BNE $4B32
C2/4B14: 2C 4F 2F     BIT $2F4F
C2/4B17: D0 13        BNE $4B2C
C2/4B19: 90 17        BCC $4B32
C2/4B1B: 0C 79 3A     TSB $3A79
C2/4B1E: 2C 3A 3A     BIT $3A3A
C2/4B21: D0 0F        BNE $4B32
C2/4B23: EB           XBA
C2/4B24: BD EC 3E     LDA $3EEC,X
C2/4B27: 89 C2        BIT #$C2
C2/4B29: D0 07        BNE $4B32
C2/4B2B: EB           XBA
C2/4B2C: 2D 09 34     AND $3409
C2/4B2F: 0C 75 3A     TSB $3A75
C2/4B34: 10 D2        BPL $4B08
C2/4B36: DA           PHX
C2/4B37: 08           PHP
C2/4B38: AD 74 3A     LDA $3A74
C2/4B3B: 20 0E 52     JSR $520E
C2/4B3E: 8E 76 3A     STX $3A76   (Set Number of characters in party
to number of bits set in $3A74)
C2/4B48: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/4B4A: 20 0E 52     JSR $520E
C2/4B4D: 8E 77 3A     STX $3A77   (Set to number of bits set in $3A42 & $3A75)
C2/4B50: 28           PLP
C2/4B51: FA           PLX
C2/4B52: 60           RTS
C2/4B53 random number generator: 0 or 1
Random Number Generator 1 (0 or 1, carry clear or set)
C2/4B53: 48           PHA
C2/4B54: 20 5A 4B     JSR $4B5A
C2/4B57: 4A           LSR
C2/4B58: 68           PLA
C2/4B5A random number generator: [0, 255]
C2/4B5A: DA           PHX
C2/4B5B: E6 BE        INC $BE
C2/4B5D: A6 BE        LDX $BE
C2/4B5F: BF 00 FD C0  LDA $C0FD00,X
C2/4B65 random number generator: [0, A - 1]
C2/4B67: E2 30        SEP #$30    (Set 8-bit A, X, Y)
C2/4B6A: 48           PHA         (save top half of A)
C2/4B73: 20 81 47     JSR $4781   (16-bit A = (input 8-bit A) * (Random Number Table value) )
C2/4B76: 68           PLA         (restore top half of A)
C2/4B77: EB           XBA         (now bottom half of A =
(input 8-bit A * Random Table value) / 256)
C2/4B7A: 60           RTS
C2/4B7B unknow
C2/4B7B: 38           SEC
C2/4B7C: 6E 07 34     ROR $3407
C2/4B7F: A9 01        LDA #$01
C2/4B81: 04 B1        TSB $B1
C2/4B83: F4 18 00     PEA $0018
C2/4B86: BD CD 32     LDA $32CD,X
C2/4B89: 30 68        BMI $4BF3
C2/4B8B: 0A           ASL
C2/4B8C: A8           TAY
C2/4B8D: 20 76 02     JSR $0276
C2/4B90: C9 1F        CMP #$1F
C2/4B94: 20 54 4C     JSR $4C54
C2/4B97: 20 F4 4B     JSR $4BF4
C2/4B9A: 80 EA        BRA $4B86
C2/4B9C: BD CD 32     LDA $32CD,X
C2/4B9F: A8           TAY
C2/4BA0: B9 84 31     LDA $3184,Y
C2/4BA3: DD CD 32     CMP $32CD,X
C2/4BA6: D0 02        BNE $4BAA
C2/4BA8: A9 FF        LDA #$FF
C2/4BAA: 9D CD 32     STA $32CD,X
C2/4BAD: A9 FF        LDA #$FF
C2/4BAF: 99 84 31     STA $3184,Y
C2/4BB2: A5 B5        LDA $B5
C2/4BB4: C9 1E        CMP #$1E
C2/4BB6: B0 1D        BCS $4BD5
C2/4BB8: E0 08        CPX #$08
C2/4BBA: B0 19        BCS $4BD5
C2/4BBC: BD 18 30     LDA $3018,X
C2/4BBF: 2C 39 3A     BIT $3A39
C2/4BC2: D0 1F        BNE $4BE3
C2/4BC4: 2C 40 3A     BIT $3A40
C2/4BC7: D0 0C        BNE $4BD5
C2/4BC9: AD 77 3A     LDA $3A77
C2/4BCC: F0 15        BEQ $4BE3
C2/4BCE: BD A0 3A     LDA $3AA0,X
C2/4BD1: 89 50        BIT #$50
C2/4BD3: D0 0E        BNE $4BE3
C2/4BD5: BD 04 32     LDA $3204,X
C2/4BD8: 09 04        ORA #$04
C2/4BDA: 9D 04 32     STA $3204,X
C2/4BDD: 20 D3 13     JSR $13D3
C2/4BE0: 20 1E 02     JSR $021E
C2/4BE3: BD CD 32     LDA $32CD,X
C2/4BE6: 1A           INC
C2/4BE7: D0 07        BNE $4BF0
C2/4BE9: A5 B0        LDA $B0
C2/4BEB: 30 06        BMI $4BF3
C2/4BED: 4C 67 02     JMP $0267
C2/4BF0: 8E 07 34     STX $3407
C2/4BF3: 60           RTS
C2/4BF4 unknow
C2/4BF4: 08           PHP
C2/4BF5: C2 20        REP #$20     (Set 16-bit accumulator)
C2/4BF7: 9C 98 3A     STZ $3A98
C2/4BFA: BD 18 30     LDA $3018,X
C2/4BFD: 1C FC 33     TRB $33FC
C2/4C00: F0 50        BEQ $4C52
C2/4C02: 1C 56 3A     TRB $3A56
C2/4C05: D0 21        BNE $4C28
C2/4C07: AD 03 34     LDA $3403
C2/4C0A: 30 05        BMI $4C11
C2/4C0C: EC 04 34     CPX $3404
C2/4C0F: D0 1F        BNE $4C30
C2/4C11: BD 60 3E     LDA $3E60,X    (Quasi Status after attack, bytes 1-2)
C2/4C14: 89 00 B0     BIT #$B000
C2/4C17: D0 17        BNE $4C30      (if Sleep, Muddled or Berserk is set, branch)
C2/4C1C: 89 10 02     BIT #$0210
C2/4C1F: D0 0F        BNE $4C30      (if freeze or stop is set, branch)
C2/4C21: BD 94 33     LDA $3394,X
C2/4C24: 10 0A        BPL $4C30
C2/4C26: 80 0B        BRA $4C33
C2/4C2B: 0C FE 33     TSB $33FE
C2/4C2E: F0 E1        BEQ $4C11
C2/4C30: CE 98 3A     DEC $3A98
C2/4C36: 85 F0        STA $F0
C2/4C38: BD 20 3D     LDA $3D20,X
C2/4C3B: 85 F2        STA $F2
C2/4C3D: BD 41 32     LDA $3241,X
C2/4C42: 18           CLC
C2/4C43: 20 2F 1A     JSR $1A2F
C2/4C46: A5 F2        LDA $F2
C2/4C48: 9D 20 3D     STA $3D20,X
C2/4C4B: E2 20        SEP #$20
C2/4C4D: A5 F5        LDA $F5
C2/4C4F: 9D 41 32     STA $3241,X
C2/4C52: 28           PLP
C2/4C53: 60           RTS
C2/4C54 unknow
C2/4C54: DA           PHX
C2/4C55: E8           INX
C2/4C56: 20 01 03     JSR $0301
C2/4C59: FA           PLX
C2/4C5A: 60           RTS
C2/4C5B counter attacks
Counter attacks (retort, interceptor, black belt)
C2/4C5B: A2 12        LDX #$12
C2/4C5D: BD A0 3A     LDA $3AA0,X
C2/4C60: 4A           LSR
C2/4C61: 90 5B        BCC $4CBE
C2/4C63: AD 1A 34     LDA $341A   (did attack have X-Zone/Odin/Snare special effect,
or Air Anchor special effect?)
C2/4C66: F0 56        BEQ $4CBE   (branch and skip counter if so)
C2/4C68: 64 B8        STZ $B8
C2/4C6A: 64 B9        STZ $B9
C2/4C6C: BD E0 32     LDA $32E0,X (Top bit = 1 if target of this attack?
Bottom seven bits = index of entity who last
attacked them?)
C2/4C6F: 10 15        BPL $4C86   (Branch if this attack does not target them)
C2/4C71: 0A           ASL
C2/4C72: 85 EE        STA $EE     (multiply attacker index by 2 so we can access
their data)
C2/4C74: E4 EE        CPX $EE
C2/4C76: F0 0E        BEQ $4C86   (Branch if targeting yourself)
C2/4C78: A8           TAY         (Y = attacker index)
C2/4C79: C2 20        REP #$20    (Set 16-bit accumulator)
C2/4C7B: B9 18 30     LDA $3018,Y
C2/4C7E: 85 B8        STA $B8     (Put attacker in $B8)
C2/4C83: 1C FE 33     TRB $33FE
C2/4C86: C2 20        REP #$20
C2/4C8B: 2C 56 3A     BIT $3A56
C2/4C8E: E2 20        SEP #$20    (Set 8-bit accumulator)
C2/4C90: D0 0B        BNE $4C9D   (Branch if died already this combat)
C2/4C92: A5 B1        LDA $B1
C2/4C95: B0 27        BCS $4CBE   (No counter)
C2/4C99: 05 B9        ORA $B9
C2/4C9B: F0 21        BEQ $4CBE   (No counter if not target of attack, or if
targeting yourself)
C2/4C9D: BD 69 32     LDA $3269,X  (top byte of offset to monster's
counterattack script)
C2/4CA0: 30 0F        BMI $4CB1    (branch if it has no counterattack script)
C2/4CA2: BD CD 32     LDA $32CD,X
C2/4CA5: 10 0A        BPL $4CB1
C2/4CA7: A9 1F        LDA #$1F
C2/4CA9: 8D 7A 3A     STA $3A7A   (Set command to #$1F (counter attack))
C2/4CAC: 20 B2 4E     JSR $4EB2
C2/4CAF: 80 0D        BRA $4CBE
C2/4CB1: E0 08        CPX #$08
C2/4CB3: B0 09        BCS $4CBE   (Branch if monster)
C2/4CB5: AD A2 11     LDA $11A2
C2/4CB8: 4A           LSR
C2/4CB9: 90 03        BCC $4CBE   (Branch if magical attack)
C2/4CBB: 20 C3 4C     JSR $4CC3   (Do Retort counter [or Dog Block counter,
or Black Belt counter])
C2/4CBE: CA           DEX
C2/4CBF: CA           DEX
C2/4CC0: 10 9B        BPL $4C5D   (Check for each character and monster)
C2/4CC2: 60           RTS
C2/4CC3 retort
C2/4CC3: BD 4C 3E     LDA $3E4C,X
C2/4CC6: 4A           LSR
C2/4CC7: 90 0D        BCC $4CD6   (Branch if no retort, check dog block)
C2/4CC9: A9 07        LDA #$07
C2/4CCB: 8D 7A 3A     STA $3A7A   (Store Swdtech in command)
C2/4CCE: A9 56        LDA #$56
C2/4CD0: 8D 7B 3A     STA $3A7B   (Store Retort in attack)
C2/4CD3: 4C B2 4E     JMP $4EB2
C2/4CD6 dog block
C2/4CD6: A5 B9        LDA $B9
C2/4CD8: F0 E8        BEQ $4CC2   (Exit function if attacked by party)
C2/4CDA: EC 16 34     CPX $3416   (was this target protected by a Dog block on
this turn?  [or if it's a multi-strike attack
and Interceptor status was hacked onto multiple
characters, then was this target the most
recently protected on the turn?])
C2/4CDD: D0 15        BNE $4CF4   (if target wasn't protected by a dog block,
branch to Black Belt)
C2/4CDF: 20 5A 4B     JSR $4B5A   (random: 0 to 255)
C2/4CE2: 4A           LSR
C2/4CE3: 90 0F        BCC $4CF4   (50% chance branch to Black Belt)
C2/4CE5: 4A           LSR         (Carry will determine which Interceptor
counterattack is used: 50% chance of each)
C2/4CE6: 7B           TDC
C2/4CE7: 69 FC        ADC #$FC
C2/4CE9: 8D 7B 3A     STA $3A7B   (Store Wild Fang or Take Down in attack)
C2/4CEC: A9 02        LDA #$02
C2/4CEE: 8D 7A 3A     STA $3A7A   (Store Magic in command)
C2/4CF1: 4C B2 4E     JMP $4EB2
C2/4CF4 black belt counter
C2/4CF4: BD 18 30     LDA $3018,X
C2/4CF7: 2C 19 34     BIT $3419   (was this target damaged [by an attacker other
than themselves] this turn?  the target's bit
will be 0 in $3419 if they were.)
C2/4CFA: D0 C6        BNE $4CC2   (Exit if they weren't)
C2/4CFC: BD 58 3C     LDA $3C58,X
C2/4CFF: 89 02        BIT #$02    (Check for Black Belt)
C2/4D01: F0 BF        BEQ $4CC2   (Exit if no Black Belt)
C2/4D03: 20 5A 4B     JSR $4B5A   (0 to 255)
C2/4D06: C9 C0        CMP #$C0
C2/4D08: B0 B8        BCS $4CC2   (25% chance of exit)
C2/4D0A: 9B           TXY
C2/4D0B: F4 CA A0     PEA $A0CA   (Death, Petrify, M-Tek, Zombie, Sleep, Muddled)
C2/4D0E: F4 11 32     PEA $3211   (Stop, Dance, Freeze, Spell, Hide)
C2/4D11: 20 64 58     JSR $5864
C2/4D14: 90 AC        BCC $4CC2   (Exit if any set)
C2/4D16: 9C 7A 3A     STZ $3A7A   (Store Fight in command)
C2/4D19: 9C 7B 3A     STZ $3A7B
C2/4D1C: 4C B2 4E     JMP $4EB2
C2/4D1F unknow
C2/4D1F: AC 6A 3A     LDY $3A6A
C2/4D22: B9 AE 2B     LDA $2BAE,Y
C2/4D25: 30 45        BMI $4D6C   (Exit function)
C2/4D27: 0A           ASL
C2/4D28: AA           TAX
C2/4D29: 20 66 4E     JSR $4E66
C2/4D2C: A9 7B        LDA #$7B
C2/4D2E: 20 92 07     JSR $0792
C2/4D31: A9 FF        LDA #$FF
C2/4D33: 99 AE 2B     STA $2BAE,Y
C2/4D36: 98           TYA
C2/4D37: 69 08        ADC #$08
C2/4D39: 29 18        AND #$18
C2/4D3B: 8D 6A 3A     STA $3A6A
C2/4D3E: 20 6D 4D     JSR $4D6D
C2/4D41: B9 B0 2B     LDA $2BB0,Y
C2/4D44: EB           XBA
C2/4D45: B9 AF 2B     LDA $2BAF,Y
C2/4D48: 20 89 4D     JSR $4D89
C2/4D4B: 20 77 4D     JSR $4D77
C2/4D4E: 20 CB 4E     JSR $4ECB
C2/4D54: C9 17        CMP #$17
C2/4D56: D0 C7        BNE $4D1F
C2/4D58: C8           INY
C2/4D5A: C8           INY
C2/4D5B: 20 6D 4D     JSR $4D6D
C2/4D5E: B9 B0 2B     LDA $2BB0,Y
C2/4D62: A9 17        LDA #$17
C2/4D67: 20 CB 4E     JSR $4ECB
C2/4D6A: 80 B3        BRA $4D1F
C2/4D6C: 60           RTS
C2/4D6D unknow
C2/4D6D: 08           PHP
C2/4D6E: C2 20        REP #$20
C2/4D73: 85 B8        STA $B8
C2/4D75: 28           PLP
C2/4D76: 60           RTS
C2/4DD7 clears target if attacker is zombied or muddled
C2/4D77: 08           PHP
C2/4D78: C2 20        REP #$20     (set 16-bit accumulator)
C2/4D7A: 8D 7A 3A     STA $3A7A
C2/4D7D: BD E4 3E     LDA $3EE4,X
C2/4D80: 89 02 20     BIT #$2002
C2/4D83: F0 02        BEQ $4D87    (branch if not Zombie or Muddle)
C2/4D85: 64 B8        STZ $B8      (clear targets)
C2/4D89 unknow
C2/4D89: DA           PHX
C2/4D8A: 5A           PHY
C2/4D8B: 9B           TXY
C2/4D8C: C9 17        CMP #$17
C2/4D8E: D0 02        BNE $4D92   (Branch if not X-Magic)
C2/4D90: A9 02        LDA #$02    (Set command to Magic)
C2/4D94: D0 11        BNE $4DA7   (Branch if not Summon)
C2/4D96: 48           PHA
C2/4D98: C9 FF        CMP #$FF    (Check if no Esper equipped)
C2/4D9A: D0 03        BNE $4D9F
C2/4D9C: B9 44 33     LDA $3344,Y
C2/4D9F: EB           XBA
C2/4DA0: B9 18 30     LDA $3018,Y
C2/4DA3: 0C 2E 3F     TSB $3F2E
C2/4DA6: 68           PLA
C2/4DA7: C9 01        CMP #$01
C2/4DA9: F0 04        BEQ $4DAF   (Branch if Item)
C2/4DAB: C9 08        CMP #$08
C2/4DAD: D0 05        BNE $4DB4   (Branch if not Throw)
C2/4DAF: EB           XBA
C2/4DB0: 99 F4 32     STA $32F4,Y (store as item to add back to inventory.  this can
happen with:
1) Equipment Magic that doesn't destroy the item
[no items have this, but the game supports it]
2) the item user's turn never happens.  perhaps the
character who acted before them won the battle.)
C2/4DB3: EB           XBA
C2/4DB4: C9 0F        CMP #$0F
C2/4DB6: D0 23        BNE $4DDB   (Branch if not Slot)
C2/4DB8: 48           PHA         (save command #)
C2/4DB9: EB           XBA           (get our Slot index)
C2/4DBA: AA           TAX
C2/4DBB: BF 4A 4E C2  LDA $C24E4A,X   (get spell # used by this Slot combo)
C2/4DBF: E0 02        CPX #$02
C2/4DC1: B0 0F        BCS $4DD2       (branch if it's Bahamut or higher -- i.e. neither form
of Joker Doom)
C2/4DC3: 48           PHA             (save spell #)
C2/4DC4: BF 52 4E C2  LDA $C24E52,X   (get Joker Doom targeting)
C2/4DC8: 95 B8        STA $B8,X       (if X is 0 [7-7-Bar], mark all party members in $B8
if X is 1 [7-7-7], mark all enemies in $B9)
C2/4DCA: A5 B8        LDA $B8
C2/4DCC: 4D 40 3A     EOR $3A40
C2/4DCF: 85 B8        STA $B8         (toggle whether characters acting as enemies are targeted.
e.g. Shadow in Colosseum or Gau returning from Veldt leap)
C2/4DD1: 68           PLA             (restore spell #)
C2/4DD2: C9 FF        CMP #$FF
C2/4DD4: D0 03        BNE $4DD9   (branch if not Bar-Bar-Bar)
C2/4DD6: 20 DC 37     JSR $37DC   (Pick random esper)
C2/4DD9: EB           XBA
C2/4DDA: 68           PLA         (restore command #)
C2/4DDB: C9 13        CMP #$13
C2/4DDD: D0 0D        BNE $4DEC   (Branch if not Dance)
C2/4DDF: 48           PHA
C2/4DE0: EB           XBA
C2/4DE1: 99 E1 32     STA $32E1,Y
C2/4DE4: 8D 6F 3A     STA $3A6F
C2/4DE7: 20 9C 05     JSR $059C   (Pick dance and dance move)
C2/4DEA: EB           XBA
C2/4DEB: 68           PLA
C2/4DEC: C9 10        CMP #$10
C2/4DEE: D0 0A        BNE $4DFA   (Branch if not Rage)
C2/4DF0: 48           PHA
C2/4DF1: EB           XBA
C2/4DF2: 99 A8 33     STA $33A8,Y (Which rage is being used)
C2/4DF5: 20 D1 05     JSR $05D1   (Picks a Rage [when Muddled/Berserked/etc], and picks
the Rage move)
C2/4DF9: 68           PLA
C2/4DFA: C9 0A        CMP #$0A
C2/4DFC: D0 15        BNE $4E13   (Branch if not Blitz)
C2/4DFE: 48           PHA
C2/4DFF: EB           XBA
C2/4E00: 48           PHA
C2/4E01: 30 0D        BMI $4E10   (If no blitz selected)
C2/4E03: AA           TAX
C2/4E04: 20 57 1E     JSR $1E57
C2/4E07: 2C 28 1D     BIT $1D28
C2/4E0A: D0 04        BNE $4E10   (Branch if selected blitz is known)
C2/4E0C: A9 FF        LDA #$FF
C2/4E0E: 83 01        STA $01,S   (replace spell/attack # with null)
C2/4E10: 68           PLA
C2/4E11: EB           XBA
C2/4E13: A2 04        LDX #$04
C2/4E15: DF 3C 4E C2  CMP $C24E3C,X   (does our command match one that needs its
spell # calculated?)
C2/4E19: D0 0B        BNE $4E26       (branch if not)
C2/4E1B: EB           XBA
C2/4E1C: 18           CLC
C2/4E1D: 7F 41 4E C2  ADC $C24E41,X   (add the first spell # for this command to our
current index.  ex - for Pummel, Blitz #0, we'd
end up with 55h.)
C2/4E21: 90 02        BCC $4E25       (branch if the spell # didn't overflow)
C2/4E23: A9 EE        LDA #$EE        (load Battle as spell #)
C2/4E25: EB           XBA             (put spell # in top of A, and look at command # again)
C2/4E26: CA           DEX
C2/4E27: 10 EC        BPL $4E15       (loop for all 5 commands)
C2/4E2A: 18           CLC             (clear Carry)
C2/4E2B: 20 17 52     JSR $5217       (X = A DIV 8, A = 2 ^ (A MOD 8) )
C2/4E2E: 3F 46 4E C2  AND $C24E46,X   (compare to bitfield of commands that need to retarget)
C2/4E32: F0 04        BEQ $4E38       (Branch if command doesn't need to retarget)
C2/4E34: 64 B8        STZ $B8
C2/4E36: 64 B9        STZ $B9         (clear targets)
C2/4E39: 7A           PLY
C2/4E3A: FA           PLX
C2/4E3B: 60           RTS
C2/4E3C data: commands for spell calculation
(Data - commands that need their spell # calculated)
C2/4E3C: 19   (Summon)
C2/4E3D: 0C   (Lore)
C2/4E3E: 1D   (Magitek)
C2/4E3F: 0A   (Blitz)
C2/4E40: 07   (Swdtech)
C2/4E41 data: first spell for commands at C2/4E3C
(Data - first spell # for each of above commands)
C2/4E41: 36   (Espers)
C2/4E42: 8B   (Lores)
C2/4E43: 83   (Magitek commands)
C2/4E44: 5D   (Blitzes)
C2/4E46 data: commands that need to retarget
(Data - commands that need to retarget.  8 commands per byte.)
C2/4E47: 04   (Blitz)
C2/4E48: 0B   (Rage, Leap, Dance)
C2/4E49: 00   (Nothing)
C2/4E4A data: spell numbers for slot attacks
C2/4E4A: 94   (L.5 Doom -- used by Joker Doom)
C2/4E4B: 94   (L.5 Doom -- used by Joker Doom)
C2/4E4C: 43   (Bahamut)
C2/4E4D: FF   (Nothing -- used by Triple Bar?)
C2/4E4E: 80   (H-Bomb)
C2/4E4F: 7F   (Chocobop)
C2/4E50: 81   (7-Flush)
C2/4E51: FE   (Lagomorph)
C2/4E52 data: joker doom targeting
(Data - Joker Doom targeting)
C2/4E52: 0F   (7-7-bar => your whole party)
C2/4E53: 3F   (7-7-7  => whole enemy party)
C2/4E54 unknow
C2/4E54: DA           PHX
C2/4E55: A2 7F        LDX #$7F
C2/4E57: BD 84 31     LDA $3184,X
C2/4E5A: 30 04        BMI $4E60
C2/4E5C: CA           DEX
C2/4E5D: 10 F8        BPL $4E57
C2/4E5F: E8           INX
C2/4E60: 8A           TXA
C2/4E61: 9D 84 31     STA $3184,X
C2/4E64: FA           PLX
C2/4E65: 60           RTS
C2/4E66 add fighter to wait queue
(Add character/monster to queue of who will wait to act.  One place this is called
is right after a character's command is input, and before they enter their
"ready stance".  Monsters' ready stances aren't visible [and are generally
negligible in length], but monsters still use this queue too.)
C2/4E68: AE 65 3A     LDX $3A65     (get next available Wait Queue slot)
C2/4E6B: 9D 20 37     STA $3720,X   (store current entity in that slot)
C2/4E6E: FA           PLX
C2/4E6F: EE 65 3A     INC $3A65     (point to next queue slot after this one.  this is
circular: if we've gone past slot #255, we'll restart on
#0.  that shouldn't be a problem unless 256+ fighters
get queued up at once somehow.)
C2/4E72: A9 FE        LDA #$FE
C2/4E74: 4C 43 0A     JMP $0A43
C2/4E77 add fighter to queue of next attacker
(Add character/monster to queue of who will act next.  One place this is called is
when someone's "wait timer" after inputting a command elapses and they can leave
their ready stance to attack.)
C2/4E79: AE 67 3A     LDX $3A67     (get next available Action Queue slot)
C2/4E7C: 9D 20 38     STA $3820,X   (store current entity in that slot)
C2/4E7F: FA           PLX
C2/4E80: EE 67 3A     INC $3A67     (point to next queue slot after this one.  this is
C2/4E86: AE 69 3A     LDX $3A69
C2/4E8C: FA           PLX
C2/4E8D: EE 69 3A     INC $3A69
C2/4E91: 5A           PHY
C2/4E92: 08           PHP
C2/4E93: E2 20        SEP #$20
C2/4E95: 8D 7A 3A     STA $3A7A   (Set command)
C2/4E98: 8E 7B 3A     STX $3A7B   (Set attack)
C2/4E9B: 20 54 4E     JSR $4E54
C2/4E9E: 48           PHA
C2/4E9F: AD 0A 34     LDA $340A
C2/4EA2: C9 FF        CMP #$FF
C2/4EA4: D0 39        BNE $4EDF
C2/4EA6: A3 01        LDA $01,S
C2/4EA8: 8D 0A 34     STA $340A
C2/4EAB: 80 32        BRA $4EDF
C2/4EAD unknow
C2/4EAD: A5 B1        LDA $B1
C2/4EAF: 4A           LSR
C2/4EB0: 90 19        BCC $4ECB
C2/4EB2: 5A           PHY
C2/4EB3: 08           PHP
C2/4EB4: E2 20        SEP #$20
C2/4EB6: 20 54 4E     JSR $4E54
C2/4EB9: 48           PHA
C2/4EBA: BD CD 32     LDA $32CD,X
C2/4EBD: C9 FF        CMP #$FF
C2/4EBF: D0 1E        BNE $4EDF
C2/4EC1: 20 84 4E     JSR $4E84
C2/4EC4: A3 01        LDA $01,S
C2/4EC6: 9D CD 32     STA $32CD,X
C2/4EC9: 80 14        BRA $4EDF
C2/4ECB unknow
C2/4ECB: 5A           PHY
C2/4ECC: 08           PHP
C2/4ECD: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/4ECF: 20 54 4E     JSR $4E54
C2/4ED2: 48           PHA
C2/4ED3: BD CC 32     LDA $32CC,X
C2/4ED6: C9 FF        CMP #$FF
C2/4ED8: D0 05        BNE $4EDF
C2/4EDA: A3 01        LDA $01,S
C2/4EDC: 9D CC 32     STA $32CC,X
C2/4EDF: A8           TAY
C2/4EE0: D9 84 31     CMP $3184,Y
C2/4EE3: F0 07        BEQ $4EEC
C2/4EE5: B9 84 31     LDA $3184,Y
C2/4EE8: 30 02        BMI $4EEC
C2/4EEA: 80 F3        BRA $4EDF
C2/4EEC: 68           PLA
C2/4EED: 99 84 31     STA $3184,Y
C2/4EF0: 0A           ASL
C2/4EF1: A8           TAY
C2/4EF2: 20 08 4F     JSR $4F08    (Determine MP cost of a spell/attack)
C2/4EF5: 99 20 36     STA $3620,Y  (save MP cost)
C2/4EF8: C2 20        REP #$20     (Set 16-bit Accumulator)
C2/4EFA: AD 7A 3A     LDA $3A7A
C2/4EFD: 99 20 34     STA $3420,Y  (save command #)
C2/4F00: A5 B8        LDA $B8
C2/4F02: 99 20 35     STA $3520,Y
C2/4F05: 28           PLP
C2/4F06: 7A           PLY
C2/4F07: 60           RTS
C2/4F08 determinate mp cost of spell
(Determine MP cost of a spell/attack)
C2/4F08: DA           PHX
C2/4F09: 08           PHP
C2/4F0A: 7B           TDC        (16-bit A = 0.  this means the returned spell cost will
default to zero.)
C2/4F0B: A9 40        LDA #$40
C2/4F0D: 14 B1        TRB $B1
C2/4F0F: D0 42        BNE $4F53
C2/4F11: AD 7A 3A     LDA $3A7A  (get command #)
C2/4F14: C9 19        CMP #$19
C2/4F16: F0 0C        BEQ $4F24  (branch if it's Summon)
C2/4F18: C9 0C        CMP #$0C
C2/4F1A: F0 08        BEQ $4F24  (branch if it's Lore)
C2/4F1C: C9 02        CMP #$02
C2/4F1E: F0 04        BEQ $4F24  (branch if it's Magic)
C2/4F22: D0 2F        BNE $4F53  (branch if it's not X-Magic)
C2/4F24: C2 10        REP #$10   (Set 16-bit X and Y)
C2/4F26: AD 7B 3A     LDA $3A7B  (get attack #)
C2/4F29: E0 08 00     CPX #$0008
C2/4F2C: B0 19        BCS $4F47  (branch if it's a monster attacker.  they don't have
menus containing MP data, nor relics that can
alter MP costs.)
C2/4F2E: DA           PHX
C2/4F2F: AA           TAX
C2/4F30: BD 84 30     LDA $3084,X  (get this spell's index relative to start of Magic menu?
i believe the Lore menu follows the Magic menu in memory.)
C2/4F33: FA           PLX
C2/4F34: C9 FF        CMP #$FF
C2/4F36: F0 1B        BEQ $4F53   (if it's somehow not in the menu, branch?)
C2/4F38: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/4F3A: 0A           ASL
C2/4F3B: 0A           ASL         (multiply offset by 4, as each spell menu entry has 4 bytes:
Spell index number, Unknown [related to spell availability],
Spell aiming, MP cost)
C2/4F3C: 7D 2C 30     ADC $302C,X (add starting address of character's Magic menu?)
C2/4F40: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/4F42: BD 03 00     LDA $0003,X (get MP cost from character's menu data.  it usually
matches the spell data, but Gold Hairpin, Economizer,
and Step Mine's special formula can make it vary.)
C2/4F45: 80 0D        BRA $4F54   (clean up stack and exit)
C2/4F47: EB           XBA
C2/4F48: A9 0E        LDA #$0E
C2/4F4A: 20 81 47     JSR $4781   (attack # * 14)
C2/4F4D: AA           TAX
C2/4F4E: BF C5 6A C4  LDA $C46AC5,X  (read MP cost from spell data)
C2/4F57 monster command script: F7
C2/4F5A: A9 0F        LDA #$0F
C2/4F5C: 4C BF 62     JMP $62BF
C2/4F5F command 26
Command #$26 - Doom cast when Condemned countdown reaches 0; Safe, Shell, or Reflect*
cast when character enters Near Fatal (* no items actually do this,
but it's supported); or revival due to Life 3.
C2/4F5F: A5 B8        LDA $B8      (get spell ID?)
C2/4F61: A6 B6        LDX $B6      (get target?)
C2/4F63: 85 B6        STA $B6      (save spell ID)
C2/4F65: C9 0D        CMP #$0D
C2/4F67: D0 0F        BNE $4F78    (branch if we're not casting Doom)
C2/4F69: BD 04 32     LDA $3204,X
C2/4F6C: 09 10        ORA #$10
C2/4F6E: 9D 04 32     STA $3204,X  (set flag to zero and disable the Condemned counter
after turn.  this is done in case instant death is
thwarted, and thus Condemned status isn't removed
and C2/4644 never executes.)
C2/4F71: AD 77 3A     LDA $3A77
C2/4F74: F0 69        BEQ $4FDF   (Exit function if no monsters are alive)
C2/4F76: A9 0D        LDA #$0D    (Set spell to Doom again.  it's easier than PHA/PLA)
C2/4F79: A9 02        LDA #$02
C2/4F7B: 85 B5        STA $B5     (Set command to Magic)
C2/4F7D: 20 D3 26     JSR $26D3   (Load command and spell data)
C2/4F80: 20 51 29     JSR $2951
C2/4F85: 14 B0        TRB $B0
C2/4F89: 8D A3 11     STA $11A3   (Set attack to only not reflectable)
C2/4F8C: A9 20        LDA #$20
C2/4F8E: 0C A4 11     TSB $11A4   (Set can't be dodged)
C2/4F91: 9C A5 11     STZ $11A5   (Set to 0 MP cost)
C2/4F94: 4C 67 31     JMP $3167
C2/4F97 monster command script F5
C2/4F97: 9C 2A 3A     STZ $3A2A   (Set to zero damage)
C2/4F9A: 9C 2B 3A     STZ $3A2B
C2/4F9D: AD 73 3A     LDA $3A73
C2/4FA0: 49 FF        EOR #$FF
C2/4FA2: 14 B9        TRB $B9     (Clear monsters that aren't in template)
C2/4FA4: A5 B8        LDA $B8
C2/4FA6: 0A           ASL
C2/4FA7: AA           TAX
C2/4FA8: A0 12        LDY #$12
C2/4FAA: B9 19 30     LDA $3019,Y
C2/4FAD: 24 B9        BIT $B9
C2/4FAF: F0 03        BEQ $4FB4     (branch if enemy isn't affected by the F5 command)
C2/4FB1: FC E4 51     JSR ($51E4,X)
C2/4FB4: 88           DEY
C2/4FB6: C0 08        CPY #$08
C2/4FB8: B0 F0        BCS $4FAA     (loop for all 6 monsters)
C2/4FBA: A5 B6        LDA $B6
C2/4FBC: EB           XBA
C2/4FBD: A9 13        LDA #$13
C2/4FBF: 4C BF 62     JMP $62BF
C2/4FC2 unknow
C2/4FC2: 48           PHA
C2/4FC3: A9 FF        LDA #$FF
C2/4FC5: 8D 95 3A     STA $3A95
C2/4FC8: 68           PLA
C2/4FC9: 80 03        BRA $4FCE
C2/4FCB: 0C 4D 2F     TSB $2F4D
C2/4FCE: 1C 09 34     TRB $3409
C2/4FD1: 1C 2F 2F     TRB $2F2F
C2/4FD4: 0C 2A 3A     TSB $3A2A
C2/4FD7: B9 F9 3E     LDA $3EF9,Y
C2/4FDA: 09 20        ORA #$20
C2/4FDC: 99 F9 3E     STA $3EF9,Y  (Set Hide status)
C2/4FDF: 60           RTS
C2/4FE0 unknow
C2/4FE0: 48           PHA
C2/4FE1: C2 20        REP #$20
C2/4FE3: B9 1C 3C     LDA $3C1C,Y (Max HP)
C2/4FE6: 99 F4 3B     STA $3BF4,Y (Current HP)
C2/4FE9: E2 20        SEP #$20
C2/4FEB: 68           PLA
C2/4FEC: 1C 3A 3A     TRB $3A3A
C2/4FEF: 0C 2F 2F     TSB $2F2F
C2/4FF2: 0C 2B 3A     TSB $3A2B
C2/4FF5: 0C 4F 2F     TSB $2F4F
C2/4FF8: 0C 09 34     TSB $3409
C2/4FFB: 9C 95 3A     STZ $3A95
C2/4FFE: 60           RTS
C2/4FFF unknow
C2/4FFF: 20 CE 4F     JSR $4FCE
C2/5002: B9 E4 3E     LDA $3EE4,Y
C2/5005: 09 80        ORA #$80
C2/5007: 99 E4 3E     STA $3EE4,Y  (Set Death status)
Retrieved from "http://datacrystal.romhacking.net/wikid/index.php?title=Final_Fantasy_VI:ROM_map/Assembly_C24&oldid=28934"


text:
Q: Multilanguage and form validation I'm creating web site in asp.net web forms. I added validation to fields in form (asp:RequiredFieldValidator) and I'm using multilanguage on page, as following:
I have link buttons like this:
<asp:LinkButton ID="lnkSetEnglish" runat="server" CommandArgument="en-GB" OnClick="RequestLanguageChange_Click">
  <img src="Images/logos/en.png" alt="English" />
</asp:LinkButton>

And function
    protected void RequestLanguageChange_Click(object sender, EventArgs e)
    {
        ImageButton senderLink = sender as ImageButton;

        HttpCookie cookie = new HttpCookie("CultureInfo");
        cookie.Value = senderLink.CommandArgument;
        Response.Cookies.Add(cookie);

        //Set the culture and reload the page for immediate effect.
        //Future effects are handled by Global.asax
        Thread.CurrentThread.CurrentCulture = new CultureInfo(senderLink.CommandArgument);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(senderLink.CommandArgument);
        Server.Transfer(Request.Path);
    }

I have problem now with validate. When I am on contact form with validating field and this field is empty, when I try change language by click in image inside link, instead of change language of the site, I have commant from validating. What can I do here?
Best regards,
Dagna

A: Set CausesValidation to false on the LinkButton

redpajama_set_name: RedPajamaStackExchange


text:
Arsenal striker Danny Welbeck ruled out of FA Cup Final
PA Sport May 27, 2015 Arsenal, Danny Welbeck, FA Cup, Leagues: EPL 1 Comment
Arsenal striker Danny Welbeck has been ruled out of Saturday's FA Cup final and England's forthcoming internationals with a knee injury.
Gunners boss Arsene Wenger said the former Manchester United forward has no chance of being fit for the Wembley showpiece with Aston Villa and has been withdrawn from the England squad to face the Republic of Ireland on June 7 and Slovenia on June 14.
Wenger said: "Danny Welbeck will not be fit, not for us, nor for England.
"We called them yesterday, the FA, to explain that his bone bruising of the knee has not healed.
"I don't know what he will say, Roy (Hodgson), the England boss."
Wenger insisted Welbeck, who has not played since the goalless draw with Chelsea on April 26, has not suffered a setback.
"It took longer than expected," the Frenchman said.
"He would have been short anyway. I was prepared for that.
"He didn't practice until (last) Friday, so I knew he would be short for the FA Cup."
Wenger is close to deciding his final starting line-up as Arsenal bid to retain the trophy which ended a nine-year silverware drought 12 months ago.
"I don't know who will start yet and it's not important because it's just on the day in the FA Cup final," he said.
"What is important is that you bring the trophy back. It's always a concern for the whole squad."
Wenger has a number of selection decisions to make, such as whether to persist with Wojciech Szczesny in the FA Cup, despite the Poland goalkeeper being displaced as first choice by David Ospina.
The Gunners boss must also decide if Theo Walcott will start up front after his hat-trick in last season's Premier League-concluding 4-1 defeat of West Brom.
"I will not tell you anything today," Wenger said.
"Nobody knows at the moment. I just think it is important to focus as a whole squad on winning the trophy.
"Most of the time the heroes are the people who come on in an FA Cup final – they make the difference.
"That's why it is important as a reward for the whole team who have fought very hard the whole season to get there.
"Let's deal with it as a whole squad."
Wenger could become the first post-war manager to win six FA Cups, a tally previously achieved by only George Ramsay, who won his last with Villa in 1920.
"It's not easy. I would love to do it but I'm not honestly focused on that," Wenger said.
"I like to beat records but that's not the most important thing on Saturday.
"I'm more focused on the fact that we have fought so hard to get there.
"We went to Man United to qualify and we had to win big games to get there. Now we want to finish the job.
"The most important thing is that we come back home all together and happy."
StellaWasAlwaysDown May 28, 2015
As a Villa supporter, I can only say "good." lol UTV
Jon on EPL Commentators on NBC: Jan. 21 to Jan. 23

redpajama_set_name: RedPajamaCommonCrawl


The procedures described in this document are not applicable to organizations running on a TORO Cloud subscription. License installation is automatic for TORO Cloud subscribers. To learn how to subscribe to TORO Cloud, visit this section instead.
The Server Admin user interface is only available on the Server Edition of TORO Integrate (non-headless). If you're using a different edition or the headless version of the Server Edition, prefer the other methods of license installation described in this document.
Visit the Server Admin UI.
Under the Configuration menu, select License. This will bring you to the License page.
> install-license --license "<your license key here>"
If you are not in a rush to update your license manually, TORO Integrate will automatically update its license for you. This can take up to six hours to occur. You can also restart TORO Integrate since TORO Integrate checks for new licenses while it's starting up.
Launch the TORO Integrate Launcher.
In the Quick Access toolbar, click on the launcher's icon and select Install License from the appearing context menu.
Delete your current license by clicking the Delete License button. Confirm your action.
After Step #4, a dialog will show up asking, "Do you already have a license?" Click Yes or No depending on whether you have a license ready or not.
Fill up the succeeding forms to install your license.


Malting barley is a critical step in the brewing of a nice beer. Brewers rely on maltsters to craft this ingredient. It involves soaking the grain in water and allowing the germination process to begin. When the germinating grain has reached a predetermined stage, it is kilned dry to halt the process and develop flavour. The grain will continue to germinate if the kiln temperature is too low. If the temperature is too hot the enzymes which for fermentable sugars from the starch in the grain will be destroyed making it impossible to make beer from the malt. This is a problem I found when using a cheap food dehydrator to kiln the malt so I've built a malting kiln which uses a heating element from a hot-air gun and an Arduino to control to air temperature while drying the grain. This provides tight control of the kilning process, aiding in the production of a quality ingredient.
So what made me want to figure out how to malt barley? Simple curiosity mostly but I have been brewing beer from grain for about 5 years now and was interested in what was for me the last piece of the puzzle of grain to beer. It started reading a book by Andrew Jefford, Peat Smoke and Spirit: a Portrait of Islay and its Whiskies. I was fascinated by the detail of whiskey making that this author had uncovered and thought I'd give it a go. Since historically, most distilleries had their own malting floors where they produced their own malt, I decided to start there. It took a quite a few attempts to figure out how to steep and germinate the barley so that I could get reasonable Hot Water Extract values (Read more about malt analysis here). I started kilning using a food dehydrator which had no temperature control. I found that the on air temperature was about 90 °C which was likely to destroy the enzymes. I had read that the early drying stage needs to be kept below 50 °C. So what a great excuse to build one using an Arduino to control the process!
If your interested in the software tool used in this project download our Arduino graphing program.
Raw barley grains are soaked in water to hydrate them followed by a period of germination. Once the little shoot that will grow above the ground has developed to about half to three quarters of the length of the grain, kilning can start. This involves blowing air, at no more than 50 °C, through a bed of grain until the air temperature leaving the grain raises to a similar temperature. The on temperature can then be raised until the final kiln temperature is reached. For whisky the end temperature might be 55 °C, for lager malt perhaps 70 °C and for pale ale malt about 105 °C.
For a steep tank, I modified a 7 L storage container with two fittings for aquarium air hoses in the bottom and one in the lid. This enabled me to bubble air through the steeping grain to keep it aerobic (anaerobic steep liquors can kill the germinating grains) as well as pumping humidified air through the bed during air rests and germination. This is based on a commercial technique known as pneumatic malting. This arrangement gives usable malt but it still germinates unevenly. I suspect I do not need to bubble air through the steeping grain continuously which starts germination before all the grains are hydrated, which I think produces uneven malting. Humidified air for steeping, air rests and germination was provided from a small aquarium air pump bubbling through a jar of water that was also kept in the fridge.
Malting time schedule that I used was: 7 hrs steep, 17 hr air rest, 7 hrs steep, 17 hr air rest, and 4 days germination.
This steep/germination procedure is sadly not yet automated but is something I'd like to have a go at. It was all placed in a fridge running at 12 °C. Warmer temperatures can cause the grain the germinate unevenly.
I built a simple flat bed kiln. The structure of the kiln is a wooden box 25 cm wide, 30 cm long and 24 cm high. Inside the box is a perforated stainless steel floor mounted at about one third of the height of the box from the bottom. The perforations are 2 mm in diameter which support the green malt and allow air to flow through it. Under this is a 300 W hot air gun element mounted in a tube about 20 mm larger in diameter. A small blower directs air from the room through a stainless steel tube surrounding the hot-air gun element. The heated air drys the grain as it passes through. To avoid damaging the grain with air that is too hot, or prolonging the drying process with cool air, an Arduino Uno monitors the air temperature going through the grain using a thermistor mounted just under the bed of malt. The Uno adjusts the air temperature using Proportional-Integral control by switching the element on and off, through a relay to maintain the air temperature entering the grain bed of 50 °C. An LCD screen displays the current temperature, set-point and element duty cycle. Buttons beneath the LCD are used to adjust the set-point and the grain temperature data from a second thermistor buried in the bed of grain is sent out the serial port. The drying process can be monitored by graphing the grain temperature with MegunoLink. It takes around 10 hrs to dry 3 kg of dry-weight barley.
I used the Arduino PID library created by Brett Beauregard to control the hot-air gun element, adjusting the control system parameters by using his autotune code which I modified for relay control. Temperature was measured with a 100 kΩ thermistor; Alan Wendt provides a simple guide to calculating temperature from the themistor resistance in the Arduino forums.
And as a disclaimer, all mains wiring is dangerous. Make sure someone competent oversees your work if you are unfamiliar with mains wiring. This is also a serious fire hazard, air blowing into a heated chamber above which is several kilos of fuel. I don't recommend running this unattended.
Once the germinated malt grains have been loaded into the kiln. The kiln is started. The screenshot shows MegunoLink plotting the control values and actual temperature readings being sent from the Arduino via the serial port. This gives great visual feedback that the control system is behaving well and only took a few lines of code to add. The onTemp is the controlled temperature being blown into the bottom of the bed of grains. The offTemp is the temperature of the air leaving the bed of grain. The setpoint is the target value for the onTemp and control[%] is the fraction of a 5 second window that the heater relay will be turned on.
If you are interested in plotting data Grab MegunoLink Pro here.
The Malt Kiln uses proportional-integral control to maintain the air temperature being blown through the grain. The coefficients for proportional and integral control needed depend on many factors such as the geometry of the kiln and the air flow rate through the system. I used Brett Beauregard's Autotune library to select these parameters automatically. It probes the kilns behaviour to step changes in the duty cycle of the hot-air gun element. The autotune is run once when the kiln is commissioned and the parameters it chooses are entered into the program that drives the kiln.
//Set the output to the desired starting frequency.
MegunoLink was used to plot temperature data for this project. Grab MegunoLink Pro here.