Allgemeine SMW Hacking Fragen

geschrieben am 11.05.2014 12:36:22
( Link )
Zitat von WYE:
Den Code zu posten bzw. zu verlinken würde helfen; ansonsten könntest du vielleicht mal eine andere Sprite-Memory-Einstellung probieren.

Code
1
36
e 0 3b 82 b9 46
0 0
air_meter.asm

Hier haben sie ihn!
Bzw die Sprite Memory ist schon auf 0
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 11.05.2014 14:23:12
( Link )
Des ist der Falsche Code, Jason.

Du musst die .asm Datei posten und nicht die .cfg

btw. hast du geschaut, ob dein Wasser Priority On hat ? Falls, dann musst des ausschalten.
geschrieben am 11.05.2014 14:24:43
( Link )
Bestimmte Sprites essen OAM-Slots. Der Air-Meter-Sprite ist keine Ausnahme und nutze ihn am besten mit No More Sprite Tile Limits.
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 11.05.2014 14:28:41
( Link )
Zitat
Der Air-Meter-Sprite ist keine Ausnahme und nutze ihn am besten mit No More Sprite Tile Limits.

Ist no more Sprite Tile Limits auch ein Generator? D;

Bzw hier ist der "richtige" Code
Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

RAM_AirMeter = $7F8827

;; Where to place the meter relative to the screen boarder
MeterPositionX = $E8
MeterPositionY = $1E

;; Possible values for the below variables:
;; (fast) $00, $01, $03, $07, $0f, $1f, $3f, $7f, $ff (slow)
CountDownFrequency = $03
CountUpFrequency = $00

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; INIT and MAIN routines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DCB "INIT"
LDA #$FF
STA RAM_AirMeter
RTL

DCB "MAIN"
PHB
PHK
PLB
JSR MainSub
PLB
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Sprite Main
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MainSub:
LDA RAM_AirMeter ; Play warning sounds

CMP #$1C
BEQ Sound
CMP #$14
BEQ Sound
CMP #$0C
BNE NoSound
Sound:
LDA #$2a
STA $1DFC
NoSound:

;; LDA RAM_AirMeter ; Change Mario's face blue
;; CMP #$30
;; BCS NoChangePal
;;
;; LDY #$86
;; STY $2121
;;
;; LDA #$31
;; STA $2122
;; LDA #$7e
;; STA $2122
;;
;; LDY #$8e
;; STY $2121
;;
;; LDA #$ad
;; STA $2122
;; LDA #$6d
;; STA $2122
;; NoPalChange:

LDA RAM_AirMeter ; If the meter is full...
CMP #$FF ;
BNE Gfx ; ...and it has been for some time...
LDA $1540,x ;
BEQ NoGfx ; ...then skip the graphics routine
Gfx:
JSR SubGfx ; Draw the sprite
NoGfx:

LDA $9D ; Return if sprites are locked
BNE Return0

LDA $75
BEQ CountUp
CountDown:
LDA $13
AND #CountDownFrequency
BNE SkipMeter

LDA RAM_AirMeter
DEC A
BNE SetMeter
BRA KillMario
CountUp:
LDA $13
AND #CountUpFrequency
BNE SkipMeter

LDA RAM_AirMeter
CMP #$FF
BEQ SkipMeter

LDA #$48
STA $1540,x

LDA RAM_AirMeter
INC A
;; LDA #$FF ; NOTE: Reinstate to make the meter instantly reset when not in water
SetMeter:
STA RAM_AirMeter

SkipMeter:
LDA $1a ; Position = Screen boundary
CLC
ADC #$80
STA $E4,x ; This is done so the sprite stays on screen
LDA $1b
ADC #$00
STA $14E0,x
LDA $1c
STA $D8,x
LDA $1d
STA $14D4,x
Return0:
RTS

KillMario:
LDA #$90
STA $7D
LDA #$09 ; Set death animation
STA $71
STA $1DFB ; Set death music
LDA #$FF
STA $0DDA
LDA #$30 ; Set time until we return to the OW
STA $1496
STA $9D
STZ $140D
STZ $1407
STZ $188A
RTS


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Graphics Routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

NumTiles = $05

SpriteTileDispX: dcb $00,$08,$10,$18,$20,$27
SpriteTileDispY: dcb $28,$20,$18,$10,$08,$01
SpriteGfxProp: dcb $80,$00,$00,$00,$00,$00

Palettes: dcb $09,$05,$0B

SubGfx:
JSR GetPalette
;; LDA $15F6,x ; NOTE: Reinstate to use the palette from the cfg file
STA $02

LDA RAM_AirMeter ; Load address to be timed
LSR
LSR
LSR
STA $03

LDY $15EA,x ; get offset to sprite OAM

PHX
LDX #NumTiles
GfxLoopStart:

LDA #MeterPositionX
STA $0300,Y

LDA #MeterPositionY
CLC
ADC SpriteTileDispY,x
STA $0301,Y

LDA $03
JSR CalculateTile
STA $0302,Y

LDA $02
ORA SpriteGfxProp,x
ORA #$20
STA $0303,Y

INY
INY
INY
INY

DEX
BPL GfxLoopStart
PLX

LDY #$00
LDA #NumTiles
JSL $01B7B3
RTS

GetPalette:
LDY #$00
LDA RAM_AirMeter
CMP #$55
BCC LoadPalette
INY
CMP #$AA
BCC LoadPalette
INY
LoadPalette:
LDA Palettes,y
RTS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CalculateTile:
CPX #$00
BEQ EndPiece
CPX #NumTiles
BEQ EndPiece

PHA
TXA
DEC A
ASL
ASL
ASL
STA $00
PLA

SEC
SBC $00
BMI EmptyTile

CMP #$08
BCS FullTile

