Allgemeine SMW Hacking Fragen

geschrieben am 18.03.2012 10:21:30
( Link )
Ich schließe mich der Meinung von kooooopa an. Apropos: Du hast den Thread verfehlt ExMario. ^^ Hier ist der eigentliche Thread für Fragen bezüglich Paletten und Feedback zu deinen Werken.
´s gibt badische und unsymbadische


Was?! Die Signaturlänge wurde auf 1024 Zeichen beschränkt? #notmysignaturelength
geschrieben am 25.03.2012 19:55:04
( Link )


Ich denke man sieht sofort mein Problem

Ich hab die ExGFX für diese Sequence verändert. Im Level ist auch alles so wie es sein soll, nur hier halt nicht.

Also, wie kann ich diese Sequence vor dem Schloss bearbeiten, oder noch besser, wie kann ich meine eigene machen?
Also vor jedem Schloss z.B. einen kurzen "Film" wie sich Mario (sollte er ihn haben) sich von Yoshi verabschiedet und dann in die Burg geht.
geschrieben am 25.03.2012 21:16:54
( Link )
Dieser Patch könnte zu 75% dein Problem lösen:
[Xkas] Level Entrance Repointing Patch
Damit kannst du das Schloss/No-Yoshi/Geisterhaus-Intro-Level auf ein normales Level setzen.
Screenshot:
Tutorials: ExAnimation | YouTube: W4mp3 | Twitter: https://twitter.com/SMWW4mp3
geschrieben am 25.03.2012 22:24:17
( Link )
Dieser Patch scheint genial zu sein!

Danke, danke, danke.

Werd ihn gleich mal ausprobieren.
geschrieben am 29.03.2012 15:33:18
( Link )
Ich habe mal eine Frage zum Thema Custom Music komponieren...
Muss man da drauf achten, dass jeder channel nur eine Note zur selben Zeit spielt, oder ist das egal?
geschrieben am 29.03.2012 18:17:51
( Link )
Ein Channel kann immer nur eine Note zu einem Zeitpunkt spielen.
Möchtest du, dass eine halbe Note gespielt wird, und wenn diese halbe Note zur Hälfte vorbei ist noch eine viertel Note gespielt wird,
so brauchst du 2 Channel
geschrieben am 29.03.2012 19:05:46
( Link )
"Achten" musst du gar nicht darauf, das kann man nämlich nicht mal unabsichtlich hinbekommen. Wie würde man das schreiben wollen, wenn zwei Noten gleichzeitig gespielt werden sollen? Die kommen immer nacheinander.
geschrieben am 29.03.2012 21:17:17
( Link )
@kooooopa
Hmm... hab Ich mir irgendwie schon gedacht

@WYE
Ich meine in FL ^^
Mal ein grobes Beispiel davon, was ich meine:


Müsste man das auf 2 channels verteilen? Laut kooooopas Ausgage ja, oder wie?
geschrieben am 30.03.2012 13:40:29
( Link )
Ja, dass müsste auf 2 Channel verteilt werden, außer du trickst gewaltig.
Mit tricksen hört es aber sich auch nicht 100% wie das Original an.

Code
o4c1024>c1024c1024c1024c1024c1024c1024c1024c1024c1024
geschrieben am 30.03.2012 21:26:35
( Link )
Die Frage wurde bestimmt schon 5000000000000000000 mal gestellt, habe aber ehrlich gesagt keine Lust alle 99 Seiten durchzulesen, deshalb frag ich jetzt einfach mal... !

Und zwar: Ich möchte das der Hammer Bruder nicht Palette B sondern Palette D verwendet.
Und nein .. ich kann nicht einfach die Farben aus Reihe D in Reihe B verschieben, da die anderen Sprites dann auch betroffen wären. x:

Ich könnte ja Notfalls den Hammer Bruder einfach eine eigene Palettenreihe in YY-CHR geben, wollte aber Fragen ob es nicht eine einfachere Lösung gibt..
geschrieben am 30.03.2012 21:30:31
( Link )
Ein Custom Sprite, richtig? Das kannst du mit dem CFG-Editor bewerkstelligen.
geschrieben am 30.03.2012 21:33:54
( Link )
Zitat von WYE:
Ein Custom Sprite, richtig? Das kannst du mit dem CFG-Editor bewerkstelligen.


Ich hab ihn nur eine neue Grafik verpasst, wozu das Blau/Lila überhaupt nicht passt.
Also der ganz normale "Amazing flying Hammer Brother"
geschrieben am 30.03.2012 21:41:16
( Link )
Ach so. Vielleicht gibt's bei SMWC das Tool "Sprite Paint" noch, damit dürfte das am einfachsten gehen.
geschrieben am 30.03.2012 21:59:13
( Link )
Zitat von WYE:
Ach so. Vielleicht gibt's bei SMWC das Tool "Sprite Paint" noch, damit dürfte das am einfachsten gehen.


Leider nicht ._.
Habs jetzt einfach mit YY-Chr gemacht.. Aber ich denke das Ergebnis kann sich sehen lassen c:



Vorher war der einfach nur Blau..
geschrieben am 30.03.2012 23:02:21
( Link )
Dann wirst du wohl hex-editieren müssen. Hier, das scheint die Adresse zu sein:

Zitat
15CF1 $02:DAF1 8 bytes Sprite tilemap related Sprite tilemap: Amazing Flyin' Hammer Brother


Ein Hex-Tutorial von mir flattert hier irgendwo rum. Von Bedeutung dürfte jedes zweite Byte sein, und das wäre dann im YXPPCCCT-Format.
geschrieben am 03.04.2012 10:02:50
( Link )
Ich bin ja gerade am Patches einfügen und manchmal zweifel ich echt an mir oder an smwc.
Beispiel: Patch soll ermöglichen, dass man keine P-Jumps mehr machen kann, was macht der Patch? Er erlaubt gar keine Sprünge.
Das sind noch die kleineren Probleme, nach dem man immer erst die Patchs gesucht hat, die den Fehler verursachen.
Manche Patchs bringen die ROM sofort zum Absturz etc.

Es gibt aber 1, 2 Patches auf die ich nicht verzichten will, daher meine Frage ob mir jemand hierbei helfen kann, die Fehler zu beheben.

Patch 1:
Soll Feuermario nach einer bestimmten Zeit wieder zu Mario machen. Funktioniert auch. Nur der Patch überschreibt eine bestimmte ExGFX.
Hab schon probiert, die ExGFX auf eine andere Map16 Page zu legen, aber auch dort wird die ExGFX überschrieben.
Hier mal der Code:
Code
;FirePowerTimer
;Makes it so firepower works on a timer. e.g. when you get a firepower,
;you will only have it for a certain amount of time
;frames you have firepower is Timer RAM * Multiplier RAM
;HuFlungDu
;Note, hijacks the SAME status bar routine as everybody else since I'm far too lazy to find a better
;one, so check if I hijack te same place (8DC4) as any of your other patches.
;No credit neccesary (I knocked it out in about five minutes...)
;Feel free to PM me if you have any problems

!freeram = $0660 ;set to free RAM
!freeram2 = $0661 ;I use the same freeram as a start as everybody else,
;so your probably going to want to change these.

macro RATS_start(id)
db "STAR"
dw RATS_Endcode-RATS_Startcode
dw RATS_Endcode-RATS_Startcode^#$FFFF
RATS_Startcode:
endmacro

macro RATS_end(id)
RATS_Endcode:
endmacro
lorom ;\ ROM is LoRom
header ;/ and has a header.

org $01C5EC ;\Hijack getfire routine
JSL setram ;|and jump to code
NOP ;/then get rid of one byte because I oerwrite the rest of the command

org $8DC4 ;\ Hijack NMI routine
JSL StatusCode ;| and jump to our code
NOP ;/ also NOP one time.

org $218015 ;| POINT TO FREE SPACE!!!
%RATS_start(0)
StatusCode:
LDA #$02 ;\ Restore previous
STA $420B ;/ hijacked NMI routine.
LDA $19 ;\Check if you have firepower
CMP #$03 ;|
BNE return ;/
DEC !freeram2 ;\decrease the "multiplyer" RAM "allows me to make it take FF*2 frames
LDA !freeram2 ;|and check if it has reached 0 yet
BNE return ;/
LDA !freeram ;\if it has and the first timer isn't zero
BEQ return ;/
LDA #$02 ;\This is the Mulitplier RAM
STA !freeram2 ;/
DEC !freeram ;decrease timer
LDA !freeram ;\check if it's zero yet
BNE return ;/
LDA #$01 ;\make mario big
STA $19 ;/
return:
RTL

setram:
LDA #$20 ;\Restore hijack
STA $149B ;/
LDA #$FF ;\This is the Timer RAM
STA !freeram ;/
RTL
%RATS_end(0)


Patch 2:
Soll dafür sorgen, dass wenn man geduckt ist nicht springen kann. Funktioniert auch. Überschreibt aber wahllos irgendwelche ExGFX auf irgendwelchen Map16 Pages.
Hier mal der Code:
Code
;Disable Jumping While Ducking Patch
;Origional By: Ixtab
;"Fix" By: Chdata/Fakescaper
;Does not disable spin jumping globally (while still being able to jump off of Yoshi)
;Because there is already a patch on SMWC that does this
;Also unlike Ixtab's version, the jumping SFX does not play when you try to jump while ducking, and it's now impossible to see Mario "twitch" from trying to show his jumping frame.
;Incase you're wondering, you can still jump while sliding.
;If you want to disable jumping while sliding too, look for ";ORA $13ED" and uncomment it, (Remove the semicolon)

header
lorom
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!freeSpace = $958000 ; change this to whatever
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;

org $8F7E
JSL Main
NOP #2

org !freeSpace
db "STAR"
dw Encode-Main
dw Encode-Main^#$FFFF
Main: ;Start of Patch
STA $0F14 ;Put hacked code back.
STX $0F13 ;More code restoration
LDA $73 ;Mario's Ducking Flag
;ORA $13ED ;***UNCOMMENT THIS LINE IF YOU WANT TO DISABLE JUMPING WHILE SLIDING***
BEQ bbb ;If not ducking skip this
REP #$20 ;16-bit A
LDA #$8080 ;This
TSB $0DAA ;-Disables jumping while ducking
TSB $0DAC ;-Disables spin jumping while ducking (comment this out if you want to still be able to, the patch will still be able to counter break as described in the description. Incase you're stupid, duck jumping as big Mario to fit into small places.)
SEP #$20 ;8-bit A
bbb: ;labbbel
RTL ;Return
Encode: ;End of Patch
print "I'm psychic, I knew that you would patch this."
print "-Chdata-"


Und bei den letzten 2 Patchen hab ich immer das gleiche Problem. Sie machen Vertikal Level zu Horizontalen. Die eigentliche Funktion funktioniert auch wie immer, aber wie schon gesagt sie machen Vertikale Level zu Horizontale. (nur die Level die ich selbst vertikal gemacht habe, nicht die die im Originalen auch schon vertikal sind.)

Hier Code 1 (Keine Wandsprünge mehr):
Code
header
lorom

;Walljump/Note Block Glitch Fix by lolcats439
;fixes the wall jumping glitch and the note block-wall death glitch

;This patch moves some of SMW's anti-wall-clipping code to freespace, and calls it from different hijacks, so it runs before the "Mario is on ground" bit of $77 would get set, so that the bit doesn't get set when jumping at a wall. Then when trying to walljump, you can't "catch" the block anymore, because you don't clip inside the block for one frame.

;It fixes the note block clipping glitch by changing the blocked bits that will be set to $77 to 12 (blocked from up and right) if it is 11 (blocked from up and left) and Mario is moving to the left. This would be a separate patch, but it needs to use the same hijack used to fix the walljumping glitch.

;post bugs/comments in this thread: http://www.smwcentral.net/?p=thread&id=35691


!FREESPACE = $168000 ; change to freespace


org $00E9F6 ;\ Hijack code and JSL to custom code
JSL SideScreen ;/ this hijack runs when Mario is against the side of the screen
NOP


org $00EA16 ;\ NOP out the anti-clipping routine here
BRA Skip1 ;|
NOP #10 ;|
Skip1: ;/


org $00EBD9 ;\ reset old hex edit which didn't really fix the note block death glitch
db $02 ;/


org $00EC7E ;\ Hijack code and JSL to custom code
JSL Block ;| this hijack runs when Mario is against a block
NOP ;/


org $00ED1C
JSL BigMarioStuckInOneBlockHighSpace
NOP #4


org !FREESPACE
!CodeSize = CodeEnd-CodeStart ;\
RATS: ;| Write RATS tag to
db "STAR" ;| prevent other programs
dw !CodeSize-$01 ;| from overwriting this
dw !CodeSize-$01^$FFFF;/ code!


CodeStart:
Block:
CMP #$11 ;\ fix note block clipping glitch by changing the blocked bits
BNE Skip6 ;| to be set depending on Mario's direction
PHX ;|
LDX $7B ;|
BPL Skip7 ;|
LDA #$12 ;|
Skip7: ;|
PLX ;|
Skip6: ;/
TSB $77 ;\ restore old code
AND.b #$03 ;|
TAY ;/
LDA $00 ;\ Use $00 as temporary freeRAM, restoring its value at the end
PHA ;/
LDA $96 ;\ Don't move Mario outside the block instantly if his head is in the block
AND #$F0 ;|
STA $00 ;|
LDA $98 ;|
AND #$F0 ;|
CMP $00 ;|
BNE Skip2 ;|
JSR NoClipping ;|
BRA Skip3 ;|
Skip2: ;/
PHX ;\ Put blocked bits into X to select side of block to move Mario to
LDA $77 ;|
AND #$03 ;|
LSR A ;|
TAX ;/
LDA $1933 ;\ If layer 1 interaction is being processed, Mario is being crushed horizontally
CMP #$00 ;| between layer 1 and layer 2, and the layer 1 block is on the right, set X to 00
BNE Skip5 ;| to avoid a glitch where Mario clips in and out of the block really fast before dying
LDA $77 ;|
AND #$03 ;|
CMP #$03 ;|
BNE Skip5 ;|
CPY #$01 ;|
BNE Skip5 ;|
LDX #$00 ;|
Skip5: ;/
LDA $94 ;\ Move Mario outside the block instantly
AND #$F0 ;|
ORA.l $00E911,x;|
STA $94 ;|
PLX ;/
Skip3:
PLA
STA $00
RTL


SideScreen:
PHX
TYX
LDA.l $00E90A,x;\ restore old code
TSB $77 ;/
PLX
JSR NoClipping
RTL


BigMarioStuckInOneBlockHighSpace:
LDA $77 ;\ If blocked from the right, do nothing
AND #$01 ;| If not blocked from the left, subtract 1 from Mario's x position
BNE Skip4 ;| If blocked from the left, subtract 2 from Mario's x position
REP #$20 ;|
DEC $94 ;|
SEP #$20 ;|
LDA $77 ;|
AND #$02 ;|
BEQ Skip4 ;|
REP #$20 ;|
DEC $94 ;|
SEP #$20 ;/
Skip4:
LDA $77 ;\ restore old code
AND.b #$FC ;|
ORA.b #$09 ;|
STA $77 ;/
RTL


NoClipping:
LDA $77 ;\ anti-clipping routine moved here
AND #$03 ;|
BEQ Return ;|
AND #$02 ;|
PHX ;|
TAX ;|
REP #$20 ;|
LDA $94 ;|
CLC ;|
ADC.l $00E90D,x;| ADC.l doesn't work with y, so this uses x
STA $94 ;|
SEP #$20 ;|
PLX ;/
Return:
RTS
CodeEnd:


Code 2 (nicht mehr mit Wolken/Ballon durch Wände gehen bei links rechts drücken):
Code
header
lorom

;P-balloon/Cloud Fix patch by lolcats439
;Fixes the glitch that lets you go though blocks while using a P-balloon or Lakitu cloud.

!FREESPACE = $168000 ; change to freespace

org $02D214 ;\ Hijack code and JSL to custom code
JSL CodeStart ;/


org !FREESPACE
!CodeSize = CodeEnd-CodeStart ;\
RATS: ;| Write RATS tag to
db "STAR" ;| prevent other programs
dw !CodeSize-$01 ;| from overwriting this
dw !CodeSize-$01^$FFFF;/ code!

CodeStart:
LDA $15 ;\ restore overwritten code
AND.b #$03 ;/
CMP #$03
BNE Skip
LDA #$01
Skip:
CMP #$00
RTL
CodeEnd:




Ich hoffe mir kann hierbei jemand helfen.
Ich sag schon mal ein ganz großes
DANKE!
geschrieben am 03.04.2012 11:01:03
( Link )
Weißt du, was "Free Space" ist? Wenn nicht, kann's daran liegen.

Die meisten Patches fügen zusätzlichen Code ins Spiel ein, und dafür brauchen sie Platz (Speicher, den das Originalspiel nicht benutzt und der somit frei ist). Wo der liegt, das musst du herausfinden und dem Patch sagen, sonst fügt der seinen Code an einer Stelle ein, an der auch SMW schon Code hat, und dann ist es ja klar, dass Fehler auftreten.
geschrieben am 03.04.2012 11:43:49
( Link )
Hab leider nur eine vage Vorstellung davon, was Freespace ist. Wie man ihn findet und "zuteilt" hab ich keine Ahnung.
Ich denke aber es sollte genug vorhanden sein. Selbst wenn ich die Patchs als erstes einfüge kommt es zu den Fehlern.
geschrieben am 03.04.2012 12:40:16
( Link )
Du musst denen ja auch sagen, wo der Free Space ist. Nicht immer sind die Standardwerte auch wirklich freier Speicher. Manche Standardwerte zeigen sogar absichtlich auf bereits benutzten Speicher, damit was überschrieben wird und man merkt, dass man sie ändern muss.
geschrieben am 03.04.2012 13:57:55
( Link )
habe gerade den patch :" [Xkas] Nintendo Presents Custom Palette in mein hack eingefügt" [beschreibung: This patch applies a small ASM hack that enables a custom palette on palette 8 (which is used by the 'Nintendo Presents' logo). The background colour can also be changed. You have to change the RGB values of the custom palette yourself (by default they're all FFFF, which is white).] und habe die hinzugefügte palette des Nintendo logos mit YY-Chr bearbeitet, gespeichert und in LM insertet (grüner Pilz), jedoch werden die Änderungen im Emulator nicht angezeigt ;/.

Normalerweise muss man ja die Mario Palette verändern, jedoch gab es hierbei Probleme, deshalb dachte ich der Patch hilft, wenn ich eine seperate Palette für das Logo habe.