Points of Required Attention™
Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,439,224
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 04-19-24 10:47 PM
Guest: Register | Login

Main - Posts by Trax

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Trax
Posted on 06-06-13 10:37 PM, in Contra Demo - 6th Edition - Release Link | Quote | ID: 154048


Yellow Stalfos
Level: 71

Posts: 1131/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
For those who are interested in Contra for the NES, level 6 of my demo is ready...

Now my hack has a name: Revenge of the Red Falcon. It's about time, anyway. The intro screen was modified more extensively than with previous iterations, to make place for the new title. I'm quite satisfied with the colors, and I tried to move the elements around and remove some of them. The final layout is not definitive, though...



Level 6 is Energy Zone, renamed to Power Plant in the hack. I fiddled with the palettes, and I finally chose a mix of dark red and green tones. The length of the level passed from 11 to 30 screens, so you'll have plenty of occasions to die...

Not a lot of new enemies in level 6. We have now three different types of Fire Bursts, down, left and right. No change was made to their behavior. I could have made them faster, but I feel like it doesn't add a lot to the gameplay, except die faster. There's a table at $2A0B that let you change the 4 possible lengths of the beams, according to their attribute value. Another attribute (different bit field) lets you change the delay between the bursts, which can be zero. A short beam with 0 delay means you can't pass it, so you have to be cautious with the attributes. A very long beam with no delay is still acceptable because by the time it retracts and comes back, you can clear it. For some reason, the rightward beam seems to be coded with some random factor added. This means the delay is somewhat unpredictable. I think it feels like fake difficulty, so I used it only once in the entire level...

The other new enemy in level 6 is the Boss Robot, modified slightly. He moves a little faster, jumps less high (loses less time in the air), and can shoot many more consecutive Spiked Disks. You will have to time your jumps carefully. His HP was beefed up quite a bit, so he can now take a lot of punishment before being destroyed. The Spiked Disks he throws can also be modified with ease, tables are readily modifiable. I tried many different combinations, trying to make them move faster, but in the end, it was becoming awfully hard no to die, so I left them unchanged...

There's an enemy you've seen since level 1, but with a different behavior in level 6: the Mortar shots. These new types of Mortars act like fragmentation grenades. Level 5 had single Mortars that appeared out of nowhere, fired at different angles. This time, Mortars divide into bullets in 4 different patterns. The Triple Mortar (with gravity bombs) is also present, as usual. I had to create new ASM code to make sure the new behavior of the mortar in level 6 would not break the old behavior in level 5 (and vice-versa)...

I added another small change. The Standard Weapon (white bullets) and the F Weapon can now have 8 bullets on screen at any given time, instead of 4. Since the difficulty is very high, I thought that it would at least remove the annoyance of having to wait for some bullets to disappear before being able to shoot again. Other weapons were not changed. The M Weapon has a maximum of 6, and the S Weapon has a maximum of 10...

Oh, and more good news. I found a way to expand the ROM successfully, and with minimal change to the original code. This demo doesn't have the ROM expanded, because I didn't want to delay the release further, so it's still the second part that starts with level 5. The next demo (or the final release, maybe?) will have all the levels in one neat ROM. This will be awesome...

Now, go ahead and enjoy the challenge!

Contra - Demo Part 2 - Level 5-6

Original ROM: Contra (U) [!].nes

Any questions?

Trax
Posted on 06-09-13 11:41 PM, in Contra Demo - 6th Edition - Release Link | Quote | ID: 154077


Yellow Stalfos
Level: 71

Posts: 1132/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
You're quite welcome!

By the way, if any of you want to start from a specific level, here are the respective IPS files that let you do that:

Start at Level 2
Start at Level 3
Start at Level 4
Start at Level 6

Levels 2, 3 and 4 are all based on the 4th edition of the demo, and not their respective releases...

Trax
Posted on 07-22-13 05:31 AM, in How to read Contra(U)'s graphics? Link | Quote | ID: 154388


Yellow Stalfos
Level: 71

Posts: 1133/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
Graphics Data in Contra is compressed using a mix of litteral bytes and RLE sequences. That's the reason why only some parts seem to show up correctly in a generic tile editor...

Another reason you most likely need a specific editor is that the graphics are separated in groups or "chunks", each with their own pointer. Each level has its own set of chunks (more than one level can share the same chunk). Within any graphics data sequence, you can also bump into a specific value (0x7F) that triggers a change in the PPU writing location. If you overwrite this part, you will most likely get weird results when you run the game...

