Hmm, well I've started to dive into this using the Status Healing Items as a base, now after a bit of diving I found that they are put into a routine which decreases their amount by D5, which is the value of Soft - Item D5.
In this they become somehow tested against the status afflicting the character, but here is where I get lost. It seems fairly simple, but it must deal something with bits and I'm not too familiar with status in bits.
Something I have completely overlooked is that the game sees Curse as an out-of-battle status ailment, due to the Cross being able to be used outside of battle. I guess that was for plans that never got off the ground or just plain oversight.
Here's the code, it seems straightforward but I don't quite grasp it. It is used by all Status Healing Items outside of battle, save Remedy. Remedy seems to be something special.
Successful Heal - Soft - Petrify
$01/A776 E9 D5 SBC #$D5 A:A7D5 X:A654 Y:A100 P:eNvMxdIzC
$01/A778 0A ASL A A:A700 X:A654 Y:A100 P:envMxdIZC
$01/A779 85 43 STA $43 [$00:0143] A:A700 X:A654 Y:A100 P:envMxdIZc
$01/A77B A6 43 LDX $43 [$00:0143] A:A700 X:A654 Y:A100 P:envMxdIZc
$01/A77D A0 03 00 LDY #$0003 A:A700 X:0000 Y:A100 P:envMxdIZc
$01/A780 C2 20 REP #$20 A:A700 X:0000 Y:0003 P:envMxdIzc
$01/A782 B1 60 LDA ($60),y[$7E:1043] A:A700 X:0000 Y:0003 P:envmxdIzc
$01/A784 85 45 STA $45 [$00:0145] A:0040 X:0000 Y:0003 P:envmxdIzc
$01/A786 3F C3 FE 1E AND $1EFEC3,x[$1E:FEC3] A:0040 X:0000 Y:0003 P:envmxdIzc
$01/A78A 91 60 STA ($60),y[$7E:1043] A:0000 X:0000 Y:0003 P:envmxdIZc
Unsuccessful Heal - Dwarf Bread - Petrify
$01/A776 E9 D5 SBC #$D5 A:A7D7 X:A654 Y:A100 P:eNvMxdIzC
$01/A778 0A ASL A A:A702 X:A654 Y:A100 P:envMxdIzC
$01/A779 85 43 STA $43 [$00:0143] A:A704 X:A654 Y:A100 P:envMxdIzc
$01/A77B A6 43 LDX $43 [$00:0143] A:A704 X:A654 Y:A100 P:envMxdIzc
$01/A77D A0 03 00 LDY #$0003 A:A704 X:0004 Y:A100 P:envMxdIzc
$01/A780 C2 20 REP #$20 A:A704 X:0004 Y:0003 P:envMxdIzc
$01/A782 B1 60 LDA ($60),y[$7E:1043] A:A704 X:0004 Y:0003 P:envmxdIzc
$01/A784 85 45 STA $45 [$00:0145] A:0040 X:0004 Y:0003 P:envmxdIzc
$01/A786 3F C3 FE 1E AND $1EFEC3,x[$1E:FEC7] A:0040 X:0004 Y:0003 P:envmxdIzc
$01/A78A 91 60 STA ($60),y[$7E:1043] A:0040 X:0004 Y:0003 P:envmxdIzc
The answer is in there somewhere, but I can't grasp it.
Now that I am much wiser about this sort of thing I can fully grasp what's going on with Outside Battle Status Healing Items...
Successful Heal - Soft - Petrify
$01/A776 E9 D5 SBC #$D5 A:A7D5 X:A654 Y:A100 P:eNvMxdIzC - -D5 from A. (Hen Item D5,start of Status Healing Items is read as 00)
$01/A778 0A ASL A A:A700 X:A654 Y:A100 P:envMxdIZC - x2 A? Must only refer to the smaller bytes.
$01/A779 85 43 STA $43 [$00:0143] A:A700 X:A654 Y:A100 P:envMxdIZc - Store A in 0143.
$01/A77B A6 43 LDX $43 [$00:0143] A:A700 X:A654 Y:A100 P:envMxdIZc - Load X from 0143. (Used for indexing later)
$01/A77D A0 03 00 LDY #$0003 A:A700 X:0000 Y:A100 P:envMxdIZc - Load 0003 into Y.
$01/A780 C2 20 REP #$20 A:A700 X:0000 Y:0003 P:envMxdIzc - Reset Processor Status
$01/A782 B1 60 LDA ($60),y[$7E:1043] A:A700 X:0000 Y:0003 P:envmxdIzc - Load A from 7E1043.(Indexed 60 must be Start of Item List +Y)
$01/A784 85 45 STA $45 [$00:0145] A:0040 X:0000 Y:0003 P:envmxdIzc - Store A in 145.
$01/A786 3F C3 FE 1E AND $1EFEC3,x[$1E:FEC3] A:0040 X:0000 Y:0003 P:envmxdIzc - Here is the Very Important Part and it is a part I cannot stress enough. It is a part of LoRom that has a bunch of values that are as follows...
$01/A78A 91 60 STA ($60),y[$7E:1043] A:0000 X:0000 Y:0003 P:envmxdIZc - Store A in Status Byte 1.
BF (-40 getting rid of Petrify) FF - ?? DF (-20 getting rid of Toad) FF - ?? EF (-10 getting rid of Small.) FF - ?? F7 (-8 getting rid of Pig) FF FB (-4 getting rid of Mute) FF FD (-2 getting rid of Darkness) FF FE (-1 Getting rid of Poison) - FF FF (getting rid of All Statuses)
This can be seen clearer in my "failed" example...
Unsuccessful Heal - Dwarf Bread - Petrify
$01/A776 E9 D5 SBC #$D5 A:A7D7 X:A654 Y:A100 P:eNvMxdIzC - Dwarf Bread is Item D7 - D5 = Item 2.
$01/A778 0A ASL A A:A702 X:A654 Y:A100 P:envMxdIzC - x2 the lower parts of A.
$01/A779 85 43 STA $43 [$00:0143] A:A704 X:A654 Y:A100 P:envMxdIzc - Store A in 0143 (04 specifically)
$01/A77B A6 43 LDX $43 [$00:0143] A:A704 X:A654 Y:A100 P:envMxdIzc - Load X from 0143.
$01/A77D A0 03 00 LDY #$0003 A:A704 X:0004 Y:A100 P:envMxdIzc - Load 0003 into Y.
$01/A780 C2 20 REP #$20 A:A704 X:0004 Y:0003 P:envMxdIzc - Reset Processo Status.
$01/A782 B1 60 LDA ($60),y[$7E:1043] A:A704 X:0004 Y:0003 P:envmxdIzc - Load A from Status Byte 1.
$01/A784 85 45 STA $45 [$00:0145] A:0040 X:0004 Y:0003 P:envmxdIzc - Store A in 145.
$01/A786 3F C3 FE 1E AND $1EFEC3,x[$1E:FEC7] A:0040 X:0004 Y:0003 P:envmxdIzc - Add the byte from that value (above) into A.
$01/A78A 91 60 STA ($60),y[$7E:1043] A:0040 X:0004 Y:0003 P:envmxdIzc - Store A in Status Byte 1.
[/code]
And there we go! I do not know if these values are used elsewhere, my bets are that they likely are not. But I can't be too sure on that. Not that changing them would really help, since you can still only carry those specific statuses out of battle anyhow.
$01/A6DE C9 DE CMP #$DE A:00CE X:0002 Y:6800 P:eNvMxdIzc - Is the Item Alert?
$01/A6E0 F0 10 BEQ $10 [$A6F2] A:00CE X:0002 Y:6800 P:eNvMxdIzc - If so branch to 01A6F2.
$01/A6E2 C9 E2 CMP #$E2 A:00CE X:0002 Y:6800 P:eNvMxdIzc - Is the Item Tent?
$01/A6E4 B0 0C BCS $0C [$A6F2] A:00CE X:0002 Y:6800 P:eNvMxdIzc - If greater than tent branch to 01A6F2.
$01/A6E6 20 59 A4 JSR $A459 [$01:A459] A:00CE X:0002 Y:6800 P:eNvMxdIzc - Jump to Subroutine (???)
(Item decrementing subroutine, quite uninteresting)
$01/A70C C9 DE CMP #$DE A:00CE X:00B4 Y:0007 P:eNvMxdIzC - Is it Alert?
$01/A70E F0 12 BEQ $12 [$A722] A:00CE X:00B4 Y:0007 P:eNvMxdIzc - If so branch to 01A722.
$01/A710 C9 E2 CMP #$E2 A:00CE X:00B4 Y:0007 P:eNvMxdIzc - Is the Item Tent?
$01/A712 B0 0E BCS $0E [$A722] A:00CE X:00B4 Y:0007 P:eNvMxdIzc - If greater than tent branch to 01A722.
Hmm, just some other miscellaneous things. I haven't really been able to use them that well yet. Couldn't find anything of much interest.