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

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

Previous topic - Next topic

JAM

Jordan5
Awesome. I did the same thing in my hard hack series few years ago. If wasn't so advanced. It just set bounds from 30 to 50 if your max energy <399, from 60 to 100 if your energy is 400..799 and from 100 to 150 if your max energy is >800. Closer to Prime series. But your patch is more accurate.

Though, if you change operator LDA $1414 to LDA $4214, it'll be more awesome than now. Because it will work as it should.

For "PLA : PHA" line, very good!

For using $12, you just can use X register instead. I mean, instead of

LDA !On : STA $12


use this one:

LDX !On

and STX $4206 later. With PHX at first and PLX later.

Thus, no need to PHA later and you can you use some space at $86F13F to waste less free space, like this:

PHX
LDX !On : JSR Division
CMP !OnMax
JSR $F4A6

PLX
BRA $05



Also, if you decide to make v1.1, please also syncronize the alarm sound to "spawn more energy" subroutine's staring value. Actually, it should be value + 1.

And your branching is wrong. BRA $0C in your code jumps to this part of original code:

DEY
STY $0E1A


and it should be in the end of your JSR.

That's how I'd wrote the whole patch after lorom line.
[spoiler]

org $86F13C

;original routine location

STZ $0E1A

;store zero at $0E1A. Mark routine as turned off by default.

;if energy is sufficiently low, jump to routine activation

LDY !On : JSR Division

;calculate energy value to turn on routine


;calculate energy value to turn off routine

CMP !OnMax : BPL $03 : LDA !OnMax

;if above !OnMax, set value to !OnMax (comment line out and uncomment the next line to remove maximum on value)

;BRA $06

CMP $09C2

JSR $F4A6 : NOP

;free space in $86






org $86F4A6

BMI +

;if energy is sufficiently low, jump to routine activation

LDY !Off : JSR Division

;calculate energy value to turn off routine

CMP $09C2 : BPL ++

;if energy is sufficiently high, jump to routine deactivation, else, go to activation


+

INC $0E1A
;if routine is on, increment $0E1A to turn on the routine. If there is 1 it's on.

++

RTS









Division:

LDA $09C4 : STA $4204 : STY $4206
;max energy into dividend($4204), dividing factor into divisor($4206)

PHA : PLA : PHA : PLA

