Points of Required Attention™
Smaghetti, a new Super Mario Advance 4 editor, is currently in development! Check out the thread HERE!

Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,312,925
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 03-28-24 11:30 AM
Guest: Register | Login

Main - Posts by Parasyte

Pages: 1 2 3

Parasyte
Posted on 03-01-09 08:40 PM, in The NEW General Project Screenshot / Video Thread EX Omega Supreme++ Link | Quote | ID: 102004


Red Goomba
Level: 17

Posts: 1/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Anyone interested in editing Mega Man 7, by chance?


Parasyte
Posted on 03-04-09 07:05 AM, in The NEW General Project Screenshot / Video Thread EX Omega Supreme++ Link | Quote | ID: 102101


Red Goomba
Level: 17

Posts: 2/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Posted by RT-55J
Posted by Parasyte
Anyone interested in editing Mega Man 7, by chance?

Heh. I remember that thing. I still have the executable of some absurdly early beta you released or something.

Alpha. I released the source code along with the executable, but apparently no one wanted to pick it up. So I've been rewriting it (again; now on its third iteration) to be cross platform, and hopefully a whole lot easier to work with.

This version is still open source, and I've been working on some fixes along the way. For example, Spring Man's stage now loads the tiles properly:


I need to sit down and redo the rendering a bit to finish up some optimization problems, then I will be able to start working on the UI.

Source code and development docs are available on my site.

Parasyte
Posted on 03-05-09 12:49 AM, in The NEW General Project Screenshot / Video Thread EX Omega Supreme++ Link | Quote | ID: 102188


Red Goomba
Level: 17

Posts: 3/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Posted by Raccoon Sam
Parasyte? Mega Man 7? Mac executable?


Mac OS X is great. But what about Linux?



Parasyte
Posted on 03-06-09 12:39 AM, in The NEW General Project Screenshot / Video Thread EX Omega Supreme++ Link | Quote | ID: 102237


Red Goomba
Level: 17

Posts: 4/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Posted by smkdan
Linux is great. But what about Microsoft Windows?

Yeah, what about it?


Posted by smkdan
Anyway it looks like pretty good progress. does it swap tiles / palettes mid level like mega man x? (disassembling the portions that cover this but got broed of it, picking it up later). I never played MM7 but I really should sometime.

The game does mid-stage tile and palette swaps, yes. Does Syndrome currently handle it? No. Some example stages include Turbo Man's stage (the big truck near the end uses a different tile set from the rest of the stage) and the color of the buildings near the end of the intro stage...

Turbo Man's truck, as currently rendered in Syndrome

There's a silly design flaw with the current rendering model I wrote (which is based on the rendering model from the original Win32 source code release); the full stage is assembled as a very large SNES tile map. (That means, a large array of 16-bit words. Each one contains a tile index, palette index, and flipping bits ... all in the SNES tile map format.) Thus, it's not possible to change the palette or tiles in different portions of the stage. I am going to fix this along with the renderer rewrite, though.

In the new model, I will do stage rendering one-screen-at-a-time. Each screen in its own small image. The big win will be in speed (faster overall rendering) but it will also have some other advantages such as lower memory use, and the ability to draw each screen using different tile sets or any of the available stage palettes. (Three palettes per stage.) Then these smaller images will just be blitted onto the big canvas.

I haven't yet looked at how the game decides when to swap palettes, yet. Or how it does scroll stops, for that matter. All in due time, I guess. Most of the code base could probably be adapted to the Mega Man X series fairly easily.

Parasyte
Posted on 03-06-09 05:26 AM, in KompreSS 1.0.1 Link | Quote | ID: 102254


Red Goomba
Level: 17

Posts: 5/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Glad to see people are still working toward hacking the Kirby games!

I just have one comment on a change made in the compression spec you linked to. The "type 5, bit-reversing LZ-copy" is not a simple XOR $FF. That's what we usually call a bit-inversion. The type 5 compression physically reverses bits.

For example, if an input byte is $4E, the output byte will be $72:

$4E: 01001110
->
$72: 01110010

