Outerworld Arcade Outerworld Arcade

Vectorbeam Warrior
Four Joystick Game Modification

Vectorbeam Warrior

Project History

In March 2010 I began the task of hand converting a MAME opcode dump of Warrior to work in my Cinematronics assembler. In June of that year, the code assembled correctly, matching the original roms.

While a cool looking game, Warrior's two joystick game play was known to be lacking. From reading the entry on Vectorbeam Warrior on Wikipedia (link), I was aware that Tim Skelly originally intended the game to have four joysticks. I thought that modifying it to work as the programmer originally intended and making it more fun might be an interesting future project. Code documentation continued off and on from 2010 through 2013.

In the fall of 2013, I had a request to implement this code modification and moved it up on my list of priorities. The four joystick mod was started November 26, 2013. It ended up not being a simple change, but required many patches to implement. In the process, almost complete documentation of the code and program flow was required. The changes were completed December 16, 2013 and testing on a Cinematronics board continued off and on for the next month.

Modified ROMs Download:

Disclaimer: Cinematronics and Vectorbeam boards are by now old and temperamental. Know your hardware before making any changes. These programs are provided AS-IS. I will not be held responsible for any damages caused by their use.

Latest Release 1-19-2014 [Download Binary]

The ROMs include three versions of warrior:

  1. Warrior 4 Joystick Version 1.0
    (wa_4j_v1)
    (1-19-2014)
    An 8k four joystick version with limited changes. In this version, a player swinging their sword stops their movement. This behavior is the same as in the original two joystick version, but doesn't require pressing the button on top of the joystick to switch between movement and swinging the sword. While closer to the original game play, it's just not as fun as version 2.0 below. 2716 and 2732 EPROM versions included.
  2. Warrior 4 Joystick Version 2.0
    (wa_4j_v2)
    (1-19-2014)
    An 8k four joystick version with additional mods. This version allows simultaneous sword and body movement, improving game play significantly over the original. It also adds a small modification to allow for easier scoring. The original game included an odd bit of code which seems to have the effect of simulating the knight's armor. You can't kill the other player without having some force behind your swing. What it actually means during the game is added frustration and inability to move your sword as you might like. In this version armor is no protection and any bodily contact by the sword equals death. 2716 and 2732 EPROM versions included.
  3. Switchable: Warrior 2 Joystick Version & Warrior 4 Joystick Version 2.0
    (wa_4j_v2_switch)
    (2-27-2014)
    A 16k version that uses a unused dip switch to select either the original 2 joystick version or the 4 joystick version 2.0. Dip Switch #5 was unused, but now switches between the games on power up (running in MAME using the armor attack emulation, it's the demo sounds dip switch). Version is for 2732 EPROMs only.

Installing the ROMs on Cinematronics/Vectorbeam hardware

8k ROMS work in Star Castle Cinematronics boards using four 2716s. Other CCPUs using 2716 EPROMs should work as well. Warrior requires the JMI jumper to be installed.

16k roms can be run in Armor Attack in MAME (although the controls will be incorrect - just as they are on an actual Armor Attack machine). It can be installed into Cinematronics Armor Attack boards using two 2732s. This has been tested on actual hardware. Install in T7 and P7. R7 and U7 are not referenced and it doesn't matter what's installed in them.

Running the ROMs in a Custom MAME Build

This is a custom DOS MAME version that will run Warrior with 4 joysticks.

Latest Release 1-19-2014 [Download Binary]

To install warrior roms in MAME, unzip original roms (warrior.zip) and copy the modified roms from the roms_8k directory into your mame/roms/warrior directory.

The mame.exe file is the dos command line version that includes the inputs for 4 joysticks in warrior. Save your old version as this one will not work with the original Warrior roms. To use: replace the mame.exe in a standard install and run warrior from the dos prompt:

>mame warrior

Ignore the ROM checksum error, the game should still run in emulation. The game will not run from MAME's built in menu system, please run it directly as shown above.

Warrior Inputs for Building a Control Panel

