Allgemeine Hex- und ASM-Fragen

geschrieben am 25.10.2010 20:21:58
( Link )
Zitat von ZukunftsNerd:
Funktioniert nich...
Hab ich das mit Teleportationscode falsch verstanden?
(Ich kann noch kein ASM)
Bei mir steht jetzt in der Datei:

[...]


Hm, ja, das meinte ich, und so sollte es auch funktionieren. Komisch, dass es das nicht tut.

Probier mal, das db $42 am Anfang und die drei letzten "JMP"s wegzunehmen.
geschrieben am 25.10.2010 21:13:18
( Link )
Möglicherweise ja auch die BTSD-Version zu alt? Die neuen Offsets werden ja nur in der neusten Version unterstützt.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 25.10.2010 22:24:47
( Link )
Ich habe eine Frage zu folgendem Sprite-Generator:

Code

SPRITE_TO_GEN = $C2 ;only used if first extra bit is clear
CUST_SPRITE_TO_GEN = $6D ;only used if first extra bit is set

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite code JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "INIT" ;generators don't have an init routine
dcb "MAIN"
PHB
PHK
PLB
JSR SPRITE_CODE_START
PLB
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EXTRA_BITS = $7FAB10
NEW_SPRITE_NUM = $7FAB9E

TBL_B2D0 dcb $F0,$FF
TBL_B2D2 dcb $FF,$00
TBL_B2D4 dcb $10,$F0

SPRITE_CODE_START
PHX
PHY

LDY #$00
LDX #$0B
Loop:
LDA $9E,x
CMP #$C2
BNE KeinBlurp
INY
KeinBlurp:
DEX
CPX #$FF
BNE Loop

CPY #10 ;Max. Blurps
BCC Weitermachen
PLY
PLX
RTS

Weitermachen:
PLY
PLX
LDA $14
AND #$7F
ORA $9D
BNE RETURN
JSL $02A9DE
BMI RETURN
TYX

LDA #$01 ; store sprite status
STA $14C8,x

LDA $18B9 ; check if first extra bit is set
AND #$40
BNE CUST

NORMAL LDA #SPRITE_TO_GEN ; store sprite number
STA $9E,x
JSL $07F7D2 ; reset sprite properties
BRA SHARED

CUST LDA #CUST_SPRITE_TO_GEN ; store custom sprite number
STA NEW_SPRITE_NUM,x
JSL $07F7D2 ; reset sprite properties
JSL $0187A7 ; get table values for custom sprite
LDA #$08 ; mark as initialized
STA EXTRA_BITS,x



SHARED 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 möchte, dass, sobald ein Sprite auftaucht, ein Sound kommt. Noch schöner wäre es, wenn der Sound nur kommt, wenn der erste extra bit aktiviert ist (Custom Sprite).
Kann mir das jemand machen? Danke schonmal.
geschrieben am 26.10.2010 16:59:02
( Link )
Zitat von RPG Hacker:
Möglicherweise ja auch die BTSD-Version zu alt? Die neuen Offsets werden ja nur in der neusten Version unterstützt.

Hm...könnte sein,ich hab mir BTSD vorgestern runtergeladen und bei SMWC gibts nur Version 0.44
Notiz an mich:

ERST runterschlucken,DANN lachen...
geschrieben am 26.10.2010 17:20:54
( Link )
Zitat von ZukunftsNerd:
Zitat von RPG Hacker:
Möglicherweise ja auch die BTSD-Version zu alt? Die neuen Offsets werden ja nur in der neusten Version unterstützt.

Hm...könnte sein,ich hab mir BTSD vorgestern runtergeladen und bei SMWC gibts nur Version 0.44


Das müsste dann eigentlich die richtige sein.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 20.11.2010 20:11:21
( Link )
Hallo Leute!
Ich bin noch ASM-Anfänger, der Block hier soll nur ein Test sein.

Also ich hab folgendes geschrieben:
Code
JMP Return : JMP MarioCode : JMP Return : JMP Return : JMP Return : JMP Return : JMP Return


MarioCode:
LDA $0DB6
CMP #$00
BEQ CAPE
CMP #$00
BNE TRANSFORM
RTL

CAPE:
LDA #$02
STA $19

TRANSFORM:
LDA #$01
STA $0DB3

Return:
RTL


Das ganze soll eine Art Portal sein. (Einfach ein Block, durch den man durchfällt.)
Und wenn man durch ihn durchfällt, ihn also von oben berührt, und 0 Münzen hat, wird man zu Cape Mario.
Wenn man allerdings mehr als 0 Münzen hat, wird man zu Luigi. (Bedeutet Player 2 kann weiterspielen.)
Glitches auf der OW sollte es dann nicht geben, wenn ich vor das Ziel noch nen Tunnel pack, wo der SPieler wieder zu Mario zurückverwandelt wird.

Jetzt das Problem: Egal, wieviele Münzen ich habe, ich werde immer zu Luigi. (Ob nun mit oder ohne Cape.)
Was muss ich machen, damit ich nur zu Luigi werde, wenn ich wirklich Münzen habe?

(Wäre übrigens ne gute Idee für eine Art 2-Spieler-Hack, bei dem in den Levels zwischen den Spielern gewechselt wird.)
L Lawliet
Unfall
Um 18.30 läuft der Ermittler in sein eigenes Haus, um sich einen Kuchen zu craften.
Allerdings vergisst er dabei seine Tür zu schließen.
Ohne es zu bemerken schleicht sich ein Creeper in sein Haus.
L wird vom selbigen übermannt, der Creeper explodiert...
...und L stirbt.
geschrieben am 20.11.2010 20:26:57
( Link )
Das Problem liegt hier:

Code
CAPE:
LDA #$02
STA $19

TRANSFORM:
LDA #$01
STA $0DB3


Umändern in:


Code
CAPE:
LDA #$02
STA $19
RTL

TRANSFORM:
LDA #$01
STA $0DB3
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 20.11.2010 20:46:20
( Link )
Jetzt hat sich beides nur geändert.
Bedeutet ich bekomme immer ein Cape, und zu Luigi werde ich gar nicht mehr. o.o
L Lawliet
Unfall
Um 18.30 läuft der Ermittler in sein eigenes Haus, um sich einen Kuchen zu craften.
Allerdings vergisst er dabei seine Tür zu schließen.
Ohne es zu bemerken schleicht sich ein Creeper in sein Haus.
L wird vom selbigen übermannt, der Creeper explodiert...
...und L stirbt.
geschrieben am 20.11.2010 20:59:05
( Link )
Nimm $0DBF, nicht $0DB6. Immer wenn es zwei verschiedene Adressen für Mario und Luigi gibt (Leben, Münzen etc.), nimm die, bei der in der Beschreibung "Current Player" steht.

Noch ein paar Tipps zur Effizienz:

Nach einem Branch-Befehl musst du nicht noch einmal CMP benutzen, wenn's dieselbe Zahl ist, und CMP #$00 kann in den allermeisten Fällen sowieso weggelassen werden. Kurz wär's also LDA $0DBF : BEQ Cape : BNE Transform.
geschrieben am 20.11.2010 21:04:36
zuletzt bearbeitet von KaterT am 20.11.2010 21:15:27.
( Link )
Danke an euch beiden, jetzt funktionierts. ^^
Ist auch recht motivierend, wenn man das erste mit ASM gemacht, hat, das funktioniert.

Edit: Eure Schlacht um die Effizienz ist echt köstlich. xD
L Lawliet
Unfall
Um 18.30 läuft der Ermittler in sein eigenes Haus, um sich einen Kuchen zu craften.
Allerdings vergisst er dabei seine Tür zu schließen.
Ohne es zu bemerken schleicht sich ein Creeper in sein Haus.
L wird vom selbigen übermannt, der Creeper explodiert...
...und L stirbt.
geschrieben am 20.11.2010 21:06:43
( Link )
EDIT: Geändert. Geht der Edit-Krieg wieder los?

Warte mal, das geht sogar noch effizienter.

Wenn das Überprüfen auf 00 nicht "brancht", ist ja klar, dass es nicht 0 ist. Dann musst du nicht nochmal einen Branch zu TRANSFORM einfügen, sondern kannst dort auch gleich den Transform-Code selbst hinschreiben.

Code
    JMP Return : JMP MarioCode : JMP Return : JMP Return : JMP Return : JMP Return : JMP Return


MarioCode:
LDA $0DBF
BEQ CAPE
LDA #$01
STA $0DB3
RTL

CAPE:
LDA #$02
STA $19

Return:
RTL
geschrieben am 20.11.2010 21:07:29
zuletzt bearbeitet von RPG Hacker am 21.11.2010 10:36:46.
( Link )
EDIT//
ARGH! Von WYE geninja'd! Aber ich weigere mich, diesen Post jetzt nicht zu posten!
//EDIT

EDIT2//
Aber du hast bei deinem Code eh $0DBF vergessen, WYE.
//EDIT2

Und wenn du das "TRANSFORM:" und den Code darunter nach oben verschieben würdest, könntest du es noch weiter optimieren. Insgesamt würde das dann so aussehen:

Code
JMP Return : JMP MarioCode : JMP Return : JMP Return : JMP Return : JMP Return : JMP Return


MarioCode:
LDA $0DBF
BEQ CAPE

TRANSFORM: ; Dieses Label kann auch weggelassen werden
LDA #$01
STA $0DB3
RTL

CAPE:
LDA #$02
STA $19

Return:
RTL


EDIT3//
*Mit ganz vielen Edits nach WYE schmeiß*
//EDIT3
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 21.11.2010 10:06:06
( Link )
Ich habe ein Problem mit Yoshi,denn ich möchte gerne wenn ich ein Level mit Yoshi beendet habe,das Yoshi entweder nicht angezeigt wird oder verschwindet.
Könnt ihr mir helfen !?!
geschrieben am 21.11.2010 10:10:14
( Link )
Das könntest du auch mit dem Block Hier machen: No Yoshi Block
How many People can read Hex, if only you and DEAD can read it?

Answer anzeigen
DEAE
geschrieben am 21.11.2010 10:37:36
( Link )
Oder Counter Break Y (so heißt er glaube ich). Bewirkt, dass du Yoshi am Ende jedes Levels verlierst.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 21.11.2010 11:31:49
( Link )
Danke RPGHacker und Darkblade es funkioniert,jetzt arbeite ich jetzt an meine Levels weiter
geschrieben am 04.12.2010 12:27:17
( Link )
Code
!Cost = $10		; Input the amount needed in hex. 
!RAM_Currency = $0DBF ; RAM address for currency (Default is players coins)
!ItemSound = $29 ; Sound effect used when Mario obtains the item from the block.
!ItemSoundPort = $1DFC ; Sound port used when Mario obtains the item from the block.
!NoItemSound = $2A ; Sound effect used when Mario doesn't have enough.
!NoItemSoundPort = $1DFC ; Sound port used when Mario doesn't have enough.
!Map16Number = $0831
; Supported values for "!ItemSoundPort" and "!NoItemSoundPort" are $1DF9, $1DFA, and $1DFC


JMP Main : JMP Return : JMP Return : JMP Return : JMP Return : JMP Return : JMP Return

Main:
LDA #!Cost ; Load cost..
DEC A ; ...
CMP !RAM_Currency ; And compare it with Mario's coins..
BPL NotEnough ; If he doesn't have enough, go to NotEnough.
LDA !RAM_Currency ; If he does, load coins..
SEC ; Decrease..
SBC #!Cost ; The amount of coins
STA !RAM_Currency ; And store new value.
LDA #!ItemSound ; And play a sound..
STA !ItemSoundPort ; And store it.
LDX #!Map16Number
JSR ChangeMap16
BRA Return ; Return
NotEnough:
LDA #!NoItemSound ; Play a sound..
STA !NoItemSoundPort ; And store it.
LDA #$03 ; Level Number to play message from
STA $13BF ; Write New Level Number
LDA #$02 ;Message Number (1 or 2)
STA $1426 ;Play Message
Return:
RTL ; Return


PrematureEnd:
PLX
PLY
PLB
PLP
RTS
ChangeMap16:
PHP
SEP #$20
PHB
PHY
LDA #$00
PHA
PLB
REP #$30
PHX
LDA $9A
STA $0C
LDA $98
STA $0E
LDA #$0000
SEP #$20
LDA $5B
STA $09
LDA $1933
BEQ SkipShift
LSR $09
SkipShift:
LDY $0E
LDA $09
AND #$01
BEQ LeaveXY
LDA $9B
STA $00
LDA $99
STA $9B
LDA $00
STA $99
LDY $0C
LeaveXY:
CPY #$0200
BCS PrematureEnd
LDA $1933
ASL A
TAX
LDA $BEA8,x
STA $65
LDA $BEA9,x
STA $66
STZ $67
LDA $1925
ASL A
TAY
LDA [$65],y
STA $04
INY
LDA [$65],y
STA $05
STZ $06
LDA $9B
STA $07
ASL A
CLC
ADC $07
TAY
LDA [$04],y
STA $6B
STA $6E
INY
LDA [$04],y
STA $6C
STA $6F
LDA #$7E
STA $6D
INC A
STA $70
LDA $09
AND #$01
BEQ SwitchXY
LDA $99
LSR A
LDA $9B
AND #$01
BRA CurrentXY
SwitchXY:
LDA $9B
LSR A
LDA $99
CurrentXY:
ROL A
ASL A
ASL A
ORA #$20
STA $04
CPX #$0000
BEQ NoAdd
CLC
ADC #$10
STA $04
NoAdd:
LDA $98
AND #$F0
CLC
ASL A
ROL A
STA $05
ROL A
AND #$03
ORA $04
STA $06
LDA $9A
AND #$F0
REP 3 : LSR A
STA $04
LDA $05
AND #$C0
ORA $04
STA $07
REP #$20
LDA $09
AND #$0001
BNE LayerSwitch
LDA $1A
SEC
SBC #$0080
TAX
LDY $1C
LDA $1933
BEQ CurrentLayer
LDX $1E
LDA $20
SEC
SBC #$0080
TAY
BRA CurrentLayer
LayerSwitch:
LDX $1A
LDA $1C
SEC
SBC #$0080
TAY
LDA $1933
BEQ CurrentLayer
LDA $1E
SEC
SBC #$0080
TAX
LDY $20
CurrentLayer:
STX $08
STY $0A
LDA $98
AND #$01F0
STA $04
LDA $9A
REP 4 : LSR A
AND #$000F
ORA $04
TAY
PLA
SEP #$20
STA [$6B],y
XBA
STA [$6E],y
XBA
REP #$20
ASL A
TAY
PHK
PER $0006
PEA $804C
JML $00C0FB
PLY
PLB
PLP
RTS


Dieser Block crasht bei der "2. Bedingung", wenn man genügend Münzen hat und es sich in ein anderes Map16Page Block verwandeln soll...nur kann ich das Problem nicht erkennen, Bitte helfen!
Wie kritisch man doch gegenüber dem System wird, wenn man älter wird...
geschrieben am 04.12.2010 12:42:14
( Link )
Hier schon mal eines, was mir aufgefallen ist:
Code
   LDA #!Cost      ; Load cost..
DEC A ; ...
CMP !RAM_Currency ; And compare it with Mario's coins..
BPL NotEnough ; If he doesn't have enough, go to NotEnough.


Wie hast du dir das denn gedacht? Ich glaube kaum, dass du BPL meintest. BPL bedeutet "Springen, wenn kleiner als $80". Was du wahrscheinlich machen wolltest war "Wenn Münzen größer/gleich Kosten, dann springe". Das lässt sich am besten mit BCS ausdrücken (Branch, if Carry Set) bzw. mit BCC lässt sich das Gegenteil ausdrücken (Branch, if Carry Clear; "ist kleiner als"). Das sähe dann folgendermaßen aus:

Code
LDA !RAM_Currency   ; Münzen
CMP #!Cost ; Mit Kosten vergleichern
BCC NotEnough ; Münzen kleiner als Kosten? Dann springe.


oder mit BCS entsprechend:

Code
LDA !RAM_Currency   ; Münzen
CMP #!Cost ; Mit Kosten vergleichern
BCS Enough ; Münzen größer/gleich Kosten? Dann springe.


Wieso es crasht, habe ich aber noch nicht gesehen. Ich gucke mal weiter.


Ach ja, wozu soll dieses "PrematureEnd" am Ende gut sein? Das verstehe ich nicht und es wird in deinem Block wohl auch nirgends verwendet.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 04.12.2010 13:44:09
( Link )
Also, ich habe dieses "Prematureend" deswegen, weil ich dieses Mappage15 Block Wechsel haben wollte, aber anscheinend funktioniert der Code nicht

PS: Danke für den "BPL" Hinweis, jetzt werden die Münzen abgezogen, bevor es sofort danach crasht X'D
Wie kritisch man doch gegenüber dem System wird, wenn man älter wird...
geschrieben am 04.12.2010 13:57:16
( Link )
Hier schon mal zwei mögliche Gründe, aus denen es crashen könnte:
Code

REP #$20
[...]
JML $00C0FB


-Du gehst vor Verlassen des Block-Codes in den 16-Bit-Modus, obwohl du im 8-Bit-Modus sein solltest.
-Du verlässt mit einem JML den Block-Code? Bist du des Wahnsinns? Das Spiel wird den darunterstehenden Code niemals ausführen.

Joa, das sind schonmal zwei Dinge, die ich auf Anhieb gesehen habe. Keine Ahnung, ob eines davon der Grund ist.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.