News: 11 March 2016 - Forum Rules

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - diaspora

Pages: [1]
ROM Hacking Discussion / Re: How to make a minimal N64 ROM?
« on: September 21, 2015, 05:58:53 pm »
Thanks for the very detailed reply. :)

In all but one special case game code starts at 0x1000 in the ROM.  At that point you do have to set a flag at the end of pifram to prevent the PIF going into an infinite loop.

How do I do this, and when exactly do I have to do it?

Doing things:
I'm going to assume interrupts are off for this.  If they're on you need to set up the exception vectors.  These are:
Code: [Select]
80000000 bad virtual address
80000080 bad 64bit virtual address, which you can't throw since locked in 32bit address mode
80000100 cache miss
80000180 general exception vector
Those addresses are not suggestions!  In general all will be jumps to the general exception handler, which you'll get to write for yourself if you aren't using library code.  You'll have to test for flags when interrupts are thrown, and they're thrown when a request is completed.[/b]
So when an exception occurs and interrupts are enabled, the CPU will jump to one of those four addresses, where I have to insert instructions to jump to my exception handler? Also, why is there an exception vector for cache misses... do cache misses have to be handled in software?

ROM Hacking Discussion / How to make a minimal N64 ROM?
« on: September 20, 2015, 02:56:06 am »
When I started out learning NES programming/hacking, I followed a tutorial that showed how to construct the header for the ROM file, how to do basic ASM coding, and how to draw a sprite to the screen. Looking at N64 programming guides, it all seems to be "download this toolchain, write a program in C and compile with GCC, and bam, working N64 ROM", which isn't what I'm looking for. I've been able to find r4300i ASM tutorials and assemblers, but nothing on the basics of what makes an N64 ROM. What do I need for a header (and is there an additional header for the emulator to use, or is it just a raw ROM file)? How do I read data from the cart, get input from the controllers, and send commands to the RCP? Thanks much.

Personal Projects / Re: Ninja Gaiden: Asshole Edition (Alpha ver. download)
« on: September 11, 2015, 03:00:50 am »
In the beginning I was intending this as a novelty hack- something to torture my friends with, and to recapture the feeling of getting my ass kicked by this game as a kid. But hearing your enthusiasm has definitely pushed me to want to do something more ambitious- changing the level layouts I can definitely do, but we'll see how far I go with it.  ;)

About the enemy spawns, yeah, you're probably right. It makes it hard, but I think it will alienate a lot of players because people expect the difficulty to come from the game world itself, not game mechanics that are literally out to get the player (though I'm so masochistic that it doesn't really bother me).

Personal Projects / Re: Ninja Gaiden: Asshole Edition (Alpha ver. download)
« on: September 08, 2015, 07:17:17 pm »
Does this fix the hellish bug that forced you to travel through the entire final stage every time you died? At least that, please.

I've been forced to save state on the final stage because of that bug.
It wasn't a bug, just a cheap way of extending the game's length. The frustration of having to redo the last 3 levels is part of the classic Ninja Gaiden experience, so I'm not planning on removing it. But once the hack is finished, if I'm not able to beat the last act without savestates, then I will fix it. I wouldn't release anything I can't beat.

However, I definitely can make a patch of the original game to fix it, if you want.

Personal Projects / Ninja Gaiden: Asshole Edition (Alpha ver. download)
« on: September 07, 2015, 11:53:51 pm »
Hey. This is my first and latest romhacking project. I'm taking taking Ninja Gaiden and making it 3 times more sadistic, "for the evulz". Well, that was the original goal, anyway. At this point the hack consists almost entirely of ASM code tweaks. Mostly changing enemy behavior, hit points, damage, etc. And it's damn hard, but not Kaizo hard (I have beaten each stage, individually, without savestates). Here's a list of enemy changes:

-The birds got the biggest overhaul. They'll never go past the edges of the screen, so you can't outrun them and scroll them off the screen- the only way to get rid of them is to kill them. Their movement pattern is much more unpredictable and harder to dodge- good luck!
-Tysons (the boxing guys) have 2 HP now, and they regain 1 HP each time they do their punching attack, so the best way to kill them is either from afar, or with two strikes in quick succession.
-The knife-throwing gangsters' knives do 2 points, and they start throwing as soon as they spawn, also the rate of throwing is increased
-Ghouls (and other sword/mace throwing enemies) throw swords twice as fast, up to twice as far, and the swords do 2 points of damage
-Commandos (the machine gun guys) shoot as soon as they spawn, their bullets travel faster, their rate of fire is increased slightly, and their bullets do 2 damage.
-Bats move faster, do 2 points of damage, and swoop a bit higher and lower than before.

-The first boss (who was a total pushover in the first game) also got an overhaul. He's much faster, deals 4 points of damage, his sword swing actually has appropriate range to match the animation, and the walls of the arena are gone, so now you need to jump over him. Once you get the rhythm down, it's not too hard, but he's pretty tough at first.
-I plan to overhaul every boss eventually.

And there's more...
One of the first changes I made to the game involves enemy spawning behavior. Instead of spawning at the edge of the screen, enemies now spawn almost halfway towards the center- this gives you a lot less time to react to enemies like those crawling Ninjas. It's kind of an exaggerated parody of one of the quirks of the original game, where enemies seemed to materialize on the edges of the screen rather than scrolling onto it. It's pretty diabolical, but I think the challenge it adds is mostly fair, save for a few spots which can be adjusted by hand. I actually like the challenge this adds, but I think some people will find it cheap, and it looks kind of unpolished, so I'm considering toning it down or removing it for the final version (or maybe making two versions of the hack) - feedback would be appreciated on this.