And finally, since the graphics data is of irregular size (because of compression), there's a strong possibility of overflow if the new graphics take more space. This is not an issue with uncompressed graphics or CHR banks because each tile take exactly the same space...

Trax
Posted on 09-29-13 05:09 AM, in Need answers from those familiar with the combo dungeon system, with The Legend Link | Quote | ID: 154863


Yellow Stalfos
Level: 71

Posts: 1134/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
Maybe I'm stating the obvious, but here's the original system's data for secret passages (offsets are for PRG0):


163B4: Column Data for Underground Passages (2 * 10 = 20 bytes)

04 04 00 01 00 00 00 00 00 00 00 00 01 00 04 04 Passage Room
04 04 00 01 00 00 00 03 03 03 03 02 03 03 04 04 Item Room

----

163D4: Column Definitions for Underground Passages (22 bytes)

Same Byte Format

.... xxxx Tile Code
.x.. .... Tile is Repeated Once
x... .... Start of a Column Definition

0 = Black (top of stairs)
1 = Stairs
2 = Black (blocked)
3 = Bricks
C = Black (walkable)

82 43 43 43 02 0C 43 Column 0
80 41 41 41 41 43 Column 1
82 43 42 0C 01 41 43 Column 2
82 43 42 0C 03 02 0C 43 Column 3
82 43 43 43 43 43 Column 4


The compression scheme is similar to the Overworld's, with a possibly lower compression ratio. Other than that, normal dungeon rooms are 7 TSAs high instead of 11, and have 12 columns instead of 16, so you have to start your PPU writing head at a specific offset, both for vertical and horizontal adjustments.


Trax
Posted on 09-29-13 04:24 PM, in Need answers from those familiar with the combo dungeon system, with The Legend Link | Quote | ID: 154866


Yellow Stalfos
Level: 71

Posts: 1135/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
I think what Infidelity means by combo is what I call a column. The original engine uses predefined columns of 11 tiles high (7 for dungeon columns), assembled from left to right for each screen ID. This way a screen takes only 16 bytes (12 bytes for dungeon screens) of ROM/RAM space...

This system is quite efficient in term of compression, but it makes level design very tedious, as you have to juggle between columns to create the screens in "jigsaw puzzle" style assembly...

One of the things that comes to mind immediately when using the free tile layout like Infidelity uses, is compression. Without any, an entire map (assuming all screens are unique) cannot fit into a 4000 byte ROM bank. The total comes to:

B * 10 * 8 * 10 = 5800. Not even close.

I'm actually curious about how Infidelity does his magic. Some time ago, I made some raw calculations using the original Overworld to see what kind of compression ratio we could achieve with a simple RLE compression scheme, and the results where quite interesting. I used the original 7C unique screens (screens 7C to 7F are not defined), with B0 bytes in uncompressed form, for a total of 5540 bytes. Here's the results after the number crunching:

Total Size : 1E06 (7686)
Average Size : 3D (61)
Total Saved : 373A (14138) (63%)
Average Saved : 72 (114) (65%)


Trax
Posted on 10-03-13 03:16 AM, in Zelda - The Legend of Link (v3-12-20) Released (rev. 2 of 10-03-13 03:20 AM) Link | Quote | ID: 154888


Yellow Stalfos
Level: 71

Posts: 1136/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
I wish I could play it using Nestopia, but the game always crashes before I can see the saved games selection screen. Must be because of the MMC5 mapper...

EDIT: never mind, it works. Now if I can find a sword...

Trax
Posted on 12-06-13 08:18 AM, in Contra Demo - 7th Edition - Release Link | Quote | ID: 155222


Yellow Stalfos
Level: 71

Posts: 1137/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
Hi guys! For those interested, another crazy level for my hack of Contra, Revenge of the Red Falcon. This is Level 7, the Hangar, renamed to Warehouse. The length of the level is now 29 screens, compared to the original 14 screens...

New enemies in this level are more of the "obstacle" type, like Spiked Walls and Mechanical Claws. The special Shrapnel Mortars are still present, and quite dangerous. Watch your step, especially when you see gaps in the floor. I added 1 HP to the Carts, because you will need them if you want to reach higher platforms. You will also have to avoid new patterns of Mechanical Claws. I reduced the HP of the Spiked Walls from 16 to 10, only because destroying immobile walls is boring...

The Boss will require a lot of concentration, as the Mortar Launchers will fire more often, and shoot random types of projectiles: either the classic, 3-bomb mortar or any kind of Shrapnel Mortar. The Enemy Generator will randomly spawn a Rifle Man from time to time. And as if it was not aggravating enough, the Armored Door will become vulnerable to your attacks only after you destroy both Mortar Launchers. So no more rush to the door with the S Weapon...

