Title screen and direct map load with --map param

Author Mitja Felicijan <mitja.felicijan@gmail.com> 2026-04-30 19:02:35 +0200
Committer Mitja Felicijan <mitja.felicijan@gmail.com> 2026-04-30 19:02:35 +0200
Commit 6307feb53d978cbf7f50df26a7b0bc63252cfbd4 (patch)
-rw-r--r-- all.h 10
-rw-r--r-- game.c 80
-rw-r--r-- main.c 35
-rw-r--r-- maps/demo3.map 204
-rw-r--r-- trenchbroom/stalag/GameEngineProfiles.cfg 4
5 files changed, 305 insertions, 28 deletions
diff --git a/all.h b/all.h
...
82
    MOVE_FLY
82
    MOVE_FLY
83
} MovementMode;
83
} MovementMode;
84
  
84
  
  
85
typedef enum {
  
86
    STATE_TITLE,
  
87
    STATE_PLAYING
  
88
} GameStateMode;
  
89
  
85
typedef struct {
90
typedef struct {
  
91
    GameStateMode mode;
  
92
    char map_path[256];
86
    Camera camera;
93
    Camera camera;
87
    Model *world_models;
94
    Model *world_models;
88
    int world_model_count;
95
    int world_model_count;
...
124
  
131
  
125
// Game
132
// Game
126
Texture2D GetTexture(const char *name);
133
Texture2D GetTexture(const char *name);
127
void InitGame(const char *map_path);
134
void InitGame(void);
  
135
void SetMap(const char *path);
128
void UpdateGame(void);
136
void UpdateGame(void);
129
void DrawGame(void);
137
void DrawGame(void);
130
bool LoadMap(const char *filename);
138
bool LoadMap(const char *filename);
...
diff --git a/game.c b/game.c
...
223
    return true;
223
    return true;
224
}
224
}
225
  
225
  
226
void InitGame(const char* map_path) {
226
void InitGame(void) {
227
    array_init(texture_cache);
227
    array_init(texture_cache);
228
    game.world_models = NULL;
228
    game.world_models = NULL;
229
    game.world_model_count = 0;
229
    game.world_model_count = 0;
...
238
        game.font_ui = GetFontDefault();
238
        game.font_ui = GetFontDefault();
239
    }
239
    }
240
  
240
  
241
    LoadMap(map_path);
241
    game.mode = STATE_TITLE;
242
  
242
  
243
    game.cursor_captured = false;
243
    game.cursor_captured = false;
244
    EnableCursor();
244
    EnableCursor();
...
248
    game.is_grounded = false;
248
    game.is_grounded = false;
249
}
249
}
250
  
250
  
  
251
void SetMap(const char *path) {
  
252
    strncpy(game.map_path, path, sizeof(game.map_path) - 1);
  
253
    game.map_path[sizeof(game.map_path) - 1] = '\0';
  
254
}
  
255
  
