News:

Don't forget to visit the main site! There's lots of helpful docs, patches, and more!

Main Menu

[SM] Hyper beam plm?

Started by Jet3rd, January 25, 2017, 02:56:12 PM

Previous topic - Next topic

Jet3rd

Hello everyone. I was wondering if it is possible to make The hyper beam a plm.

I am making a hack with SMILE and want to add in the possibility to get the hyper beam from an item.

So if this is possible can someone tell me how to get this plm in smile.

Thank you.  :cool:


Steel Sparkle

I wanna say yes it is possible due to SM Phazon 0.3 doing something with the hyper beam.
[spoiler] it was an unlock for collecting the pazon particles. who knows i could be wrong.[/spoiler]

Quote58

it's 100% possible, and not particularly difficult either, but it would require you to either change the code of an existing item or make a new item, and if you don't code or have a cursory knowledge of plms in super Metroid, you'll have to wait until someone decides to do it or ask them if they will.

Steel Sparkle:
[spoiler]phazon has a new plm for phazon particles and then hyper beam activated once you touched any phazon surface, which had a trigger that checked if you had collected X number of particles, and if so sets the hyper beam as active.[/spoiler]

Steel Sparkle


Steel Sparkle:
[spoiler]phazon has a new plm for phazon particles and then hyper beam activated once you touched any phazon surface, which had a trigger that checked if you had collected X number of particles, and if so sets the hyper beam as active.[/spoiler]
[/quote]
Ah okay

Jet3rd

Hopefully someone can make a patch for me. I cant really code at all.

PHOSPHOTiDYL

There's a reason why it covers the other beams & you can't deselect it...

Stick with long beam.


Jet3rd

Not really sure what your trying to say.

Are you implying that it will screw some crap up if it can be deselected?

I know that there is a Action Replay code through which you can put on and take off it. (Using Codes for each action)

SO why not a game mechanic?

PHOSPHOTiDYL

It's not screwing anything.
On the outside of super metroid, it's a cool hyper beam.
Inside the code, it's not a hyper beam.

It's a charged wave/plasma combo, & the way beam bits are set up you can still enable ice beam.
There's a reason why it covers the other beams & you can't deselect it.

It requires a lot of code to get working properly.
Code that isn't worth the time & effort.

I'll save you a bunch of time though with this.

[spoiler]LoROM

;//[RAM_BEAMS_TILEMAP][BITFLAG_BEAMS][POINT_TILEMAP_BEAMS][CURSOR_XY_BEAMS]
;===================================================================================;
;//[hyper beam palette]
org $90ADA9

;//[main beam code]
org $90B816

;//[non charged beam fire]
org $90B887

;//[can samus fire]
org $90BAFF


;===================================================================================;

;===================================================================================;
;//=====[BANK $B6]

;//[equip screen box row 15/16 (just the beam side)]
org $B6ED40
dw $0000,$0000,$0000,$3940,$0000,$0000,$0000,$0000,$0000,$7940,$0000,$0000
org $B6ED80
dw $0000,$0000,$0000,$B941,$B942,$B942,$B942,$B942,$B942,$F941,$0000,$0000
;===================================================================================;

;===================================================================================;
;//=====[BANK $84]

;//[get plm beam]
org $8488C2
JSR GetHyper

;//[Hyper beam is just charge/wave/plasma]
;//[Free space ($10 bytes)]
org $84FF00
GetHyper:
LDA #$0020 : STA $09A6
LDA $09A6 : ORA #$8000 : STA $0C18
LDA $0000,y : RTS

;//[HYPER BEAM -NORMAL-][THIS IS SET TO REPLACE THE HIDDEN XRAY PLM]
org $84EFB7
dw $EE64,PLM_HYPER_N ;//pointer to plm type / pointer to start of plm

org $84EC89
PLM_HYPER_N:
dw $8764 ;//[load special plm gfx]
dw $8B00 ;//charge beam gfx @ 048000
dw $0000,$0000,$0000,$0000
dw $887C ;//[item bit check]
dw ENDPLM_HYPER_N ;//points to end of plm
dw $8A24 ;//[set plm pointer]
dw SOUND_HYPER_N ;//points to plm sound
dw $86C1 ;//[set pre-plm instructions]
dw $DF89 ;//[if plm touched, goto pointer]
ANIMATION_HYPER_N:
dw $E04F ;//[plm gfx 1]
dw $E067 ;//[plm gfx 2]
dw $8724 ;//[goto table for instructions]
dw ANIMATION_HYPER_N ;//points to plm animation
dw $8899 ;//[item bit set]
SOUND_HYPER_N:
dw $8BDD ;//[clear music & switch song track]
db $02 ;//music type
dw $88B0 ;//[get plm beam]
dw $0020 ;//plm value (unused = $0020,$0040,$0080,$2000,$4000)
db $1B ;//unused message box $1B
ENDPLM_HYPER_N:
dw $8724 ;//[goto table for instructions]
dw $DFA9 ;//[draw single air block]


;===================================================================================;

;===================================================================================;
;//=====[BANK $82]

;//[hyper beam stuff]
org $82A17E ;//=====[this gets the hyper tilemap to display]
BNE $42
org $82ABBD
NOP : NOP
LDA $09A8 : LDX #$0000
BIT.w BITFLAG_BEAMS,x : BNE $09
INX : INX : CPX #$000C ;//added a beam
org $82B049
NOP : NOP
CMP #$0501 ;//added a beam (CMP #$0401)
org $82B45C
NOP : NOP
LDA $09A8 : BIT.w BITFLAG_BEAMS,x
org $82B48F
NOP : NOP
LDA $09A8 : BIT.w BITFLAG_BEAMS,x
BNE $09 : DEX : DEX : BPL $F4
LDA #$FFFF : BRA $13

