Login
Últimos assuntos
Estatísticas
Temos 88 usuários registradosO último usuário registrado atende pelo nome de paulomario
Os nossos membros postaram um total de 2285 mensagens em 269 assuntos
V-Blank OVERFLOW D=
Página 1 de 1 • Compartilhe •
V-Blank OVERFLOW D=
Estou com um gigante problema, eu coloquei alguns blocos de gelos do Ersanio (download: http://www.smwcentral.net/download.php?id=344&type=blocks) e quando uso a planta de fogo para quebrar ele, dá v-blank overflow (quando cerca de 1 frame fica totalmente com F-blank ou Force Blank, enfim, Tela da morte) e não sei o que fazer já que desativei a ExAnimation que tinha, 0 sprites dinâmicos, nenhum VWF Dialogues, mas mesmo assim o V-Blank Overflow é muito grande.
Aqui tem um log que dumpei para terem uma idéia -- invés do NMI terminar na V-Count < 262, ele termina no V-Count=15.
http://dl.dropbox.com/u/16203903/ANewYay/Master_Hands/vblank%20overflow.txt
Alguém tem idéia?
Aqui tem um log que dumpei para terem uma idéia -- invés do NMI terminar na V-Count < 262, ele termina no V-Count=15.
http://dl.dropbox.com/u/16203903/ANewYay/Master_Hands/vblank%20overflow.txt
Alguém tem idéia?
Re: V-Blank OVERFLOW D=
Se os blocos funcionarem normalmente em uma hack normal sem tudo que voce colocou, obviamente é algo que você fez de errado/está interferindo. O que? Não sei. Provavelmente é algo com a mudança de um bloco para outro.
Re: V-Blank OVERFLOW D=
Não tenho muita idéia a razão, mas depois de olhar melhor, os blocos estão meio 'bugados':
- A fireball não desaparece e as vezes fica quicando igual a um bola mas sem o kiko.
- O smoke não aparece no local correto, aparece em lugares randoms
- nenhum sound effect [não sei se tem realmente]
Só algumas observações:
- Eu usei o manual block inserter e por causa disso tive que converter todos
- O bloco que estou usando é 32x32 que quebra quando a fireball toca
Enfim, aqui estão os codes para reforçar:
TopLeft:
TopRight:
Bottom Left:
Bottom Right:
Note que parte do código do TopLeft é compartilhado com os outros.
- A fireball não desaparece e as vezes fica quicando igual a um bola mas sem o kiko.
- O smoke não aparece no local correto, aparece em lugares randoms
- nenhum sound effect [não sei se tem realmente]
Só algumas observações:
- Eu usei o manual block inserter e por causa disso tive que converter todos
- O bloco que estou usando é 32x32 que quebra quando a fireball toca
Enfim, aqui estão os codes para reforçar:
TopLeft:
- Código:
Block500:
.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS
.FireballTouch
; ======================================================================
; ======================================================================
PHY
PHB
PHK
PLB
STZ $170B,x ; \ Erase fireball
JSR SUB_SMOKE ; / Show smoke effect
REP #$20
LDY #$06
.MakingLoop1
LDA #$0025
STA $03
JSR MAP16CHANGEOHDEAR
LDA $98
CLC
ADC.w .TilePositionY1-$02,y
STA $98
LDA $9A
CLC
ADC.w .TilePositionX1-$02,y
STA $9A
DEY
DEY
BPL .MakingLoop1
SEP #$20
PLB
PLY
.Return
RTS
.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000
; Library
; Smoke Me
; ======================================================================
; ======================================================================
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
; Library
; Map16 Change
MAP16CHANGEOHDEAR:
PHP
REP #$30
PHY
PHX
TAX
LDA $03
PHA
JSR SUB_8034
PLA
STA $03
PLX
PLY
PLP
RTS
RETURN18: PLX
PLB
PLP
RTS
SUB_8034: PHP
SEP #$20
PHB
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 NO_SHIFT
LSR $09
NO_SHIFT: LDY $0E
LDA $09
AND #$01
BEQ HORIZ
LDA $9B
STA $00
LDA $99
STA $9B
LDA $00
STA $99
LDY $0C
HORIZ: CPY #$0200
BCS RETURN18
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 NO_AND
LDA $99
LSR A
LDA $9B
AND #$01
BRA LABEL52
NO_AND: LDA $9B
LSR A
LDA $99
LABEL52: ROL A
ASL A
ASL A
ORA #$20
STA $04
CPX #$0000
BEQ NO_ADD
CLC
ADC #$10
STA $04
NO_ADD: LDA $98
AND #$F0
CLC
ASL A
ROL A
STA $05
ROL A
AND #$03
ORA $04
STA $06
LDA $9A
AND #$F0
LSR A
LSR A
LSR A
STA $04
LDA $05
AND #$C0
ORA $04
STA $07
REP #$20
LDA $09
AND #$0001
BNE LABEL51
LDA $1A
SEC
SBC #$0080
TAX
LDY $1C
LDA $1933
BEQ LABEL50
LDX $1E
LDA $20
SEC
SBC #$0080
TAY
BRA LABEL50
LABEL51: LDX $1A
LDA $1C
SEC
SBC #$0080
TAY
LDA $1933
BEQ LABEL50
LDA $1E
SEC
SBC #$0080
TAX
LDY $20
LABEL50: STX $08
STY $0A
LDA $98
AND #$01F0
STA $04
LDA $9A
LSR A
LSR A
LSR A
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 MAP16_RETURN-$01
PEA $804C
JML $00C0FB
MAP16_RETURN: PLB
PLP
RTS
TopRight:
- Código:
Block501:
.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS
.FireballTouch
; ======================================================================
; ======================================================================
PHY
PHB
PHK
PLB
STZ $170B,x ; \ Erase fireball
JSR SUB_SMOKE ; / Show smoke effect
REP #$20
LDY #$06
.MakingLoop1
LDA #$0025
STA $03
JSR MAP16CHANGEOHDEAR
LDA $98
CLC
ADC.w .TilePositionY1-$02,y
STA $98
LDA $9A
SEC
SBC.w .TilePositionX1-$02,y
STA $9A
DEY
DEY
BPL .MakingLoop1
SEP #$20
PLB
PLY
.Return
RTS
.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000
Bottom Left:
- Código:
Block502:
.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS
.FireballTouch
; ======================================================================
; ======================================================================
PHY
PHB
PHK
PLB
STZ $170B,x ; \ Erase fireball
JSR SUB_SMOKE ; / Show smoke effect
REP #$20
LDY #$06
.MakingLoop1
LDA #$0025
STA $03
JSR MAP16CHANGEOHDEAR
LDA $98
SEC
SBC.w .TilePositionY1-$02,y
STA $98
LDA $9A
CLC
ADC.w .TilePositionX1-$02,y
STA $9A
DEY
DEY
BPL .MakingLoop1
SEP #$20
PLB
PLY
.Return
RTS
.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000
Bottom Right:
- Código:
Block503:
.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS
.FireballTouch
; ======================================================================
; ======================================================================
PHY
PHB
PHK
PLB
STZ $170B,x ; \ Erase fireball
JSR SUB_SMOKE ; / Show smoke effect
REP #$20
LDY #$06
.MakingLoop1
LDA #$0025
STA $03
JSR MAP16CHANGEOHDEAR
LDA $98
SEC
SBC.w .TilePositionY1-$02,y
STA $98
LDA $9A
SEC
SBC.w .TilePositionX1-$02,y
STA $9A
DEY
DEY
BPL .MakingLoop1
SEP #$20
PLB
PLY
.Return
RTS
.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000
Note que parte do código do TopLeft é compartilhado com os outros.
Re: V-Blank OVERFLOW D=
Ninguém? Esse problema que estou tendo é realmente de prioridade máxima e já estou vários dias esperando por resposta. Creio que seja caso de vida ou morte da minha hack, pois pra que uma hack de gelo sem blocos de gelos? =(
Re: V-Blank OVERFLOW D=
Cara se o problema é no V-blank, creio que os blocos não sejam o problema (a menos que o uso deles na hora cause isso) mas se não, o problema está em alguma coisa no NMI ou no IRQ ou até mesmo na rotina dos gráficos em geral, algo que está estourano o V-blank, afirmo isso pois tenho o mesmo problema, porém eu arrumei reduzindo a rotina gráfica em alguns ciclos, foram poucos mas resolveu um pouco além de ter deixado mais eficiente.
Olhe o código gráfico Vitor, as vezes tem algo que não tá eficiente OU rodando eficientemente.
Olhe o código gráfico Vitor, as vezes tem algo que não tá eficiente OU rodando eficientemente.

DiscoMan- Estrela Mágica

- Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54
Re: V-Blank OVERFLOW D=
Bem, não sei muito o porque da V-Blank overflow, mas descobri alguns problemas extras:
- Os smokes aparecem em lugares random invés próximo dos blocos
- A fireball não é apagada
- As vezes a fireball fica quicando sem parar.
Caso queria ver o code dos blocos, está lá em cima. Só lembrando que converti do BTSD para a versão mais recente do Manual Block Inserter e esse bloco é o ice 32x32 que não se divide em 4 e é do Ersanio.
- Os smokes aparecem em lugares random invés próximo dos blocos
- A fireball não é apagada
- As vezes a fireball fica quicando sem parar.
Caso queria ver o code dos blocos, está lá em cima. Só lembrando que converti do BTSD para a versão mais recente do Manual Block Inserter e esse bloco é o ice 32x32 que não se divide em 4 e é do Ersanio.
Re: V-Blank OVERFLOW D=
Creio que pode arrumar o Smoke, só que ao invés de LDY #$03, tente LDY #$00 o resto ainda tenho que olhar mais tarde, mas porque usar o patch ao invés do tool? Creio que ele seja um pouco bugado, na minha opinião.
EDIT: Tente otimizar um pouco o código, trocando PER por PEAs, JSRs por JMPs (quando possível) e tente não usar 16-bit mode quando possível também.
EDIT: Tente otimizar um pouco o código, trocando PER por PEAs, JSRs por JMPs (quando possível) e tente não usar 16-bit mode quando possível também.

DiscoMan- Estrela Mágica

- Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54
Re: V-Blank OVERFLOW D=
Não uso o BTSD porque ele não é compatível com o SA-1 Memory Mapping e também ele as vezes dá conflito de RATS com o Sprite Tool e outros.
Sobre o LDY #$00...
[testando]
Nenhum efeito. Aliás, ficar com LDY #$00 é errado já que esse loop serve para achar um free slot de smoke na OAM e/ou Smoke Table.
Sobre o LDY #$00...
[testando]
Nenhum efeito. Aliás, ficar com LDY #$00 é errado já que esse loop serve para achar um free slot de smoke na OAM e/ou Smoke Table.
Re: V-Blank OVERFLOW D=
Errado não é, o código cria sprites de fumaça extra, por isso usei LDY #$00 e não me deu nenhum problema, pelo menos tente reduzir pra LDY #$01, deixe-me mostar o código:
Sim, usei LDY #$00...
Ou então o problema pode ser no patch, mas entretanto, você poderia usar o BTSD, fazer um hijack na rotina que é a mesma desse patch, e carregar a mesma rotina só que usando o SA-1, seria mais demorado mas também compatível, em minha opinião.
Ou use FastROM...
- Código:
Smoke:
SUB_SMOKE1: LDY #$00 ; \ find a free slot to display effect
FINDFREE1: LDA $17C0,y ; |
BEQ FOUNDONE1 ; |
DEY ; |
BPL FINDFREE1 ; |
RTS ; / return if no slots open
FOUNDONE1: LDA #$01 ; \ set effect graphic to smoke graphic
STA $17C0,y ; /
LDA #$1B ; \ set time to show smoke
STA $17CC,y ; /
LDA $94 ; \ load generator x position and store it for later
STA $17C8 ; /
LDA $95 ; \ load generator x position and store it for later
STA $17C9 ; /
LDA $96 ; \ smoke y position = generator y position
SEC ; |
SBC #$F5 ; |
STA $17C4 ; /
LDA $97 ; \ smoke y position = generator y position
SEC ; |
SBC #$F5 ; |
STA $17C5 ; /
RTS
Sim, usei LDY #$00...
Ou então o problema pode ser no patch, mas entretanto, você poderia usar o BTSD, fazer um hijack na rotina que é a mesma desse patch, e carregar a mesma rotina só que usando o SA-1, seria mais demorado mas também compatível, em minha opinião.

DiscoMan- Estrela Mágica

- Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54
Re: V-Blank OVERFLOW D=
Sem efeitio... Agora vou mostrar um vídeo [não listado] para ve o que acontece:
DOUBLE POST EDIT por justiça!
Descobri o problema do smoke e da fireball! Era problema do patch de imamelia, pois antes de executar o code o X era modificado e assim dava invalid pointer quando chega. Para corrigir, basta colocar um:
lda $03,s
tax
antes do
JMP ($0006)
------------------------------------
Mas a questão em si ainda não está resolvida. Os blocos ice 32x32 continuam a dar um pequeno V-Blank overflow. Não sei se é algo relacionado a Map16Change, já que os 16x16 não tem isso (invés tem um lda : sta : jsl para gerar um empty tile)
Descobri o problema do smoke e da fireball! Era problema do patch de imamelia, pois antes de executar o code o X era modificado e assim dava invalid pointer quando chega. Para corrigir, basta colocar um:
lda $03,s
tax
antes do
JMP ($0006)
------------------------------------
Mas a questão em si ainda não está resolvida. Os blocos ice 32x32 continuam a dar um pequeno V-Blank overflow. Não sei se é algo relacionado a Map16Change, já que os 16x16 não tem isso (invés tem um lda : sta : jsl para gerar um empty tile)
Re: V-Blank OVERFLOW D=
Percebo que no code você usa muito código 16-bit, tente reduzir a quantidade de bits utilizado, é óbvio que algumas rotinas terão de usar 16-bit mas em geral, tente não usá-lo quando NÃO necessário.

DiscoMan- Estrela Mágica

- Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54
Re: V-Blank OVERFLOW D=
Que nada cara, 16-bit mode já é melhor que 8-bit mode. Exemplo:
lda $8c
sta $00
lda $8d
sta $01
lda $8e
sta $02
essa code leva 18 cycles para transferir os dados em $8c-$8e para $00-$02. No modo 16-bit:
lda $8c
sta $00
ldy $8e
sta $02
já esse aqui gasta 14 cycles. Não estou incluindo SEP/REP já que se fosse assim, também teria que botar um SEP para 8-bit, né?
Ah e descobri finalmente o problema do v-blank overflow. Depois de olhar, acho que o VWF Dialogues, LM 1.7x VRAM Opt e o SA-1 Interface gasta bastante cycles. Vou tentar otimizar o código. Então, creio que já está solucionado esse problema mais desgastante que já tive em todo SMW Hacking. Obrigado pela grande ajuda.
lda $8c
sta $00
lda $8d
sta $01
lda $8e
sta $02
essa code leva 18 cycles para transferir os dados em $8c-$8e para $00-$02. No modo 16-bit:
lda $8c
sta $00
ldy $8e
sta $02
já esse aqui gasta 14 cycles. Não estou incluindo SEP/REP já que se fosse assim, também teria que botar um SEP para 8-bit, né?
Ah e descobri finalmente o problema do v-blank overflow. Depois de olhar, acho que o VWF Dialogues, LM 1.7x VRAM Opt e o SA-1 Interface gasta bastante cycles. Vou tentar otimizar o código. Então, creio que já está solucionado esse problema mais desgastante que já tive em todo SMW Hacking. Obrigado pela grande ajuda.
Página 1 de 1
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum


















» Lunar Magic 2.01!
» Novos updates em breve
» My english isn't better now?
» Imagens e Vídeos de sua hack!
» Recomende um jogo
» Random Bar, Random Conversa
» Super Mario Bros. Classics
» Desculpe, mas