Posts for Alyosha

Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Wow that's amazing! I'm continually impressed at the cool stuff people are able to come up with, even for current technology. I hope this expands to become a more general use application, could really open up the world of testing and analysis.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Radiant wrote:
Isn't that what these forums are for? Although I'd agree that the workbench gets way more coverage. I can think of at least one game where an author was told in those forums not to do X, and he did it anyway, and then his run got rejected for precisely that reason...
I was going to respond to this ealier but then forgot, sorry! I suppose the discussion could take place there, but I do think it's good to have a dedicated thread where formal decisions are made clear, concise, and documented. It would be great to have a clearly defined way to avoid such huge wastes of time in the future like SMB PAL was (in the event that it ultimately isn't published, which I hope isn't the case.)
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
I'm a little worried about Dragster becoming something of a black eye for TASbot if not handled tactfully. I trust the TASbot team to do so, but just wanted to voice some concern, as a lot could happen between now and January.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
That's cool! Nice find Koh1fds. As for which emulator to use, at least for the game end glitch run, testing by DwangoAC has showed that it doesn't really matter. The RNG at the life stealers will randomly sync or not, as will the glitch itself, and the inputs up to that point in the current movie are the same for both BizHawk and FCEUX. For other runs, BizHawk is needed to make sure the RNG syncs later in the run, it's impossible with FCEUX, as every cycle counts.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Nach wrote:
I just don't want someone to work on something which they may feel is wasted effort. If they want to know if their particular case does not fall into the near-blanket-ban, they can ask, and explain why they feel like their particular case may be different before embarking on a potentially lengthy creation process.
Aside from anything else that might happen with PAL, I think there should be an official channel with a garaunteed response that allows this to be practical. The impression I have right now of the site is that throwing something on the workbench is the only way to get a real answer (and not just about this rule in particular.) If there is a way to get a real answer ahead of time, I think this should be mentioned in the rules as well as the process to go about it.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
feos wrote:
The problem with SMB PAL is that neither superiority nor diversity can be formalized for it. "One time exceptions", as moozooh pointed out, should either be legalized or not happen at all. My goal is to make the PAL ruling fully transparent, with no surprises. If we have to make an exception every now and then, the ruling is sloppy.
I think it's ok if you can't formalize those two things. It can be published alongside SMB NTSC just fine on it's own merits (people just saying they liked it.) I also think exceptions are fine. After all, if judging were nothing more then linearly applying the rules, you wouldn't need to call yourselves judges anymore, I don't think that's an atainable goal at any rate. But it seems we have different goals here in how to sort this out.
MrWint wrote:
In the scenario we're discussing (games which have technical differences but have a very similar look and feel) I think acceptance and obsoletion end up being the same. Since introducing another branch would create unwanted redundancies, the only way it gets accepted is by obsoleting the existing movie (if any). And as mentioned before, I only consider that specific branch, not the game in general (other branches may have different outcomes).
I personally don't see the clutter argument as a real concern. People can find both NTSC and PAL entertaining, and nothing bad will happen by having them published side by side (again, this assumes that the PAL port in quesiton is sufficiently well done like SMB.) Well, I don't think I can add much more to this though. I don't see the need, or the practically, of having a strict formalism here if the goal is to allow some PAL runs while still preferring NTSC. Saying it's ok and being done with it seems good enough to me. If others like feos are trying to really formalize things here then I wish them luck, as the whole situation is quite messy (as the real world usually is), and I think the end result would end up very little different then just using an exception, probably with just many more words.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
creaothceann wrote:
Mmh, right. Did you test the speed with a function pointer (or a variable tested in a switch) that is set when timer_control is changed?
yup, no effect. I would have thought this would help, since it saves so many 'x & 3' operations, but maybe some kind of compiler optimization happens with the '& 3' in the switch since there are exactly four choices there.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
FadeToBacon16 wrote:
@Alyosha It sounds best at 1 (NESHawks default Audio Level) So I was wrong about raising the audio level. I have a question, is it possible to force the NESHawk audio to play at a Higher Quality with a Sample rate of 44100 Hz like how the Sega Emulator Kega Fusion 3.64 does it? Thank You for your time.
What aspect of the sound is low quality? Can you provide an example game that sounds better in a different emulator? I don't think I can just increase the sample rate, but if you can provide a concrete example maybe there is something I can fix.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
creaothceann wrote:
It doesn't matter if they have the same bits set or not since we're testing for zero/nonzero.
(state & state_c) == 0
^ This part will always return true (state_c only has bit 2 set but state never has bit 2 set), but that's not what we want. I don't think the original expression can be simplified unless you shift one to match the same bit being set as the other. I'm not sure that's any faster though.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
feos wrote:
Audience support alone doesn't prove anything, if it can't be formalized in some statement, that is then put as a reason to accept a PAL submission. And to come up with such statement, we impose factors we want to get evaluated. To me the new question is... How many people think we should not change the movie rules, nor clarify them?
Well yeah honestly that's kind of what I was going for. It doesn't really need to prove anything except that people like it. And if we just want to be able to publish the couple of good PAL runs that come along every once in a while, just assert that we can do so. It's kind of like Mothrayas' "special one time exception." If it's good enough to have, just say it's ok. (And I mean that sincerely, not sarcastically, exceptions are needed every now and then.) In this case it's just slightly more formalized since many PAL ports really aren't worth having. But, some are (like PAL SMB in my opinion), so let's leave an opening for them. As for your bolded question, I really do think something needs to change here. We shouldn't be turning away good runs like SMB PAL was when the site is littered with horribly boring content that's accepted just because someone was able to get a game on a cart and sell it.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Ok, so far I tried on BizHawk 2.2.0 and no combination of BIOSes synced. But then I tried on 2.1.0 and it synced just fine with only the standard BIOS in the folder (no debug there at all.) I think part of the problem is that the submission says mGBA 0.6.0 was used, but that wasn't added (according to the release notes) until 2.1.1. The submssion says 2.1.0 was used and this version worked for me, so maybe problem solved? (I sure hope so because I have no clue how this could happen otherwise.)
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
^ That's bad. It shouldn't even be possible. Also it looks like there is a state error in mGBA. Start TAStudio, advance some frames, hit '<<', game won't load.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Case by case basis seems fine to me. Maybe just change this:
Due to this, PAL versions of ROMs are generally not allowed, unless there are significant technical and/or entertainment merits to using this version.
to this:
Due to this, PAL versions of ROMs are generally not allowed, unless there are significant technical and/or entertainment merits to using this version, or there is strong audience support.
To keep things simple and consistent, just publish PAL seperately. I'd don't think any rule should be tied to the tier system.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
I have completed a new, more accurate in game time analysis here: http://tasvideos.org/forum/viewtopic.php?p=458702#458702 The new runs include time savings in 8-1 and 8-2, and use the vine in 4-2 to save in game time. They also remove all pole clips to save in game time. overall PAL is faster by 0.9 seconds or 0.4 seconds depending on how you count the pipe transitions in 1-1.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
I have completed the new in game time analysis. PAL is faster by a significant margin (in Super Mario Bros terms anyway.) NTSC: http://tasvideos.org/userfiles/info/41604061717252503 PAL: http://tasvideos.org/userfiles/info/41604073283198421 Spreadsheet can still be found here: https://docs.google.com/spreadsheets/d/149PjFfAayZw1i_jR3Kew3OA930r5P-v7rz5EI6r4XHw/edit?usp=sharing If anyone has any other ideas feel free to suggest them but I think this is pretty conclusive.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
^ About the same as the current one. (But I believe your new condition statement is incorrect, as state and state_c never have the same bits set.) So to summarize so far: - putting failing condition first is the biggest improvement - bool to int is also a noticable but smaller improvement - look up table has a negative effect - everything else has more or less no effect
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
I had actually tested the look up table earlier but it is slower by a LOT. I guess I could try with unsafe too but it's not worth it just for that. I also tried stringing together '?' operators but that had only marginall effect. I also tried just replacing the switch with ordinary logic elements but that wasn't much faster either. Overall it's currently ~30% faster then when I started, and I guess that's about as fast as it's going to get. It doesn't matter much for this case but I thought I could learn something more from it since it's so simple and obviously slow. Oh well though, too much other stuff to do to get hung up on it. EDIT: I tried your (Sour) other suggestions but they didn't result in improvements. Thanks for coming up with things to try though.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Ok, I added a volume slider under NES->Sound Channels. Minimum setting (1) should match current NESHawk uadio. Maximum setting (10) should be 3x louder. Please try the dev build and let me know if it's enough.
Post subject: Re: NESHawks Audio
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
FadeToBacon16 wrote:
Hello BizHawk developers, I just wanted to ask if you guys can please turn up the overall volume on the NESHawk's Emulator Core. I love the Emulator, it is great. It is just that the overall Audio volume is low, I turn up the volume on my computer to the max for my head phones and it is still kinda low. Thank you for your time.
Hi, the sound seems normal to me. Check the following settings and make sure they aren't turned down: Config -> sound make sure volume is turned all the way up. Does QuickNES Sound soft as well or only NESHawk? How about other cores (i.e. SNES) ?
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Andypro wrote:
I would posit that it's the sheer number of function calls to Bit() that eat away at performance. Can you run a disassembler to determine if the JIT compiler is inlining those calls? If it isn't, you could try the AggressiveInlining attribute that was mentioned in the NesHawk thread. I haven't done a huge amount of performance optimization in C#, but it's pretty fascinating.
Tried aggreisve inlining, no effect, probably the compiler already does it. Tried removing the Bit call altogether and just using explicit statements like (value & 0x200) > 0, no effect. Tried changing to integers and rewriting the logic. Small but positive effect, not sure it's worth the reduced clarity. But the most effective change was putting the condition most likely to be false first in the 'if' statement later on in that function. >___> I guess I need optimization 101. EDIT: Here's the complete thing if anyone sees anything obvious. According to performance profiler, this tiny block takes about 1/4 as long to run as the entire CPU function 0_0. So something about it must be super slow:
		public void tick_2()
		{
			divider_reg+=1;

			// pick a bit to test based on the current value of timer control
			switch (timer_control & 3)
			{
				case 0:
					state = divider_reg & 0x200;
					break;
				case 1:
					state = divider_reg & 0x8;
					break;
				case 2:
					state = divider_reg & 0x20;
					break;
				case 3:
					state = divider_reg & 0x80;
					break;
				default:
					break;
			}

			// And it with the state of the timer on/off bit
			state_c = timer_control & 0x4;

			// this procedure allows several glitchy timer ticks, since it only measures falling edge of the state
			// so things like turning the timer off and resetting the divider will tick the timer
			if ((state == 0 || state_c == 0) && (old_state > 0 && old_state_c > 0))
			{
				timer_old = timer;
				timer+=1;

				// if overflow, set the interrupt flag and reload the timer (4 clocks later)
				if (timer < timer_old)
				{
					pending_reload = 4;
					reload_block = false;
				}
			}

			old_state = state;
			old_state_c = state_c;

		}
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
8-2       | 10979  12475    1496  24.892