;//[beam stuff]
org $82A16D
LDA.w #RAM_BEAMS_TILEMAP
org $82A195
LDX.w POINT_TILEMAP_BEAMS,y
LDA #$000A ;//tilemap array size
org $82A1A0
LDA.w BITFLAG_BEAMS,y
org $82A1AD
LDA #$000A ;//added a beam
org $82A1BB
CPY #$000C ;//added a beam

;//[hyper beam check I]
org $82A1C2
BRA $17 : db $FF ;//LDY #$0000
;//=====[optional code cleanup]
;dw $FFFF,$FFFF,$FFFF,$FFFF
;dw $FFFF,$FFFF,$FFFF,$FFFF
;dw $FFFF,$FFFF,$FFFF

;//[splazma select]
;org $82AC52
;JSR DisableHyper

;//[move to beams]
org $82B4C4
CPX #$000C ;//added a beam

org $82FE00
HyperActive:
LDA $0A76 : BNE $01 : RTS
LDX #$C01A : LDA #$000A : STA $16 : JSR $A27E : RTS

;===================================================================================;

;===================================================================================;
;//[old equip screen tilemap pointers]
org $82BF32
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//charge
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//ice
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//wave
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//spazer
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//plasma
org $82C008
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//hyper
dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ;//blank
;===================================================================================;

;===================================================================================;
;//[equip screen goodies]
org $82C02E
dw RAM_BEAMS_TILEMAP ;//dw $C06C
org $82C036
dw BITFLAG_BEAMS ;//dw $C04C
org $82C046
dw POINT_TILEMAP_BEAMS ;//dw $C08C

;//[old bitflag beams]
org $82C04C
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF
;//[old ram tilemap beams]
org $82C06C
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF
;//[old tilemap pointer beams]
org $82C08C
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF
;//[old tilemap pointer hyper]
org $82C0A8
dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF
;===================================================================================;

;===================================================================================;
;//[pointers to beam cursor x/y positions]
org $82C190
dw CURSOR_XY_BEAMS ;//dw $C19E

;//[old cursors]
org $82C19E
dw $FFFF,$FFFF ;//charge
dw $FFFF,$FFFF ;//ice
dw $FFFF,$FFFF ;//wave
dw $FFFF,$FFFF ;//spazer
dw $FFFF,$FFFF ;//plasma
;===================================================================================;
;//[Free space (
org $82FF00
BITFLAG_BEAMS:
dw $1000 ;//charge
dw $0002 ;//ice
dw $0001 ;//wave
dw $0004 ;//spazer
dw $0008 ;//plasma
dw $0020 ;//hyper (unused = $0020,$0040,$0080,$2000,$4000)

RAM_BEAMS_TILEMAP:
ChargeMap:
dw $3C08 ;//charge
dw $3C48 ;//ice
dw $3C88 ;//wave
dw $3CC8 ;//spazer
dw $3D08 ;//plasma
dw $3D48 ;//hyper

POINT_TILEMAP_BEAMS:
dw TILEMAP_CHARGE ;//[$82:BF32][equip screen tilemap pointers]====================;{32 BF}
dw TILEMAP_ICE ;//[$82:BF3C][equip screen tilemap pointers]====================;{3C BF}
dw TILEMAP_WAVE ;//[$82:BF46][equip screen tilemap pointers]====================;{46 BF}
dw TILEMAP_SPAZER ;//[$82:BF50][equip screen tilemap pointers]====================;{50 BF}
dw TILEMAP_PLASMA ;//[$82:BF5A][equip screen tilemap pointers]====================;{5A BF}
dw TILEMAP_HYPER ;//

CURSOR_XY_BEAMS:
dw $0030,$0084 ;//charge
dw $0030,$008C ;//ice
dw $0030,$0094 ;//wave
dw $0030,$009C ;//spazer
dw $0030,$00A4 ;//plasma
dw $0030,$00AC ;//hyper

TILEMAP_CHARGE:
dw $08FF,$08D8,$08D9,$08DA,$08E7 ;//charge
TILEMAP_ICE:
dw $08FF,$08DB,$08DC,$08D4,$08D4 ;//ice
TILEMAP_WAVE:
dw $08FF,$08DD,$08DE,$08DF,$08D4 ;//wave
TILEMAP_SPAZER:
dw $08FF,$08E8,$08E9,$08EA,$08EB ;//spazer
TILEMAP_PLASMA:
dw $08FF,$08EC,$08ED,$08EE,$08EF ;//plasma
TILEMAP_HYPER:
dw $08FF,$0937,$0938,$0939,$092F ;//hyper
[/spoiler]

It's not worth it.
Definately not without splasma beam @ 100%.




Jet3rd

Not sure how your saving time. I don't really know what that was but i get it now. Thanks.
Im not gonna bother anyone then. ;P

PHOSPHOTiDYL

Idk it's at least 1/3 a hyper beam.

Collect the plm, display a message, cancel the beams, broken beam gfx.
Just needs to maintain beam selection on the equip screen & get the proper gfx.

Aka you collect the beam, all other beams are disabled. That's it.
The rest is up to you.

Jet3rd

Hmmm. I see. Well thanks. Il see if anything comes out of it..

dewhi100

This may be off topic, but I'd like to point out that in both SM and in Prime, the hyper beam is OP, and available only for a very limited time. Those go together. If you're planning to use it, be careful and consider the possible balancing issues. Making it a PLM to me sounds like you want the HB usable over a lot larger context than it was originally intended for. Good Luck!

Quietus

It could make for an interesting racing hack, where the aim is to deliberately have everything die to one hit (other than bosses), so players can focus on speed. :^_^: