Posts for Hâthor

Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Pokota wrote:
Correct me if I'm wrong, but doesn't turboing A while sidehopping leak frames here and there?
I made some tests long time ago and I didn't see any difference. Lags due to explosion (while hovering for example) brings me many more problems. @PikachuMan: I think we could also encode a 3D version when it will be finished.
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
@Pokota: here you are @GlitchAndStuff: I love the Goron Race ! :D @dunnius: Mr. Pwnage is right. I'll just add something: I play the inverted song of time at this particular place because, for odd reason, you can play the ocarina almost immediatly after you press the button. I can't really explain why but it's probably because of the gossip stones. It saves only few frames but there are no small gain :)
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Hello everyone, Just a small update. I've finally fixed my mistake so here Cycle 1 & 2 from one single .bk2 file :) (As I mentionned in the description, I saved 50 seconds compared to the previous version). Hope you'll enjoy it. Link to video PS: I remark that the sound has a small delay, something went wrong when I encoded it probably, sorry for this...
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Nothing more to see unfortunatly, still working on fixing my mistake. I'm back to the aliens and saved about 20 seconds. Lots of work remaining until the end of cycle 2 and something really new. Be patient :)
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Hello everyone, A colleague show me this emulator yesterday: http://pcem-emulator.co.uk/ I didn't tested it deeply but it works. And the most intersting part is that this emulator is open source (GPL license). So, I thought it could help us to improve existing pc-emulation and will able us to TAS some pc-only old school games.
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Lil_Gecko wrote:
I don't know the game well enough to say if the route and movement are optimized, but it was a really great watch. Keep up the good work !
Thanks Lil_Gecko :) To answer you, we can do really better. I'm thinking of redoing some parts (or entire cycle if I'm not able to repair my big mistake... :s) Anyway, what I wanted to show you is the new tool I made. I patch BizHawk as I mentionned in this post and here's a preview of what I've been able to do: Link to video If you want to test it, you can download the patched version of BizHawk here and the plugin here. Place the dll and param.xml files into the GameTools folder. Rename the dll like this: Legend of Zelda, The - Majora's Mask (USA).dll Run BizHawk, start the ROM and then Tools => Custom Tool (below Lua Console); it should normally work. I didn't tested it yet but if you replace USA by JP and adjust RAM adresses into the param.xml file, it should work on JP :) Any ideas/suggestions are welcomed obviously.
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
N3rdsWithGame wrote:
Hathor, could you reupload the link to your ram watch/lua script, the link is broken. Also Is anyone interested in working on an all masks TAS with me? I've only been working on it for a few days now. I'm currently trying to get the text skip before the twisted room.
Done :) You can also find evertthing over here. I didn't work on scripts for a while (but it's my plan... like another cool stuff). Good luck for all masks, it's a cool project :) EDIT:
TheRealThingy wrote:
Your goal might be a little bit arbitrary.
In short, it's any% but you have to collect all 24 masks. I like this category because you can see some cool stuff that you don't see in any other category (like a superslide teleport with rock sirloin -JP only-).
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
darkszero wrote:
Just a friendly reminder that you have a mismatched closing tag for the video, breaking the link and hiding the rest of the post. :)
Wow, sorry for that. I've fixed it :)
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
As movie says more than writing text: Link to video Ok it's far from amazing (and buggy, I just coded few hours) but you got a small idea of possibilities it can bring. I add a menu, it will be grayed if no plugin detected (same way as before). I guess it's ready for a pull request. PS: Debbuging is possible. Run the compiled BizHawk, in Visual Studio under the Debug menu => Attatch to process... (or Ctrl + Alt + P) and choose EmuHawk.exe. Put a breakpoint whereever you want and finally, load your plugin. EDIT: I moved the video to a more recent and more reveling one
If you want to test it, you can download the patched version of BizHawk here and the plugin here. Place the dll and param.xml files into the GameTools folder. Rename the dll like this: Legend of Zelda, The - Majora's Mask (USA).dll Run BizHawk, start the ROM and then Tools => Custom Tool (below Lua Console); it should normally work.
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
grassini wrote:
it sounds a really bad idea the idea of separating and then getting everything together
It WAS a bad idea :/ I'll never do this anymore, trust me.
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Hello over here! So, I've finished the 2nd Cycle but... When I started this project, I had the idea of separate each cycle. The idea was not so bad if you "cut" at a place where you can easly resync both file (soft reset for exemple). That's what I tried to do before posting a new WIP. I started about one year ago with the version 1.9.3 of Bizhawk. Many improvements has been done and I decided to move to a more recent version (and follow patches). It works ! But what I only notice few days ago is that between two versions, the emulation change a little bit and so, I get offset of one frame. The results is that from time to time the input occured during a lag frame and not during a visual one. And that makes resync of Cycle 1 and 2 a big challenge... I've been able to do it until entering Southern Swamp. But I'm stick here, whatever I do, I didn't get the same result as in the separate file... I'm so sad but I keep hoping that I fix it without redoing everything ! I think that don't have any other choice than redoing until Mystery Woods, sacrifice a goat to Satan, and sync based on the end of loading zone. While awaiting that, here's the 2nd cycle only: Link to video There are lots of improvement that can be done (Deku Game day 1 for exemple, few frames on Sakon's Hideout, ...) but I hope you'll enjoy it anyway :) PS: If you have any idea to fix my sync problem, it'll be welcome! :)
Post subject: Patch: Allow BizHawk to run "External Tool"
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
So, as suggested by zeromus here's a dedicated topic about the feature I developped. I create a new interface named ICustomGameTool who inherits from IToolForm. It doesn't do anything else (at least, for the moment), it's just a way to distinguish an "external tool" from something coded inside the BizHawk project. I added a pathentry in BizHawk.Client.Common/config/PathEntry.cs as following:
Language: C

