Entrar
Últimos assuntos
Estatísticas
Temos 20 usuários registradosO último membro registrado é caiquinus17
Os nossos membros postaram um total de 145 mensagens em 42 assuntos
Tutorial de Counters e Inventários
SMW Tech :: SMW HACKING :: Hacking Generalizado :: Tutoriais
Página 1 de 1
Tutorial de Counters e Inventários
TUTORIAL: COMO INSERIR CUSTOM COUNTERS, OBJETOS-CHAVE E “INVENTÁRIOS” USANDO ASM
Uma vez, o Blizzard Man me pediu para explicar como se cria Custom Counters na Status Bar do SMW. Depois de MUITO TEMPO, eis um pequeno tutorial.
Deseja criar counters para coisas especiais, como por exemplo, Frog Coins? Ou então relíquias que sinalizam que você passou de mundo e permitem o avanço no jogo (Como as que eu fiz, na hack cancelada Super Yoshi’s Galaxy)? Aqui mostrarei tudo o que fiz, e como pode ser feito, usando, é claro, ASM. Se tiver problemas com ASM, sugiro que leia meu tutorial básico, especialmente a parte de CMP e AND, além de tables. Então, ao tutorial:
(1) CUSTOM COUNTERS
Então, primeiramente, criaremos os custom counters em si. Eles são patches, então você deve saber ao menos fazer um hijack, ou seja, mudar uma rotina original e adicionar a sua customizada, mas sem perder a original! A título de facilitar, dou como exemplo esse aqui:
org $008F32
JSL Code
NOP #5
org !Freespace
Code:
LDA $0DBF
SEC
SBC #$64
STA $0DBF
Após o hijack, recomendo fortemente que você use uma RATS Tag, para proteger seu código. Uma notícia boa: você pode colocar múltiplos counters em um patch só!
Agora, você deve prestar atenção em dois tipos de RAM essenciais aqui. O primeiro tipo são as FreeRAMs que você pode usar. Recomendo fortemente que use as RAMs $1F2B, $1F2C e $1F2D para counters definitivos, já que elas são salvas na SRAM. Se não, use o SRAM expand patch. O outro tipo são as RAMs de posição na Status Bar. As RAMs vão de $0EF9 a $0F2F.
Agora, após o hijack, você só vai fazer o seguinte: carregue sua RAM do counter (LDA $1F2B, por exemplo). Agora, faça um JSL para essa rotina abaixo:
HexToDec: ; HEX->DEC converter
LDX #$00 ;> Set X to 0
StartCompare:
CMP #$0A ;\
BCC ReturnLong ; |While A >= 10:
SBC #$0A ; |Decrease A by 10
INX ; |Increase X by 1
BRA StartCompare ;/
ReturnLong:
RTL
E se seu counter for de três dígitos? Simples, use essa rotina aqui:
HexToDec: ;HEX->DEC converter
LDX #$00 ;> Set X to 0
LDY #$00 ;> Set Y to 0
StartCompare1:
CMP #$64 ;\
BCC StartCompare2 ; |While A >= 100:
SBC #$64 ; |Decrease A by 100
INY ; |Increase Y by 1
BRA StartCompare1 ;/
StartCompare2:
CMP #$0A ;\
BCC ReturnLong ; |While A >= 10:
SBC #$0A ; |Decrease A by 10
INX ; |Increase X by 1
BRA StartCompare2 ;/
ReturnLong:
RTL
Qualquer que seja a rotina escolhida, ela terá o Acumulador com as unidades e a variável X com as dezenas (no último caso, Y terá as cententas). Agora, simplesmente as arranje na Status Bar (use STA, STX e STY) e complemente sua edição com o Status Bar Editor. Quer um exemplo? Imagine que eu queira um counter onde fica o “MARIO”. Eis o exemplo:
org $008F32
JSL Code
NOP #5
org !Freespace
««RATS TAG»»
Code:
LDA $0DBF
SEC
SBC #$64
STA $0DBF
LDA $1F2B
JSL HexToDec
STA $0EFE ; Arranja as unidades na Status Bar
STX $0EFD ; Dezenas
STY $0EFC ; Centenas
««ROTINA DE CONVERSÃO HEX-DEC»»
««CUSTOM CODE»»
Parabéns, agora você pode criar counters! Mas agora, como afetá-los? SIMPLES! Crie custom blocks que alterem o valor da RAM do Counter (exemplo, um bloco que tenha INC $1F2B no code, ou LDA $1F2B : CLC : ADC #$xx : STA $1F2B) e divirta-se! Você pode criar counters como dinheiro, tesouros, entre outros... mas e um sistema de “inventário” simples? Veremos na próxima seção.
(2) “INVENTÁRIOS” SIMPLES NA STATUS BAR
Essa parte vai ser um pouco mais chatinha, por que teremos que usar AND para nos ajudar. Comece do mesmo jeito um patch, como mostrado acima. Agora, a melhor forma de se fazer um sistema desses é com bits, assim você pode condicioná-los mais facilmente. Digamos que você queira, por exemplo, colocar um sistema de relíquias encontradas na status bar. Use de novo uma daquelas três FreeRAMs se for algo pro jogo todo ($1F2x). Agora, eis como fazer: Carregue a RAM e vá testando... BIT A BIT. Note que com esse método estou assumindo que você colocará um inventário de no máximo OITO elementos. Eis o pedaço de código:
LDA $1F2B
AND #$01
BNE Item1
AND #$02
BNE Item2
AND #$04
BNE Item3
...
AND #$80
BNE Item8
Item1:
Item2:
Item3:
...
Item8:
Logo após, a parte chata: Ponha LDA #$xx em CADA UM (#$xx é o número do tile a ser usado, veja o link que eu mostrei acima) e STA $yyyy ($yyyy é a posição, reveja o link) E um BRA Skip. No Skip, continue seu código. Exemplo:
LDA $1F2B
AND #$01
BNE Item1
AND #$02
BNE Item2
AND #$04
BNE Item3
...
AND #$80
BNE Item8
Item1:
LDA #$FF
STA $0EF9
BRA Skip
Item2:
LDA #$0E
STA $0EFA
BRA Skip
Item3:
...
Item8:
LDA #$08
STA $0F00 ; como já vamos pro Skip, nada de BRA Skip
Skip:
««SEU CODE»»
Agora, como modificar a RAM agora? Use TSB e TRB para colocar os bits como 1 ou 0, respectivamente. Exemplo: LDA #$80 TSB $1F2B ativa o bit mais significativo da RAM $1F2B, alterando o counter na status bar. Use esse código em blocos ou sprites que você quer que alterem seu “inventário”. Mas e itens que devem ser coletados SOMENTE UMA VEZ? São os objetos-chave ou RELÍQUIAS, na última seção desse tutorial.
(3) RELÍQUIAS – O CÓDIGO DE COLETA
Agora, se você quer um sistema de inventário com objetos que só podem ser coletados UMA ÚNICA VEZ, faça o seguinte: repita a estratégia de counter acima, e crie um SPRITE para cada relíquia, que use TSB para ativar os bits. Para economizar em ASMs, use isso aqui:
LDA $7FAB28,x
TSB $1F2B
Agora, é só criar os .cfg para o MESMO .asm modificando apenas o Extra Property Byte 1. Isso vai otimizar a inserção.
Tudo bem, mas e a parte de coleta ÚNICA desses sprites? Ponha esse código na rotina INIT do Sprite:
LDA $7FAB28,x
PHX
LDX $000DB2
BIT $001F2C,x
BEQ NEXT1
PLX
STZ $14C8,x ; Erase sprite if already gotten
RTL
NEXT1: PLX
JSR SUB_HORZ_POS ;face mario initially
TYA
STA $157C,x
RTL
Na rotina MAIN, logo após o LDA $7FAB28,x : TSB $1F2B, coloque isso aqui:
PHY
LDY $000DB2
LDA $001F2C,y
ORA $7FAB28,x
STA $001F2C,y
PLY
Após criar tudo isso, recomendo sinceramente que adicione uma coisa por vez, e que teste TUDO! Como você está mexendo com partes sensíveis da ROM, qualquer erro te dará um CRASH, então esteja avisado!
Espero ter sido de grande ajuda com esse tutorial, mas ele será melhor aproveitado se você tiver conhecimentos ao menos elementares de ASM. No mais, custom counters não são difíceis de fazer. Qualquer coisa, me mandem PM. Terei prazer em ajudá-los. Divirtam-se criando seus counters e relíquias!!!
Manuz, major Flare
Última edição por Manuz em 11/12/2013, 12:58, editado 1 vez(es) (Motivo da edição : Legenda Laranja - precisa de muita coisa sobre ASM e afins.)
Manuz- Estrela Nova
- Mensagens : 47
Pontos : 3905
Data de inscrição : 10/12/2013
Idade : 29
Localização : Deathbringer Burrow
Humor : Neutro
SMW Tech :: SMW HACKING :: Hacking Generalizado :: Tutoriais
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
6/9/2015, 00:54 por Shadow Ninja
» Yoshi Quest - The Awakening of Magic
6/9/2015, 00:30 por Shadow Ninja
» como inserir sprite diferente no luigi?
17/5/2015, 16:08 por caiquinus17
» HACK COLLAB BR - POSSIBILIDADE?
13/1/2014, 13:05 por Aeon
» Collab?
12/1/2014, 22:47 por Manuz
» O que querem de novo no fórum?
12/1/2014, 22:46 por Manuz
» Regras (WIP)
12/1/2014, 22:02 por Manuz
» Ghost House
10/1/2014, 18:33 por Mirann
» Tema do fórum?
26/12/2013, 21:07 por Koopster