I also made another change to spawning behavior. In the original game, an enemy would respawn instantly whenever you were standing in their 1-tile wide "spawn zone". Now the spawn zones have been greatly extended- probably to about 4 16x16 tiles. Now moving forward through the level to get past the spawn zones is even more critical than before. This is one change I'm probably going to keep. However, it causes some bugs with enemies sometimes spawning in walls, over pits, and other glitchy behaviors. I have a plan to fix this, I just haven't gotten around to it yet as it doesn't impact the gameplay much- it's more of a visual distraction.

Here are some YouTube videos. These were made before my recent changes to the Commandos, Ghouls, and Bats, but they nicely showcase the changes to the birds and spawning. Sorry for the awful quality- I couldn't figure out how to get fceux to record at a resolution higher than 240p.

Stage 3-1:
Stage 4-2:
The first boss:

Here's a download link for the IPS patch:

Oh, and savestates from the original game should work with the hack, but if anyone wants a savestate for the beginning of any level (ex. 3-1, if you want to check out the new bird AI), I can give you one.

I usually don't play hacks of games when I haven't played the original version first.  But if this is supposed to be an Asshole Edition, you should add Troll faces throughout the game, and "U MAD BRO?" text.  I'd play it, just for laughs.  You should call it Trolling Edition!  :laugh:
I don't think I'll make any graphical changes, or at least not yet. But it would be pretty hilarious to give Jacquio a Trollface. Maybe the Masked Devil, too. "He thinks only of trolling you!"  :laugh:

Now I tweaked the spawn code a little more, and made the bird AI MUCH harder. In the original game, the birds moved at a constant rate on the y-axis, and accelerated at a constant rate on the x-axis. The result was that the birds tracked directly to Ryu's vertical position, but but would swoop horizontally back and forth. For the hack, I swap the behavior of the x and y axes every 4 seconds, so now they're much harder to hit and avoid. And now they always stay on-screen- the only way to get rid of them is to kill them. 4-2 is now practically a living hell to beat. It's barely doable, if you snag the timer and run like hell across the bridge to skip a few of the birds.

On the note of "hard by BAD design", I would like to hope that the enemies spawning in the screen at least don't look or behave like a glitchy or immersion-breaking mess.
Well, having enemies spawn in the middle of the screen does look a little janky, but you quickly get used to it. In the original game, the enemies also seem to materialize out of thin air, so it doesn't feel all that different. I also expanded the size of the spawn trigger zones, and that means that sometimes enemies spawn inside of walls or other places they aren't supposed to. It's only a problem for some enemies, so I might be able to selectively disable it for those enemies. Failing that, I'll just tone it down for the final product (I may need to do that anyway to balance the difficulty once I'm through making other changes).

For the sake of making the hack seem a bit more ambitious; do you think you can figure out a way to make the bosses more like Xbox-era hard-as-nails Ninja Gaiden bosses, rather than the pansy post-level breathers they are?
I'll try to make them tougher, but unless I add new animations (which seems extremely difficult), the options are pretty limited. The first two bosses just walk and swing their weapon. Maybe I could make them weave back and forth in a pseudo-random pattern.

I'll try to get a youtube video up pretty soon, then I'll make an official project thread.

Basically, I'm going to take everything that anyone ever found frustrating about the game and turn it up to 11. Not to the point where you would need savestates to beat it, but to the point where you need to use savestates to maintain your sanity. And it'll be annoying as hell. I'm mostly just doing it for laughs, and for the fun of making it. After this hack is done, I might make a more reasonable one. The main focus is on changing enemy attack patterns to make them more difficult, and changing enemy placement.

The only thing I've done so far is to change the enemy spawn code to make them spawn much closer to Ryu, about halfway towards the center of the screen. This gives you much less reaction time, especially for fast-moving enemies. It makes no sense, and it's annoying. That's basically what I'm going for. >:D

Some other changes I plan to make:
-Rooms with continuously spawning birds and bats. It won't matter where you're standing, they'll be flying at you constantly.
-More unpredictable bird AI.
-Projectile enemies throw/shoot their projectiles as soon as they spawn, leaving you with no grace period to kill them.
-Make the bosses harder. Not sure how, yet. Maybe I'll add some birds...
-Game overs always send you back to the beginning of the act
-Less ammo
-Make most enemies take multiple hits to defeat, if possible

Feel free to share any ideas you have for how to make the game harder and more evil.

ROM Hacking Discussion / Re: fceux debug/CDL strange behavior
« on: May 10, 2015, 10:16:12 pm »
Thanks, that cleared up everything. The first byte is indeed the only one logged as data. I thought that because the disassembly showed a d next to the line, it meant the whole line was data, but apparently it only applies to the first byte.

ROM Hacking Discussion / fceux debug/CDL strange behavior
« on: May 08, 2015, 03:12:11 pm »
I'm looking at a subroutine in the Ninja Gaiden ROM. At the start of the subroutine, there are 3 instructions that the code/data logger has logged as data, so I assume they're local variables for the subroutine. The first "code" byte of the subroutine is at DD34, so I set an execute breakpoint there so I could see what other routines call this one. But by mistake, I typed in DD32 instead, which should be one of the data bytes. To my surprise, the breakpoint triggered anyway, so it seems that DD32 actually is executed as code, even though the CDL has it logged only as data. The debugger disassembly has the 3 bytes from DD31-DD33 grouped into one instruction, and listed as data. But when the DD32 breakpoint is triggered, a new line appears in the disassembly comprised of only bytes DD32 and DD33 (and it's logged as code, too). Then if I scroll the disassembly window at all, that line disappears, and it goes back to listing DD31-DD33 on one line together, logged as data.

So my question is, if DD32 and DD33 are really executed as one code instruction, why does the disassembly group them together into one instruction/line with DD31, and why are they logged as data?

Pages: [1]