Posts for Dacicus


Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
I looked into this game a bit early in the contest and found these addresses that don't appear to be listed above or that complement the above info:
0x95 Y-position of player character
0x94 Y-subpixel

0x9C Y-speed of player character
0x9D Y-subpixel speed

0x9E Max X-speed
0x9F Max X-subpixel speed
0xA0 Max Y-speed
0xA1 Max Y-subpixel speed

0xA8 flags
  0x00 = jumping or falling
  0x01 = standing on ground
  0x02 = jumping/falling/standing/whatever against a barrier
  0x20 = standing on platform / enemy / projectile
  0x80 = taking damage

0xAB flags related to jumping
  0x00 = not jumping
  0x01 = jumping
  0x02 = falling after jumping

0xAC Counter related to jumping
I also modified my Wizards & Warriors III Lua script to exhaustively generate vertical jump information, but analysis of the first 0x3000000 trials showed that all of the data was present after the first 0x2000. Only ran it in the first level, though. I can upload that info, if desired, but it may not be useful due to the bomb boosts/jumps.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
feos wrote:
Since this game has no credits, only the cutscene with the queen, and then the usual congrats screen with a password which goes after every level, I think it can be encoded without the last Start press, so there is some feel of completion and the music track can play fully.
Removing that Start press saves 18 frames, so should the movie file be replaced to update the time? I already made a replacement here that I used for AVI dumping.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Based on the savestate info on the wiki (Wiki: EmulatorResources/VBA/LuaScriptingFunctions), did you try to actually save the state using the savestate.save() function?
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Looks good. Yes vote.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
That was entertaining, but I admit that I don't know the game. Yes vote.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
How does the checksum stuff work?
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Trying to import the VBM of [3216] GBA Castlevania: Aria of Sorrow "all souls" by Fz-Last, klmz, Pike in 17:06.41 into BizHawk 2.3.0 under Win7 Home Premium SP1 causes an unhandled exception. It says, "Object reference not set to an instance of an object." Here are the full details:

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
   at BizHawk.Client.Common.MovieImport.LegacyImportFile(String ext, String path, String& errorMsg, String& warningMsg)
   at BizHawk.Client.Common.MovieImport.ImportFile(String path, String& errorMsg, String& warningMsg)
   at BizHawk.Client.Common.MovieImport.ProcessMovieImport(String fn, Action`1 conversionErrorCallback, Action`1 messageCallback)
   at BizHawk.Client.EmuHawk.MainForm.ImportMovieMenuItem_Click(Object sender, EventArgs e)
   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ToolStrip.WndProc(Message& m)
   at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
I developed the formula using the info you posted here. Then I verified that the 1-hour number from here and the 2:15 number from here make sense in the formula.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
The tinyupload links.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
I think that the 0x180 addresses may actually be the time ones, with F being the lowest byte, D being the next lowest, etc. If you compare the 1-, 2-, 3-, and 4-minute values with the 0-minute value, you get differences of 1984, 3587, 5420, and 7312 (decimal). These are close to multiples of 1800. The formula for the trend line that OpenOffice.org gives me is 1781.7x + 121.5; x is minutes. If you use that to calculate the minutes in the save files you posted earlier, you get close to 1 hour and to 2 hours 15 minutes (I'm assuming that's what 2:15 means in that screen shot). Please double-check my calculations, though. EDIT: Here's a prediction to check if I'm correct: 1337 minutes = 22 hours 17 minutes = 0x24B8C8 (1337 * 1800). Try setting 0x18B to 0x24, 0x18D to 0xB8, and 0x18F to 0xC8. IDK the game, so I hope that time doesn't cause some type of overflow. Or try 0x167088 to get 13 hours 37 minutes.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
In FCEUX, you should be able to add input if you load a savestate after disabling read-only mode. So make a savestate wherever you want to start adding input, then disable read-only mode, then load the state.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Yes vote from me.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
What is it that you use the Iron Golem for? The submission text seems to be cut off there.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Are any other cores affected?
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
I've been working on a resync of [3216] GBA Castlevania: Aria of Sorrow "all souls" by Fz-Last, klmz, Pike in 17:06.41 in BizHawk (developer build 2018-10-11-214506, but endrift verified that the mGBA core is the same as in 2.3.0). It got as far as frame 20621 of the VBM movie before the RNG values went out of sync permanently. You can find the latest WIP here. Note that the input can be extended until around VBM frame 21350, but the Student Witch doesn't spawn the soul at VBM frame 21276, so that ends the resync attempt. I'm not sure how to proceed from here. Any thoughts? EDIT: Following are the scripts I've been using to dump the addresses to text files. VBA version:
Language: Lua

local addr_game_frame = 0x020000AC local addr_rng = 0x02000008 local addr_camera_x = 0x0200A09A local addr_camera_y = 0x0200A09E local addr_x_pos = 0x02000524 local addr_y_pos = 0x02000528 local addr_x_speed = 0x0200052C local addr_y_speed = 0x02000530 local frame_counter = 0 local frames_to_run = 0x80 local dump_file = "C:\\DledStuf\\todelete\\CVAoS_dump_VBM.txt" local dump_file_handle = io.open(dump_file, "w") if not dump_file_handle then vba.print("Error opening dump file.") else while frame_counter < frames_to_run do local curr_data = {} table.insert(curr_data, string.format("%.8X", memory.readdwordunsigned(addr_game_frame))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.readdwordunsigned(addr_rng))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.4X", memory.readwordunsigned(addr_camera_x))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.4X", memory.readwordunsigned(addr_camera_y))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.readdwordunsigned(addr_x_pos))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.readdwordunsigned(addr_y_pos))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.readdwordunsigned(addr_x_speed))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.readdwordunsigned(addr_y_speed))) table.insert(curr_data, "\n") local curr_data_combined = table.concat(curr_data) dump_file_handle:write(curr_data_combined) frame_counter = frame_counter + 1 vba.frameadvance() end end dump_file_handle:close() vba.print("Done.") vba.pause()
BizHawk version:
Language: lua

