Allgemeine Hex- und ASM-Fragen

geschrieben am 15.04.2011 12:56:57
( Link )
Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite code JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
print "MAIN ",pc
PHB
PHK
PLB
JSR Main
PLB
print "INIT ",pc
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main bullet bill shooter code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Return:
RTS

Main:
LDA $17AB,x
BNE TimerOn
LDY #$01
PHX
LDX #$0B
.Loop
LDA $14C8,x
BEQ +
LDA $9E,x
CMP #$53
BNE +
LDY #$00
+
DEX
BPL .Loop
PLX

TYA
BEQ Return

LDA #$40
STA $17AB,x
BRA Return

TimerOn:
CMP #$01
BNE Return
STZ $17AB,x

;spawn it
LDA $178B,x
CMP $1C
LDA $1793,x
SBC $1D
BNE Return
LDA $179B,x
CMP $1A
LDA $17A3,x
SBC $1B
BNE Return
LDA $179B,x
SEC
SBC $1A
CLC
ADC #$10
CMP #$10
BCC Return
JSL $02A9DE
BMI Return

Generate:
LDA #$09
STA $1DFC
LDA #$53
STA $009E,y
LDA $179B,x
STA $00E4,y
LDA $17A3,x
STA $14E0,y
LDA $178B,x
STA $00D8,y
LDA $1793,x
STA $14D4,y
PHX
TYX
JSL $07F7D2
PLX
LDA #$09
STA $14C8,y

LDA $00
PHA

LDA $1783,x
AND #$40
BEQ LEFT

LDA $178B,x
AND #$10
BNE SHOOT_UP2
LDA #$03
BRA STORE
SHOOT_UP2:
LDA #$03
BRA STORE

LEFT:
LDA $178B,x
AND #$10
BNE SHOOT_UP
LDA #$01
BRA STORE
SHOOT_UP:
LDA #$01
STORE:
STA $00C2,y
STA $00
JSR DrawSmoke
PLA
STA $00

RETURN:
RTS

;==================================================================
;Draw Smoke
;==================================================================

DrawSmoke: LDY #$03 ; \ find a free slot to display effect
FINDFREE: LDA $17C0,y ; |
BEQ FOUNDONE ; |
DEY ; |
BPL FINDFREE ; |
RTS ; / return if no slots open

FOUNDONE: LDA #$01 ; \ set effect graphic to smoke graphic
STA $17C0,y ; /
LDA #$1B ; \ set time to show smoke
STA $17CC,y ; /
LDA $178B,x ; \ smoke y position = generator y position
STA $17C4,y ; /
LDA $179B,x ; \ load generator x position and store it for later
STA $17C8,y ; /
RTS


Kann mir jemand sagen, was an diesem Code falsch ist D: Unser Freund Spritetool sagt, dass es nicht korrekt assembelt ist, aber ich konnte keinen Fehler finden D:
geschrieben am 15.04.2011 13:21:03
( Link )
Ja, was genau sagt er denn? Poste mal temp.log.
geschrieben am 15.04.2011 14:21:47
( Link )
Das hier sag temp.log :


65816 Tricks Assembler Version 1.11 (C)opyright 1994 1000 Miles [Tricks]
Internet: norman_yen@idream.tfbbs.wimsey.com, IRC: minus

Memory available: 2147483647
Starting address defined as $90BE3D

Pass 1
Error in 5.1/5: Not a valid operator
Error in 11.1/11: Not a valid operator
Error in 27.1/24: Invalid symbol name
Error in 29.1/26: Branch out of range, forward reference?
Error in 32.1/29: Branch out of range, forward reference?
Error in 36.1/33: Branch out of range, forward reference?

Pass 2
Error in 5.1/5: Not a valid operator
Error in 11.1/11: Not a valid operator
Error in 27.1/24: Invalid symbol name
Error in 36.1/33: Branch out of range

Pass 3
Error in 5.1/5: Not a valid operator
Error in 11.1/11: Not a valid operator
Error in 27.1/24: Invalid symbol name
Error in 36.1/33: Branch out of range

Source code assembled.

Although the source code was assembled, the program may not run
properly due to errors detected during the assembling process.

[$90BE3D-$90BF1F]
Lines=143
Statements=131
Symbols=11
Errors=4
geschrieben am 15.04.2011 14:39:07
( Link )
Zitat von MetalJo:
Tricks Assembler

