Deus abençoe a todos! Hoje eu quero mostrar pra vocês o Modo Treino em Street Fighter 2 Champion Edition, elaborado por Fernando M. Hack e Yacsha.
Este código foi elaborado de início em Super Street Fighter 2 Turbo por Poliva, e achamos excelente converter para esta versão de Street Fighter 2 para o MAME.
Deixarei abaixo o vídeo de demonstração e os códigos para o Modo Treino, espero que gostem!
Agradecimentos a J.F. Souza Yoz pelo espaço em divulgar os trabalhos!
Deus abençoe a todos!
<cheat desc=" "/>
<cheat desc="SF2CE Training Mode"/> <comment>Based in POF SSF2 Training Mode and adapted for SF2CE by Yacsha and Fernando M. Hack</comment>
<cheat desc=" "/>
<cheat desc="Padlock P1 (Action)">
<parameter>
<item value="0x00">Neutral (Stand)</item>
<item value="0x01">Left</item>
<item value="0x02">Right</item>
<item value="0x03">Left</item>
<item value="0x04">Down</item>
<item value="0x05">Down-Left</item>
<item value="0x06">Down-Right</item>
<item value="0x08">Up (Jump)</item>
<item value="0x09">Up (Left)</item>
<item value="0x0A">Up (Right)</item>
<item value="0x0B">Up (Left)</item>
<item value="0xFF">Up (Left) (Fierce Throw)</item>
<item value="0xFE">Up (Right) (Fierce Throw)</item>
<item value="0xFD">Up (Jump) (Fierce Throw)</item>
<item value="0xFC">Down (Fierce Throw)</item>
<item value="0xFB">Throw-Left (Fierce Throw)</item>
<item value="0xFA">Throw-Right (Fierce Throw)</item>
<item value="0xEF">Up (Left) (Fierce Kick)</item>
<item value="0xEE">Up (Right) (Fierce Kick)</item>
<item value="0xED">Up (Jump) (Fierce Kick)</item>
<item value="0xEC">Down (Fierce Kick)</item>
<item value="0xEB">Left (Fierce Kick)</item>
<item value="0xEA">Right (Fierce Kick)</item>
</parameter>
<script state="on">
<action>maincpu.mw@379F4=4E71</action>
<action>maincpu.mw@20EA=4E71,maincpu.mw@20EC=4E71,maincpu.mw@20EE=4E71</action>
</script>
<script state="run">
<action condition="param LT 0x0F">maincpu.pb@FF8651=param</action>
<action>maincpu.mw@379F4=4E71</action>
<action condition="param == 0xFF and frame % 2 == 0">maincpu.pw@FF8650=0009</action>
<action condition="param == 0xFF and frame % 2 != 0">maincpu.pw@FF8650=0041</action>
<action condition="param == 0xFE and frame % 2 == 0">maincpu.pw@FF8650=000A</action>
<action condition="param == 0xFE and frame % 2 != 0">maincpu.pw@FF8650=0042</action>
<action condition="param == 0xFD and frame % 2 == 0">maincpu.pw@FF8650=0008</action>
<action condition="param == 0xFD and frame % 2 != 0">maincpu.pw@FF8650=0041</action>
<action condition="param == 0xFC and frame % 2 == 0">maincpu.pw@FF8650=0004</action>
<action condition="param == 0xFC and frame % 2 != 0">maincpu.pw@FF8650=0042</action>
<action condition="param == 0xFB and frame % 2 == 0">maincpu.pw@FF8650=0001</action>
<action condition="param == 0xFB and frame % 2 != 0">maincpu.pw@FF8650=0041</action>
<action condition="param == 0xFA and frame % 2 == 0">maincpu.pw@FF8650=0002</action>
<action condition="param == 0xFA and frame % 2 != 0">maincpu.pw@FF8650=0042</action>
<action condition="param == 0xEF and frame % 2 == 0">maincpu.pw@FF8650=0009</action>
<action condition="param == 0xEF and frame % 2 != 0">maincpu.pw@FF8650=0409</action>
<action condition="param == 0xEE and frame % 2 == 0">maincpu.pw@FF8650=000A</action>
<action condition="param == 0xEE and frame % 2 != 0">maincpu.pw@FF8650=040A</action>
<action condition="param == 0xED and frame % 2 == 0">maincpu.pw@FF8650=0008</action>
<action condition="param == 0xED and frame % 2 != 0">maincpu.pw@FF8650=0408</action>
<action condition="param == 0xEC and frame % 2 == 0">maincpu.pw@FF8650=0004</action>
<action condition="param == 0xEC and frame % 2 != 0">maincpu.pw@FF8650=0404</action>
<action condition="param == 0xEB and frame % 2 == 0">maincpu.pw@FF8650=0001</action>
<action condition="param == 0xEB and frame % 2 != 0">maincpu.pw@FF8650=0401</action>
<action condition="param == 0xEA and frame % 2 == 0">maincpu.pw@FF8650=0002</action>
<action condition="param == 0xEA and frame % 2 != 0">maincpu.pw@FF8650=0402</action>
</script>
<script state="off">
<action>maincpu.pw@FF8650=0</action>
<action>maincpu.mw@379F4=6710</action>
<action>maincpu.mw@20EA=3BD6,maincpu.mw@20EC=007A,maincpu.mw@20EE=0650</action>
</script>
</cheat>
<cheat desc="Padlock P2 (Action)">
<parameter>
<item value="0x00">Neutral (Stand)</item>
<item value="0x01">Left</item>
<item value="0x02">Right</item>
<item value="0x03">Left</item>
<item value="0x04">Down</item>
<item value="0x05">Down-Left</item>
<item value="0x06">Down-Right</item>
<item value="0x08">Up (Jump)</item>
<item value="0x09">Up (Left)</item>
<item value="0x0A">Up (Right)</item>
<item value="0x0B">Up (Left)</item>
<item value="0xFF">Up (Left) (Fierce Throw)</item>
<item value="0xFE">Up (Right) (Fierce Throw)</item>
<item value="0xFD">Up (Jump) (Fierce Throw)</item>
<item value="0xFC">Down (Fierce Throw)</item>
<item value="0xFB">Throw-Left (Fierce Throw)</item>
<item value="0xFA">Throw-Right (Fierce Throw)</item>
<item value="0xEF">Up (Left) (Fierce Kick)</item>
<item value="0xEE">Up (Right) (Fierce Kick)</item>
<item value="0xED">Up (Jump) (Fierce Kick)</item>
<item value="0xEC">Down (Fierce Kick)</item>
<item value="0xEB">Left (Fierce Kick)</item>
<item value="0xEA">Right (Fierce Kick)</item>
</parameter>
<script state="on">
<action>maincpu.mw@379F4=4E71</action>
<action>maincpu.mw@20F0=4E71,maincpu.mw@20F2=4E71,maincpu.mw@20F4=4E71</action>
</script>
<script state="run">
<action condition="param LT 0x0F">maincpu.pb@FF8951=param</action>
<action>maincpu.mw@379F4=4E71</action>
<action condition="param == 0xFF and frame % 2 == 0">maincpu.pw@FF8950=0009</action>
<action condition="param == 0xFF and frame % 2 != 0">maincpu.pw@FF8950=0041</action>
<action condition="param == 0xFE and frame % 2 == 0">maincpu.pw@FF8950=000A</action>
<action condition="param == 0xFE and frame % 2 != 0">maincpu.pw@FF8950=0042</action>
<action condition="param == 0xFD and frame % 2 == 0">maincpu.pw@FF8950=0008</action>
<action condition="param == 0xFD and frame % 2 != 0">maincpu.pw@FF8950=0041</action>
<action condition="param == 0xFC and frame % 2 == 0">maincpu.pw@FF8950=0004</action>
<action condition="param == 0xFC and frame % 2 != 0">maincpu.pw@FF8950=0042</action>
<action condition="param == 0xFB and frame % 2 == 0">maincpu.pw@FF8950=0001</action>
<action condition="param == 0xFB and frame % 2 != 0">maincpu.pw@FF8950=0041</action>
<action condition="param == 0xFA and frame % 2 == 0">maincpu.pw@FF8950=0002</action>
<action condition="param == 0xFA and frame % 2 != 0">maincpu.pw@FF8950=0042</action>
<action condition="param == 0xEF and frame % 2 == 0">maincpu.pw@FF8950=0009</action>
<action condition="param == 0xEF and frame % 2 != 0">maincpu.pw@FF8950=0409</action>
<action condition="param == 0xEE and frame % 2 == 0">maincpu.pw@FF8950=000A</action>
<action condition="param == 0xEE and frame % 2 != 0">maincpu.pw@FF8950=040A</action>
<action condition="param == 0xED and frame % 2 == 0">maincpu.pw@FF8950=0008</action>
<action condition="param == 0xED and frame % 2 != 0">maincpu.pw@FF8950=0408</action>
<action condition="param == 0xEC and frame % 2 == 0">maincpu.pw@FF8950=0004</action>
<action condition="param == 0xEC and frame % 2 != 0">maincpu.pw@FF8950=0404</action>
<action condition="param == 0xEB and frame % 2 == 0">maincpu.pw@FF8950=0001</action>
<action condition="param == 0xEB and frame % 2 != 0">maincpu.pw@FF8950=0401</action>
<action condition="param == 0xEA and frame % 2 == 0">maincpu.pw@FF8950=0002</action>
<action condition="param == 0xEA and frame % 2 != 0">maincpu.pw@FF8950=0402</action>
</script>
<script state="off">
<action>maincpu.pw@FF8950=0</action>
<action>maincpu.mw@379F4=6710</action>
<action>maincpu.mw@20F0=3BD6,maincpu.mw@20F2=007E,maincpu.mw@20F4=0950</action>
</script>
</cheat>
A seguir temos os códigos de recarga de energia, na perda de 40% a energia retorna ao seu estado original. A seguir:
<cheat desc="HUD Recharge PL1">
<script state="run">
<!-- Infinite Time -->
<action condition="maincpu.rb@FF8AC2 == 0"> <!--prevent hang on bonus stages-->
maincpu.pw@FF8ABE=9928 <!--round time-->
</action>
<action>maincpu.pw@FFDDA2=203C</action> <!--char select time-->
<!-- PL1 Dizzy Status -->
<action>maincpu.pw@FF841A=00</action> <!--Timeout, no Dizzy-->
<action>maincpu.pw@FF841C=00</action> <!--Damage, no Dizzy-->
<!-- Timers -->
<action condition="(maincpu.rw@FF83E8 lt A and maincpu.rb@FF83C1==14 or maincpu.rb@FF83C1==3)">maincpu.pw@FF83E8=90, maincpu.pw@FF857A=90</action>
<action condition="(maincpu.rw@FF83E8 gt 90 or maincpu.rw@FF857A gt 90 or maincpu.rw@FF857A==1)">maincpu.pw@FF83E8=90, maincpu.pw@FF857A=90</action>
<action condition="maincpu.rw@FF83E8 lt 60 and (maincpu.rb@FF83C1 band 10) == 00 and maincpu.rb@FF89D4 == 0">
maincpu.pw@FF83E8=90, maincpu.pw@FF857A=90
</action>
<action condition="maincpu.rb@FF83E8 != FF and maincpu.rb@FF86E8 != FF"> <!-- allow KO slowdown -->
maincpu.pb@FF82E2=00
</action>
</script>
</cheat>
<cheat desc="HUD Recharge PL2">
<script state="run">
<!-- Infinite Time -->
<action condition="maincpu.rb@FF8AC2 == 0"> <!--prevent hang on bonus stages-->
maincpu.pw@FF8ABE=9928 <!--round time-->
</action>
<action>maincpu.pw@FFDDA2=203C</action> <!--char select time-->
<!-- PL2 Dizzy Status -->
<action>maincpu.pw@FF871A=00</action> <!--Timeout, no Dizzy-->
<action>maincpu.pw@FF871C=00</action> <!--Damage, no Dizzy-->
<!-- Timers -->
<action condition="(maincpu.rw@FF86E8 lt A and maincpu.rb@FF86C1==14 or maincpu.rb@FF86C1==3)">maincpu.pw@FF86E8=90, maincpu.pw@FF887A=90</action>
<action condition="(maincpu.rw@FF86E8 gt 90 or maincpu.rw@FF887A gt 90 or maincpu.rw@FF887A==1)">maincpu.pw@FF86E8=90, maincpu.pw@FF887A=90</action>
<action condition="maincpu.rw@FF86E8 lt 60 and (maincpu.rb@FF86C1 band 10) == 00 and maincpu.rb@FF89D4 == 0">
maincpu.pw@FF86E8=90, maincpu.pw@FF887A=90
</action>
<action condition="maincpu.rb@FF83E8 != FF and maincpu.rb@FF86E8 != FF"> <!-- allow KO slowdown -->
maincpu.pb@FF82E2=00
</action>
</script>
</cheat>
A seguir temos o código para desativar o enunciado do round se assim o usuário preferir. A seguir:
<cheat desc="No Round Announce">
<script state="run">
<action>maincpu.rw@007A88=4E71</action>
</script>
<script state="off">
<action>maincpu.rw@007A88=4EB9</action>
</script>
</cheat>
A seguir temos o código para ativar o movimento do lutador durante o enunciado do round, se o usuário preferir. A seguir:
<cheat desc="Move Round Announce">
<script state="run">
<action>maincpu.pb@FF82E3=00</action>
</script>
</cheat>
A Seguir temos um código muito bacana: Seleção de Estágio, onde eu programei para lutar nas telas de bônus com função de luta normal, e para lutar nas telas extras, selecione um lutador no Player 2 com o código cheat. A seguir:
<parameter>
<item value="0x00">Ryu</item>
<item value="0x01">E.Honda</item>
<item value="0x02">Blanka</item>
<item value="0x03">Guile</item>
<item value="0x04">Ken</item>
<item value="0x05">Chun Li</item>
<item value="0x06">Zangief</item>
<item value="0x07">Dhalsim</item>
<item value="0x08">Dictator/M.Bison</item>
<item value="0x09">Sagat</item>
<item value="0x0A">Boxer/Balrog</item>
<item value="0x0B">Claw/Vega</item>
<item value="0x0C">Car Stage (VS)</item>
<item value="0x0D">Barrels Stage (VS)</item>
<item value="0x0E">Drums Stage (VS)</item>
<item value="0x0F">Claw Unused Stage (VS)</item>
<item value="0x0300">Car Bonus Stage</item>
<item value="0x0601">Barrels Bonus Stage</item>
<item value="0x0902">Drums Bonus Stage</item>
</parameter>
<script state="on">
<action>temp0=0240E8</action>
</script>
<script state="run">
<action condition="param==0">maincpu.md@temp0=303C0000+57</action>
<action condition="param==1">maincpu.md@temp0=303C0000+57</action>
<action condition="param==2">maincpu.md@temp0=303C0000+58</action>
<action condition="param==3">maincpu.md@temp0=303C0000+59</action>
<action condition="param==4">maincpu.md@temp0=303C0000+59</action>
<action condition="param==5">maincpu.md@temp0=303C0000+5A</action>
<action condition="param==6">maincpu.md@temp0=303C0000+5B</action>
<action condition="param==7">maincpu.md@temp0=303C0000+5C</action>
<action condition="param==8">maincpu.md@temp0=303C0000+5E</action>
<action condition="param==9">maincpu.md@temp0=303C0000+5E</action>
<action condition="param==A">maincpu.md@temp0=303C0000+59</action>
<action condition="param==B">maincpu.md@temp0=303C0000+5D</action>
<action condition="param==C">maincpu.md@temp0=303C0000+4F, maincpu.mw@02E3CE=000D, maincpu.pb@FF8061=C0</action>
<action condition="param==D">maincpu.md@temp0=303C0000+4F, maincpu.mw@02E3D0=000D, maincpu.pb@FF8061=C0</action>
<action condition="param==E">maincpu.md@temp0=303C0000+4F, maincpu.mw@02E3D2=000D, maincpu.pb@FF8061=C0</action>
<action condition="param==F">maincpu.mw@0063DC=0082, maincpu.mw@02E3D4=0082, maincpu.md@temp0=303C0000+4A, maincpu.pb@FF8061=C0</action>
<action condition="param==300">maincpu.pw@FF89C1=param/100, maincpu.pw@FF89ED=300</action>
<action condition="param==601">maincpu.pw@FF89C1=param/100, maincpu.pw@FF89ED=601</action>
<action condition="param==902">maincpu.pw@FF89C1=param/100, maincpu.pw@FF89ED=902</action>
<action>maincpu.pw@FFDD5E=param, maincpu.pw@FFDD60=param, maincpu.pw@FFDD62=param, maincpu.pw@FFDD64=param</action>
<action>maincpu.pw@FFDD66=param, maincpu.pw@FFDD68=param, maincpu.pw@FFDD6A=param, maincpu.pw@FFDD6C=param</action>
<action>maincpu.pw@FFDD6E=param, maincpu.pw@FFDD70=param, maincpu.pw@FFDD72=param, maincpu.pw@FFDD74=param</action>
<action>maincpu.mb@02B929=63</action>
<action>maincpu.mb@02B92F=99</action>
</script>
<script state="off">
<action>maincpu.mw@0063DC=4EB8</action>
<action>maincpu.mw@02E3CE=4EF8</action>
<action>maincpu.mw@02E3D0=2A0C</action>
<action>maincpu.mw@02E3D2=0004</action>
<action>maincpu.mw@02E3D4=0000</action>
<action>maincpu.mb@02B929=14</action>
<action>maincpu.mb@02B92F=20</action>
<action>maincpu.md@temp0=30300000</action>
</script>
</cheat>
A seguir temos estes códigos já existentes no MAME, para endereçar um lutador nos dois players. A seguir:
<parameter>
<item value="0x00">Ryu</item>
<item value="0x01">E. Honda</item>
<item value="0x02">Blanka</item>
<item value="0x03">Guile</item>
<item value="0x04">Ken</item>
<item value="0x05">Chun Li</item>
<item value="0x06">Zangief</item>
<item value="0x07">Dhalsim</item>
<item value="0x08">M. Bison</item>
<item value="0x09">Sagat</item>
<item value="0x0A">Balrog</item>
<item value="0x0B">Vega</item>
</parameter>
<script state="run">
<action>maincpu.pb@FF864F=param</action>
</script>
</cheat>
<cheat desc="Select Character PL2"> <comment>Free player selection. Use on the level VS screen.</comment>
<parameter>
<item value="0x00">Ryu</item>
<item value="0x01">E. Honda</item>
<item value="0x02">Blanka</item>
<item value="0x03">Guile</item>
<item value="0x04">Ken</item>
<item value="0x05">Chun Li</item>
<item value="0x06">Zangief</item>
<item value="0x07">Dhalsim</item>
<item value="0x08">M. Bison</item>
<item value="0x09">Sagat</item>
<item value="0x0A">Balrog</item>
<item value="0x0B">Vega</item>
</parameter>
<script state="run">
<action>maincpu.pb@FF894F=param</action>
</script>
</cheat>
A seguir temos códigos também já existentes no MAME, para escolher as cores alternativas. A seguir:
<cheat desc="P1 Select Alternate Outfit">
<script state="run">
<action>maincpu.pb@FF8672=01</action>
</script>
</cheat>
<cheat desc="P2 Select Alternate Outfit">
<script state="run">
<action>maincpu.pb@FF8972=01</action>
</script>
</cheat>
<cheat desc=" "/>
Espero que tenham gostado e aguardo o feedback de todos!
Deus abençoe e boa jogatina!
Fernando M. Hack
Passei deslizando a tela. Pensei que o navegador tinha dado bug! :) É praticamente uma desconstrução de Street Fighter no sentido mais puro do termo. Muito bom.
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirBom dia amigo! Feliz Natal pra você e sua família! Eu sou muito fã de Street e sempre quis descobrir coisas escondidas, principalmente lutar nas telas de bônus! Agradeço a você pelo apoio e a Yoz pelo espaço! Tenho ainda muitas coisas para postar, acompanhe aqui o Blog! Deus te abençoe!
ExcluirCara, que legal. Eu nunca me aventurei por códigos de emuladores e plataformas de jogos no geral, mas ver que dá pra sair configurando tudo usando XML no MAME é algo que me dá até uma certa vontade de brincar algum dia! hahaha
ResponderExcluirMuito bacana o post!