Aside from herb usage and health management, planning ahead for bosses generally doesn't provide much benefit. I just figure out how the fight goes when I get there. But it's still good to know what to expect from the bosses.
Also, it's not just the room layout, but the first boss also does one point less damage per fireball. This little fact means (J) can just run up and stab the boss without any further motion, using an herb to keep alive, trivial even in real time. (U) is much trickier, and a run must go to a side path to delay the boss in order to survive long enough.
About the versions, I've actually decided to stick with the current (U) WIP that I have. I realized with my
earlier habits that I tend to lose interest, staying with what I have now and going with it will maximize the chances I produce a complete run. The more time that passes since I start a project, the more likely I just stop without ever coming back to it.
But if I can still keep going after I get a complete TAS, I'll go back and finally add in the improvements and try to get perfection, or the closest thing I can reach to it, under both versions. Knowing I have a complete run will let me relax a little more, in any case.
For this decision, I did TAS ahead with the 24 GEMs I ended with. Turns out I didn't actually need more than that. A touch of manipulation keeps up the flow of GEMs and my arrows keep killing enemies in all the important spots. Expect further progress sometime in the future.
I have been analyzing the internal structure of the game for a bit... An Snes9x script shows me some suspicious boxes.
Download Snes9x_SB_boxes.luaLanguage: lua
local R2u,R2s= memory.readword, memory.readwordsigned
local function HitBoxes()
local Panic= 0
local Next= R2u(0x7E06A6) -- Soul Blazer (U)
-- local Next= R2u(0x7E06A3) -- Soul Blader (J)
local total= 0
local CamX, CamY= R2s(0x7E0052)+16,R2s(0x7E0054)+16
while Next ~= 0 do
Panic= Panic+1
if Panic > 255 then gui.register(function() end); print("Panic"); return end
local Addr= 0x7E0000 + Next
if R2u(Addr+0x16) < 0x8000 then
local X ,Y = R2s(Addr+0x00)-CamX, R2s(Addr+0x02)-CamY
local Hx1,Hy1= R2s(Addr+0x08), R2s(Addr+0x0A)
local Hx2,Hy2= R2s(Addr+0x0C), R2s(Addr+0x0E)
gui.box(X-Hx1,Y-Hy1,X+Hx2,Y+Hy2,0x00FF0040,0x00FF00C0)
end
Next= R2u(Addr + 0x3E)
end
end
gui.register(HitBoxes)