Here's my thoughts:
- A
human isn't fit for a lot of things. Primarily due to the fact one needs money, and we'll likely be short on it.
- A
mutant will get things like POWER and TELEPOR right away. Limited chances for stat boosts because we'll be avoiding many battles.
- A
monster can gain in power very fast with a few select meats. Also, get one with SAW and insta-kill later bosses with ease, from what I heard.
- I feel an optimal party would consist of a Mutant and one or two monsters. Yes, we'll have 1 or 2 empty slots. It's still a good idea to try to do a test run to get a better idea. Maybe we'll fight more things than I thought we should.
-
Hard reset: Turning off the game and powering it back on. This type of reset puts the RNG back to a non-random initial state.
-
Soft reset: Pressing A, B, start, and select simultaneously. This type of reset changes the RNG to "random" values. At least, the RNG doesn't keep going back to the same values over and over.
- I would love to see any sort of test run to get a better idea on what should be done. Even one that is mostly unassisted. A human, mutant, and two monsters may be a good start to get an idea of who's good or bad.
- Save & soft reset is the way to go to avoid unnecessary encounters. As a plus, it shuffles up the RNG for us.
- Do we really need all four slots filled with party members? Having 4 characters means menu time through all of them, while having only 1 or 2 means we only need to pick through fewer actions.
- I'm pretty sure the presence of humans and monsters don't affect a mutant growth. Wouldn't hurt to double-check, however.
I did create a lua script. If you got a version of VBA that works with lua scripts, try this one out. It predicts what sort of growth to expect for a mutant. This should get a lot of the guesswork out.
local range= 16
local H,S,D,A,M,X,Y= "hp","st","df","ag","mn","AB","!!"
local _ = "__"
local Growth={[0]=H,
_,_,D,X,_,M,_,A,_,_,X,_,X,_,_,
_,_,X,M,A,_,_,M,_,_,_,_,M,X,_,M,
_,_,_,_,_,_,A,_,_,_,X,M,X,H,X,_,
_,_,_,X,_,_,H,X,A,_,_,S,A,M,S,S,
H,_,X,_,A,_,_,_,X,_,_,_,_,A,_,M,
X,_,D,H,X,S,Y,H,M,_,H,H,_,Y,H,_,
S,_,_,_,M,M,X,_,_,_,S,_,S,_,M,X,
_,S,H,A,_,H,_,S,_,S,_,X,X,_,_,_,
_,A,A,A,_,X,_,A,_,M,M,_,H,_,M,H,
A,M,_,_,D,X,X,_,H,H,M,H,_,_,H,_,
X,H,M,H,H,X,Y,H,H,X,_,_,_,_,_,A,
M,X,M,_,H,H,_,_,D,X,A,S,_,_,S,S,
_,X,_,X,_,M,H,X,_,H,H,M,H,D,X,_,
_,H,S,_,_,S,A,_,_,M,_,_,H,A,_,H,
S,M,H,M,_,_,_,M,M,A,D,X,S,M,_,_,
H,S,_,Y,M,_,M,D,X,D,X,_,_,H,X,X
}
local SelectAbility= {
[0x15]=true,[0x16]=true,[0x20]=true,[0x29]=true,[0x31]=true,
[0x39]=true,[0x41]=true,[0x43]=true,[0x47]=true,[0x78]=true,
[0x7A]=true,[0x7E]=true,[0x7F]=true,[0x84]=true,[0x8D]=true,
[0x92]=true,[0x9D]=true,[0xAA]=true,[0xAC]=true,[0xB3]=true,
[0xB7]=true,[0xC2]=true,[0xC8]=true,[0xD4]=true,[0xE6]=true,
[0xEF]=true,[0xFB]=true
}
local AbilityList={
"ESP", "BARRIER","FORSEEN","ELECTRO",
"STENCH", "FLAME", "MIRROR 10","ARMOR",
"ICE", "STEALTH","KINESIS","THUNDER",
"POWER", "HEAL", "GAS", "xFIRE",
"oFIRE", "BURNING","SL-GAZE","TELEPOR",
"P-FANGS","HYPNOS", "LEECH", "P-BLAST",
"oPAR/WP","MIRROR 3","GAZE(s)","GAZE(c)",
"QUAKE", "GAZE(d)","oDAMAGE","oCHANGE",
}
local MutantTable={}
--*****************************************************************************
local function FindAbility(rng)
--*****************************************************************************
-- The lazy way. It's slow, but easy on me, the coder.
-- I'll try something else later...
local Sel= 1
while not SelectAbility[rng] do
Sel= (Sel%32)+1
rng= (rng+1)%256
end
return AbilityList[Sel], (rng+1)%256
end
--*****************************************************************************
local function RefreshMutantGrowth()
--*****************************************************************************
local x= memory.readbyte(0xC30B)
if x == MutantTable.RNG then return end
MutantTable.RNG= x
local y= memory.readbyte(0xC34B)
for i= 1, range do
local ab
local stat= Growth[x]
MutantTable[i]= stat
x= (x+1)%256
if stat == "AB" then
ab, y= FindAbility(y)
MutantTable[i]= MutantTable[i] .. " " .. ab
elseif stat=="st" or stat=="df" or stat=="ag" or stat=="mn" then
y= (y+1)%256
end
end
end
local function Disp()
for i= 1, range do
gui.text(1, 9*i - 8 ,MutantTable[i])
end
end
gui.register(Disp)
while true do
RefreshMutantGrowth()
emu.frameadvance()
end
EDIT: Updated script to account for the value of 0x56 actually messing with use counts instead of doing nothing.
EDIT2: Another update; This time the value 0xF0 had to be changed to indicate an HP boost.