From my source code, here are the inputs for the new Warrior controls:


    ;----------------------------------
    ; Warrior:
    ; Warrior 4 Joystick Control Panel
    ;----------------------------------
    #IFDEF  WA_4J_CP
    ; Primary Set----------------
    WA_RP_R   .equ  $0    ; INPUT a0: Right Player: Right         J3-11
    WA_RP_L   .equ  $1    ; INPUT a1: Right Player: Left          J3-10
    WA_RP_U   .equ  $2    ; INPUT a2: Right Player: Up            J3-9
    WA_RP_D   .equ  $3    ; INPUT a3: Right Player: Down          J3-8
    WA_RP_SR  .equ  $4    ; INPUT a4: Right Player: Sword Right   J3-15
    WA_RP_F   .equ  $4    ; INPUT a4: Right Player: Fire *LEGACY* J3-15
    WA_RP_SL  .equ  $5    ; INPUT a5: Right Player: Sword Left    J3-14
    WA_RP_SU  .equ  $6    ; INPUT a6: Right Player: Sword Up      J3-13
    WA_RP_SD  .equ  $7    ; INPUT a7: Right Player: Sword Down    J3-12
    WA_LP_R   .equ  $8    ; INPUT a8: Left Player: Right          J3-19
    WA_LP_L   .equ  $9    ; INPUT a9: Left Player: Left           J3-18
    WA_LP_U   .equ  $A    ; INPUT aA: Left Player: Up             J3-17
    WA_LP_D   .equ  $B    ; INPUT aB: Left Player: Down           J3-16
    WA_LP_SR  .equ  $C    ; INPUT aC: Left Player: Sword Right    J3-20
    WA_LP_F   .equ  $C    ; INPUT aC: Left Player: Fire *LEGACY*  J3-20
    WA_LP_SL  .equ  $D    ; INPUT aD: Left Player: Sword Left     J3-21
    WA_LP_SU  .equ  $E    ; INPUT aE: Left Player: Sword Up       J3-22
    WA_LP_SD  .equ  $F    ; INPUT aF: Left Player: Sword Down     J3-23
    ; Secondary Set------------
    WA_DS_TEST  .equ  $0    ; INPUT B0: Test Mode                 J3-3
    ;           .equ  $1    ; INPUT B1: -- unused --              J3-6
    ;           .equ  $2    ; INPUT B2: -- unused --              J3-5
    WA_DS_COIN  .equ  $3    ; INPUT B3: Coinage                   J3-4
                            ;  Off = 1 Coin  / 1 Credit
                            ;  On  = 2 Coins / 1 Credit
    WA_DS_TIME1 .equ  $4    ; INPUT B4: Dipswitch 1: Timer Speed 1  -
    WA_DS_TIME2 .equ  $5    ; INPUT B5: Dipswitch 2: Timer Speed 2  -
    ;           .equ  $6    ; INPUT B6: -- unused --              J3-7
    ;COIN       .equ  $7    ; INPUT B7: Coin Latch                J3-24 or J3-25?
    #ENDIF
        

And for comparison, here are the controls for the original two joystick Warrior:


    ;-----------------------
    ; Warrior:
    ; Warrior Control Panel
    ;-----------------------
    #IFDEF  WA_CP
    ; Primary Set--------------
    WA_RP_R     .equ  $0      ; INPUT a0: Right Player: Right
    WA_RP_L     .equ  $1      ; INPUT a1: Right Player: Left
    WA_RP_U     .equ  $2      ; INPUT a2: Right Player: Up
    WA_RP_D     .equ  $3      ; INPUT a3: Right Player: Down
    WA_RP_F     .equ  $4      ; INPUT a4: Right Player: Fire
    ;           .equ  $5      ; INPUT a5: -- unused --
    ;           .equ  $6      ; INPUT a6: -- unused --
    ;           .equ  $7      ; INPUT a7: -- unused --
    WA_LP_R     .equ  $8      ; INPUT a8: Left Player: Right
    WA_LP_L     .equ  $9      ; INPUT a9: Left Player: Left
    WA_LP_U     .equ  $A      ; INPUT aA: Left Player: Up
    WA_LP_D     .equ  $B      ; INPUT aB: Left Player: Down
    WA_LP_F     .equ  $C      ; INPUT aC: Left Player: Fire
    ;           .equ  $D      ; INPUT aD: -- unused --
    ;           .equ  $E      ; INPUT aE: -- unused --
    ;           .equ  $F      ; INPUT aF: -- unused --
    ; Secondary Set------------
    WA_DS_TEST  .equ  $0      ; INPUT B0: Test Mode
    ;           .equ  $1      ; INPUT B1: -- unused --
    ;           .equ  $2      ; INPUT B2: -- unused --
    WA_DS_COIN  .equ  $3      ; INPUT B3: Coinage
                              ;  Off = 1 Coin  / 1 Credit
                              ;  On  = 2 Coins / 1 Credit
    WA_DS_TIME1 .equ  $4      ; INPUT B4: Dipswitch 1: Timer Speed 1
    WA_DS_TIME2 .equ  $5      ; INPUT B5: Dipswitch 2: Timer Speed 2
    ;           .equ  $6      ; INPUT B6: -- unused --
    ;COIN       .equ  $7      ; INPUT B7: Coin Latch
    #ENDIF