First of all, you must visit Yozhiks in Quake II and download the game and map editor.

Make sure you have Python 3, then use pip to acquire the package:

pip3 install 'git+https://github.com/Perlence/porcupy#egg=porcupy'

First scenario

Let’s consider rewriting an example from Introduction in Porcupy:

PLAYER = yozhiks[0]

if PLAYER.health < 1:
    PLAYER.spawn(randint(1, 5))
    PLAYER.health = 125

List yozhiks is a zero-indexed list of all yozhiks in the game and each of them has attributes like health and weapon, and methods like spawn().

Names written in upper case are considered constants, so, roughly speaking, each next occurrence of PLAYER after first line will be replaced by yozhiks[0].

New built-in function randint() returns random integer in range [a, b], including both end points.

Let’s save the scenario in a file, e.g. handicap_spawn.py, and see what Porcupy compiler will produce:

porcupy -i handicap_spawn.py

The result is:

# e1p >= 1 ( g1z ) p1z ~5 p2z p1z+1 e1b ^2 e1p 125 :1

It looks a lot like the original example, but you can notice new words like g1z and :1 — these are goto statement and goto label respectively.

Now, the scenario on it’s own is useless unless it’s bundled with a map. Go to directory where you installed Yozhiks in Quake II and the map editor. Start red_egiks.exe, open file MAPS/ArenaDM.egm, change the name of map in Info dialog, and save it to MAPS/ArenaDM2.egm.

Now we can compile and attach the Porcupy scenario to the map:

porcupy -i handicap_spawn.py -a ArenaDM2.egm

Check if scenario works properly by loading the map in Yozhiks in Quake II and proceed to Reference.