The Great Metroid Construction Collaboration Hunt - Post your resources here!

Started by Zhs2, July 20, 2009, 07:55:03 PM

Previous topic - Next topic

SavageWizzrobe

I have a few patches!

1) Alternate Enemy Shot AI

Tired of the ice beam taking an extra hit to kill everything? Well, look no further! This patch changes the shot AI for most enemies so that the Ice Beam can kill weak enemies in a single hit. Enemies also have a few more invulnerability frames after being struck by the Plasma Beam.
WARNING: This patch writes code to free space in bank $A0 (1077D3-1077E5).
Note:This patch is compatible with the patch below.

2) Variable Pseudo Screw Attack Damage

Changes the pseudo screw attack damage based on your beams equipped. The attack will do the same amount of damage as a charged shot. This can give a hack a more modern feel, like ZM or Fusion.
WARNING: This patch writes code to free space in bank $A0 (1077E6-10786A). It also changes the pseudo screw attack damage in SMILE to F7E6. Do not change it after applying the patch unless you know exactly what you're doing!
Notes: This patch is compatible with the patch above. This patch was not designed with Spazer + Plasma combos in mind, but that could be added. Fortunately the game doesn't crash if you charge a glitched beam and pseudo screw attack an enemy.

3) Lower Norfair BG Fix

In the original game, there is a background (BG Pointer: BF17) used for a few Lower Norfair hallways that has a tiling error. This patch simply fixes that tiling error.

FelixWright

I've just completed and uploaded a Tile Molester Graphics Ripping Guide. The guide covers finding graphics and palettes, controls, assembly of compressed sprites, and extraction from ROM.

interdpth

So...Fusion has 3 debug areas....I don't feel like doing a shit ton of repointing to add a new area....So I did some hacking.(Was it more work? I don't know but it was more fun.)
This patch enables debug rooms to be treated as normal rooms.
Changes:
Debug rooms now use normal TSA
Debug rooms should work fine on the minimap now, make sure to set the X,Y in the Room Header.

Gave them base scroll data. The scroll data is located at 0x7B217C. They all use mirror copy data, and the scrolls don't do the free scroll thing when you leave them. But yeah, enjoy.
Source ASM and xkas included. 

Mettyk25jigsaw

BEAMS-CHARGE-BOMB GATES...

WHAT IT DOES:

*Replaces any beam gate modes to power beam gates...
*Adds ice, wave, spazer and plasma gates
*Adds Charge beam gates
*Adds bomb gate
*All gates have left and right options (of course)
*Keeps the original missile, s.miss, power bomb gates---does NOT replace them...

Free space used = 027CBA to end of bank $84

To learn how to use, read readme file...

Enjoy...

Smiley

I once made a thing but for some reason I never released it. Oh well, here it is now.

Rewritten damage division routine! This makes suits divide damage by 2 each instead of the retardy the original game does. This means you actually need both suits instead of just Gravity to bring received damage to a quarter.
As a bonus, Gravity will no longer completely protect from heat, but it will halve heat damage. You can easily change this in the .asm though.

Requires no free space. This in fact used 3 bytes less space than the original routine.

PHOSPHOTiDYL

Tweak for Black_Falcon's Tractor Beam.

So with the tractor beam patch, items will just fly to you every time you fire your beam. Instead of checking $0CD0, the current charge for Samus' beams, it now checks $0B62, the palette index for Samus' charge, so now you won't attract items unless fully charged. Yay.


Quote58

Quote from: PHOSPHOTiDYL on August 09, 2016, 05:08:33 AM
Tweak for Black_Falcon's Tractor Beam.

So with the tractor beam patch, items will just fly to you every time you fire your beam. Instead of checking $0CD0, the current charge for Samus' beams, it now checks $0B62, the palette index for Samus' charge, so now you won't attract items unless fully charged. Yay.

Totally forgot he never fixed that haha. Personally I had it check for the degree of charge it was at and adjust the speed accordingly but I decided it still looked off so I was working on adding proper floaty physics to it. I replaced item drops altogether in my current hack though so I probably deleted the other stuff

PHOSPHOTiDYL

Fake Wall Jump Boots.

Credit to whomever posted the disable wall jumping hex tweak & gave me the idea for this, and JAM, for whom I compared my code to.

I still can't get a functional wall jump boots cursor placed on the equip screen, and I don't like how combining bitflag values still counts as separate items towards the item percentage. So instead, some code for disabling wall jump until hi-jump boots, or any other item of your liking, is equipped, or collected.

Also credit to anyone who's helped with the ram map..

Scyzer

