aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--all.h4
-rw-r--r--game.c2
-rw-r--r--main.c36
-rw-r--r--maps/demo1.map226
-rw-r--r--maps/demo3.map187
-rw-r--r--player.c17
-rwxr-xr-xtbrun.sh65
-rw-r--r--textures/prototype/proto_blue.pngbin0 -> 1167 bytes
-rw-r--r--textures/prototype/proto_green.pngbin0 -> 896 bytes
-rw-r--r--textures/prototype/proto_red.pngbin0 -> 881 bytes
-rw-r--r--textures/prototype/proto_texture.xcfbin0 -> 14207 bytes
-rw-r--r--trenchbroom/stalag/GameEngineProfiles.cfg16
12 files changed, 521 insertions, 32 deletions
diff --git a/all.h b/all.h
index 26ccffb..d4025cd 100644
--- a/all.h
+++ b/all.h
@@ -114,6 +114,7 @@ typedef struct {
114 float lean_amount; 114 float lean_amount;
115 float crouch_amount; 115 float crouch_amount;
116 float horizontal_speed; 116 float horizontal_speed;
117 float camera_offset_y; // Vertical offset for stair smoothing
117} PlayerState; 118} PlayerState;
118 119
119void UpdatePlayer(void); 120void UpdatePlayer(void);
@@ -130,6 +131,9 @@ typedef struct {
130 Camera camera; 131 Camera camera;
131 bool cursor_captured; 132 bool cursor_captured;
132 bool vsync; 133 bool vsync;
134 int target_fps;
135 int screen_width;
136 int screen_height;
133 Font font_ui; 137 Font font_ui;
134 138
135 PlayerState player; 139 PlayerState player;
diff --git a/game.c b/game.c
index 40d1876..d1149b4 100644
--- a/game.c
+++ b/game.c
@@ -42,7 +42,7 @@ void UpdateGame(void) {
42 SetTargetFPS(GetMonitorRefreshRate(GetCurrentMonitor())); 42 SetTargetFPS(GetMonitorRefreshRate(GetCurrentMonitor()));
43 } else { 43 } else {
44 ClearWindowState(FLAG_VSYNC_HINT); 44 ClearWindowState(FLAG_VSYNC_HINT);
45 SetTargetFPS(0); 45 SetTargetFPS(game.target_fps);
46 } 46 }
47 } 47 }
48 48
diff --git a/main.c b/main.c
index 9f32ecc..cc96b3b 100644
--- a/main.c
+++ b/main.c
@@ -10,15 +10,21 @@ int main(int argc, char *argv[]) {
10 sb_append_cstr(&map_path, "maps/demo3.map"); 10 sb_append_cstr(&map_path, "maps/demo3.map");
11 11
12 bool skip_title = false; 12 bool skip_title = false;
13 int target_fps = -1;
14 int width = WINDOW_WIDTH;
15 int height = WINDOW_HEIGHT;
13 16
14 static struct option long_options[] = { 17 static struct option long_options[] = {
15 {"map", required_argument, 0, 'm'}, 18 {"map", required_argument, 0, 'm'},
19 {"fps", required_argument, 0, 'f'},
20 {"width", required_argument, 0, 'w'},
21 {"height", required_argument, 0, 'h'},
16 {0, 0, 0, 0} 22 {0, 0, 0, 0}
17 }; 23 };
18 24
19 int opt; 25 int opt;
20 int option_index = 0; 26 int option_index = 0;
21 while ((opt = getopt_long_only(argc, argv, "m:", long_options, &option_index)) != -1) { 27 while ((opt = getopt_long_only(argc, argv, "m:f:w:h:", long_options, &option_index)) != -1) {
22 switch (opt) { 28 switch (opt) {
23 case 'm': 29 case 'm':
24 sb_free(&map_path); 30 sb_free(&map_path);
@@ -26,20 +32,42 @@ int main(int argc, char *argv[]) {
26 sb_append_cstr(&map_path, optarg); 32 sb_append_cstr(&map_path, optarg);
27 skip_title = true; 33 skip_title = true;
28 break; 34 break;
35 case 'f':
36 target_fps = atoi(optarg);
37 break;
38 case 'w':
39 width = atoi(optarg);
40 break;
41 case 'h':
42 height = atoi(optarg);
43 break;
29 } 44 }
30 } 45 }
31 46
32 SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI); 47 unsigned int flags = FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI;
33 InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE); 48 if (target_fps < 0) flags |= FLAG_VSYNC_HINT;
49
50 SetConfigFlags(flags);
51 InitWindow(width, height, WINDOW_TITLE);
34 52
35 int monitor = GetCurrentMonitor(); 53 int monitor = GetCurrentMonitor();
36 SetWindowPosition((GetMonitorWidth(monitor) - GetScreenWidth()) / 2, (GetMonitorHeight(monitor) - GetScreenHeight()) / 2); 54 SetWindowPosition((GetMonitorWidth(monitor) - GetScreenWidth()) / 2, (GetMonitorHeight(monitor) - GetScreenHeight()) / 2);
37 SetTargetFPS(GetMonitorRefreshRate(monitor));
38 55
39 vfs_init(VFS_DATA_PAK); 56 vfs_init(VFS_DATA_PAK);
40 InitGame(); 57 InitGame();
58 game.screen_width = width;
59 game.screen_height = height;
41 SetMap(map_path.data); 60 SetMap(map_path.data);
42 61
62 if (target_fps >= 0) {
63 game.target_fps = target_fps;
64 game.vsync = false;
65 SetTargetFPS(game.target_fps);
66 } else {
67 game.vsync = true;
68 SetTargetFPS(GetMonitorRefreshRate(monitor));
69 }
70
43 if (skip_title) { 71 if (skip_title) {
44 if (LoadMap(game.map_path)) { 72 if (LoadMap(game.map_path)) {
45 game.mode = STATE_PLAYING; 73 game.mode = STATE_PLAYING;
diff --git a/maps/demo1.map b/maps/demo1.map
index a4e2168..cbaebec 100644
--- a/maps/demo1.map
+++ b/maps/demo1.map
@@ -1,37 +1,27 @@
1// Game: Generic 1// Game: Stalag
2// Format: Standard 2// Format: Standard
3// entity 0 3// entity 0
4{ 4{
5"classname" "worldspawn" 5"classname" "worldspawn"
6// brush 0 6// brush 0
7{ 7{
8( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) brushes/ground_068 0 0 0 1 1 8( -1312 -64 -16 ) ( -1312 -63 -16 ) ( -1312 -64 -15 ) brushes/rock_016 0 0 0 1 1
9( -64 -112 -16 ) ( -64 -112 -15 ) ( -63 -112 -16 ) brushes/ground_068 0 0 0 1 1 9( -64 -720 -16 ) ( -64 -720 -15 ) ( -63 -720 -16 ) brushes/rock_016 0 0 0 1 1
10( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) brushes/ground_068 0 0 0 1 1 10( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) brushes/rock_016 0 0 0 1 1
11( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) brushes/ground_068 0 0 0 1 1 11( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) brushes/rock_016 0 0 0 1 1
12( 64 64 16 ) ( 65 64 16 ) ( 64 64 17 ) brushes/ground_068 0 0 0 1 1 12( 64 896 16 ) ( 65 896 16 ) ( 64 896 17 ) brushes/rock_016 0 0 0 1 1
13( 64 64 16 ) ( 64 64 17 ) ( 64 65 16 ) brushes/ground_068 0 0 0 1 1 13( 64 64 16 ) ( 64 64 17 ) ( 64 65 16 ) brushes/rock_016 0 0 0 1 1
14} 14}
15// brush 1 15// brush 1
16{ 16{
17( 64 176 16 ) ( 64 -80 16 ) ( 64 -80 -16 ) brushes/bricks_076c 16 -16 0 1 1 17( 64 176 16 ) ( 64 -80 16 ) ( 64 -80 -16 ) brushes/bricks_076c 16 -16 0 1 1
18( 64 -80 16 ) ( 304 -80 0 ) ( 304 -80 -16 ) brushes/bricks_076c -21 0 0 1 1 18( 64 -464 16 ) ( 304 -464 0 ) ( 304 -464 -16 ) brushes/bricks_076c 0 0 0 1 1
19( 304 -80 -16 ) ( 304 176 -16 ) ( 64 176 -16 ) brushes/bricks_076c 0 0 0 1 1 19( 304 -80 -16 ) ( 304 176 -16 ) ( 64 176 -16 ) brushes/bricks_076c 0 0 0 1 1
20( 304 176 -16 ) ( 304 176 0 ) ( 64 176 16 ) brushes/bricks_076c 0 0 0 1 1 20( 304 176 -16 ) ( 304 176 0 ) ( 64 176 16 ) brushes/bricks_076c 0 0 0 1 1
21( 64 176 16 ) ( 304 176 0 ) ( 304 -80 0 ) brushes/bricks_076c 0 0 0 1 1 21( 64 176 16 ) ( 304 176 0 ) ( 304 -80 0 ) brushes/bricks_076c 0 0 0 1 1
22( 304 -80 0 ) ( 304 176 0 ) ( 304 176 -16 ) brushes/bricks_076c 0 0 0 1 1
23} 22}
24// brush 2 23// brush 2
25{ 24{
26( -176 64 0 ) ( -176 65 0 ) ( -176 64 1 ) environment/planks_012 16 0 0 1 1
27( -64 64 0 ) ( -64 64 1 ) ( -63 64 0 ) environment/planks_012 0 0 0 1 1
28( -64 64 0 ) ( -63 64 0 ) ( -64 65 0 ) environment/planks_012 0 -16 0 1 1
29( -16 112 16 ) ( -16 113 16 ) ( -15 112 16 ) environment/planks_012 0 -16 0 1 1
30( -16 336 16 ) ( -15 336 16 ) ( -16 336 17 ) environment/planks_012 0 0 0 1 1
31( -16 112 16 ) ( -16 112 17 ) ( -16 113 16 ) environment/planks_012 16 0 0 1 1
32}
33// brush 3
34{
35( -32 336 112 ) ( -32 272 112 ) ( -32 272 16 ) environment/paintedwood_008a 0 16 0 1 1 25( -32 336 112 ) ( -32 272 112 ) ( -32 272 16 ) environment/paintedwood_008a 0 16 0 1 1
36( -32 272 112 ) ( 64 272 112 ) ( 64 272 16 ) environment/paintedwood_008a 16 16 0 1 1 26( -32 272 112 ) ( 64 272 112 ) ( 64 272 16 ) environment/paintedwood_008a 16 16 0 1 1
37( 64 272 16 ) ( 64 336 16 ) ( -32 336 16 ) environment/paintedwood_008a 16 0 0 1 1 27( 64 272 16 ) ( 64 336 16 ) ( -32 336 16 ) environment/paintedwood_008a 16 0 0 1 1
@@ -39,6 +29,206 @@
39( 64 336 16 ) ( 64 336 112 ) ( -32 336 112 ) environment/paintedwood_008a 16 16 0 1 1 29( 64 336 16 ) ( 64 336 112 ) ( -32 336 112 ) environment/paintedwood_008a 16 16 0 1 1
40( 64 272 112 ) ( 64 336 112 ) ( 64 336 16 ) environment/paintedwood_008a 0 16 0 1 1 30( 64 272 112 ) ( 64 336 112 ) ( 64 336 16 ) environment/paintedwood_008a 0 16 0 1 1
41} 31}
32// brush 3
33{
34( -448 -192 72 ) ( -448 -191 72 ) ( -448 -192 73 ) prototype/proto_green 32 0 0 1 1
35( -448 -192 72 ) ( -448 -192 73 ) ( -447 -192 72 ) prototype/proto_green 32 0 0 1 1
36( -448 -192 72 ) ( -447 -192 72 ) ( -448 -191 72 ) prototype/proto_green 32 -32 0 1 1
37( -384 -128 80 ) ( -384 -127 80 ) ( -383 -128 80 ) prototype/proto_green 32 -32 0 1 1
38( -384 -128 88 ) ( -383 -128 88 ) ( -384 -128 89 ) prototype/proto_green 32 0 0 1 1
39( -416 -128 88 ) ( -416 -128 89 ) ( -416 -127 88 ) prototype/proto_green 32 0 0 1 1
40}
41// brush 4
42{
43( -416 -192 64 ) ( -416 -191 64 ) ( -416 -192 65 ) prototype/proto_green 32 0 0 1 1
44( -416 -192 64 ) ( -416 -192 65 ) ( -415 -192 64 ) prototype/proto_green 32 0 0 1 1
45( -416 -192 64 ) ( -415 -192 64 ) ( -416 -191 64 ) prototype/proto_green 32 -32 0 1 1
46( -352 -128 72 ) ( -352 -127 72 ) ( -351 -128 72 ) prototype/proto_green 32 -32 0 1 1
47( -352 -128 80 ) ( -351 -128 80 ) ( -352 -128 81 ) prototype/proto_green 32 0 0 1 1
48( -384 -128 80 ) ( -384 -128 81 ) ( -384 -127 80 ) prototype/proto_green 32 0 0 1 1
49}
50// brush 5
51{
52( -384 -192 56 ) ( -384 -191 56 ) ( -384 -192 57 ) prototype/proto_green 32 0 0 1 1
53( -384 -192 56 ) ( -384 -192 57 ) ( -383 -192 56 ) prototype/proto_green 32 0 0 1 1
54( -384 -192 56 ) ( -383 -192 56 ) ( -384 -191 56 ) prototype/proto_green 32 -32 0 1 1
55( -320 -128 64 ) ( -320 -127 64 ) ( -319 -128 64 ) prototype/proto_green 32 -32 0 1 1
56( -320 -128 72 ) ( -319 -128 72 ) ( -320 -128 73 ) prototype/proto_green 32 0 0 1 1
57( -352 -128 72 ) ( -352 -128 73 ) ( -352 -127 72 ) prototype/proto_green 32 0 0 1 1
58}
59// brush 6
60{
61( -352 -192 48 ) ( -352 -191 48 ) ( -352 -192 49 ) prototype/proto_green 32 0 0 1 1
62( -352 -192 48 ) ( -352 -192 49 ) ( -351 -192 48 ) prototype/proto_green 32 0 0 1 1
63( -352 -192 48 ) ( -351 -192 48 ) ( -352 -191 48 ) prototype/proto_green 32 -32 0 1 1
64( -288 -128 56 ) ( -288 -127 56 ) ( -287 -128 56 ) prototype/proto_green 32 -32 0 1 1
65( -288 -128 64 ) ( -287 -128 64 ) ( -288 -128 65 ) prototype/proto_green 32 0 0 1 1
66( -320 -128 64 ) ( -320 -128 65 ) ( -320 -127 64 ) prototype/proto_green 32 0 0 1 1
67}
68// brush 7
69{
70( -320 -192 40 ) ( -320 -191 40 ) ( -320 -192 41 ) prototype/proto_green 32 0 0 1 1
71( -320 -192 40 ) ( -320 -192 41 ) ( -319 -192 40 ) prototype/proto_green 32 0 0 1 1
72( -320 -192 40 ) ( -319 -192 40 ) ( -320 -191 40 ) prototype/proto_green 32 -32 0 1 1
73( -256 -128 48 ) ( -256 -127 48 ) ( -255 -128 48 ) prototype/proto_green 32 -32 0 1 1
74( -256 -128 56 ) ( -255 -128 56 ) ( -256 -128 57 ) prototype/proto_green 32 0 0 1 1
75( -288 -128 56 ) ( -288 -128 57 ) ( -288 -127 56 ) prototype/proto_green 32 0 0 1 1
76}
77// brush 8
78{
79( -288 -192 32 ) ( -288 -191 32 ) ( -288 -192 33 ) prototype/proto_green 32 0 0 1 1
80( -288 -192 32 ) ( -288 -192 33 ) ( -287 -192 32 ) prototype/proto_green 32 0 0 1 1
81( -288 -192 32 ) ( -287 -192 32 ) ( -288 -191 32 ) prototype/proto_green 32 -32 0 1 1
82( -224 -128 40 ) ( -224 -127 40 ) ( -223 -128 40 ) prototype/proto_green 32 -32 0 1 1
83( -224 -128 48 ) ( -223 -128 48 ) ( -224 -128 49 ) prototype/proto_green 32 0 0 1 1
84( -256 -128 48 ) ( -256 -128 49 ) ( -256 -127 48 ) prototype/proto_green 32 0 0 1 1
85}
86// brush 9
87{
88( -256 -192 24 ) ( -256 -191 24 ) ( -256 -192 25 ) prototype/proto_green 32 0 0 1 1
89( -256 -192 24 ) ( -256 -192 25 ) ( -255 -192 24 ) prototype/proto_green 32 0 0 1 1
90( -256 -192 24 ) ( -255 -192 24 ) ( -256 -191 24 ) prototype/proto_green 32 -32 0 1 1
91( -192 -128 32 ) ( -192 -127 32 ) ( -191 -128 32 ) prototype/proto_green 32 -32 0 1 1
92( -192 -128 40 ) ( -191 -128 40 ) ( -192 -128 41 ) prototype/proto_green 32 0 0 1 1
93( -224 -128 40 ) ( -224 -128 41 ) ( -224 -127 40 ) prototype/proto_green 32 0 0 1 1
94}
95// brush 10
96{
97( -224 -192 16 ) ( -224 -191 16 ) ( -224 -192 17 ) prototype/proto_green 32 0 0 1 1
98( -224 -192 16 ) ( -224 -192 17 ) ( -223 -192 16 ) prototype/proto_green 32 0 0 1 1
99( -224 -192 16 ) ( -223 -192 16 ) ( -224 -191 16 ) prototype/proto_green 32 -32 0 1 1
100( -160 -128 24 ) ( -160 -127 24 ) ( -159 -128 24 ) prototype/proto_green 32 -32 0 1 1
101( -160 -128 32 ) ( -159 -128 32 ) ( -160 -128 33 ) prototype/proto_green 32 0 0 1 1
102( -192 -128 32 ) ( -192 -128 33 ) ( -192 -127 32 ) prototype/proto_green 32 0 0 1 1
103}
104// brush 11
105{
106( -320 384.80404050710666 112 ) ( -320 431.19595949289334 16 ) ( -320 431.19595949289334 112 ) prototype/proto_blue 0 0 0 1 1
107( -287.19595949289334 352 112 ) ( -320 384.80404050710666 16 ) ( -320 384.80404050710666 112 ) prototype/proto_blue 0 0 0 1 1
108( -287.19595949289334 464 112 ) ( -320 431.19595949289334 16 ) ( -287.19595949289334 464 16 ) prototype/proto_blue 0 0 0 1 1
109( -240.80404050710666 352 112 ) ( -287.19595949289334 352 16 ) ( -287.19595949289334 352 112 ) prototype/proto_blue 0 0 0 1 1
110( -208 431.19595949289334 16 ) ( -240.80404050710666 352 16 ) ( -208 384.80404050710666 16 ) prototype/proto_blue 0 0 0 1 1
111( -208 431.19595949289334 112 ) ( -287.19595949289334 464 112 ) ( -240.80404050710666 464 112 ) prototype/proto_blue 0 0 0 1 1
112( -240.80404050710666 464 112 ) ( -287.19595949289334 464 16 ) ( -240.80404050710666 464 16 ) prototype/proto_blue 0 0 0 1 1
113( -208 384.80404050710666 112 ) ( -240.80404050710666 352 16 ) ( -240.80404050710666 352 112 ) prototype/proto_blue 0 0 0 1 1
114( -208 431.19595949289334 112 ) ( -240.80404050710666 464 16 ) ( -208 431.19595949289334 16 ) prototype/proto_blue 0 0 0 1 1
115( -208 431.19595949289334 112 ) ( -208 384.80404050710666 16 ) ( -208 384.80404050710666 112 ) prototype/proto_blue 0 0 0 1 1
116}
117// brush 12
118{
119( -536 344 160 ) ( -592 320.80404050710666 16 ) ( -592 367.19595949289334 16 ) prototype/proto_green 0 0 0 1 1
120( -536 344 160 ) ( -559.1959594928934 288 16 ) ( -592 320.80404050710666 16 ) prototype/proto_green 0 0 0 1 1
121( -536 344 160 ) ( -592 367.19595949289334 16 ) ( -559.1959594928933 400 16 ) prototype/proto_green 0 0 0 1 1
122( -512.8040405071067 288 16 ) ( -559.1959594928934 288 16 ) ( -536 344 160 ) prototype/proto_green 0 0 0 1 1
123( -480 367.19595949289334 16 ) ( -512.8040405071067 288 16 ) ( -480 320.80404050710666 16 ) prototype/proto_green 0 0 0 1 1
124( -512.8040405071067 400 16 ) ( -536 344 160 ) ( -559.1959594928933 400 16 ) prototype/proto_green 0 0 0 1 1
125( -480 320.80404050710666 16 ) ( -512.8040405071067 288 16 ) ( -536 344 160 ) prototype/proto_green 0 0 0 1 1
126( -480 367.19595949289334 16 ) ( -536 344 160 ) ( -512.8040405071067 400 16 ) prototype/proto_green 0 0 0 1 1
127( -480 367.19595949289334 16 ) ( -480 320.80404050710666 16 ) ( -536 344 160 ) prototype/proto_green 0 0 0 1 1
128}
129// brush 13
130{
131( -608 645.4903320081219 139.11348337068355 ) ( -608 698.5096679918781 116.88651662931647 ) ( -608 698.5096679918781 139.11348337068355 ) prototype/proto_red -32 -16 0 1 1
132( -600.2806554605962 695.3122107910265 96 ) ( -608 645.4903320081219 116.88651662931647 ) ( -600.2806554605962 648.6877892089735 96 ) prototype/proto_red -32 -16 0 1 1
133( -600.2806554605962 695.3122107910265 160 ) ( -608 645.4903320081219 139.11348337068355 ) ( -608 698.5096679918781 139.11348337068355 ) prototype/proto_red -32 -16 0 1 1
134( -585.773033258633 689.3029569171881 78.97315564038541 ) ( -600.2806554605962 648.6877892089735 96 ) ( -585.773033258633 654.6970430828119 78.97315564038541 ) prototype/proto_red -32 -16 0 1 1
135( -585.773033258633 689.3029569171881 177.02684435961459 ) ( -600.2806554605962 648.6877892089735 160 ) ( -600.2806554605962 695.3122107910265 160 ) prototype/proto_red -32 -16 0 1 1
136( -570.5096679918781 608 139.11348337068355 ) ( -608 645.4903320081219 116.88651662931647 ) ( -608 645.4903320081219 139.11348337068355 ) prototype/proto_red -32 -16 0 1 1
137( -570.5096679918781 736 139.11348337068355 ) ( -608 698.5096679918781 116.88651662931647 ) ( -570.5096679918781 736 116.88651662931647 ) prototype/proto_red -42.509644 -16 0 1 1
138( -567.3122107910265 728.2806554605963 96 ) ( -608 698.5096679918781 116.88651662931647 ) ( -600.2806554605962 695.3122107910265 96 ) prototype/proto_red -32 -16 0 1 1
139( -608 645.4903320081219 116.88651662931647 ) ( -567.3122107910265 615.7193445394038 96 ) ( -600.2806554605962 648.6877892089735 96 ) prototype/proto_red -32 -16 0 1 1
140( -608 645.4903320081219 139.11348337068355 ) ( -567.3122107910265 615.7193445394038 160 ) ( -570.5096679918781 608 139.11348337068355 ) prototype/proto_red -32 -16 0 1 1
141( -608 698.5096679918781 139.11348337068355 ) ( -567.3122107910265 728.2806554605962 160 ) ( -600.2806554605962 695.3122107910265 160 ) prototype/proto_red -32 -16 0 1 1
142( -561.3029569171881 630.226966741367 177.02684435961459 ) ( -600.2806554605962 648.6877892089735 160 ) ( -585.773033258633 654.6970430828118 177.02684435961459 ) prototype/proto_red 48 32 0 1 1
143( -561.3029569171881 630.226966741367 78.97315564038541 ) ( -600.2806554605962 648.6877892089735 96 ) ( -567.3122107910265 615.7193445394038 96 ) prototype/proto_red 48 32 0 1 1
144( -561.3029569171881 713.773033258633 177.02684435961459 ) ( -600.2806554605962 695.3122107910265 160 ) ( -567.3122107910265 728.2806554605962 160 ) prototype/proto_red 48 32 0 1 1
145( -561.3029569171881 713.773033258633 78.97315564038541 ) ( -600.2806554605962 695.3122107910265 96 ) ( -585.773033258633 689.3029569171881 78.97315564038541 ) prototype/proto_red 48 32 0 1 1
146( -566.226966741367 681.2067110746899 188.14032773029814 ) ( -585.773033258633 654.6970430828118 177.02684435961459 ) ( -585.773033258633 689.3029569171881 177.02684435961459 ) prototype/proto_red 48 32 0 1 1
147( -553.20671107469 694.2269667413672 188.14032773029814 ) ( -585.773033258633 689.3029569171881 177.02684435961459 ) ( -561.3029569171881 713.773033258633 177.02684435961459 ) prototype/proto_red 48 32 0 1 1
148( -553.20671107469 649.7730332586328 188.14032773029814 ) ( -585.773033258633 654.6970430828118 177.02684435961459 ) ( -566.226966741367 662.7932889253101 188.14032773029814 ) prototype/proto_red 48 32 0 1 1
149( -544 672 64 ) ( -585.773033258633 689.3029569171881 78.97315564038541 ) ( -585.773033258633 654.6970430828119 78.97315564038541 ) prototype/proto_red 48 32 0 1 1
150( -544 672 64 ) ( -585.773033258633 654.6970430828119 78.97315564038541 ) ( -561.3029569171881 630.226966741367 78.97315564038541 ) prototype/proto_red 48 32 0 1 1
151( -544 672 64 ) ( -561.3029569171881 713.773033258633 78.97315564038541 ) ( -585.773033258633 689.3029569171881 78.97315564038541 ) prototype/proto_red 48 32 0 1 1
152( -544 672 192 ) ( -566.226966741367 662.7932889253101 188.14032773029814 ) ( -566.226966741367 681.2067110746899 188.14032773029814 ) prototype/proto_red 48.00003 32 0 1 1
153( -544 672 192 ) ( -553.20671107469 649.7730332586328 188.14032773029814 ) ( -566.226966741367 662.7932889253101 188.14032773029814 ) prototype/proto_red 48 32 0 1 1
154( -544 672 192 ) ( -566.226966741367 681.2067110746899 188.14032773029814 ) ( -553.20671107469 694.2269667413672 188.14032773029814 ) prototype/proto_red 48 32 0 1 1
155( -517.4903320081219 608 139.11348337068355 ) ( -570.5096679918781 608 116.88651662931647 ) ( -570.5096679918781 608 139.11348337068355 ) prototype/proto_red 48 -16 0 1 1
156( -517.4903320081219 608 116.88651662931647 ) ( -567.3122107910265 615.7193445394038 96 ) ( -570.5096679918781 608 116.88651662931647 ) prototype/proto_red 48 -16 0 1 1
157( -517.4903320081219 608 139.11348337068355 ) ( -567.3122107910265 615.7193445394038 160 ) ( -520.6877892089736 615.7193445394038 160 ) prototype/proto_red 48 -16 0 1 1
158( -520.6877892089735 615.7193445394038 96 ) ( -561.3029569171881 630.226966741367 78.97315564038541 ) ( -567.3122107910265 615.7193445394038 96 ) prototype/proto_red 48 -16 0 1 1
159( -520.6877892089736 615.7193445394038 160 ) ( -561.3029569171881 630.226966741367 177.02684435961459 ) ( -526.6970430828119 630.226966741367 177.02684435961459 ) prototype/proto_red 48 -16 0 1 1
160( -526.6970430828119 630.226966741367 177.02684435961459 ) ( -553.20671107469 649.7730332586328 188.14032773029814 ) ( -534.79328892531 649.7730332586328 188.14032773029814 ) prototype/proto_red 48 32 0 1 1
161( -526.6970430828119 630.226966741367 78.97315564038541 ) ( -544 672 64 ) ( -561.3029569171881 630.226966741367 78.97315564038541 ) prototype/proto_red 48 32 0 1 1
162( -534.79328892531 649.7730332586328 188.14032773029814 ) ( -553.20671107469 649.7730332586328 188.14032773029814 ) ( -544 672 192 ) prototype/proto_red 48 32 0 1 1
163( -534.79328892531 694.2269667413672 188.14032773029814 ) ( -544 672 192 ) ( -553.20671107469 694.2269667413672 188.14032773029814 ) prototype/proto_red 48 32 0 1 1
164( -526.6970430828119 713.773033258633 78.97315564038541 ) ( -561.3029569171881 713.773033258633 78.97315564038541 ) ( -544 672 64 ) prototype/proto_red 48 32 0 1 1
165( -526.6970430828119 713.773033258633 177.02684435961459 ) ( -553.20671107469 694.2269667413672 188.14032773029814 ) ( -561.3029569171881 713.773033258633 177.02684435961459 ) prototype/proto_red 48 32 0 1 1
166( -520.6877892089735 728.2806554605963 96 ) ( -561.3029569171881 713.773033258633 78.97315564038541 ) ( -526.6970430828119 713.773033258633 78.97315564038541 ) prototype/proto_red 48 -16 0 1 1
167( -520.6877892089736 728.2806554605962 160 ) ( -561.3029569171881 713.773033258633 177.02684435961459 ) ( -567.3122107910265 728.2806554605962 160 ) prototype/proto_red 48 -16 0 1 1
168( -517.4903320081219 736 139.11348337068355 ) ( -567.3122107910265 728.2806554605962 160 ) ( -570.5096679918781 736 139.11348337068355 ) prototype/proto_red 48 -16 0 1 1
169( -517.4903320081219 736 116.88651662931647 ) ( -567.3122107910265 728.2806554605963 96 ) ( -520.6877892089735 728.2806554605963 96 ) prototype/proto_red 48 -16 0 1 1
170( -517.4903320081219 736 139.11348337068355 ) ( -570.5096679918781 736 116.88651662931647 ) ( -517.4903320081219 736 116.88651662931647 ) prototype/proto_red 48 -16 0 1 1
171( -521.773033258633 662.7932889253101 188.14032773029814 ) ( -534.79328892531 649.7730332586328 188.14032773029814 ) ( -544 672 192 ) prototype/proto_red 48 32 0 1 1
172( -521.773033258633 681.2067110746899 188.14032773029814 ) ( -544 672 192 ) ( -534.79328892531 694.2269667413672 188.14032773029814 ) prototype/proto_red 48 32 0 1 1
173( -521.773033258633 681.2067110746899 188.14032773029814 ) ( -521.773033258633 662.7932889253101 188.14032773029814 ) ( -544 672 192 ) prototype/proto_red 47.99997 32 0 1 1
174( -502.22696674136705 654.6970430828119 78.97315564038541 ) ( -544 672 64 ) ( -526.6970430828119 630.226966741367 78.97315564038541 ) prototype/proto_red 47.99997 32 0 1 1
175( -502.22696674136705 689.3029569171881 78.97315564038541 ) ( -526.6970430828119 713.773033258633 78.97315564038541 ) ( -544 672 64 ) prototype/proto_red 47.99997 32 0 1 1
176( -502.22696674136705 689.3029569171881 78.97315564038541 ) ( -544 672 64 ) ( -502.22696674136705 654.6970430828119 78.97315564038541 ) prototype/proto_red 48 32 0 1 1
177( -502.2269667413671 654.6970430828118 177.02684435961459 ) ( -534.79328892531 649.7730332586328 188.14032773029814 ) ( -521.773033258633 662.7932889253101 188.14032773029814 ) prototype/proto_red 47.99997 32 0 1 1
178( -534.79328892531 694.2269667413672 188.14032773029814 ) ( -502.2269667413671 689.3029569171881 177.02684435961459 ) ( -521.773033258633 681.2067110746899 188.14032773029814 ) prototype/proto_red 47.99997 32 0 1 1
179( -502.2269667413671 689.3029569171881 177.02684435961459 ) ( -521.773033258633 662.7932889253101 188.14032773029814 ) ( -521.773033258633 681.2067110746899 188.14032773029814 ) prototype/proto_red 48 32 0 1 1
180( -487.71934453940366 695.3122107910265 96 ) ( -526.6970430828119 713.773033258633 78.97315564038541 ) ( -502.22696674136705 689.3029569171881 78.97315564038541 ) prototype/proto_red 48 32 0 1 1
181( -487.71934453940366 648.6877892089735 160 ) ( -526.6970430828119 630.226966741367 177.02684435961459 ) ( -502.2269667413671 654.6970430828118 177.02684435961459 ) prototype/proto_red 48 32 0 1 1
182( -487.71934453940366 648.6877892089735 96 ) ( -526.6970430828119 630.226966741367 78.97315564038541 ) ( -520.6877892089735 615.7193445394038 96 ) prototype/proto_red 48 32 0 1 1
183( -487.71934453940366 695.3122107910265 160 ) ( -526.6970430828119 713.773033258633 177.02684435961459 ) ( -520.6877892089736 728.2806554605962 160 ) prototype/proto_red 48 32 0 1 1
184( -520.6877892089736 728.2806554605962 160 ) ( -480 698.5096679918781 139.11348337068355 ) ( -487.71934453940366 695.3122107910265 160 ) prototype/proto_red 48 -16 0 1 1
185( -520.6877892089736 615.7193445394038 160 ) ( -480 645.4903320081219 139.11348337068355 ) ( -517.4903320081219 608 139.11348337068355 ) prototype/proto_red 10.94873 30.987251 0 1 1.1283555
186( -480 645.4903320081219 116.88651662931647 ) ( -520.6877892089735 615.7193445394038 96 ) ( -517.4903320081219 608 116.88651662931647 ) prototype/proto_red -32 -16 0 1 1
187( -480 698.5096679918781 116.88651662931647 ) ( -520.6877892089735 728.2806554605963 96 ) ( -487.71934453940366 695.3122107910265 96 ) prototype/proto_red 5.0512695 35.8916 180 1 -1.1283555
188( -480 645.4903320081219 139.11348337068355 ) ( -517.4903320081219 608 116.88651662931647 ) ( -517.4903320081219 608 139.11348337068355 ) prototype/proto_red -32 -16 0 1 1
189( -480 698.5096679918781 139.11348337068355 ) ( -517.4903320081219 736 116.88651662931647 ) ( -480 698.5096679918781 116.88651662931647 ) prototype/proto_red 10.509644 -16 180 1 -1
190( -502.2269667413671 654.6970430828118 177.02684435961459 ) ( -487.71934453940366 695.3122107910265 160 ) ( -487.71934453940366 648.6877892089735 160 ) prototype/proto_red -32 -16 0 1 1
191( -487.71934453940366 695.3122107910265 96 ) ( -502.22696674136705 654.6970430828119 78.97315564038541 ) ( -487.71934453940366 648.6877892089735 96 ) prototype/proto_red -32 -16 0 1 1
192( -480 698.5096679918781 139.11348337068355 ) ( -487.71934453940366 648.6877892089735 160 ) ( -487.71934453940366 695.3122107910265 160 ) prototype/proto_red -32 -16 0 1 1
193( -480 698.5096679918781 116.88651662931647 ) ( -487.71934453940366 648.6877892089735 96 ) ( -480 645.4903320081219 116.88651662931647 ) prototype/proto_red -32 -16 0 1 1
194( -480 698.5096679918781 139.11348337068355 ) ( -480 645.4903320081219 116.88651662931647 ) ( -480 645.4903320081219 139.11348337068355 ) prototype/proto_red -32 -16 0 1 1
195}
196// brush 14
197{
198( -496 -320 80 ) ( -496 -319 80 ) ( -496 -320 81 ) prototype/proto_green 0 16 0 1 1
199( -496 -320 80 ) ( -496 -320 81 ) ( -495 -320 80 ) prototype/proto_green -16 16 0 1 1
200( -496 -320 80 ) ( -495 -320 80 ) ( -496 -319 80 ) prototype/proto_green -48 -32 0 1 1
201( -432 -256 144 ) ( -432 -255 144 ) ( -431 -256 144 ) prototype/proto_green -48 0 0 1 1
202( -432 -256 96 ) ( -431 -256 96 ) ( -432 -256 97 ) prototype/proto_green -16 16 0 1 1
203( -432 -256 96 ) ( -432 -256 97 ) ( -432 -255 96 ) prototype/proto_green 0 16 0 1 1
204}
205// brush 15
206{
207( -416 -320 48 ) ( -416 -319 48 ) ( -416 -320 49 ) prototype/proto_green 0 -16 0 1 1
208( -416 -320 48 ) ( -416 -320 49 ) ( -415 -320 48 ) prototype/proto_green -32 -16 0 1 1
209( -416 -320 48 ) ( -415 -320 48 ) ( -416 -319 48 ) prototype/proto_green 0 -32 0 1 1
210( -352 -256 112 ) ( -352 -255 112 ) ( -351 -256 112 ) prototype/proto_green 0 0 0 1 1
211( -352 -256 64 ) ( -351 -256 64 ) ( -352 -256 65 ) prototype/proto_green -32 -16 0 1 1
212( -352 -256 64 ) ( -352 -256 65 ) ( -352 -255 64 ) prototype/proto_green 0 -16 0 1 1
213}
214// brush 16
215{
216( -336 -320 16 ) ( -336 -319 16 ) ( -336 -320 17 ) prototype/proto_green 0 -48 0 1 1
217( -336 -320 16 ) ( -336 -320 17 ) ( -335 -320 16 ) prototype/proto_green -48 -48 0 1 1
218( -336 -320 16 ) ( -335 -320 16 ) ( -336 -319 16 ) prototype/proto_green -16 -32 0 1 1
219( -272 -256 80 ) ( -272 -255 80 ) ( -271 -256 80 ) prototype/proto_green -16 0 0 1 1
220( -272 -256 32 ) ( -271 -256 32 ) ( -272 -256 33 ) prototype/proto_green -48 -48 0 1 1
221( -272 -256 32 ) ( -272 -256 33 ) ( -272 -255 32 ) prototype/proto_green 0 -48 0 1 1
222}
223// brush 17
224{
225( -256 -320 16 ) ( -256 -319 16 ) ( -256 -320 17 ) prototype/proto_green 0 -48 0 1 1
226( -256 -320 16 ) ( -256 -320 17 ) ( -255 -320 16 ) prototype/proto_green 0 -48 0 1 1
227( -256 -320 16 ) ( -255 -320 16 ) ( -256 -319 16 ) prototype/proto_green -32 -32 0 1 1
228( -192 -256 48 ) ( -192 -255 48 ) ( -191 -256 48 ) prototype/proto_green -32 0 0 1 1
229( -192 -256 32 ) ( -191 -256 32 ) ( -192 -256 33 ) prototype/proto_green 0 -48 0 1 1
230( -192 -256 32 ) ( -192 -256 33 ) ( -192 -255 32 ) prototype/proto_green 0 -48 0 1 1
231}
42} 232}
43// entity 1 233// entity 1
44{ 234{
diff --git a/maps/demo3.map b/maps/demo3.map
index f12f33c..d3bc665 100644
--- a/maps/demo3.map
+++ b/maps/demo3.map
@@ -210,6 +210,193 @@
210( -72 -152 16 ) ( -71 -152 16 ) ( -72 -152 17 ) environment/planks_012 -168 0 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 211( -72 -152 16 ) ( -72 -152 17 ) ( -72 -151 16 ) environment/planks_012 -24 0 0 1 1
212} 212}
213// brush 23
214{
215( -160 208 80 ) ( -160 209 80 ) ( -160 208 81 ) prototype/proto_green -16 16 0 1 1
216( -160 208 80 ) ( -160 208 81 ) ( -159 208 80 ) prototype/proto_green 32 16 0 1 1
217( -160 208 80 ) ( -159 208 80 ) ( -160 209 80 ) prototype/proto_green 0 -16 0 1 1
218( -96 272 144 ) ( -96 273 144 ) ( -95 272 144 ) prototype/proto_green 0 16 0 1 1
219( -96 272 96 ) ( -95 272 96 ) ( -96 272 97 ) prototype/proto_green 32 16 0 1 1
220( -96 272 96 ) ( -96 272 97 ) ( -96 273 96 ) prototype/proto_green -16 16 0 1 1
221}
222// brush 24
223{
224( -80 208 48 ) ( -80 209 48 ) ( -80 208 49 ) prototype/proto_green -16 -16 0 1 1
225( -80 208 48 ) ( -80 208 49 ) ( -79 208 48 ) prototype/proto_green -48 -16 0 1 1
226( -80 208 48 ) ( -79 208 48 ) ( -80 209 48 ) prototype/proto_green -16 -16 0 1 1
227( -16 272 112 ) ( -16 273 112 ) ( -15 272 112 ) prototype/proto_green -16 16 0 1 1
228( -16 272 64 ) ( -15 272 64 ) ( -16 272 65 ) prototype/proto_green -48 -16 0 1 1
229( -16 272 64 ) ( -16 272 65 ) ( -16 273 64 ) prototype/proto_green -16 -16 0 1 1
230}
231// brush 25
232{
233( 0 208 16 ) ( 0 209 16 ) ( 0 208 17 ) prototype/proto_green -16 -48 0 1 1
234( 0 208 16 ) ( 0 208 17 ) ( 1 208 16 ) prototype/proto_green 0 -48 0 1 1
235( 0 208 16 ) ( 1 208 16 ) ( 0 209 16 ) prototype/proto_green -32 -16 0 1 1
236( 64 272 80 ) ( 64 273 80 ) ( 65 272 80 ) prototype/proto_green -32 16 0 1 1
237( 64 272 32 ) ( 65 272 32 ) ( 64 272 33 ) prototype/proto_green 0 -48 0 1 1
238( 64 272 32 ) ( 64 272 33 ) ( 64 273 32 ) prototype/proto_green -16 -48 0 1 1
239}
240// brush 26
241{
242( 80 208 16 ) ( 80 209 16 ) ( 80 208 17 ) prototype/proto_green -16 -48 0 1 1
243( 80 208 16 ) ( 80 208 17 ) ( 81 208 16 ) prototype/proto_green 48 -48 0 1 1
244( 80 208 16 ) ( 81 208 16 ) ( 80 209 16 ) prototype/proto_green 16 -16 0 1 1
245( 144 272 48 ) ( 144 273 48 ) ( 145 272 48 ) prototype/proto_green 16 16 0 1 1
246( 144 272 32 ) ( 145 272 32 ) ( 144 272 33 ) prototype/proto_green 48 -48 0 1 1
247( 144 272 32 ) ( 144 272 33 ) ( 144 273 32 ) prototype/proto_green -16 -48 0 1 1
248}
249// brush 27
250{
251( 144 64 16 ) ( 144 65 16 ) ( 144 64 17 ) prototype/proto_green 0 16 0 1 1
252( 144 64 16 ) ( 144 64 17 ) ( 145 64 16 ) prototype/proto_green -16 16 0 1 1
253( 144 64 16 ) ( 145 64 16 ) ( 144 65 16 ) prototype/proto_green -48 -32 0 1 1
254( 208 128 24 ) ( 208 129 24 ) ( 209 128 24 ) prototype/proto_green -48 0 0 1 1
255( 208 128 32 ) ( 209 128 32 ) ( 208 128 33 ) prototype/proto_green -16 16 0 1 1
256( 176 128 32 ) ( 176 128 33 ) ( 176 129 32 ) prototype/proto_green 0 16 0 1 1
257}
258// brush 28
259{
260( 112 64 24 ) ( 112 65 24 ) ( 112 64 25 ) prototype/proto_green 0 24 0 1 1
261( 112 64 24 ) ( 112 64 25 ) ( 113 64 24 ) prototype/proto_green 16 24 0 1 1
262( 112 64 24 ) ( 113 64 24 ) ( 112 65 24 ) prototype/proto_green -16 -32 0 1 1
263( 176 128 32 ) ( 176 129 32 ) ( 177 128 32 ) prototype/proto_green -16 0 0 1 1
264( 176 128 40 ) ( 177 128 40 ) ( 176 128 41 ) prototype/proto_green 16 24 0 1 1
265( 144 128 40 ) ( 144 128 41 ) ( 144 129 40 ) prototype/proto_green 0 24 0 1 1
266}
267// brush 29
268{
269( 80 64 32 ) ( 80 65 32 ) ( 80 64 33 ) prototype/proto_green 0 32 0 1 1
270( 80 64 32 ) ( 80 64 33 ) ( 81 64 32 ) prototype/proto_green 48 32 0 1 1
271( 80 64 32 ) ( 81 64 32 ) ( 80 65 32 ) prototype/proto_green 16 -32 0 1 1
272( 144 128 40 ) ( 144 129 40 ) ( 145 128 40 ) prototype/proto_green 16 0 0 1 1
273( 144 128 48 ) ( 145 128 48 ) ( 144 128 49 ) prototype/proto_green 48 32 0 1 1
274( 112 128 48 ) ( 112 128 49 ) ( 112 129 48 ) prototype/proto_green 0 32 0 1 1
275}
276// brush 30
277{
278( 48 64 40 ) ( 48 65 40 ) ( 48 64 41 ) prototype/proto_green 0 -24 0 1 1
279( 48 64 40 ) ( 48 64 41 ) ( 49 64 40 ) prototype/proto_green 16 -24 0 1 1
280( 48 64 40 ) ( 49 64 40 ) ( 48 65 40 ) prototype/proto_green 48 -32 0 1 1
281( 112 128 48 ) ( 112 129 48 ) ( 113 128 48 ) prototype/proto_green 48 0 0 1 1
282( 112 128 56 ) ( 113 128 56 ) ( 112 128 57 ) prototype/proto_green 16 -24 0 1 1
283( 80 128 56 ) ( 80 128 57 ) ( 80 129 56 ) prototype/proto_green 0 -24 0 1 1
284}
285// brush 31
286{
287( 436 144 96 ) ( 392 127.43145750507618 0 ) ( 392 160.56854249492383 0 ) prototype/proto_red 0 0 0 1 1
288( 436 144 96 ) ( 417.77460325558377 104 0 ) ( 392 127.43145750507618 0 ) prototype/proto_red 0 0 0 1 1
289( 436 144 96 ) ( 392 160.56854249492383 0 ) ( 417.7746032555838 184 0 ) prototype/proto_red 0 0 0 1 1
290( 454.2253967444162 104 0 ) ( 417.77460325558377 104 0 ) ( 436 144 96 ) prototype/proto_red 0 0 0 1 1
291( 480 160.5685424949238 0 ) ( 454.2253967444162 104 0 ) ( 480 127.4314575050762 0 ) prototype/proto_red 0 0 0 1 1
292( 454.2253967444162 184 0 ) ( 436 144 96 ) ( 417.7746032555838 184 0 ) prototype/proto_red 0 0 0 1 1
293( 480 127.4314575050762 0 ) ( 454.2253967444162 104 0 ) ( 436 144 96 ) prototype/proto_red 0 0 0 1 1
294( 480 160.5685424949238 0 ) ( 436 144 96 ) ( 454.2253967444162 184 0 ) prototype/proto_red 0 0 0 1 1
295( 480 160.5685424949238 0 ) ( 480 127.4314575050762 0 ) ( 436 144 96 ) prototype/proto_red 0 0 0 1 1
296}
297// brush 32
298{
299( 400 -39.59797974644667 58.2513343960095 ) ( 400 -16.402020253553324 45.74866560399051 ) ( 400 -16.402020253553324 58.2513343960095 ) prototype/proto_blue 0 16 0 1 1
300( 404.3421313034146 -17.80090777892595 34 ) ( 400 -39.59797974644667 45.74866560399051 ) ( 404.3421313034146 -38.19909222107405 34 ) prototype/proto_blue 0 16 0 1 1
301( 404.3421313034146 -17.80090777892595 70 ) ( 400 -39.59797974644667 58.2513343960095 ) ( 400 -16.402020253553324 58.2513343960095 ) prototype/proto_blue 0 15.999996 0 1 1
302( 412.502668792019 -20.429956348730187 24.422400047716792 ) ( 404.3421313034146 -38.19909222107405 34 ) ( 412.502668792019 -35.57004365126981 24.422400047716792 ) prototype/proto_blue 0 16 0 1 1
303( 412.502668792019 -20.42995634873019 79.57759995228321 ) ( 404.3421313034146 -38.19909222107404 70 ) ( 404.3421313034146 -17.80090777892595 70 ) prototype/proto_blue 0 16.000004 0 1 1
304( 421.08831175456856 -56 58.2513343960095 ) ( 400 -39.59797974644667 45.74866560399051 ) ( 400 -39.59797974644667 58.2513343960095 ) prototype/proto_blue -48 16 0 1 1
305( 421.08831175456856 0 58.2513343960095 ) ( 400 -16.402020253553324 45.74866560399051 ) ( 421.08831175456856 0 45.74866560399051 ) prototype/proto_blue -48 16 0 1 1
306( 422.88688143004765 -52.62278676401087 34 ) ( 400 -39.59797974644667 45.74866560399051 ) ( 421.08831175456856 -56 45.74866560399051 ) prototype/proto_blue -48 16 0 1 1
307( 422.88688143004765 -52.62278676401087 70 ) ( 400 -39.59797974644667 58.2513343960095 ) ( 404.3421313034146 -38.19909222107404 70 ) prototype/proto_blue -48 15.999996 0 1 1
308( 422.88688143004765 -3.377213235989125 34 ) ( 400 -16.402020253553324 45.74866560399051 ) ( 404.3421313034146 -17.80090777892595 34 ) prototype/proto_blue -48 16 0 1 1
309( 422.88688143004765 -3.3772132359891285 70 ) ( 400 -16.402020253553324 58.2513343960095 ) ( 421.08831175456856 0 58.2513343960095 ) prototype/proto_blue -48 15.999996 0 1 1
310( 423.497331207981 -23.972063904823138 85.8289343482927 ) ( 412.502668792019 -35.57004365126981 79.57759995228321 ) ( 412.502668792019 -20.42995634873019 79.57759995228321 ) prototype/proto_blue -48 0 0 1 1
311( 426.2670867340816 -9.724297949348095 24.422400047716792 ) ( 404.3421313034146 -17.80090777892595 34 ) ( 412.502668792019 -20.429956348730187 24.422400047716792 ) prototype/proto_blue -48 16 0 1 1
312( 426.2670867340816 -46.27570205065191 24.422400047716792 ) ( 404.3421313034146 -38.19909222107405 34 ) ( 422.88688143004765 -52.62278676401087 34 ) prototype/proto_blue -48 16 0 1 1
313( 404.3421313034146 -38.19909222107404 70 ) ( 426.26708673408166 -46.2757020506519 79.57759995228321 ) ( 422.88688143004765 -52.62278676401087 70 ) prototype/proto_blue -48 16.000004 0 1 1
314( 426.26708673408166 -9.724297949348102 79.57759995228321 ) ( 404.3421313034146 -17.80090777892595 70 ) ( 422.88688143004765 -3.3772132359891285 70 ) prototype/proto_blue -48 16.000004 0 1 1
315( 436 -28 16 ) ( 412.502668792019 -20.429956348730187 24.422400047716792 ) ( 412.502668792019 -35.57004365126981 24.422400047716792 ) prototype/proto_blue -48 0 0 1 1
316( 430.82122502048685 -37.724297949348106 85.8289343482927 ) ( 412.502668792019 -35.57004365126981 79.57759995228321 ) ( 423.497331207981 -32.02793609517686 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
317( 430.82122502048685 -18.2757020506519 85.8289343482927 ) ( 412.502668792019 -20.42995634873019 79.57759995228321 ) ( 426.26708673408166 -9.724297949348102 79.57759995228321 ) prototype/proto_blue -48 0 0 1 1
318( 436 -28 16 ) ( 412.502668792019 -35.57004365126981 24.422400047716792 ) ( 426.2670867340816 -46.27570205065191 24.422400047716792 ) prototype/proto_blue -48 0 0 1 1
319( 436 -28 16 ) ( 426.2670867340816 -9.724297949348095 24.422400047716792 ) ( 412.502668792019 -20.429956348730187 24.422400047716792 ) prototype/proto_blue -48 0 0 1 1
320( 436 -28 88 ) ( 423.497331207981 -32.02793609517686 85.8289343482927 ) ( 423.497331207981 -23.972063904823138 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
321( 436 -28 88 ) ( 430.82122502048685 -37.724297949348106 85.8289343482927 ) ( 423.497331207981 -32.02793609517686 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
322( 436 -28 88 ) ( 423.497331207981 -23.972063904823138 85.8289343482927 ) ( 430.82122502048685 -18.2757020506519 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
323( 449.11311856995235 -52.622786764010876 34 ) ( 426.2670867340816 -46.27570205065191 24.422400047716792 ) ( 422.88688143004765 -52.62278676401087 34 ) prototype/proto_blue -48 16 0 1 1
324( 450.91168824543144 -56 58.2513343960095 ) ( 421.08831175456856 -56 45.74866560399051 ) ( 421.08831175456856 -56 58.2513343960095 ) prototype/proto_blue -48 16 0 1 1
325( 450.91168824543144 -56 45.74866560399051 ) ( 422.88688143004765 -52.62278676401087 34 ) ( 421.08831175456856 -56 45.74866560399051 ) prototype/proto_blue -48 16 0 1 1
326( 450.91168824543144 -56 58.2513343960095 ) ( 422.88688143004765 -52.62278676401087 70 ) ( 449.1131185699523 -52.62278676401087 70 ) prototype/proto_blue -48 15.999996 0 1 1
327( 449.1131185699523 -52.62278676401087 70 ) ( 426.26708673408166 -46.2757020506519 79.57759995228321 ) ( 445.73291326591834 -46.2757020506519 79.57759995228321 ) prototype/proto_blue -48 16.000004 0 1 1
328( 445.73291326591834 -46.2757020506519 79.57759995228321 ) ( 430.82122502048685 -37.724297949348106 85.8289343482927 ) ( 441.1787749795131 -37.724297949348106 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
329( 445.73291326591834 -46.27570205065191 24.422400047716792 ) ( 436 -28 16 ) ( 426.2670867340816 -46.27570205065191 24.422400047716792 ) prototype/proto_blue -48 0 0 1 1
330( 441.1787749795131 -37.724297949348106 85.8289343482927 ) ( 430.82122502048685 -37.724297949348106 85.8289343482927 ) ( 436 -28 88 ) prototype/proto_blue -48 0 0 1 1
331( 441.1787749795131 -18.2757020506519 85.8289343482927 ) ( 436 -28 88 ) ( 430.82122502048685 -18.2757020506519 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
332( 445.73291326591834 -9.724297949348095 24.422400047716792 ) ( 426.2670867340816 -9.724297949348095 24.422400047716792 ) ( 436 -28 16 ) prototype/proto_blue -48 0 0 1 1
333( 445.73291326591834 -9.724297949348102 79.57759995228321 ) ( 430.82122502048685 -18.2757020506519 85.8289343482927 ) ( 426.26708673408166 -9.724297949348102 79.57759995228321 ) prototype/proto_blue -48 0 0 1 1
334( 449.1131185699523 -3.3772132359891285 70 ) ( 426.26708673408166 -9.724297949348102 79.57759995228321 ) ( 422.88688143004765 -3.3772132359891285 70 ) prototype/proto_blue -48 16.000004 0 1 1
335( 449.11311856995235 -3.377213235989125 34 ) ( 426.2670867340816 -9.724297949348095 24.422400047716792 ) ( 445.73291326591834 -9.724297949348095 24.422400047716792 ) prototype/proto_blue -48 16 0 1 1
336( 450.91168824543144 0 58.2513343960095 ) ( 422.88688143004765 -3.3772132359891285 70 ) ( 421.08831175456856 0 58.2513343960095 ) prototype/proto_blue -48 15.999996 0 1 1
337( 450.91168824543144 0 45.74866560399051 ) ( 422.88688143004765 -3.377213235989125 34 ) ( 449.11311856995235 -3.377213235989125 34 ) prototype/proto_blue -48 16 0 1 1
338( 450.91168824543144 0 58.2513343960095 ) ( 421.08831175456856 0 45.74866560399051 ) ( 450.91168824543144 0 45.74866560399051 ) prototype/proto_blue -48 16 0 1 1
339( 448.502668792019 -32.02793609517686 85.8289343482927 ) ( 441.1787749795131 -37.724297949348106 85.8289343482927 ) ( 436 -28 88 ) prototype/proto_blue -48 0 0 1 1
340( 448.502668792019 -23.972063904823145 85.8289343482927 ) ( 436 -28 88 ) ( 441.1787749795131 -18.2757020506519 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
341( 448.502668792019 -23.972063904823145 85.8289343482927 ) ( 448.502668792019 -32.02793609517686 85.8289343482927 ) ( 436 -28 88 ) prototype/proto_blue -48 0 0 1 1
342( 459.497331207981 -35.570043651269806 24.422400047716792 ) ( 436 -28 16 ) ( 445.73291326591834 -46.27570205065191 24.422400047716792 ) prototype/proto_blue -48 0 0 1 1
343( 459.497331207981 -20.429956348730197 24.422400047716792 ) ( 445.73291326591834 -9.724297949348095 24.422400047716792 ) ( 436 -28 16 ) prototype/proto_blue -48 0 0 1 1
344( 441.1787749795131 -18.2757020506519 85.8289343482927 ) ( 459.497331207981 -20.429956348730197 79.57759995228321 ) ( 448.502668792019 -23.972063904823145 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
345( 441.1787749795131 -37.724297949348106 85.8289343482927 ) ( 459.497331207981 -35.570043651269806 79.57759995228321 ) ( 445.73291326591834 -46.2757020506519 79.57759995228321 ) prototype/proto_blue -48 0 0 1 1
346( 459.497331207981 -20.429956348730197 24.422400047716792 ) ( 436 -28 16 ) ( 459.497331207981 -35.570043651269806 24.422400047716792 ) prototype/proto_blue -48 0 0 1 1
347( 467.6578686965854 -17.800907778925964 70 ) ( 445.73291326591834 -9.724297949348102 79.57759995228321 ) ( 449.1131185699523 -3.3772132359891285 70 ) prototype/proto_blue -48 16.000004 0 1 1
348( 467.6578686965854 -38.19909222107404 70 ) ( 445.73291326591834 -46.2757020506519 79.57759995228321 ) ( 459.497331207981 -35.570043651269806 79.57759995228321 ) prototype/proto_blue -48 16.000004 0 1 1
349( 467.6578686965854 -38.19909222107404 34 ) ( 445.73291326591834 -46.27570205065191 24.422400047716792 ) ( 449.11311856995235 -52.622786764010876 34 ) prototype/proto_blue -48 16 0 1 1
350( 445.73291326591834 -9.724297949348095 24.422400047716792 ) ( 467.6578686965854 -17.80090777892596 34 ) ( 449.11311856995235 -3.377213235989125 34 ) prototype/proto_blue -48 16 0 1 1
351( 459.497331207981 -20.429956348730197 79.57759995228321 ) ( 448.502668792019 -32.02793609517686 85.8289343482927 ) ( 448.502668792019 -23.972063904823145 85.8289343482927 ) prototype/proto_blue -48 0 0 1 1
352( 472 -39.59797974644667 58.2513343960095 ) ( 449.1131185699523 -52.62278676401087 70 ) ( 467.6578686965854 -38.19909222107404 70 ) prototype/proto_blue -48 15.999996 0 1 1
353( 472 -16.40202025355334 58.2513343960095 ) ( 449.1131185699523 -3.3772132359891285 70 ) ( 450.91168824543144 0 58.2513343960095 ) prototype/proto_blue -48 15.999996 0 1 1
354( 472 -39.59797974644667 45.74866560399051 ) ( 449.11311856995235 -52.622786764010876 34 ) ( 450.91168824543144 -56 45.74866560399051 ) prototype/proto_blue -48 16 0 1 1
355( 472 -16.40202025355334 45.74866560399051 ) ( 449.11311856995235 -3.377213235989125 34 ) ( 467.6578686965854 -17.80090777892596 34 ) prototype/proto_blue -48 16 0 1 1
356( 472 -39.59797974644667 58.2513343960095 ) ( 450.91168824543144 -56 45.74866560399051 ) ( 450.91168824543144 -56 58.2513343960095 ) prototype/proto_blue -48 16 0 1 1
357( 472 -16.40202025355334 58.2513343960095 ) ( 450.91168824543144 0 45.74866560399051 ) ( 472 -16.40202025355334 45.74866560399051 ) prototype/proto_blue -48 16 0 1 1
358( 459.497331207981 -35.570043651269806 24.422400047716792 ) ( 467.6578686965854 -17.80090777892596 34 ) ( 459.497331207981 -20.429956348730197 24.422400047716792 ) prototype/proto_blue 0 16 0 1 1
359( 467.6578686965854 -17.800907778925964 70 ) ( 459.497331207981 -35.570043651269806 79.57759995228321 ) ( 459.497331207981 -20.429956348730197 79.57759995228321 ) prototype/proto_blue 0 16.000004 0 1 1
360( 472 -16.40202025355334 45.74866560399051 ) ( 467.6578686965854 -38.19909222107404 34 ) ( 472 -39.59797974644667 45.74866560399051 ) prototype/proto_blue 0 16 0 1 1
361( 467.6578686965854 -38.19909222107404 70 ) ( 472 -16.40202025355334 58.2513343960095 ) ( 472 -39.59797974644667 58.2513343960095 ) prototype/proto_blue 0 15.999996 0 1 1
362( 472 -16.40202025355334 58.2513343960095 ) ( 472 -39.59797974644667 45.74866560399051 ) ( 472 -39.59797974644667 58.2513343960095 ) prototype/proto_blue 0 16 0 1 1
363}
364// brush 33
365{
366( 16 64 48 ) ( 16 65 48 ) ( 16 64 49 ) prototype/proto_green 0 -16 0 1 1
367( 16 64 48 ) ( 16 64 49 ) ( 17 64 48 ) prototype/proto_green 48 -16 0 1 1
368( 16 64 48 ) ( 17 64 48 ) ( 16 65 48 ) prototype/proto_green 16 -32 0 1 1
369( 80 128 56 ) ( 80 129 56 ) ( 81 128 56 ) prototype/proto_green 16 0 0 1 1
370( 80 128 64 ) ( 81 128 64 ) ( 80 128 65 ) prototype/proto_green 48 -16 0 1 1
371( 48 128 64 ) ( 48 128 65 ) ( 48 129 64 ) prototype/proto_green 0 -16 0 1 1
372}
373// brush 34
374{
375( -16 64 56 ) ( -16 65 56 ) ( -16 64 57 ) prototype/proto_green 0 -8 0 1 1
376( -16 64 56 ) ( -16 64 57 ) ( -15 64 56 ) prototype/proto_green 16 -8 0 1 1
377( -16 64 56 ) ( -15 64 56 ) ( -16 65 56 ) prototype/proto_green 48 -32 0 1 1
378( 48 128 64 ) ( 48 129 64 ) ( 49 128 64 ) prototype/proto_green 48 0 0 1 1
379( 48 128 72 ) ( 49 128 72 ) ( 48 128 73 ) prototype/proto_green 16 -8 0 1 1
380( 16 128 72 ) ( 16 128 73 ) ( 16 129 72 ) prototype/proto_green 0 -8 0 1 1
381}
382// brush 35
383{
384( -48 64 64 ) ( -48 65 64 ) ( -48 64 65 ) prototype/proto_green 0 0 0 1 1
385( -48 64 64 ) ( -48 64 65 ) ( -47 64 64 ) prototype/proto_green 48 0 0 1 1
386( -48 64 64 ) ( -47 64 64 ) ( -48 65 64 ) prototype/proto_green 16 -32 0 1 1
387( 16 128 72 ) ( 16 129 72 ) ( 17 128 72 ) prototype/proto_green 16 0 0 1 1
388( 16 128 80 ) ( 17 128 80 ) ( 16 128 81 ) prototype/proto_green 48 0 0 1 1
389( -16 128 80 ) ( -16 128 81 ) ( -16 129 80 ) prototype/proto_green 0 0 0 1 1
390}
391// brush 36
392{
393( -80 64 72 ) ( -80 65 72 ) ( -80 64 73 ) prototype/proto_green 0 8 0 1 1
394( -80 64 72 ) ( -80 64 73 ) ( -79 64 72 ) prototype/proto_green 16 8 0 1 1
395( -80 64 72 ) ( -79 64 72 ) ( -80 65 72 ) prototype/proto_green 48 -32 0 1 1
396( -16 128 80 ) ( -16 129 80 ) ( -15 128 80 ) prototype/proto_green 48 0 0 1 1
397( -16 128 88 ) ( -15 128 88 ) ( -16 128 89 ) prototype/proto_green 16 8 0 1 1
398( -48 128 88 ) ( -48 128 89 ) ( -48 129 88 ) prototype/proto_green 0 8 0 1 1
399}
213} 400}
214// entity 1 401// entity 1
215{ 402{
diff --git a/player.c b/player.c
index 52788f1..88b0e6c 100644
--- a/player.c
+++ b/player.c
@@ -47,7 +47,9 @@ static void MoveNormal(float dt) {
47 closestHit.distance = FLT_MAX; 47 closestHit.distance = FLT_MAX;
48 bool hitFound = false; 48 bool hitFound = false;
49 49
50 float heights[] = { -eyeHeight + 10.0f, -eyeHeight / 2.0f, 0.0f }; 50 // Cast rays at different heights to check for obstacles.
51 // The bottom ray is raised slightly to allow stepping over small ledges/stairs.
52 float heights[] = { -eyeHeight + 18.0f, -eyeHeight / 2.0f, 0.0f };
51 Vector3 currentPos = game.player.pos; 53 Vector3 currentPos = game.player.pos;
52 54
53 for (int i = 0; i < 3; i++) { 55 for (int i = 0; i < 3; i++) {
@@ -91,6 +93,7 @@ static void MoveNormal(float dt) {
91 93
92 float verticalMove = game.player.velocity.y * dt; 94 float verticalMove = game.player.velocity.y * dt;
93 Vector3 vStart = game.player.pos; 95 Vector3 vStart = game.player.pos;
96 float oldY = game.player.pos.y; // Record Y for stair smoothing snap detection
94 97
95 if (verticalMove < 0) { 98 if (verticalMove < 0) {
96 Vector3 start = vStart; 99 Vector3 start = vStart;
@@ -129,6 +132,13 @@ static void MoveNormal(float dt) {
129 game.player.is_grounded = false; 132 game.player.is_grounded = false;
130 } 133 }
131 } 134 }
135
136 // Stair smoothing: detect if the player position snapped vertically (e.g. stepping up a stair)
137 // and apply a counter-offset to the camera to keep the movement visually smooth.
138 float deltaY = game.player.pos.y - oldY;
139 if (game.player.is_grounded && deltaY != 0) {
140 game.player.camera_offset_y -= deltaY;
141 }
132} 142}
133 143
134static void MoveFly(float dt) { 144static void MoveFly(float dt) {
@@ -164,6 +174,10 @@ void UpdatePlayer(void) {
164 float dt = GetFrameTime(); 174 float dt = GetFrameTime();
165 Vector3 oldPos = game.player.pos; 175 Vector3 oldPos = game.player.pos;
166 176
177 // Decay the stair smoothing offset over time
178 game.player.camera_offset_y = Lerp(game.player.camera_offset_y, 0.0f, 15.0f * dt);
179 if (fabsf(game.player.camera_offset_y) < 0.001f) game.player.camera_offset_y = 0.0f;
180
167 if (IsKeyPressed(KEY_F)) { 181 if (IsKeyPressed(KEY_F)) {
168 game.player.move_mode = (game.player.move_mode == MOVE_NORMAL) ? MOVE_FLY : MOVE_NORMAL; 182 game.player.move_mode = (game.player.move_mode == MOVE_NORMAL) ? MOVE_FLY : MOVE_NORMAL;
169 } 183 }
@@ -206,6 +220,7 @@ void UpdatePlayer(void) {
206 Vector3 pivot = Vector3Subtract(game.player.pos, (Vector3){ 0, pivotDist, 0 }); 220 Vector3 pivot = Vector3Subtract(game.player.pos, (Vector3){ 0, pivotDist, 0 });
207 221
208 game.camera.position = Vector3Add(pivot, rotatedOffset); 222 game.camera.position = Vector3Add(pivot, rotatedOffset);
223 game.camera.position.y += game.player.camera_offset_y;
209 224
210 Vector3 forward = { 225 Vector3 forward = {
211 cosf(game.player.pitch) * sinf(game.player.yaw), 226 cosf(game.player.pitch) * sinf(game.player.yaw),
diff --git a/tbrun.sh b/tbrun.sh
new file mode 100755
index 0000000..65eb897
--- /dev/null
+++ b/tbrun.sh
@@ -0,0 +1,65 @@
1#!/bin/sh
2
3SCRIPT="$0"
4case "$SCRIPT" in
5 /*) ;;
6 *) SCRIPT="$(pwd)/$SCRIPT" ;;
7esac
8
9# resolve symlinks
10while [ -L "$SCRIPT" ]; do
11 LINK="$(readlink "$SCRIPT")"
12 case "$LINK" in
13 /*) SCRIPT="$LINK" ;;
14 *) SCRIPT="$(dirname "$SCRIPT")/$LINK" ;;
15 esac
16done
17
18SCRIPT_DIR="$(cd "$(dirname "$SCRIPT")" && pwd -P)"
19echo "$SCRIPT_DIR"
20
21MAP=""
22FPS=""
23WIDTH=""
24HEIGHT=""
25while [ $# -gt 0 ]; do
26 case "$1" in
27 --map)
28 shift
29 MAP="$1"
30 ;;
31 --map=*)
32 MAP="${1#--map=}"
33 ;;
34 --fps)
35 shift
36 FPS="$1"
37 ;;
38 --fps=*)
39 FPS="${1#--fps=}"
40 ;;
41 --width)
42 shift
43 WIDTH="$1"
44 ;;
45 --width=*)
46 WIDTH="${1#--width=}"
47 ;;
48 --height)
49 shift
50 HEIGHT="$1"
51 ;;
52 --height=*)
53 HEIGHT="${1#--height=}"
54 ;;
55 --) shift; break;;
56 *) ;;
57 esac
58 shift
59done
60
61cd "$SCRIPT_DIR"
62DEBUG=1 ./bin/stalag --map "$MAP" \
63 ${FPS:+--fps "$FPS"} \
64 ${WIDTH:+--width "$WIDTH"} \
65 ${HEIGHT:+--height "$HEIGHT"}
diff --git a/textures/prototype/proto_blue.png b/textures/prototype/proto_blue.png
new file mode 100644
index 0000000..1c49a57
--- /dev/null
+++ b/textures/prototype/proto_blue.png
Binary files differ
diff --git a/textures/prototype/proto_green.png b/textures/prototype/proto_green.png
new file mode 100644
index 0000000..0ce1dd9
--- /dev/null
+++ b/textures/prototype/proto_green.png
Binary files differ
diff --git a/textures/prototype/proto_red.png b/textures/prototype/proto_red.png
new file mode 100644
index 0000000..75ac2f2
--- /dev/null
+++ b/textures/prototype/proto_red.png
Binary files differ
diff --git a/textures/prototype/proto_texture.xcf b/textures/prototype/proto_texture.xcf
new file mode 100644
index 0000000..9b79209
--- /dev/null
+++ b/textures/prototype/proto_texture.xcf
Binary files differ
diff --git a/trenchbroom/stalag/GameEngineProfiles.cfg b/trenchbroom/stalag/GameEngineProfiles.cfg
index eab4cf2..81eda2f 100644
--- a/trenchbroom/stalag/GameEngineProfiles.cfg
+++ b/trenchbroom/stalag/GameEngineProfiles.cfg
@@ -1,10 +1,10 @@
1{ 1{
2 "profiles": [ 2 "profiles": [
3 { 3 {
4 "name": "Stalag", 4 "name": "Stalag",
5 "parameters": "--map ${MAP_BASE_NAME}", 5 "parameters": "--fps 120 --width 1920 --height 1080 --map maps/${MAP_BASE_NAME}.map",
6 "path": "/home/m/Projects/stalag/bin/stalag" 6 "path": "/home/m/Projects/stalag/tbrun.sh"
7 } 7 }
8 ], 8 ],
9 "version": 1 9 "version": 1
10} 10}