;wait 16 cycles for division (NOP #16 uses more bytes)

LDA $4214 : RTS

;store division result in A

[/spoiler]




Also, I fixed Black Falcon's Skip Ceres patches. v1 was running without sound, v2.1 was working but with placing operators in wrong place (3 bytes away). Same story with v1. Uploaded them to the main site.

Scyzer

Also relevent:
Anytime you want to use a Direct Page address, you can nearly always just store there without worrying about what might already be in there (depending on the hijack of course). Direct Page addresses are rarely used across multiple frames/routines.

Example, Samus's movement routine uses $12 and $14. The values will be stored to $12 and $14 just before, and then they are used in the movement routine. One that routine is finished, whatever is in $12/$14 is irrelevent and not read again for that situation, unless another movement routine is called (in which case, those values will be set again just before calling it).

Everything from $7E0000 to $7E004C works this way, and possibly up to $7E0050 (I haven't tested those 4 bytes).
Of course the exception is if you were to put a hijack within a routine which uses these direct page addresses, but then you'd just use a different address anyway.

Jordan5

Quote from: JAM on August 28, 2015, 09:03:10 PM
Jordan5
Though, if you change operator LDA $1414 to LDA $4214, it'll be more awesome than now. Because it will work as it should.

Thanks for that, I had two documents with division and multiplication locations in and one of them was apparently wrong :lol:

Quote from: JAM on August 28, 2015, 09:03:10 PM
For "PLA : PHA" line, very good!

Well it's thanks to Quote for that one, he gave me a few good optimization tips when he was helping me through this. :^_^:

As for your other points, I'll take a good look at it, thanks! And I did plan to do the health alarm at some point, I just ended up forgetting.

Quote from: Scyzer on August 28, 2015, 09:29:29 PM
Anytime you want to use a Direct Page address, you can nearly always just store there without worrying about what might already be in there

I believe at the time there was a reason for this, but it may be due to something else I was writing at the time. That, or I did it in case I/others put it somewhere else. I can't remember now. I did think Direct Page addresses only went up to $20 though, so thanks for that :^_^:

Vismund Cygnus

Little piece of ASM made by Scyzer.
When applied, it adds a splash screen to the intro of your hack, notifying people that the hack is available for free from Metroid Construction.
Mostly to counter repro-ers, with no negative consequences for uninformed buyers.

As I said, all credit to Scyzer for this one.

JAM

Did this especially for A.N.T.I. Contest, so people can run escape sequence after defeating any boss they wished (not just Draygon, Mother Brain, Kraid and Phantoon) without even need to use the room 7DE4D.

Boss Escape Timer
There are compilation of patches that will run the timer after defeating certain boss.

Credits goes for FullOfFail, Jathys, Mon732, Scyzer, and PJBoy for making original patch.

personitis

Showing us why you're called Jampion I see. :heheh: I'm rather surprised something like this hasn't existed publicly yet as well.

X-tradyte

I imagine this is for any miniboss a well? Thats amazing JAM and it's surprising like person said that this wasnt out previously. Nevertheless, you're a bit late on it so I've already found a way to run the timer after Ridley which is the boss I chose! I'm sure it will be useful down the road though!

Quietus

Good for the original too - Morph > Missiles > Bomb > Escape, and nuke Zebes. :^_^:

JAM

Quote from: personitis on October 24, 2015, 10:56:59 PM
Showing us why you're called Jampion I see. :heheh: I'm rather surprised something like this hasn't existed publicly yet as well.
Thank you! =)
Well, I did escape timer Phantoon version for Arrival. Then I've noticed that simply changing hijack point in same bank allows to do the same for Kraid, so I Kraid version. Then I tried to optimize the Draygon version and got problems of finding hijack point. I used point at where music is changing to elevator, but in fight with Draygon music changing long time before he'll be buried, so I stoped at that point.

Yesterday I made patches for other bosses, looked into Draygon code and decided to use another hijack point (before projectiles are spawn). So, all these patches (except 2 already released earlier) was made only yesterday.

Of course, I (or someone else) should make this long time ago, but I lose interest after getting problems with Draygon.


Quote from: Quietus on October 24, 2015, 11:05:51 PM
Good for the original too - Morph > Missiles > Bomb > Escape, and nuke Zebes. :^_^:
And you'll need to just re-enter room to see animals and save them. =)

But actually, with all these patches, you can set timer multiple times, like it was done in Fusion. SetEvent0E subroutine should be deleted in all patches except final boss in your hack. And to stop timer all you need do to is exectute operator STZ $0943 via FX0 or FX2 in the room that will be counted as "escape happened".

Change only low byte of this word address to zero to make timer stop (but still displayed). Change only high byte of this word address to zero to make timer invisible (but still running).

SlyPork

Quote from: JAM on October 25, 2015, 08:52:31 PM
Quote from: Quietus on October 24, 2015, 11:05:51 PM
Good for the original too - Morph > Missiles > Bomb > Escape, and nuke Zebes. :^_^:
And you'll need to just re-enter room to see animals and save them. =)
My favorite part of that patch :)

Quote from: JAM on October 25, 2015, 08:52:31 PMBut actually, with all these patches, you can set timer multiple times, like it was done in Fusion. SetEvent0E subroutine should be deleted in all patches except final boss in your hack. And to stop timer all you need do to is exectute operator STZ $0943 via FX0 or FX2 in the room that will be counted as "escape happened".

Change only low byte of this word address to zero to make timer stop (but still displayed). Change only high byte of this word address to zero to make timer invisible (but still running).
My second favorite part because it involves fusion :)

So does this mean that you can have event moments within a hack that triggers an escape sequence before something happens, let's say like a small not zebes-destroying explosion? And on a similar side topic, would it be possible to add a quick "cutscene" or picture after such a sequence and then continue to play normally similar to Fusion and Zero Mission?

Cloud20

Second volume buddies  :^_^:

Is there the graphics for the Skypolis area from parasite amber, using the glows of Brinstar
Enjoy

[spoiler]http://www.youtube.com/watch?v=ElwjYm-ReIY[/spoiler]

P.JBoy


