corewars-js
v0.0.5
Published
This is a JavaScript implementation of the game [Core Wars](https://en.wikipedia.org/wiki/Core_War). It consists of:
Downloads
1
Readme
MARSjs
This is a JavaScript implementation of the game Core Wars. It consists of:
A parser for the Redcode assembly language, written in Ohm.
A MARS virtual machine, written in TypeScript and exposed as a JS module runnable either in the browser or on the server.
In its current form, it implements the ICWS-88 standard, although optional support for ICWS-94 is on the roadmap.
This is a work-in-progress. More documentation is coming soon.
Some test scripts
yarn test
parses and runs validate.rs
in a VM. validate.rs
is a script (by another author) that validates whether a Redcode VM properly implements the ICWS-88 spec. If you run yarn test
, it should loop infinitely (or until it reaches the cycle limit) which means this project is compliant with the spec! 🎉
Parser
As mentioned, the parser is written in Ohm. The grammar lives in redcode.ohm
, and parser.ts
contains a valid Ohm semantics expression (toMarsJSObject()
) that targets the JSON format expected by the VM.
parser.ts
exposes very few objects/functions:
grammar
: An Ohm Grammar object, generated using the aforementionedredcode.ohm
semantics
: An Ohm Semantics object that operates on the previous grammar, defining a singletoMarsJSObject
expressionparse(text: string): Instruction[]
takes in a string of valid Redcode, and outputs an array of Instruction objects readable by theVM
.
VM
For now, you likely want to just look at mars.ts
for documentation or main.ts
as an example.
Tl;dr, a VM object takes in an array of Instruction
objects, and optionally a memory size and max number of cycles.
tick()
executes a single instruction, exiting early and returning false
if a player has lost (and returning true
otherwise (not currently returning any information, other than a console log, about the failure).
print()
is a helper function that outputs a pretty debug version of the current state of the game world.