Du suchst Custom Sprites/Blocks/Music oder Graphics? Hier!

geschrieben am 24.05.2014 2:28:40
( Link )
Hab mich zwecks meines Vulkan Levels erstmal doch wieder umorientiert, grade spiele ich einen SMW-Hack und habe die Grafik hier gefunden (speziell die FG Grafik). Ich kenn die irgendwo her, komme aber nicht drauf von wo. Bin mir auch ziemlich sicher das es die auf SMWC gibt. Weiß jemand mehr?

geschrieben am 24.05.2014 9:24:20
( Link )
Das könnte die Höhlengrafik aus New Super Mario Bros sein. Moment! Oder auch nicht.... Kannst du mir vll den Namen des Hacks geben?
geschrieben am 24.05.2014 10:45:28
( Link )
Mario's Journey Through Time & Space.
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 24.05.2014 11:48:47
( Link )
Zitat
Mario's Journey Through Time & Space.


Richtig. 2. Level in der Vulkan Welt.
geschrieben am 28.08.2014 14:12:54
( Link )
BUMP! Ist SMWHacking inaktiv geworden? Tot?

Kann mir jemand gute Eislevel-Musik empfehlen? :)

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo
geschrieben am 25.05.2015 16:21:15
zuletzt bearbeitet von Rubis am 25.05.2015 20:41:26.
( Link )
Hi. Ich melde mich auch mal wieder seit sehr sehr langer Zeit. . Ich hätte ne Frage zu einem custom Block. Und zwar wollte ich den custom Block Pass on Yoshi Coin so umschreiben, dass er, nachdem ich die Yoshi Coins eingesammelt habe, verschwindet (wechsel zum nächsten MAp 16 Teil), anstatt nur mich durchzulassen und dass er meinen Yoshi Coin Counter um einen verringert (ich baue einen Zelda-ähnliches Level, wo Yoshi Coins Schlüssel sind und der Custom Block quasi die Schlüsseltüren, die einen dann durchlassen sollen). Das heißt auch wenn mehrere Coins gesammelt wurden, dass man dann auch durch die Anzahl Türen durch kann, die der Anzahl Coins entsprechen. Aber ich kenn mich überhaupt nicht mit ASM hacking aus, deswegen frage ich hier. Der Custom Block Code lautet:
Code
;Block that is passable only when you have 4 (or specified number) dragon coins.
;Change the number after the CMP #$ to specify the number of dragon coins needed.

print "A block that is passable only when the player has 4 dragon coins."

db $42
JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireBall
JMP Corner : JMP BodyIn : JMP HeadIn

Corner:
HeadIn:
BodyIn:
MarioAbove:
MarioBelow:
MarioSide:
LDA $1420 ;Load number of dragon coins
CMP #$01
BEQ GotCoins ;Branch to 'Gotcoins'
LDY #$01 ;act like tile 130 (Grey cement block)
LDA #$30
STA $1693
RTL
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
GotCoins:
RTL

Ich hoffe, ihr versteht was ich meine und ob ihr mir da helfen könnt. Ich habe die Anzahl der benötigten Coins schon auf 1 geändert, war auch nicht schwer mit Anleitung .

Edit: Ich habe mit Blockcreator und ein wenig eigenem ASM Wissen (wirklich wirklich wenig) es ungefähr hinbekommen. Gucken wir mal wie es in der eigentlichen Level funktionieren wird.
geschrieben am 25.05.2015 20:30:29
( Link )
Probiere es hiermit:
Code
!DragonCoins = $1422 ; Falls es nicht funktioniert, nutzt stattdessen $1420

JMP Mario : JMP Mario : JMP Mario
JML Return : JML Return
JML Return : JML Return
JMP Mario : JMP Mario : JMP Mario

Mario:
LDA !DragonCoins
BNE Return
LDA #$02 ; Replace block with block # 025
STA $9C
PHY
JSL $00BEB0 ; Make the block disappear.
PLY
DEC !DragonCoins
Return:
RTL

