Development:NARC (Arcade)
This page details development materials of NARC (Arcade).
The source code and related development files for NARC were uploaded to the Historical Source Github repository in April 2021.
This included:
- Source code for Version 7.00 of NARC (as per NARCHELP.ASM).
- Program ROMs for v6.00 and v7.00 (the former had not previously been dumped at the time).
- Graphics ROMs matching those already dumped for the game.
- Sound ROMs that had not previously been dumped at the time.
- Various text documents outlining parts of game code and notes on the game/its development.
According to NARC.ASM, development started on August 1, 1987.
Contents
Text Documents
DUMP.DOC
A summary of location testing of v1.91 of the game around America on January 21, 1989. "Dump" seems to refer to the register dumps listed in the document from where the game crashed on location that are catalogued there to aid bug fixing.
The following information was obtained from the Version 1.91 test games on Saturday afternoon 1/21/89: Chicago Game Co. 527 Plays......0 Dumps of any kind No Mr. Big Kills Only 2 trips to the silver safe. ---------------------------------------------------------------------------------- Times Square 876 Plays......2 "Survived Lockup" No Mr. Big Kills Continuous Buy-in observed in the Silver safe and beyond. A0 A1 A2 A3 A4 A5 A6 A7 A8 1070C90 FFA46560 20 FFE71760 8B006D 22000 2D02000 104C0F0 10709F0 10709F0 FF926120 20 FF914230 8B006D 22000 2000 104C0F0 10709F0 ---------------------------------------------------------------------------------- Alladin's Castle 704 Plays.......1 Watchdog Mr. big killed twice. Report that helicoptor can be made to disappear by violent car action. A0 A1 A2 A3 A4 A5 A6 A7 A8 21 0 20030 FFE6E210 720000 7070 AAA0707 1023470 5 ---------------------------------------------------------------------------------- Galaxy Game Center 617 Plays......1 Lockup No Mr. Big Kills. Players not able to find blue card in drug lab witnessed. A0 A1 A2 A3 A4 A5 A6 A7 A8 106FCD0 FFE75550 10010 FF908B30 600A46 70E15 CCCC062F 0 B80000 ----------------------------------------------------------------------------------
EGROUTIN.DOC
Enemy Generation Routine ------------------------ Routine Name = xxxxCOLD Parameters: ---------- A5 = [y,x] A6 = [0,z] if A5 & A6 = 0, then random position. A14 = [par1;par2,OID] par1 = undefined (8 bits) par2 = # to start (hi nybble) # random to add (lo nybble) OID = >0E (hi byte) enemy type (hi nybble,lo byte) enemy sub-type (lo nybble,lo byte)
NARC.DOC
How to build the game in interlaced or non-interlaced screen modes and for the two different-sized ROM types the game came in.
Assembling NARC --------------- There are two published versions of NARC. The first being the normal 25kHz horizontal scan version (400x512). The second being the interlaced 16kHz horizontal scan (400x512). To Assemble 25kHz version: 1) cd \VIDEO\NARC 2) run "LOADIMG NARC1 /T" ;This will create the image tables 3) set INTERLACE = 0 in \VIDEO\SYS.INC 4) cd DIAG 5) run "ALLDIAG" ;This will assemble the low level diag 6) cd .. 7) run "ALLNARC" ;This will assemble and link the game 8) done NARC.OUT is the executable object To Assemble 16kHz version: 1) cd \VIDEO\NARC 2) run "LOADIMG NARC1 /T" ;This will create the image tables 3) set INTERLACE = 1 in \VIDEO\SYS.INC 4) cd DIAG 5) run "ALLDIAG" ;This will assemble the low level diag 6) cd .. 7) run "ALLNARC" ;This will assemble and link the game 8) done NARC.OUT is the executable object Making ROMs for NARC -------------------- Again there are two options when burning ROMs for NARC. The first being the version for 27010 (1 Mbit) ROMs. The second is for the less expensive 27512 (512 Kbit) ROMs. To make 27010's: 1) cd \VIDEO\NARC 2) run MAKEROMS ;This will take you through all the steps. a) when in SYSCHECK.SET set ROM512 = 0 b) copy DATAIO checksums for FC roms when given c) insert these checksums into ROMCHIPS.ASM when it appears. Also, set the FE checksums to FFFFh (this is important). d) copy DATAIO checksums for FE roms when given e) insert these checksums into ROMCHIPS.ASM when it appears. f) calculate FE fudge bytes using FE checksums (see below). g) insert fudge bytes in an empty area of each FE rom. h) check final DATAIO checksums against theoretical(optional). i) burn NARCFC.0 (U42), NARCFC.1 (U24), NARCFE.0 (U41), NARCFE.1 (U23) with PP j) done. To make 27512's: 1) cd \VIDEO\NARC 2) run MAKER512 ;This will take you through all the steps. a) when in SYSCHECK.SET set ROM512 = 1 b) copy DATAIO checksums for F9, FA, and FD roms when given c) insert these checksums into ROMCHIPS.ASM when it appears. Also, set the FE checksums to FFFFh (this is important). d) copy DATAIO checksums for FE roms when given e) insert these checksums into ROMCHIPS.ASM when it appears. f) calculate FE fudge bytes using FE checksums (see below). g) insert fudge bytes in an empty area of each FE rom. h) check final DATAIO checksums against theoretical(optional). i) burn NARCF9.0 (U78), NARCF9.1 (U60), NARCFA.0 (U77), NARCFA.1 (U59), NARCFC.0 (U42), NARCFC.1 (U24), NARCFE.0 (U41), NARCFE.1 (U23) with PP j) done. Calculating FE fudge bytes -------------------------- Using the two 16 bit DATAIO FE checksums that were inserted into the file ROMCHIPS.ASM in place of the previously inserted FFFFh's, perform these simple operations. 1) Subtract the low bytes of each checksum from FFh. These are the fudge bytes for NARCFE.0 2) Subtract the high bytes of each checksum from FFh. These are the fudge bytes for NARCFE.1 example: NARCFE.0 checksum = 0345h NARCFE.1 checksum = 67ACh NARCFE.0 fudge bytes NARCFE.1 fudge bytes -------------------- -------------------- FFh - 45h = BAh FFh - 03h = FCh FFh - ACh = 53h FFh - 67h = 98h Reserved Fudge Byte Area ------------------------ With the NORTON utilities you can scan the ROM file for a copyright message, "NARC COPYRIGHT (C) 1988 WILLIAMS ELECTRONICS GAMES, INC." In front of this message should be four bytes all equal to 0. Feel free to use any of these to insert the two fudge bytes. Yes, you can use the same NORTON utility to find the area and insert the fudge bytes. That is all and have a nice day. (GNP - 7/31/89)
NARCLOG.DOC
NARC Error Log format --------------------- A0 = Possible Object Pointer, Current A0 at time of Error. A1 = Calling Routine Return Address. A2 = [Error type, Game State Variable] 0 = Recoverable 1 = System error 2 = "Watchdog caught" error A3 = Current PC A4 = [Player 1 Starts, World Top Left] A5 = [Wave #, *A0(OID)] A6 = [Current Process ID, *A8(OID)] A7 = Current Process Pointer A8 = Possible Object Pointer, Current A8 at time of Error.
NARCREVS.DOC
A version history of the game. Interestingly, this does not include v1.91, the location test outlined in DUMP.DOC.
NARC REVISION LIST ------------------ REV. NOTES ---- ----- 1.0 INITIAL SOFTWARE FOR AMOA 1988 - GNP (11/3/88) 1.1 FIXED DRIVING WAVE "FIVE DOLLAR MILE", A CAR LEFT BEHIND IS DELETED AND WARPED AHEAD - GNP (11/14/88) 1.2 INITIAL ON-SIGHT TEST SOFTWARE. FIXED "CENTUAR" PLAYER CHARACTER. ADDED: PLAYER HIT BY EXPLOSIONS AND ROCKETS. COIN ROUTINES AND AUDITS. - GNP (11/19/88) 1.3 FIXED: SECOND PLAYER BUYIN DURING CRIME SCENE LOCKUP. ADDED: MORE AUDITS AND CORE DUMP SOFTWARE - GNP (11/21/88) 1.8 FIRST GAME RELEASE FOR PROTO RUN (250 GAMES) RELEASED FOR GREED REASONS, DEFINITELY NOT AT THE RECOMMENDATION OF THE DESIGN TEAM. - GNP (12/18/88) 2.00 PRODUCTION RELEASE NUMBER 1, MUCH WAS ADDED AND CHANGED FROM V1.8, IN FACT, TOO MUCH TO ITEMIZE, WE'LL CONSIDER THIS THE STARTING POINT FOR PRODUCTION REVISIONS. - GNP(1/16/89) 3.00 - MORE DATA STRUCTURES INITIALIZED ON SECRET BONUS. - BAD TRAP JUMPS TO SECRET BONUS ANYTIME DURING GAMEPLAY. - FIXED PLAYER COLD START SUPPLEMENTAL LIST KNOT BUG. - ADDED SOUND FOR EXPLODING SGT. SKYHIGHS. - WHEELCHAIRS AND SAFE CARDS ARE NO LONGER XFERED. - ADDED MORE GAMEPLAY PER ATTRACT MODE CYCLE. - FIXED THE ENDLESS BUY-IN MUSIC. - NEW AND IMPROVED JOYSTICK LEFT/RIGHT FLIP RESPONSE. - AN UNLOCKED CARD SLOT DOOR LETS EITHER PLAYER OUT NOW. - MADE BOTH PLAYERS WALK THROUGH THE SAFE DOORS.- GNP(2/5/89) 3.10 PRODUCTION RUN RELEASE NUMBER 2. - IF A CASH CARD EXISTS AND ONLY ONE PLAYER IS ACTIVE THEN THAT PLAYER ACTIVATES THE CASH MACHINE REGARDLESS. - MADE BEAKERS AND SUCH IN DRUG LAB EASIER TO POP W/BULLETS. - FACTORY DIFFICULTY SETTING LOWERED TO 3 - GERMAN FACTORY DIFFICULTY = 2, BUYIN = EASY - PLAYER PORSCHE TOP SPEED LOWERED, ALSO COLLISION WITH A DUMPSTER IS MUCH KINDER.- GNP(2/9/89) 3.20 ADDED STUPID PEA BRAINED IDEA TO MARK A ROM GOOD IF IT ONLY DROPPED ONE BIT IN A BYTE. THIS WAS FOR ROM TEST. THIS WAS DONE BECAUSE THE 512 PARTS THAT WERE PURCHASED WOULD LOSE BITS OVER TIME. THIS DECISION WAS MADE BY WILLIAMS MANAGEMENT, AND IS ALSO A PRIME EXAMPLE OF THERE INIFINITE WISDOM. SURELY I JEST.- GNP(2/13/89) 3.30 AS IT TURNS OUT, THE BAD 512'S ARE DROPPING MORE THAN ONE BIT PER BYTE IN SOME CASES. WILLIAMS MANAGEMENT HAS NOW DECIDED THAT THE ROM CHECK CHANGE SHOULD BE REMOVED. JUST REMEBER, THERE IS A DIFFERENCE BETWEEN PRODUCTION AND DEVELOPMENT, THEY SHOULD NOT BE MIXED.- GNP(2/14/89) 3.31 THIS IS THE SAME AS 3.30, EXCEPT IT IS MADE TO BE BURNED ON 1 MBIT ROMS.- GNP(2/14/89) 4.00 SAME AS 3.30, BUT GURNEE DID NOT LIKE OUR REVISION NUMBER. IT WAS TOO HARD TO DISTINGUISH.- GNP(2/17/89) 5.00 SAME AS 3.31, FOR THE REVISION # REASON.- GNP(2/17/89) 6.00 FIXES PLAYER BUY-IN TO INVISIBILITY BUG. IT WAS HARD TO FIND BUT WE FINGERED IT. - GNP(2/20/89) 7.00 SAME AS 6.00 BUT FOR 1 MBIT ROMS. - GNP(2/20/89)
NARCSTUF.DOC
Todo/idea list from an unknown point of early development.
Things to do on NARC -------------------- x Make player jump hang time longer, this needs to be a playable feature. Also fix bug, holding weapon select while moving, then left off the joystick, player velocity is not zero'd. x Flame Thrower even extension, there's quite a jump from short to long. If player switches direction, switch Flamer for him. x Have Loffredo enemies carry different weapons, when you kill him his weapon falls to the ground. Certain enemies should carry drugs and or money these guys will look as if they're going somewhere, the player must chase them in order to get their stache. Surrendering? - Background area maps, a routine which returns a code pertaining to what an object is standing in (i.e. 0=solid surface, 1 = opening). x Find a way not to use the interrupt pending flag, if possible. x Add player/enemy collision with background objects in the movement routines. x Do text string output routines. - Driver scoring: Driver hit by explosion(lowest score), driver hit by bullet from the front(middle score), driver hit by bullet from behind(next), finally, driver hit by rocket is the highest scoring. - Loffredo needs to shoot while laying down, the major velocity to his jump. x Add the whore snatcher. x Add Dumpster man. x Add the sewer dude. x Possibly use a different collision routine for player bullets, no Z detect. - Unlimited rockets for 20 secs ? x Car stuff x Bonus count, also enemy, dollars, drugs, etc. limiting x MAKE SURE ALL GETOBJ CALLS ARE CHECKED FOR A BLOCK FAIL x USE DELSOBJ FOR ANYTHING THAT MIGHT HAVE A SHADOW x BE CAREFUL WITH KILOBJ, SHADOWS SHOULD BE DELETED BY HAND x ADD A STRTPLAY FLAG TO INDICATE WHEN THE WAVE PLAY SHOULD BEGIN x REMOVE GAME START FROM P1 AND P2 ROCKET BOMB BUTTONS, ONCE T & E GET START BUTTONS x ADD GAMSTATE VARIABLE, 00 = GAMEOVER 01 = TEST 02 = STARTED 03 = INPLAY, ETC. x FIX HIT WHILE JUMPING FUCK UP x SINGLE SHOT JUMP BUTTON x ADD COLLISION VECTOR LIST x NO DELAY ON JUMP x CAN SUPER JUMP x CONTINUOUS ENERGY COUNT DOWN x BULLET COUNT, DISPLAY ICON AND #. PLAYER GETS ONE SHOT ON SCREEN WHEN OUT. x ROCKET DISPLAY # x TWO PART PLAYER SHADOWS - PLAYER INTERACTION WITH BACKGROUND x IF PLAYER IS IN BUYIN TIME AT END OF WAVE, PUT HIM BACK AT THE START OF BUYIN TIME AT THE BEGINNING OF THE NEXT WAVE. IF THE PLAYER IS LYING ON THE GROUND, THEN CAN HIM. x SCROLL BOTH X DIRECS. x RE-ADJUST PLAYER IF CAUGHT WHILE JUMPING AT END OF WAVE x DON'T FUCK WITH FLAGS ON PLREINIT x ADD 0FFFEH,PAL # TO ANIMATION SCRIPT - 2X BONUS FOR PLAYER WHO FINISHED FIRST, TIE BOTH GET IT x TAKE THE GAME OUT OF FREE PLAY WHEN WE GET THE COIN ROUTINES x RESTART AUTO ERASE SCHEME - RETURN NOBJ TO 200 !!!!!!!! - MAKE WAVE # SIGNIFICANT TO MORE THAN FOUR BITS IN WAVEINIT, GETWAV AND TESTDISP. - Have one High Score table per difficulty level if we have big CMOS x Fix Cadillac bug, car explosion while trunk opening causes lock-up x MAKE THE BIG CAR EXPLOSION GET ADDED TO THE PLAYER BULLETS LIST x SOME BUG LETS BULLETS & ROCKETS GET AWAY, FIND IT! x SOME CADILLAC EXPLOSION LOCK UP x Make sure that a door cannot be entered within one "Buy-In" time length from the last door entry. This could cause infinite existence! - Last, but not Least, equate the DEBUG constant in d:\video\sys.inc to 0
WAVMUSIC.DOC
A list of what music is used where in v1.1.
NARC VERSION 1.1 WAVE TUNES WAVE 1 JUNKYARD .......... TUNE 7 - NARC THEME SUBWAY .......... TUNE 8 - SSR TRIBUTE WAVE 2 KRAK STREET .......... TUNE 9 - THE STICK WAREHOUSE .......... TUNE 3 - ML 6/8 WAVE 3 THE BRIDGE .......... TUNE 6 - DRIVING THEME WAVE 4 THE DISTRICT .......... TUNE 2 - MR. BIG THEME DOG ROOM .......... TUNE 3 - ML 6/8 BUG ROOM .......... TUNE 3 - ML 6/8 TRASH ROOM .......... TUNE 3 - ML 6/8 WAVE 5 DOWNTOWN .......... TUNE 7 - NARC THEME MR.BIG LOBBY .......... TUNE 9 - THE STICK RED SAFE .......... TUNE 8 - SSR TRIBUTE BLUE SAFE .......... TUNE 2 - MR. BIG SILVER SAFE .......... TUNE 7 - NARC THEME GOLD SAFE .......... TUNE 6 - DRIVING THEME GAME FINISH PAGE .......... TUNE 6 - DRIVING THEME HIGH SCORE ENTRY PAGE .......... TUNE 4 - NARC RAP