/*...*/ new PathEntry { System = "Global_NULL", SystemDisplayName="Global", Type = "Multi-Disk Bundles", Path = Path.Combine(".", "Tools"), Ordinal = 12 }, new PathEntry { System = "Global_NULL", SystemDisplayName="Global", Type = "GameTools", Path = Path.Combine(".", "GameTools"), Ordinal = 13 }, /*...*/
Then in ToolManager.cs: In order to handle an incorrectly load tool, I added a null return at bout line 70.
Language: C

/*...*/ var newTool = CreateInstance(toolType); if (newTool == null) { return null; } /*...*/
Now the biggest part is in the function CreateInstance that I reviewed like this:
Language: C

private IToolForm CreateInstance(Type toolType) { IToolForm tool; //Specific case for custom tools if (toolType == typeof(ICustomGameTool)) { string path = Path.Combine(Global.Config.PathEntries["Global", "GameTools"].Path, string.Format("{0}.dll", Global.Game.Name)); if (File.Exists(path) && MessageBox.Show("A custom plugin has been found for the ROM you're loading. Do you want to load it?\r\nAccept ONLY if you trust the source and if you know what you're doing. In any other case, choose no." , "Answer to life, universe and everything else?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { try { // As the object is "remote"(external to the project), the CreateInstanceFrom returns a handle.We need to Unwrap in order to make the casting tool = System.Activator.CreateInstanceFrom(path, "BizHawk.Client.EmuHawk.CustomMainForm").Unwrap() as IToolForm; if (tool == null) { MessageBox.Show("It seems that the object CustomMainForm does not implement IToolForm. Please review the code.", "Boom!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return null; } } catch (MissingMethodException) { MessageBox.Show("It seems that the object CustomMainForm does not have a public default constructor. Please review the code.", "Boom!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return null; } catch (TypeLoadException) { MessageBox.Show("It seems that the object CustomMainForm does not exists. Please review the code.", "Boom!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return null; } } else { return null; } } else { tool = (IToolForm)Activator.CreateInstance(toolType); } // Add to our list of tools _tools.Add(tool); return tool; }
Finally, I added this line ine the LoadRom function (in MainForm.cs):
Language: C

GlobalWin.Tools.Load<ICustomGameTool>();
The code of the external tool should reference the Exe and looks like this:
Language: C

/*...*/ namespace BizHawk.Client.EmuHawk { public partial class CustomMainForm : Form, ICustomGameTool { public CustomMainForm() { InitializeComponent(); } /*...*/
When compiled, renamed like the targeted ROM (c.f. in gamedb) and placed into the GameTools folders, the form will be automatically shown (exactly the same way as the RAM Watch for example) when the ROM will be loaded. Same questions: What do you think about this? Could it be interesting? EDIT: GitHub link. I applied my changes from the current Release branch of the official project.
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Hello everyone. I don't know if it's the right place to talk about this but... I've stared to make small patch that allows BizHawk to load kind of "External tool". In summary, I just created a brand new project on vs2015, add BizHawk.exe in project references, add a simple windows form make it implements a specfic interface and build the project. Then, I put the dll in a specific folder, run a compiled Bizhawk, open a ROM and it loads my custom winform. I thought about doing this while I wanted to create a window with lua scripting. We can do it but it's quite complicated (and there are some limitations). So if we could run compiled code, we should probably make more crazy stuff. What do you think about this? Could it be interesting? If so, how can I submit the patch to the project? PS: The patch has been really easy to make, it is a proof that the code is well thought (at the least for parts I see :p). Great job guys !
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
arandomgameTASer wrote:
How's this been going, Hathor? Not to nag of course, I'm just wondering. :)
Hello! \o/ I'm still alive (like GlaDOS sings so good) and I'm still working. (Well not right now because I'm on holidays...) I'd like to finish the 2nd cycle and synchronize it with 1st one before "rendering" a new WIP video. So many things happens while I was TASing the next part. The route for getting rupees, some desync, I realize that I could save a pause, so I've redone few days of work, an unexpected softlock,... But I guess (I hope) it should be fine, now :) I just enter Sakon's Hideout, so I have to save the Sun mask, Keeta's skip and so on.. It's almost the end so the WIP is coming petty soon ;) (Oh, I have to watch the brand new WR in 5h12! :D)
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
To be honest, I ask this question to myself for a long time: "Do I climb without using the Lens of truth?". I made a test run using it and then, I just hexedit it and remove the action of pressing the lens of truth button. Finally I watched both and compared them. My personal feeling tells me that both were cool but boring to watch; so I had the idea to do this, just show some interestings points. I was more satisfied. In fact, I directly edit the ram value that turns the lens on and freeze it. I made the TAS and finally, I did some hexedting to adjust the moments when we see the ladder (some parts have been completely removed); and all of this are invisible in the final result. That's kind of magic :D
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
That mind reading, Fox3! I wanted to beat the aliens before making a new WIP video and I just finish it. So, here is the next part. We start back from bow until the alien fight in Romani Ranch. I get Goron Mask, some H.P., Don Gero Mask, etc... Hope you enjoy:) Link to video We can also see some texture glitch; due to emulator... :s
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Thanks :)
Arthur42Wonko wrote:
Why didn't you go back to the other witch after bottle 'cause you need her healed to get pictobox?
Well notice. We do that in the brandly new route made by Kyle/Thiefbug(and some others probably). If you watch the current WR, we don't. We heal her at the beggining of cycle 3, when we came in order to activate the owl.
Arthur42Wonko wrote:
Getting the 50r in the lens grotto seemed odd when you got the wallet maxed out later.
A bit later, I buy both tingle maps in snowhead (60 rupees) and then I'll have to buy bombchus. I must made some test but I think I can buy only 10 of them. That means it will left extacly 100 rupees, just enough to buy H.P to the deku scrub :). (But yeah, I "lost" 10 rupees)
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Thanks guys!
Tompa wrote:
A suggestion for the Aliens: Have them all be one frame from entering the barn at the end.
Yeah, it's always cool to see it without roof :D (I also love Cremia passing through the rock and pushing the worker) Yes, shooting aliens causes lags as Fox3 mentionned.
Amateseru wrote:
Are we sure US emulator is faster than japanese emulator for loading zones ?
Just made a quick test tonigh; US vs JP 1.0. I load North Clocktown from Fairy Fountain. I notice it takes only 3 frames less for US; but I didn't push deeper my tests (for exemple enter boss rooms, temple, etc...). So I still don't really know :)
Spikestuff wrote:
Page Fixing Maestro
Thank you Sir
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Pokota wrote:
That is a lovely looking ui, mind sharing the script (also is it 1.9.4 base compatible, or do I need to use at least a certain SVN revision)?
Here it is. In order to make it work:
  • Put all file into the same directory
  • Edit the variable luaPath (1st line in the file Legend of Zelda, The - Majora's Mask (USA).lua) to match yours
  • In bizhawk, just load Legend of Zelda, The - Majora's Mask (USA).lua
I use 1.9.4 release, so it should work on it :) I upload everything on github if you want to stay up to date. (And I wonder if separate scripts and TAS in a diffrent project shouldn't be a good idea)
Lil_Gecko wrote:
I'm no MM expert but to my eyes it does look good. Keep up the great work !
Thanks :) to be honest, I'd really like to go to the end. The biggest problem is optimization as the game is not hexediting friendly (or I'm really bad at it). So if you realize that something could be better in the middle of the run, you have to redone lots of things. For example, in Cycle 1, I have redone the HMS skip and successfully resync because I used the soft reset as point of reference. We could use loading but it's quite tricky due to strange "20fps" of this game. I'd never been able to get a perfect resync using it :/
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Okay. So, first of all let me explain some points:
  • I choose the US version because it is the most common used by RTA runners. Why ? Because of the Keaton quizz (hard when you can't read japaneze) and because of postman H.P. (heart piece). A timer start and you have to stop it exactly at 10 seconds. On JP it's frame perfect and you have 2/3 chance that the frame doesn't exists; this has been fixed on US.
  • Furthermore, it makes compraison easier whith existing RTA runs
Here's the first cycle: Link to video Not so bad but I'm sure some improvements can be done (on HMS skip for example). I haven't been able to reproduce what I've seen in any% few posts ago (the dialog skip before the twisted path). And the 2nd cycle: Link to video I can save 6 frames when climing before getting the silver rupee (because I didn't know pressing A for climbing make it faster). Globally, the part between the 1st HESS and the Sonata is the worst. I paid more attention and tests more things after this. Aliens are coming soon, I've got some ideas for them. Avoid the cutscene with Epona (use weirdshot to hit the alien behind the house); but I don't if the game will like it :p. One "cycle" if possible, one single arrow (to be tested; I think hitboxes are enough genereous for this),... I also worked on scripts to make an UI: It's not fully fonctionnal but it works. Drop downs are to set values but it doesn't for the moment (I didn't write the code yet). It is cool to reproduce a specific situation for testing stuff (and easiest than use the ram watch to poke values). The smallest window is mainly used for macros. Finally, I give you my current ram watch. Keeta really helps me to make it. Enjoy @codepoint92: Great :D Normally, when we have to beat this Geko, we have the bow and fire arrows but we never know what the will be in the future^^
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
codepoint92 wrote:
The 100% RTA definition is: Everything you don't lose when you play SoT. And that includes notebook entrys (as well as maps, compasses and boss keys). So, I'd say should a 100% TAS ever be created we should do the same thing.
You're right except for Boss Keys, you don't keep them when playing the Song of Time. It's weird but it adds some fun because we skip Snowhead and Stone Tower BK but not the others (because it's on the way for Great Bay and we need to beat the Frog for Woodfall). I've starting working on 100%, I just get the bow (about 40 minutes of gameplay). But I'm not fully satisfied of my work, it's more like a "superplay" than a TAS (it's really far from the amazing WIP of the any%). I'll try to render a video of it, if someone is interested in.
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
I fixed it... When I watch a TAS, I often hear: "Yup, that happened!" and it's perfect for what I got. I don't know how but the ROM has been corrupted (I lost "only" 24Mb). I re-download the rom and it works fine. After hacking Twitch chat, TASBot is able to re-write ROM over network... Impressive. So, thanks everyone! and good luck for future releases :) *Back to lua scripting*
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
zeromus wrote:
Hathor, reboot.
Still the same :/ I tried to use Process Monitor but it doesn't help me as much as i expected...
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
zeromus wrote:
emu.frameadvance is special and can only be run from the lua main loop. basically "emu.frameadvance" is equivalent to "exit lua and run for a frame and then return to lua". This is nonsense from the context of a button event, and consequently it got coded in such a way that when you tried it, it just crashed. Don't expect this basic execution model to change any time soon, so don't expect this to work any time soon. You should work around this by using emu.yield or emu.emuyield or some such in a loop so that your lua script doesnt exit. then when the button is pressed, set a flag. pick that flag up in the main loop in your lua script.
Thanks for reply! I'll try your workaround :) (Good luck if one day, someone decide to work on this stuff) Another question, I've encouter this error tonight: As we can see, it happens when I try to load a N64 ROM. The weirdest is that the same ROM successfully loads few hours ago. I tried to load another ROM and it works. So, I suppose that a wrong setting have been saved but I can't find where... I tried to remove my config.ini and even a fresh downloaded package; the result is the same... I also had look into my appdata folders but I didn't find anything... EDIT: Bizhawk version is 1.9.4
Experienced Forum User, Published Author, Player (105)
Joined: 1/4/2013
Posts: 117
Location: Belgium
Hello I was writing some lua scripts and I got a problem with button in foms. When the click event function called by the button conaints a call to emu.frameadvance() this cause an exception. The message says: " A .NET exception occured in user-code" (at the line where emu.frameadvance call is). here's lua code to easly reproduce:
local function foo()
    console.log("Before call");
    emu.frameadvance();
    console.log("After call");
end

local form = forms.newform(200, 200, "Test");
forms.button(form, "Click Me!", foo, 50, 15, 75, 25);
I use 1.9.3 release, don't know if the bug exists in other releases. Good luck! :)