Skip to content

Commit 8b69ed7

Browse files
Add material IDs page
1 parent 91289e1 commit 8b69ed7

File tree

3 files changed

+365
-48
lines changed

3 files changed

+365
-48
lines changed

web/src/data/materials.ts

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
// Source:
2+
// The group names and readable material names have been extracted from Collision File Editor II by Steve M.
3+
export const materials = [
4+
{ id: 0, name: "Default", category: "Default" },
5+
{ id: 1, name: "Tarmac", category: "Default" },
6+
{ id: 2, name: "Tarmac (damaged)", category: "Default" },
7+
{ id: 3, name: "Tarmac (really damaged)", category: "Default" },
8+
{ id: 4, name: "Pavement", category: "Concrete" },
9+
{ id: 5, name: "Pavement (damaged)", category: "Concrete" },
10+
{ id: 6, name: "Gravel", category: "Gravel" },
11+
{ id: 7, name: "Concrete (damaged)", category: "Concrete" },
12+
{ id: 8, name: "Painted Ground", category: "Concrete" },
13+
{ id: 9, name: "Grass (short lush)", category: "Grass" },
14+
{ id: 10, name: "Grass (medium lush)", category: "Grass" },
15+
{ id: 11, name: "Grass (long lush)", category: "Grass" },
16+
{ id: 12, name: "Grass (short dry)", category: "Grass" },
17+
{ id: 13, name: "Grass (medium dry)", category: "Grass" },
18+
{ id: 14, name: "Grass (long dry)", category: "Grass" },
19+
{ id: 15, name: "Golf Grass (rough)", category: "Grass" },
20+
{ id: 16, name: "Golf Grass (smooth)", category: "Grass" },
21+
{ id: 17, name: "Steep Slidy Grass", category: "Grass" },
22+
{ id: 18, name: "Steep Cliff", category: "Stone" },
23+
{ id: 19, name: "Flower Bed", category: "Dirt" },
24+
{ id: 20, name: "Meadow", category: "Grass" },
25+
{ id: 21, name: "Waste Ground", category: "Dirt" },
26+
{ id: 22, name: "Woodland Ground", category: "Dirt" },
27+
{ id: 23, name: "Vegetation", category: "Vegetation" },
28+
{ id: 24, name: "Mud (wet)", category: "Dirt" },
29+
{ id: 25, name: "Mud (dry)", category: "Dirt" },
30+
{ id: 26, name: "Dirt", category: "Dirt" },
31+
{ id: 27, name: "Dirt Track", category: "Dirt" },
32+
{ id: 28, name: "Sand (deep)", category: "Sand" },
33+
{ id: 29, name: "Sand (medium)", category: "Sand" },
34+
{ id: 30, name: "Sand (compact)", category: "Sand" },
35+
{ id: 31, name: "Sand (arid)", category: "Sand" },
36+
{ id: 32, name: "Sand (more)", category: "Sand" },
37+
{ id: 33, name: "Sand (beach)", category: "Sand" },
38+
{ id: 34, name: "Concrete (beach)", category: "Concrete" },
39+
{ id: 35, name: "Rock (dry)", category: "Stone" },
40+
{ id: 36, name: "Rock (wet)", category: "Stone" },
41+
{ id: 37, name: "Rock (cliff)", category: "Stone" },
42+
{ id: 38, name: "Water (riverbed)", category: "Water" },
43+
{ id: 39, name: "Water (shallow)", category: "Water" },
44+
{ id: 40, name: "Corn Field", category: "Dirt" },
45+
{ id: 41, name: "Hedge", category: "Vegetation" },
46+
{ id: 42, name: "Wood (crates)", category: "Wood" },
47+
{ id: 43, name: "Wood (solid)", category: "Wood" },
48+
{ id: 44, name: "Wood (thin)", category: "Wood" },
49+
{ id: 45, name: "Glass", category: "Glass" },
50+
{ id: 46, name: "Glass Windows (large)", category: "Glass" },
51+
{ id: 47, name: "Glass Windows (small)", category: "Glass" },
52+
{ id: 48, name: "Empty1", category: "Misc" },
53+
{ id: 49, name: "Empty2", category: "Misc" },
54+
{ id: 50, name: "Garage Door", category: "Metal" },
55+
{ id: 51, name: "Thick Metal Plate", category: "Metal" },
56+
{ id: 52, name: "Scaffold Pole", category: "Metal" },
57+
{ id: 53, name: "Lamp Post", category: "Metal" },
58+
{ id: 54, name: "Metal Gate", category: "Metal" },
59+
{ id: 55, name: "Metal Chain fence", category: "Metal" },
60+
{ id: 56, name: "Girder", category: "Metal" },
61+
{ id: 57, name: "Fire Hydrant", category: "Metal" },
62+
{ id: 58, name: "Container", category: "Metal" },
63+
{ id: 59, name: "News Vendor", category: "Metal" },
64+
{ id: 60, name: "Wheelbase", category: "Misc" },
65+
{ id: 61, name: "Cardboard Box", category: "Misc" },
66+
{ id: 62, name: "Ped", category: "Misc" },
67+
{ id: 63, name: "Car", category: "Metal" },
68+
{ id: 64, name: "Car (panel)", category: "Metal" },
69+
{ id: 65, name: "Car (moving component)", category: "Metal" },
70+
{ id: 66, name: "Transparent Cloth", category: "Misc" },
71+
{ id: 67, name: "Rubber", category: "Misc" },
72+
{ id: 68, name: "Plastic", category: "Misc" },
73+
{ id: 69, name: "Transparent Stone", category: "Stone" },
74+
{ id: 70, name: "Wood (bench)", category: "Wood" },
75+
{ id: 71, name: "Carpet", category: "Misc" },
76+
{ id: 72, name: "Floorboard", category: "Wood" },
77+
{ id: 73, name: "Stairs (wood)", category: "Wood" },
78+
{ id: 74, name: "Sand", category: "Sand" },
79+
{ id: 75, name: "Sand (dense)", category: "Sand" },
80+
{ id: 76, name: "Sand (arid)", category: "Sand" },
81+
{ id: 77, name: "Sand (compact)", category: "Sand" },
82+
{ id: 78, name: "Sand (rocky)", category: "Sand" },
83+
{ id: 79, name: "Sand (beach)", category: "Sand" },
84+
{ id: 80, name: "Grass (short)", category: "Grass" },
85+
{ id: 81, name: "Grass (meadow)", category: "Grass" },
86+
{ id: 82, name: "Grass (dry)", category: "Grass" },
87+
{ id: 83, name: "Woodland", category: "Dirt" },
88+
{ id: 84, name: "Wood Dense", category: "Dirt" },
89+
{ id: 85, name: "Roadside", category: "Gravel" },
90+
{ id: 86, name: "Roadside Des", category: "Sand" },
91+
{ id: 87, name: "Flowerbed", category: "Dirt" },
92+
{ id: 88, name: "Waste Ground", category: "Dirt" },
93+
{ id: 89, name: "Concrete", category: "Concrete" },
94+
{ id: 90, name: "Office Desk", category: "Misc" },
95+
{ id: 91, name: "711 Shelf 1", category: "Misc" },
96+
{ id: 92, name: "711 Shelf 2", category: "Misc" },
97+
{ id: 93, name: "711 Shelf 3", category: "Misc" },
98+
{ id: 94, name: "Restuarant Table", category: "Misc" },
99+
{ id: 95, name: "Bar Table", category: "Misc" },
100+
{ id: 96, name: "Underwater (lush)", category: "Sand" },
101+
{ id: 97, name: "Underwater (barren)", category: "Sand" },
102+
{ id: 98, name: "Underwater (coral)", category: "Sand" },
103+
{ id: 99, name: "Underwater (deep)", category: "Sand" },
104+
{ id: 100, name: "Riverbed", category: "Dirt" },
105+
{ id: 101, name: "Rubble", category: "Gravel" },
106+
{ id: 102, name: "Bedroom Floor", category: "Misc" },
107+
{ id: 103, name: "Kitchen Floor", category: "Misc" },
108+
{ id: 104, name: "Livingroom Floor", category: "Misc" },
109+
{ id: 105, name: "corridor Floor", category: "Misc" },
110+
{ id: 106, name: "711 Floor", category: "Misc" },
111+
{ id: 107, name: "Fast Food Floor", category: "Misc" },
112+
{ id: 108, name: "Skanky Floor", category: "Misc" },
113+
{ id: 109, name: "Mountain", category: "Stone" },
114+
{ id: 110, name: "Marsh", category: "Dirt" },
115+
{ id: 111, name: "Bushy", category: "Vegetation" },
116+
{ id: 112, name: "Bushy (mix)", category: "Vegetation" },
117+
{ id: 113, name: "Bushy (dry)", category: "Vegetation" },
118+
{ id: 114, name: "Bushy (mid)", category: "Vegetation" },
119+
{ id: 115, name: "Grass (wee flowers)", category: "Grass" },
120+
{ id: 116, name: "Grass (dry tall)", category: "Grass" },
121+
{ id: 117, name: "Grass (lush tall)", category: "Grass" },
122+
{ id: 118, name: "Grass (green mix)", category: "Grass" },
123+
{ id: 119, name: "Grass (brown mix)", category: "Grass" },
124+
{ id: 120, name: "Grass (low)", category: "Grass" },
125+
{ id: 121, name: "Grass (rocky)", category: "Grass" },
126+
{ id: 122, name: "Grass (small trees)", category: "Grass" },
127+
{ id: 123, name: "Dirt (rocky)", category: "Dirt" },
128+
{ id: 124, name: "Dirt (weeds)", category: "Dirt" },
129+
{ id: 125, name: "Grass (weeds)", category: "Grass" },
130+
{ id: 126, name: "River Edge", category: "Dirt" },
131+
{ id: 127, name: "Poolside", category: "Concrete" },
132+
{ id: 128, name: "Forest (stumps)", category: "Dirt" },
133+
{ id: 129, name: "Forest (sticks)", category: "Dirt" },
134+
{ id: 130, name: "Forest (leaves)", category: "Dirt" },
135+
{ id: 131, name: "Desert Rocks", category: "Sand" },
136+
{ id: 132, name: "Forest (dry)", category: "Dirt" },
137+
{ id: 133, name: "Sparse Flowers", category: "Dirt" },
138+
{ id: 134, name: "Building Site", category: "Gravel" },
139+
{ id: 135, name: "Docklands", category: "Concrete" },
140+
{ id: 136, name: "Industrial", category: "Concrete" },
141+
{ id: 137, name: "Industrial Jetty", category: "Concrete" },
142+
{ id: 138, name: "Concrete (litter)", category: "Concrete" },
143+
{ id: 139, name: "Alley Rubbish", category: "Concrete" },
144+
{ id: 140, name: "Junkyard Piles", category: "Gravel" },
145+
{ id: 141, name: "Junkyard Ground", category: "Dirt" },
146+
{ id: 142, name: "Dump", category: "Dirt" },
147+
{ id: 143, name: "Cactus Dense", category: "Sand" },
148+
{ id: 144, name: "Airport Ground", category: "Concrete" },
149+
{ id: 145, name: "Cornfield", category: "Dirt" },
150+
{ id: 146, name: "Grass (light)", category: "Grass" },
151+
{ id: 147, name: "Grass (lighter)", category: "Grass" },
152+
{ id: 148, name: "Grass (lighter 2)", category: "Grass" },
153+
{ id: 149, name: "Grass (mid 1)", category: "Grass" },
154+
{ id: 150, name: "Grass (mid 2)", category: "Grass" },
155+
{ id: 151, name: "Grass (dark)", category: "Grass" },
156+
{ id: 152, name: "Grass (dark 2)", category: "Grass" },
157+
{ id: 153, name: "Grass (dirt mix)", category: "Grass" },
158+
{ id: 154, name: "Riverbed (stone)", category: "Stone" },
159+
{ id: 155, name: "Riverbed (shallow)", category: "Dirt" },
160+
{ id: 156, name: "Riverbed (weeds)", category: "Dirt" },
161+
{ id: 157, name: "Seaweed", category: "Sand" },
162+
{ id: 158, name: "Door", category: "Misc" },
163+
{ id: 159, name: "Plastic Barrier", category: "Misc" },
164+
{ id: 160, name: "Park Grass", category: "Grass" },
165+
{ id: 161, name: "Stairs (stone)", category: "Stone" },
166+
{ id: 162, name: "Stairs (metal)", category: "Metal" },
167+
{ id: 163, name: "Stairs (carpet)", category: "Misc" },
168+
{ id: 164, name: "Floor (metal)", category: "Metal" },
169+
{ id: 165, name: "Floor (concrete)", category: "Concrete" },
170+
{ id: 166, name: "Bin Bag", category: "Misc" },
171+
{ id: 167, name: "Thin Metal Sheet", category: "Metal" },
172+
{ id: 168, name: "Metal Barrel", category: "Metal" },
173+
{ id: 169, name: "Plastic Cone", category: "Misc" },
174+
{ id: 170, name: "Plastic Dumpster", category: "Misc" },
175+
{ id: 171, name: "Metal Dumpster", category: "Metal" },
176+
{ id: 172, name: "Wood Picket Fence", category: "Wood" },
177+
{ id: 173, name: "Wood Slatted Fence", category: "Wood" },
178+
{ id: 174, name: "Wood Ranch Fence", category: "Wood" },
179+
{ id: 175, name: "Unbreakable Glass", category: "Glass" },
180+
{ id: 176, name: "Hay Bale", category: "Misc" },
181+
{ id: 177, name: "Gore", category: "Misc" },
182+
{ id: 178, name: "Rail Track", category: "Misc" },
183+
];
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
---
2+
import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro";
3+
4+
import { getSeeAlsoLinksFromList } from "@src/utils/general";
5+
import SeeAlsoSection from "@src/components/SeeAlsoSection.astro";
6+
7+
import { Code } from "@astrojs/starlight/components";
8+
9+
import { materials } from "@src/data/materials";
10+
11+
// Group materials by category
12+
const materialsByCategory: Record<string, typeof materials> = {};
13+
materials.forEach((material) => {
14+
if (!materialsByCategory[material.category]) {
15+
materialsByCategory[material.category] = [];
16+
}
17+
materialsByCategory[material.category].push(material);
18+
});
19+
20+
// Sort categories alphabetically
21+
const sortedCategories = Object.keys(materialsByCategory).sort();
22+
23+
// Generate Lua table
24+
let luaTable = `local materials = {\n`;
25+
materials.forEach((material) => {
26+
luaTable += `\t[${material.id}] = "${material.name}", -- ${material.category}\n`;
27+
});
28+
luaTable += `}`;
29+
---
30+
31+
<StarlightPage
32+
frontmatter={{
33+
template: "doc",
34+
title: "Surface Materials",
35+
tableOfContents: false,
36+
}}
37+
>
38+
<p>
39+
This is a list San Andreas surface materials that are initialized in the
40+
game's <em>surfinfo.dat</em> file. These IDs can be used with functions such
41+
as <a href="/reference/engineSetSurfaceProperties"
42+
>engineSetSurfaceProperties</a
43+
>.
44+
</p>
45+
<!-- The sounds of walking on each surface are available on the Collision surface sounds page -->
46+
47+
<p>
48+
The group names and readable material names have been extracted from
49+
Collision File Editor II by Steve M.
50+
</p>
51+
52+
{
53+
sortedCategories.map((category) => (
54+
<section>
55+
<h3>{category}</h3>
56+
<table class="materials-table">
57+
<thead>
58+
<tr>
59+
<th>ID</th>
60+
<th>Name</th>
61+
</tr>
62+
</thead>
63+
<tbody>
64+
{materialsByCategory[category].map((material) => (
65+
<tr>
66+
<td>
67+
<code>{material.id}</code>
68+
</td>
69+
<td>{material.name}</td>
70+
</tr>
71+
))}
72+
</tbody>
73+
</table>
74+
</section>
75+
))
76+
}
77+
78+
<section data-pagefind-ignore>
79+
<h4>All materials in a Lua table:</h4>
80+
<Code lang="lua" code={luaTable} />
81+
</section>
82+
83+
<SeeAlsoSection
84+
seeAlsoLinks={getSeeAlsoLinksFromList(["reference:ID_Lists"])}
85+
currentId=""
86+
/>
87+
</StarlightPage>
88+
89+
<style>
90+
.materials-table {
91+
width: 100%;
92+
border-collapse: collapse;
93+
margin-bottom: 2rem;
94+
}
95+
96+
.materials-table th,
97+
.materials-table td {
98+
padding: 0.5rem;
99+
text-align: left;
100+
border-bottom: 1px solid var(--sl-color-gray-4);
101+
}
102+
103+
.materials-table th {
104+
background-color: var(--sl-color-gray-5);
105+
font-weight: 600;
106+
}
107+
108+
.materials-table tbody tr:hover {
109+
background-color: var(--sl-color-gray-5);
110+
}
111+
112+
.materials-table code {
113+
font-size: 0.9em;
114+
}
115+
</style>

0 commit comments

Comments
 (0)