custum Block problem

geschrieben am 29.05.2013 19:24:54
( Link )
nabend leute... ich habe mal folgendes Problem:

ich habe mir von SMWC folgende Blöcke runtergeladen:

- Custum Coin Block (man kann die Anzahl der Münzen erhöhen, die man durchs einsammeln der Münze bekommt)
- Eis Block Pack (enthält u.a. den Icecoinblock, der nachdem er von marios Feuerball getroffen wird zu einer Münze wird)

ich habe jetzt folgendes Problem:

ich habe mir 2 Münzen erstellt, die jeweils den Wert von 2 bzw. 5 Münzen haben.

jetzt will ich den Icecoinblock so umbasteln, dass anstatt einer normalen "1 wertigen münze" eine von meinen selbst erstellten Münze erscheint.

das Problem ist, ich weiss nicht, wo ich den Code des iceblocks verändern muss, dass nicht die normale münze, sondern eine von meinen erscheint.

ich habe hier mal den Originalen Code für Euch:

FIAR: STZ $170B,x ; \ Erase fireball
JSR SUB_SMOKE ; / Show smoke effect

LDA #$06 ;\
STA $9C ; | Generate coin block
JSL $00BEB0 ;/

Return: RTL

SUB_SMOKE: 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 to smoke
STA $17C0,y ; /

LDA $1715,x ; \ set y pos of smoke
STA $17C4,y ; /

LDA $171F,x ; \ set x pos of smoke
STA $17C8,y ; /

LDA #$18 ; \ set smoke duration
STA $17CC,y ; /
RTS
geschrieben am 29.05.2013 21:11:11
( Link )
Diese 2 Zeilen sind wichtig:
Code
LDA #$06	 ;\
STA $9C ; | Generate coin block

Dazu hier:
http://www.smwiki.net/wiki/RAM_Address/$7E:009C

Du wirst wahrscheinlich einen von denen mit deiner Münze überschreiben müssen. Also z.B. das Maulwurfsloch mit deiner Münze in der Map16 überschreiben und dann dass #$06 in #$08 ändern.
geschrieben am 29.05.2013 22:05:36
( Link )
also gibt es wohl keine andere möglichkeit für mein Vorhaben ohne irgendwas zu ersetzen?
geschrieben am 29.05.2013 22:30:59
zuletzt bearbeitet von MarioFanGamer am 31.05.2013 12:09:11.
( Link )
Zitat von Marcus_1987:
also gibt es wohl keine andere möglichkeit für mein Vorhaben ohne irgendwas zu ersetzen?

Doch! Nämlich:
Code
FIAR: STZ $170B,x ; \ Erase fireball
JSR SUB_SMOKE ; / Show smoke effect

LDA #$06 ;\
STA $9C ; | Generate coin block
JSL $00BEB0 ;/

Return: RTL

SUB_SMOKE: 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 to smoke
STA $17C0,y ; /

LDA $1715,x ; \ set y pos of smoke
STA $17C4,y ; /

LDA $171F,x ; \ set x pos of smoke
STA $17C8,y ; /

LDA #$18 ; \ set smoke duration
STA $17CC,y ; /
RTS

Ersetzt durch:
Code

!Map16Tile = $xxxx

FIAR: STZ $170B,x ; \ Erase fireball
JSR SUB_SMOKE ; / Show smoke effect

PHX ; \
REP #$10 ; |
LDX #!Map16Tile ; |
JSR ChangeMap16 ; |
SEP #$10 ; |
PLX ; /

Return: RTL

SUB_SMOKE: 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 to smoke
STA $17C0,y ; /

LDA $1715,x ; \ set y pos of smoke
STA $17C4,y ; /

LDA $171F,x ; \ set x pos of smoke
STA $17C8,y ; /

LDA #$18 ; \ set smoke duration
STA $17CC,y ; /
RTS

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

Einfach, wenn's auch kompliziert geht .

Sieh unten.
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 30.05.2013 18:57:50
( Link )
was muss ich denn bei !Map16Tile eingeben, wennich fragen darf?
geschrieben am 30.05.2013 20:45:23
( Link )
Die Nummer des Teils. Wenn du's in Teil 345 verwandelt haben willst, schreibst du da $0345 hin.
geschrieben am 30.05.2013 20:59:04
( Link )
ah ja... ok... ich wusste nur nicht, ob man da nur $0345 oder $345 hinschreibt
geschrieben am 30.05.2013 21:08:56
( Link )
Im Prinzip ist das egal, aber es schadet nichts, immer eine gerade Zahl von Stellen zu verwenden. Zwei, vier oder sechs, je nachdem.
geschrieben am 30.05.2013 22:22:12
( Link )
also irgendwie funktioniert der code von mariofangamer nicht.

wenn marios feuerball den block trifft passiert garnichts.

sobalb mario sich jedoch neben oder auf dem block befindet, löst er sich auf und es kommt die münze zum vorschein bzw. mario sammelt diese bei berührung des blocks ein.
geschrieben am 31.05.2013 6:29:24
( Link )
oder Smiley
Mir ist jetzt eingefallen, dass es Ersanio weitere erstellt hat (und dabei waren), nämlich:
Zitat von Esanios Readme:
This package includes:
- 1 Regular Iceblock
(iceblock.asm)

- 2 Ice coin block
(icecoinblock.asm)

- 3 Ice multiple coins block
(icemultiplecoinquestionblock.asm)

- 4 Ice Note Block
(icenoteblock.asm)

- 5 Ice On/Off block
(iceonoffblock.asm)

- 6 Ice coin block "from range"
(icecoinonrange.asm)

- 7 Ice any map16-tile block (currently set to Muncher)
(ice_anytile_block.asm)

- 8 32x32 Ice block which splits into four 16x16 iceblocks
(ice_divide_topright.asm, ice_divide_topleft.asm, ice_divide_bottomright.asm,
ice_divide_bottomleft.asm)

- 9 32x32 Ice block which melts down completely (no splitting)
(ice_32x32_bottomleft.asm, ice_32x32_topright.asm, ice_32x32_topleft.asm,
ice_32x32_bottomright.asm)

- 10 Frozen P-switch ice block (spawn any sprite)
(frozen_pswitch.asm)

- 11 Frozen Yoshi Coin
(ice_yoshicoin_top.asm, ice_yoshicoin_bottom.asm)

- 12 Ice block which turns into the next map16 tile when hit.
(ice_map16++.asm)

- 13 Ice block which turns into the previous map16 tile when hit.
(ice_map16--.asm)

Du solltest Ice_any_tile.asm benutzen, weil man damit irgend einen Block aus der Map16 benutzen kann. (In dem Fall, die custom Coins). Man soll also immer genauer duchsuchen .
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:) -->