Posts for andymac

Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Personally, I think we have two options, firstly, we can use the Yoshi's island precedant. The reason being is that the old SML2 any% is already too similar to a 100% run, so previously there were going to be no two categories due to redundancy. Now, with the ability to skip straight to the credits, the any% and 100% are now sufficiently different to warrant separate publications, so that when a 100% run does come along, it obsoletes the old any%. Alternatively, like adelikat said,we can use the SM64 precedent, obsolete the old any% with the new any%, but I would be against having a glitchless category, because it would be too similar to the 100% to warrant separate publication. Personally I don't really care. The only difference is whether the old any% still remains published during the creation of a 100% (maybe glitchless 100%) movie.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
I think put simply, if A and B are travelling faster than the speed of light away from each other, then it would be impossible to send a probe or a signal from A to B, because by the time the signal reached a point where the two observable universes intersected, then it wouldn't be part of both A nd B's observable universe anymore. This of course you would need to observe from a third reference frame, where both A and B are observable.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
nahoc wrote:
Warp wrote:
Does that mean that if the length of the movie is calculated by how many frames of input there is in the file, it will get wrong value (because lag frames are not taken into account)?
As I far as I know, .m64s are still timed by counting VI/s, so, yes, the lag is taken is consideration (most of it only appears in DDD, though).
To Warp: yes; IF you were to calculate the time through the number of frames in the input file ONLY, then you would get a value less than half of the length of the video (for SM64 at least) because technically, there is a frame of lag every other frame, plus the lag generated by loading times, means the movie is more than half lag. (as far as "most of it occurs in DDD" is BS, because half of the frames are lag regardless of level, DDD just has significant lag, which results in visible slowdown). However, the timing of an m64 is not dependant on the number of frames at all, rather than the VI count in the header. As soon as the movie progresses up to the correct number of VIs, then the movie will stop playing, regardless of how much more input there actually is in the file. Also, if the movie reaches the end of the file before the VI count is up, mupen will try to read past the EOF, hence the "pause bug" or "garbage input". Snes9x has a similar system, but with no bugs that I'm aware of (it just returns null input)
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
that about input files not counting lag frames actually sounds very nice, why don't all emulators do that? does it screw with the completion time count?
Well, we define lag as a frame (or in the case of the n64 a VI) where input isn't polled. Most games on most consoles poll input 60 times a second unless there is lag. With the n64, a lot of games poll input at 30Hz rather than 60Hz, and others still poll input at even more arbitrary intervals, so technically, there is one frame of lag every other frame for a game running at 30FPS. This would be extremely annoying to TAS, because half of all frames would do absolutely nothing. This is also why mupen doesn't have a lag counter, because there is no reliable way to find lag in the first place. Also, some games like conker's bad fur day and banjo games have systems in place that allow for input to be polled at irregular intervals, while still maintaining a regular speed (which for all intents and purposes means that the game doesn't slow down at all, so lag is irrelevant. It also means that hexing is impossible for these games). This means that for emulation and TASing purposes, it's a lot easier to skip forwards to the next input poll, rather than the next rendered frame. For any other console however, it's much easier to advance one frame every time, rather than one input poll. It's just conveniant. Emulators like FCEUX and VBA have frame advance: skip lag options, which means that when you enable this, it works like mupen64 in the way that the emulator skips over any frames of lag. I use this sometimes in very laggy sections, because it means I can TAS normally and not have to worry about lag delay. Unfortunately, it makes it very easy to forget about lag altogether, and many times I have had to redo sections in order to fix lag that I missed. Now there are a few reasons that emulators record input for lag frames. Firstly, timing. Most new input recording formats are text based, so the input is human readable. These generally don't have a frame count (or a VI count) in the header. They just count the number of times input appears and then divide it by 60 to get the time. fm2 for example is a format which does this. This means that you can hex in a level, and not have to change the frame count in the header of the file. Secondly, accuracy. Allthough input might not be polled during a frame, it doesn't mean that the input doesn't exist. What if you want to reset during a frame with lag? you wouldn't be able to in the emulator, but you could in real life. Also anyone with knowledge about hexing knows that you can insert or remove frames where there is lag in order to make a game synch. It's a little extra effort compared to mupen64's system, but as far as I know, that's the only disadvantage. I think the fcm format had solutions to all these problems, but in doing so, it also produced a hellish format which noone could comprehend or hex edit. As for hex editing in SM64, there aren't infinite possibilities for every random element. In all likelyhood, Nahoc changed a few things before the level started and that changed the RNG to be a good value.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Lakitu Skip: same as 0/120 star Bowser 1 entrance: same as 0/120 star Bowser 1 : same as 120 star Whomp's fortress entrance: same as 120 star Blast away the wall: same as 120 star Cage star: same as 120 star Shoot into the wild blue: same as 120 star Inside the ancient pyramid: same as 120 star Shining atop the pyramid: same as 120 star In the talons of the big bird: same as 120 star Hot fot it into the volcano: same as 120 star 8 coin puzzle with 15 pieces: same as 120 star Red hot log rolling: same as 120 star Boil the big bully: same as 120 star Swimming beast in the cavern: same as 120 star Watch for rolling rocks: no blj Toad: same as 120 star A-Maze-ing emergency exit: same as 120 star MIPS glitch: not in any run Board Bowser's sub: same as 120 star Bowser in the fire sea: same as 0 star 50/70 star door skip: starts on 50 star stairs instead of spiral staircase Bowser in the dark world: same as 120 star As you can see, pretty much 90% of the run is redundant to the 120 star run. There are route changes to the castle (for example instead of BLJing out of a room, they will go into the painting and then select "exit course", or in the basement instead of BLJing from the small staircase into shifting sand land, they go there on foot) but otherwise it's pretty much the same. As for showcasing the MIPS glitch? With 10 minutes of practice, anyone can do it. If anything, this run shows that a 120 star run could be hexed together. SM64 is realitively hexable. 60 stars guaranteed to hex well? I would kill for a game where half the levels could be hexed in without fail. Take any other game, and there are infinitely many more random elements, or there's subpixel carry over, or there's lag. SM64 has none of this. the m64 format doesn't even have input written for lag frames, so it will always hex no matter how much lag you have! Not only that, Nahoc managed to produce a 16 star run in less than a week, where a number of these stars (like watch for rolling rocks and Bowser in the dark world) were considered unhexable by the SM64 community. As such, I'm voting "no" because this is highly redundant to another category that people are making excuses not to finish. Other than that, it's well played and has a lot of memorable moments.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
There is no specific "mushroom" block. There are ? blocks with the mushroom object inside them. SInce there are no objects in the garbage data, only tiles, all of the ? blocks contain coins.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
What are you talking about? I've been TASIng the (UE) version of Wario Land 4 on VBA 23.4 for a long time.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Is there any documentation about this phenomena? or is it just a bit of hit and miss? "Random" doesn't really play a part in TASing at all, so if there is any information concerning the workings of the PPU in conjunction with the RAM it would be much appreciated. (Also, information about I/O, and OAM would also be appreciated) EDIT: As far as I can tell, OAM and VRAM behave the same way. Writes will be ignored during render time and reads will return undefined values. Also the part of I/O I come into contact with are to do with the sound controller. I mean, none of this information is particularly useful, so I was wondering if there was any further information on this kind of thing.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
I'll post this here. A write to ROM is actually not an illegal write. Writing to the ROM adresses is the way of sending instructions to the MBC inside the actual cartridge. Super Mario Land's cartridge type is MBC1 + RAM + BATTERY, so here's what should happen if you break blocks in the ROM area. If you write anywhere between 0000-1FFF (first 32 rows), it will enable or disable the external RAM (i.e the RAM between A000-BFFF) This part of RAM contains all the important game variables. if you write 0x60 anywhere in this region by breaking a block, you will disable this RAM, and the program can't run without it. This probably causes a soft reset. (It crashes the emulator generally, this is due to innacurate emulation)at If you break any block between 2000-3FFF (next 32 rows), it will change the bank of ROM adressed at 4000-7FFF to bank 0x01 (for some reason, you can't select 0x00 as the bankable ROM in a gameboy, and an attempt to access bank 0x00 will result in acess to bank 0x01, This is also) This doesn't seem to disrupt gameplay, because it switches back quickly. Also you won't be in 4000-7FFF when it changes. If you break any block in 4000-5FFF, it will take the lower 2 bits of your write and change the RAM bank OR the upper two bits of the ROM bank, depending on the mode of acess (see 6000-7FFF). If you break a block or collect a coin, it will do absolutely nothing, because it will write 0x60 to that space and change the upper two bits of the ROM bank to the lower two bits of 0x60 (which are 0 and 0), but they were always 0, so it doesn't make a difference. I'm not so sure what happens when you hit a coin block in this area. It should do nothing, because SML2 has no ROM past bank 0x20. (There is never any reason for SML2 to ever write to this area during normal play, since it only has a 512kB cartridge) If you break a block in 6000-7FFF, it will change the mode of the above addresses. If you break a block, it will do nothing, but if you hit a coin block, the MBC mode of the above will change from ROM bank switching to external RAM bank switching. (ROM bank switching is the default mode, and since SML2 has a 512kB ROM with 8kB RAM, there is no need to ever change the modes) This will only change anything if you go back up and change something in the above blocks AFTER you have changed something here. EDIT: it appears that the glitch that I used during my previous run, where I fireball a block in the 2000-3FFF range and that allows me to go through a pipe quicker may be an emulator glitch. This is because VBA allows for the access of ROM bank 0x00 between 4000-8FFF with the MBC1 controller, whereas the real GB does not (it will acess bank 0x01 instead)
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
I found some information on writing to ROM in the gameboy for MBC1:
MBC1 (max 2MByte ROM and/or 32KByte RAM) This is the first MBC chip for the gameboy. Any newer MBC chips are working similiar, so that is relative easy to upgrade a program from one MBC chip to another - or even to make it compatible to several different types of MBCs. Note that the memory in range 0000-7FFF is used for both reading from ROM, and for writing to the MBCs Control Registers. 0000-3FFF - ROM Bank 00 (Read Only) This area always contains the first 16KBytes of the cartridge ROM. 4000-7FFF - ROM Bank 01-7F (Read Only) This area may contain any of the further 16KByte banks of the ROM, allowing to address up to 125 ROM Banks (almost 2MByte). As described below, bank numbers 20h, 40h, and 60h cannot be used, resulting in the odd amount of 125 banks. A000-BFFF - RAM Bank 00-03, if any (Read/Write) This area is used to address external RAM in the cartridge (if any). External RAM is often battery buffered, allowing to store game positions or high score tables, even if the gameboy is turned off, or if the cartridge is removed from the gameboy. Available RAM sizes are: 2KByte (at A000-A7FF), 8KByte (at A000-BFFF), and 32KByte (in form of four 8K banks at A000-BFFF). 0000-1FFF - RAM Enable (Write Only) Before external RAM can be read or written, it must be enabled by writing to this address space. It is recommended to disable external RAM after accessing it, in order to protect its contents from damage during power down of the gameboy. Usually the following values are used: 00h Disable RAM (default) 0Ah Enable RAM Practically any value with 0Ah in the lower 4 bits enables RAM, and any other value disables RAM. 2000-3FFF - ROM Bank Number (Write Only) Writing to this address space selects the lower 5 bits of the ROM Bank Number (in range 01-1Fh). When 00h is written, the MBC translates that to bank 01h also. That doesn't harm so far, because ROM Bank 00h can be always directly accessed by reading from 0000-3FFF. But (when using the register below to specify the upper ROM Bank bits), the same happens for Bank 20h, 40h, and 60h. Any attempt to address these ROM Banks will select Bank 21h, 41h, and 61h instead. 4000-5FFF - RAM Bank Number - or - Upper Bits of ROM Bank Number (Write Only) This 2bit register can be used to select a RAM Bank in range from 00-03h, or to specify the upper two bits (Bit 5-6) of the ROM Bank number, depending on the current ROM/RAM Mode. (See below.) 6000-7FFF - ROM/RAM Mode Select (Write Only) This 1bit Register selects whether the two bits of the above register should be used as upper two bits of the ROM Bank, or as RAM Bank Number. 00h = ROM Banking Mode (up to 8KByte RAM, 2MByte ROM) (default) 01h = RAM Banking Mode (up to 32KByte RAM, 512KByte ROM) The program may freely switch between both modes, the only limitiation is that only RAM Bank 00h can be used during Mode 0, and only ROM Banks 00-1Fh can be used during Mode 1. MBC2 (max 256KByte ROM and 512x4 bits RAM) 0000-3FFF - ROM Bank 00 (Read Only) Same as for MBC1. 4000-7FFF - ROM Bank 01-0F (Read Only) Same as for MBC1, but only a total of 16 ROM banks is supported. A000-A1FF - 512x4bits RAM, built-in into the MBC2 chip (Read/Write) The MBC2 doesn't support external RAM, instead it includes 512x4 bits of built-in RAM (in the MBC2 chip itself). It still requires an external battery to save data during power-off though. As the data consists of 4bit values, only the lower 4 bits of the "bytes" in this memory area are used. 0000-1FFF - RAM Enable (Write Only) The least significant bit of the upper address byte must be zero to enable/disable cart RAM. For example the following addresses can be used to enable/disable cart RAM: 0000-00FF, 0200-02FF, 0400-04FF, ..., 1E00-1EFF. The suggested address range to use for MBC2 ram enable/disable is 0000-00FF. 2000-3FFF - ROM Bank Number (Write Only) Writing a value (XXXXBBBB - X = Don't cares, B = bank select bits) into 2000-3FFF area will select an appropriate ROM bank at 4000-7FFF. The least significant bit of the upper address byte must be one to select a ROM bank. For example the following addresses can be used to select a ROM bank: 2100-21FF, 2300-23FF, 2500-25FF, ..., 3F00-3FFF. The suggested address range to use for MBC2 rom bank selection is 2100-21FF. MBC3 (max 2MByte ROM and/or 32KByte RAM and Timer) Beside for the ability to access up to 2MB ROM (128 banks), and 32KB RAM (4 banks), the MBC3 also includes a built-in Real Time Clock (RTC). The RTC requires an external 32.768 kHz Quartz Oscillator, and an external battery (if it should continue to tick when the gameboy is turned off). 0000-3FFF - ROM Bank 00 (Read Only) Same as for MBC1. 4000-7FFF - ROM Bank 01-7F (Read Only) Same as for MBC1, except that accessing banks 20h, 40h, and 60h is supported now. A000-BFFF - RAM Bank 00-03, if any (Read/Write) A000-BFFF - RTC Register 08-0C (Read/Write) Depending on the current Bank Number/RTC Register selection (see below), this memory space is used to access an 8KByte external RAM Bank, or a single RTC Register. 0000-1FFF - RAM and Timer Enable (Write Only) Mostly the same as for MBC1, a value of 0Ah will enable reading and writing to external RAM - and to the RTC Registers! A value of 00h will disable either. 2000-3FFF - ROM Bank Number (Write Only) Same as for MBC1, except that the whole 7 bits of the RAM Bank Number are written directly to this address. As for the MBC1, writing a value of 00h, will select Bank 01h instead. All other values 01-7Fh select the corresponding ROM Banks. 4000-5FFF - RAM Bank Number - or - RTC Register Select (Write Only) As for the MBC1s RAM Banking Mode, writing a value in range for 00h-03h maps the corresponding external RAM Bank (if any) into memory at A000-BFFF. When writing a value of 08h-0Ch, this will map the corresponding RTC register into memory at A000-BFFF. That register could then be read/written by accessing any address in that area, typically that is done by using address A000. 6000-7FFF - Latch Clock Data (Write Only) When writing 00h, and then 01h to this register, the current time becomes latched into the RTC registers. The latched data will not change until it becomes latched again, by repeating the write 00h->01h procedure. This is supposed for <reading> from the RTC registers. It is proof to read the latched (frozen) time from the RTC registers, while the clock itself continues to tick in background.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
well, corner boosting saves 1 pixel. Jumping with the new pixel trick saves 1 pixel. So if I have to sacrifice a jump to do a corner boost, it's not worth doing a corner boost. Also, because of the different way of doing the pixel trick, I can only jump on 2 out of 8 frames, which severely limits the number of corner boosts that I can do anyway. It just do happens that it's not worth doing any in this movie.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Actually, I think Grunt means go into Macro zone, and get hit by the ant throwing stones to die while inside the pipe. The problem with this is that even if you can die in a pipe (not sure if you can, never tested it) if you die, you automatically become small mario, but you need at least big mario to break the block that represents A2D5, an there's no way of becoming big in the garbage data, since there are no objects there.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
I'll describe the garbage in more detail. The first two rows are the last parts of adressable data (FE00-FFFF) The first row that I pass is OAM. You will notice that I throw two fireballs before going into the garbage data. This is necessary to manipulate the blocks in the first row (the OAM) to be solid or empty when necessary. In my previous movie I manipulate on screen fireball positions and mario's position to be 4A or 4B, which corresponds to an exit. So yes, the first two rows constantly change. However, their graphics on screen don't change unless they go off screen. In the next 64 rows (0000-3FFF) if you break a block, it crashed the emulator. I'm not sure what happens on a read GB, but I'm sure it will either reset or crash the game. So I dont do it. However you can shoot a fireball at a fire block, and it will go through the destroying block animation, but it will still be there afterwards, and you can shoot it as many times as you like. I mention this in the submission comments. in the bank switchable ROM (4000-7FFF) I don't break any blocks, but I do use B + ^ a lot to go through some floors (pressing B + ^ changes the layout of the level instantaneously, so some blocks which were solid were then empty, and mario could fall through them). You can hit blocks in this area, and they will break, but they will still be there afterwards. I wasn't sure if this was the same as a real GB, so I made sure not to break blocks in this area just to be sure. The final part of ROM that I go through I break as many blocks as I like. This is the WRAM (8000-9FFF) and stores all of the tile data and graphics. By breaking some blocks, you can get really weird looking graphics. For example I broke one block which put a large dark pixel in the corner of mario's sprite. However, none of these constitute an illegal write (because they are in RAM). Then A2D5 is just three blocks underneath the floor. This changes some save data, and an empty part of A100 and then the block which triggers the credits. Again, no illegal writes because it's RAM, and this RAM is usually general purpose anyway.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
http://dehacked.2y.net/microstorage.php/info/267520580/SML2redone.vbm Here is a version that is 121 frames faster. Please change the movie file for the submission. I went back over the movie to look for any improvements, and I found a few small ones which added up. There is a slight route change to the garbage data which saves about 60 frames. I missed it the first time around because of the way I looked for routes. (DFS, I disregarded any paths that were likely to fail early, this one I considered likely to fail, but it didn't, and truncated about 60 frames. It's only a very minor change anyway)
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
(21:45:27) Flygon: I just got a hardon (21:45:31) Flygon: This run must be good (21:45:44) Flygon: Incidentally, hardons are annoying when you're trying to work (21:45:59) Dada_: Well, I suppose that depends on what your job is
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Sorry to double post, but this is my progress currently: I'm at the second half of the garbage data. Progress is slow let me tell you why. Imagine a game where the map is completely randomised and has no visible order to it. Now imagine the same game, but with a second map, and you can switch the two maps using a hotkey ( so you press a button and the map changes, and you're in the same position, just in the other map). Now imagine that you donlt know what either of those two maps looks like. Get the picture?
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Here is probably my final version of the script that feos wanted. It's basically a copy of the emulators existing HUD feature, but you can drag and drop any peice of information anywhere on the screen. It also allows you to record input onto an avi.
--Input and frame counter display by andymac
--Useful for recording input onto avi, or if you just don't want the
--display getting in the way of your movie!
--Simply drag and drop the input display or frame counter
--Middle click to disable a display
--Numpad 1-5 to enable displays.

function drawpad(padnum,cx,cy)	-- draws a gamepad on the screen

	gui.transparency (2)					--draws backround box
	gui.drawbox (cx - 3,cy - 3,cx + 28,cy + 6,"blue")	
	gui.transparency (0)

	gui.drawbox (cx,cy,cx + 3,cy + 3,"black")		--centre square

	controller = joypad.read(padnum)
	
	if (padnum == 1) then 
		colour = "red"							--changes colour of gamepads
	elseif (padnum == 2) then 
		colour = "yellow"
	elseif (padnum == 3) then
		colour = "green"
	elseif (padnum == 4) then 
		colour = "orange"
	end

	if (controller.A) then
		gui.drawbox (cx + 25,cy,cx + 28,cy + 3,colour)	--other buttons
	else
		gui.drawbox (cx + 25,cy,cx + 28,cy + 3,"black")
	end

	if (controller.B) then
		gui.drawbox (cx + 20,cy,cx + 23,cy + 3,colour)
	else
		gui.drawbox (cx + 20,cy,cx + 23,cy + 3,"black")
	end

	if (controller.start) then
		gui.drawbox (cx + 14,cy + 1,cx + 18,cy + 2,colour)
	else
		gui.drawbox (cx + 14,cy + 1,cx + 18,cy + 2,"black")
	end

	if (controller.select) then
		gui.drawbox (cx + 8,cy + 1,cx + 12,cy + 2,colour)
	else
		gui.drawbox (cx + 8,cy + 1,cx + 12,cy + 2,"black")
	end	

	if (controller.up) then
		gui.drawbox (cx,cy - 3,cx + 3,cy,colour)
	else
		gui.drawbox (cx,cy - 3,cx + 3,cy,"black")
	end

	if (controller.down) then
		gui.drawbox (cx,cy + 3,cx + 3,cy + 6,colour)
	else
		gui.drawbox (cx,cy + 3,cx + 3,cy + 6,"black")
	end

	if (controller.left) then
		gui.drawbox (cx - 3,cy,cx,cy + 3,colour)
	else
		gui.drawbox (cx - 3,cy,cx,cy + 3,"black")
	end

	if (controller.right) then
		gui.drawbox (cx + 3,cy,cx + 6,cy + 3,colour)
	else
		gui.drawbox (cx + 3,cy,cx + 6,cy + 3,"black") 
	end


end

function mouseover(boxx, boxy)						--checks if mouseover

	if keys.xmouse >= ( boxx - 5 ) and keys.xmouse <= ( boxx + 30 ) then

		if keys.ymouse >= ( boxy -3 ) and keys.ymouse <= ( boxy + 21 ) then

			return true
		end
	end
end

function inrange(upper, lower, testval)         -- checks if tastval is between upper and lower. If not, it truncates it.

	if testval >= upper then return upper

	elseif testval <= lower then return lower

	else return testval

	end

end

function everything()

	keys = input.get()

	if (text == 1) then
		
		if (FCEU.lagged()) then		--flash lagcounter red if lagged, otherwise green.
			gui.text (ex,ey + 9,FCEU.lagcount(), "red")		
		else
			gui.text (ex,ey + 9,FCEU.lagcount(), "green")
		end
	
		if (movie.mode() == "finished" or movie.mode() == nil) then
			gui.text (ex,ey,movie.framecount(), "red")
		else
			gui.text (ex,ey,movie.framecount())
		end

	end

	
	if keys["numpad5"] then text = 1 end			--enable 1-4 and text using and numpad 1-5
	if keys["numpad1"] then pad1 = 1 end
	if keys["numpad2"] then pad2 = 1 end
	if keys["numpad3"] then pad3 = 1 end
	if keys["numpad4"] then pad4 = 1 end


	xmouse = inrange(240, 16, keys.xmouse)			--limits x and y mouse position to be on screen

	ymouse = inrange(225, 11, keys.ymouse)			--so we can't drag items off the screen.

	xmouse2 = inrange(241, 10, keys.xmouse)

	ymouse2 = inrange(223, 16, keys.ymouse)

	if keys.xmouse >= ( ex - 10 ) and keys.xmouse <= ( ex + 40 ) then		-- test if mouse is over text

		if keys.ymouse >= ( ey ) and keys.ymouse <= ( ey + 40 ) then

			motext = true
		else
			motext = false
		end
		else motext = false
	end
	

	if mouseover(pad1x, pad1y) then			-- checks if clicked, or middle clicked

		if keys["leftclick"] then
			pad1x = xmouse - 13
			pad1y = ymouse - 8
		elseif keys["middleclick"] then
			pad1 = 0
		end
	
	elseif mouseover(pad2x, pad2y) then

		if keys["leftclick"] then
			pad2x = xmouse - 13
			pad2y = ymouse - 8
		elseif keys["middleclick"] then
			pad2 = 0
		end

	elseif mouseover(pad3x, pad3y) then

		if keys["leftclick"] then
			pad3x = xmouse - 13
			pad3y = ymouse - 8
		elseif keys["middleclick"] then
			pad3 = 0
		end

	elseif mouseover(pad4x, pad4y) then

		if keys["leftclick"] then
			pad4x = xmouse - 13
			pad4y = ymouse - 8
		elseif keys["middleclick"] then
			pad4 = 0
		end

	elseif motext then
		if keys["leftclick"] then
			ex = xmouse2 - 10
			ey = ymouse2 - 16
		elseif keys["middleclick"] then
			text = 0
		end
	end	

	if (pad1 == 1) then drawpad(1,pad1x, pad1y) end					--draw pads
	if (pad2 == 1) then drawpad(2,pad2x, pad2y) end
	if (pad3 == 1) then drawpad(3,pad3x, pad3y) end
	if (pad4 == 1) then drawpad(4,pad4x, pad4y) end

end

while (true) do

pad1x = 10
pad1y = 200
pad2x = 60
pad2y = 200
pad3x = 110
pad3y = 200
pad4x = 160
pad4y = 200
ex = 200
ey = 200
pad1 = 1
pad2 = 0
pad3 = 0
pad4 = 0
text = 1

	while (true) do 

		gui.register(everything)	
		FCEU.frameadvance()

	end
end
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Edited out everything, because it was too big. see my next post
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
What's even worse is that these people seem incapable of recognizing that there's a huge financial incentive by large energy companies (among others) to ensure that there never is a comprehensive policy to combat climate change.
Ad hominem circumstantial points out that someone is in circumstances such that he is disposed to take a particular position. Ad hominem circumstantial constitutes an attack on the bias of a source. This is fallacious because a disposition to make a certain argument does not make the argument false
I got this from wikipedia (sue me). You seem to have fallen into the trap of ad hominem. So did all these people who believe that scientists are being paid to create a climate change hoax. Let's just say that in a theoretical world, billions of jobs depend on the belief that climate change is real. Now let's say that these people will actively defend climate change to keep their jobs. They will always say that climate change is real whether or not it really is in this fictional world. However, because their claims are independent of climate change, their claims that climate change is real cannot be used as evidence for either side of the argument. In reality, Climate change doesn't give a shit whether or not you believe in it. It's there or it isn't, and whether people have interests in believing it is irrelevant to whether it exists.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
I don't know about you guys, but I thought it was fairly common knowledge that we are being manipulated by various different groups. I also thought that most people can recognise when and how they are being manipulated by advertising or whatever. Personally, at school, I was taught how to identify techniques used to influence viewer or reader responses in advertising, documentaries, feature articles, and other forms of media. For example I was taught how to spot techniques such as selection of detail in expository texts, I was taught how to spot phrases such as "leading expert" "world community" and "possibly billions of lives" (as an example taken from Moozooh's post above) and be able to identify what they are trying to achieve in the context of an article. These are some of the things I learned in my regular high school education. Undoubtedly, most of you guys know this stuff too. EDIT: Pirate_Sephiroth is right in this respect. Expository texts carefully construct "experts" to seem more plausible than regular people off the street. They don't even have to be important for an audience to believe them. the next time you watch a current affairs program, look out for this. It's blindingly obvious once you've seen it the first time. Also, I'd like to note that sometimes, the media presents experts so that we assume the experts believe in opinion A, when in reality, they believe in opinion B. So in reality, the expert, or person of authority doesn't even need to say something in order for the audience to believe it. I wanted to say this because it means that people of authority sometimes don't get their own way either :P
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Well, suppressing is the wrong word, I think. Ignoring is more like it. In the US it's particularly bad because the mentality is to show you "both sides" of the issue (as if there are only two).
I have no real evidence to support what I'm about to say, but my feeling is that this is the mentality in a lot of places, not just the US. The video that Rhebus provided showed the example of theists vs evolution, which is the example I would have used. Sometimes when I'm bored I look for random forums who hoplessly continue this debate, which would indicate that the "two sides" mentality is an international phenomena, since it occurs on international forums. Pirate, I'm not sure I fully understand your views; when you say reason is easily overruled by imagination, does that mean reason is the negative value because it means noone has imagination or choice? or do you mean that imagination is the negative value because it means that people will lack the ability to critical think? or is it something else. I thought that was a little ambiguous.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Hmm maybe you're right. Joe average would see pop culture's representations of corporations to be like you said: "hilariously auful Hollywood thing". But then I watch this and I think that the youtube clip portrays a similar representation. The video doesn't really provide examples of any irresponsible corporate behaviour, but it does portray corporations as an omnipotent, evil entity who displaces people because it's easier and who destroy any individuality. My point was that even though the media's representations are not necassarily accurate, no-one can say that they are suppressing that sort of information.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
Yeah, I knew from the start my post was flawed. Admittedly I tried to use a satirical tone, but it obviously didn't work. Personally I know the advantages/disadvantages of capitalism to socialism in Marxist theory. Personally I think socialism can work well if done right, as shown in the video. (people get jobs based on passion instead of capitilistic motivation, equality, shared resources ect. are all good things), However because there are so many negative connotations with communism, it's just so easy to insert a smart alec comparison to North Korea or something. Personally, whether or not this video does or doesn't support Marxism is irrelevant. The main point I was trying to send across was that yes, we do have problems with our system, yes we can change it, but yes, everyone does know those two truths. People aren't stupid but if you think that, or imagine that people are somehow less critical and more biased than you are, you are subject to the introspective illusion. There are no secrets with capitalism. If you didn't think that large corporations acted purely (or almost purely) for financial gain then you are sadly mistaken, but pretty much everyone knows this. In fact media in popular culture have perpetuated this claim as well (for example Jame's Cameron's Avatar, or the International) not to mention the numerous other forms of media. http://www.xkcd.com/610/ Secondly, the video says that it promotes critical thinking and then tries to force feed us it's own ideologies. Of course we're going to be resistant to that sort of thing. Noone likes to feel that someone is trying to force feed them an opinion, but then again, isn't this what the video is trying to promote? We can't mindlessly accept the truths presented in the video: that defeats the point. If we are to agree with the video, then we have to do it conditionally. "Okay, so I can agree that capitalism is flawed, but I can also see that socialism has flaws too. I can agree that people should be more curious, but I don't agree that no-one can think at all". In a way, I guess this video did enhance my curiosity slightly, but not in the way they wanted. Also, I just want to say, it's one thing to have a viewpoint on these subjects, but it's another to actually do something about it. Go to a protest. Start a petition. Exercise your freedom to do something, let your voice be heard, but don't let crappy internet videos influence your opinions. Make some for yourself dammit! Is my post critical enough for you? Do you believe with everything I just said? If you answered "no" to any of those questions then you can critically think.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
It's easy to determine the minimum time it takes for a game to respond to input, so this shouldn't be a problem. Try a large range of inputs and then determine the shortest time the game takes to respond, then the algorithm could take far fewer computations because you wouldn't need to brute force anything initially. You could theoretically process the video in linear time, if every input corresponded to a different rendered frame or piece of music. However, if it doesn't then this quickly becomes and exponential algorithm. Let's take an example: a cutscene or loading screen. The algorithm would then have a large period of uncertain input. If any luck manipulation or something required, then there would be ensuing problems. But for simple games that don't respond during periods of uncertainty, then I can see such a technique being theoretically possible.
Measure once. Cut twice.
Experienced Forum User, Published Author, Experienced player (618)
Joined: 11/30/2008
Posts: 650
Location: a little city in the middle of nowhere
I don't know about you guys, but I thought this video was about Marxist theory. Seriously, it highlights virtually every major flaw with capitalism compared to socialism. Poorer people displaced out of new developing parts of a city and then complaining about the lack of opportunity to get rich? In a socialist society, you would get a job and housing best suited to you. The valedictorian talking about the fact that capitalistic motivations reduce choices and convert people into robotic libraries or whatever? again, fixed with socialism. Depopulisation and equality? Yoko Ono certainly believes that if everyone were given equal treatment, then there would be no overpopulation issues. again, in socialism, everyone would get the exact same food, housing ect. Okay, maybe it is and maybe it isn't about Marxist theory, I don't exactly know much on the subject, but this is my critical view on this video, and isn't that what this video is trying to promote? critical thinking? Or is it propaganda like the very stuff that they're trying to put down. it's hypocritical. Secondly, this video contains a lot of false information. Secretive goverments? Yeah, does freedom of information ring any bells? In reality, people love reading about secretive governments or conspiracies, it makes great news. In my opinion, the idea of a secretive government is one perpetuated by the media rather than suppressed by it. If anything, the communist countries are the ones which censor you more anyway (North Korea anyone?) and isn't that the idealistic form of government that this video is trying to promote? Anyone can study philosophy or mathematics or science, and it isn't prohibited. Anyone who has studied high school English should be able to spot any techniques used by media to present themes, values or intentions: there are no secrets about the construction of various media. However, this video assumes that nobody has critical thinking ability, or the ability to understand the construction of corporate media. The people who made this video have obviously never heard of the introspective illusion, or they would never have said half the things they did. All in all, even though I only watched the first part, I think it's complete BS
Measure once. Cut twice.