Um es dauerhaft aktiviert haben zu wollen, musst du #$02 zu #$01 umändern und du benötigst auch noch diesen Patch. Pass aber auf, dass du an der Reihe (im ähnlichen Sinne einer Spalte einer Tabelle), wo der Block ist, keine Münzen o.ä. platzierst, außer beide Blöcke sind auf unterschiedlichen Screen-Hälften.
Code
LDY $57
JSR GetItemMemoryBit
LDA $0F
BNE .return
LDA #$xx ; Das ist die Nummer, wo das Map16-Tile ist ohne die Seite
STA [$6B],y
LDA #$yy ; Das ist die Seite, wo das Map16-Tile ist
STA [$6E],y
.return
RTS
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 25.05.2015 20:42:50
( Link )
Danke sehr. Ich versuche mal meine eigene Version sowie deine erstellte Version und schaue, welche besser funktioniert.

Edit: Kannst du mit evtl noch verraten wofür der zweite Code ist, bzw wie der eingefügt wird?. Kenne mich nicht mit Patches, Modifikationen usw. aus. Der erste Code ist ja der Block selber. Irgendwie scheint dein Block nicht zu funktionieren. Der lässt mich nicht durch egal wie viele dragon coins ich habe . Auch wenn ich 1422 in 1420 ändere, ändert das nichts am Ergebnis.
geschrieben am 26.05.2015 14:37:57
( Link )
Ups, habe statt BEQ BNE geschrieben. Und beim unteren Code habe vergessen zu schreiben, dass für den Patch, den ich gelinkt habe, benutzt wird.
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 26.05.2015 15:54:08
( Link )
Okay dann versuche ich nochmal die abgeänderte Version. Kannst du mir noch erklären wie das mit dem Patch funktioniert? Ich steige durch das readme von Imamelia nicht wirklich durch auch wenn am Ende steht, dass es nicht so kompliziert ist wie es aussieht. ^^

Der Block soll Platz 2050 haben. Wie trage ich das in den unteren Code ein und wie bringe ich das Programm dazu, Tile 2050 als extended Object zu sehen. Wenn es ja ein Object ist anstelle eines Tiles dann bleibt es ja weg, selbt wenn ich das Sublevel verlasse.
Ich poste dir nochmal die Codes, damit du dir ein Bild davon machen kannst.
Code
    !DragonCoins = $1420 ; Falls es nicht funktioniert, nutzt stattdessen $1420

JMP Mario : JMP Mario : JMP Mario
JML Return : JML Return
JML Return : JML Return
JMP Mario : JMP Mario : JMP Mario

Mario:
LDA !DragonCoins
BEQ Return
LDA #$01 ; Replace block with block # 025
STA $9C
PHY
JSL $00BEB0 ; Make the block disappear.
PLY
DEC !DragonCoins
Return:
RTL


bzw.
Code
LDY $57
JSR GetItemMemoryBit
LDA $0F
BNE .return
LDA #$xx ; Das ist die Nummer, wo das Map16-Tile ist ohne die Seite
STA [$6B],y
LDA #$yy ; Das ist die Seite, wo das Map16-Tile ist
STA [$6E],y
.return
RTS

Ich ändere LDA #$xx in 50 und LDA #$yy in 20. Dann habe ich das in custobjcode bei Custobj02 hineingeschrieben. Gepatcht habe ich, bevor ich den Code hineingeschrieben habe. Muss das dann neu gepatcht werden?
Edit. Ich habe gemerkt, dass du ein deutsches Tutorial dazu bei smwc hochgeladen hast. Ich werde mir das zunächst anschauen. Vielleicht verstehe ich es ja dadurch. ^^
geschrieben am 27.05.2015 13:17:12
( Link )
Okay ich habe den Code soweit geändert und er funktioniert. Das mit dem Obectool habe ich noch nicht ausprobiert. Allerdings gibt es ein kleines Problem mit dem Block. Und zwar soll der Block eine 16x32 Tür darstellen. Jedoch verschwindet nur der untere Block und der obere bleibt, es sei denn eine zweite Coin wird verwendet. Wie ändere ich den Code ab, dass der Block darüber ebenfalls verschwindet? Außerdem wird der Punktecounter nicht zurückgesetzt (RAM map $1420). Wo füge ich den Teil ein, oder ist es einfach nur DEC $1420?
geschrieben am 27.05.2015 14:54:12
( Link )
$1420 ist die Zahl der Yoshicoins, allerdings nicht die Zahl der angezeigten Yoshicoins (laut SMWC). Die ist $1422. Wenn du die also ändern willst, solltest du sowohl $1420 als auch $1422 verkleinern. Und ja, dass müsste einfach DEC $1420 / $1422 sein.
Wenn du dir bei sowas nicht sicher bist, würde ich dir allerdings immer einen Blick hierhin:
http://www.smwcentral.net/?p=map&type=ram empfehlen
(Oder ich verstehe deine Frage nicht )
LG HF01
Ich könnte hier Text hinschreiben. Mache ich aber nicht.
geschrieben am 27.05.2015 15:11:12
( Link )
Ja man muss sowohl $1420 als auch $1422 vermindern. Ich poste dir mal den Code:
Code
    !DragonCoins = $1420 / $1422 ; Falls es nicht funktioniert, nutzt stattdessen $1420

JMP Mario : JMP Mario : JMP Mario
JML Return : JML Return
JML Return : JML Return
JMP Mario : JMP Mario : JMP Mario

Mario:
LDA !DragonCoins
BEQ Return
LDA #$01 ; Replace block with block # 025
STA $9C
PHY
JSL $00BEB0 ; Make the block disappear.
PLY
DEC !DragonCoins
Return:
RTL

!DragonCoins kann aber in dem Sinne so nicht abgespeichert werden. Müsste ich das dann mit LDA $1420, LDA $1422 trennen und dann jeweils DEC $1420 bzw DEC $1422 schreiben oder gibt es Abkürzungen, die man als Programmierer nutzen kann?

Ich habe per Blockcreator einen ähnlichen Block erstellt und ihn ein wenig verändert. Bitte nicht zu harsch mit der Kritik sein, das ist mein erster wirklicher Block mit 1 Stunde ASM Tutorial lesen
Code
;Block that is passable only when you have 4 (or specified number) dragon coins.
;Change the number after the CMP #$ to specify the number of dragon coins needed.

;print "A block that is passable only when the player has 4 dragon coins."

db $42
JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireBall
JMP Corner : JMP BodyIn : JMP HeadIn

Corner:
HeadIn:
BodyIn:
MarioAbove:
MarioBelow:
MarioSide:
LDA $1420 ;Load number of dragon coins
CMP #$01
BCS GotCoins ;Branch to 'Gotcoins'
BCC Reset ;Branch to 'Reset'
LDY #$01 ;act like tile 130 (Grey cement block)
LDA #$30
STA $1693
RTL
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
GotCoins:
LDA $1422
DEC $1422
CMP #$00
BEQ Reset
LDA $1420
DEC $1420
RTL



Reset:
RTL
RTL
geschrieben am 27.05.2015 17:28:14
( Link )
Zum ersten Code:
Zu der Sache mit !Dragoncoins. Warum definierst du das da oben und ersetzt nicht einfach alles mit $1420 bzw. $1422 (und ja, das sind dann 2 Anweisungen)
Ich würds so schreiben
Code

db $42
JMP Mario : JMP Mario : JMP Mario
JML Return : JML Return
JML Return : JML Return
JMP Mario : JMP Mario : JMP Mario

Mario:
LDA $1420
BEQ Return
LDA #$01 ; Replace block with block # 025
STA $9C
PHY
JSL $00BEB0 ; Make the block disappear.
PLY
DEC $1420
DEC $1422
Return:
RTL


So. Ich hoffe das funktioniert dann. Ist nicht getestet. Nutzen auf eigene Gefahr



Zum zweiten Code:
So. Erstmal ist es afaik unnötig, vor dem DECen zu LDAen. d.h. ích würde die LDAs wegmachen. Dann musst du nicht mit #$00 CMPen. Dann steht bei Reset zweimal RTL. Mach das zweite da weg. Dann müsste es eigentlich passen. Außerdem checke ich den CMP nach dem GotCoins-Label nicht. Was soll der Block überhaupt machen? Weil so wie er da ist, funktioniert er zwar, läuft aber unnötig lange. GotCoins wird doch dann angesprungen, wenn der Spieler die Coins HAT. Dann muss man doch nix mehr vergleichen o.O
Ich könnte hier Text hinschreiben. Mache ich aber nicht.
geschrieben am 27.05.2015 17:38:52
( Link )
Das CMP und so war vorerst für einen anderen Block gedacht. Ich habe davor einen erstellt, der, bei Berührung, Yoshi Coins addiert und nach 4 Yoshi Coins sollte er resetten, womit man 1. maximal 4 haben kann und 2. keine Leben einfach so erfarmen kann. Das CMP war so gedacht, dass er resetten soll falls mehr als 4 yoshi coins eingesammelt wurden. Kann sein, dass ich da den Code einfach rauskopiert habe und das dabei vergessen habe zu entfernen ^^. Naja wie gesagt ich kenne mich noch nicht so gut mit ASM aus, weswegen ich erstmal die langen Wege gehe (z.B. habe ich keine Ahnung warum du am Anfang der Datei db $42 geschrieben hast) . Weißt du dabei noch, wie man den Code verändern muss, damit das Tile direkt über dem Block ebenfalls verschwindet (16x32 Tür) und wie ich daraus ein extended object (per objectool-patch) mache, damit die tür auch offen bleibt, wenn ich das sublevel wechsle.
Danke für deine Hilfe ^^

Edit: Der Block funktioniert wunderbar. Danke sehr ^^
geschrieben am 27.05.2015 22:33:12
( Link )
Ehrlich gesagt muss ich bei sowas dann auch passen xD
Ich bin selbst noch nicht so gut mit ASM und das Tile drüber entfernen. Sicher das Blockreator dafür nix hat?
Das "db $42" weiß ich selbst nicht so genau, was das macht, aber BTSD und ich denke mal auch GPS braucht das und somit schreibe ichs halt immer dahin XD
Ich könnte hier Text hinschreiben. Mache ich aber nicht.
geschrieben am 27.05.2015 22:58:45
( Link )
db $42 ist nur ein Signal an BTSD, dass dieser Block die drei zusätzlichen Offsets "Corner", "BodyInside" und "HeadInside" benutzt. Gehört also nicht zum Programmcode, sondern ist nur eine Art Signatur, die BTSD erkennt.

Ohne mir den ganzen Thread durchgelesen zu haben... um einen Block an einer anderen Stelle zu manipulieren, muss man vorher $98 und $9A verändern (das ist die Position des aktuellen Teils), dann kann man wie gewohnt die Routine $00BEB0 aufrufen. Hier, diesen Code hab ich mal fpr einen 32x32-Block geschrieben:

Code
        PHY                     ; \
; |
.eraseThis ; | Alle vier Teile entfernen
LDA #$01 ; |
STA $9C ; |
JSL $00BEB0 ; |
; |
.eraseDown ; |
REP #$20 ; |
LDA $98 ; |
CLC : ADC #$0010 ; |
STA $98 ; |
SEP #$20 ; |
LDA #$01 ; |
STA $9C ; |
JSL $00BEB0 ; |
; |
.eraseLeft ; |
REP #$20 ; |
LDA $9A ; |
SEC : SBC #$0010 ; |
STA $9A ; |
SEP #$20 ; |
LDA #$01 ; |
STA $9C ; |
JSL $00BEB0 ; |
; |
.eraseUp ; |
REP #$20 ; |
LDA $98 ; |
SEC : SBC #$0010 ; |
STA $98 ; |
SEP #$20 ; |
LDA #$01 ; |
STA $9C ; |
JSL $00BEB0 ; |
; |
PLY ; /
geschrieben am 27.05.2015 23:14:02
( Link )
Ich als ASM Laie (eigentlich sogar noch weniger) kann damit nichts wirklich anfangen. Nochmal als Zusammenfassung für WYE:
Ich wollte einen Block programmieren, der bei Berührung eine Yoshi Coin abzieht und dabei verschwindet. Da es so eine Art Schlüsseltür darstellen soll, soll die Block darüber auch verschwinden. Dann der dritte Teil: Daraus soll ein Extended Object werden, aber ich kann mit objectool irgendwie nichts anfangen. Schließlich soll die Tür ja nicht wieder zu gehen . D.h. wenn ich keine Coin hab, soll er mich auch nicht durchlassen. Allerdings soll er auch sowohl den Counter als auch quasi die Punktzahl um einen zurücksetzen (DEC $1420 und $1422).

Den Block haben wir soweit hinbekommen (Danke an MarioFanGamer und xHF01x). Jetzt fehlt eigentlich nur noch die Komponente, dass der Block darüber verschwindet (16x32 Block).

Das ist der Code für den Block:
Code
    db $42
JMP Mario : JMP Mario : JMP Mario
JML Return : JML Return
JML Return : JML Return
JMP Mario : JMP Mario : JMP Mario

Mario:
LDA $1420
BEQ Return
LDA #$01 ; Replace block with block # 025
STA $9C
PHY
JSL $00BEB0 ; Make the block disappear.
PLY
DEC $1420
DEC $1422
Return:
RTL
geschrieben am 28.05.2015 14:44:54
zuletzt bearbeitet von MarioFanGamer am 28.05.2015 21:45:05.
( Link )
Dass der Block darüber verschwinden soll ist kein Problem. Hier ist der Code:
Code
db $42
JMP Mario : JMP Mario : JMP Mario
JML Return : JML Return
JML Return : JML Return
JMP Mario : JMP Mario : JMP Mario

Mario:
LDA $1420
BEQ Return
LDA #$01 ; Replace block with block # 025
STA $9C
PHY
JSL $00BEB0 ; Make the block disappear.
REP #$20
LDA $98
SEC : SBC #$0010
STA $98
SEP #$20
JSL $00BEB0 ; Make the block disappear.
PLY
DEC $1420
DEC $1422
Return:
RTL

Bei Objectool ist es wiederum einfach, nur muss ich den Code ein bisschen verändern, da der eben 32x32 (Edit: Habe ich wirklich 32x32 geschrieben? Ich meinte nämlich) 16x32 ist. Okay, zuerst öffnest du objectool04.asm und setzt den Freespace. Danach öffnest du custobjcode.asm und wählst irgend einen Lable (außer die, die im Namen "CustObj2D" stehen). Der Code, den du nehmen solltest, ist übrigens hier:
Code
LDY $57
JSR GetItemMemoryBit
LDA $0F
BNE .return
LDA #$xx ; Das ist die Nummer, wo das Map16-Tile ist ohne die Seite
STA [$6B],y
LDA #$yy ; Das ist die Seite, wo das Map16-Tile ist
STA [$6E],y
JSR ShiftObjUp
LDA #$ww ; Das ist die Nummer, wo das Map16-Tile ist ohne die Seite
STA [$6B],y
LDA #$vv ; Das ist die Seite, wo das Map16-Tile ist
STA [$6E],y
.return
RTS

Das Format bei ww und vv ist ähnlich wie bei xx und yy. xx und yy gehören zum unteren Tile während es sich bei ww und vv um das Obere handelt. Dann musst du es auch noch patches (logischerweise). Was ich auch noch vergessen habe ist, dass du bei Options > General Options "Correct Fatal Errors" deaktiviert haben solltest, sonst erscheint eine Fehlermeldung von LM (ohne Objectool würde irgendwas passieren, da diese eben nie genutzt worden sind). Ansonsten musst du das Objekt manuell einfügen (ähnlich wie custom Sprites).
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 28.05.2015 20:20:18
( Link )
Der Block funktioniert wunderbar. Das mit dem objectool mache ich evtl. morgen, finde heute keine Zeit mehr dafür.

Edit. So ich habe jetzt den Code im Patch eingefügt und gepatcht (mit asar wenn es nichts ausmacht). Er hat mir auch keine Fehlermeldung ausgegeben und die ROM läuft. Jetzt die Frage: Wie wird der jetzt in das Programm gebracht? Ich dachte an Layer 1 manuell einfügen object 02 (weil das der Platz des extended objects, wo ich den Code eingefügt habe). Dann habe ich Angaben wie Size/Type/Exit und Extension. Was davon muss ich umstellen, weil wenn ich beides auf 0 lasse kommt standard object 02 (invisible coin block).

Danke schon mal im Vorraus, bald haben wir es geschafft