| |||
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 |
Trax |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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 |
| ||
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...
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 |
| ||
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 |
| ||
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... |
Main - Posts by Trax |
© 2005-2023 Acmlm, blackhole89, Xkeeper et al. |
MySQL - queries: 108, rows: 135/135, time: 0.226 seconds. |