personitis

Quote from: SlyPork on October 26, 2015, 03:30:32 AM
So does this mean that you can have event moments within a hack that triggers an escape sequence before something happens, let's say like a small not zebes-destroying explosion?
While it was always possible, the knowledge is more public now. So yes, if you moved the code into a more appropriate portion of the game (likely FX2/Setup Code as JAM mentions) you'd have a non-planet threatening Zebes explosion going on.
Quote
And on a similar side topic, would it be possible to add a quick "cutscene" or picture after such a sequence and then continue to play normally similar to Fusion and Zero Mission?
A lot of things are possible with ASM... :nod:

Jordan5

So a certain king of bubbles asked me to write something to help him change the alternative state of a room from one trigger by an event, to one triggered by item collection. As it is all written up and was something that took me a while to figure out, I thought I may as well leave it here in case anyone else finds it useful.

JAM

One more thing I'd like to release for the A.N.T.I. Contest. It's a guide this time.

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.


Result:


P.JBoy

Completed my bank log (disassembly) of bank $8F.

All the Layer1_2 and FX2 routines are commented, as well as all the other ASM in there. All room headers, door lists, PLM populations, BG_Data etc. are labelled.

There's some weirdness in the last two FX2 routines (in Crocomire's and Ridley's room) involving room shaking(?)


Fe

So I was toying with room header stuff, and came up with the idea for a program to generate a new mdb.txt from an existing rom. Nothing too fancy, but it seems to work reliably and catches all valid room headers. However, it relies on door 00 having a valid room id - so if your door_out pointer is invalid or your door 00 is invalid if some of your rooms have no working doors then it'll exclude those rooms, but it'll also spit some messages out saying they were excluded (some of these will simply be false positives, though).

The attached zip file contains a compiled binary and the source. This is linux only as far as I'm aware, but it probably also will compile on OS X and probably works on windows if you have cygwin. The binary was compiled on Debian.

UPDATE: I've fixed this thing up a lot since the first submission. Should catch pretty much everything now, and has some fancy new options, including a complete breakdown of every room header it finds.

master86

First thx to dso for his tileset repoint patch,then i thing ther most be are way to repoint the pointers its self i came up with this i hope your can us it for some hacks.
Sorry for my sh english i am are german.
The pointers are now at this place  046E32 to 046F7B and yes i used dso patch to i hope he is not angry about that.
Ther is are bug or somthing i dont know way the sheet from 7 its not correct the pointers are set correct your need to have are backup from this files:Super Metroid (JU) [!]_CRE.ttb(7)
Super Metroid (JU) [!]_SCENERY_7.ttb export this two files frist then apply this patch.
I make are change i hope this changed the bug
Removed because of are strange bug after i find are way to fix it

Mettyk25jigsaw

Master86...

Bit of a bug or maybe a major one...Even though the game loads when loading emulator inside smile, the bad bit is when you go and load it from the emulator itself so you can start a brand new game with it, you can't get past the Nintendo logo...This is one tested on an original rom too...And also it was your second version I tested (and the first)...

master86

Shit i see what your say its are checksum bug i cant fix it with smile i take are look at it and try to fix it.
Hm that its strange the checksum its fixed but it dont work i remove the patch and try if i can fix it i dont understand way it dont runs.

Dark-SA-X

This is a sprite gfx submission, these come from metroid 2, the palette file is included.
The ground/water type/mechanical enemies I'll host up once I succesfully convert it.
A guy named "crovirus" did the coloring and detailing to the sprites so most credits belong to him. :)
Palette file is included and ready for yy-chr, you can try it for tlp if you want to.

http://www.mediafire.com/download/2ia7aso3cezo3lz/Metroid2-FlyingEnemies-Pack.zip


Dark-SA-X

This is the second sprite pack from metroid 2, all of them are found in water/lava/acid.
Most credit belongs to Crovirus for coloring and minor detailing.



http://www.mediafire.com/download/95e41m2919di244/Metroid2-Aquatic-Enemies-Pack.zip

Quietus

I'm assuming it's just a linking error, but the pictures look identical to me.

Also, when these things are normally added to the site, credits are usually given, so, to be clear, was it you that ripped all of the sprites, and crovirus worked on editing / colouring?