|
| Autor | Mensaje |
---|
New Hacker Eerie
Posts : 397
| Tema: Rutinas de ASM Sáb Jul 16, 2011 6:51 pm | |
| Bueno, aquí pueden poner algunas rutinas de ASM, como la rutina para que un Block se destruya, etc. e iré actualizando este post. Esto es algo parecido a lo de SMWCentral. Aquí les dejo una rutina que me sirvio, y es la que Genera Humo en un lugar, o sea, que si la usas en un Block, el humo se va agenerar en el mismo lugar del Block. Como notarán, no la hice yo, solo edite las mayúsculas y lo ordene un poco ya que se veía feo como estaba XD. - "Rutina de humo para sprites":
; Smoke Routine
PHP SEP #$20 LDY #$03 ;\ Find a free slot to display effect FINDFREE: LDA $17C0,y ;| BEQ FOUNDONE ;| DEY ;| BPL FINDFREE ;| PLP RTS ;/ Return if no slots open FOUNDONE: LDA #$01 ;\ Set effect graphic to smoke graphic STA $17C0,y ;/ LDA $98 ;\ Smoke Y position = Generator Y position AND #$F0 STA $17C4,y ;/ LDA #$18 ;\ Set time to show smoke STA $17CC,y ;/ LDA $9A ;\ Load generator X position and store it for later AND #$F0 STA $17C8,y ;/ LDX $15E9 PLP RTS ; And return
Este se puede usar en un Sprite al igual que en un generador, pero si lo usan en un Block, cambienle el último RTS por un RTL (o al revés). Si no les funciona, cambienle los RTS/L, ya que no sé como realmente funcionan esos "comandos", por decirlo así. Si lo usan, traten de no abusar mucho en el juego, ya que a mi ya me crasheo al hacer aparecer muchos tiles de humo seguidos. Si no entienden les explicaré: Hice un block que se desaparece al tocarlo y genera humo, en Lunar Magic los puse muy juntos y cuando toque cada uno (lo hice muy rápido y seguido) el juego crasheo. ^ Aca hay otra aportada por Michael: - Citación :
- Yo pondre este para que el block (si, solo para blocks) cambie al siguiente tile del map16.
- "Cambiar al siguiente Map16":
JSL ChangeMap16 RTL ChangeMap16: PHP REP #$30 ; Index (16 bit) Accum (16 bit) LDA $0003 CLC ADC #$0001 JSL ADDR_00814A PLP RTL ADDR_008000: PLX PLB PLP RTL ADDR_008004: PHP SEP #$20 ; Accum (8 bit) PHB LDA $7EBD05 BNE ADDR_008012 LDA #$00 BRA ADDR_008014
ADDR_008012: LDA #$30 ADDR_008014: PHA PLB REP #$30 ; Index (16 bit) Accum (16 bit) PHX LDA $9A STA $0C LDA $98 STA $0E LDA #$0000 SEP #$20 ; Accum (8 bit) LDA $5B STA $09 LDA $1933 BEQ ADDR_008031 LSR $09 ADDR_008031: LDY $0E LDA $09 AND #$01 BEQ ADDR_008047 LDA $9B STA $00 LDA $99 STA $9B LDA $00 STA $99 LDY $0C ADDR_008047: CPY #$0200 BCS ADDR_008000 LDA $1933 ASL TAX LDA $BEA8,X STA $65 LDA $BEA9,X STA $66 STZ $67 LDA $1925 ASL TAY LDA ($65),Y STA $04 INY LDA ($65),Y STA $05 STZ $06 LDA $9B STA $07 ASL 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 ADDR_008099 LDA $99 LSR LDA $9B AND #$01 BRA ADDR_00809E
ADDR_008099: LDA $9B LSR LDA $99 ADDR_00809E: ROL ASL ASL ORA #$20 STA $04 CPX #$0000 BEQ ADDR_0080AF CLC ADC #$10 STA $04 ADDR_0080AF: LDA $98 AND #$F0 CLC ASL ROL STA $05 ROL AND #$03 ORA $04 STA $06 LDA $9A AND #$F0 LSR LSR LSR STA $04 LDA $05 AND #$C0 ORA $04 STA $07 REP #$20 ; Accum (16 bit) LDA $09 AND #$0001 BNE ADDR_0080F2 LDA $1A SEC SBC #$0080 TAX LDY $1C LDA $1933 BEQ ADDR_008109 LDX $1E LDA $20 SEC SBC #$0080 TAY BRA ADDR_008109
ADDR_0080F2: LDX $1A LDA $1C SEC SBC #$0080 TAY LDA $1933 BEQ ADDR_008109 LDA $1E SEC SBC #$0080 TAX LDY $20 ADDR_008109: STX $08 STY $0A LDA $98 AND #$01F0 STA $04 LDA $9A LSR LSR LSR LSR AND #$000F ORA $04 TAY PLA SEP #$20 ; Accum (8 bit) STA [$6B],Y XBA STA [$6E],Y XBA REP #$20 ; Accum (16 bit) ASL TAY PHK PER $0015 LDA $7EBD05 BNE ADDR_008140 PEA $804C JMP $00C0FB
BRA ADDR_008147
ADDR_008140: PEA $805F JMP $30C0FF
ADDR_008147: PLB PLP RTL ADDR_00814A: PHP REP #$30 ; Index (16 bit) Accum (16 bit) PHY PHX TAX LDA $03 PHA JSL ADDR_008004 PLA STA $03 PLX PLY PLP RTL
Rutina para Blocks, para que se rompa. - "Romper bloque":
LDA #$02 ;\ Replace block STA $9C ; | with block # 1E6 JSL $00BEB0 ;/ Erase self PHB ; LDA #$02 ;\ Push PHA ;/ A PLB ; LDA #$00 ; Set to 0 for normal explosion, 1 for rainbow (throw blocks) (Pongan #$00 para una explosión normal, y #$01 para la explosión de "arcoiris" como los Throw Blocks) JSR $028663 ; Breaking effect PLB
Return: RTL ; And return
Otro aporte de Mich: - Michael escribió:
Estrellitas que salen cuando tomas una moneda - "Estrellitas":
LoopStart: LDA $17C0,Y BEQ CreateGlitter DEY BPL LoopStart
CreateGlitter: LDA #$05 STA $17C0,Y LDA $9A AND #$F0 STA $17C8,Y LDA $98 AND #$F0 STA $17C4,Y LDA $1933 BEQ ADDR_00FD97 LDA $9A SEC SBC $26 AND #$F0 STA $17C8,Y LDA $98 SEC SBC $28 AND #$F0 STA $17C4,Y
ADDR_00FD97: LDA #$10 STA $17CC,Y
- "Rutina de humo para blocks":
LDA $7F ORA $81 BNE .End
LDY #$03 .FindFree LDA $17C0,y BEQ .FoundOne DEY BPL .FindFree .End RTL
.FoundOne LDA #$01 STA $17C0,y LDA $98 AND #$F0 STA $17C4,y LDA $9A AND #$F0 STA $17C8,y LDA $1933 BEQ .End2 LDA $9A SEC SBC $26 AND #$F0 STA $17C8,y LDA $98 SEC SBC $28 AND #$F0 STA $17C4,y .End2 LDA #$1B STA $17CC,y RTL
Nota: Si usan esta rutina, preserven Y antes del código y luego lo "empujan" (push) con PHY después de que acabe la rutina.- "Cambiar a un Map16 específico":
;============ ;Change Map16 ;============
!Map16Number = $XX ; (Nota de... mía: cambia las XX por el número de tile que quieras)
;Usage: LDX #!Map16Number JSR ChangeMap16 RTL
;The code itself.
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
Nota: Si el juego crashea, cambien los RTS por RTL. - Generar sprite como el de los ? block:
PHX PHY LDA #$0F TRB $9A TRB $98 LDX #$02; Cambiar esto para obtener diferente sprite, ver valores abajo LOOP100: LDA $1699,y BEQ LBL100 DEY BPL LOOP100 LDA $1699,y CMP #$07 BNE LBL100 PHA LDA $9B PHA LDA $98 PHA LDA $99 PHA LDA $16A5,y LDA $16AD,y STA $9B LDA $16A1,y CLC ADC #$0C AND #$F0 STA $98 LDA $16A9,y ADC #$00 STA $99 LDA $16c1,y JSL $00BEB0 STA $99 STA $98 PLA STA $9B PLA STA $9A LBL100: LDA $028789,x STA $1901,y TXA INC A STA $1699,y LDA #$01 STA $169D,y LDA $9A STA $16A5,y LDA $9B STA $16AD,y LDA $98 STA $16A1,y LDA $99 STA $16A9,y LDA #$08 LDA #$0D LDA $1933 LSR A ROR STA $08 LDX #$00 STA $16B1,y LDA $02873E,x STA $16B5,y TXA ORA $08 STA $16C9,y PLY PLX RTL
Estos son los valores que se cambian para tener diferente resultado: - Código:
-
00 = Turn Block 01 = Note Block 02 = ? Block 03 = Igual al 02 04 = Translucent Block 05 = ON/OFF Switch
Última edición por New Hacker el Mar Nov 15, 2011 9:25 pm, editado 12 veces |
| | | Michael Administrador
Posts : 3580
| Tema: Map16++ Sáb Jul 16, 2011 6:55 pm | |
| Yo pondre este para que el block (si, solo para blocks) cambie al siguiente tile del map16. - Map16++:
JSL ChangeMap16 RTL ChangeMap16: PHP REP #$30 ; Index (16 bit) Accum (16 bit) LDA $0003 CLC ADC #$0001 JSL ADDR_00814A PLP RTL ADDR_008000: PLX PLB PLP RTL ADDR_008004: PHP SEP #$20 ; Accum (8 bit) PHB LDA $7EBD05 BNE ADDR_008012 LDA #$00 BRA ADDR_008014
ADDR_008012: LDA #$30 ADDR_008014: PHA PLB REP #$30 ; Index (16 bit) Accum (16 bit) PHX LDA $9A STA $0C LDA $98 STA $0E LDA #$0000 SEP #$20 ; Accum (8 bit) LDA $5B STA $09 LDA $1933 BEQ ADDR_008031 LSR $09 ADDR_008031: LDY $0E LDA $09 AND #$01 BEQ ADDR_008047 LDA $9B STA $00 LDA $99 STA $9B LDA $00 STA $99 LDY $0C ADDR_008047: CPY #$0200 BCS ADDR_008000 LDA $1933 ASL TAX LDA $BEA8,X STA $65 LDA $BEA9,X STA $66 STZ $67 LDA $1925 ASL TAY LDA ($65),Y STA $04 INY LDA ($65),Y STA $05 STZ $06 LDA $9B STA $07 ASL 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 ADDR_008099 LDA $99 LSR LDA $9B AND #$01 BRA ADDR_00809E
ADDR_008099: LDA $9B LSR LDA $99 ADDR_00809E: ROL ASL ASL ORA #$20 STA $04 CPX #$0000 BEQ ADDR_0080AF CLC ADC #$10 STA $04 ADDR_0080AF: LDA $98 AND #$F0 CLC ASL ROL STA $05 ROL AND #$03 ORA $04 STA $06 LDA $9A AND #$F0 LSR LSR LSR STA $04 LDA $05 AND #$C0 ORA $04 STA $07 REP #$20 ; Accum (16 bit) LDA $09 AND #$0001 BNE ADDR_0080F2 LDA $1A SEC SBC #$0080 TAX LDY $1C LDA $1933 BEQ ADDR_008109 LDX $1E LDA $20 SEC SBC #$0080 TAY BRA ADDR_008109
ADDR_0080F2: LDX $1A LDA $1C SEC SBC #$0080 TAY LDA $1933 BEQ ADDR_008109 LDA $1E SEC SBC #$0080 TAX LDY $20 ADDR_008109: STX $08 STY $0A LDA $98 AND #$01F0 STA $04 LDA $9A LSR LSR LSR LSR AND #$000F ORA $04 TAY PLA SEP #$20 ; Accum (8 bit) STA [$6B],Y XBA STA [$6E],Y XBA REP #$20 ; Accum (16 bit) ASL TAY PHK PER $0015 LDA $7EBD05 BNE ADDR_008140 PEA $804C JMP $00C0FB
BRA ADDR_008147
ADDR_008140: PEA $805F JMP $30C0FF
ADDR_008147: PLB PLP RTL ADDR_00814A: PHP REP #$30 ; Index (16 bit) Accum (16 bit) PHY PHX TAX LDA $03 PHA JSL ADDR_008004 PLA STA $03 PLX PLY PLP RTL
Edit: convertido a spoiler para poder copiarlo facilmente.
Última edición por Michael el Sáb Jul 16, 2011 6:59 pm, editado 1 vez |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Sáb Jul 16, 2011 6:58 pm | |
| Genial, primer aporte , es un gran código para un simple cambio XD. Gracias por su colaboración. |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Dom Jul 17, 2011 8:10 pm | |
| |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Rutinas de ASM Vie Ago 05, 2011 9:53 am | |
| casi lo olvido - Estrellitas que salen cuando tomas una moneda:
LoopStart: LDA $17C0,Y BEQ CreateGlitter DEY BPL LoopStart
CreateGlitter: LDA #$05 STA $17C0,Y LDA $9A AND #$F0 STA $17C8,Y LDA $98 AND #$F0 STA $17C4,Y LDA $1933 BEQ ADDR_00FD97 LDA $9A SEC SBC $26 AND #$F0 STA $17C8,Y LDA $98 SEC SBC $28 AND #$F0 STA $17C4,Y
ADDR_00FD97: LDA #$10 STA $17CC,Y
|
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Vie Ago 05, 2011 4:15 pm | |
| Excelente, no pensé que fuera posible, se agradece el aporte Lista actualizada. |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Lun Ago 08, 2011 10:37 am | |
| Perdón por el doble post. Quería agregar una cosa más al primer post, respecto al código de brillo de Mich. Si lo usan, preserven Y antes de ese código, o si no podrían aparecen unos pequeños "errores", no son exactamente errores, lo que pasa es que ese código usa el registro de Y, e Y en custom blocks significa número de página, es por eso que algunas veces el block actúa como cemento. Preserven Y antes de ese código con PHY y después de todo ese código lo "empujan" (push) con PHY. Eso es todo, lo pondré en el primer post. |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Rutinas de ASM Sáb Sep 10, 2011 3:12 pm | |
| vine con algo bastante genial! gracias a carol por el codigo. - Generar sprite como el de los ? block:
PHX PHY LDA #$0F TRB $9A TRB $98 LDX #$02; Cambiar esto para obtener diferente sprite, ver valores abajo LOOP100: LDA $1699,y BEQ LBL100 DEY BPL LOOP100 LDA $1699,y CMP #$07 BNE LBL100 PHA LDA $9B PHA LDA $98 PHA LDA $99 PHA LDA $16A5,y LDA $16AD,y STA $9B LDA $16A1,y CLC ADC #$0C AND #$F0 STA $98 LDA $16A9,y ADC #$00 STA $99 LDA $16c1,y JSL $00BEB0 STA $99 STA $98 PLA STA $9B PLA STA $9A LBL100: LDA $028789,x STA $1901,y TXA INC A STA $1699,y LDA #$01 STA $169D,y LDA $9A STA $16A5,y LDA $9B STA $16AD,y LDA $98 STA $16A1,y LDA $99 STA $16A9,y LDA #$08 LDA #$0D LDA $1933 LSR A ROR STA $08 LDX #$00 STA $16B1,y LDA $02873E,x STA $16B5,y TXA ORA $08 STA $16C9,y PLY PLX RTL
Estos son los valores que se cambian para tener diferente resultado: - Código:
-
00 = Turn Block 01 = Note Block 02 = ? Block 03 = Igual al 02 04 = Translucent Block 05 = ON/OFF Switch Algunos valores de arriba no los he probado asi que no se si sirva bien. |
| | | Lumiel Iggy Koopa
Posts : 1519
| Tema: Re: Rutinas de ASM Sáb Sep 10, 2011 4:38 pm | |
| Qué buen tema Tengo mmuchísimas rutinas guardadas por ahí, pero la mayoría son de sprites... Además podríamos agregar algunas para HDMA y cosas parecidas (aunque de esas casi no tengo...). |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Dom Sep 11, 2011 12:15 pm | |
| Estaría bien algunas de Sprites, ya que hay veces en que practico con ellos |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Rutinas de ASM Mar Sep 27, 2011 3:25 pm | |
| tengo otro codigo, este es para que salga humo, es como el de new pero este no hace que se crashee el juego, deberia de funcionar ya que imamelia lo puso en un parche de el asi que debe servir. - Humo del mal:
LDA $7F ORA $81 BNE .End
LDY #$03 .FindFree LDA $17C0,y BEQ .FoundOne DEY BPL .FindFree .End RTS
.FoundOne LDA #$01 STA $17C0,y LDA $98 AND #$F0 STA $17C4,y LDA $9A AND #$F0 STA $17C8,y LDA $1933 BEQ .End2 LDA $9A SEC SBC $26 AND #$F0 STA $17C8,y LDA $98 SEC SBC $28 AND #$F0 STA $17C4,y .End2 LDA #$1B STA $17CC,y RTS
Por cierto, no actualizaste la lista , oh, si no sirve seguro es cosa de cambiar los RTSs con RTLs |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Miér Sep 28, 2011 9:25 pm | |
| Agregada, una es para sprites y la otra para blocks. Y sí, se le cambié a RTL. |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Mar Nov 15, 2011 9:13 pm | |
| A small update with a new routine! ^^ |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Rutinas de ASM Mar Nov 15, 2011 9:15 pm | |
| lolelcodigodeltemadethomas
te falto agregar la cosa para hacerlo funcionar hay que poner arriba en el .asm !Map16Number = $*numero de tila* |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Rutinas de ASM Mar Nov 15, 2011 9:22 pm | |
| Oops! Lo actualizaré! Y sí, lol, lo robé del tema de Kaizoman666 (Thomas). |
| | | lx5 Moderador Global
Posts : 2169
| Tema: Re: Rutinas de ASM Sáb Oct 13, 2012 11:57 pm | |
| Bien, tengo algunas rutinas utiles para bloques que me encontre por ahi hace rato: - Spawn Sprite:
JSR SetSpriteCoord1 LDA #$74 ;Sprite number JSR SpawnSprite
SpawnSprite: PHX PHP SEP #$30 PHA LDX #$0B SpwnSprtTryAgain: LDA $14C8,x ;Sprite Status Table BEQ SpwnSprtSet DEX CPX #$FF BEQ SpwnSprtClear BRA SpwnSprtTryAgain SpwnSprtClear: DEC $1861 BPL SpwnSprtExist LDA #$01 STA $1861 SpwnSprtExist: LDA $1861 CLC ADC #$0A TAX SpwnSprtSet: STX $185E LDA #$08 STA $14C8,x ;Sprite Status Table PLA STA $9E,x ;Sprite Type JSL $07F7D2 ; reset sprite properties INC $15A0,x ;"Sprite off screen" flag, horizontal LDA $9A ;Sprite creation: X position (low) STA $E4,x ;Sprite Xpos Low Byte LDA $9B STA $14E0,x ;Sprite Xpos High Byte LDA $98 ;Sprite creation: Y position (low) STA $D8,x ;Sprite Ypos Low Byte LDA $99 ;Sprite creation: Y position (high) STA $14D4,x ;Sprite Ypos High Byte LDA #$3E STA $1540,x ;Sprite Spin Jump Death Frame Counter LDA #$D0 STA $AA,x ;Sprite Y Speed LDA #$2C STA $144C,x LDA $190F,x ;Sprite Properties BPL SpwnSprtProp LDA #$10 STA $15AC,x SpwnSprtProp: PLP PLX RTS
SetSpriteCoord1: PHP REP #$20 LDA $98 AND #$FFF0 STA $98 LDA $9A AND #$FFF0 STA $9A PLP RTS
- Spawn Custom Sprite:
JSR SetSpriteCoord1 LDA #$01 ;Custom Sprite Number JSR SpawnSprite
SpawnSprite: PHX PHP SEP #$30 PHA LDX #$0B SpwnSprtTryAgain: LDA $14C8,x ;Sprite Status Table BEQ SpwnSprtSet DEX CPX #$FF BEQ SpwnSprtClear BRA SpwnSprtTryAgain SpwnSprtClear: DEC $1861 BPL SpwnSprtExist LDA #$01 STA $1861 SpwnSprtExist: LDA $1861 CLC ADC #$0A TAX SpwnSprtSet: STX $185E LDA #$08 STA $14C8,x ;Sprite Status Table PLA STA $7FAB9E,x JSL $07F7D2 ; reset sprite properties JSL $0187A7 ; get table values for custom sprite LDA #$88 ; mark as initialized STA $7FAB10,x INC $15A0,x ;"Sprite off screen" flag, horizontal LDA $9A ;Sprite creation: X position (low) STA $E4,x ;Sprite Xpos Low Byte LDA $9B STA $14E0,x ;Sprite Xpos High Byte LDA $98 ;Sprite creation: Y position (low) STA $D8,x ;Sprite Ypos Low Byte LDA $99 ;Sprite creation: Y position (high) STA $14D4,x ;Sprite Ypos High Byte LDA #$3E STA $1540,x ;Sprite Spin Jump Death Frame Counter LDA #$D0 STA $AA,x ;Sprite Y Speed LDA #$2C STA $144C,x LDA $190F,x ;Sprite Properties BPL SpwnSprtProp LDA #$10 STA $15AC,x SpwnSprtProp: PLP PLX RTS
SetSpriteCoord1: PHP REP #$20 LDA $98 AND #$FFF0 STA $98 LDA $9A AND #$FFF0 STA $9A PLP RTS
- Check sprite number:
Sprite:
;In this label, you can check the sprite touching it:
LDX $15E9 LDA $9E,x CMP #$xx ; Sprite number to compare with. BNE Mario ;~Sprite touches the block code here. RTL
- Left and Right corner interaction:
Corner: LDA $9A AND #$08 BNE RightCorner ;if on right edge, do right corner code. LeftCorner: ;[Left Code here] RTL RightCorner: ;[Right Code here] Return: RTL
- Left and Right Interaction:
LeftAndRight: LDA $77 AND #$01 BNE Left AND #$04 BNE Right ;Actually it's best to use the block X/Y positions ($98-$9B) for detecting whether Mario is on the left or right side. The same can be done with the corners. MarioSide: LDA $9A AND #$08 BNE Right Left: ;[Left code here] RTL Right: ;[Right code here]
- Sprite de puntos/1-up (texto):
Puntos: LDA $D8 ;\ PHA ;/ LDA $98 ;\ STA $D8 ;/ LDA $E4 ;\ PHA ;/ LDA $9A ;\ STA $E4 ;/ LDA $14D4 ;\ PHA ;/ LDA $99 ;\ STA $14D4 ;/ LDA $14E0 ;\ PHA ; \ LDA $9B ; | Hace aparecer el Sprite de puntos/1-up y le otorga el valor colocado enseguida STA $14E0 ; / LDA #$08 ;/ ;Posibles valores de $02ACE5: PHX ;\ ;00 = 100 LDX #$00 ;/ ;01 = 200 JSL $02ACE5 ;\ ;02 = 400 PLX ;/ ;03 = 800 PLA ;\ ;04 = 1000 STA $14E0 ;/ ;05 = 2000 PLA ;\ ;06 = 4000 STA $14D4 ;/ ;07 = 8000 PLA ;\ ;08 = 1up STA $E4 ;/ ;09 = 2up PLA ;\ ;0A = 3up STA $D8 ;/ ;0B+ = Glitch RTL ;Fin.
Ahi esta las rutinas, ojala les sirvan mucho |
| | | Contenido patrocinado
| Tema: Re: Rutinas de ASM | |
| |
| | | |
| Permisos de este foro: | No puedes responder a temas en este foro.
| |
| |
| Donaciones |
Quieres ayudar al foro? Siéntete libre de donar la cantidad que quieras!
|
|