This is the last run before the showdown against the vile Red Falcon. Lock and load!

Normal version, starting from the beginning: contrademo7.zip
For those who want to start directly on level 7: contrademolevel7.ips

Any comments? Enjoy!


Trax
Posted on 12-14-13 08:22 PM, in Zelda - The Legend of Link (v3-12-20) Released Link | Quote | ID: 155240


Yellow Stalfos
Level: 71

Posts: 1138/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
Personally, I don't mind a single bit that the project is not released in 2013. I prefer that the projet not be rushed for an arbitrary deadline. Take your time and don't neglect your other life projets...

Trax
Posted on 12-23-13 07:32 AM, in Contra - Mountain Challenge Special ! Link | Quote | ID: 155265


Yellow Stalfos
Level: 71

Posts: 1139/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
This is a Christmas present for Contra fans. It's an experimental project I started only a few weeks ago, and it finally developed into a nice playable hack. I was inspired by those mini hacks that are only a level long. I recently played SMB3 mini hacks by Darkdata, and I thought I could do the same with a game I know very well...



What do you think the level 5 (Snow Field) would look like if it was vertical? Here it is, the Mountain Challenge. The goal is simple: reach the Trophy at the top as fast as possible. That's it. Single level, no boss. As a bonus, you are timed, and you get the result during the end credits. You have infinite lives, so you can't get a Game Over, but getting hit will delay you. The goal is to be as fast as possible...

This was made quite fast, considering the amount of ASM hacking involved. This is what I could call speed hacking, and speed learning...

Here's a list of things that were modified:

- Intro Screen, similar to the Intro of the 5th edition of Revenge of the Red Falcon, with different palettes and the Mountain Challenge title.
- The Status Screen, now showing your objective, no flashing, no score, no hi score, no remaining lives.
- The gameplay is basically the same, except you have infinite lives. Enemies are a little tougher, but not as tough as in RofRF.
- I changed the palettes of the background to a more strong blue tint, and more green in the trees. The sprites are also different, including the player's pants color.
- Taking the trophy (Eagle Weapon Item) at the top ends the level, and stops the timer.
- The end credits are different, and you can see the time you took to finish the level, so that you can try to beat it.

Rifle Man shoots random numbers of bullets (between 2 and 5), bullets are faster. The Turret Man was not modified. I used very few Mortar Shots, seeing that their behavior is weird in a vertical environment. I didn't use the special shrapnel shots, for similar reasons. There are also grenade generators, and Scuba Divers. Both were not modified. The Standard and F weapons can have 8 bullets on screen instead of 4...

I included a text file of all my ASM notes for the hack, for those who are interested. If you have any questions, let me know...

Download the patch here. Use on Contra (U) [!].nes


Trax
Posted on 01-02-14 01:20 AM, in Zelda - The Legend of Link (v3-12-20) Released (rev. 3 of 01-02-14 01:31 AM) Link | Quote | ID: 155334


Yellow Stalfos
Level: 71

Posts: 1140/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
I confirm the bug reported by MikeTechno. I use Nestopia 1.4.1 on Mac. The selection screen works well, including music (minus a few artifacts on screen during the initial loading process). After I take the sword, pressing the B button freezes the game. If I try to move to either edge of the screen, the screen goes black for a few frames and the same screen is loaded...

Nestopia doesn't have any of the debugging feature of FCEUX. The .sav file is completely new, an there's no save state used. I patched on the PRG1 version of the ROM...

EDIT: I patched on PRG0 and everything works fine...

Bug report. When you fall in a hole, either you get killed in one shot, even with full health, or you take damage, but it doesn't show on the hub, even though after a few falls, you effectively die from the damage...

Trax
Posted on 01-07-14 02:03 PM, in Zelda - The Legend of Link (v3-12-20) Released Link | Quote | ID: 155388


Yellow Stalfos
Level: 71

Posts: 1141/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
I added a few things to your wiki page, while testing version 0.8...

One thing that I find mildly annoying, and it has already been said a few times, is the precision threshold for interactive tiles (bushes, diggable ground, hammer blocks, etc.), which is nearly 100%...

In that regard, I suggest you take a look at memory $394,X (X being 0-B, 0 is Link). I call it Inter-Tile Offset (0-F). Maybe you can use this value to help approximate the distance to a specific tile...

Trax
Posted on 02-08-14 03:53 AM, in Gb Adventures of lolo [Full lolo3 hack! ver 1,1] Link | Quote | ID: 155649


