Skip to content

Commit 15de422

Browse files
committed
feat(mymod): add initial mod structure and test map for advanced graphics
- Created a new mod directory structure for 'mymod' including a test map file to demonstrate advanced graphics features. - Implemented a basic map compilation script to facilitate the conversion of .map files to .bsp format for the idTech3 engine. - Added a comprehensive demo script to showcase all implemented features, including ray tracing and PBR materials. - Introduced various test scripts for networking, performance profiling, and ray tracing capabilities to ensure robust functionality.
1 parent 0ff2b54 commit 15de422

8 files changed

Lines changed: 863 additions & 0 deletions

File tree

mods/mymod/maps/testmap.map

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
// Test map for demonstrating advanced graphics features
2+
// Created for idTech3 engine testing
3+
4+
{
5+
"classname" "worldspawn"
6+
"message" "Test Map - Advanced Graphics Demo"
7+
"_color" "0.5 0.5 0.5"
8+
"gravity" "800"
9+
10+
// Floor
11+
{
12+
( -512 -512 0 ) ( -512 512 0 ) ( 512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
13+
( 512 512 0 ) ( 512 -512 0 ) ( -512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
14+
( -512 -512 -16 ) ( 512 -512 -16 ) ( 512 512 -16 ) textures/test/floor 0 0 0 1 1 0 0 0
15+
( 512 512 -16 ) ( -512 512 -16 ) ( -512 -512 -16 ) textures/test/floor 0 0 0 1 1 0 0 0
16+
( -512 -512 -16 ) ( -512 512 -16 ) ( -512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
17+
( -512 512 0 ) ( -512 -512 0 ) ( -512 -512 -16 ) common/caulk 0 0 0 0.5 0.5 0 0 0
18+
( 512 -512 -16 ) ( -512 -512 -16 ) ( -512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
19+
( -512 -512 0 ) ( 512 -512 0 ) ( 512 -512 -16 ) common/caulk 0 0 0 0.5 0.5 0 0 0
20+
( -512 512 -16 ) ( 512 512 -16 ) ( 512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
21+
( 512 512 0 ) ( -512 512 0 ) ( -512 512 -16 ) common/caulk 0 0 0 0.5 0.5 0 0 0
22+
}
23+
24+
// Ceiling
25+
{
26+
( -512 -512 128 ) ( 512 -512 128 ) ( 512 512 128 ) textures/test/ceiling 0 0 0 1 1 0 0 0
27+
( 512 512 128 ) ( -512 512 128 ) ( -512 -512 128 ) textures/test/ceiling 0 0 0 1 1 0 0 0
28+
( -512 -512 112 ) ( -512 512 112 ) ( 512 512 112 ) common/caulk 0 0 0 0.5 0.5 0 0 0
29+
( 512 512 112 ) ( 512 -512 112 ) ( -512 -512 112 ) common/caulk 0 0 0 0.5 0.5 0 0 0
30+
( -512 -512 112 ) ( 512 -512 112 ) ( 512 -512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
31+
( 512 -512 128 ) ( -512 -512 128 ) ( -512 -512 112 ) common/caulk 0 0 0 0.5 0.5 0 0 0
32+
( -512 512 112 ) ( -512 -512 112 ) ( -512 -512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
33+
( -512 -512 128 ) ( -512 512 128 ) ( -512 512 112 ) common/caulk 0 0 0 0.5 0.5 0 0 0
34+
( 512 -512 112 ) ( 512 512 112 ) ( 512 512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
35+
( 512 512 128 ) ( 512 -512 128 ) ( 512 -512 112 ) common/caulk 0 0 0 0.5 0.5 0 0 0
36+
( -512 512 112 ) ( 512 512 112 ) ( 512 512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
37+
( 512 512 128 ) ( -512 512 128 ) ( -512 512 112 ) common/caulk 0 0 0 0.5 0.5 0 0 0
38+
}
39+
40+
// Wall 1 (North)
41+
{
42+
( -512 -512 0 ) ( 512 -512 0 ) ( 512 -512 128 ) textures/test/wall 0 0 0 1 1 0 0 0
43+
( 512 -512 128 ) ( -512 -512 128 ) ( -512 -512 0 ) textures/test/wall 0 0 0 1 1 0 0 0
44+
( -512 -512 0 ) ( -512 -512 128 ) ( 512 -512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
45+
( 512 -512 128 ) ( 512 -512 0 ) ( -512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
46+
( -512 -512 0 ) ( 512 -512 128 ) ( 512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
47+
( 512 -512 0 ) ( 512 -512 128 ) ( -512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
48+
}
49+
50+
// Wall 2 (South)
51+
{
52+
( -512 512 0 ) ( -512 512 128 ) ( 512 512 128 ) textures/test/wall 0 0 0 1 1 0 0 0
53+
( 512 512 128 ) ( 512 512 0 ) ( -512 512 0 ) textures/test/wall 0 0 0 1 1 0 0 0
54+
( -512 512 0 ) ( 512 512 128 ) ( 512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
55+
( 512 512 0 ) ( 512 512 128 ) ( -512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
56+
( -512 512 0 ) ( -512 512 128 ) ( 512 512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
57+
( 512 512 128 ) ( -512 512 128 ) ( -512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
58+
}
59+
60+
// Wall 3 (East)
61+
{
62+
( 512 -512 0 ) ( 512 512 0 ) ( 512 512 128 ) textures/test/wall 0 0 0 1 1 0 0 0
63+
( 512 512 128 ) ( 512 -512 128 ) ( 512 -512 0 ) textures/test/wall 0 0 0 1 1 0 0 0
64+
( 512 -512 0 ) ( 512 -512 128 ) ( 512 512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
65+
( 512 512 128 ) ( 512 512 0 ) ( 512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
66+
( 512 -512 0 ) ( 512 512 128 ) ( 512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
67+
( 512 512 0 ) ( 512 512 128 ) ( 512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
68+
}
69+
70+
// Wall 4 (West)
71+
{
72+
( -512 -512 0 ) ( -512 -512 128 ) ( -512 512 128 ) textures/test/wall 0 0 0 1 1 0 0 0
73+
( -512 512 128 ) ( -512 512 0 ) ( -512 -512 0 ) textures/test/wall 0 0 0 1 1 0 0 0 0
74+
( -512 -512 0 ) ( -512 512 128 ) ( -512 512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
75+
( -512 512 0 ) ( -512 512 128 ) ( -512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
76+
( -512 -512 0 ) ( -512 -512 128 ) ( -512 512 128 ) common/caulk 0 0 0 0.5 0.5 0 0 0
77+
( -512 512 128 ) ( -512 -512 128 ) ( -512 -512 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
78+
}
79+
80+
// Central pillar with PBR materials
81+
{
82+
"classname" "misc_model"
83+
"model" "models/mapobjects/pillar/pillar.md3"
84+
"origin" "0 0 32"
85+
"angles" "0 0 0"
86+
}
87+
88+
// Player spawn point
89+
{
90+
"classname" "info_player_deathmatch"
91+
"origin" "0 0 24"
92+
"angle" "0"
93+
}
94+
95+
// Weapon spawn
96+
{
97+
"classname" "weapon_rocketlauncher"
98+
"origin" "64 64 8"
99+
}
100+
101+
// Armor
102+
{
103+
"classname" "item_armor_combat"
104+
"origin" "-64 -64 8"
105+
}
106+
107+
// Light for illumination
108+
{
109+
"classname" "light"
110+
"origin" "0 0 96"
111+
"light" "300"
112+
"_color" "1.0 0.8 0.6"
113+
"radius" "300"
114+
}
115+
116+
// Point light for testing ray tracing
117+
{
118+
"classname" "light"
119+
"origin" "128 0 64"
120+
"light" "200"
121+
"_color" "0.3 0.5 1.0"
122+
"radius" "200"
123+
"rt_reflection" "1"
124+
"rt_shadow" "1"
125+
}
126+
127+
// Ambient light
128+
{
129+
"classname" "light"
130+
"origin" "0 0 200"
131+
"light" "50"
132+
"_color" "0.2 0.2 0.3"
133+
"radius" "1000"
134+
}
135+
136+
// Test model with PBR materials
137+
{
138+
"classname" "misc_model"
139+
"model" "models/weapons2/rocketl/rocketl.md3"
140+
"origin" "0 128 24"
141+
"angles" "0 45 0"
142+
}
143+
}

mymod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
mods/mymod

scripts/compile_map.sh

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#!/bin/bash
2+
3+
# Simple map compilation script for idTech3
4+
# This script compiles .map files to .bsp files using q3map2
5+
6+
set -e
7+
8+
# Check arguments
9+
if [ $# -lt 1 ]; then
10+
echo "Usage: $0 <map_name> [mod_name]"
11+
echo "Example: $0 testmap mymod"
12+
exit 1
13+
fi
14+
15+
MAP_NAME="$1"
16+
MOD_NAME="${2:-mymod}"
17+
18+
# Set paths
19+
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
20+
MOD_DIR="$PROJECT_ROOT/mods/$MOD_NAME"
21+
MAP_FILE="$MOD_DIR/maps/${MAP_NAME}.map"
22+
BSP_FILE="$MOD_DIR/maps/${MAP_NAME}.bsp"
23+
24+
echo "Map Compilation Script"
25+
echo "======================"
26+
echo "Map: $MAP_NAME"
27+
echo "Mod: $MOD_NAME"
28+
echo "Source: $MAP_FILE"
29+
echo "Target: $BSP_FILE"
30+
echo
31+
32+
# Check if map file exists
33+
if [ ! -f "$MAP_FILE" ]; then
34+
echo "Error: Map file not found: $MAP_FILE"
35+
exit 1
36+
fi
37+
38+
# Try to find q3map2
39+
Q3MAP2_PATHS=(
40+
"$PROJECT_ROOT/build/radiant/install/q3map2"
41+
"$PROJECT_ROOT/tools/radiant/install/q3map2"
42+
"/usr/local/bin/q3map2"
43+
"/usr/bin/q3map2"
44+
"$(which q3map2 2>/dev/null)"
45+
)
46+
47+
Q3MAP2=""
48+
for path in "${Q3MAP2_PATHS[@]}"; do
49+
if [ -x "$path" ]; then
50+
Q3MAP2="$path"
51+
break
52+
fi
53+
done
54+
55+
if [ -z "$Q3MAP2" ]; then
56+
echo "Warning: q3map2 not found. Trying to build it..."
57+
echo
58+
59+
# Try to build q3map2
60+
if [ -d "$PROJECT_ROOT/tools/radiant" ]; then
61+
cd "$PROJECT_ROOT/tools/radiant"
62+
echo "Building q3map2 with SCons..."
63+
64+
# Try to build just q3map2 without GTK dependencies
65+
if command -v scons >/dev/null 2>&1; then
66+
scons q3map2 BUILD_GAMEPACK=0 2>&1 | head -20
67+
if [ -x "q3map2" ]; then
68+
Q3MAP2="./q3map2"
69+
echo "Built q3map2 successfully"
70+
fi
71+
else
72+
echo "SCons not found. Please install SCons to build q3map2"
73+
fi
74+
fi
75+
76+
if [ -z "$Q3MAP2" ]; then
77+
echo "Could not build q3map2. Please install it manually:"
78+
echo " sudo apt-get install q3map2 # Ubuntu/Debian"
79+
echo " or download from: https://github.com/TTimo/GtkRadiant"
80+
exit 1
81+
fi
82+
fi
83+
84+
echo "Using q3map2: $Q3MAP2"
85+
echo
86+
87+
# Change to mod directory
88+
cd "$MOD_DIR"
89+
90+
# Compile the map
91+
echo "Compiling map..."
92+
echo "Step 1: BSP compilation..."
93+
"$Q3MAP2" -fs_basepath "$PROJECT_ROOT" -fs_game "$MOD_NAME" -bsp "$MAP_FILE"
94+
95+
echo "Step 2: VIS compilation..."
96+
"$Q3MAP2" -fs_basepath "$PROJECT_ROOT" -fs_game "$MOD_NAME" -vis "$BSP_FILE"
97+
98+
echo "Step 3: Light compilation..."
99+
"$Q3MAP2" -fs_basepath "$PROJECT_ROOT" -fs_game "$MOD_NAME" -light "$BSP_FILE"
100+
101+
echo
102+
echo "Map compilation completed!"
103+
echo "Output: $BSP_FILE"
104+
echo
105+
echo "To test the map, run:"
106+
echo " ./idtech3.x86_64 +set fs_game $MOD_NAME +map $MAP_NAME"

0 commit comments

Comments
 (0)