the cutting room mirror

FIFA 97 (SNES)

FIFA 97 is a soccer (or football) game on the Super Nintendo.

Whoa, it's the Gold Edition. Those black spots on the ball must be onyx.

Debug Text#

Many chunks of debug text are left in the ROM. Lotta chunks.

During development, this text was output to an external device for debugging purposes. A function to display this text starts at SNES address A9FF8C, though it is not called at any point. The function itself makes dozens of calls to a printf-like function which was later replaced with a single RTL (return long) instruction, effectively disabling the text output.

Chunk 1 - Players#

Starts at 0x14EBBF:

PT_SHOOTOUT
PT_GK_DEFEND_PENALTY
PT_GK_DROPKICK
PT_GK_GOALKICK
PT_GK_PUNCH
PT_GK_DIVECATCH
PT_GK_CATCH
PT_GK_POSITION
PT_LEAVEGAME
PT_SUBOFF
PT_GET_CARDED
PT_CELEBRATE
PT_VICTORY_RUN
PT_PENALTY_KICK
PT_FREE_KICK
PT_CORNER_KICK
PT_THROW_IN
PT_JUMP
PT_DIVING_HEADER
PT_STUMBLE
PT_FALL_INJURED
PT_PUSH
PT_ELBOW
PT_SLIDE
PT_TACKLE
PT_KICK_BALL
PT_MARK_OPPONENT
PT_DRIBBLE
PT_CATCH_BALL
PT_POSITION
PT_RECEIVE_KICKOFF
PT_KICKOFF
PT_NO_TASK
** player 
waitTime=%d
*SET*
NULL
p->joypad %s
p->prevBallDist=%u
p->defaultMaxSpeed=%u
p->superpower=%u
p->bodyAngle=%d
p->destAngle=%d
p->notReady=%d
p->jumpHeight=%d
p->peakTime=%d
p->flightTime=%d
p->facing=%u
p->line=%u
p->sprintTime=%u
ANIM_seqID(p)=%u
p->anim.shapeID & 0x7fff=%u
p->anim.time=%u
p->anim.frameTime=%u
p->anim.note=%u
p->anim.memID=%u
p->anim.memID2=%u
p->anim.flip=%u
p->anim.frameIndex=%u
p->anim.facing=%u
p->anim.doturn=%u
p->anim.done=%u
p->notReady=%u
p->position 
p->destination 
p->destDist 
p->ballDist 
p->velocity 
task=%s, taskState=%d

Chunk 2 - Teams#

Starts at 0x14F2BC:

team %d:
t->playersleft=%u
t->setplay=%u
t->strategy=%u
t->processPlayerID=%u
t->ballPlayer = 
t->zoneBoundary[i][0]=%d
t->zoneBoundary[i][1]=%d

Chunk 3 - Game State#

Starts at 0x14F49F:

GS_SHOOTOUT
GS_CARD
GS_GOTO_DEST
GS_GOALIE_CAUGHT_BALL
GS_LEAVE
GS_SUB
GS_FOUL
GS_GOALIE_KICK
GS_GOALKICK
GS_FREEKICK
GS_PENALTY_KICK
GS_SCORE_GOAL
GS_CORNERKICK
GS_THROWIN
GS_PLAY
GS_KICKOFF
GS_STOP
Game:
totalTime=%u
state=%s 
score=%d,%d,%d

Chunk 4 - Current Match#

Starts at 0x14F5F3:

gCurrentMatch:
gCurrentMatch.zone1[i]=%d
gCurrentMatch.zone2[i]=%d
gCurrentMatch.zone3[i]=%d
gCurrentMatch.zone4[i]=%d

Chunk 5 - Referee#

Starts at 0x14F72C:

RT_CHECKINJURY
RT_SHOOTOUT
RT_SHOWOFFSIDE
RT_SHOWSCORE
RT_PROCESS_SUB
RT_CARD_PLAYER
RT_CALL_FREEKICK
RT_START_GAME
RT_NO_TASK
Referee: 
task=%s/%d 
start=%d
timer=%d
inextra=%d

Chunk 6 - Ball#

Starts at 0x14F860:

Ball:
Ball.position 
Ball.prevposition 
Ball.startPosition 
Ball.landingPosition 
Ball.outPosition 
Ball.headerPosition 
Ball.chestPosition 
Ball.flightDistance 
Ball.velocity 
Ball.moveDist 
Ball.deltaCurveDist=%d
Ball.peakHeight=%d
Ball.trajectoryTime=%d
Ball.startTime=%d
Ball.flightTime=%d
Ball.elapsedTime=%d
Ball.xoffset=%d
Ball.zoffset=%d
Ball.headertime=%d
Ball.headerJumpTime=%d
Ball.headerJumpHeight=%d
Ball.chesttime=%d
Ball.kickjoystate=%d
Ball.curveVx=%d
Ball.curveVz=%d
Ball.bounceRatio=%u
Ball.speedRatio=%u
Ball.rollRatio=%u
Ball.netanim=%u
Ball.out=%u
Ball.insideNet=%u
Ball.hitNet=%u
Ball.hold=%u
Ball.bounceCount=%d
Ball.hide=%u
Ball.shotongoal=%u

Chunk 7 - Camera#

Starts at 0x14FDA7:

Camera.target 
Camera.targetPosition 
Camera.target2Position
Camera.destTarget2Position
Camera.scrposition 
Camera.scrcentre 
Camera.xvel=%d
Camera.yvel=%d
Camera.maxcamx=%d
Camera.maxcamy=%d
Camera.panningMode=%u
Camera.onTarget=%u

(Source: Original TCRF research)

References#


  1. MobyGames↩︎