Hallo, ich möchte einen SMB3-Brickblock einfügen. Er funktioniert zusammen mit einem Bounceblock-Patch auch wunderbar, bis auf einen Glitch: Wenn Mario, ob groß oder klein, die oberen Ecken des Blocks berührt, z. B. indem er auf dem Block steht und ganz an den Rand geht, zerspringt der Block einfach.
Hier der Code:
Code;; Edit1754's SMB3 Brick v1.0.1
;; requires Block Bounce Unrestrictor patch
;; - fixes glitch with buster beetle's block and a few other things
JMP MarioBelow : JMP Return : JMP Return : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP Return
!BouncePalette = $08 ; 0-7/8-F
!BounceTile = $0040 ; 0000-01FF (top-left 8x8)
!ShatterType = $00 ; change this to $01 for throw-block-like shatter effect if you want
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!RAM_M16Tbl = $7EC275 ; same as the other patch, to avoid using more RAM than necessary
!RAM_BounceTileTbl = $7EC271
!BPal = !BouncePalette&$07
!BTile = !BounceTile&$1FF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MarioCape: JSR CheckIfCoin
NotSmall: JSR Shatter
JSR SpriteKiller
JSR Points
RTL
MarioBelow: JSR CheckIfCoin
LDA.b $19
BNE NotSmall
Small: LDX.b #$03
Loop: LDA.w $1699,x
BEQ FoundSlot
DEX
BPL Loop
DEC.w $18CD
LDA.b #%11111100
TRB.w $18CD
LDX $18CD
LDA $1699,x
CMP #$07
BNE FoundSlot
JSR ResetTurnblock
FoundSlot: LDA.b #%00001111
TRB.b $98
TRB.b $9A
LDA.b #$01
STA.w $1699,x
LDA.b #$00
STA.w $169D,x
LDA.b $98
STA.w $16A1,x
LDA.b $99
STA.w $16A9,x
LDA.b $9A
STA.w $16A5,x
LDA.b $9B
STA.w $16AD,x
LDA.b #$C0
STA.w $16B1,x
LDA.b #$00
STA.w $16B5,x
LDA.b #$FF ;
STA.w $16C1,x
LDA.b #$08
STA.w $16C5,x
LDA.w $1933
LSR
ROR
STA.w $16C9,x
LDA.b #!BounceTile
STA !RAM_BounceTileTbl,x
LDA.b #!BPal<<1
ORA.b #!BTile>>8
STA.w $1901,x
;PHX
TXA
ASL
TAX
REP #%00100000
LDA.b $03
STA.l !RAM_M16Tbl,x
SEP #%00100000
;PLX
JSR SpriteKiller
RTL
SpriteV: JSR CheckIfCoin
LDA.w $1686,x
AND.b #%00000100
BNE Return
LDA.w $14C8,x
CMP.b #$09
BCC Return
CMP.b #$0B
BCS Return
LDA.b $0F
CMP.b #$02
BEQ Return
SprMain: REP #%00100000
LDA.b $0A
STA.b $9A
LDA.b $0C
STA.b $98
LDA.b $0F
PHA ; counts as 2
SEP #%00100000
LDA.b $03
PHA
JSR Shatter
PLA
STA.b $03
PLA
STA.b $0F
PLA
STA.b $10
JSR SpriteKiller
JSR Points
Return: RTL
SpriteH: JSR CheckIfCoin
LDA.w $14C8,x
CMP.b #$0A
BEQ SprMain
RTL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckIfCoin: LDA $1693
STA $00
STY $01
REP #%00100000
LDA $00
CMP.w #$0132 ; acts like used block
BEQ CoinPow ; don't behave like brick when POW enabled
CMP.w #$002B ; acts like coin
BEQ CoinNoPow ; don't behave like brick when POW disabled
SEP #%00100000
RTS
CoinPow: SEP #%00100000
LDA.w $14AD
BNE IsCoin
RTS
CoinNoPow: SEP #%00100000
LDA.w $14AD
BEQ IsCoin
RTS
IsCoin: PLA : PLA ; bypass RTS and head straight towards final RTL
RTL
Shatter: LDA.b #%00001111
TRB.b $98
TRB.b $9A
LDA.b #$02
STA.b $9C
JSL $00BEB0
PHB
LDA.b #$02
PHA
PLB
LDA.b #!ShatterType
PHY
JSL $028663
PLY
PLB
RTS
SpriteKiller: LDX #$03 ; disassembled from original smb3.bin
.C_8213 LDA $16CD,x
BEQ .C_821C
DEX
BPL .C_8213
INX
.C_821C LDA $9A
STA $16D1,x
LDA $9B
STA $16D5,x
LDA $98
STA $16D9,x
LDA $99
STA $16DD,x
LDA $1933
BEQ .C_8253
LDA $9A
SEC
SBC $26
STA $16D1,x
LDA $9B
SBC $27
STA $16D5,x
LDA $98
SEC
SBC $28
STA $16D9,x
LDA $99
SBC $29
STA $16DD,x
.C_8253 LDA #$01
STA $16CD,x
LDA #$06
STA $18F8,x
RTS
Points: LDA $0DB3 ; disassembled from original smb3.bin
ASL A
ADC $0DB3
TAX
LDA $0F34,X
CLC
ADC #$9D01
BIT $0F,X
LDA $0F35,X
ADC #$9D00
AND $0F,X
LDA $0F36,X
ADC #$9D00
ROL $0F,X
RTS
ResetTurnblock: LDA $9A ; from Custom Bounce Block patch's SMB3Brick.asm
PHA
LDA $9B
PHA
LDA $98
PHA
LDA $99
PHA
LDA $16A5,Y
STA $9A
LDA $16AD,Y
STA $9B
LDA $16A1,Y
CLC
ADC #$0C
AND #$F0
STA $98
LDA $16A9,Y
ADC #$00
STA $99
LDA $16C1,Y
STA $9C
LDA $04
PHA
LDA $05
PHA
LDA $06
PHA
LDA $07
PHA
JSL $00BEB0
PLA
STA $07
PLA
STA $06
PLA
STA $05
PLA
STA $04
PLA
STA $99
PLA
STA $98
PLA
STA $9B
PLA
STA $9A
RTS
Was müsste ich ändern, damit der Glitch verschwindet?
RPG Hacker, dein Tipp war gut, nun klappt's. Bis vorhin war ich sofort wieder "draußen", nachdem die Meldung "Du wurdest erfolgreich angemeldet." kam.
Da ich in letzter Zeit nur als Gast hier war, ist mir das gar nicht aufgefallen. Ich habe mich aber auch gewundert, warum hier keine neuen Beiträge mehr erscheinen.
Hmm, also ich gehe mal davon aus, dass du BOOOM.cfg (oder B000M.cfg?) im Ordner Generators statt Sprites gespeichert hast und dass Spritetool alles ordnungsgemäß eingefügt hat. Ich hatte schon mal Customsprites zwar in LM per Insert Manual eingefügt, aber vergessen, meine Customsprites mit Spritetool einzufügen und mich über herunterfallende "Sprites" gewundert.
Was passiert, wenn du den Generator mit nicht gesetztem Extra-Bit einfügst?
Was passiert, wenn du einen anderen Custom Sprite im Generator festlegst?
Hast du mal geguckt, ob es auf SMW Central andere Versionen dieses Generators gibt? Soweit ich weiß, hat Imamelia mal Random Custom Generators rausgebracht, die also verschiedene Custom Sprites erschaffen. Notfalls könnte man hier bei den Custom Sprite-Nummern immer $3C angeben.
Ich habe den Generator generic.cfg bei mir im Spiel ebenfalls, als Custom Sprite den Custom-Bulletbill. Bei mir im Hack funktioniert der Generator wunderbar.
Schönes klassisches SMW-Geisterhaus mit Rätseln und ohne irgendwelchen Custom-Firlefanz. Gefällt mir, ein gelungenes Level
. Du weißt die vorhandenen SMW-Elemente wie Gegner u. a. geschickt einzusetzen, um z. B. mit etwas Geschick an die Yoshimünzen zu kommen. Das zeigt, dass man auch mit den Originalobjekten und Sprites spannende und abwechslungsreiche Levels gestalten kann.
Das Einzige, was mich etwas stört, ist, dass man am Ende (bei ca. 3:00) nachdem man den P-Switch betätigt hat, erst weiterkommt, bis die Wirkung vorüber ist.
Ich finde die Bilder schon nicht schlecht. Es sind gute Ideen dabei, vorhandene SMW-Grafiken neu zu verwenden (z. B. den Geisterhaus-Boden als hängende Plattform).
Im ersten Bild würde ich die Objekte etwas heller gestalten, damit man sie besser vom Hintergrund unterscheiden kann. Im zweiten Bild finde ich die Hintergrundfarbe etwas gewöhnungsbedürftig. Die Pilz-Plattform im dritten Bild passt meiner Meinung nach da zwischen dem anderen Boden nicht so hin, die würd ich weglassen, ansonsten sieht's gut aus. Die bunten Beeren find ich auch gut, haben die auch unterschiedliche Funktionen oder ist das nur Deko?
Die Apfelanimation zu ändern dürfte schwierig werden, das es sich ja um eine globale Animation handelt.
Könntest du nicht deine neue Animation in dem Level als Exanimation einfügen, in der Map16 die Beeren-Blöcke in freie Felder kopieren und dort dann die Tiles eingeben, die du im 8x8-Editor für deine Exanimation vorgesehen hast?
Ich schließ mich der Meinung von Reggiamoto an. Gutes Level, nicht zu einfach. Aber die Blätter in der Luft finde ich auch etwas seltsam.
Sieht in der Tat sehr nach NES-Grafik aus und vermittelt damit ein klassisches Mariospiel-Gefühl. Ich kenne SMB3 noch aus NES-Zeiten und daran erinnert mich das (einige Grafiken scheinen auch mit dem Original übereinzustimmen). Werde das Spiel später mal ausprobieren. Schade, dass der Hack offenbar nur so kurz ist.
Ein Flip-Block als Held? Da muss man erst mal drauf kommen! Zum Level selbst kann man nicht viel sagen, da die zwei Bilder nicht aussagekräftig genug sind. Aber grundsätzlich schlage ich vor, ein bisschen Deko wie Büsche oder Gräser zu verwenden, sonst sieht das zwischen den Bäumen etwas leer aus.
Zitat von Vanilla Hacker: Ein kleiner Ausschnitt eines Level das 100% Vanilla ist.
Hab ich erst jetzt gesehen. Sieht insgesamt gut aus. Einige Formen finde ich allerdings doch etwas seltsam, vor allem die ganz rechte (also unterhalb der Münze) und auch das rechte Ende der Form links davon. Dieses würde ich etwas abschneiden und mit der darunter liegenden Form verbinden. Ist aber sicher auch Geschmackssache.
Ich find's auch hübsch. Im Hintergrund sind doch noch diese Holzpfähle und Bäume vorhanden. Könnte man die nicht auch als Deko in den Vordergrund einfügen?
Zitat von Mert: ... Und mal kein enges Level, wo eine Million Dirt Tiles in der Luft fliegen.
Besser hätte ich es auch nicht sagen können.
Das Level sieht ganz interessant aus. Was ich persönlich nicht so mag, sind Decken/Überdachungen (ab ca. 6:20) in einem Level, das sich draußen in der Landschaft abspielt.
Sieht sehr interessant aus das Ganze.Tolle, abwechslungsreiche und anspruchsvolle Levels mit vielen Einfällen. Allerdings scheint der Schwierigkeitsgrad recht hoch zu sein.
Ich finde schon, dass du vom Hack recht viel zeigst und man sich davon ein Bild machen kann. Mach weiter so!
Hallo, ich bin auch mal wieder da. Also, das, was auf den Screenshots zu sehen ist, sieht gut aus! Schön klassisch ohne Map16-Spielereien. Freue mich schon, wenn der Hack fertig ist. Mach weiter so!
Hallo, ich möchte bei den Map16-Nummern #$109 und #$10A Customblöcke einfügen. Dazu möchte ich, dass, wenn ein Shyguy auf diesen Blöcken entlanggeht, dieser eine andere horizontale Geschwindigkeit hat als sonst. Daher habe ich im asm-Code des Shyguy folgeden Code eingefügt:
Code LDY $157C,x ; Set x speed based on direction
LDA $1588,x ; if on the ground now...
AND #04 ;
BEQ Noleft
LDA $185F ; This is the low byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically.
CMP #$09 ; rightmovingblock?
BNE Noright
LDA $18D7 ; This is the high byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically.
CMP #$01
BNE Noright
LDA SpeedX2,y
STA $B6,x
BRA Normal
Noright:
LDA $185F ; This is the low byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically.
CMP #$0A ; leftmovingblock?
BNE Noleft
LDA $18D7 ; This is the high byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically.
CMP #$01
BNE Noleft
LDA SpeedX3,y
STA $B6,x
BRA Normal
Noleft:
LDA SpeedX,y
STA $B6,x
Normal:
Wenn der Shyguy also den Block #$109 von oben berührt, soll er SpeedX2 haben und wenn er #$10A von oben berührt, soll er SpeedX3 haben. Falls er den Block gar nicht berührt, soll er die normale Geschwindigkeit SpeedX haben.
Doch leider hat der Shyguy immer die normale Geschwindigkeit, er reagiert gar nicht auf den Block. Ich habe es statt mit dem low und high bite auch schon mit der Adresse $18A7 versucht, ohne Erfolg. Kann mir jemand helfen?
So, ich denke, es ist an der Zeit, den Hack nun zu veröffentlichen.
Der Hack ist nun fertig und wurde auch getestet. Er umfasst 70 Levels, dazu kommen noch die vier Schalterpaläste. Im Spiel sind eigentlich alle Schikanen vorhanden, die es im Original schon gab. Damit man nicht allzu schnell durch ist, gibt es das eine oder andere Rätsel zu lösen: Geisterhäuder, rote Levels, die also mehrere Ausgänge haben, und sonstige kleine Rätsel. Hier noch ein paar weitere Bilder:
Es gibt leider 2 bis 3 Glitches auf der Overworld im Zusammenhang mit diesen Secret-Events. Ich bin aber leider nicht imstande, dies zu beheben.
Hier noch der Link:
http://www.smwhacking.de/download.php?id=195
Zu finden auch auf der Hauptseite im Menüpunkt "Hacks". Vielleicht gibt es hier im Forum noch den einen oder anderen, der vorbeischaut und Lust hat, das zu spielen
.
Danke für die Rückmeldungen
. Du hast recht, was die Fragezeichenblöcke angeht. Ich fand's beim Spielen auch störend, aber später hatte ich diese Sache leider schon wieder verdrängt.
Das mit dem Namen ist an sich richtig, nur hab ich nichts Passendes gefunden. Es ist ja die gleiche "Story" wie beim Original. Ich habe daher schon an "The Lost Levels" oder "Bowser's Revenge" gedacht, aber ich glaube, das gibt es alles schon. Vielleicht irgendwas mit "Vanilla..." Im Moment fällt mir nichts ein
. Stories und Namensgebungen sind beim SMW-Hacking meine Schwäche.
Gute Idee mit dem Buschwerk im Vordergrund. Gehört das zu Layer 1 oder ist das Layer 3? Die Idee, die Baumstämme auf den Vorder- und Hintergrund zu verteilen und somit unterschiedlich scrollen zu lassen, ist wirklich nicht schlecht.
Ich verwende einen Customsprite-Generator, der die Sprites von der rechten Seite erscheinen lässt. Über die Y-Position entscheidet der Zufall, die Sprites können also ganz oben, in der Mitte oder ganz unten auftauchen.
Ich möchte, dass die Sprites innerhalb eines vorgegebenen Höhenbereiches erscheinen, also von Y-Position #$... bis Y-Position #$... (innerhalb dieses Bereiches dann wieder in zufälliger Höhe). Es geht mir darum, dass die Sprites nicht ganz oben oder unten, sondern eher in der Mitte erscheinen.
Hier der Code des Generators, der die Position der Sprites festlegt:
Code JSL $01ACF9
AND #$7F
ADC #$40
ADC $1C
STA $D8,x
LDA $1D
ADC #$00
STA $14D4,x
LDA $148E
AND #$01
TAY
LDA TBL_B2D0,y
CLC
ADC $1A
STA $E4,x
LDA $1B
ADC TBL_B2D2,y
STA $14E0,x
LDA TBL_B2D4,y
STA $B6,x
RETURN RTS
Ich vermute, dass das mit den Adressen $D8,x und $14D4,x etwas zu tun hat. Kann mir jemand helfen?
Das mit der Formel hab ich zwar nicht verstanden, aber ich habe den ersten Code eingesetzt, bei #$rr und #$xx ein bisschen mit den Zahlen gespielt und jetzt funktioniert es, wie es soll. Also danke für deine Hilfe
.