Posts for Dromiceius


Experienced Forum User
Joined: 10/3/2005
Posts: 1332
It usually follows that a fun game makes good TAS material, but I think X-Com is a noteworthy exception. X-Com is about strategy, managing risk, and trying desperately to keep your soldiers from being killed after you develop emotional attachments to them. Unlike with most games, there's no quickload for when bad things happen. You don't go back to the last autosave when you suddenly get killed. There are few things you can't recover from, so the idea is to roll with the punches. Any kind of savestate abuse pretty much kills the drama, kind of like editing a movie so that nothing bad ever happens. Watching a speedrun is kind of like skipping straight to the end of Citizen Kane. Maybe there's novelty value in it, but it completely misses the point.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
That reminds me, I forgot http://thedailywtf.com I mostly visit for Error'd.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
L-Spiro wrote:
#7 is also based on simplicity,
The answer isn't while(--iTotal >= 0) is it?
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Lurking on the Something Awful Let's Play subforum seldom disappoints. In particular, CannibalK9's run of The Void defies description. http://feitclub.com is of general interest to gamers and cool dudes of all types. You're all cool dudes, aren't you? http://www.critical-distance.com is a videogame criticism meta-blog. http://tigsource.com reports on independent game development. http://planet.lisp.org/ and http://lambda-the-ultimate.org/ pertain to Common Lisp, and the latter to functional programming in general. I also like being read to: http://jclab.wordpress.com/ http://www.miettecast.com/ Edit: and SpokenVerse if you expand your definition of "blog" to "anything with an RSS feed."
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
I don't imagine this kind of functionality would appeal to the faint of heart anyway, so standard streams and SCM-style commands are probably the way to go. The visual component would entail naming the branches as the user creates them, via stdin. In addition to creating, checking out, and deleting branches, there would have to be a "list" command that shows the entire tree, with names, framecounts, and possibly other metadata to show, for instance, paths through the tree that sync properly, or other notes the TASer takes. Maybe a -v option for verbosity? At least, that's how I'd want to use it. A graphical, mouse-based interface has never been my cup of tea. ...On the other hand, if Gens has mouse support (I seem to remember Nitsuja implementing such at some point) then you could conceivably do the whole thing in Lua, maybe having a directory representing a movie-tree, which would contain the savestates, as well as a metadata file describing the state hierarchy. Implementing that as a plugin, rather than baking it into the emulator it might be an interesting direction for emulator development on the whole... but now I'm ranting. Incidentally, sorry for not responding for so long; it was obscenely late when I wrote my last post, so I forgot having posted it until a couple hours ago.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
A Sims TAS would be awesome. Get the best career, max out everything, build an impossibly huge mansion, romance all the neighbors and build a collection of them in the obligatory dungeon. The run ends when the player sets fire to the house and moves to Mexico with the insurance money.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
While not completely unsuitable, I'd say that Rampage and Galaga are two exceptionally bad games to TAS. They're repetitive, endless (IIRC), and most of the action could be handled optimally by a fairly simplistic bot. They also lack aesthetic appeal, having almost no music or storyline. I guess you could try to define a genre of 80s arcade game on those lines.
DeFender1031 wrote:
Yeah, that's exactly what I thought of too... But I was thinking more a sokoban style game.
Isn't Kwirk basically Sokoban?
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Bisqwit wrote:
QBasic** stores the program internally in a tokenized format for fast interpretation and small memory use, and as part of it, all redundant whitespace within* legal statements is deleted. For rendering, the statement is reconstructed with built-in prettifying rules.
Yeah— now that you mention it, I remember a certain TDWTF article that touched on an interesting application of QBasic's tokenization. I'm just surprised. I logged quite a few hours writing QBasic in junior high, but remember nothing like that. Then again, I never learned to use TYPE, DIM, or SUB properly, either. >_>
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
I was more surprised by the fact that QBasic was doing code folding and some kind of prettifying. Maybe I should do Pong in Emacs + Common Lisp. :p
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
I tried whitelisting tasvideos just now, but glancing at the source it looks like Google "needs" to run some Javascript on my machine... That's not gonna happen, even if it means no "donkey kong anime soundtrack" for me. I think I'll just donate $5 to the site next time I have some money in my Paypal account. That's probably more than the site would ever get through clicks, if I ever actually clicked on ads.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Voted no, same reason. It may be a homebrew, but it looks like a bad hack. It's also a game/series for which we already have many polished TASes of superior, official titles.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Careful moozooh. I have a feeling his dad can beat up your dad.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Hax teh src. Surely the "problem" is that phpBB has something like
if(pollChoices > 10) { return STUPID_ERROR_MESSAGE; }
Right?
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Family Feud was cute, but I got more laughs out of the upside-down Raidens and symmetrical violence of MK3.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Apparently there's a button code you can enter that turns the referee into a dog... which only raises the question of why such a feature exists. I can find no explanation other than "it's a joke." Seems like a lot of work to put in just for the sake of arbitrary weirdness.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Getting a newer version of Snes9x (like 1.51) might possibly help, but using joy2key is probably the easiest solution.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
exileut wrote:
So lua scripting was added in .1.1. p0rtal_0f_rain mentioned something about creating a script to possibly bypass the hyper art crash. If I knew anything about this I would research it...
Not that any such hackery would be acceptable here, but what you could try to do, basically, is disable whatever is choking the emulator. To actually get the game working as the creators intended through Lua would require knowledge (probably profound) of how the game works, and why it crashes. If you had that kind of mojo, your time would be better spent improving emulator compatibility... But for the sake of argument, you could try pinning various blocks of memory and seeing if the emulator survives the crash. A devious and delightful hack. It would be fairly easy, and would probably look like this blob of code I barfed up just now and haven't tried to execute:
--Crash dodger script © your mom