8-2       | 10979  12363    1384  23.029
It seems myself and MrWint measured time slightly differently, but there is no disagreement that the time saved in 8-2 is 112 frames. The 2.379 seconds does seem to be in error, more likely 1.863. I really think at least this much should be corrected in the notes so as not to mis-inform people who might read it later. Even if it's not relevent to the judgement, it's still a statement by a judge attached to a player's submission, so it should be as accurate as possible.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
I didn't realize you only had just a couple of days to prepare for this DwangoAC, I never checked the date and just assumed it was at least a couple weeks away. Under the circumstances I think that went very well, nicely done. Sorry Battletoads gave you so much stress thuogh, I guess True has the magic touch for that game. Aside from that have you followed the recent Atari 2600 Dragster discussion at all? There's some real interest in having console verification of some A2600 runs. I'm not sure it's interesting enough for any kind of event, but it might raise the profile of TASBot a bit in some other circles. Just a thought since it's current.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
creaothceann wrote:
Is that line using bit masking and shifting? You could also store each emulated bit as its own boolean.
Yeah it does this:
public static bool Bit(this byte b, int index)
		{
			return (b & (1 << index)) != 0;
		}
It also seems like Bools are just slow altogether, not sure.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Since I had some time today I decided to see if I could get the last graphics bit, windowing, working. As it turns out, I really should only try to do one thing at a time, because a large chunk of the time I spent on this was just trying to remember what the heck I was doing. In the end though it worked just fine. This scene from Mega Man 5 is actually pretty challenging to get right graphically, so it's a good sign that things are working well: A few more small timing things to clean up and it will be time to start audio. I also did some performance analysis, since this core runs much faster the NESHawk while not really having that much less to do, to see if I could learn anything from it. One thing I did learn is that statements like this:
state = divider_reg.Bit(9);
are really very expensive. Maybe knowing that can help me speed things up in other places.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author, Expert player (3572)
Joined: 11/30/2014
Posts: 2744
Location: US
Nach wrote:
I picked a spot before the staircase a bit prior to where HL slows down, as an easy to notice spot. I then went through a bunch of previous movies for the game, looking for the one which did the staircase to flag fastest. Once I found the fastest, I added the time from that point to the time I calculated for HL till that point, and then subtracted that from HL's overall time. That's the thing, if you're aiming for fastest possible playable time don't do the glitch at all, as the glitch trades playable time for real time.
Which movie did you choose? I don't think I missed anything (I mean, I just had to run up the bricks) but I'd like to be totally positive. Good point. I went back did a test run and saved 46 frames in NTSC climbing the vine and 30 in PAL. It's surprising how little in game time this saves, but when Mario needs to jump in place it seems like it takes an eternity to do so. But, I also went back and saved the frames in 8-1 in PAL and turns out to be more then I expected at 12. This is net savings for NTSC of 46 (0.766s) and PAL of 42 (0.84s) so the net result is that NTSC is even further behind then before. (I'll post some movies maybe tomorrow when I have time to do things more carefully.)