Who Shot Johnny Rock? "I" said the sparrow, "with my bow and arrow. I shot Johnny Rock."
|
|
To do: |
Debugging Files#
|
|
This needs some investigation. |
Two unused files can be found on the disc, both of which contain code and strings meant for a debugging mode. This mode would've been controlled using a keyboard and a CD-i dev kit.
cdi_rockd#
The first, larger file is cdi_rockd, a debug version of the used file cdi_rock. Its contents can be sorted into three segments.
The first segment deals with the gameplay itself, and contains lists of variables, special cutscenes, and target types. There's also a huge list of every cutscene at the segment's beginning, which has been excluded for viewing purposes.
DOG DEBUG MENU
Can't install keyboard signal
start.c
JR_timer_set: Unable to install disc_error task
cdi_rmail
play_buffers
jr_casino_index
jr_warehouse_index
jr_garage_index
jr_pool_hall_index
jr_clues
jr_this_clue
jr_repeat_random_place
jr_max_random_count
jr_goto_after_random
jr_got_this_clue
jr_random_count
jr_place_bits
jr_max_repeat
jr_who_did_it
jr_mansion
jr_pool_hall
jr_garage
jr_casino
jr_warehouse
jr_in_warehouse
jr_got_to
jr_office
jr_lucky_no
jr_office_count
jr_hand_go_to_mansion
jr_in_office
jr_ammo_again
jr_got_this_no
PCB debugging is %s
ON
OFF
editmem: Error: %d
Context flags are 0x%x.
Context flags_sys are 0x%x.
Context status is 0x%x.
Rect display is %s
Rect debugging is %s
Jump to what scene number?
Jumping to scene %d
Illegal scene (%d)
RP_DEBUG (0x%x)?
%x
BEEN_TO (0x%x)?
*******
jr_this_clue=%d jr_jr_had_go_to_mansion=%d jr_office_count=%d
pool_hall=%d casino=%d warehouse=%d
garage=%d
jr_this_clue=%d jr_in_office=%d
*******
c - CTE
d - Toggle pcb_debug
e - editmem
f - been_to reset
g - JR_fmv_and_play_continue
G - Display context PCB
h - hit_rect_shorter
H - hit_rect_taller
j - Jump to scene
k - Kill play.
K - Generate errors
p - JR_fmv_and_play_pause
P - RP Context flags
r - toggle jr_rect_debug
R - set rp_debug
s - callback_dump
v - display game info
w - hit_rect_skinnier
W - hit_rect_wider
x - hit_rect_left
X - hit_rect_right
y - hit_rect_up
Y - hit_rect_down
z - toggle jr_rect_display
. - rect_print
$ - Set money to $2000
^ - Set money to $200
Generating error.
dist_logo_show
distribution.c
dist_logo_hide
ROCK FMV PIC
No fmv cartridge!!!
fmv.c
SETTING FMV POSITION FOR PAL DISPLAY!
%s...
Positioning window
Ack!
SETTING FMV POSITION FOR NTSC DISPLAY!
Can't get handle to FMV map
JR_fmv_play: sector start: %d
Error pausing FMV.
JR_fmv_continue
Error continuing FMV.
Error pausing play.
Error continuing play.
JR_hit_rect_on: Exceeded max rectangles (%d)
hitrect.c
DANGER! Pause %d too long! fixing!
(((PAUSING FOR %d ticks (scene delay = %d) @ %d)))
Hit rect: %d
hit_rect_up: Already at top!!!
hit_rect_down: Already at bottom!!!
hit_rect_left: Already at left edge!!!
hit_rect_right: Already at right edge!!!
hit_rect_shorter: Can't get any shorter!!!
hit_rect_taller: Can't get any taller!!!
hit_rect_skinnier: Can't get any skinnier!!!
hit_rect_wider: Can't get any wider!!!
[%d]=(%d,%d, %d,%d)
%d is not a valid hitrect index, max=%d, mask=0x%x
illegal left bound (%d)
illegal right bound (%d)
illegal top bound (%d)
illegal bottom bound (%d)
(((PAUSE DONE)))
JR_scene_start: %s (%d)
scene.c
JR_scene_start (%d)
JR_scene_start: Scene %d does not exist! Aborting...
JR_scene_branch (%d)
--INTERRUPT--
Scene_done
JR_mm_start
mainmenu.c
Saved scene = %d
Invalid ID to select: %d
Failed to blit object[%d]
Invalid ID to deselect: %d
BEGINNING GAME (money = %d, bullets = %d)
CONTINUING GAME (money = %d, bullets = %d)
DOING CREDITS
DOING HELP
JR_town_start
town.c
going to the office value %d
going to the ammo store jr_money %d jr_ammo_again %d
going to the warehouse value %d
going to the garage value %d
going to the pool hall value = %d
going to the casino value %d
going to the mansion value %d
JR_clue_start jr_curr_scene %d
clue.c
jr_curr_scene - SCENE195 = %d clue_next = %d
PICK: P: %4d R: %4d
gameops.c
gameops_next_scene with < 0 money.
JR_gameops_next_scene: function type %d
next_scene: NXT_DIED
next_scene: NXT_KILLINNOCENT
### KILLED an innocent person
next_scene: NXT_ENTCASINO
next_scene: NXT_CASINOWHAT
next_scene: NXT_GIVECLUE
next_scene: NXT_PICKMAP
next_scene: NXT_RANDOMSCENE
NXT_RANDOM: case 1 scene = %d end_scene = %d addr: 0x%08x
next_scene: NXT_ENDRANDSCENE
next_scene: NXT_ENTGARAGE
next_scene: NXT_ENTWAREHSE
next_scene: NXT_ENTPOOLH
next_scene: NXT_ENTMANSION
next_scene: NXT_POOLHCLUE
next_scene: NXT_WAREHSECLUE
next_scene: NXT_GARAGECLUE
next_scene: NXT_PICKCLUE: /* called from casino *
next_scene: NXT_PICKLUCKNO
next_scene: NXT_PIKUNDRTAKR
next_scene: NXT_BOMBDEAD $$ = %d
next_scene: NXT_PICKFLOWERMAN
next_scene: NXT_GAMEOVER
next_scene: NXT_YOUWIN
next_scene: NXT_CALLATTRACT
next_scene: NXT_194
next_scene: NXT_207
next_scene: NXT_DEFAULT
NEXT func DEFAULT should not be passed to gameops.c
next_scene: NXT_START
Unknown NEXT func (%d)
hitrect: KILLINNOCENT
hitrect: COMBNOA0
hitrect: COMBNOA1
hitrect: COMBNOA2
hitrect: COMBNOA3
hitrect: COMBNOA4
hitrect: COMBNOA5
hitrect: COMBNOB0
hitrect: COMBNOB1
hitrect: COMBNOB2
hitrect: COMBNOB3
hitrect: COMBNOB4
hitrect: COMBNOB5
hitrect: LUCKNO0
hitrect: LUCKNO1
hitrect: LUCKNO2
hitrect: LUCKNO3
hitrect: LUCKNO4
hitrect: LUCKNO5
hitrect: MANBUST
hitrect: BLUEDRESSPIC
hitrect: GWASHINGTON
hitrect: MONALISA
hitrect: WOMANBUST
hitrect: CAT
hitrect: PLATE
hitrect: INDIAN
hitrect: MODERNPIC
hitrect: COATOFARMS
hitrect: BOYINREDPIC
hitrect: BLUEVASE
Unknown HITRECT func (%d)
PICK: R: %4d M: 0x%08x A: 0x%08x P: %4d
BAD SAVE VERSION!
Checking value %d against %d
nofmv_show
nofmv.c
Play failed!
play.c
Done Check:
PCB: Stat 0x%04x, Sig 0x%04x (%03d)
FMV: Stat 0x%04x, Sig 0x%04x (%03d)
FMA: Stat 0x%04x, Sig 0x%04x (%03d)
ERRNO: %03d DISC POS: %d
Unknown FX number (%d)
JR_timer_set: Unable to install timer task
timer.c
JR_timer_delete: Unable to delete timer task
sm_out failed
soundmap.c
JR_task_func_once: Unable to install task
task.c
func_ounce_handler: Unable to delete task
JR_calib_start
calibration.c
DANGER! FAILED CALIBRATION: BAD SHOTS!
AVG POINT1: (%d,%d)
AVG POINT2: (%d,%d)
DANGER! FAILED CALIBRATION: SHOTS CROSSED!
calib_timeout
practice_start
practice.c
Mucking with old matte %d new matte %d
practice_timeout
JR_controller_start
controller.c
Controller set to: %d
missed_show
missed.c
JR_nvram_test
nvram.c
JR_nvram_test found an existing save file...
JR_nvram_test enough space found...
JR_nvram_save: save failed, deleting junk save file.
JR_nvram_restore: restore failed, deleting unusable save file.
Johnny Rock NVR file does not exist. Creating
Error creating '%s' file
JR_cross_start
cross.c
JR_gen_start
genfmv.c
Couldn't find FONT8X8!
CD_disc_error.c
PCB: Stat 0x%04x, Sig 0x%04x (%03d)
FMV: Stat 0x%04x, Sig 0x%04x (%03d)
FMA: Stat 0x%04x, Sig 0x%04x (%03d)
ERRNO: %03d DISC POS: %d
The second segment focuses on the game engine and the CD-i itself, and includes some FMV debug functions near its middle.
CV_cp_calibrate: Can't send CALIBRATE letter.
cp_calibrate.c
CD_rp_load_map(): error during seek to map.
CD_rp_load_map.c
Couldn't load map file. Path %d PCB_Chan 0x%0x
Unknown status, assuming error
Starting FX!
CD_rp_task.c
CD_rp_task: invoking effect %d
CD_rp_task: invoking effect %d buffer index %dID %d
CD_rp_task: PLAY_DONE flag set
RP PLAY DONE
RP AUDIO BUF FULL
RP DATA BUF FULL
RP FX TIMER
RP VIDEO BUF FULL
RP FMV PIC
RP FMV LPD
RP FMA UNF
CD_rp_play: Play attempt with uninitialized context.
CD_rp_play.c
CD_rp_play: Map load failed.
Error! curAsset %d Audio PCL at 0x%08x has type %ld!
audio in, PCL Buf 0x%08x
Error! curAsset %d Data PCL at 0x%08x has type %ld!
data in, PCL Buf 0x%08x
FX occurs before buffer is ready! FX %d Buffer %d Type %d
*FX alarm went off*
SetFMVTrigger: ERROR setting FMV triggers
ClearFMVTrigger: ERROR clearing FMV triggers
SetFMATrigger: ERROR setting FMA triggers
ClearFMATrigger: ERROR clearing FMA triggers
CD_rp_play(): map read failed,
retry attempt #%d
trying backup map at sector %ld
I give up, calling done_func
PlayFMVCleanup: ERROR aborting FMV
PlayFMVCleanup: ERROR aborting FMA
Error during play (stat = 0x%x)!
FMV stat = 0x%x
FMA stat = 0x%x
PlayDone: Play is done!
Setting PCL 0x%x MapLoc 0x%x Size %d
SetupFMV: ERROR setting FMV triggers
SetupFMV: ERROR setting FMA triggers
CD_rp_play(): cur map file has no channel %d
Couldn't start FMV decoder?!? Stat = 0x%x
Couldn't start FMA decoder?!? Stat = 0x%x
Playing record at sector %ld
Couldn't play record?!?
Error! curAsset %d Video PCL at 0x%08x has type %ld!
submode 0x%02x
coding 0x%02x
video in, PCL Buf 0x%08x
Setting pixmap %d's LAT to buffer %d
RpSetFMVTrigger: ERROR setting FMV triggers
RpClearFMVTrigger: ERROR clearing FMV triggers
RpSetFMATrigger: ERROR setting FMA triggers
CD_callback: Unhandled signal received: class %d, value %d
CD_callback_init.c
CD_callback_attach: Illegal callback structure.
CD_callback_attach.c
CD_callback_replace: Illegal callback structure.
CD_callback_replace.c
CD_callback_remove: Illegal callback structure.
CD_callback_remove.c
Callbacks:
CD_callback_dump.c
Class %2d:
Value %2d (0x%08x):
0x%08x,0x%08x
Value * (0x%08x): 0x%08x,0x%08x
%s
No Label
0x%08x,0x%08x
CD_mm_send failed for new event
CD_cp_flush.c
CD_mm_send failed requeued letter (type=0x%x)
Can't create cp mailbox.
CD_cp_install.c
CP install failed.
cdi_cd_cp
cdi_cp_mail
Incompatible versions:
libraries (%d), cursor process (%d)
CD_cp_mail: Can't send letter for type %d.
CD_cp_mail.c
CD_cp_qsize: Can't send Q_SIZE letter.
CD_cp_qsize.c
CD_cp_setlimits: Can't send OP_CP_LIMITS letter.
CD_cp_setlimits.c
CD_ifx_get_params(): param too big (%d/%d)
CD_ifx.c
CD_ifx_perform(): bad fx (%d)
CD_pm_show.c
CD_tasks: execute
CD_task.c
(0x%x) recursion (%d)
task %d:0x%x
Could not allocate task - task array full
CD_task_install.c
Can't open FMV video path
CD_applinit.c
FMV Paths opened
Opened Full Motion descriptors
Load module %s:%d
CD_appl_init: Can't load module: %s into plane %d
CD_appl_init: Can't open file '%s'
Can't ss_enable controls
CD_cdroot.c
CFREE: _srtmem error %d 0x%x
CD_cfree.c
CD_malloc grabbing %d bytes from %x
CD_malloc.c
(%s:%d)
CD_free: INVALID POINTER : 0x%x SYNC : 0x%x
CD_free releasing %d bytes at 0x%x
init
Can't get init module
CD_get_plane.c
line_event
CD_vd_open : csd_devname fails
CD_vd_open.c
CD_vd_open : Could not open %s
Can't get name of monitor.
vd_compat.c
Can't get monitor parameters.
LI=
Can't determine the monitor type.
625
TV
CD_rp_continue: Play not paused. Context 0x%x
CD_rp_continue.c
CD_rp_continue: Physical play done. Context 0x%x
PCB: Stat=0x%x Sig 0x%x Rec=0x%x
CD_rp_debug_pcb.c
AChan=0x%x Chan=0x%x
Video PCLs:
Audio PCLs:
Data PCLs:
Channel %d:
PCL=0x%x Ctrl=0x%x Smode=0x%x
Type=0x%x Sig=0x%x Buf=0x%x
BufSz=%d
CD_rp_dump_map(): bad key [0x%04x]
CD_rp_dump_map.c
chanMask 0x%08x aChanMask 0x%04x
start sector %ld offset to next %d
# Video Assets: %d
Size %3d
Buff %3d
# Audio Assets: %d
# Data Assets: %d
CD_rp_pause: Play already paused. Context 0x%x
CD_rp_pause.c
CD_rp_pause: Attempting pause before a sector read.Context 0x%x
CD_rp_pause: Physical play is done. Context 0x%x
Play is already finished!
CD_rp_stop.c
Tried to start FX while play paused!
rpfx.c
No more FX (done %d of %d)!!
During play, FX offset %d startPos %d
During play, alarm for FX #%d @ %d cur_pos %d
After play, alarm for FX #%d @ %d
deleting rp fx alarm %d
Can't set alarm for FX!
alarm %d set to occur in %d ticks
The last segment features the CD-i graphics editor/second segment-esque strings that's ubiquitous among the debug files of CapDisc's games. It also contains the text of a memory editor made by 'VDS and JHO' - an earlier version of this editor can be seen in the debug files of Axis & Allies and Effacer: Hangman from the 25th Century.
Quit
New Control Table
Dissassemble
Enter Instruction
Help
Search for Instruction
Insert NOPs into the LCT
1.02
CD control table editor V%s
Starting line?
Number of lines?
8 (normal)
4 (double)
8 (high)
Half
Full
Black
Blue
Green
Cyan
Red
Magenta
Yellow
White
OFF
CLUT8
CLUT7/RL7
CLUT7/RL7 (Dual)
DYUV
CLUT4/RL3
RGB555
QHY
END
IFCA
IFCB
Matte Flag Off
Matte Flag On
Matte Flag Off + IFCA
Matte Flag On + IFCA
Matte Flag Off + IFCB
Matte Flag On + IFCB
1
2
A over B
B over A
x2
x4
x8
x16
Normal
Runlength
Mosaic
Bit = 0
Bit = 1
CKey = FALSE
CKey = TRUE
MFlag 0 off
MFlag 0 off & CKey FALSE
MFlag 0 on
MFlag 0 on & CKey TRUE
MFlag 1 off
MFlag 1 off & CKey FALSE
MFlag 1 on
MFlag 1 on & CKey TRUE
off
on
Line?
Column?
clut number
red value
green value
blue value
matte register
Enter opcode
matte flag
icf
x position
Enter brightness
Enter color
clut bank
Not allowed!
Enter mode
Enter pixel repeat
Enter Bits/pixel
icf value
Enter plane A ICM
Enter plane B ICM
Enter # mattes
external video
enable pixel hold
pixel hold factor
Enter plane order
mixing: 0=OFF, 1=ON
Enter plane A TCI
Enter plane B TCI
y start value
u start value
v start value
Write failed, errno=%d!
FCT 0
FCT 1
LCT 0
LCT 1
PAL LCT 0
PAL LCT 1
Decode which control table?
8bpN
8 bits/pixel, Normal resolution
4bpD
4 bits/pixel, Double resolution
8bpH
8 bits/pixel, High resolution
Any color can be at 1/2 intensity
??
Illegal
--
Off
c4
Clut 4 or RunLength 3
c7
Clut 7 or RunLength 7
77
Clut 7/7 or RunLength 7/7 (dual clut)
c8
Clut 8
dv
r5
qy
???
Illegal value
end
Ignore all commands in higher registers
icfa
Change ICF value for plane A
icfb
Change ICF value for plane B
MFoff
Turn Matte Flag off
MFon
Turn Matte Flag on
offIa
Turn Matte Flag off and change ICF for plane A
onIa
Turn Matte Flag on and change ICF for plane A
offIb
Turn Matte Flag off and change ICF for plane B
onIb
Turn Matte Flag on and change ICF for plane B
nml
rl
RunLength enabled
mos
Mosaic enabled
Illegal mode
b0
Transparency bit 0
B1
Transparency bit 1
cF
Color Key FALSE
cT
Color Key TRUE
m0F
Matte Flag 0 FALSE
m0FcF
Matte Flag 0 FALSE or Color Key FALSE
m0T
Matte Flag 0 TRUE
m0TcT
Matte Flag 0 TRUE or Color Key TRUE
m1F
Matte Flag 1 FALSE
m1FcF
Matte Flag 1 FALSE or Color Key FALSE
m1T
Matte Flag 1 TRUE
m1TcT
Matte Flag 1 TRUE or Color Key TRUE
Never transparent
Always transparent
CLUT<clut number> <red> <green> <blue>
<clut number> 0 - 63
<red>, <green>, <blue> 0 - 255
72
5.5
MR<register> <op> <matte flag> <icf> <x position>
<register> 0 - 7
op
<matte flag> 0 - 1
<icf> 0 - 63
<x position> 0 - 1023
83
5.10.3
BKCOL <color>
color
91
5.13
CLTB <bank>
<bank> 0 - 3
DLS <address>
57
4.5.2.2
DPRM <mode> <pixel repeat> <bits/pixel>
mode
<pixel repeat> 2, 4, 8, or 16
bits/pixel
59
4.6.1
ICF<plane> <value>
<plane> A or B
<value> 0 - 63
79
5.9
ICM <icm A> <icm B> <# mattes> <external video> <clut bank>
icm A
icm B
<# mattes> 1 - 2
<external video> 0 - 1
<clut bank> 0 - 1
58
LINK LCT <address>
56, Note 1
4.5.1
MCOL<plane> <red> <green> <blue>
<plane> A or B
<red> 0 - 255
<green> 0 - 255
<blue> 0 - 255
76
5.7.2.2
PHLD<plane> <enable> <value>
<plane> A/B
<enable> on/off
<value> 0 - 255
86
5.11.1.1
NOP
56
PO <value>
<value> B over A or A over B
75
5.7.1
SIG video interrpt
74
5.6
TCOL<plane> <red> <green> <blue>
TCI <mix> <tci a> <tci b>
<mix> on/of(f)
tci a>, <tci b
5.7.3
YUV<plane> <y> <u> <v>
<y> 0 - 255
<u> 0 - 255
<v> 0 - 255
61
4.6.2
Starting row
Starting column
Number of rows
Number of columns
Any Clut Instruction
Specific Clut Number
Any Matte Instruction
Specific Matte Register
Look for:
CLUT number
Matte Register
Start line?
Step (-1 or +1) ?
Instruction not found.
At line %d , column %d : %s
CLUT
MR
BKCOL
CLTB
DLS
DPRM
ICF
ICM
LCT
MCOL
PHLD
NOP
PO
SIG
TCOL
TCI
YUV
Choose Instruction Type:
Green Book Reference: Vol. I, V.%s, page V-%s
%s
%2d) %%-%ds
==>
<%s> is one of:
%-5s
%s
Allowed on plane A or B (may be set independently on each)
(different opcodes on each plane)
plane A only
CLUT%-2d %3d %3d %3d
CLTB set bank %-5d
DLS 0x%-13x
ICF%c %-14d
LINK
LCT 0x%-8x
MCOL%c %3d %3d %3d
PHLD%c %-3s %3d
on
off
%-19s
NOP
PO %-16s
B ovr A
A over B
SIG video interrupt
TCOL%c %3d %3d %3d
YUV%c %3d %3d %3d
ERROR in the CT??
Black
1/2 Blue
1/2 Green
1/2 Cyan
1/2 Red
1/2 Magenta
1/2 Yellow
1/2 White
Blue
Green
Cyan
Red
Magenta
Yellow
White
BKCOL %-13s
Dumping FCT #%d, starting line=%d numlines=%d
%03d %s
Dumping LCT #%d, start line=%d numlines=%d
%3d
%s
: invalid address
: invalid array reference
: alignment error
%20s[] 0x%06x [%d]
%20x 0x%06x [%d]
= 0x%02x
= 0x%04x
= 0x%08x
%20s[0]:
%20s :
usage:
r [<addr> [<len>]]
read memory
w <addr> <byte1> [...]
write to memory
m <addr1> <addr2>
CD_mem_diag()
& print addresses
* print values
q quit editor
<addr> may be one of:
[0-9]*
decimal quantity
0x[0-9a-fA-F]
hexadecimal quantity
&<name>
address of <name>
<name>
address <name> points to
<name>[<index>]
address of element <index> in <name>
Memory Editor V2.0 (by VDS and JHO) ***
%s usage: w addr [b1 [b2 [...]]]
usage: m <addr1> <addr2>
%-30s%-50s
device table
path table
process table
event table
Address Size Type Tag
0x%08x-%08x %8d %-8.8s %s
UNKNOWN
FREE
MODULE
DMAP
DMAPDESC
SMAP
SMAPDESC
DBLOCK
LINE ADR
PROC MEM
DEV MEM
PATH BUF
MOD MEM
RES NODE
RES TAG
%s (line %d): WARNING: %d:
%s (line %d): ERROR: %d:
CD_ap_open : csd_devname fails
CD_ap_open.c
CD_ap_open : Could not open %s
CD_iff2fct_clut.c
cdi_driversd#
The second, smaller file is cdi_driversd, a debug version of the used file cdi_drivers. It has 12 additional kilobytes of data, including this set of strings:
/cd
Cannot chd to /cd (errno %d)
/cd
Cannot chx to /cd (errno %d)
dvr_name = '%s', filename = '%s'
About to load new driver
Driver load failed (errno = %d)!
About to load application %s
No System RAM, using Plane B
Error %d loading %s
About to chain to application %s
Error %d chaining to %s