Yellow Stalfos
Level: 71

Posts: 1142/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
I'm trying that right now...

Trax
Posted on 05-21-14 06:16 AM, in Zelda 2 restart from current palace after game over Link | Quote | ID: 156574


Yellow Stalfos
Level: 71

Posts: 1143/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
The Palaces in the game have several codes that define them, but most of the time, it's not straightforward, like 00 for Palace 1 and 06 for Palace 7. There are two major RAM addresses that are used to refer to Side-Scrolling Areas. One is $607, which I call Region Code, and $707, which I call World Code...

Region (0706) World (0707) R * 5 + W

West Hyrule 00 00 00
Death Mountain 01 00 05
Maze Island 01 00 05
East Hyrule 02 00 0A

Towns in West Hyrule 00 01 01
Towns in East Hyrule 02 02 0C

Palace 1 00 03 03
Palace 2 00 03 03
Palace 3 00 04 04
Palace 4 01 04 09
Palace 5 02 03 0D
Palace 6 02 04 0E
Palace 7 02 05 0F


Another very important RAM address is $748 : Overworld Area out of Side View. This address contains the Area Index that tells where Link will re-emerge when getting out of a Side-Scrolling Area. This value is used at $1CB82 to determine where Link will be located when he exits the Palace. With this information, you can find out the last Palace visited (where Link died last) and set the $706 and $707 variables accordingly...

But maybe I'm overcomplicating things here. A long time ago, I tried to do the same as Njosro here is trying to accomplish. I almost succeeded, except that you would restart in any Area, including the non-Palace ones. So maybe by doing this, and adding a simple condition (one that is true only if you're in a Palace), we could have what we want...

Trax
Posted on 05-22-14 12:06 AM, in Zelda 2 restart from current palace after game over Link | Quote | ID: 156579


Yellow Stalfos
Level: 71

Posts: 1144/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
Njosro, I've read your first post more attentively, and it covers most of the issue. About your hack, if it works without glitch, that's a good thing. While I give you brownie points for ASM, I've seen worrisome things about your code...

First, I would not temper with the R*5+W routine, because it's used in many places and it's not worth having glitches somewhere else in the game (like with the Thunderbird). Free space is not that limited, and this calculation can be used to find out about the Palaces Starting Screens...

Your new routine stores arbitrary values one after the other in Cartridge RAM, but you could simply store a table somewhere in ROM, since this data is not meant to change...

Also, there could be additional problems if you decide to move the Palaces around in the Overworld. The game engine presumes that all Palaces in a given region start at index 34 (1CB87) in the Overworld. Maximum 4 Palaces per region. There are at least two data tables that rely on this to confer the right values for Graphics Banks (1CD2A) and Palace Palettes (1CD35)...

So, what do we want exactly? The right map number to start from. This value can be found in the Overworld Area Data Table, stored between 6A00 and 6AFB in Cartridge RAM (VRAM):

6A00-6A3E Area Byte 0 (Y Position)
6A3F-6A7D Area Byte 1 (X Position)
6A7E-6ABC Area Byte 2 (Map Number)
6ABD-6AFB Area Byte 3 (Region/World Code)

Take byte 2, keep bits 0-5, and you've got your Map Number. That's where $748 comes handy. It's the index to use in these tables...

Trax
Posted on 05-22-14 08:15 AM, in Zelda 2 restart from current palace after game over Link | Quote | ID: 156581


Yellow Stalfos
Level: 71

Posts: 1145/1145
EXP: 3034187
Next: 132927

Since: 07-06-07
From: Québec

Last post: 3620 days
Last view: 2872 days
Yeah, I realized my mistake after posting. The code you wrote in your last message is exactly what I used myself, verbatim. But yes, the Area Data Bytes change when the world change, and the VRAM is updated, so it's a no-go that way...

To correct this, we would have to determine the correct bank to load, switch to it, load $561 accordingly, and switch back. It looks complicated when said like that, but games do that kind of manipulation all the time, and Zelda II is no exception...

Your code could be simplified by taking the result of R*5+W, transfer it to Y, and use that index in your own custom table. If someone wants to change Palaces around, they could simply change these values by hand to match the starting areas of the palaces. Seems like a reasonable tradeoff...

I just realized that the R*5+W routine is also used to determine the RAM range used for Item Presence. This is vital because this is what makes an item taken and doesn't reappear when you go back to the area. This data is saved to VRAM...
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42


Main - Posts by Trax

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

Page rendered in 0.236 seconds. (330KB of memory used)
MySQL - queries: 108, rows: 135/135, time: 0.226 seconds.