--Set up an initial state. Whoever uses this would
--need to execute the script a few seconds before the crash happens
local mysave = savestate.create()
savestate.save(mysave)

local MAXMEM = 0xFFFFFF --I have no idea how much memory a PSX actually has.

function getmem()
    local statetbl = {}
    for i in 0 to MAXMEM do
        statetbl[i] = emu.readbyte(i)
    end
    return statetbl
end

--I assume that the memory state will be locked if the game freezes, so let's check if that has happened
function frozenp(statetbl)
    local frametbl = getmem()
    local diffbytes = 0
    for i in 0 to MAXMEM do
        if statetbl[i] ~= frametbl[i] then diffbytes = diffbytes + 1
        if diffbytes > 40 then return nil end
    end
    return true  --Very little has changed; assume it's stuck
end

local initstate = getmem()

--main loop
local BLOCKSIZE = 0xf

--Test the crash, pinning a sequential 0xf bytes of memory each time
for blockstart = 0, MAXMEM-BLOCKSIZE, BLOCKSIZE do
    local framecount = 0
    while not frozenp(initstate) do
        for pinbyte = blockstart, blockstart+BLOCKSIZE do
            emu.writebyte(i, math.random(256))-1
        end
        emu.frameadvance()

        -- supposing that the game runs for four seconds, we assume that the memory block we pinned prevented the crash, and we exit. Hooray!
        framecount = framecount + 1
        if framecount > 240 then return end
    end
end
error("If execution got this far, it means the script couldn't prevent the crash.")
Sorry if this is meaningless jargon to you. I just find the idea interesting, even though there are a bunch of reasons why even a finished version of this code wouldn't work. Still, something good may come of it. Who knows? ;)
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Being a violent old dinosaur who actually likes brawlers, my interest is very much piqued by the idea of using two of the same absurdly overpowered character to wreck the game. YouTube/DM/archive.org/Viddler encoding, anyone?
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Lord Tom wrote:
I can't really see the joy in maxing out experience levels...I guess it'd be ok as long as it was worked into the rest of run rather than finding someplace to exp up and adding minutes to the run...
This is true. Though, I'd bet that experience farming would be unnecessary, since it's easy to manipulate P-bags. Also, there are eight (six?) free level-ups from placing the crystals— a (hypothetical) glitch run might possibly exploit those for getting the most expensive levels.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
I gave it a weak Yes. I was impressed because the player character appears to have many degrees of freedom with that lightning attack, and it's used with precision. That, and the sidekick mechanics kept it out of Meh territory, if only because there was more stuff happening on the screen.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
ArukAdo proves once and for all that blocking projectiles with a sword does not work. It's pretty much a "run to the right" affair for the most part, but the minimal score tally/loading time (and the abundance of ninjas) made it altogether enjoyable. Yes vote.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
Your code looks basically correct, so you're probably making an erroneous assumption about how the game works. If I were in your shoes, I'd try commenting out the savestate.load line, and see if the snes9x.pause branch executes later than you expected. Edit: better yet, replace savestate.load with this:
gui.text(8,8, xvel .. " " .. yvel)
And frame-advance through the execution about where you expect the walljump is supposed to happen. Editedit: and of course, check the SMW wiki page if you haven't already.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
I say do both. Leveling may not be important in itself, but I think the technical problem of leveling efficiently is something anyone can appreciate. As for the bosses, I could take it or leave it. Though, one would probably fight them anyway if they wanted to get 8/8/8, so they should probably be included.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
ZeXr0 wrote:
With a big amount of memory, it should be possible with a lua script to save every frame in a file or in memory, and then if you want to rewind, you reload the previous frame SaveState. I know it would slow down the speed of the emulator, but the rewind feature might be useful for some people. I don't think it's hard to implement, and if could even be used only in certain part of a TAS where you want to try different combinaison :P Just a thought
Just what I was thinking. Specifically, one can set a toggle key using a button on one of the unused joypads. Slowdown wouldn't be noticable in frame advance, but it becomes an issue if you have to fast-forward through many thousands of frames. Being able to activate and deactivate the extra processing is a necessity. It is indeed easy to get such a thing to work on the most basic level. I've written as much myself a few times already. It's a half hour task. I think we could do better, though. A movie is linear, but a TASer's mental process is likely to be tree-shaped. Try one path through a level, then with a different weapon equipped, then again hopping through it backward, and so on. Being able to not only store in memory, but visually represent each of the branches as one would use a version control system could be an interesting project for anyone inclined to take it up.
Experienced Forum User
Joined: 10/3/2005
Posts: 1332
I'm not sure if this is up to (i.e., beneath) your expectations, but here's a video of two cats "talking" to each other, overdubbed with Tourettesguy: http://youtube.com/watch?v=urjXR8P4_Ew