Today I went through the Enemy Drops routine to see how the values in SMILE work. Not surprisingly, t's a total mess. The drop rates all have different influence over the total chance and just ergh...

So I made my own!
https://dl.dropboxusercontent.com/u/11341279/newdrops.asm

This routine basically turns the drops into a simple drop % chance based on the rate of each drop. The chance of any one drop is [Rate] / [Total Rate]. If a particular drop wouldn't give you anything, then it's values are not taken into account.

This means if all drops have a rate of 20, and you're only missing health and supers, then you have a 20/80 chance of the 4 available drops (small/big energy, supers, nothing).
If all drops have a rate of 20 except powerbombs at 60, and you're missing health, supers, powers, then you have a 20/140 chance of either small energy, big energy, supers or nothing. Powerbombs have a 60/140 chance.

The low health warning still gives extra energy, but it's now just double the rate of each energy rate. In the above example, you would have a 40/180 chance of small energy, 40/180 chance of big energy, 20/180 for supers or nothing, and 60/140 for powerbombs.

This can be applied to any hack or vanilla SM with negligable effects (over hundreds or thousands of drops, you'll see less supers/powers), but it'll make editing drop rates to how you want them MUCH easier.

interdpth

Would like to point out that @Mon732 put my header files up on the new Wiki for Fusion.
http://wiki.metroidconstruction.com/doku.php?id=fusion
Lots of addresses and structures not currently on Datacrystal. Have fun :)

Smiley

I made a block that enemies can pass through no problem, but acts like a solid block for everything else. Basically a Shaktool block that doesn't get destroyed.
Use a spike block with BTS value $0E.

Yellow download text

Mettyk25jigsaw

Beams Only Specific Doors--mixed combinations....

Creates doors for ICE Beam-Wave beam-Spazer and Plasma to open...

Uses free space from 2-7037 ($07F8 worth)

Compatible with or without project base rom...

Please read readme file for instructions...

Note that this is only the first version, next 2 versions will both have grapple, bomb and charge doors, one with mixed combinations and one unmixed...They will be patchable one onto the next though...

Please PM Me or post here if there are any bugs.

Mixed combinations? This means that you find the spazer for example and you can still open spazer doors if you have them mixed with other beams equipped...

Enjoy...

QRIJ

My first patch of anything ever. Nothing new nor fancy.
It makes non-Ceres doors open as fast as they do in Project Base.
Modifies existing code so no free space used.

Mettyk25jigsaw

I have found a solution for this wave beam door issue where door will open automatically if you chose to use the doors open individually patch in regards to my beam specific doors (2 posts above)...

Use an enemy D53F for vertical doors and I presume it will work for horizontal doors too if you use enemy D57F, make sure vulnaribility for wave beam is 00 inside enemy editor...Make enemy invisible but don't make it a platform...Put it 100% directly over door and presto, it makes it act the exact same way other beam doors work even from any direction too...

squishy_ichigo

Not sure if this was ever posted here before or not, seeing as its not my work, but JAMs, but here is some data on editing the hexagonal maps that display when loading up the game

This is a copy/paste job, as I don't have the time to format it right now.

[spoiler=Tilemaps: BANK 81 not 80, crashed remembered wrong]
<crashed> Layer 1 hexagon tilemap is at $80B71A. #$800 bytes large.
<crashed> Loaded via D0,X table, routine at $80A548.
<crashed> Layer 3 hexagon tilemap is directly after that at $80BF1A, also #$800 bytes.
<crashed> Loaded via D0,X table at $80A58A.
<suku> why is it on two different layers?
<crashed> area hexes are on one layer, background hex pattern on another layer
<suku> ah

this doesnt seem right.....

81, not 80

Format????
First Byte - Tile Used
Second Byte - Bit Array:
8th-Vertical
7th-Horizontal
3/4th-palette line called[/spoiler]

[spoiler=editing area names, written by JAM]
As you know, editing area names in SMILE isn't enough to have names changed on hexagonal map screen, so many hackers are skipping it.

This little guide points you to location of some hexagonal map tilemaps.


PLANET ZEBES pointer location:
145D9

It points to:
14BFB



Area names array location (part of bigger array):
145DB

Pointers to area names on hexagonal map (starts at 145DB):
82:CC6B   CRATERIA
82:CC95   BRINSTAR
82:CCBF   NORFAIR
82:CD2E   WRECKED SHIP
82:CD09   MARIDIA
82:CCE4   TOURIAN

Format of each entry is similar to other graphics format. 2 bytes for size + 5 bytes for each tile.

Format:
SS SS
XX XX YY TT PP

