Slaughter
8-bit platforms deserve a higher class of ego shooter.
CONTROLS: A to strafe / sprint / glide. B to fire. Select to switch between shotgun / machinegun. Select+B to fire rockets.
Updated | 16 days ago |
Status | In development |
Platforms | HTML5 |
Rating | Rated 4.5 out of 5 stars (14 total ratings) |
Author | Mindbleach |
Genre | Shooter |
Tags | cc65, Game engine, Homebrew, NES (Nintendo Entertainment System), NES ROM, Open Source, Singleplayer, Split Screen |
Download
Download NowName your own price
Click download now to get access to the following files:
SLAUGHTER (finalish).zip 264 kB
SLAUGHTER (hyper turning).nes 40 kB
SLAUGHTER (within sight).zip 269 kB
SLAUGHTER (halloween is cancelled).zip 274 kB
SLAUGHTER (multiplayer visual fixes).zip 323 kB
SLAUGHTER (now with levels).zip 322 kB
SLAUGHTER (christmas smoothness).zip 221 kB
SLAUGHTER (paltry july update).zip 232 kB
SLAUGHTER (ceilings and editor alpha, with ROM (whoops)).zip 212 kB
SLAUGHTER (ceilings and editor alpha).zip 192 kB
SLAUGHTER (janky multiplayer alpha).zip 186 kB
SLAUGHTER (NesDev22 compo final).zip 149 kB
NES Slaughter October alpha.zip 111 kB
NES Slaughter weapons update.zip 78 kB
NES Slaughter announcement version.zip 60 kB
slaughter-ninjapad-october.zip 220 kB
slaughter (just-in-case build).nes 40 kB
slaughter (just-in-caser).nes
slaughter (just-in-casest build).nes 40 kB
slaughter (nearly final).nes 40 kB
slaughter (tweaks).nes 40 kB
slaughter ninjapad final build.zip 225 kB
slaughter-ninjapad-december.zip 227 kB
slaughter-ninjapad-ceilings-february.zip 229 kB
slaughter-ninjapad-portals.zip 230 kB
slaughter-ninjapad-christmas.zip 295 kB
slaughter-ninjapad-withlevels.zip 296 kB
slaughter-ninjapad-halloween.zip 297 kB
slaughter-ninjapad-withinsight.zip 298 kB
Development log
- Now with levels!Jan 31, 2024
- SLAUGHTER your friends!Dec 18, 2022
- So much blood!Sep 19, 2022
Comments
Log in with itch.io to leave a comment.
Wow, super impressive :)
There is a new mapper called the MXM-1. With this mapper you are allowed more tiles than a normal NES game and you can bank switch all the time swapping in new graphics constantly. Once that documentation comes out, do a version of Slaughter with this new mapper and then you will have something looking very nice on the NES.
Part of what got this project rolling was bickering with the Former Dawn guys on reddit. They took a weird stance on what qualifies as a "real" NES game. They use the MXM-1 for gigabytes of full-motion video... but think pass-through audio like on Famicom would be cheating. If you push people about their add-on chips, they tend to end up going, 'if a Raspberry Pi streaming Mario 64 doesn't count, neither do battery-backed saves!' So I said: okay.
This game is NROM. There is no mapper. You could swap its chip for Super Mario Bros. (Or the much better-looking Micro Mages.) I doubt anyone involved still cares about that argument, but I consider the point made.
This is such an insane achievement, and it actually looks really good! (Well as good as you can with the nes' memory and resolution lol)
Incredible project! I played a little, performance and smoothness are impressive!
However, it was a little difficult to navigate the level, as I fell from higher areas, as sometimes I did not realize that you can not go there, because you can fall.
I was looking at your other projects and saw that “AT Hell's Gate” is similar in concept, but the navigation is easier, maybe because the ceiling and floor are filled with the one color, that's my first thought.
It's also difficult to collect ammunition/items, as the sprite is the same size and doesn't scale, so it's not clear whether you're approaching it to pick it up or not. It would be nice if the items were slightly larger if you go in their direction.
Also, the background noise is quite loud, a little unnerving, but I read about this bug in your comment.
In general, a very interesting project, I will follow the updates
Item scaling is harshly limited by hardware. I might add more steps for getting smaller with distance, but they simply cannot scale up, because of the sprite budget. That's why they circle in midair. The circle scales very well. If you see a tight little orbit, run to it.
Dropoff edges have distinct tiles, where any flat space ends. They're not pretty but they're there. The larger hurdle for platforming is that you can't look down. But if you're holding A, the fall speed is low enough that you can walk off a platform, and then back up back onto it.
The buzz has been fixed! Badly. The sound hardware needs 17 bytes somewhere in 0xC000, and it needs them aligned on 64. If cc65 has a sane way to place data at a specific address, then anybody who knows is keeping it a secret. Some function that happens to be in-range has to smuggle in eighty-one zeroes in a row... as instructions. Constant data is separated. So there's eighty-one BRK instructions, 0x00. Which I then manually locate in the output ROM, to change which address I write to the audio chip.
Some parts of this project feel ingenious. Other parts are dumb as hell.
Thanks for the update, it's much better without the background buzzing! I didn't know about these technical details. It's really heroic to make a game like this on Nes/Famicom. Thank you for your hard work!
I'm a few levels and and the updates are awesome! Now there's a reason to use the bomb since you're rationing weapons now. My son immediately said it was much easier to see what has going on with the terrain. Levels are more varied in design with new colors. There are some new enemies. They can shoot what look like bombs maybe that are a different color. There's still a lot to take in.
I do have a question. Is the ever-present feedback sound on purpose or is that a bug? It's kind of jarring. I got used to it after a while but it took some doing. I thought the web emulator was glitching so I tried it in FCEUX, then Mesen, then flash cart and it was still there.
I haven't tried multiplayer yet but we'll probably get to that this weekend. It's very very cool to see you updated this today!🤘
Sorry about the buzzing. The HUD is kept stable by abusing the sample channel, which can only read from a particular region in the middle of ROM, and placing things there specifically is nontrivial. I had thought it was pretty quiet, but these headphones might not be very good. I'll somehow point it at all-zeroes in future ROMs.
The HUD has to use the background now (where previously it was solid gray that scrolled freely) so I could afford to show three ammo counters. I tried using two sprites as the endpoints of their shared gauge, but the budget per-line is eight, so no. Fortunately I was hopelessly stubborn about the sample-channel thing. The NES's audio chip is on a separate clock that only kinda lines up. Using it for timing is rough. But I got it to fire an interrupt anywhere within the first dozen lines of the HUD, which was enough to leave the top part boring and fancy up the bottom. Aaand then I got the range down to within two lines. I'm still not sure how. It has to play a noise to do this, and I will make that noise a period of silence.
Multiplayer currently has friendly fire disabled, purely because I made hitscan independent of rendering, and have not bothered to check for the other player. Multiplayer also has some head-scratching bugs whenever it goes back to singleplayer. I had to push this update with several cans still freshly-kicked.
This update is mostly behind-the-scenes. I spent a few months tweaking performance as hard as possible, to where everything's about twice as fast as the last version. That let me update sprites on every frame and move fireballs more often. The levels are nearly the same, albeit with the new palette stuff, which is smaller and faster. Floor / wall graphics are more flexible, so there's now more than four types, but several of them are still fugly. The sound effects are different, mostly picked from randomly-generated examples. I was having no luck reasoning about the NES's sound chip. I made it cheap to throw a byte into a function and get out some kind of sqwonk or breep. I've picked good ones for everything that should make noise and a few things that are funny when they make noise.
This was supposed to head toward a NESdev 2024 release. But I guess that's cancelled? Even the Discord look ambiguous. In any case this was all cleanup and prep to have it Done™ somewhere in November. That should still happen. I'm gonna keep freeing up space so I can cram in more levels. Make it feel more like a complete game. That's definitely something the ammo has already changed. The enemy pinatas finally matter!
Ok so I got a chance to play it a bit more.
Everything is so much faster and smoother! I didn't even notice at first. I booted up an older release and found it kinda jarring compared to this release. Wow.
I love the second level colors with the blueish ground.
The third level(?) colors are a little confusing as I thought there was hazardous lava and the gray enemies blend in with the mostly gray walls (hard fricking level). It reminded me of The Nether in Minecraft so... cool theme but difficult to navigate.
I had an idea for turning... maybe double-tap left/right for quick 90 degree turn or back for a 180? I've been playing GunValkyrie lately which gave me the idea while I was playing around with strafing.
Also I had thought strafing moved at the same speed as the forward run but it's just normal walking speed. I don't know if speeding it up would make it too difficult to control and I'm used to it now but it might make some of the more hectic fights easier(?). *EDIT* Regular speed strafing makes a lot more sense.
Multiplayer went well and definitely benefited from everything rendering faster. Now it runs at about the same speed as single player used to. I kinda liked no friendly fire to make more of a co-op game but then there would be no deathmatch. Maybe make it a separate game mode or a toggle in the menu.
I had some issues on flash cart. Strafing makes a curve and turns at the same time. The gun graphics get a little jittery when running which I think has been present in flashcart for every version. I didn't check if the strafing weirdness was in older versions.
I still haven't 'beat' it but thought I'd sunk enough time so far to give some more thoughts.
MIND BLOWN yet again :)
Controls might be close to final - in part because I've been sloppy. Letting player-two pause keeps breaking things. The easy parts are the hard parts. Strafing is deliberately walking-speed so that the fastest movement option is forward. Or backwards. Some of the new levels have jumping puzzles (floating puzzles?) that are just as easy in either direction.
The menu needs a do-over, which I've been avoiding, even as I've been shaving away wasted space. That code is two years old and fragile. I'm gonna have to redo it from scratch, and I don't waaanna. Which should (should) be good news for passwords, because I found a stupid way to make that simple, and the menu code is bad enough that I'd rather do that.
As for the strafing/turning and gun jitter, I think your turbo button's on.
Oh goodness you're right about me having turbo on... I forgot I was plugged into my four score on the floor and A button turbo was on 😅
Thanks for fixing the buzzing in the latest release!
I keep forgetting how hard it can be to work with the NES without breaking things. Snap turning might be disorienting and break something else. The accelerated turning you talked about before might do the same. It all works pretty well as-is. Sometimes I get carried away and want to run around like it's Quake for the NES and turning is the only slow-ish point. To compensate I usually run out of firing range, reorient and fire while running toward the enemy, strafing left and right. Still a load of fun and a total marvel to exist at all. Release this on cart on Kickstarter and it'll make a killing. I think I owe you some money at this point at least :)
I haven't played much with the menu until you brought it up. I didn't know selecting Give Up cycles levels I'm not good enough to reach lol. Memorize and Recall make sense. Suffer does damage to yourself but not sure why? Pain changes damage and HP I think. Edit is pretty much free roaming camera for me.
Thinking of it like tank controls helps. You can usually back up while turning and dodge some fire. Some levels are just hard as nails, though. I did a test run for 100% kills yesterday. The first six levels took maybe twenty-five minutes. The last level took fifteen. Ten of them after a mid-level save, just trying to clear the final room.
Some near-future project will just throw sprites. Walls represented mostly by corners, lumpen floors marked as highs and lows, enemies... presumed. Slayer The Hawk was originally supposed to be vertex-only Wave Race, or like, Thunder Helix. But it could be another shooter. Throwing dots is so much faster than trying to squeeze a tilemap onscreen, six columns at a time.
Pain is the difficulty level, but all it changes is AI speed. Only a few tiles each frame let enemies "think." More pain, more tiles.
Suffer is kind of a joke at this point. I was padding empty space, early on, and leaned into the edgelord vibe of putting an ultraviolent blood-splattered game on NES. It's stuck around because it turns out to be useful for testing health, death, respawning, etc. If I keep it, it could give you ammo, as a trade-off. But it might just disappear.
Start Over-- is broken again? Dammit. It's supposed to restart the level.
Edit is a full-featured editor. There's terse instructions in the readme. There's mouse support. I'll have to document all the lower stuff at some point.
There's a secret option below Give Up that toggles scattered versus linear updates.
Mouse support also works with gameplay. Rapid turning causes visual issues, because the NES fillrate sucks. Then again... smooth movements seem fine. Can I just double the turn speed? Oh, wow, yeah, that was easy. Twitchy. Very prone to lingering columns. Especially with scattered updates. 1.5x speed, every-other-frame, judders. And still has visual errors on busy levels. Hmm.
Screw it, I'll upload the bare ROM.
this game is amazing i love zis i woul love if zis opwuld woudl turn into like sandbox game anddd yeeeeeess OUO
This is some damn good stuff right here
=0
Great work! Thanks for the new levels! I've gotta try the multiplayer out...
Hi! NinjaPad dev here. NinjaPad is not an emulator, it's an emulation front-end. The emulator you're referring to is "JSNES" which was the default backend of NinjaPad.
We have recently updated our emulation backend with a more accurate emulator - BinjNES. Go give it a try! :)
https://github.com/ninjadynamics/ninjapad
Thank you for the heads-up! Sorry for not being precise. JSNES lacked a sprites-per-line limit. BinjNES handles everything this ridiculous project relies on.
Show post...
Good :D
That is really amazing! :D
How do I compile the new version into an NES format? Or if I need to ask I probably shouldn't be messing with it right?
You'd need cc65 installed. I'm using v2.18, but the newer versions should work the same. In Windows you might as well install Windows Subsystem For Linux and use "make". But if you wanted to do it manually, or create a batch file, there's only four commands in the makefile. They're in reverse order. cc65 goes from slaughter.c to slaughter.s, ca65 goes from slaughter.s to slaughter.o, ca65 goes from reset.s to reset.o, and ld65 combines the .o files into slaughter.nes.
... I forgot to include a ROM in the update, didn't I. Lemme fix that real quick.
I got the ROM file thanks!
A new level! Yay! And more polish :)
Ok. I've tried a few times to get into this version but I'm having trouble. The new red and green gradients are pretty disorienting for me. I used to be able to navigate everything pretty well but now for me it's too much visual noise to quickly discern surroundings. I liked it a lot more the way it was before with the sky being one color so it contrasts better with the terrain and enemies. I'm really excited to play a new map but I just can't tell what's going on.
Do the enemies melt or something now? I feel like they change shape when I'm firing at them.
I didn't do anything with the editor really. It looked neat though.
The sky was always a gradient, it's just upside-down and higher-contrast now. One of those things was on purpose. (On a possibly unrelated note: guess I shouldn't use green and red as distinct global colors, for the sake of colorblindness.) Tile graphics are likely to get another overhaul before any sort of proper release.
The level's the same, it just has a roof. I added ceilings for performance. It limits draw distance. This was a terrible idea for about three weeks, but now I'm pretty sure it's faster overall. Where it's not, well, I need better levels. That's why the editor is different. Right now I'm trying to compress savegames to where I can call them "passwords" with a straight face. Then people can share levels.
There's mild complexity in how ceilings work, where floors are allowed to stick through them. That's probably less confusing than where red walls also have red ceilings, because again, I do need to make better levels.
Enemies are animated now! Which admittedly looks so-so at current speeds. They're timed with the global vblank counter, which naively cycles every four seconds, so at some point I'll add another byte that only increments every fourth vblank or something. That should make the various bouncing and shifting look much better. Crank the overclocking in Mesen for an idea of what they're supposed to be doing.
But the blue guys do emerge from the floor when you first look at them. That was weirdly easy to implement. Kind of a zombie gimmick, applied to them for now because they're the right height for it. There will eventually be more enemy types, if only because an "invisible" spectre-style monster would also be weirdly easy to implement. It'll change the palette.
I keep coming back to this! It actually reminds me a lot of N64 FPS where a lot of the fun is in understanding the limitations.
I wish it were slightly easier to discern where the enemies were and I usually give up on finding the last 7 or so. There are also little gaps in the level where enemies can shoot from where I can't see them that are kind of annoying.
Is there any chance of it being multiplayer? My son and I love playing against each other in my NES games and I think this would be great.Strike that! I just thought about what I was asking for... split-screen 3d multiplayer on NES ^,^! I think that's a little unreasonable but still....would be a lot of fun!It's a great game honestly! I can't believe it didn't rank higher in the Compo. Congratulations still and thank you for pulling this off!
Ha ha, yeah, splitscreen multiplayer would be ridiculous.
So anyway the splitscreen multiplayer is jump-in co-op with friendly fire. Press Start on controller 2.
Originally this response was going to be within a day of your comment, because this project is so ass-backwards, I figured it would take about three hours to implement side-by-side splitscreen. I was wrong. It took five. Literally one night is all I needed to have two independent viewports, because all column-pairs are independently raycast. Even the FOV is maintained... so I guess this NES game is set for anamorphic 16:9. What I've been doing for the last two weeks, instead of delivering that 'ha ha so anyway' punchline, is finding ways the game breaks if it tries counting to two. If you picture Sideshow Bob in that field of rakes, it's basically that, with more swearing.
I spent an entire day reverse-engineering my own view-weapon code so that removing bits from a byte would make bullets disappear when they hit something. Rendering the other player took literally fifteen minutes. There's a reason all programmers are Like That.
Though if you're playing on PC you'll probably want Mesen to add scanlines after NMI. Single-player performance has been significantly improved. Splitscreen performance needs work.
I can't believe you did it!!
Ever since the multiplayer update we've had so much fun! It run so much better in single player too. The power ups are awesome. I figured out the smoke was from where the bullets landed so I try to use those to find the remaining enemies. Enemies can only shoot at you when you're facing them which is neat since you can only turn around so fast.
At some point we went into edit mode and somehow froze all the enemies and were able to look at them up close and shoot them. Pressing select brought up the code which kind of acted like a map which was interesting. We had some classic fun with hide-and-seek, screen peeking, and betrayal <3
If you wanted to increase performance you could probably cut out the entrails and I'd personally be fine. Sometimes it's useful to see where an enemy just died but there's already a lot going onscreen.
A cartridge release I think would be great. I already want a full color manual with backstory on the enemy characters. Like who are the big bazooka guys? Or the pink slimes? Do they behave differently? Are they from Mars?
I love the "paltry July update"! Everything seems to run smoothly and it may be me but the walls, ceiling, floor all seem to be more distinct. One of my favorite things is to strafe left to right in front of a corner and wig out over how well it renders an apparently 3D environment on the 8-bit system. It makes exploring the new environment a lot of fun. The floaty jumps are a fun feature from previously but seem to be more useful with the new level design. Also the portal door! Very cool feature!
I have a thought on movement. Maybe the start button could be held to speed up turning and swap out with select? Just a thought. I'm actually fine with it as is... I just never use the bombs and could use the button for speeding up yaw motion.
Easily one of my favorite homebrew NES games!
Turn acceleration is going in at some point. Probably after a menu clean-up. (There's a toggle for fast versus smooth rendering, but it's hidden below the last visible option.) In the meantime... Mesen lets you plug an SNES mouse into the second port.
Portals were another weirdly easy absurd feature thanks to raycasting. If you get a close look at enemies through one, you can tell the math is a little goofy. The surface was originally supposed to wobble or flex continuously. That's now limited to when they're shot, because the feedback is hard to distinguish at these framerates, Static-by-default lets one tucked into a corner look like contiguous space - like the one in that high alcove. (Which you can get to, with the glide-y jumping. Definitely keeping the bizarre platforming.)
The shotgun and machinegun might get combined. An amalgamated pew-pew weapon that fires differently based on how you hold B is extremely well-precedented on NES. Though it'd act more like you're always charging a shotgun blast, press B to release it, and spit bullets continuously while holding it. That's honestly more likely to go in "Slaughter 2," after this is complete enough to call a proper game. Anyway that'd free up Select to immediately fire rockets, making them easier and more useful. But so would nerfing the current rate-of-fire so bullets and pellets can get punchier. Even as a firehose of bullets, the sound effects make them sound like a polite suggestion. There'd be some power-up that brings back this rate-of-fire and absolutely rips through enemies.
Enemies should also be crammed into every inch of this level. Blue zombie guys in the green underground. Rabbit tank things around the exit. Their distribution hasn't changed since the compo, because I want the data stored in the same compressed format as the passwords, and that format is currently thrown out so I can start over. (This was not aided by finally discovering that reading data back from VRAM storage begins with a byte of junk. Nintendo. Whyyy.)
All of which has to wait until after GB Compo, which runs for another month. This update was an excuse to avoid my initial project. Two weeks ago I said "Screw it, I wanna play with scanlines!" and honestly it's been great. Expect 60 Hz parallax and a vulgar bird. Then more pew-pew NES stuff.
The Christmas update is so much smoother and faster! In single player it flies and in multi it seems maybe a little bit faster than before.
Great job!
Is there a way to fit both the original level and the new one in the game? I tend to like more open levels like the first (which I absolutely loved) but the new one has more nooks to hide in for a multiplayer session so I think they'd compliment each other well. They're so different they remind me of Goldeneye or Halo levels for matches with different play styles like close-quarters shotguns or long-distance sniping.
So it actually is possible to make Doom on NES.
It's incredibly impressive!
I've seen other attempts at 3d fps games on a variety of 8-bit systems, but none of them even attempted elevated floors.
The graphics could probably be improved by making it less blocky, but it would take a huge drop in framerate, because of the processing power needed to generate new tiles on the fly.
Anyways, it's an amazing tech demo.
NES games tend to have tiles in ROM, so for better or for worse, combining tiles isn't a speed issue, because it's not an option. The character bank in this release honestly has abundant free space. I just haven't committed to diagonals, or marching squares, or approximate 2x2 mini-tiles or whatever. Consoles like this deserve one and handhelds would absolutely require one.
Incidentally the Sega Master System would be fantastic for this. Flippable 16-color tiles, horizontal blanking interrupts, much more RAM. Expect cleaner and faster C code when the judging is over.
I think a Master System version with these improvements would be awesome.
Someone made a Wolfenstein 3D clone for Master System, using its hardware advantages for smooth graphics.
https://www.smspower.org/forums/19054-Maze3d
Ooh, very nice. Tyrannosaurus Tex on GBC did a similar thing with the precomputed diagonals, and honestly still looked kinda... lumpy. Oof. This one looks better in screenshots than in motion. Especially on Game Boy. I was already gonna make an SMS Power account to thank whoever mentioned Slaughter in the "off-topic inspiring technical stuff" thread, but I might do some thread necromancy first to nudge Under4MHz toward choosing tiles directly. Axis-aligned walls have predictable diagonals onscreen. (And every wall in Castle Wolfenstein is aligned with the Axis.)
Kind of interesting how this very quickly went from "I can't tell what's going on at all" to "wait, I'm suddenly seeing how the shapes work and how I'm interacting with everything and this is really cool, actually"
It's really neat that you were able to create something like this!
Interesting stuff! Looking forward to see what this evolves into!
Really interesting game concept and execution! Incidentally, how did you set it up to get the NES ROM to play in the itchio browser window? I assume there's a hidden "play in browser only" zip file with the ROM and an index.html that calls a HTML5 NES emulator, right?
Yep, NinjaPad in a ZIP. Several stumbling blocks: you have to set "kind of project" to HTML, or Itch won't show the "this file will be played in the browser" option for ZIP files. The index.html file genuinely has to be in the root of the ZIP file, not in a folder inside the zip file. And just to make things interesting, NinjaPad may not run locally, because of browser security rules... so my test environment was uploading stuff and hoping that it worked.
Should I be worried how often the least convenient part of retro development is modern websites? GBDK is powerful, cc65 is fast, Open Watcom is flexible, and it once took me three days to send an executable over GMail. I had to rename it attack.com... because that's not suspicious.
Not much of a game as now (works but gameplay is a bit rough) but impressive on such a low-specced machine. Good luck developing this!