Da haben wir das Problem. Die CFG-Datei braucht xkas als Assembler. (CFG-Editor --> "Use xkas for assembly")
geschrieben am 15.04.2011 14:54:49
( Link )
ahh danke :3
geschrieben am 20.04.2011 14:45:40
( Link )
Ich möchte das wenn man gegen diesen Block springt er nachdem er zerstört wurde die gleiche Animation anzeigt wie wenn man einen Gumba (Koopa,etc.) mit Spinjump besiegt...hier der Code:
Code
JMP MarioBelow : JMP Return : JMP Return : JMP Return : JMP Return : JMP Return : JMP Return

MarioBelow:
LDA $0DC4
CMP #$04
BEQ Return
INC
STA $0DC4
LDA #$08
STA $1DF9
LDA #$02
STA $9C
JSL $00BEB0
Return:
RTL
geschrieben am 23.04.2011 15:24:40
( Link )
Kann mir jemand bitte sagen, wie ich mache, dass diese Attacken in zufälliger Reihenfolge ausgeführt werden. (als Attacken meine ich das JSR Tele und das JSR SUB_FIRE_THROW )

Code
TO_ATTACK           LDA FIRE_TIMER,x        ; \ if time until spit >= $10
CMP #TIME_TO_SHOW ; | just go to normal walking code
BCS STATE_RUN ; /
INC SPRITE_IMG,x
INC SPRITE_IMG,x

LDA FIRE_TIMER,x ; throw fire if it's time
BNE NO_RESET
LDY $C2,x
LDA TIME_TILL_THROW,y
STA FIRE_TIMER,x
NO_RESET CMP #$01
BNE STATE_RUN
JSR SUB_FIRE_THROW
JSR Tele
LDA #$18
STA $1887
geschrieben am 25.04.2011 21:36:49
( Link )
Ich möchte dieses Paralax Scrolling benutzen:
Code
INIT:
LDX #$09 ;the amount of bytes in the scroll table. Should be a multiple of 3
LOOP:
LDA ScrollTable,x
STA $7FA000,x
DEX
BPL LOOP
RTS

ScrollTable:
db $68,$00,$00
db $24,$00,$00
db $17,$00,$00
db $20,$00,$00
db $80,$00,$00
db $00 ;end byte, don't remove it

MAIN1:
REP #$20
LDA #$0F02
STA $4330
SEP #$20
LDA #$00
STA $4332
LDA #$A0
STA $4333
LDA #$7F
STA $4334

REP #$20
LDA $0661
STA $7FA000+$4
LDA $0663
STA $7FA000+$7
LDA $0665
STA $7FA000+$A
LDA $0667
STA $7FA000+$D

INC $0661
INC $0663
INC $0663
INC $0665
INC $0665
INC $0665
INC $0667
INC $0667
INC $0667
INC $0667
SEP #$20

LDA #$08
TSB $0D9F
RTS

Aber wenn ich das einfüge ist das einzige was passiert das hier...
geschrieben am 26.04.2011 11:20:12
( Link )
$0660 und aufwärts werden von LM benutzt, da musste du andere nehmen.

Und wenn mich nicht alles täuscht, dann brauchst du auch noch Main-Code, nicht nur Init.
geschrieben am 26.04.2011 12:36:15
( Link )
Und durch was soll ich das ersetzen ? Und wo bekomm ich nen Main Code her ?
geschrieben am 26.04.2011 13:11:17
( Link )
Hm, wo hast du denn den Code her, den du jetzt hast? War da nur der bei?

Nach unbenutzen RAM kannst du auf SMWC suchen. Es sollten mindestens 8 Bytes in Folge sein, bei denen "Empty" steht.
geschrieben am 26.04.2011 13:46:06
( Link )
Den Code hab ich aus der Readme die bei der ExGFx für den Hintergrund dabei war. Hier steht alles drin was in der Readme war...
Code
-----------------------------------------------------------------------
Cave Story - Outer Wall
By Koops
----------------------------------------------------------------------
ExGFX Files:
ExGFX81 - BG1
ExGFX82 - BG2

BG uses palette 4.
----------------------------------------------------------------------
HDMA Effect
If you use it, give credit to me and Ladida!
----------------------------------------------------------------------
INIT:
LDX #$10 ;the amount of bytes in the scroll table. Should be a multiple of 3
LOOP:
LDA ScrollTable,x
STA $7FA000,x
DEX
BPL LOOP
RTS

ScrollTable:
db $68,$00,$00
db $24,$00,$00
db $17,$00,$00
db $20,$00,$00
db $80,$00,$00
db $00 ;end byte, don't remove it

MAIN:
REP #$20
LDA #$0F02
STA $4330
SEP #$20
LDA #$00
STA $4332
LDA #$A0
STA $4333
LDA #$7F
STA $4334

REP #$20
LDA $0661
STA $7FA000+$4
LDA $0663
STA $7FA000+$7
LDA $0665
STA $7FA000+$A
LDA $0667
STA $7FA000+$D

INC $0661
INC $0663
INC $0663
INC $0665
INC $0665
INC $0665
INC $0667
INC $0667
INC $0667
INC $0667
SEP #$20

LDA #$08
TSB $0D9F
RTS
geschrieben am 26.04.2011 14:50:04
( Link )
Ach so, da ist der MAIN-Teil gleich mit dabei. Kopiere (kopieren, nicht verschieben) mal alles, was unter dem MAIN:-Label steht, in levelcode.asm.
geschrieben am 26.04.2011 14:55:44
( Link )
Und den Rest lösche ich raus oder ? Also den anderen Teil von dem Code. Und muss ich dann noch die Empty Adresses einfügen ?
Edit: YESCH ! Das Parallax Scrolling funktioniert jetzt aber die Statusbar dreht dafür noch mehr durch...
Edit2: Okay...es funktioniert aber es macht Cutoff...
geschrieben am 26.04.2011 16:40:29
( Link )
Wo denn? Screenshot?
geschrieben am 26.04.2011 16:46:09
( Link )
Hier...Aber solange ich mich nicht vm Startpunkt wegbewege funktioniert es tadellos.
geschrieben am 28.04.2011 18:37:27
( Link )
Ich kenne mich mit Timern wirklich nicht aus, deswegen frag ich euch. Wie kann ich machen, dass dieser Sprite erst nach 3 Sekunden wieder erscheint ?
Code
;===================================
; Init
;===================================

dcb "INIT"
LDA #$09
STA $14C8,x
RTL

dcb "MAIN"
PHB
PHK
PLB
LDA $1510,x
BNE TheEnd
JSR SpriteCode
TheEnd:
PLB
RTL

;===================================
; Main Code
;===================================

SpriteCode:
JSR Graphics
JSR WavyMotion
LDA #Gravity
STA $AA,x
BNE Return

JSL $01A7DC
BCC Return

STZ 14C8,x
BEQ Return

LDY #$0B ;\
Loop: ; |
LDA $14C8,y ; |
CMP #$0B ; |
BEQ Return ; |
DEY ; |
BPL Loop ;/
LDA #$02
STA $1DF9
LDA #$00
STA $1510,x
JSL $07FC3B ; l Zeichne Sterne
LDA #$08 ; l Spiel SFX ab
STA $1DFC
LDA #$00
STA $140D
LDA #$80
STA $7D
RTS

Return:
RTS

;===================================
; GFX Routine
;===================================

Graphics:
JSR GET_DRAW_INFO
LDA #$F0 ;\Move glitched tile
STA $0309,y ;/off screen.
LDA $00 ;\
STA $0300,y ; |This will prepare the X and Y positions so that we
LDA $01 ; |can draw the actual sprite.
STA $0301,y ;/
LDA #$A4 ;\This tells the game what tile we want to draw.
STA $0302,y ;/
LDA #%01001111 ;No Y-flip, X-flip, Lowest priority, Palette F, Page 4
ORA $64 ;\Store this stuff ^
STA $0303,y ;/
;INY ;\
;INY ; |Actually, this isn't necessary...
;INY ; |This is just necessary if we are drawing more than 1 tile (cause this just get the next tile in the OAM...)
;INY ;/
LDY #$02 ;Again, because we want the sprite to be 16 x 16.
LDA #$00 ;Something else for drawing the sprite.
JSL $01B7B3 ;This calls the routine that actually draws our sprite.
RTS


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; GET_DRAW_INFO
; This is a helper for the graphics routine. It sets off screen flags, and sets up
; variables. It will return with the following:
;
; Y = index to sprite OAM ($300)
; $00 = sprite x position relative to screen boarder
; $01 = sprite y position relative to screen boarder
;
; It is adapted from the subroutine at $03B760
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SPR_T1: dcb $0C,$1C
SPR_T2: dcb $01,$02