SS SS -- size
XX XX -- X position of the tile
YY -- Y position of the tile
TT -- tile number
PP -- palette and other options here.

Example
=======

Crateria area name.
14C6B:
08 00         8 tiles
17 00 FC 6A 30      X:  17   Y:-04   A
10 00 FC 72 30      X:  10   Y:-04   I
0A 00 FC 7B 30      X:  0A   Y:-04   R
02 00 FC 6E 30      X:  02   Y:-04   E
FA 01 FC 7D 30      X: 1FA   Y:-04   T
F2 01 FC 6A 30      X: 1F2   Y:-04   A
EA 01 FC 7B 30      X: 1EA   Y:-04   R
E2 01 FC 6C 30      X: 1E2   Y:-04   C


AIRETARC is CRATERIA written backwards. Order is not important since all of these letters will be displayed on screen.

Every tilemap can me edited, repointed (with changing pointer at 145DB) etc.
[/spoiler]

Mettyk25jigsaw

Beams Specific Doors + Grapple--mixed/unmixed combinations....

Creates doors for ICE Beam-Wave beam-Spazer and Plasma to open and now grapple doors...

Uses free space from 2-7037 to 2-7A1E

Compatible with or without project base rom...

Please read readme file for instructions...

Note that this is only the 2nd version, next  version will have bomb and charge doors, with mixed combinations and unmixed...They will be patchable one onto the next though...

Please PM Me or post here if there are any bugs.

Mixed combinations? This means that you find the spazer for example and you can still open spazer doors if you have them mixed with other beams equipped...Unmixed means the opposite...

I was going to do it differently for 2nd and third version and release them together with all doors, but bomb and charge doors take longer, so I will just release 2nd version now with just grapple doors...Third patch once again will still be patchable one on to the next or the third onto the 1st version etc...

Enjoy...

Patch is now next post down...Just scroll down, there was an error...



Mettyk25jigsaw

Silly me left out an important note in readme so I have updated the patch with updated readme file to fix it...I have copied and pasted it here too...

MESSAGE: HOW GRAPPLE CODE WORKS...

When starting a brand new game out of your hack with this patch applied, it will act 'as normal' you won't notice any difficulties...
    However when testing in SMILE, you will always have to have charge beam bit '1000' activated in emulator equipment settings if you don't want grapple doors to be openable by power beam, however this will not allow you to use charge beam when testing, if you have SMILE JX or Smile RF you can set bit '8000' under beams to set the charge beam so it will then work...
    At start of brand new game you already have beam bit '1000' activated and there is no way of deselecting it in equipment screen thenceforth you have grapple doors openable only by grapple beam and at the same time you are not able to use charge beam until you find the charge beam with bit '8000'.
    Unfortunately when testing inside smile, bit 1000 can't automatically be activated, so you must select it yourself to stop bug from happening, but I guess that because when playing game from beginning to end normally the bug won't be there, then this won't worry any/many people...
    Charge beam will still be displayed in equipment screen, so don't worry (deselectable and reselectable etc)...
    If you are using original smile, then you are going to have to temporarily place a charge beam item in room so you can activate charge beam in order to test rooms or upgrade to RF Or JX...

sylandro

I'm sharing my first effort on this thread. I decided to learn ASM, and ended up coding something silly and unnecesary: difficulty levels to Super Metroid. With this, the Item Cancel setting becomes a difficulty selection menu. The levels roughly follow the same rules as the GBA games and AM2R. Basically, apply this and you have three new game modes for your game.

Oh, also, the event flag 0xF0 is applied automatically whenever you start a hard game so you can have alternate room states for it.

Some screenshots:


Technical info:

The patch is fairly simple but hijacks many existing routines across many banks. The idea was that no value was to be changed, only scaled according to the difficulty level, to make it more compatible with other hacks (unless your hack heavily modifies or moves existing routines, see the readme for more info on what is changed).

I've broken the source into several files to give a (fake) semblance of modularity. In most cases each file corresponds to a different bank and a specific behavior that is changed, so you can tweak it (or erase parts) however you want to make it compatible with your hack.

I've also included three samples that are applied by default, just as a proof of concept. One edits some rooms in order to add more enemies if Hard mode is selected, the other tweaks some enemies to have different behavior on Hard, and the other adjusts some vanilla values to make it more consistent with the rest of the series. This was done only for demonstration purposes and should be disabled if you plan to use this seriously.

