palpic2png.c: improve, make usable with ppic binary files
[rofl0r-openDOW.git] / README
blob951e585169a7baf4826a91b0b17bd6e37fa23a9e
1 === prerequisites ===
3 - a POSIX compliant OS and libc (for example linux with musl libc).
4   if you're still using winblows, bad luck, you should strongly consider to
5   switch to linux NOW rather than later.
6 - a working C99 compiler
7 - perl (needed for the build system)
8 - SDL and SDL_audio library and headers.
9   this means you need the -dev(el) version of the package for your distro.
11 there's an alternate audio backend using libao, which has a much nicer API
12 than SDL_audio, however it seems to trigger some in-kernel ALSA bugs
13 which will lead to high CPU consumption depending on the second the game
14 was started (i.e. if you start the game at second X, it may consume 10%,
15 if you start it at second Y, it may consume 70%).
17 === build instructions ===
19 mkdir /tmp/openDOW-000
20 cd /tmp/openDOW-000/
21 git clone https://github.com/rofl0r/openDOW
22 git clone https://github.com/rofl0r/libulz lib
23 git clone https://github.com/rofl0r/c-flod
24 git clone https://github.com/rofl0r/rcb2
25 ln -s rcb2.py rcb2/rcb2
26 cd openDOW/
27 echo "CFLAGS+=-DAUDIO_BACKEND=AUDIO_BACKEND_SDL" > config.mak
28 PATH="/tmp/openDOW-000/rcb:$PATH" make
30 === supported compilers ===
32 GCC
33 clang
35 === how to play ===
37 run ./spriteview.out (main game executable will be renamed at
38 some point)
40 use wasd to move the player, and the mouse to aim and fire.
41 switch weapons with numpad +/-.
42 at some point it is planned to make the layout configurable
43 and add support for the original behaviour without mouse aiming
44 so it could be used via a joystick.
46 == current state and TODO ==
48 at current, all maps are finished as far as the background
49 and foreground tiles are concerned, as well as all of the game
50 mechanics (besides dying).
52 the biggest part of the work is to recreate the spawn positions
53 and routes taken by enemy soldiers. there's roughly 500 of 'em
54 per map.
55 at current, only australias "spawnmap" is implemented. the other
56 maps are partially playable, but they use australias spawnmap.
57 that means enemies will spawn in places they're not supposed to
58 be, like on top of a wall, and move through the wall.
60 spawnmaps can be created by moving the player through the screen
61 step-by-step, carefully comparing to the original in an emulator.
63 when you are on the same "spawn line", you can press "e" to enter
64 the spawn editor and summon an enemy.
65 - use shift+numpad+/- to change its shape;
66 - use "d" to change its direction then, enter one of
67   w,o,s,n,nw,no,sw,so,nnw,wnw,nno,ono,ssw,wsw,sso,oso
68   (o means "ost", the german equivalent to "east").
69 - use + and - on the numeric keypad to change the velocity of the
70   enemy. (it will start running around, once offscreen, it will
71   respawn in the start position)
72 - use "g" to change its weapon type to grenade or back to gun
73 - press "s" to shoot at the current position
74 - press "p" to stop the enemy at the current position
75 - press crtl+numpad+ to insert a direction/speed change,
76   "i" to insert the current position,
77   then enter the new direction using "d".
78 - press alt+numpad+ to enter a new shoot "slot", and "s" to save
79   the current position as the position to shoot.
81 if something is unclear, you should look at the implementation
82 of enemytag.c.
84 the editor takes a bit getting used to, but once you used it for
85 a while it's pretty quick.
86 after the enemy takes the same route and shots as the original,
87 press "e" again to exit the editor. that will output a C struct
88 to stdout, which you can copy paste into a spawnmap .c file
89 based on maps/spawn_australia.c.
91 === contributing ===
93 if you're a C++ programmer, go away now.
94 if you're using MSVC, go away now.
96 OpenDOW uses C99, and C99 only.
98 i will not ever make any compromise just to make it compile on the
99 crippled M$ compiler.
101 there's not really much to help in terms of code anyway.
102 almost anything is done. what really needs help is adding spawnmaps
103 for the ~500 enemies per map.
105 i will only accept code contributions with small, nice and clean commits,
106 where every commits just does a single thing.
107 there's no chance i will ever merge a huge diff touching 500 lines
108 in several different compilation units.
110 i also will not add ifdef hells just to make the code compile on
111 crippled platform X.
113 so if you still want to contribute, clone the repo on github,
114 create a new branch for your changes, commit your work and then file
115 a pull request. please use commit messages that make sense and serve
116 as a good documentation for your changes.