the cutting room mirror

es

This article has a talk page!
view on tcrf.net

This is a sub-page of Proto:Sonic the Hedgehog 2 (Genesis)/Nick Arcade Prototype.

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.
Discuss ideas and findings on the talk page.

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

14 de Septiembre, 1992 a Beta 4.

Beta 5 en adelante

"¿Y tú quien eres?"
"Pero, Sega dijo que podría-" ¡Yo soy Sega!.

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

Watch on YouTube

Watch on YouTube

Demo 3

Demo 4

Watch on YouTube

Watch on YouTube

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

Sonic2SonicLookUpEarly.png Sonic2SonicCrouchEarly.png

Sonic2SonicLookUpFinal.png Sonic2SonicCrouchFinal.png

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

Isn't Tails adorable?

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: Sonic2NickFireball.gif

(Source: Sonic Retro, TCRF original research)

Gráficos sin usar#

Sonic#

Gráfico

Frame ID

Descripción

Sonic2proto_LookingAtYou.png Sonic2TurnAnim.gif

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
4C-4F
58-5B
64-67

Sprites de Sonic corriendo más rápido de lo normal.

44-47
50-53
5C-5F
68-6B

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.

Sonic2NickChemAnim.gif Sonic2NickChemBelt.gif

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.

Sonic2NickPropeller.gif Sonic2NickLiquid.gif

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.

Sonic2BubblerMother.gif Sonic2BubblerMotherProj.gif

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#

Sonic2Octus.png Sonic2NAOctusFloating.gif Sonic2NAOctusFiring.png
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#

Sonic2StegoWalk.gif Sonic2StegoRun.gif
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#

Sonic2Gator.gif
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:
Grabar su comportamiento.

Sonic2Aquis.png
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.
  • Sonic2AquisAltBody.gif 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#

Sonic2NickBFish.gif Sonic2NickBFishJump.gif
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#

Sonic2LamppostEarly.png Spr_lamppost.gif
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
Sonic2MonitorStatic.gif
00: Monitor estático. No hace nada si se rompe. En el juego final también queda sin usar y daña al jugador.

Sonic2MonitorEggman.png
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.

Sonic2MonitorQuestion.png
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.

Sonic2MonitorSpring.png
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

Watch on YouTube

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 ---->