This is my first ASM ever, so if this interests you feel free to drop feedback or edit the sources however you want (but give credit if you use it (: ).

personitis

I will start by saying that I'm lazy as hell towards ideas unless I have need for them and that getting the thought of how something could work out of my head helps me calm the itch that accompanies. I'm pleasantly surprised someone took the time and effort to make this a thing and it's made my day a tad better. :^_^: I'll make sure to give it a go/check it out at some point.

Good first steps into the hack community and assembly as well. Welcome aboard.

RealRed

Sylandro this is superdope. I'll likely use this some day. If I could make some suggestions...

  • Changed enemy bank for rooms? new difficulty, new room for changed enemy pointers
  • different plm values? Expansions worth less, blah blah blah.

sylandro

Thanks!

I tried not to mess with plm and other values, the expansion amounts are scaled by hijacking the pickup routine and dividing whatever value there is in half. I was aiming for compatibility. The same strategy is applied to other parts of the game.

I'll paste a part of the readme for those who are curious:

[spoiler]
##Changes made by this patch

* Edit the Special Settings screen in order to turn the Item Cancel menu into a difficulty selection menu.
* Edit the File Select screen in order to display the selected difficulty level next to its corresponding file.
* Disable the Item Cancel functionality from the game (who uses this anyway?).
* Recalculate how the energy and reserve is displayed on the HUD, Status Screen and File Select screens (may conflict with other UI patches).
* Super Missile and Power Bomb tanks are now worth 2 units instead of 5.
* The threshold to get the worst ending is now 6 hours instead of 10.
* **Save a new flag in SRAM that corresponds to the selected difficulty.** This can be used to write other hacks that tweak other parts of the game.
* **Automatically add event 0x0F when a new game is started with Hard difficulty.** This can be used to create new room states.
* Change gameplay according to the selected difficulty level:

###Normal
* Nothing changes.

###Easy
* Samus receives half damage from all enemies.
* The Ceres and Mother Brain countdown timers have 30 extra seconds.
* Always get the worst ending, regardless of time.

###Hard
* Samus receives double damage from all enemies.
* Samus deals 75% damage to all enemies.
* Samus receives half energy and ammo from enemy drops.
* Drop rates that would yield nothing are doubled. Enemies that always dropped something now have 4% chance to drop nothing.
* Energy, Reserve, Missile, Super Missile and Power Bomb expansions only grant half their original amount.
* The Ceres and Mother Brain countdown timers have 30 less seconds.
* Some rooms and enemies have minor alterations.
[/spoiler]

I structured the patch in a way that is easy to delete/tweak the parts that don't work on your hack or are unbalanced. I wouldn't want to break things if someone wants to use this on a hack that's already in construction.

I like your idea of repointing stuff, but for those reasons don't want to force it. Although, it's very likely that someone who wants to use this at its full potential will inevitably have to do so. I know it's tedious...

begrimed

Sweet little piece of ASM by Scyzer that keeps Samus's equipped suit palette into the ending sequence:

[spoiler]

LoROM
org $8BF71B : JSL SuitCheck

org $8BF900
SuitCheck: Assume mx:%00
LDA $09A2 : BIT #$20 : BNE .G : BIT #$01 : BNE .V
.P LDX #$941E : BRA .D
.V LDX #$953E : BRA .D
.G LDX #$981E
.D LDA #$9B00 : STA $13 : STX $12
LDX #$1E
- LDA [$12] : STA $7EC040,X : STA $7EC1C0,X
DEC $12 : DEC $12 : DEX #2 : BPL -
SEP #$20 : STZ $69 : RTL
[/spoiler]

CrAzY

That is adequately sexy. We shall do it all! Dress our little Samus doll up, build her new worlds to explore, get her new things to accessorize with. She will never be free!  :razz:

adamf

EDIT: Found a critical bug. Back to the drawing board.

sylandro

Ballspark. With this you can shinespark as a morph ball, but only if you have the Spring Ball.

The implementation is a bit hackish, the proper way would have been to create new entries in the transition, animation and delay tables but that involves moving a lot of code. Right now it tricks the game thinking it's a regular shinespark, but loads the values that would correspond to a morphball. The downside is that there are a lot of comparisons.

The file ballspark-main.asm enables the move. If you use Project Base or the patch that lets you continue running if you hit a slope while shinesparking, apply ballspark-slopes.asm as well.

Special thanks to @Quote58!



EDIT: Fixed a bug that only allowed to spark to the right.
EDIT2: Now you can jump as a ball when flashing, to make it more similar to the regular shinespark. To trigger the ballspark, just tap jump while no other buttons are pressed/held. Also, if you use the slopes patch, now you can trigger consecutive ballsparks if you press down and are flashing white.