AND #$07
CLC
ADC #$47
CMP #$4B
BCC Return
CLC
ADC #$0C
Return:
RTS

FullTile:
LDA #$46
RTS
EmptyTile:
LDA #$47
RTS
EndPiece:
LDA #$56
RTS
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 11.05.2014 14:47:42
( Link )
Zitat von Vanilla Hacker:
Zitat
Der Air-Meter-Sprite ist keine Ausnahme und nutze ihn am besten mit No More Sprite Tile Limits.

Ist no more Sprite Tile Limits auch ein Generator? D;

m( Das da.
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 11.05.2014 14:53:12
( Link )
Zitat von MarioFanGamer659:
Zitat von Vanilla Hacker:
Zitat
Der Air-Meter-Sprite ist keine Ausnahme und nutze ihn am besten mit No More Sprite Tile Limits.

Ist no more Sprite Tile Limits auch ein Generator? D;

m( Das da.


Da ist aber keine CFG Datei dabei.
Bzw ist das jetzt ein Generator?
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 11.05.2014 14:58:28
( Link )
Nee, das ist ein Patch.
geschrieben am 11.05.2014 15:07:41
( Link )
Zitat von WYE:
Nee, das ist ein Patch.


Naja nächste Frage:Wie füge ich diesen Patch ein?
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 11.05.2014 16:17:55
( Link )
Zitat von Vanilla Hacker:
Zitat von WYE:
Nee, das ist ein Patch.


Naja nächste Frage:Wie füge ich diesen Patch ein?

Mit xkas.
geschrieben am 11.05.2014 17:19:59
( Link )
Aber nicht einfach so. Man muss zuerst noch freespace suchen die Freespace-Adresse in der ASM-Datei umändern und Xkas mit CMD.exe/einer .bat-Datei laufen lassen bzw. in der allerersten Zeile ";@Xkas" einfügen und Asar benutzen (damit bräuchte man keine .bat-Datei bzw. CMD.exe, Freespace muss man immer noch ändern). Hier einige Tutoren: [1], [2], [3] und [4].
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 11.05.2014 17:20:53
( Link )
Zitat
Mit xkas.

Sorry das ich so doof Frage aber kann mir einer das bitte genauer erklären was man dann mit der smc Datei machen soll bzw wie man das überhaupt einfügt

EDIT:
Ach ich blicke da nicht durch,
Da lasse ich den Airmeter Airmeter sein ;D
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 11.05.2014 18:07:27
( Link )
Einfach Freespace Logger (kurz: Slogger) runterladen, die Rom mit Slogger öffnen, dann wird eine TXT-Datei erstellt, bei dem der Name der Datei der Rom-Name ist (d.h. wenn es SMW.smc heißt, wird eine Datei namens "SMW.txt" erstellt, wenn Rom.smc, dann "Rom.txt"), Textdatei öffnen und dann, einfach bei der irgendeinen Wert bei der LoRom-Spalte, der groß genug ist (du kannst die Größe rechts sehen und bei so kleinen Patches, so um die 200 Bytes, wenn du aber nicht sicher bist, dann einfach kannst du auch einen Wert nehmen, der mehr Freespace hat), und dann noch die Zahl ohne "0x" kopieren und sie durch den Freespace, der in der ASM-Datei steht, ersetzten (meisten steht ein Argument genannt "!Freespace = $xxxxxx" oder es steht keine Dafür wiederum eine Adresse, wo ein Kommentar "org $xxxxxx ;POINT THIS TO SOME FREESPACE!!!" ö.ä. steht ersetzen). Nun nur noch Xkas benutzen oder du fügst in der ASM-Datei in der allerersten Zeile ";@xkas" ein und benutzt Asar.
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 19.05.2014 19:24:59
( Link )
Moin Menschen!
Ich suche die Pallete die Luigi auf der OW hat!
Kann mir da einer helfen?
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 19.05.2014 20:17:52
( Link )
B1-B7

(musst schauen, wo die ist)
geschrieben am 20.05.2014 18:07:03
( Link )
Ich wieder
Ich möchte gerne das wenn man ein Level startet nur die untere Hälfte des Level sieht bzw das die Kamera unten stehen bleibt.
Ich glaube früher musste man einfach No Vertical Scroll eingeben aber viehleicht hat sich das ja durch die Neue LM Version geändert^^ Hier ein Bild
http://www11.pic-upload.de/20.05.14/ni88xnflmpnd.png
Wenn ich das Level starte sehe ich oben Luigi aber ich möchte nur das untere sehen also nicht Luigi.
Könnt ihr helfen?
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 20.05.2014 18:32:23
( Link )
Bei "Layer 1/2 Initial Position" an der Tür mit der eins kann man es einstellen.
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 23.05.2014 22:07:34
( Link )



Keine ahnung wie das passiert ist.Ich würde gerne die Standart Pallete ändern aber wie macht man das?
Dr. Azizi - Tierversuche aus Leidenschaft.
geschrieben am 24.05.2014 8:57:02
( Link )
Ehm, kann es sein, dass das Zweite Bild korrupt ist? Weil bei mir ladet es nur bis zum Paletten Editor Fenster o.o

Versuche mal eine andere Palette aus einem normalen Level zu importieren.
geschrieben am 24.05.2014 9:16:48
( Link )
Offtopic: Das Palettenfeld hät ich gern als Tapete ;D
geschrieben am 25.05.2014 0:11:38
( Link )
So Neue Post weil Frage und kein OFFTopic

Ich habe ein kleines Problem mit dem Midway: Ich habe das Level 003 als eine Art Intro vorm richtigen Level von da aus geht eine Röhre ins richtige Level (145). Dort setzte ich nun den Midway.

Meine Frage:
Wie kriege ich es hin das Mario beim Midway im Level 145 Startet und nicht im Level 003?