This is a sub-page of Proto:Sonic the Hedgehog 2 (Genesis)/Nick Arcade Prototype.
Restos#
Diferencias generales#
- En este punto del desarrollo, Tails es casi totalmente independiente: El jugador 2 puede controlar a Tails, excepto que también sigue a Sonic. Además, Tails no puede completar un nivel por su cuenta, ya que el juego solo carga el cartel de meta cuando Sonic se acerca. Si Tails recibe daño, perderá los anillos de Sonic. La IA también es más simple: Tails copia los movimientos de Sonic y no hace esfuerzo en intentar seguirlo.
- El modo de dos jugadores está muy poco avanzado, ya que hay demasiados glitches y no está habilitado para cada zona.
- La invencibilidad no muestra el efecto de estrellas, pero la música aún se reproduce. La música y la invulnerabilidad dura hasta el final del acto.
- Hay una mecánica donde Sonic rebota tras chocar con una pared a alta velocidad, usando sprites únicos que no se usan después del prototipo Simon Wai. El sprite de Sonic levantándose sería usado luego para cuando Sonic deja su animación de acostarse.
- El Spin Dash aún está siendo desarrollado, ya que Sonic y Tails solo lo pueden cargar una vez. Además, el sonido de cuando Sonic gira en Sonic 1 se escucha en lugar del sonido específico del Spin Dash.
- El daño de los pinchos funciona igual que en Sonic 1.
- El límite de velocidad terrestre de Sonic 1 aún está presente.
- Los sprites de explosión son los de Sonic 1.
- El modo debug sigue la lógica de Sonic 1.
- La velocidad de Sonic no se reinicia al salir del debug.
- Cuando Sonic es golpeado sin anillos, solo será golpeado; la única forma de perder una vida es ahogándose o cayendo en un pozo sin fondo.
- Sonic no puede entrar al modo debug cuando es golpeado.
- Sonic no puede entrar al modo debug en su animación de muerte.
- Entrar y salir del debug al estar bajo el agua no reinicia el temporizador de ahogamiento.
- Sonic mantiene su velocidad al entrar al debug desde el agua y salir en tierra.
- Si Sonic pasó la meta, entrar y salir del debug no te devuelve el control.
- Los monitores generados solo se pueden romper una vez por vida/acto.
- Juntar este prototipo con Sonic & Knuckles desbloquea el juego completo de Blue Sphere.
- El temporizador se reinicia a 9:00 antes de llegar a 9:59, permitiendo jugar los niveles por tiempo indefinido.
- Si Sonic y Tails son golpeados al mismo tiempo mientras lleva al menos un ring, una gran cantidad de anillos saldrán sin importar cuantos realmente tenga.
- La pantalla no scrollea arriba o abajo tras mirar por cierto periodo de tiempo.
- El resorte que apunta hacia abajo tiene un comportamiento extraño que parece ser deshabilitado a partir de la build del 14 de Septiembre: Si Sonic golpea uno de estos resortes y usa su sprite de muerte, rodará hecho una bola cuando llegue al suelo, y puede salir disparado muy lejos desde un cuarto de tubo, quedarse pegado a superficies planas y hasta atravesar el piso hasta morir.
|
|
This needs some investigation. |
Códigos de trucos#
- Selección de niveles - Arriba, abajo, abajo, abajo, abajo, arriba, A + Start.
- Modo de dos jugadores - En la selección de niveles, presione B + Start en cualquier nivel.
- Modo debug - C, C, arriba, abajo, abajo, abajo, abajo, arriba, A + Start. Esto también se puede activar con un código de Pro Action Replay FFFFFA:0001. Como con Sonic 1, C solo se debe presionar dos veces antes del input arriba final.
- Modo debug y selección de nivel - Arriba, abajo, abajo, abajo, abajo, UDLR, arriba, abajo, abajo, abajo, abajo, C, C, arriba, A + Start. UDLR significa presionar cualquier dirección en el D-Pad para reiniciar el código de detección de trucos. A diferencia de en la versión final, donde tanto el modo debug y las esmeraldas se pueden activar al reproducir 19921124126 en la selección de niveles, el último arriba de la selección de niveles no se puede "superponer" con el primer arriba del código del modo debug.
Attract Mode#
Nick Arcade al 21 de Agosto, 1992 |
Beta 5 en adelante |
|
|---|---|---|
La pantalla de título es diferente, con un diseño más que conocido: No solo aparece en la build de Simon Wai, sino que también aparece en el manual de instrucciones del juego final, al igual que en las versiones de Game Gear y Master System. La versión usada en el manual es la misma que en la segunda imagen.
Demo 1 |
Demo 2 |
|---|---|
Demo 3 |
Demo 4 |
El juego cicla por cuatro demos: Chemical Plant, Emerald Hill (2 jugadores), Hidden Palace, y Hill Top. Esta sería la última vez que demos nuevas se grabarían para el juego antes de la build final, el resto de prototipos usan inputs de esta build.
Gráficos cambiados#
Sonic y Tails#
Sonic 1 |
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|---|
El sprite de Sonic en las builds Nick Arcade y Simon Wai es mucho más parecido al de Sonic 1. Su pose estática es idéntica excepto por los zapatos más cortos y añadir un brillo al lado de la cabeza. La build del 21 de Agosto cambia la forma de los ojos de Sonic y añade brillos arriba del ojo.
|
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|
|
|
|
El fotograma de Sonic parpadeando en prototipos antiguos es algo extraño. Parece como si sus ojos cerrados fueran que las pupilas se cerraran en la parte de abajo del ojo. El juego final añadió unos parpados al sprite.
|
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|
|
|
|
El diseño del ojo de Sonic no fue actualizado en todos los fotogramas: En sus animaciones de mirar hacia arriba y abajo solo añadieron un brillo en el ojo pero sin cambiar la forma.
|
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|
|
|
|
La animación de caminar de Sonic tiene 12 fotogramas de animación en versiones antiguas a comparación de los 8 fotogramas del sprite final. La velocidad de animación mínima también es la del doble del juego final, y muestra más del estilo estadounidense de Sonic con el "mohawk".
|
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|
|
|
|
Uno de los cambios más fáciles de ver: En los prototipos de Nick Arcade y Simon Wai, cuando Sonic corre, sus zapatos se vuelven en un blur caricaturesco. En el juego final, esto fue revertido a como estaba en Sonic 1. Curiosamente, estos sprites se usaron en un teaser de Sonic 4 - Episode I. Este concepto sería luego re-usado para Sonic Mania al llegar a la velocidad máxima.
|
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|
|
|
|
La animación de Sonic derrapando es bastante diferente. Inicia con una animación de transición antes de reusar algunos fotogramas de Sonic 1, y luego se da la vuelta y empieza a darse la vuelta. Los dos fotogramas finales entran en bucle hasta que Sonic se detenga o haga otra acción. El inicio de la animación se reusaría en Sonic Mania.
Sonic 1 |
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|---|
En el juego original, Sonic movía su cuerpo pero no las manos. En los primeros prototipos, sus manso se mueven pero su cuerpo no. La versión original es única y diferente haciendo que mueva el cuerpo y las manos en fotogramas diferentes. Curiosamente, hay unos pixeles naranjas en los zapatos, debido a que los sprites se basaban en los de Sonic 1 y hubo un error de coloreado. Este color naranja es en realidad un rojo muy oscuro si se le da la paleta del primer juego.
Sonic 1 |
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|---|
La animación de balanceo es una versión más rápida de la animación de Sonic 1, añadiendo un brillo en la cabeza y una boca naranja. Como en el sprite de empujar, hay un error de coloreado por estar basado en el de Sonic 1. El juego final añade cuatro animaciones de balanceo dependiendo de la distancia con la orilla y de qué dirección está viendo.
|
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|
|
|
|
La única diferencia es que los sprites de Tails tienen un brillo en el sprite de giro.
Badniks#
|
Nick Arcade/Simon Wai |
21 de Agosto en adelante |
|---|---|
|
|
|
El sprite de Buzzer fue retocado entre las builds de Simon Wai y del 21 de Agosto. Su cabeza fue cambiada para no ser tanto como una hormiga, se añadió más detalle en el abdomen, y los jets fueron enderezados.
Nick Arcade al 21 de Agosto |
Prototipo del 14 de Septiembre |
CENSOR en adelante |
|---|---|---|
El sprite de Crawl (0xA9580 en la ROM) es muy diferente, faltándole animación de caminar y solo pudiendo poner el escudo en una dirección.
Otros sprites#
|
Nick Arcade |
Simon Wai en adelante |
|---|---|
|
|
|
Los tres carteles eran simétricos. Solo el de Robotnik se mantuvo así.
|
Nick Arcade |
Simon Wai en adelante |
|---|---|
|
|
|
En 0xA3C16 hay un sprite que parece ser uno de los bloques destructibles de Sonic 1. Es tan genérico que podría estar en cualquier nivel, pero es similar a los ladrillos de Hill Top.
|
Nick Arcade |
Simon Wai en adelante |
|---|---|
|
|
|
En 0xA4368 hay un gráfico de una bola de fuego. El jefe de Hill Top en el juego final puede lanzar bolas de fuego, pero estas crecen y se encojen de tamaño y tienen tres fotogramas de animación. El sprite antiguo quizás se animaría como las bolas de fuego de Marble Zone en Sonic 1:
(Source: Sonic Retro, TCRF original research)
Gráficos sin usar#
Sonic#
Gráfico |
Frame ID |
Descripción |
|---|---|---|
|
0A-0B |
Sprites sin usar de Sonic dándose la vuelta. Quizás se usarían para cuando Sonic cambiara de dirección en lugar de girar instantáneamente al otro lado, o también podría ser una pose de victoria similar al cartel de meta de esta build. |
40-43 |
Sprites de Sonic corriendo más rápido de lo normal. |
|
44-47 |
Más sprites de Sonic llegando a la velocidad máxima. El cuerpo está casi completamente separado de las piernas. Tails tiene una animación de máxima velocidad, aunque la única diferencia es que las colas se vuelven en solo dos sprites. |
|
7B-7D |
Una animación de Sonic arrastrando o jalando algo. Quizás sería para un puzzle de arrastrar algún objeto. |
|
8B-8C |
Una animación sin usar de Sonic balanceándose de un borde. Posiblemente se usaría para cuando el jugador estuviera a unos pixeles de caerse. Se parece similar a la animación de balanceo de Sonic the Hedgehog 3. |
|
Otros#
Gráfico |
Offset |
Compresión |
Descripción |
|---|---|---|---|
0x27098 |
Ninguno |
Un elemento de fondo que muestra una caverna oscurecida por estalagmitas y estalactitas, no es una mancha morada. Se usó en una versión antigua del fondo de Hidden Palace que se vio en una foto antigua, pero no se sabe de una build que lo use. |
|
|
0x27798 |
Ninguno |
Tiles animados que no se cargan en ninguna zona, pero parecen coincidir con la paleta de Chemical Plant. Por el código fuente de una build antigua de Sonic 2 se sugiere que se iban a cargar en la VRAM en Chemical Plant Acto 3 para el jefe. El jefe de Chemical Plant era referido como "vacume" (aspiradora) en los restos del código y fue eliminado por alguna razón, con todo su código único siendo eliminado de esta build. |
|
0x27DD8 |
Ninguno |
Más sprites animados que usan la paleta de Chemical Plant. Ninguno de estos objetos se usaría para el foreground en la versión final. |
0xA44A0 |
Nemesis |
Algo que parece ser una pieza quemándose. Conceptos antiguos del enemigo Buzzer Bee muestra que podía destruir puentes quemándolos con bolas de fuego, por lo que podrían ser remanentes de esta idea. |
|
0xA4BCE |
Nemesis |
Esta es la puerta de Hill Top. Es idéntica a la del juego final, pero todavía no fue implementada. |
|
0xA5826 |
Nemesis |
Gráficos de un objeto de Hidden Palace, posiblemente una plataforma flotante. No es totalmente claro cómo ensamblarla. Un objeto similar aparece en el remake de 2013 como una plataforma acuática. |
|
0xA59C0 |
Nemesis |
Una nube disipándose, posiblemente para los trampolines de vapor de Metropolis Zones. |
|
0xA5D9E |
Nemesis |
El interruptor normal de Sonic 2 ya estaba dibujado, pero todavía no fue codificado. |
|
0xA8CA0 |
Nemesis |
Una bola de metal girando. Esto se vio en artes conceptuales antiguos, y se usaría como obstáculo que rebotaría constantemente en el piso en un arco grande. Curiosamente tenía código en la build Alpha. Rebotaría en una dirección aleatoria hiriendo al jugador si lo toca, y cambiaría de dirección tras tocar una pared. Esto se puede ver en el remake de 2013 con el modo debug, aunque usa una paleta diferente y explota flotando encima de la cabeza del jugador. |
|
|
0xA8F36 |
Nemesis |
Un enemigo sin terminar llamado Bubbler's Mother (Bubbler Madre). Volaría al rededor del escenario soltando partículas en el piso que luego se volverían Bubblers Estos también salen en el remake de 2013 con el modo debug. En la build del 21 de Agosto, hay código para este enemigo, pero los proyectiles no funcionan y no generan los Bubblers. Viendo artes conceptuales se ve que se usarían para "Chemical Factory Zone", que luego se volvería Chemical Plant Zone. |
0xA9162 |
Nemesis |
El Bubbler que soltaría las Bubblers Madres. Se pegarían en el piso por un rato y luego explotaría en tres burbujas. En la build del 21 de Agosto hay código para este enemigo. Viendo artes conceptuales se ve que se usarían para "Chemical Factory Zone", que luego se volvería Chemical Plant Zone. |
|
0xA9580 |
Nemesis |
En los sprites de los Crawls hay lo que parecen ser bultos de rocas o arena. Originalmente Crawl iba a salir del suelo con rocas/arena saliendo debajo de él. Curiosamente el sprite es usado en la build del 21 de Agosto si se restaura el arte del Crawl. Las rocas/arena se pueden ver en el sketch inicial del Crawl. |
|
Usado |
Pensado |
|---|---|
|
|
|
El Badnik BBat usa la paleta 01, pero se ve un poquito raro. Si la paleta se pone en 00 (la paleta de Sonic y Talis), la oreja y las flamas se ven mucho mejor. Esto no fue arreglado en ninguna build antes de que se eliminara al enemigo por completo de la ROM.
(Fuente: Sonic Retro, Yawackhary, TCRF original research)
Objetos sin usar#
Octus#
ID: 4A
Este Badnik aparece en Oil Ocean Zone en el juego final, aunque su comportamiento es diferente aquí:
- En esta build y en la Simon Wai, se levanta 32 pixeles del suelo, hace un disparo hacia Sonic, y luego vuela hacia la izquierda o derecha antes de despawnear.
- En otras versiones, este no volará tras hacer el disparo, sino que solo aterriza para luego repetir el proceso.
Stego#
ID: 4D
Un Badnik tipo triceratops que apareció en una foto antigua de Hidden Palace Zone. Se mueve lentamente de un lado al otro, pero cuando Sonic se acerca, activa sus propulsores y carga hacia Sonic como el Badnik caracol. Se puede colocar en Hidden Palace con el modo debug, pero los gráficos son basura sin usar el código PAR (01C1D8:0007).
Gator#
ID: 4E
Un enemigo tipo cocodrilo que se ve en una foto antigua del nivel de desierto descartado, aunque se desconoce si el enemigo iba a salir ahí. Se mueve de un lado al otro, abriendo su boca si está viendo a Sonic y está a 64 pixeles de él. Se puede colocar en Hidden Palace con el modo debug, pero los gráficos son basura sin usar un código PAR.
Aquis#
|
|
Pendiente: |
ID: 50, 51
Un enemigo tipo caballito de mar de Oil Ocean Zone que tiene dos variantes, y ninguna coincide a su comportamiento del juego final.
Objeto 50 (Caballito de mar):
- Se mueve en un camino de izquierda a derecha. El rango de movimiento es 16×(cuatro bytes inferiores del subtipo) pixeles de ancho.
- Tras pasar 256×(cuatro bytes superiores del subtipo) fotogramas, se activa el "modo disparos". Si Sonic se acerca cuando está en modo disparo y Sonic está a la vista, el Badnik hará un disparo, y luego bajará en la coordenada 0398. Este valor parece ser específico.
:* Si su valor Y inicial es mayor que 0398, se moverá lentamente hasta 0398. Luego, cuando haga el disparo, descenderá lentamente hacia su coordenada Y inicial.
:* Si los cuatro bytes superiores del subtipo son 00, el temporizador se pondrá en FFFF, previniendo que dispare.
:* Nótese la palabra "activar". Es posible que el Badnik se salga del modo disparo si pasa el suficiente tiempo.
Objeto 51 (¿Caballito de cielo?):
- Se mueve como el primer Aquis en un camino definido, pero también seguirá la posición Y de Sonic hasta su posición original de spawneo.
- El temporizador cuenta atrás cada fotograma que Sonic esté a la vista del Badnik. Esta puesto inicialmente en 180 fotogramas. Si el temporizador llega a cero, hará un disparo hacia Sonic. Hay unos 36 fotogramas de delay extra antes de que el temporizador se reincie.
- A diferencia del juego final, no hay límite de cuantas balas puede disparar.
Este usa un gráfico de cuerpo diferente con un cohete en lugar de una aeta. Estos gráficos fueron eliminados del tileset desde el prototipo del 21 de Agosto, aunque el mapping no se actualizó desde el prototipo del 14 de Septiembre.
BFish#
ID: 52
Un Badnik tipo piraña. Se mueve 32×(cuatro bytes inferiores del subtipo) pixeles a la derecha antes de saltar en un arco largo. El cómo funciona depende de su posición Y actual e inicial:
- Si la posición Y es menor o igual que 0380 (como con Aquis, parece ser especificado), saltará hacia arriba, y luego caerá hasta regresar a las coordenadas Y 0380. Luego hará más saltos desde esa posición Y hasta que despawnee.
- Si la posición Y inicial es mayor que 0380, se animará lentamente y saltará en un arco más bajo de lo usual. Cuando llegue a la coordenada Y inicial, saltará de nuevo.
Se puede colocar en Hidden Palace con el modo debug, pero los gráficos son basura sin usar un código PAR.
Poste de luz#
ID: 79
Este es el poste de luz de Sonic 1 con un diseño muy diferente al visto de la versión final de Sonic 2. Se puede colocar con el modo debug en Emerald Hill Zone y Hill Top Zone. También sale en Green Hill Zone, pero tiene gráficos basura.
Subtipos sin usar#
Monitores
00: Monitor estático. No hace nada si se rompe. En el juego final también queda sin usar y daña al jugador.
03: Monitor de Robotnik. Tampoco hace nada en el prototipo y también daña al jugador en el final, pero al menos sí fue usado en el modo de dos jugadores.
08: Monitor de misterio. No hace nada si se rompe... en esta build. En el prototipo de Simon Wai, activa la paleta de Super Sonic, con el resto de atributos siendo activados en los prototipos del 21 de Agosto y de la Pre-Beta, antes de ser reemplazado con el monitor de teletransporte en las últimas builds.
09: Monitor de trampolín. Solo presente en este prototipo y en el de Simon Wai, pero no hace nada si se rompe. Hay dos hipótesis de cómo funcionaría:
- Como el monitor de Pogo Spring como en el juego futuro Sonic the Hedgehog Triple Trouble, donde hace que Sonic/Tails se monten en un resorte pogo que los hace rebotar hasta que reciban daño.
- Aumentar la altura de salto. Esto explicaría los poderes de Super Sonic: Es invencible (como con el monitor de invencibilidad) y corre más rápido (como con el monitor de velocidad), pero no hay ningún equivalente para el del salto alto.
Plataformas de Chemical Plant Zone
El código en esta versión parece ser reusado del objeto 52 de Sonic 1, el cual era usado para los bloques móviles de Marble, Labyrinth, y Scrap Brain Zones. Hay subtipos 02-03 (el bloque de Marble Zone que se mueve a la derecha cuando te paras en él, y que se cae cuando toca un tile sólido), 04-07 (el bloque escondido de Labyrinth Zone Acto 1 que se activa con un interruptor y lleva a una ruta más rápida), y 09-0A (plataformas que se deslizan en Scrap Brain Zone) que quedan sin usar en esta build.
Jefe
00: Jefe de Chemical Plant Zone. El código fue removido por completo y los punteros están en 0. Hay restos que llaman los sub-objetos "bossvac" y "vacumeguy". Sus gráficos aún están en la ROM, junto con restos para activarlos. Sin embargo, el código fue redescubierto en el prototipo de Agosto, y puede ser porteado al de Nick Arcade al arreglar ciertas IDs y punteros, funcionando por completo como se ve en el video.
Su comportamiento es diferente al del juego final, teniendo un movimiento más lento.
Errores de código#
- Por alguna razón, una compresión de Kid Chameleon llegó hasta el código, e incluso se usa en algunos chunks en Green Hill.
- La forma en la que el juego decide lo de arriba es raro. Al cargar un nivel, el juego revisa si la ID es específicamente 2, 3, 4, ó 5, y si no, usará la decompresión de Kid Chamaleon. Como Labyrinth Zone(ID 1) usa los datos de Chemical Plant, no coincide, cargando chunks incorrectos.
- La rutina para cargar los tiles animados en los niveles llega hasta $0F, incluso aunque solo hay $06 niveles (incluyendo el ending en Sonic 1); esto parece sugerir que los desarrolladores ya estaban moviendo los IDs de niveles, lo cual es apoyado por el hecho de que Hidden Palace es listado como $08, el cual es su espacio desde la build de Simon Wai en adelante.
Lista de objetos/Código fuente#
Hay una enorme cantidad de objetos encontrados en la ROM, junto con código fuente en bruto.
addsym
nolist
include "equ.lib"
include "macro.lib"
list
xref colichgpat
xref ringpat,itempat,butapat,kanipat,hachipat,togepat
xref fishpat,fish2pat,mogurapat,shimapat2,jyamapat
xref musipat,sjumppat,kamerepat,arumapat,kagebpat,ballpat
xref firepat,fblockpat,signalpat,bobinpat,yoganpat,yogan2pat
xref usapat,yadopat,boxpat,bryukapat,daipat,break2pat,yogancpat
xref batpat,z5daipat,dai2pat,switch2pat,z4daipat
xref elevpat,pedalpat,steppat,funpat,sisoopat,hassyapat
xref brobopat,unipat,yaripat,udaipat,dai3pat,kazaripat,kassyapat
xref awapat,mizupat,boupat,benpat,fetamapat,mawarupat,hagurumapat
xref patapat,yukafpat,nokopat,dai4pat,doorpat,yukaepat,fire6pat
xref elepat,yukaipat,scolipat,imopat,savepat,bigringpat,btenpat
xref actionsub,actwkchk,frameout,playpat,dualmodesub
xref flicpat,usagipat,pengpat,azarpat,fbutapat,niwapat,risupat
xref kaitenpat,prodaipat,buranko0dpat
xref frntlitpat,gempat,wfallpat,pltfrmpat
xref takipat,banepat,dai00pat
xref redzpat,bfishpat,seahorsepat,horsepat
xref stegopat,wasppat,gatorpat,bbatpat,octpat,wfish2pat,snailpat
xdef edit
;------------------------------------------------------------------------------
edit:
moveq #0,d0
move.b editmode,d0
move.w edit_move_tbl(pc,d0.w),d1
jmp edit_move_tbl(pc,d1.w)
edit_move_tbl:
dc.w editinit-edit_move_tbl
dc.w editmove-edit_move_tbl
editinit:
addq.b #word,editmode
move.w scralim_up,editstack
move.w scralim_n_down,editstack2
move.w #$0000,scralim_up
move.w #$0720,scralim_n_down
andi.w #$07ff,playerwk+yposi
andi.w #$07ff,scra_v_posit
andi.w #$03ff,scrb_v_posit
move.b #0,patno(a0)
move.b #0,mstno(a0)
cmpi.b #spgamemd,gmmode
bne.b .jump0
* move.b #7-1,stageno
* move.w #$000,rotspd
* move.w #$000,rotdir
moveq #7-1,d0
bra.b .jump1
.jump0:
moveq #0,d0
move.b stageno,d0
.jump1:
lea edittbl,a2
add.w d0,d0
adda.w (a2,d0.w),a2
move.w (a2)+,d6
cmp.b editno,d6
bhi.b .jump
move.b #0,editno
.jump:
bsr.w editpatchg
move.b #12,edittimer
move.b #1,edittimer+1
editmove:
moveq #7-1,d0
cmpi.b #spgamemd,gmmode
beq.b .jump
moveq #0,d0
move.b stageno,d0
.jump:
lea edittbl,a2
add.w d0,d0
adda.w (a2,d0.w),a2
move.w (a2)+,d6
bsr.w editwalk
* bsr.w dirsprset
jmp actionsub
editwalk:
moveq #0,d4
move.w #1,d1
move.b swdata1+1,d4
andi.w #$0f,d4
bne.b .jump0
move.b swdata1,d0
andi.w #$0f,d0
bne.b .jump
move.b #12,edittimer
move.b #$0f,edittimer+1
bra.w .lend
.jump:
subq.b #1,edittimer
bne.b .jump1
move.b #1,edittimer
addq.b #1,edittimer+1
* cmpi.b #255,edittimer+1
bne.b .jump0
move.b #255,edittimer+1
.jump0:
move.b swdata1,d4
.jump1:
moveq #0,d1
move.b edittimer+1,d1
addq.w #1,d1
swap d1
asr.l #4,d1
move.l yposi(a0),d2
move.l xposi(a0),d3
btst.l #0,d4 *swdata+0
beq.b .jump2
sub.l d1,d2 *yposi
bcc.b .jump2
moveq #0,d2
.jump2:
btst.l #1,d4 *swdata+0
beq.b .jump3
add.l d1,d2 *yposi
cmpi.l #$7ff0000,d2
bcs.b .jump3
move.l #$7ff0000,d2
.jump3:
btst.l #2,d4 *swdata+0
beq.b .jump4
sub.l d1,d3 *xposi
bcc.b .jump4
moveq #0,d3
.jump4:
btst.l #3,d4 *swdata+0
beq.b .jump5
add.l d1,d3 *xposi
.jump5:
move.l d2,yposi(a0)
move.l d3,xposi(a0)
.lend:
btst.b #6,swdata1+0
beq.b .jump7
btst.b #5,swdata1+1 * c button check
beq.b .jump77
subq.b #1,editno
bcc.b .jump6
add.b d6,editno
bra.b .jump6
.jump77:
btst.b #6,swdata1+1
beq.b .jump7
addq.b #1,editno
cmp.b editno,d6
bhi.b .jump6
move.b #0,editno
.jump6:
bra.w editpatchg
.jump7:
btst.b #5,swdata1+1 * c button check
beq.b .jump8
jsr actwkchk
bne.b .worknai ;z=0:ok z=1:no
move.w xposi(a0),xposi(a1)
move.w yposi(a0),yposi(a1)
move.b patbase(a0),actno(a1)
move.b actflg(a0),actflg(a1)
move.b actflg(a0),cddat(a1)
andi.b #$7f,cddat(a1)
moveq #0,d0
move.b editno,d0
lsl.w #3,d0
move.b 4(a2,d0.w),userflag(a1)
rts
.worknai:
.jump8:
btst.b #4,swdata1+1 * b button check
beq.b .jump9
moveq #0,d0
move.w d0,editmode
move.l #playpat,playerwk+patbase
move.w #$0780,playerwk+sproffset
tst.w dualmode ; dual mode check
beq.b .end
move.w #$0780/2,playerwk+sproffset
.end:
move.b d0,playerwk+mstno
move.w d0,xposi+2(a0)
move.w d0,yposi+2(a0)
move.w editstack,scralim_up
move.w editstack2,scralim_n_down
cmpi.b #spgamemd,gmmode
bne.b .jump9
* clr.w rotdir
* move.w #$040,rotspd
* move.l #playpat,playerwk+patbase
* move.w #$0780,playerwk+sproffset
move.b #02,playerwk+mstno
bset.b #cd_ball,playerwk+cddat
bset.b #cd_jump,playerwk+cddat
.jump9:
rts
editpatchg:
moveq #0,d0
move.b editno,d0
lsl.w #3,d0
move.l 0(a2,d0.w),patbase(a0)
move.w 6(a2,d0.w),sproffset(a0)
move.b 5(a2,d0.w),patno(a0)
* move.b 4(a2,d0.w),userflag(a0)
bsr.w dualmodesub
rts
dcblw macro \1,\2,\3,\4,\5
dc.l (\1)*$1000000+(\2)
dc.w (\4)+(\5)*$100
dc.w (\3)
endm
edittbl:
dc.w edit1tbl-edittbl
dc.w edit2tbl-edittbl
dc.w edit3tbl-edittbl
dc.w edit4tbl-edittbl
dc.w edit5tbl-edittbl
dc.w edit6tbl-edittbl
dc.w edit7tbl-edittbl
edit1tbl:
dc.w 14
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw kani_act,kanipat,$0400,0,$00 ;3:
dcblw hachi_act,hachipat,$0444,0,$00 ;4:
dcblw fish_act,fishpat,$0470,0,$00 ;5:
dcblw toge_act,togepat,$04a0,0,$00 ;6:
dcblw shima_act,shimapat2,$4000,0,$00 ;7:
dcblw jyama_act,jyamapat,$66c0,0,$00 ;8:
dcblw musi_act,musipat,$04e0,0,$00 ;9:
dcblw sjump_act,sjumppat,$04a8,0,$00 ;10:
dcblw kamere_act,kamerepat,$249b,0,$00 ;11:
dcblw kageb_act,kagebpat,$434c,0,$00 ;12:
dcblw save_act,savepat,$26bc,0,$01 ;13:
dcblw colichg_act,colichgpat,$26bc,0,$00 ;14:
edit2tbl:
edit3tbl:
;zone0d
dc.w 07
dcblw ring_act,ringpat,$26bc,0,$00 ;01:
dcblw item_act,itempat,$0680,0,$00 ;02:
dcblw sjump_act,sjumppat,$04a8,0,$00 ;03:
dcblw colichg_act,colichgpat,$07bc,0,$00 ;04:
dcblw kaiten_act,kaitenpat,$e000,0,$00 ;05:
dcblw prodai_act,prodaipat,$e418,0,$00 ;06:
dcblw buranko_act,buranko0dpat,$2418,0,$08 ;07:
edit4tbl:
;zone00
dc.w 18
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw save_act,savepat,$047c,0,$01 ;3:
dcblw colichg_act,colichgpat,$26bc,0,$00 ;6:
dcblw taki_act,takipat,$23ae,0,$00 ;7:
dcblw taki_act,takipat,$23ae,3,$02 ;7:
dcblw shima_act,dai00pat,$4000,0,$01 ;8:
dcblw shima_act,dai00pat,$4000,1,$0a ;8:
dcblw toge_act,togepat,$2434,0,$00 ;10:
dcblw sisoo_act,sisoopat,$03ce,0,$00 ;9:$23
dcblw sjump_act,banepat,$045c,0,$80 ;3: banev
dcblw sjump_act,banepat,$0470,3,$90 ;3: baneh
dcblw sjump_act,banepat,$045c,6,$a0 ;3: banevr
dcblw sjump_act,banepat,$043c,7,$30 ;3: bane45
dcblw sjump_act,banepat,$043c,10,$40 ;3: bane45r
dcblw wasp_act,wasppat,$03e6,0,$00 ;25 "" ""
dcblw snail_act,snailpat,$0402,0,$00 ;25 "" ""
dcblw wfish2_act,wfish2pat,$041c,0,$00 ;21 "" ""
dcblw redz_act,redzpat,$0500,0,$00 ;20: will change
dcblw bfish_act,bfishpat,$2530,0,$00 ;21 "" ""
dcblw seahorse_act,horsepat,$2570,0,$00 ;22 "" ""
dcblw skyhorse_act,horsepat,$2570,0,$00 ;23 "" ""
dcblw stego_act,stegopat,$23c4,0,$00 ;24 "" ""
dcblw wasp_act,wasppat,$032c,0,$00 ;25 "" ""
dcblw gator_act,gatorpat,$2300,0,$00 ;26 "" ""
dcblw bbat_act,bbatpat,$2350,0,$00 ;27 "" ""
dcblw oct_act,octpat,$238a,0,$00 ;28 "" ""
edit5tbl:
edit6tbl:
edit7tbl:
;zone08
dc.w 15
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw bgspr_act,frntlitpat,$e485,3,$21 ;3:
dcblw wfall_act,wfallpat,$e415,4,$04 ;4:
dcblw break_act,pltfrmpat,$4475,0,$00 ;5:
dcblw colichg_act,colichgpat,$26bc,0,$00 ;6:
dcblw redz_act,redzpat,$0500,0,$00 ;20: will change
dcblw bfish_act,bfishpat,$2530,0,$00 ;21 "" ""
dcblw seahorse_act,horsepat,$2570,0,$00 ;22 "" ""
dcblw skyhorse_act,horsepat,$2570,0,$00 ;23 "" ""
dcblw stego_act,stegopat,$23c4,0,$00 ;24 "" ""
dcblw wasp_act,wasppat,$032c,0,$00 ;25 "" ""
dcblw gator_act,gatorpat,$2300,0,$00 ;26 "" ""
dcblw bbat_act,bbatpat,$2350,0,$00 ;27 "" ""
dcblw oct_act,octpat,$238a,0,$00 ;28 "" ""
;------------------------------------------------------------------------------
align
;------------------------------------------------------------------------------
end
edit2tbl:
dc.w 25
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw sjump_act,sjumppat,$0523,0,$00 ;3:
dcblw fish2_act,fish2pat,$2486,0,$08 ;4:
dcblw mogura_act,mogurapat,$84a6,2,$00 ;5:
dcblw yari_act,yaripat,$03cc,0,$00 ;6:
dcblw yari_act,yaripat,$03cc,3,$02 ;7:
dcblw box_act,boxpat,$43de,0,$00 ;8:
dcblw switch2_act,switch2pat,$0513,0,$00 ;9:
dcblw toge_act,togepat,$051b,0,$00 ;10:
dcblw dai_act,udaipat,$43bc,0,$04 ;11:
dcblw dai3_act,dai3pat,$43e6,0,$01 ;12:
dcblw dai3_act,dai3pat,$43e6,1,$13 ;13:
dcblw dai3_act,dai3pat,$43e6,0,$05 ;14:
dcblw kazari_act,kazaripat,$443e,0,$00 ;15:
dcblw dai3_act,dai3pat,$43e6,2,$27 ;16:
dcblw dai3_act,dai3pat,$43e6,3,$30 ;17:
dcblw kassya_act,kassyapat,$03f6,0,$7f ;18:
dcblw uni_act,unipat,$0467,0,$00 ;19:
dcblw awa_act,awapat,$8348,19,$84 ;20:
dcblw mizu_act,mizupat,$c259,2,$02 ;21:
dcblw mizu_act,mizupat,$c259,9,$09 ;22:
dcblw bou_act,boupat,$43de,0,$00 ;23:
dcblw ben_act,benpat,$4328,0,$02 ;24:
dcblw save_act,savepat,$26bc,0,$01 ;25:
* dcblw dai4_act,dai4pat,$41f0,4,$80 ;25:
edit3tbl:
dc.w 18
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw hachi_act,hachipat,$0444,0,$00 ;3:
dcblw toge_act,togepat,$051b,0,$00 ;4:
dcblw sjump_act,sjumppat,$0523,0,$00 ;5:
dcblw mfire_act,firepat,$0345,0,$00 ;6:
dcblw fblock_act,fblockpat,$4000,0,$00 ;7:
dcblw myogan_act,yoganpat,$63a8,0,$00 ;8:
dcblw yogan2_act,yogan2pat,$63a8,0,$00 ;9:
dcblw box_act,boxpat,$42b8,0,$00 ;10:
dcblw yado_act,yadopat,$247b,0,$00 ;11:
dcblw bryuka_act,bryukapat,$42b8,0,$00 ;12:
dcblw dai_act,daipat,$02b8,0,$00 ;13:
dcblw break2_act,break2pat,$62b8,0,$00 ;14:
dcblw yoganc_act,yogancpat,$8680,0,$00 ;15:
dcblw bat_act,batpat,$04b8,0,$00 ;16:
dcblw imo_act,imopat,$24ff,0,$00 ;17:
dcblw save_act,savepat,$26bc,0,$01 ;18:
edit4tbl:
dc.w 15
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw elev_act,elevpat,$4000,0,$00 ;3:
dcblw break2_act,break2pat,$44e0,2,$00 ;4:
dcblw shima_act,z4daipat,$4000,0,$00 ;5:
dcblw pedal_act,pedalpat,$4000,0,$00 ;6:
dcblw step_act,steppat,$4000,0,$00 ;7:
dcblw fun_act,funpat,$43a0,0,$00 ;8:
dcblw sisoo_act,sisoopat,$0374,0,$00 ;9:
dcblw sjump_act,sjumppat,$0523,0,$00 ;10:
dcblw mfire_act,firepat,$0480,0,$00 ;11:
dcblw bgspr_act,hassyapat,$44d8,0,$00 ;12:
dcblw brobo_act,brobopat,$0400,0,$00 ;13:
dcblw uni_act,unipat,$2429,0,$00 ;14:
dcblw save_act,savepat,$26bc,0,$01 ;15:
edit5tbl:
dc.w 15
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw toge_act,togepat,$051b,0,$00 ;3:
dcblw sjump_act,sjumppat,$0523,0,$00 ;4:
dcblw aruma_act,arumapat,$04b8,0,$00 ;5:
dcblw signal_act,signalpat,$0000,0,$00 ;6:
dcblw bobin_act,bobinpat,$0380,0,$00 ;7:
dcblw kani_act,kanipat,$0400,0,$00 ;8:
dcblw hachi_act,hachipat,$0444,0,$00 ;9:
dcblw yado_act,yadopat,$247b,0,$00 ;10:
dcblw shima_act,z5daipat,$4000,0,$00 ;11:
dcblw dai2_act,dai2pat,$4000,0,$00 ;12:
dcblw switch2_act,switch2pat,$0513,0,$00 ;13:
dcblw imo_act,imopat,$24ff,0,$00 ;14:
dcblw save_act,savepat,$26bc,0,$01 ;15:
edit6tbl:
dc.w 29
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw item_act,itempat,$0680,0,$00 ;2:
dcblw brobo_act,brobopat,$0400,0,$00 ;3:
dcblw uni_act,unipat,$0429,0,$00 ;4:
dcblw imo_act,imopat,$22b0,0,$00 ;5:
dcblw buranko_act,fetamapat,$4391,2,$07 ;6:
dcblw haguruma_act,hagurumapat,$c344,00,$e0 ;7:
dcblw dai_act,daipat,$22c0,2,$28 ;8:
dcblw switch2_act,switch2pat,$0513,0,$00 ;9:
dcblw pata_act,patapat,$4492,0,$03 ;10:
dcblw pata_act,yukafpat,$04df,0,$83 ;11:
dcblw noko_act,nokopat,$43b5,0,$02 ;12:
dcblw break2_act,break2pat,$43f5,0,$00 ;13:
dcblw dai_act,daipat,$4460,3,$39 ;14:
dcblw dai4_act,dai4pat,$22c0,0,$00 ;15:
dcblw door_act,doorpat,$42e8,0,$00 ;16:
dcblw dai4_act,dai4pat,$22c0,1,$13 ;17:
dcblw noko_act,nokopat,$43b5,0,$01 ;18:
dcblw dai4_act,dai4pat,$22c0,1,$24 ;19:
dcblw noko_act,nokopat,$43b5,2,$04 ;20:
dcblw dai4_act,dai4pat,$22c0,1,$34 ;21:
dcblw yukae_act,yukaepat,$44c3,0,$00 ;22:
dcblw fire6_act,fire6pat,$83d9,0,$64 ;23:
dcblw fire6_act,fire6pat,$83d9,11,$64 ;24:
dcblw ele_act,elepat,$047e,0,$04 ;25:
dcblw yukai_act,yukaipat,$42f0,0,$00 ;26:
dcblw scoli_act,scolipat,$8680,0,$11 ;27:
dcblw buta_act,butapat,$2302,0,$04 ;28:
dcblw save_act,savepat,$26bc,0,$01 ;29:
* dcblw ring_act,playpat,$0780,50,$00 ;28:
* dcblw usa_act,usapat,$0448,0,$00 ;5:
* dcblw mawaru_act,mawarupat,$4348,16,$00 ;7:
edit7tbl:
dc.w 02 *13
dcblw ring_act,ringpat,$26bc,0,$00 ;1:
dcblw ring_act,ringpat,$26bc,8,$00 ;2:
* dcblw bobin_act,bobinpat,$0380,0,$00 ;2:
* dcblw usagi_act,flicpat,$05a0,0,$0a ;3
* dcblw usagi_act,flicpat,$05a0,0,$0b ;4
* dcblw usagi_act,flicpat,$05a0,0,$0c ;5
* dcblw usagi_act,usagipat,$0553,0,$0d ;6
* dcblw usagi_act,usagipat,$0553,0,$0e ;7
* dcblw usagi_act,pengpat,$0573,0,$0f ;8
* dcblw usagi_act,pengpat,$0573,0,$10 ;9
* dcblw usagi_act,azarpat,$0585,0,$11 ;10
* dcblw usagi_act,fbutapat,$0593,0,$12 ;11
* dcblw usagi_act,niwapat,$0565,0,$13 ;12
* dcblw usagi_act,risupat,$05b3,0,$14 ;13
Algo a destacar es este grupo de código:
dcblw redz_act,redzpat,$0500,0,$00 ;20: will change
dcblw bfish_act,bfishpat,$2530,0,$00 ;21 "" ""
dcblw seahorse_act,horsepat,$2570,0,$00 ;22 "" ""
dcblw skyhorse_act,horsepat,$2570,0,$00 ;23 "" ""
dcblw stego_act,stegopat,$23c4,0,$00 ;24 "" ""
dcblw wasp_act,wasppat,$032c,0,$00 ;25 "" ""
dcblw gator_act,gatorpat,$2300,0,$00 ;26 "" ""
dcblw bbat_act,bbatpat,$2350,0,$00 ;27 "" ""
dcblw oct_act,octpat,$238a,0,$00 ;28 "" ""
Estas líneas de código están en el bloque que forma la lista de objetos de debug de Hidden Palace Zone de una build anterior. El contenido en esta lista parece ser idéntica a la versión compilada en la ROM; aunque esto nos da cierta información de los objetos que no se conocía desde antes:
- Redz es el Badnik T-Rex de Hidden Palace.
- Bfish es el Badnik de pez saltante que no se usa en la build de Simon Wai.
- Seahorse es Aquis, el caballito de mar que aparece en Oil Ocean Zone.
- Skyhorse es el segundo Aquis que aparece en el modo debug de Hidden Palace (una versión que dispara proyectiles inofensivos).
- Stego es el triceratops que no se usa en la build de Simon Wai.
- Wasp es Buzzer, el Badnik abeja que aparece en Emerald Hill Zone en todas las versiones del juego. En este prototipo, también sale en la lista debug de Hidden Palace.
- Gator es el Badnik cocodrilo que no se usa en la build de Simon Wai.
- Bbat es el murciélago que sale en Hidden Palace Zone.
- Oct es Octus, el pulpicorcho que sale en Oil Ocean Zone.
Estas mismas líneas salen duplicadas en la lista debug de Emerald Hill, pero no se usan porque el juego avisa que la lista debug de Emerald Hill debe tener 18 entradas, y los enemigos de Hidden Palace están después de la número 18.
Este pedazo de código sin compilar también indica que el orden de las zonas iba a ser cambiado desde mucho antes. La lista debug de Emerald Hill está como Zona 00, el cual es la de Green Hill en esta build pero es Emerald Hill en las otras builds. Igualmente, Hidden Palace sale como Zona 08, siendo su lugar en todas las builds hasta la final.
El segundo set de editXtbl etiquetas parece corresponder con la lista debug de Sonic 1, pero no coincide exactamente. Notablemente, las listas edit2tbl y edit6tbl tienen entradas prefijadas con asteriscos, que no aparecen en el juego final. Los asteriscos existen en edit7tbl en Sonic 1 REV00 únicamente.
Restos misceláneos/versiones antiguas de objetos#
Dentro de la ROM, mezclado junto con las tablas de símbolos y el código fuente del modo debug parecen haber restos de contenidos de RAM del ensamblador, incluyendo código ensamblado y símbolos adicionales. Hay que notar que los datos son de una build antigua, y que algunos objetos tienen código diferente.
Jefe en Emerald Hill Zone#
Watch on YouTubeLas diferencias recaen en posicionamiento diferente, falta de hitbox en el taladro, y un movimiento de bobbing extraño en la carroza. Las ruedas no detectan colisión con el suelo hasta que se caen de la carroza.
Este video fue eliminado y no hay un video de respaldo ---->