Here is the relevant code from Kirby's Adventure:
;$A0 - bit-reversing lz-copy
$C517:20 55 C5 JSR $C555 ; tmp = lzsource[k++]
$C51A:85 02 STA $02 = #$80
$C51C:A2 08 LDX #$08
$C51E:06 02 ASL $02 = #$80 ; Reversing bits ...
$C520:6A ROR
$C521:CA DEX
$C522:D0 FA BNE $C51E
$C524:20 62 C5 JSR $C562 ; out[j++] = tmp
$C527:C6 00 DEC $00 = #$00
$C529:D0 EC BNE $C517
$C52B:C6 01 DEC $01 = #$FF
$C52D:10 E8 BPL $C517
$C52F:68 PLA
$C530:A8 TAY
$C531:4C 46 C4 JMP $C446

Parasyte
Posted on 03-07-09 02:56 AM, in The NEW General Project Screenshot / Video Thread EX Omega Supreme++ Link | Quote | ID: 102302


Red Goomba
Level: 17

Posts: 6/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
It has the Firefox icon in the Windows screen shot because it is running on Firefox 3's XULRunner. (Syndrome is a XULRunner application; it can run on any system with Firefox 3 installed, or with a shared XULRunner.) There is no Java involved.

Parasyte
Posted on 03-08-09 04:12 AM, in gimmick! editor at a usable state Link | Quote | ID: 102337


Red Goomba
Level: 17

Posts: 7/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
How do you mean? It is not possible to automate any kind of conversion of a RAM address to ROM. The question doesn't make any sense, in context; it's like asking how to convert the address of your house to a GPS system. The address is just a point in space where things happen. The GPS is able to describe where the address is and how to get there ... not the other way around.

If you want to give your hack infinite lives, this can be done by disabling the code that modifies the "lives left" variable when you die. The usual process is done with a breakpoint feature in a debugger; breakpoints will tell you which instruction(s) write to the variable (RAM address) you are watching.

I don't know what you're even asking about the levels? Start on some level other than 00?


FYI, it is possible to "convert" Game Genie codes to permanent ROM hacks, but it's not always possible to 100% automate the conversion.

Parasyte
Posted on 03-08-09 04:19 AM, in The NEW General Project Screenshot / Video Thread EX Omega Supreme++ Link | Quote | ID: 102338


Red Goomba
Level: 17

Posts: 8/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Windows XP does not come with DOS. It has a command line which can approximate some of the functionality of DOS, but it's not DOS. DOSbox is the best bet for running true DOS programs (which I believe Mario Improvement 3 was ... it used mode 13h, as I recall)

Parasyte
Posted on 03-08-09 10:37 PM, in gimmick! editor at a usable state (rev. 2 of 03-08-09 10:41 PM) Link | Quote | ID: 102368


Red Goomba
Level: 17

Posts: 9/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Berion: It's no problem. Just don't want anyone mislead is all.

Patching the ROM to start at some level other than 00 is pretty much the same. Use breakpoints to find what writes to the variable. In my experience, NES games like to clear RAM to 00 in the initialization phase. Most games won't bother writing the level number again until it's time for the player to advance to the next stage.

In cases like this, you should be careful to not patch the "clear RAM to 00" initialization when you want it to write a different value to the level variable. Instead, try to find a piece of code somewhere between that point and just before the level variable is loaded (which usually begins loading all of the level data and additional information get the level running). A piece of code in that range which you can safely modify (e.g. without causing trouble in other parts of the game) that will write whatever number you want into the level variable.

Alternatively, and arguably easier to do, you could try patching the instruction(s) which read the level variable; make them load a constant number. The only potential drawback to this is that there could possibly be more than one instruction which reads the variable; you'll want to patch ALL of them.

I hope this explanation is sufficient.


EDIT: Oops! I missed your second question! Since you can't find the value for level 7, my guess is that it's stored in another RAM location, like a "subsection" of a different level (probably level 6). To illustrate: Super Mario Bros. has world 1-1, 1-2, 1-3, 1-4, 2-1, 2-2... etc. Where the number following the hyphen is the "subsection" of the world number.

Parasyte
Posted on 03-10-09 05:23 AM, in Red Falcon, Contra editor (Formerly "Contra hacks...") Link | Quote | ID: 102423


Red Goomba
Level: 17

Posts: 10/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
It looks like a pretty solid editor. I'll admit I was trying not to go insane from the all-red, then green palette... And the first screen shot with the corrected NES palette made me jump back a bit. Kind of like that feeling you got the first time you saw an HDTV after growing up on standard NTSC/PAL.