memory.usememorydomain('EWRAM') local addr_game_frame = 0x00AC local addr_rng = 0x0008 local addr_camera_x = 0xA09A local addr_camera_y = 0xA09E local addr_x_pos = 0x0524 local addr_y_pos = 0x0528 local addr_x_speed = 0x052C local addr_y_speed = 0x0530 local frame_counter = 0 local frames_to_run = 0x80 local dump_file = "C:\\DledStuf\\todelete\\CVAoS_dump_BK2.txt" local dump_file_handle = io.open(dump_file, "w") if not dump_file_handle then console.writeline("Error opening dump file.") else while frame_counter < frames_to_run do local curr_data = {} table.insert(curr_data, string.format("%.8X", memory.read_u32_le(addr_game_frame))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.read_u32_le(addr_rng))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.4X", memory.read_u16_le(addr_camera_x))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.4X", memory.read_u16_le(addr_camera_y))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.read_u32_le(addr_x_pos))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.read_u32_le(addr_y_pos))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.read_u32_le(addr_x_speed))) table.insert(curr_data, " ") table.insert(curr_data, string.format("%.8X", memory.read_u32_le(addr_y_speed))) table.insert(curr_data, "\r\n") local curr_data_combined = table.concat(curr_data) dump_file_handle:write(curr_data_combined) frame_counter = frame_counter + 1 emu.frameadvance() end end dump_file_handle:close() console.writeline("Done.") client.pause()
Then I've been comparing the files using
fc /l CVAoS_dump_VBM.txt CVAoS_dump_BK2.txt
on the Windows command prompt to find where the differences are and work from there. I've also got memory watch files with those addresses in each emulator.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Do you have some graphics layers disabled from displaying, perhaps? Check the options in the SNES menu.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Which version of BizHawk are you using? Which games does that happen with, specifically? Does it only happen with fighting games?
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
feos wrote:
Congrats! Also, steps please?
Edit the .xsession file in the home directory, removing all lines after the first one, which should start with Xvesa. Then add a line at the end:
/path/to/flashplayer /path/to/game.swf
You'll need to use Ctrl+Alt+Backspace to exit from Xvesa back to the terminal. I've tested and found out that the hard disk image from PCem also works directly with QEMU in Windows; I ran it via
qemu-system-i386.exe <path to image>
This was an installation of QEMU using qemu-w64-setup-20180815.exe from https://qemu.weilnetz.de/w64/, which is linked from the main QEMU site. EDIT: Sound works in QEMU with ALSA installed in Tiny Core, but not with OSS.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
An update from tests with TinyCore Linux in PCem (double-checked with TinyCore in VMWare): I've managed to get the Xvesa X server to load FP9 upon starting and make it play back a file, no window manager or desktop environment required. This was achieved by modifying the .xsession file in TinyCore. From what I've read online, this should be possible to do with other X servers by modifying appropriate files. One drawback to not having at least a window manager is that you can't move FP from wherever it spawns. Another issue that came up is that there's no command-line option to make FP full-screen by default, so it shows up in a window that may only take up part of the screen. This applies to both Linux and Windows versions.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
I've figured out part of the puzzle. The appropriate SRAM for [3216] GBA Castlevania: Aria of Sorrow "all souls" by Fz-Last, klmz, Pike in 17:06.41 can be generated by playing back [1247] GBA Castlevania: Aria of Sorrow "Julius mode" by Cpadolf in 04:38.90 and then deleting all save data. It seems like the flags for having completed the game are not wiped, so you can start a new game as Soma or Julius and choose Hard mode. EDIT: Same thing happens after playing back [1681] GBA Castlevania: Aria of Sorrow "warp glitch" by klmz in 06:14.48 and then deleting all save data. So it may be possible to get the SRAM in a proper state to start [3216] GBA Castlevania: Aria of Sorrow "all souls" by Fz-Last, klmz, Pike in 17:06.41 by beating the game in whatever way, then deleting all save data. Ideally, you would want to verify that this works on your hardware setup.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
If you play back [456] GBA Castlevania: Aria of Sorrow by Atma in 27:45.57 and then record a new movie using the SRAM that it generates, however, the SRAM data in the VBM does not match up to that in [1247] GBA Castlevania: Aria of Sorrow "Julius mode" by Cpadolf in 04:38.90.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
It appears that cpadolf's run itself starts from SRAM, but I don't know how that was generated. There's a save file on slot 2 with the name Charles, but it doesn't match up with any of the publications preceding it.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
dwangoAC wrote:
- Potentially work on a full resync of Castlevania on a more modern core to attempt to achieve console verification? (I didn't promise it, but we should do it)
Would this require a resync of the movie that generates the SRAM, too? Reading back through the submissions, that seems to be #2163: Cpadolf's GBA Castlevania - Aria of Sorrow "Julius version" in 04:38.90.
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Memory wrote:
From limited testing I have done, it appears that the game has more lag on FCEUX than NESHawk. There doesn't seem to be much if any lag during gameplay at least on the first level, but that may change during later levels.
So the lag difference that you found was in the title screen/menu?
Current Projects: TAS: Wizards & Warriors III.
Editor, Experienced Forum User, Published Author, Player (67)
Joined: 6/22/2005
Posts: 1041
Kurabupengin wrote:
I wonder if there's any gameplay differences compared to the other version.
The DTC6 publication movie gets through the intro stage, so all of those glitches are still intact. It desynchs at the beginning of stage 8, but I haven't investigated why.
Current Projects: TAS: Wizards & Warriors III.