the cutting room mirror

February 1990

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

This is a sub-page of Prerelease:Sonic the Hedgehog (Genesis).

Watch on YouTubeSome news footage of Sega R&D which aired about four months before the Tokyo Toy Show in June 1990. Although brief and not immediately obvious, this video is the earliest known footage of Sonic the Hedgehog: It shows a portion of prototype collision source code on a computer and a brief snippet of blurry gameplay on an adjacent TV screen.

The few seconds of "game" footage make it clear that this is extremely early in development, with crudely basic placeholder graphics and a test level with slopes, thought to be for testing loop-de-loops (in Sonic the Hedgehog, loops work by swapping out chunks on the fly; parts of what look like the bottom of a loop and the top of a loop can be seen here). There is also a small rectangle, which may or may not be the player, as well as a glitchy sprite with two frames whose purpose is unknown. There is an orange/yellow bar on the left side of the screen.

Video

Proto

Present in the available prototype are objects ID 02 and 03, both of which line up with the room seen in the video. Their coordinates are fixed, and what function they were intended to serve (if any) is unknown.

Below this is a partial file list that can be seen in the video (the files with a ¥ symbol at the end are directories to put outputted assembly files inside once the game has been compiled):

                               ENEMY.ASM
                FCOL.ASM       FCOL.BAK
FCOL3.ASM       GAME.ASM       INT.ASM
LOGO.ASM        MACRO.LIB      MAIN.ASM
ML.EVT          ML.S28         OBJ¥
S               S.CMD          SCORE.ASM
SOUND¥          TR¥

The missing source files, based from Sonic CD's PC version, are speculated to be:

ACTION.ASM      ACTSET.ASM
EQU.LIB

Afterwards is some source code that can be seen before the programmers go inside the file FCOL3.ASM in the video. The file showcased is unknown, though it may be an early version of FCOL.ASM, the file where all main collision code is stored:

                         ,a2
        lea     scdtblwk,a2
        move.w  d0,d6
        andi.w  #7,d6
        lsl.w   #8,d0
        adda.w  d0,a2

        move.w  d2,d1                    ; 
        lsr.w   #4,d1
        move.w  d3,d1                    ; 
        rol.w   #1,d1
        andi.w  #$1e,d1
        addx.w  d1,d0

        swap    d4
        swap    d5

Afterwards is the source code that can be seen inside FCOL3.ASM during the video:

        public  fcol,fcolj,fcole

*cd_walk                equ     0*2
*cd_jump                equ     1*2
*cd_up                  equ     2*2
*cd_down                equ     3*2
 
updotmax        equ     -4
downdotmax      equ     4
jumpdotmax      equ     8
 
;sprvo          equ     $1c              ;1
;sprho          equ     $1d              ;1
;sprvs          equ     $1e              ;1
;sprhs          equ     $1f              ;1
;------------------------------------------------------------------------------
;       foot colition
;
fcol:
        move.w  yposi(a0),d4
        move.b  sprvo(a0),d1
        add.b   sprvs(a0),d1
        ext.w   d1
        add.w   d1,d4
        move.w  xposi(a0),d5
        move.b  sprho(a0),d1
        ext.w   d1
        add.w   d1,d5
        move.w  xspeed(a0),scrhithz
?loop:
        move.w  d4,d2                    ; 
        move.w  d5,d3                    ; 
        moveq   #0,d0
        move.b  sprhs(a0),d0
        tst.w   xspeed(a0)
        bpl.b   ?jump
*       btst.b  #cd_right,cddat(a0)
*       beq.b   ?jump
        neg.w   d0
?jump:
        add.w   d0,d3                    ; 
        bsr.w   scdchk
        tst.w   d1
        beq.b   ?end
        bpl.b   ?down
?up:
        cmp.w   #updotmax,d1
        blt.b   ?nomove
        add.w   d1,yposi(a0)
?end:
        rts
?nomove:
        bsr.b   hoseihsub
        bra.b   ?loop
        move.w  #0,xspeed(a0)
        rts
?down:
        move.w  d1,d6
        swap    d6
?down2:
        move.w  d4,d2                    ; 
        move.w  d6,d3                    ; 
        moveq   #0,d0
        move.b  sprhs(a0),d0
        tst.w   xspeed(a0)
        bpl.b   ?jump3
*       btst    #cd_left,cddat(a0)
*       bne.s   ?jump3
        neg.w   d0
?jump3:
        add.w   d0,d3                    ; 
        bsr.w   scdchk
        tst.w   d1
        beq.b   ?end2
        bpl.b   ?down1
?up2:
        cmp.w   #updotmax,d1
        blt.b   ?nomove2
        neg.w   d1

FCOL3.ASM doesn't exist in the final. All of its code was probably removed at some point.