251
void UpdateGame(void) {
256
void UpdateGame(void) {
  
257
    if (game.mode == STATE_TITLE) {
  
258
        if (IsKeyPressed(KEY_ENTER)) {
  
259
            if (LoadMap(game.map_path)) {
  
260
                game.mode = STATE_PLAYING;
  
261
            }
  
262
        }
  
263
        return;
  
264
    }
  
265
  
252
    if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) {
266
    if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) {
253
        game.cursor_captured = !game.cursor_captured;
267
        game.cursor_captured = !game.cursor_captured;
254
        if (game.cursor_captured) DisableCursor();
268
        if (game.cursor_captured) DisableCursor();
...
257
  
271
  
258
    if (IsKeyPressed(KEY_ONE)) LoadMap("maps/demo1.map");
272
    if (IsKeyPressed(KEY_ONE)) LoadMap("maps/demo1.map");
259
    if (IsKeyPressed(KEY_TWO)) LoadMap("maps/demo2.map");
273
    if (IsKeyPressed(KEY_TWO)) LoadMap("maps/demo2.map");
  
274
    if (IsKeyPressed(KEY_THREE)) LoadMap("maps/demo3.map");
260
  
275
  
261
    if (IsKeyPressed(KEY_V)) {
276
    if (IsKeyPressed(KEY_V)) {
262
        game.vsync = !game.vsync;
277
        game.vsync = !game.vsync;
...
274
  
289
  
275
void DrawGame(void) {
290
void DrawGame(void) {
276
    BeginDrawing();
291
    BeginDrawing();
277
    ClearBackground(DARKGRAY);
292
    ClearBackground(BLACK);
278
    BeginMode3D(game.camera);
293
  
279
    
294
    if (game.mode == STATE_TITLE) {
280
    // Enable backface culling to hide interior faces of brushes
295
        int screenWidth = GetScreenWidth();
281
    rlEnableBackfaceCulling();
296
        int screenHeight = GetScreenHeight();
282
    for (int i = 0; i < game.world_model_count; i++) {
297
  
283
        DrawModel(game.world_models[i], (Vector3){ 0, 0, 0 }, 1.0f, WHITE);
298
        const char *title = "STALAG";
  
299
        const char *sub = "Press ENTER to Start";
  
300
        
  
301
        int titleSize = 60;
  
302
        int subSize = 20;
  
303
  
  
304
        Vector2 titlePos = { 
  
305
            (float)(screenWidth - MeasureTextEx(game.font_ui, title, (float)titleSize, 4).x) / 2, 
  
306
            (float)screenHeight / 2 - 40 
  
307
        };
  
308
        Vector2 subPos = { 
  
309
            (float)(screenWidth - MeasureTextEx(game.font_ui, sub, (float)subSize, 2).x) / 2, 
  
310
            (float)screenHeight / 2 + 40 
  
311
        };
  
312
  
  
313
        DrawTextEx(game.font_ui, title, titlePos, (float)titleSize, 4, WHITE);
  
314
        DrawTextEx(game.font_ui, sub, subPos, (float)subSize, 2, GRAY);
  
315
    } else {
  
316
        ClearBackground(DARKGRAY);
  
317
        BeginMode3D(game.camera);
  
318
        
  
319
        // Enable backface culling to hide interior faces of brushes
  
320
        rlEnableBackfaceCulling();
  
321
        for (int i = 0; i < game.world_model_count; i++) {
  
322
            DrawModel(game.world_models[i], (Vector3){ 0, 0, 0 }, 1.0f, WHITE);
  
323
        }
  
324
        
  
325
        EndMode3D();
  
326
        
  
327
        int screenWidth = GetScreenWidth();
  
328
        int screenHeight = GetScreenHeight();
  
329
        DrawLine(screenWidth / 2 - 10, screenHeight / 2, screenWidth / 2 + 10, screenHeight / 2, GREEN);
  
330
        DrawLine(screenWidth / 2, screenHeight / 2 - 10, screenWidth / 2, screenHeight / 2 + 10, GREEN);
  
331
        
  
332
        DrawTextEx(game.font_ui, TextFormat("%i FPS", GetFPS()), (Vector2){ 10, 10 }, 20, 2, GREEN);
  
333
        DrawTextEx(game.font_ui, TextFormat("VSync: %s", game.vsync ? "ON" : "OFF"), (Vector2){ 10, 35 }, 20, 2, GREEN);
  
334
        DrawTextEx(game.font_ui, TextFormat("Speed: %.0f", game.horizontal_speed), (Vector2){ 10, 60 }, 20, 2, GREEN);
284
    }
335
    }
285
    
  
286
    EndMode3D();
  
287
    
  
288
    int screenWidth = GetScreenWidth();
  
289
    int screenHeight = GetScreenHeight();
  
290
    DrawLine(screenWidth / 2 - 10, screenHeight / 2, screenWidth / 2 + 10, screenHeight / 2, GREEN);
  
291
    DrawLine(screenWidth / 2, screenHeight / 2 - 10, screenWidth / 2, screenHeight / 2 + 10, GREEN);
  
292
    
  
293
    DrawTextEx(game.font_ui, TextFormat("%i FPS", GetFPS()), (Vector2){ 10, 10 }, 20, 2, GREEN);
  
294
    DrawTextEx(game.font_ui, TextFormat("VSync: %s", game.vsync ? "ON" : "OFF"), (Vector2){ 10, 35 }, 20, 2, GREEN);
  
295
    DrawTextEx(game.font_ui, TextFormat("Speed: %.0f", game.horizontal_speed), (Vector2){ 10, 60 }, 20, 2, GREEN);
  
296
  
336
  
297
    EndDrawing();
337
    EndDrawing();
298
}
338
}
diff --git a/main.c b/main.c
...
2
#define NONSTD_IMPLEMENTATION
2
#define NONSTD_IMPLEMENTATION
3
#define VFS_IMPLEMENTATION
3
#define VFS_IMPLEMENTATION
4
#include "all.h"
4
#include "all.h"
  
5
#include <getopt.h>
  
6
#include <string.h>
5
  
7
  
6
int main(void) {
8
int main(int argc, char *argv[]) {
  
9
    char map_path[256] = "maps/demo3.map";
  
10
    bool skip_title = false;
  
11
  
  
12
    static struct option long_options[] = {
  
13
        {"map", required_argument, 0, 'm'},
  
14
        {0, 0, 0, 0}
  
15
    };
  
16
  
  
17
    int opt;
  
18
    int option_index = 0;
  
19
    while ((opt = getopt_long_only(argc, argv, "m:", long_options, &option_index)) != -1) {
  
20
        switch (opt) {
  
21
            case 'm':
  
22
                strncpy(map_path, optarg, sizeof(map_path) - 1);
  
23
                skip_title = true;
  
24
                break;
  
25
        }
  
26
    }
  
27
  
7
    SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI);
28
    SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI);
8
    InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE);
29
    InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE);
9
  
30
  
...
14
    SetTargetFPS(GetMonitorRefreshRate(monitor));
35
    SetTargetFPS(GetMonitorRefreshRate(monitor));
15
  
36
  
16
    vfs_init("data.pak");
37
    vfs_init("data.pak");
17
    InitGame("maps/demo3.map");
38
    InitGame();
  
39
    SetMap(map_path);
  
40
  
  
41
    if (skip_title) {
  
42
        if (LoadMap(game.map_path)) {
  
43
            game.mode = STATE_PLAYING;
  
44
            game.cursor_captured = true;
  
45
            DisableCursor();
  
46
        }
  
47
    }
  
48
  
18
    game.vsync = true;
49
    game.vsync = true;
19
  
50
  
20
    while (!WindowShouldClose()) {
51
    while (!WindowShouldClose()) {
...
diff --git a/maps/demo3.map b/maps/demo3.map
...
12
( 64 336 0 ) ( 65 336 0 ) ( 64 336 1 ) brushes/bricks_076c 0 -16 0 1 1
12
( 64 336 0 ) ( 65 336 0 ) ( 64 336 1 ) brushes/bricks_076c 0 -16 0 1 1
13
( 560 112 0 ) ( 560 112 1 ) ( 560 113 0 ) brushes/bricks_076c -48 -16 0 1 1
13
( 560 112 0 ) ( 560 112 1 ) ( 560 113 0 ) brushes/bricks_076c -48 -16 0 1 1
14
}
14
}
  
15
// brush 1
  
16
{
  
17
( -592 320 0 ) ( -592 321 0 ) ( -592 320 1 ) environment/planks_012 0 0 0 1 1
  
18
( -592 320 0 ) ( -592 320 1 ) ( -591 320 0 ) environment/planks_012 0 0 0 1 1
  
19
( -592 320 0 ) ( -591 320 0 ) ( -592 321 0 ) environment/planks_012 0 0 0 1 1
  
20
( 560 336 272 ) ( 560 337 272 ) ( 561 336 272 ) environment/planks_012 0 0 0 1 1
  
21
( 560 336 16 ) ( 561 336 16 ) ( 560 336 17 ) environment/planks_012 0 0 0 1 1
  
22
( 560 336 16 ) ( 560 336 17 ) ( 560 337 16 ) environment/planks_012 0 0 0 1 1
  
23
}
  
24
// brush 2
  
25
{
  
26
( -592 -384 0 ) ( -592 -383 0 ) ( -592 -384 1 ) environment/planks_012 0 0 0 1 1
  
27
( -592 -384 0 ) ( -592 -384 1 ) ( -591 -384 0 ) environment/planks_012 0 0 0 1 1
  
28
( -592 -384 0 ) ( -591 -384 0 ) ( -592 -383 0 ) environment/planks_012 0 0 0 1 1
  
29
( 560 -368 272 ) ( 560 -367 272 ) ( 561 -368 272 ) environment/planks_012 0 0 0 1 1
  
30
( 560 -368 16 ) ( 561 -368 16 ) ( 560 -368 17 ) environment/planks_012 0 0 0 1 1
  
31
( 560 -368 16 ) ( 560 -368 17 ) ( 560 -367 16 ) environment/planks_012 0 0 0 1 1
  
32
}
  
33
// brush 3
  
34
{
  
35
( -592 -368 0 ) ( -592 -367 0 ) ( -592 -368 1 ) environment/planks_012 0 0 0 1 1
  
36
( -592 -368 0 ) ( -592 -368 1 ) ( -591 -368 0 ) environment/planks_012 0 0 0 1 1
  
37
( -592 -368 0 ) ( -591 -368 0 ) ( -592 -367 0 ) environment/planks_012 0 0 0 1 1
  
38
( -576 320 272 ) ( -576 321 272 ) ( -575 320 272 ) environment/planks_012 0 0 0 1 1
  
39
( -576 320 16 ) ( -575 320 16 ) ( -576 320 17 ) environment/planks_012 0 0 0 1 1
  
40
( -576 320 16 ) ( -576 320 17 ) ( -576 321 16 ) environment/planks_012 0 0 0 1 1
  
41
}
  
42
// brush 4
  
43
{
  
44
( 544 -368 0 ) ( 544 -367 0 ) ( 544 -368 1 ) environment/planks_012 0 0 0 1 1
  
45
( 544 -368 0 ) ( 544 -368 1 ) ( 545 -368 0 ) environment/planks_012 0 0 0 1 1
  
46
( 544 -368 0 ) ( 545 -368 0 ) ( 544 -367 0 ) environment/planks_012 0 0 0 1 1
  
47
( 560 320 272 ) ( 560 321 272 ) ( 561 320 272 ) environment/planks_012 0 0 0 1 1
  
48
( 560 320 16 ) ( 561 320 16 ) ( 560 320 17 ) environment/planks_012 0 0 0 1 1
  
49
( 560 320 16 ) ( 560 320 17 ) ( 560 321 16 ) environment/planks_012 0 0 0 1 1
  
50
}
  
51
// brush 5
  
52
{
  
53
( -352 -352 -8 ) ( -352 -351 -8 ) ( -352 -352 -7 ) environment/paintedwood_008a -16 -8 0 1 1
  
54
( -368 -352 -8 ) ( -368 -352 -7 ) ( -367 -352 -8 ) environment/paintedwood_008a 0 -8 0 1 1
  
55
( -368 -352 8 ) ( -367 -352 8 ) ( -368 -351 8 ) environment/paintedwood_008a 0 16 0 1 1
  
56
( -240 -144 24 ) ( -240 -143 24 ) ( -239 -144 24 ) environment/paintedwood_008a 0 16 0 1 1
  
57
( -240 -144 8 ) ( -239 -144 8 ) ( -240 -144 9 ) environment/paintedwood_008a 0 -8 0 1 1
  
58
( -240 -144 8 ) ( -240 -144 9 ) ( -240 -143 8 ) environment/paintedwood_008a -16 -8 0 1 1
  
59
}
  
60
// brush 6
  
61
{
  
62
( -256 -168 0 ) ( -256 -167 0 ) ( -256 -168 1 ) environment/planks_012 -24 0 0 1 1
  
63
( -256 -168 0 ) ( -256 -168 1 ) ( -255 -168 0 ) environment/planks_012 0 0 0 1 1
  
64
( -256 -168 0 ) ( -255 -168 0 ) ( -256 -167 0 ) environment/planks_012 0 24 0 1 1
  
65
( -240 -152 8 ) ( -240 -151 8 ) ( -239 -152 8 ) environment/planks_012 0 24 0 1 1
  
66
( -240 -152 16 ) ( -239 -152 16 ) ( -240 -152 17 ) environment/planks_012 0 0 0 1 1
  
67
( -240 -152 16 ) ( -240 -152 17 ) ( -240 -151 16 ) environment/planks_012 -24 0 0 1 1
  
68
}
  
69
// brush 7
  
70
{
  
71
( -352 -168 0 ) ( -352 -167 0 ) ( -352 -168 1 ) environment/planks_012 -24 0 0 1 1
  
72
( -352 -168 0 ) ( -352 -168 1 ) ( -351 -168 0 ) environment/planks_012 96 0 0 1 1
  
73
( -352 -168 0 ) ( -351 -168 0 ) ( -352 -167 0 ) environment/planks_012 96 24 0 1 1
  
74
( -336 -152 8 ) ( -336 -151 8 ) ( -335 -152 8 ) environment/planks_012 96 24 0 1 1
  
75
( -336 -152 16 ) ( -335 -152 16 ) ( -336 -152 17 ) environment/planks_012 96 0 0 1 1
  
76
( -336 -152 16 ) ( -336 -152 17 ) ( -336 -151 16 ) environment/planks_012 -24 0 0 1 1
  
77
}
  
78
// brush 8
  
79
{
  
80
( -352 -344 0 ) ( -352 -343 0 ) ( -352 -344 1 ) environment/planks_012 152 0 0 1 1
  
81
( -352 -344 0 ) ( -352 -344 1 ) ( -351 -344 0 ) environment/planks_012 96 0 0 1 1
  
82
( -352 -344 0 ) ( -351 -344 0 ) ( -352 -343 0 ) environment/planks_012 96 -152 0 1 1
  
83
( -336 -328 8 ) ( -336 -327 8 ) ( -335 -328 8 ) environment/planks_012 96 -152 0 1 1
  
84
( -336 -328 16 ) ( -335 -328 16 ) ( -336 -328 17 ) environment/planks_012 96 0 0 1 1
  
85
( -336 -328 16 ) ( -336 -328 17 ) ( -336 -327 16 ) environment/planks_012 152 0 0 1 1
  
86
}
  
87
// brush 9
  
88
{
  
89
( -256 -344 0 ) ( -256 -343 0 ) ( -256 -344 1 ) environment/planks_012 152 0 0 1 1
  
90
( -256 -344 0 ) ( -256 -344 1 ) ( -255 -344 0 ) environment/planks_012 0 0 0 1 1
  
91
( -256 -344 0 ) ( -255 -344 0 ) ( -256 -343 0 ) environment/planks_012 0 -152 0 1 1
  
92
( -240 -328 8 ) ( -240 -327 8 ) ( -239 -328 8 ) environment/planks_012 0 -152 0 1 1
  
93
( -240 -328 16 ) ( -239 -328 16 ) ( -240 -328 17 ) environment/planks_012 0 0 0 1 1
  
94
( -240 -328 16 ) ( -240 -328 17 ) ( -240 -327 16 ) environment/planks_012 152 0 0 1 1
  
95
}
  
96
// brush 10
  
97
{
  
98
( -328 -328 32 ) ( -344 -344 16 ) ( -344 -280 16 ) environment/roofingtiles_012b 8 -344 0 1 1
  
99
( -272 -328 40 ) ( -256 -344 24 ) ( -352 -344 24 ) environment/roofingtiles_012b 208 -376 0 1 1
  
100
( -256 -344 24 ) ( -256 -280 24 ) ( -352 -280 24 ) environment/roofingtiles_012b 208 24 0 1 1
  
101
( -336 -296 32 ) ( -272 -296 32 ) ( -272 -328 32 ) environment/roofingtiles_012b 208 24 0 1 1
  
102
( -272 -296 40 ) ( -336 -296 40 ) ( -352 -280 24 ) environment/roofingtiles_012b 208 -312 0 1 1
  
103
( -272 -296 40 ) ( -256 -280 24 ) ( -256 -344 24 ) environment/roofingtiles_012b -80 -344 0 1 1
  
104
}
  
105
// brush 11
  
106
{
  
107
( -160 -328 32 ) ( -176 -344 16 ) ( -176 -280 16 ) environment/roofingtiles_012b -160 -344 0 1 1
  
108
( -104 -328 40 ) ( -88 -344 24 ) ( -184 -344 24 ) environment/roofingtiles_012b 40 -376 0 1 1
  
109
( -88 -344 24 ) ( -88 -280 24 ) ( -184 -280 24 ) environment/roofingtiles_012b 40 24 0 1 1
  
110
( -168 -296 32 ) ( -104 -296 32 ) ( -104 -328 32 ) environment/roofingtiles_012b 40 24 0 1 1
  
111
( -104 -296 40 ) ( -168 -296 40 ) ( -184 -280 24 ) environment/roofingtiles_012b 40 -312 0 1 1
  
112
( -104 -296 40 ) ( -88 -280 24 ) ( -88 -344 24 ) environment/roofingtiles_012b -248 -344 0 1 1
  
113
}
  
114
// brush 12
  
115
{
  
116
( -184 -352 -8 ) ( -184 -351 -8 ) ( -184 -352 -7 ) environment/paintedwood_008a -16 -8 0 1 1
  
117
( -200 -352 -8 ) ( -200 -352 -7 ) ( -199 -352 -8 ) environment/paintedwood_008a -168 -8 0 1 1
  
118
( -200 -352 8 ) ( -199 -352 8 ) ( -200 -351 8 ) environment/paintedwood_008a -168 16 0 1 1
  
119
( -72 -144 24 ) ( -72 -143 24 ) ( -71 -144 24 ) environment/paintedwood_008a -168 16 0 1 1
  
120
( -72 -144 8 ) ( -71 -144 8 ) ( -72 -144 9 ) environment/paintedwood_008a -168 -8 0 1 1
  
121
( -72 -144 8 ) ( -72 -144 9 ) ( -72 -143 8 ) environment/paintedwood_008a -16 -8 0 1 1
  
122
}
  
123
// brush 13
  
124
{
  
125
( 0 -328 32 ) ( -16 -344 16 ) ( -16 -280 16 ) environment/roofingtiles_012b -320 -344 0 1 1
  
126
( 56 -328 40 ) ( 72 -344 24 ) ( -24 -344 24 ) environment/roofingtiles_012b -120 -376 0 1 1
  
127
( 72 -344 24 ) ( 72 -280 24 ) ( -24 -280 24 ) environment/roofingtiles_012b -120 24 0 1 1
  
128
( -8 -296 32 ) ( 56 -296 32 ) ( 56 -328 32 ) environment/roofingtiles_012b -120 24 0 1 1
  
129
( 56 -296 40 ) ( -8 -296 40 ) ( -24 -280 24 ) environment/roofingtiles_012b -120 -312 0 1 1
  
130
( 56 -296 40 ) ( 72 -280 24 ) ( 72 -344 24 ) environment/roofingtiles_012b -408 -344 0 1 1
  
131
}
  
132
// brush 14
  
133
{
  
134
( -24 -352 -8 ) ( -24 -351 -8 ) ( -24 -352 -7 ) environment/paintedwood_008a -16 -8 0 1 1
  
135
( -40 -352 -8 ) ( -40 -352 -7 ) ( -39 -352 -8 ) environment/paintedwood_008a -328 -8 0 1 1
  
136
( -40 -352 8 ) ( -39 -352 8 ) ( -40 -351 8 ) environment/paintedwood_008a -328 16 0 1 1
  
137
( 88 -144 24 ) ( 88 -143 24 ) ( 89 -144 24 ) environment/paintedwood_008a -328 16 0 1 1
  
138
( 88 -144 8 ) ( 89 -144 8 ) ( 88 -144 9 ) environment/paintedwood_008a -328 -8 0 1 1
  
139
( 88 -144 8 ) ( 88 -144 9 ) ( 88 -143 8 ) environment/paintedwood_008a -16 -8 0 1 1
  
140
}
  
141
// brush 15
  
142
{
  
143
( -184 -344 0 ) ( -184 -343 0 ) ( -184 -344 1 ) environment/planks_012 152 0 0 1 1
  
144
( -184 -344 0 ) ( -184 -344 1 ) ( -183 -344 0 ) environment/planks_012 -72 0 0 1 1
  
145
( -184 -344 0 ) ( -183 -344 0 ) ( -184 -343 0 ) environment/planks_012 -72 -152 0 1 1
  
146
( -168 -328 8 ) ( -168 -327 8 ) ( -167 -328 8 ) environment/planks_012 -72 -152 0 1 1
  
147
( -168 -328 16 ) ( -167 -328 16 ) ( -168 -328 17 ) environment/planks_012 -72 0 0 1 1
  
148
( -168 -328 16 ) ( -168 -328 17 ) ( -168 -327 16 ) environment/planks_012 152 0 0 1 1
  
149
}
  
150
// brush 16
  
151
{
  
152
( -88 -344 0 ) ( -88 -343 0 ) ( -88 -344 1 ) environment/planks_012 152 0 0 1 1
  
153
( -88 -344 0 ) ( -88 -344 1 ) ( -87 -344 0 ) environment/planks_012 -168 0 0 1 1
  
154
( -88 -344 0 ) ( -87 -344 0 ) ( -88 -343 0 ) environment/planks_012 -168 -152 0 1 1
  
155
( -72 -328 8 ) ( -72 -327 8 ) ( -71 -328 8 ) environment/planks_012 -168 -152 0 1 1
  
156
( -72 -328 16 ) ( -71 -328 16 ) ( -72 -328 17 ) environment/planks_012 -168 0 0 1 1
  
157
( -72 -328 16 ) ( -72 -328 17 ) ( -72 -327 16 ) environment/planks_012 152 0 0 1 1
  
158
}
  
159
// brush 17
  
160
{
  
161
( -24 -344 0 ) ( -24 -343 0 ) ( -24 -344 1 ) environment/planks_012 152 0 0 1 1
  
162
( -24 -344 0 ) ( -24 -344 1 ) ( -23 -344 0 ) environment/planks_012 -232 0 0 1 1
  
163
( -24 -344 0 ) ( -23 -344 0 ) ( -24 -343 0 ) environment/planks_012 -232 -152 0 1 1
  
164
( -8 -328 8 ) ( -8 -327 8 ) ( -7 -328 8 ) environment/planks_012 -232 -152 0 1 1
  
165
( -8 -328 16 ) ( -7 -328 16 ) ( -8 -328 17 ) environment/planks_012 -232 0 0 1 1
  
166
( -8 -328 16 ) ( -8 -328 17 ) ( -8 -327 16 ) environment/planks_012 152 0 0 1 1
  
167
}
  
168
// brush 18
  
169
{
  
170
( 72 -344 0 ) ( 72 -343 0 ) ( 72 -344 1 ) environment/planks_012 152 0 0 1 1
  
171
( 72 -344 0 ) ( 72 -344 1 ) ( 73 -344 0 ) environment/planks_012 -328 0 0 1 1
  
172
( 72 -344 0 ) ( 73 -344 0 ) ( 72 -343 0 ) environment/planks_012 -328 -152 0 1 1
  
173
( 88 -328 8 ) ( 88 -327 8 ) ( 89 -328 8 ) environment/planks_012 -328 -152 0 1 1
  
174
( 88 -328 16 ) ( 89 -328 16 ) ( 88 -328 17 ) environment/planks_012 -328 0 0 1 1
  
175
( 88 -328 16 ) ( 88 -328 17 ) ( 88 -327 16 ) environment/planks_012 152 0 0 1 1
  
176
}
  
177
// brush 19
  
178
{
  
179
( -24 -168 0 ) ( -24 -167 0 ) ( -24 -168 1 ) environment/planks_012 -24 0 0 1 1
  
180
( -24 -168 0 ) ( -24 -168 1 ) ( -23 -168 0 ) environment/planks_012 -232 0 0 1 1
  
181
( -24 -168 0 ) ( -23 -168 0 ) ( -24 -167 0 ) environment/planks_012 -232 24 0 1 1
  
182
( -8 -152 8 ) ( -8 -151 8 ) ( -7 -152 8 ) environment/planks_012 -232 24 0 1 1
  
183
( -8 -152 16 ) ( -7 -152 16 ) ( -8 -152 17 ) environment/planks_012 -232 0 0 1 1
  
184
( -8 -152 16 ) ( -8 -152 17 ) ( -8 -151 16 ) environment/planks_012 -24 0 0 1 1
  
185
}
  
186
// brush 20
  
187
{
  
188
( 72 -168 0 ) ( 72 -167 0 ) ( 72 -168 1 ) environment/planks_012 -24 0 0 1 1
  
189
( 72 -168 0 ) ( 72 -168 1 ) ( 73 -168 0 ) environment/planks_012 -328 0 0 1 1
  
190
( 72 -168 0 ) ( 73 -168 0 ) ( 72 -167 0 ) environment/planks_012 -328 24 0 1 1
  
191
( 88 -152 8 ) ( 88 -151 8 ) ( 89 -152 8 ) environment/planks_012 -328 24 0 1 1
  
192
( 88 -152 16 ) ( 89 -152 16 ) ( 88 -152 17 ) environment/planks_012 -328 0 0 1 1
  
193
( 88 -152 16 ) ( 88 -152 17 ) ( 88 -151 16 ) environment/planks_012 -24 0 0 1 1
  
194
}
  
195
// brush 21
  
196
{
  
197
( -184 -168 0 ) ( -184 -167 0 ) ( -184 -168 1 ) environment/planks_012 -24 0 0 1 1
  
198
( -184 -168 0 ) ( -184 -168 1 ) ( -183 -168 0 ) environment/planks_012 -72 0 0 1 1
  
199
( -184 -168 0 ) ( -183 -168 0 ) ( -184 -167 0 ) environment/planks_012 -72 24 0 1 1
  
200
( -168 -152 8 ) ( -168 -151 8 ) ( -167 -152 8 ) environment/planks_012 -72 24 0 1 1
  
201
( -168 -152 16 ) ( -167 -152 16 ) ( -168 -152 17 ) environment/planks_012 -72 0 0 1 1
  
202
( -168 -152 16 ) ( -168 -152 17 ) ( -168 -151 16 ) environment/planks_012 -24 0 0 1 1
  
203
}
  
204
// brush 22
  
205
{
  
206
( -88 -168 0 ) ( -88 -167 0 ) ( -88 -168 1 ) environment/planks_012 -24 0 0 1 1
  
207
( -88 -168 0 ) ( -88 -168 1 ) ( -87 -168 0 ) environment/planks_012 -168 0 0 1 1
  
208
( -88 -168 0 ) ( -87 -168 0 ) ( -88 -167 0 ) environment/planks_012 -168 24 0 1 1
  
209
( -72 -152 8 ) ( -72 -151 8 ) ( -71 -152 8 ) environment/planks_012 -168 24 0 1 1
  
210
( -72 -152 16 ) ( -71 -152 16 ) ( -72 -152 17 ) environment/planks_012 -168 0 0 1 1
  
211
( -72 -152 16 ) ( -72 -152 17 ) ( -72 -151 16 ) environment/planks_012 -24 0 0 1 1
  
212
}
15
}
213
}
16
// entity 1
214
// entity 1
17
{
215
{
18
"classname" "light"
216
"classname" "light"
19
"origin" "136 -280 184"
217
"origin" "152 -280 232"
20
}
218
}
21
// entity 2
219
// entity 2
22
{
220
{
23
"classname" "light"
221
"classname" "light"
24
"origin" "-200 24 184"
222
"origin" "-312 24 232"
25
}
223
}
26
// entity 3
224
// entity 3
27
{
225
{
28
"classname" "info_player_start"
226
"classname" "info_player_start"
29
"origin" "-128 -112 16"
227
"origin" "-464 0 16"
30
}
228
}
31
// entity 4
229
// entity 4
32
{
230
{
...
diff --git a/trenchbroom/stalag/GameEngineProfiles.cfg b/trenchbroom/stalag/GameEngineProfiles.cfg
...
2
  "profiles": [
2
  "profiles": [
3
    {
3
    {
4
      "name": "Stalag",
4
      "name": "Stalag",
5
      "parameters": "+map ${MAP_BASE_NAME}",
5
      "parameters": "--map ${MAP_BASE_NAME}",
6
      "path": "/home/m/Projects/stalag/bin/stalag"
6
      "path": "/home/m/Projects/stalag/bin/stalag"
7
    }
7
    }
8
  ],
8
  ],
9
  "version": 1
9
  "version": 1
10
}
10
}