Minor glitches:
1. If you had 1 HP left, and triggered a cutscene at the same time as getting hit, you can walk around with 0 HP. You'll die the next hit however. Pressing start doesn't seem to work.
2. Pressing select slightly before the "item obtained" screen skips the screen, and you still get the item. Pressing start doesn't seem to work. Can be used to skip other similar popups such as Narnia essence.
3. Pressing select before a cutscene seems to freeze the game. Pressing start doesn't seem to work.
4. Some dialogue can be skipped by pressing select before it occurs, such as the one after defeating all NPCs in Ch. 4
5. Can't skip the beaver introduction in Ch. 3; the exit outside the cabin won't work even if you use cheats to reach it. You CAN however skip the dialogue pushing the rock there if you somehow mananged to clip through it.
6. Ch. 3 squirrel cutscene is sorta skippable (using cheats tho). You can then grab the acorn and return. You can also skip the log after helping.
7. Ch. 7 wolf stalling with the beaver can be skipped if you used cheats to get down the ramp. The ice ramp exit at the beginning won't work however so you still have to go a circle. Sadly this does not trigger the chapter end, so you still have to wait.
Also I made this to speed up testing:
Download Narnia.luaLanguage: lua
memory.usememorydomain("Combined WRAM")
local Lucy = {ptr = 0x0458B0, x = 0, y = 0, xAddress}
local Edmund = {ptr = 0x042B94, x = 0, y = 0, xAddress}
local Peter = {ptr = 0x042BA0, x = 0, y = 0, xAddress}
function update(name)
local pointer = 0
if (name == "Lucy") then
pointer = memory.read_s32_le(Lucy.ptr) - 0x02000000
if pointer > 0x0000000 and pointer <0x2000000> 0x0000000 and pointer <0x2000000> 0x0000000 and pointer <0x2000000> 0) do
emu.frameadvance()
delay = delay -1
end
start = true
return start
end
return start
end
local cur_char
local index = 1
while true do
local x
local y
local speed = 10
local char_array = {[0] = Lucy, [1] = Edmund, [2] = Peter}
update("Lucy")
update("Edmund")
update("Peter")
if inputdelay("C",10) then
index = (index+1)%3
end
cur_char = char_array[index]
if (joypad.getimmediate().L == true) then
if (joypad.getimmediate().Left == true) then
x = cur_char.x-65536*speed
elseif (joypad.getimmediate().Right == true) then
x = cur_char.x+65536*speed
else
x = cur_char.x
end
if (joypad.getimmediate().Down == true) then
y = cur_char.y+65536*speed
elseif (joypad.getimmediate().Up == true) then
y = cur_char.y-65536*speed
else
y = cur_char.y
end
memory.write_u32_le(cur_char.xAddress,x)
memory.write_u32_le(cur_char.xAddress+0x4,y)
end
--gui.text(0,60,"Lucy X:"..Lucy.x.." Y:"..Lucy.y.." Add "..bizstring.hex(Lucy.xAddress))
--gui.text(0,75,"Ed X:"..Edmund.x.." Y:"..Edmund.y.." Add "..bizstring.hex(Edmund.xAddress))
--gui.text(0,90,"Peter X:"..Peter.x.." Y:"..Peter.y.." Add "..bizstring.hex(Peter.xAddress))
gui.text(0,105,"Cur:"..index)
--gui.text(0,75,"Ed's X:"..bizstring.hex(edmund_pointer+0x28))
emu.frameadvance()
end
Holding L and move to zoom all over the place. Change "Speed = 3" to something else to make it run faster.
Edit: Added Peter. Right now, the default index value of 1 seems to always work with the current character. Occasionally, changing index allows other characters to be controlled, but often that's not useful.