Posts for Alyosha
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Amazing work! Battletoads is super challenging to TAS and you made it look easy! Definite yes vote. Also personally I prefer just letting down time be down time, you don't always have to be doing stuff (and anything you change will certainly ruin RNG and you will have to redo many sections afterwards.) You're definitely a super talented optimizer, I hope try your hand at other challenging games too.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Cool run! Impressive level of pokemon knowledge on display as always. Yes vote. Can you actually reset a gameboy player? I'm not sure what the audio issues are (it sounds fine to me.) I'll have listen to it side by side with an older version or gambatte, I've never really gotten an ear for audio issues. Whatever it is I'll fix it alongside Hammerin' Harry, which should be soon. Not really related to this run, but I'm really surprised by how often corrupting save ram leads to useful results.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Fixed collision detection on catch the ball, maybe fixes other stuff. For catch the ball game 3, it just loads up the game restart sequence, so to me it looks like there is no game 3. Unless someone loads this up on an actual console and gets something for game 3, I'm thinking there is nothing to fix here.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
http://tasvideos.org/userfiles/info/63275868784479312 Finally, here is a WIP that completes the game. This is still quite a long way from being done, but at least now I have a complete file to work with that has all the loading times accounted for so I don't need to spend so much time just re-syncing things. It was quite a lot of work getting to this point, so I'll probably only work on this slowly from here on. this type of long project really isn't for me. At least there's no RNG to deal with. EDIT: here is a 5 second faster WIP that cleans up a few obvious errors. http://tasvideos.org/userfiles/info/63349808160853828
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
I had mentioned this in the GBHawk thread, but basically the way STOP is emulated in Gambatte got changed somewhere along the way. It now cannot be un-stopped without an interrupt. However, various test roms require being able to un-stop without an interrupt, just a button press, so this seems to be a regression. See: https://github.com/AntonioND/gbc-hw-tests ,dma_halt_stop_speedchange.gbc I believe the game end glitch can be executed as implemented, but to work on real hardware would need subframe inputs to un-press the buttons before the STOP hits. The original run works in GBHawk in exactly the same way as it originally did on Gambatte (which I believe is also not technically correct, as the buttons are held before STOP, but I need a proper test): http://tasvideos.org/userfiles/info/58687251796716780
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
I was wondering, has any dis-assembly work been done on this game to get some strong evidence of where things are optimal or not? It still looks like it's mostly empircal guess work finding strategies and it would interesting to know if there are any really un-intuitive strategies that could still save more time.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Personally I see these as two different versions, the player pretty clearly has to do some different things in order to win optimally. Seems like there is a lot of room for differences of opinion here. Why not have feos judge one and Memory judge the other one?
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Wow that's a big improvement, nice work! Once again voting yes, this is an interesting category.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Cool even more punch out improvements, definite yes vote.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
I made optimizations / accuracy improvements / cleanup to GBHawk's serial port code today. It is noticeably faster now, especially in 4 player mode. Normal GBHawk is faster too by about 5-10 fps. If anyone notices any issues with the linking now let me know. I tested a lot of different cases and everything still seems to work though. Also the VRAM access glitch above is still under investigation, definitely some new behaviour there but details aren't nailed down yet.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Cool to see an improvement to punch out. I wonder though if this is really the only improvement possible, seems like some things are only known empirically, are there any other possibilities out there? Yes vote regardless. Also why isn't McHazard coauthor?
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
That's cool, I thought that didn't work for punch out, I must be mis-remembering. Maybe it's worth a console test too, would be cool to see a console verified punch out run. EDIT: oh cool it's uncancelled, giving this a yes vote, I like the glitch and the different strategies.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Personally I'd like to see this as a published category (but I'd also like to see it not done on FCEUX.)
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
http://tasvideos.org/userfiles/info/63149161706437437 Here's another WIP with all of world 3 and part of world 4 done. This is more like a rough draft, as I'm just trying to get through the game to have a complete WIP, but all of the major timesaves are included I think.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Some interesting developments have been happening in gameboy console verification. I looked into this for jlun2 in Wario Land II:
jlun2 wrote:
While routing for 100%, I asked TiKevin83 to check for if the OoB in this game was emulated right by given them input files for any% improvement. An input file that did not soft reset the game synced back, but the one that did use a soft reset to alter OoB layout did not.
This was an interesting desync because it involved the cpu accessing VRAM (0x8B2C) when it was still in use by the ppu for rendering. Normally this would be expected to return 0xFF, but the way the desync happened this could not be the case. In fact, the underlying value was already 0xFF, so whether or not the cpu could access this address, it should still be returning 0xFF. But the console verification attempt revealed that this could not be the case, what needed to be returned was a value for a coin. The only clue about what might be happening is that this access was blocked on the very last pixel of rendering, right before access was restored to the CPU. This is just speculation, but I think what happened is that access is restored to the CPU, but it's too late for the address latch, so what gets returned is just the last latch on the bus that the PPU read. The PPU is always reading from memory, even when it has all the tile data it needs already. Sure enough, if I implement this behaviour I get a coin and desync exactly as in the console verification attempt. Also, execution between Gambatte and GBHawk is identical cycle for cycle up until this exact moment. Some test ROMs will be needed to determine if this is truly what's happening, but I don't see any other way for a value other then 0xFF to be returned without this behaviour. I have it implemented in the current version of GBHawk and hopefully a console verification of Wario Land II can work with this. ___________ Also in the realm of Wario Land, there was some speculation on whether or not the game end glitch run was actually possible on console for wario land 1. The thought was that the STOP would not be able to escaped from because interrupts for joypad were not enabled. However some test roms from https://github.com/AntonioND/gbc-hw-tests require STOP to be returned from with joypad press even if interrupts are turned off. So the mechanism itself should work. However, the STOP happens on the same frame buttons are already being pressed. It seems that in this case STOP is not exited. So maybe this will need subframe timing in order to release the buttons before the stop.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
I loaded up the 2 player TAS to check things out. For the cutscene skip, you have 1 frame to hit the start button 28 frames after you clear the screen displaying the level name. You can't hold start before that time and no other buttons have an impact, no wonder that went unnoticed for so long! I'll edit this post if any of the others are easily reproduced. EDIT: For the glitch in level 2, did you press any buttons to respawn? If you didn't press any buttons then this can be explained with a random bit flip at address 0040 going from 0x0E to 0x0F. If I do this while no turtle is spawned it automatically respawns a turtle and ends the stage exactly as in the video.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Impressive, but this is the donkey kong country thread and that is for DKC2. Or is it applicable to DKC 1 as well?
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
nice finds! Was this done on console or emulator?
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Zombies ate my Neighbors is done thanks to the work of Allbeert, it's been over a year since I last removed a run from the list, so a little new progress is nice!
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Thanks for testing, I can start looking at those in a couple weeks.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
Over the years I've seen many things that 'just need someone to do them' that never end up getting done, but that being said seems like mGBA is at least accessible to implementing advanced features in. Guess I'll start looking more closely at SNES stuff. Thanks for the feedback.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
After porting GBHawk to C++ produced poor results, I've been thinking of taking a different path forward in terms of a follow up to MSX. I was originally probably going to go with something MC68000 based, but with GBHawk performing so poorly that wasn't going to work the way I envisioned. That combined with my general lack of interest in such systems led me to look elsewhere. I haven't really settled on anything yet, so I wanted to throw some ideas out there and see what people think. SNES + sub-frame capable. The snes CPU offers a lot of design possibilities without a huge number of instructions. I think I could learn a lot from it. The down side is obviously the time it would take on the PPU side, which I originally didn't want to touch but now seems more attractive from a design perspective. Would it be worth it to anyone to have sub-frame capabilities like SubNESHawk, or is lsnes good enough already? Could a new SNES core with more control improve console verification efforts? GBA + sub-frame + linking. I know mGBA has linking, and someone could probably get it working before I got a new core working, but what about sub-frame stuff, any utility there? I'm trying to combine my own interests with things with real utility. I'll still be working on MSX, I just like to look ahead a bit.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
I made a new setting in GBHawk to sync memory domains to VBlank. This makes LUA scripts for GBHawk more consistent with Gambatte. This also helps in comparing memory in Hex Editor. NOTE: this only works for individual memory domains, not system bus. Also it doesn't apply to writes, writes always go to the actual underlying memory. You can turn this on or off anytime in the settings menu.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
I'm done with lolo games for now. I like tasing them but it's a huge time sink and I have other things I want to get done. Maybe next year for 2J.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3602)
Joined: 11/30/2014
Posts: 2752
Location: US
@jlun2: I fixed the cart RAM domain in GBHawk so your lua script should work now, please retest and let me know if everything is good. This was unique / troublesome enough that I decided to write down the technically details, anyone interested can read on. This was actually a pretty weird case that shows how important it is to watch out for garbage collection in managed code in C#. What went wrong is here:
var CartRam = new MemoryDomainByteArray("CartRAM", MemoryDomain.Endian.Little, cart_RAM, true, 1);
This function takes the whole of cart_RAM as an argument and used in an assignment :
Data = data (where data is cart_RAM in this case.
Data has a setter:
public byte[] Data
		{
			get => _data;
			set
			{
				_data = value;
				Size = _data.LongLength;
			}
		}
_data is another byte array that is internal to the memory domain. Internally, this assignment is an assignment by pointer. _data gets a pointer to cart_RAM, even though it doesn't look like it. In c++, this would be what you want and expect. But in C#, the underlying domain cart_RAM can be moved without you knowing, in an attempt to manage memory for you. From here on is somewhat speculative, but what I THINK is happening is that memory management moves cart_RAM, but the original copy can't be deleted because their is a pointer to it. So you get left with a stale copy of cart_RAM that the memory domain points to while the actual cart_RAM array getting updated as it should. This, is super annoying. The solution is to just use the delegate method of defining domains that doesn't rely on a pointer internally. The weird thing is that other cores (ex NESHawk) use this method of defining memory domains by default and I've never seen a case where this has happened before. Probably it should be used for static arrays only (or not at all if it's just going to leave a stale copy clogging up memory.)