Any way, here's a tip to get rid of those pesky dotfiles, fellow OS X hacker: http://blog.jasper.es/archives/11-dotfiles-osx-tar-wraaah-frustration!!!!111!.html

Parasyte
Posted on 03-10-09 05:27 AM, in The NEW General Project Screenshot / Video Thread EX Omega Supreme++ Link | Quote | ID: 102424


Red Goomba
Level: 17

Posts: 11/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Several years ago, DD made an attempt to port MI3 to Windows. I helped with a few things where I could, but ultimately it was a disaster, and we gave up. This is why other projects have been launched to create Super Mario Bros. 3 editors from scratch...

Parasyte
Posted on 03-14-09 08:59 PM, in A Mario64 Hack built from scratch (Progress Thread) Link | Quote | ID: 102889


Red Goomba
Level: 17

Posts: 12/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
The original point to exiting the level after collecting a star was that, depending on which star you chose to go after before entering the stage, things in the level are changed to accommodate you getting that star. I can't think of any specific example off the top of my head since it's been several years since I touched the game. And far longer since I actually tried playing through it.

Parasyte
Posted on 03-14-09 11:49 PM, in Mega Man 7 editor and general hacking (rev. 2 of 03-15-09 12:26 AM) Link | Quote | ID: 102959


Red Goomba
Level: 17

Posts: 13/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
I have been working on a Mega Man 7 editor for quite some time. Rather that regurgitate the history of the project, you can read about it here: http://www.kodewerx.org/wiki/index.php/Syndrome

Some interesting points about this editor:
* It's open source (the most recent source code snapshots are available right now: http://hg.kodewerx.org/syndrome)
* It's written for XULRunner (the same technologies powering Firefox)
* Its application logic is written entirely in JavaScript (for now; eventually it will be necessary to rewrite some of the CPU-intensive parts in C++)
* It's fully cross-platform; tested and running on Mac OS X, Windows XP, and Linux (Ubuntu).
* It can read the Mega Man 7 US ROM with or without an SMC header. The SNES ROM lib I've been writing handles LoROM and HiROM mapping modes.
* It supports opening zipped ROMs directly (PKZIP only! not 7zip or any other archive formats)

