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:
- 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.
- 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.
- 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