Joined: 7/2/2007
Posts: 3960
Apologies; my 'Net connection went down for a bit earlier, apparently resetting my IP address in the process. I've updated my account with DynDNS, so for now the file is accessible again. I've also uploaded it here: http://dehacked.2y.net/microstorage.php/info/967098138/RECCA.1.fcm Thanks for the link with the game info; a lot of that I knew already (and the scoring information isn't particularly relevant since I'm not aiming for score), but the sprite limit for the weapons is very useful to know. Of course, the boss strategies are written with a non-TASer in mind. :) Edit: stylistically, I prefer to shoot enemies from further off, for three reasons: 1) I can shoot before they show up on the screen, thereby heightening anticipation 2) I can string up combos (e.g. killing six enemies with a single laser shot) 3) I can show off what the different weapons do better I know that this incurs extra lag, but the game's so fast anyway that I don't think it seriously detracts from the performance. It is of course slower, and I'm aware that most shmup TASes are all about lag reduction because that's pretty much the only way to make it into a "speed" run...but in this case I think it'd make for a less entertaining run in the end if I just killed everything right in its face as soon as it appeared. I'll check out Zanki mode, though. Suicide bullets are always fun. :) Edit, again: holy cow, suicide bullets. Suicide bullets that are only visible every fourth frame. Recca may not lag much, but it flickers horribly. This completely changes the nature of the run, of course; now my job is to play daredevil. Well, more than I was originally.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Joined: 7/2/2007
Posts: 3960
Okay, instead of making a third edit to my previous post, I'm just going to make a new one. Here's a first-pass WIP, up to the first boss, on Zanki mode. I let even more enemies live this time; I think I need to switch to the F weapon to be able to get the ones I missed early on, and for the last wave, just plan things out better. Having to dodge all those bullets makes pathfinding tricky. Finally, I wasn't able to show off the B subweapon this time. But there'll be a much better opportunity for that in the second part of level 2, when the level scrolls backwards. On the plus side, the boss died much faster. http://dehacked.2y.net/microstorage.php/info/233093959/RECCA.5.fcm This is looking like one of those TASes that is mentally exhausting to watch - there's just so much going on in every frame. Edit: uploaded to YouTube: http://www.youtube.com/watch?v=f0X3sBX5n20 For some reason, my sound's really messed up. Not a problem when I'm using frame advance, but it makes playback unpleasant.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Emulator Coder, Former player
Joined: 8/12/2007
Posts: 102
That was crazy. I've played Recca but never knew about Zanki mode.
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Haha, wow. Zanki mode is indeed harder to watch, but so damn worth it!
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Joined: 7/2/2007
Posts: 3960
Stage 1 complete / YouTube Right now I'm just doing a quick pass through the entire game; this is definitely not submission-quality material here, but it's laying the groundwork for my second pass, which, I hope, will be. I'm not convinced that it's possible to kill every enemy - the second half of stage 1 has two enemies with lots of hitpoints, combined with those twin streams of enemies on opposite sides of the screen that Recca so dearly loves. However, I can definitely kill more than I have. The F primary weapon is nearly useless since it has such a slow rate of fire. H is worse, of course, as it only fires one weak projectile at a time. That means that, aside from demonstrating every weapon in the first half of stage 1, I'll be sticking to V, B, and L. I'll need to experiment with the bomb attack some, too; the big trick is waiting the 128 frames needed to charge it up - in the meantime I can only use subweapons, which are a pain to use because they don't seem to fire consistently and they flicker a lot. Primary weapons are always at least partially displayed (usually, one half of the bullets fired are displayed on any given frame), but secondaries show up something like every fourth frame. Anyway, if I can manage to charge up the bomb attack, it can take a lot of heat off me, destroying multiple waves while I can focus on another part of the screen. With your speed down to the second-slowest setting, you can jink back and forth to get the maxed-out L weapon to consistently hit a single spot. I used this technique on the second boss - I discovered it while trying to dodge some of the bullets he spews (which, I note, are not present on normal mode). That may make L my best boss-killer; the big question is how its power compares to its rate of fire, since B and V can be turbo-fired assuming there isn't too much lag. Annoyingly, the sheer quantity of death bullets created when a boss dies makes it basically impossible to play daredevil - there's no room between the bullets to do any dancing. I guess the developers decided to make things difficult for the sane players, who killed the boss from a distance, which in turn makes it impossible for the insane players to have a little fun. Oh, well.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Player (150)
Joined: 11/27/2004
Posts: 688
Location: WA State, USA
Beautiful, wonderful chaos. :) If this ever ends up getting published, the video should be encoded with the sprite limit disabled.
Nach wrote:
I also used to wake up every morning, open my curtains, and see the twin towers. And then one day, wasn't able to anymore, I'll never forget that.
Banned User
Joined: 12/23/2004
Posts: 1850
Something interesting would be a Lua script (or whatever the hell somebody feels like doing) that displays all the bullets/sprites. Surely they're all in memory somewhere... In any case, I think something that aims purely for "max% kills, highest score" would be a lot more interesting to watch. It sucks seeing so many enemies getting free rides out :( (And switching weapons randomly is weird too. H is so useless yet it's used in this run...)
Perma-banned
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
One thing I don't understand, btw, is why your movie starts from a savestate.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Joined: 7/2/2007
Posts: 3960
Moozooh: Because I'm clueless when it comes to recording vids. I didn't see anything about recording from power-on in the FCEU help; how exactly does this work? I know it's possible, but my experimentation hasn't shown how to do it. I'm also going to need to record the reset at the start of the game so I can access Zanki mode. XKeeper: I'm definitely going to aim for 100% kills in the "real" run; right now I'm mainly just trying to identify potential problem spots and experiment with approaches to see what works, what doesn't, and what works but could be more entertaining. Finally, I'm switching weapons early on because I can without letting enemies go (obviously the use of F later in the movie was a mistake) and I want to show what every weapon does. Plus, switching weapons means that I can't keep using the same strategy over and over again - it forces some variety into the gameplay. As the gameplay heats up, I'll have to restrict which weapons I use, but even then I'll try to switch (probably between B and L for the most part). Unfortunately, max score would involve finding the optimum loadout and then sticking with that for the entire game, as you get a nontrivial score boost from taking the same powerups over and over again. You also get score bonuses for leaving the bomb attack charging and for absorbing bullets; I think actually your best approach, score-wise, would be to only use the secondary weapons to kill things, and to absorb every single death bullet with secondaries / the charged bomb. Every weak enemy is worth 100 points and every absorbed bullet is worth 100 points, and dead enemies spawn 4 bullets each (larger enemies spawn more, with bosses spawning a really ridiculous quantity). There's a commandline argument that supposedly removes the 8/row sprite limit; I'll have to see how the game looks with that turned on.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Banned User
Joined: 12/23/2004
Posts: 1850
Derakon wrote:
Xkeeper: [blah blah blah blah]
Touche. But yes, max% kills is a good goal to aim for.
There's a commandline argument that supposedly removes the 8/row sprite limit; I'll have to see how the game looks with that turned on.
The NES still has a 64-sprite limit. The 8-per-scanline limit has almost no effect in this game.
Perma-banned
Joined: 7/2/2007
Posts: 3960
While I was at work, the missed enemies in stage 1 started annoying me more and more...so when I got back, instead of carrying on with stage 2, I started over. Microstorage / YouTube This is a much better run, all told, than my previous effort. Which makes sense - the first time around, I was still figuring a lot of things out. And I'm by no means an expert now, but I'm also not a total newbie either, and that helps a lot. I've figured out how to branch a movie, I'm making regular backups (wiping out 1000 frames of work once was quite enough), and I'm thinking a little less like a traditional player. A few points: * Does this one start from a savestate? How would I tell, anyway? I started up the emulator, paused, did a hard reset, and then started the movie recording; my hope is that that will make for a "clean" movie. * Proper use of the subweapons is critical - they let you shoot where no other weapons will. I get good mileage out of every subweapon type except for F in this video, oddly enough. F is just too redundant with your normal weapons. I'll use it later. * I did have a point here on how the boss fight was a bit slower because I was using B instead of V, having concluded that I needed either B or L to get 100% kills because of the waves right before the boss (and L was slower than B - I checked). But let's hear it for doubting myself: I went back and cleared the last wave with V without missing any enemies, and improved my bossfight by 27 frames! V is ideal for bossfights because it fires 5 projectiles every other frame, and when they first appear they're practically stacked right on top of each other. B has a constant spread and L has a whole bunch of problems - slight spread, slow rate of fire, and the projectiles appear next to your ship instead of ahead of it. I'm thinking V is my bosskiller now, which is annoying because it makes killing waves much harder. EDIT: correction, the boss fight is some 33 frames slower in the new version, despite identical loadouts. However, it starts 60 frames earlier due to less lag. I'll redo the bossfight tomorrow. I'm not sure what went wrong here. * I stayed on speed level 3 (the starting speed) for most of the run, with a mad dash at speed level 5 (max) to grab the L weapon early on so I could 100%-kill some waves (level-2 V doesn't compare to level-1 L for killing tightly-packed waves) before downgrading again. I figure that later on, I'll be spending more time at max speed, which should let the TAS nicely escalate as I get deeper in. Alternatively, I'll have to stick at speed-5 for the rest of the run, in which case this section is just fooling people into thinking the game isn't all that fast. :) * I tried to be more aggressive and risk-taking. There are limits to what can be done when I need to fire projectiles as early as possible so they can kill part of a wave while I fly over to the other side of the screen. Still, I spend more time closer in in this run, and I try to kill more enemies from unexpected angles. * How close to submission-worthy do y'all think this is? Obviously it's a lot better than my previous attempt, but how much more does it need to improve? * Edit: how do I tell what my rerecord count is? Presumably it's somewhere in the movie file, but is there an easier way short of doing a hex dump of the file?
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Derakon wrote:
how do I tell what my rerecord count is?
Use your own link. :) I don't know how it happens on OSX, but there supposed to be a movie creation dialogue with at least two options to choose: current frame and power-on (clean SRAM). If there isn't one, I know how aggravating it might be to have no sensible GUI to work with. :\ Apparently, you won't be able to submit the movie if it doesn't start from power-on, since that is against the rules. However, it might be that you won't have to redo the stage from scratch if the game's RNG isn't affected by SRAM. By the way, you're using only frame advance now, right?
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Joined: 7/2/2007
Posts: 3960
Hah. I didn't think to check that; I assumed it was just a download link. :) Fewer rerecords than I would have thought; only a little over two per second. Eh, what matters is the resulting movie. There's no official Mac FCEU; I compiled from the same source that the Linux version uses, which apparently means no GUI widgets whatsoever. The only documentation I have is this page, which doesn't mention anything about recording movies save that I use shift+F5 to start recording and shift+F7 to playback (and shift+number to select movie slot). Maybe someone in the FCEU subforum knows. And yes, I'm only using frame advance right now. I was only using frame advance in my previous attempt too, for that matter.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Joined: 7/2/2007
Posts: 3960
Yesterday on IRC DeHackEd taught me to hex-edit movie files, which is awesome. So my movie now begins from a hard reset, as it should. The first time I fought the stage 1A boss on Zanki mode, I took him down in 217 frames. This feat proved nigh-impossible to replicate; every attempt I made afterwards was slower by 20-30 frames at the very least. Finally I went back and re-watched my first attempt, and realized that I was much less in-your-face about it - instead of clipping the boss's nose continually, I was about one ship's length away most of the time. Re-using that strategy, and optimizing the fight so that I always fired on the first possible frame, added about 450 rerecords to the fight...and killed the boss in 208 frames! Woo! Lag, and projectile throttling (my weapon won't fire if it has too many sprites already onscreen), is ridiculous on that fight. Watching my input, it looks something like this: BB--BBB------B-BB----BBB-----BB----BBB--------BB-- I also compared my current run to the non-Zanki-mode run. The boss fight in that run starts on frame 4381 while in my current run, it starts on frame 4708. That's about 370 frames of lag due to all the bullets. I really don't want to try to optimize for lag in this movie; it'd be a burning hell of luck manipulation (to cluster bullets) and subweapon choice (to absorb bullets). At least it doesn't hurt the movie too much.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Former player
Joined: 8/31/2009
Posts: 236
Sorry to bump, but it's for content. Here's a TAS of Recca up to the first boss in Time Attack, killing enemies at mach speed. Also, I'm surprised nobody has done a full game run of this.
Joined: 7/2/2007
Posts: 3960
I think the big problem is that a 100%-kills run of the normal game may not actually be possible, given how often the game throws multiple streams of enemies at you from opposite sides of the screen with no convenient crossover points. I got bogged down in the second half of level 1 from trying to kill everything, though granted I was also for some reason trying to keep the ship's speed as low as possible (I guess to make it harder?). I also tried to show off the different weapons as much as possible, which made planning marginally more difficult in the first half. Weapon switching got more or less ditched in the second half due to needing efficient enemy killing. There's the secondary issue of managing lag in Zanki mode, which you'd pretty much have to use just because it makes the movie look so damn awesome. Death bullets = very yes. Also booooo, Time Attack is easy. :p Nice work, though. If you want to make a full run, go for it!
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Former player
Joined: 8/31/2009
Posts: 236
Yeah, I know it's easier, but I just wanted to demonstrate some speed. I didn't want to do Normal Game though since you had a couple WIPs of it, so I did Time Attack.
Joined: 11/4/2007
Posts: 1772
Location: Australia, Victoria
I'm very happy to see there is an actual interest in this game again. May I please ask this question however, is it at all possible to boot Zanki mode into the Time/Score attack modes? All my attempts ended in failure, though, I have not tried using the level select in that fashion yet.
Joined: 10/24/2004
Posts: 60
Location: Quebec
FCEU Mac Can anyone point me where to download it? It is the reason why I'm no more tasing. I'd love to play again with this game
Joined: 7/2/2007
Posts: 3960
I had to compile my own version using the Linux source code to do the WIPs I made, and I got tired of not having a decent UI pretty quickly. Plus apparently doing memory watch involved things like dumping the contents of memory to a file each frame and writing your own little scripts to scan it for desired values (at least, that's what IIRC Bisqwit told me he did when he wanted to watch memory values). If there's a supported version of FCEU/FCEUX for OSX, I'd love to hear about it.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Joined: 7/2/2007
Posts: 3960
Haha! I didn't think it was possible, but such is the power of TASing that I did it anyway! Stage 1 complete with 100% kills Youtube (View with Old PPU; New PPU apparently causes a desynch) Odd...Microstorage says I start from reset; FCEUX says I start from power-on. Oh, well. This isn't remotely submission-quality. There's a bunch of missed shots and questionable style decisions; the bossfights are also entirely unoptimized (I just park in front of their weak points and hold the fire buttons down). Lag is also pretty absurd (over 25% of the frames are lag frames), but I'm not really going to worry about that; lag is directly proportional to how much stuff is going on, and the more stuff going on, the better, says I. Especially since I'm specifically TASing a mode that throws more stuff into the game. Speaking of which, playing around with the bullets generated in Zanki mode is tricky, for several reasons. First off, the bullets flicker like crazy; they seem to get drawn at most half the frames. I don't know what kind of algorithm Recca uses to decide what to draw, but it's pretty inconsistent. Turning off the 8-sprites-per-scanline limit doesn't change this. Secondly, they're generated in random locations near the dying enemy, which means that sticking close to enemies gives me a good chance of having a bullet spawn on me, which isn't much fun. Thirdly, if I'm saving up for a bomb attack, which I have to do a lot to get full screen coverage, then bullets that don't spawn right on top of me have no chance of hitting me unless I back onto them; the bomb charge and the two options create a very effective shield. Hitboxes seem to be generous in the player's favor in general. Unfortunately I didn't get as much of a chance to show off the different weapons as I would have liked. L is mandatory for killing off long strands of enemies: it can take out an arbitrary number of targets along a line, while V and B can at best take out 5 and 4 respectively (and will tend to do worse); H and F aren't even worth considering. L is also useful for firing off-bore, since it has limited homing capability. I did get a chance to use all of the option modes in this WIP, though -- enough to make it clear how badly R and B suck compared to the others. For future levels I suspect S and F will get the most play; C might come in if I have some long-range aimed shots to make. I tried to use RAM search to find the boss health, but was unsuccessful. My approach was to set the comparison operator to "less than" and then repeatedly search after shooting the boss, but nothing I got seemed to correspond to anything, regardless of the word size I tried. Any advice/assistance here? Also, normally I'd use VLC to do the file conversion, but it's swapping RGB into BGR -- looks pretty cool, actually, but of course it's wrong. I used iMovie to make this encode; it works, but it has a very lengthy import process before it can start converting to a different format. Also also, what's the proper procedure to handle 30Hz flickering sprites so that they remain basically visible on YouTube? I set the framerate to 59 FPS when exporting from iMovie.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Skilled player (1828)
Joined: 4/20/2005
Posts: 2161
Location: Norrköping, Sweden
Looks good! It was very entertaining already, and I think there's still quite a lot of untapped potential, such as moving around close to bullets a la Gradius. I played around with this game too some time ago, and the way I solved the flickering sprites issue was to make a lua script draw a box around all enemies and bullets. If you use the gui.register feature you won't have the 1 frame behind issue either, so this solution worked fairly well. Here's the script if you're interested (it's a bit messy and not very optimized, but it should give you the idea):
local function box(xcenter,ycenter,width,height,xoffset,yoffset,color)

left  = xcenter-width/2+xoffset
down  = ycenter+height/2-yoffset
right = xcenter+width/2+xoffset
up    = ycenter-height/2-yoffset

	if (left > 0 and left < 255 and  right> 0 and right < 255 and down > 0 and down < 224 and up > 0 and up < 224) then
		gui.drawbox(left,down,right,up,color);

	end;
end;

while true do

local function displayer()

bulletx = {[0] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
bullety = {[0] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

for k=0,12,1 do

if memory.readbyte(0x42C-k)<255 and memory.readbyte(0x3CC-k)==0 then box(memory.readbyte(0x3EC-k), memory.readbyte(0x42C-k), 8, 8, 0, 0, "red") else gui.text(10,10,"") end

end

for k=0,30,1 do

if (memory.readbyte(0x4F0-k)>0 and memory.readbyte(0x5F0-k)==1) then box(memory.readbyte(0x4F0-k), memory.readbyte(0x570-k), 8, 8, 0, 0, "green") else gui.text(10,10,"") end

end

end
gui.register(displayer)

   FCEU.frameadvance()
end
Perhaps there is a more elegant way to solve the flickering sprite issue. Oh, and the boss' HP is stored in RAM address 05D1.
Player (127)
Joined: 3/23/2012
Posts: 296
Location: In X position=50 y position=20
That is astonishing. I made a WIP on normal attack and found that V is best weapon for 1st boss. L can swipe an enemies in straight line so 1 shot is enough. F causes a lot of lags. B might work on second boss. H is important on down scroll. This might be even better than zanac. It seems more like gun nac.
Jungon wrote:
if I was to have a Tool-Assisted real life ... I'd.. I could abuse death, just to see if it saves time ..
Post subject: Summer Carnival '92: RECCA (would it be allowed?)
Baka94
He/Him
Joined: 2/17/2014
Posts: 39
Location: Finland
So, I was thinking of making a TAS of RECCA, but I'm not sure if it would be allowed to the site. Here are some things I have figured out so far (some of them are obvious):
    -RECCA lags A LOT. Lag reduction is important. -Homing shots lag more than ones that are on a fixed path. -Releasing a bomb rarely lags since it is a background graphic instead of a bunch of sprites. -Clearing out bullets (with a bomb whether it was released or held charged) and enemies usually reduce lag quiet a bit. -Flailing lasers usually lag a lot. -Casually playing, from power on to the start of the stage 2 yielded over 2000 lag frames according to FCEUX. -Due to 64 HW sprite limit on NES, some enemy waves don't spawn until there is enough space for them. -Bosses can be killed pretty quickly with bombs. -The first bomb needs to be charged beforehand to make sure it's fully charged before the boss can be damaged.
I'd like to hear your opinions on whether RECCA would be allowed or not.
MainLoop: NOP LDX #$01 STX main_loop_done VBlankWait: LDX main_loop_done BNE VBlankWait JMP MainLoop
Site Admin, Skilled player (1255)
Joined: 4/17/2010
Posts: 11495
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Go triple merge! http://tasvideos.org/forum/viewtopic.php?t=4834 http://tasvideos.org/forum/viewtopic.php?t=2314 I see no reason to disallow Recca, even if you mean the hard mode cheat code. Also, enemies not spawning looks more like a limit on concurrent objects in memory. Finally, Randil posted some cool scripts in the first thread.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.