Planned features include:
* Non-destructive editing (NDE) - all changes will be possible to undo. Even after saving and closing the project. This will be done with a well-balanced mix of XML files (to keep track of what's been worked on) and UPS format patches (the actual "hack" itself). The idea is to never write directly to the ROM file, but to handle cases where a hacked ROM can be loaded into the editor.
* "Saving" your project will save changes as a UPS format patch file, which will be loadable with emulators supporting the format, and directly distributable on the internet.
* Intuitive editor UI that keeps information overload to a minimum; no more pop-up windows! (or at least keep them to an absolute minimum) Pop-ups are bad for the internet, and they are bad for desktop applications, as well. Support for multiple user paradigms; keyboard-driven, point-n-click-driven, drag-n-drop-driven ...
* Internationalized! It is very simple to translate the UI into any language! Coding experience not required.


Syndrome looks like this:

Mac OS X 10.5


Ubuntu 8.10


Windows XP SP2



Syndrome currently has no UI, and no editing capability. Something I really need to work on before this becomes usable. It does show some promise, however. Considering I've only been working on it for a few hours each night, I think it is progressing along quite quickly.


Objects are currently read and parsed, but the data is not 100% deciphered. The editor can draw a cross-hair and index number on the map in the correct location, but the only way to tell what it's supposed to be is by looking at the remaining "unknown" data for each object.

The objects are capable of changing background palettes and tile sets when Mega Man "touches" them. For these kinds of objects, Mega Man may not have to exactly touch them, but just pass over the X- or Y-coordinate where they live (not verified). The first palette-changing object in the intro stage is object #9.

Objects also describe enemies. The first "Bunby Tank" enemy in the intro stage is object #12. Most enemies are sprites (OAM), some are SNES background layers (e.g Intro stage object #19; Mad Grinder).

Objects also transform the stage itself. A few good examples of this kind of object are objects #1, #2, and #3 in the intro stage; these create the first "unstable road" blocks that stop Auto.


Syndrome can export rendered stages to PNG. Note that the rendering engine is incomplete. Palettes and tiles are incorrect in some locations. Here's a list of exported stages:

http://parasyte.kodewerx.org/projects/syndrome/stages/2009-03-07/ - First exports
http://parasyte.kodewerx.org/projects/syndrome/stages/2009-03-10/ - Exports with object notations


Object tile sets are not resolved or loaded, yet. I've found a good portion of the assembler routines which handle it, but not everything. The first sprite tile set loaded for the intro level is at ROM file (without SMC header) address 0x1BBBE. The five bytes here describe the tile set:

byte-0: tile data length (shift this byte left by 4 to get actual length; if zero, stop processing)
byte-1, byte-2, byte-3: ROM pointer to actual tile data
byte-4: destination offset and end-flag (high bit set indicates processing end, mask lower 7 bits and shift left by 8 to get actual destination offset)

Taking this specific data for example:
3C 40 49 DA 80

Data Length: $03C0
Data Source: $DA4940 (translates to file address 0x1A4940)
Data Destination Offset: $0000 (equates to VRAM location $6000)
End of sprite tile data.

When the end-flag is not set, the game engine processes the next five bytes to load more tile data.


The "battle plan" goes something like this: the editor needs a UI. Some ideas of mine are available on the Kodewerx Wiki (aka "Kwiki"), linked at the top of this post.

It then needs to support fully non-destructive editing. (NDE is popular in photo editors like Photoshop and in many video and audio editors as well. This is usually done by abstracting the editing process with "imaginary" layers.)

To be a complete editor, it needs to handle all objects properly, especially in regard to objects which modify stage design/layout and general game play. These may be the most difficult to deal with since Syndrome wants to display the full stage for editing, rather than working on one screen at a time (like most Mega Man editors do).


If anyone is interested in helping (with data or coding -- come on, it's JavaScript! It's dead simple to work on!) just post here and we'll see if we can get you setup to work on it.

As an aside, please keep in mind that I'm not familiar with the Mega Man series, much less Mega Man 7. The enemy names listed here came from Wikia Gaming. Compare the Syndrome-rendered stages to the rips available at the The Video Game Atlas


Edit: Made some minor adjustments for clarification.

Parasyte
Posted on 03-15-09 03:42 AM, in Mega Man 7 editor and general hacking Link | Quote | ID: 103034


Red Goomba
Level: 17

Posts: 14/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Another thing I forgot to mention about objects: they also control the scroll stops and scroll direction changes. These work similar to the tile set/palette handling objects; the game engine compares one or both of Mega Man's coordinates to the object.

It's fairly easy to guess which ones do these things just by playing through the game (or watching a video) while looking at the Syndrome renders for comparison.

Parasyte
Posted on 03-15-09 08:21 PM, in Mega Man 7 editor and general hacking Link | Quote | ID: 103148


Red Goomba
Level: 17

Posts: 15/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
I don't know about revolutionary. Just my opinion on how an editor should work.

So do you dislike Firefox? The editor does not run in Firefox or anything like that. It just runs on the same runtime platform that Firefox does. And the same one that Thunderbird runs on, and Open Komodo, and Pidgin...

Since it's open source and written in standard web languages, I think it would be a pretty nice tool to get other developers started with their own editors. (Without resorting to .NET, which has almost zero cross-platform specialization.)

But then again, this thread is about Mega Man 7, and as I was saying in the original post, the tile set data for sprites is still not completely known. I've found the length/source/destination data, but haven't yet found where it gets indexed from (though I have a lead). There also seems to be another "destination offset" that gets used before the DMA is started. That needs some more investigation.

The editor strictly uses pointer tables to load stages. For example, here's the list of pointer tables it uses, from yesterday's snapshot.

You might notice those are SNES HiROM pointers. The editor uses SNES memory mapping internally to make it nice and easy to navigate pointer tables directly. All of those pointers points to a pointer table. (Confusion sets in?) The pointer tables are nice because they can be indexed with some known value, like the stage number. Something similar is needed to map the object data (mm7Editor.PTR_OBJECTS) to a tile set.

I have an idea that object #0 is typically Mega Man. (I say typically, because the objects seem to be ordered first horizontally, then vertically. That means, any object that has a lower X-coordinate (or equal X- but lower Y-coordinate) than Mega Man, should also have a lower index.) It's probably a good idea to begin tracing from object #0 reads, which may shed some light on what I'm missing.

Parasyte
Posted on 03-15-09 11:34 PM, in Graphics Link | Quote | ID: 103178


Red Goomba
Level: 17

Posts: 16/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
For 3D modeling, I've been looking into Blender.

Parasyte
Posted on 03-17-09 03:00 AM, in Mega Man 7 editor and general hacking Link | Quote | ID: 103339


Red Goomba
Level: 17

Posts: 17/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
I'm not entirely sure how sprites/OAM are assembled. I haven't actually looked at the data, just been screwing with the assembler for a bit. It's a big pain because Geiger's SNES9x debugger (to put it bluntly) sucks the big one.

Parasyte
Posted on 03-24-09 01:49 AM, in Mega Man 7 editor and general hacking (rev. 2 of 03-24-09 01:52 AM) Link | Quote | ID: 103803


Red Goomba
Level: 17

Posts: 18/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
Posted by Jigglysaint
Need me to find anything?

Yeah, figure out those first three bytes in the object definitions (see mm7.js)
Posted by Jigglysaint
It sounds to me that MM7 might actually share a similarity to Megaman X.

The games bear a passing similarity, at least. Since Mega Man 7 was a much later game than Mega Max X, it's probably likely that MM7 and MMX3 are more closely related.
Posted by Jigglysaint
Any idea how the level order is loaded yet?

You mean the physical stage order? Yes! All stages are ordered based on the pointer tables. The Syndrome source code is the best source of info for that. But here's a quick breakdown of each index in those tables:

0x00: Intro stage
0x01: Freeze Man's stage
0x02: Cloud Man's stage
0x03: Junk Man's stage
0x04: Turbo Man's stage
0x05: Slash Man's stage
0x06: Shade Man's stage
0x07: Burst Man's stage
0x08: Spring Man's stage
0x09: Robot Museum
0x0A: Wily's Fortress 1
0x0B: Wily's Fortress 2
0x0C: Wily's Fortress 3
0x0D: Wily's Fortress 4

Parasyte
Posted on 03-26-09 02:07 AM, in Mega Man 7 editor and general hacking Link | Quote | ID: 103956


Red Goomba
Level: 17

Posts: 19/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
That was pretty much what we discussed last night; the games are similar enough that the editor could handle them both with just some minor changes.

I prefer using the term "object" in this game (or series of games using this game engine) because, as you said, they aren't all sprites. Some objects act as events or control points. Thus, nothing for the SNES to render on screen using OAM. But this is little more than a pet peeve, really.

One thing you mentioned was that X3's maps are compressed. ("Maps" meaning the array of room numbers ... or the 'highest level' of stage data required to render a stage.) MM7 uses no compression on this array.

Were you planning to document all object classes, types, and arguments? If you needed some help with that, I could probably pitch in. Having that info would be at least enough for me to fix some of the rendering bugs in the editor. Namely palette and tile swaps. Some other things to keep in mind are: loading OAM tile sets, tile maps, and palettes for sprite objects; background layer priorities (see: Mad Grinder intro stage mini boss ... He is rendered in the background layer, which is moved to the foreground by a special object and then moved back to the background by another object); etc.

Parasyte
Posted on 04-10-09 01:27 AM, in Mega Man 7 editor and general hacking Link | Quote | ID: 104861


Red Goomba
Level: 17

Posts: 20/48
EXP: 24722
Next: 21

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5181 days
Last view: 5159 days
* Download the most recent .zip and extract it to a directory that is easily accessible (e.g. C:\syndrome\)
* Install Firefox 3, if you haven't, already
* Start -> Run
* Type the following:

"C:\Program Files\Mozilla Firefox\firefox.exe" -app "C:\syndrome\application.ini"


At some point, I will have to create an installer and proper XULRunner application package. (Right now, it's not even packaged. !) Doing that would make the user experience slightly better, but it would be harder on potential developers.
Pages: 1 2 3


Main - Posts by Parasyte

Acmlmboard 2.1+4δ (2023-01-15)
© 2005-2023 Acmlm, blackhole89, Xkeeper et al.

Page rendered in 0.233 seconds. (330KB of memory used)
MySQL - queries: 132, rows: 164/164, time: 0.222 seconds.