GET_DRAW_INFO: STZ $186C,x ; reset sprite offscreen flag, vertical
STZ $15A0,x ; reset sprite offscreen flag, horizontal
LDA $E4,x ; \
CMP $1A ; | set horizontal offscreen if necessary
LDA $14E0,x ; |
SBC $1B ; |
BEQ ON_SCREEN_X ; |
INC $15A0,x ; /

ON_SCREEN_X: LDA $14E0,x ; \
XBA ; |
LDA $E4,x ; |
REP #$20 ; |
SEC ; |
SBC $1A ; | mark sprite invalid if far enough off screen
CLC ; |
ADC.W #$0040 ; |
CMP.W #$0180 ; |
SEP #$20 ; |
ROL A ; |
AND #$01 ; |
STA $15C4,x ; /
BNE INVALID ;

LDY #$00 ; \ set up loop:
LDA $1662,x ; |
AND #$20 ; | if not smushed (1662 & 0x20), go through loop twice
BEQ ON_SCREEN_LOOP ; | else, go through loop once
INY ; /
ON_SCREEN_LOOP: LDA $D8,x ; \
CLC ; | set vertical offscreen if necessary
ADC SPR_T1,y ; |
PHP ; |
CMP $1C ; | (vert screen boundry)
ROL $00 ; |
PLP ; |
LDA $14D4,x ; |
ADC #$00 ; |
LSR $00 ; |
SBC $1D ; |
BEQ ON_SCREEN_Y ; |
LDA $186C,x ; | (vert offscreen)
ORA SPR_T2,y ; |
STA $186C,x ; |
ON_SCREEN_Y: DEY ; |
BPL ON_SCREEN_LOOP ; /

LDY $15EA,x ; get offset to sprite OAM
LDA $E4,x ; \
SEC ; |
SBC $1A ; | $00 = sprite x position relative to screen boarder
STA $00 ; /
LDA $D8,x ; \
SEC ; |
SBC $1C ; | $01 = sprite y position relative to screen boarder
STA $01 ; /
RTS ; return

INVALID: PLA ; \ return from *main gfx routine* subroutine...
PLA ; | ...(not just this subroutine)
RTS ; /

;==================================================================
;Wavy Thing
;==================================================================

WavyMotion:
PHY ; Push Y in case something messes it up.
LDA $14 ; Get the sprite frame counter ..
LSR A ; 7F
LSR A ; 3F ; Tip: LSR #3.
LSR A ; 1F
AND #$07 ; Loop through these bytes during H-Blank. (WHAT?)
TAY ; Into Y.
LDA WavySpd,y ; Load Y speeds ..
STA $AA,x
JSL $01801A ; Update, with no gravity.
PLY ; Pull Y.
RTS

WavySpd: db $00,$F8,$F2,$F8,$00,$08,$0E,$08

;===================================
; EXPLOSION
;===================================
Explode:
LDA #$0D ;\Become a Bob-Omb
STA $9E,x ;/
LDA #$08 ;\Run routines normally
STA $14C8,x ;/
JSL $07F7D2 ;Reset sprite tables
LDA #$01 ;\Do something with a sprite table
STA $1534,x ;/
LDA #$40 ;\Do something with a sprite table
STA $1540,x ;/
LDA #$09 ;\Play SFX
STA $1DFC ;/
LDA #$1B ;\Set some sprite properties
STA $167A,x ;/
RTS
geschrieben am 12.05.2011 17:04:37
( Link )
Spoiler anzeigen


So Leute kurz mal Youtube Videos angeschaut, und dann sah ich das Zomg, das war total episch! Hat jemand eine Idee, wie man

-Mario solche Bewegungen machen lässt?

und

-Wie funktioniert das mit den Eingängen? ExAnimation auf Basis von Custom Blöcken? Whut?

Danke für Hilfe
Wie kritisch man doch gegenüber dem System wird, wenn man älter wird...
geschrieben am 12.05.2011 17:24:42
( Link )
Die Bewegungen sind die gleichen wie beim Castle Intro wenn ich mich nicht irre. Ich glaube dafür gibt es einen Custom Block.
geschrieben am 12.05.2011 17:46:59
( Link )
Zitat von Underway:
Die Bewegungen sind die gleichen wie beim Castle Intro wenn ich mich nicht irre. Ich glaube dafür gibt es einen Custom Block.


Stimmt ! Ich schau mir das mal an! Ist mir übrigens garnicht aufgefallen >_>
Wie kritisch man doch gegenüber dem System wird, wenn man älter wird...