Initial commit: 3D Hommie RPG game

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-02-25 01:04:09 +03:00
commit fb5f09212b
34 changed files with 14550 additions and 0 deletions

979
data/map-config.json Normal file
View File

@@ -0,0 +1,979 @@
{
"roads": [
{
"id": "ew_main",
"name": "Главная E-W",
"x": 0,
"z": 0,
"width": 300,
"height": 12,
"rotation": 0,
"sidewalkWidth": 3
},
{
"id": "ns_main",
"name": "Главная N-S",
"x": 0,
"z": 0,
"width": 12,
"height": 300,
"rotation": 1.5708,
"sidewalkWidth": 3
},
{
"id": "ew_south",
"name": "Южная улица",
"x": 0,
"z": -45,
"width": 250,
"height": 8,
"rotation": 0,
"sidewalkWidth": 2.5
},
{
"id": "ew_north",
"name": "Северная улица",
"x": 0,
"z": 50,
"width": 220,
"height": 8,
"rotation": 0,
"sidewalkWidth": 2.5
},
{
"id": "ns_west",
"name": "Западная улица",
"x": -55,
"z": 0,
"width": 8,
"height": 110,
"rotation": 1.5708,
"sidewalkWidth": 2.5
},
{
"id": "ns_east",
"name": "Восточная улица",
"x": 55,
"z": 0,
"width": 8,
"height": 110,
"rotation": 1.5708,
"sidewalkWidth": 2.5
}
],
"buildings": [
{
"x": 18,
"z": 18,
"w": 10,
"h": 16,
"d": 8,
"color": "#8b7355"
},
{
"x": 40,
"z": 18,
"w": 10,
"h": 20,
"d": 8,
"color": "#696969"
},
{
"x": 18,
"z": 36,
"w": 8,
"h": 14,
"d": 8,
"color": "#7b6b55"
},
{
"x": 42,
"z": 36,
"w": 10,
"h": 18,
"d": 8,
"color": "#5b5b6b"
},
{
"x": -42,
"z": -18,
"w": 10,
"h": 14,
"d": 8,
"color": "#6b6b55"
},
{
"x": -42,
"z": -33,
"w": 10,
"h": 12,
"d": 8,
"color": "#556b6b"
},
{
"x": -15,
"z": -28,
"w": 12,
"h": 18,
"d": 10,
"color": "#556b7b"
},
{
"x": 15,
"z": -18,
"w": 10,
"h": 16,
"d": 8,
"color": "#7b5b5b"
},
{
"x": 43,
"z": -18,
"w": 8,
"h": 22,
"d": 10,
"color": "#5b7b6b"
},
{
"x": 15,
"z": -33,
"w": 10,
"h": 14,
"d": 8,
"color": "#5b6b7b"
},
{
"x": 43,
"z": -33,
"w": 10,
"h": 12,
"d": 8,
"color": "#6b5b7b"
},
{
"x": -46,
"z": -62,
"w": 12,
"h": 16,
"d": 10,
"color": "#8b7355"
},
{
"x": -16,
"z": -62,
"w": 10,
"h": 14,
"d": 8,
"color": "#696969"
},
{
"x": 14,
"z": -62,
"w": 8,
"h": 18,
"d": 10,
"color": "#7b6b55"
},
{
"x": 46,
"z": -62,
"w": 12,
"h": 14,
"d": 10,
"color": "#6b6b55"
},
{
"x": -40,
"z": 62,
"w": 10,
"h": 12,
"d": 8,
"color": "#556b6b"
},
{
"x": 16,
"z": 62,
"w": 12,
"h": 16,
"d": 8,
"color": "#556b7b"
},
{
"x": 42,
"z": 62,
"w": 10,
"h": 14,
"d": 8,
"color": "#7b5b5b"
}
],
"structures": {
"park": {
"x": -27,
"z": 25,
"radius": 13
},
"shop": {
"x": -28,
"z": -22,
"w": 10,
"h": 5,
"d": 8
},
"shelter": {
"x": -45,
"z": 40,
"w": 8,
"d": 6
},
"hospital": {
"x": -28,
"z": -60,
"w": 12,
"h": 7,
"d": 10
},
"church": {
"x": 28,
"z": 35,
"w": 10,
"h": 8,
"d": 14
},
"market": {
"x": 28,
"z": -60,
"w": 14,
"h": 4,
"d": 10
},
"construction": {
"x": 75,
"z": 73,
"radius": 12
},
"busStop": {
"x": -18,
"z": 8,
"w": 5,
"d": 2
},
"parking": {
"x": 30,
"z": -22,
"w": 20,
"d": 15
},
"fountain": {
"x": -27,
"z": 25,
"radius": 2
},
"phoneBooth": {
"x": 12,
"z": -10,
"w": 1.2,
"d": 1.2
},
"jobBoard": {
"x": 22,
"z": -10,
"w": 1.2,
"d": 0.8
},
"campSpot": {
"x": -32,
"z": 42
}
},
"interactables": {
"dumpsters": [
{
"x": -20,
"z": -10,
"rot": 0
},
{
"x": 25,
"z": -10,
"rot": 0.3
},
{
"x": -48,
"z": 15,
"rot": -0.2
},
{
"x": 38,
"z": 10,
"rot": 0.5
},
{
"x": -30,
"z": 38,
"rot": 0.1
},
{
"x": 18,
"z": -50,
"rot": 0
},
{
"x": -40,
"z": -50,
"rot": 0.4
},
{
"x": 35,
"z": 35,
"rot": -0.3
}
],
"benches": [
{
"x": -32,
"z": 20,
"rot": 0
},
{
"x": -22,
"z": 30,
"rot": 3.14159
},
{
"x": -30,
"z": 15,
"rot": 0
},
{
"x": 10,
"z": 10,
"rot": 3.14159
},
{
"x": -18,
"z": -10,
"rot": 0
},
{
"x": 35,
"z": 10,
"rot": 3.14159
}
],
"trashPiles": [
{
"x": -42,
"z": 12
},
{
"x": 38,
"z": -12
},
{
"x": -12,
"z": -38
},
{
"x": 22,
"z": 40
}
]
},
"decorations": {
"lamps": [
[
-40,
-8
],
[
-20,
-8
],
[
20,
-8
],
[
40,
-8
],
[
-40,
8
],
[
-20,
8
],
[
20,
8
],
[
40,
8
],
[
-8,
-30
],
[
-8,
-15
],
[
-8,
15
],
[
-8,
30
],
[
8,
-30
],
[
8,
15
],
[
8,
30
],
[
-30,
-50
],
[
0,
-50
],
[
30,
-50
],
[
-30,
55
],
[
30,
55
]
],
"hydrants": [
[
-18,
-10
],
[
25,
-10
],
[
35,
8
]
],
"bins": [
[
-10,
-10
],
[
10,
-10
],
[
25,
10
],
[
-25,
10
]
]
},
"npcs": [
{
"name": "Серёга",
"x": -35,
"z": 28,
"type": "hobo",
"color": "#8b6914",
"patrol": [
[
-35,
28
],
[
-30,
22
],
[
-25,
28
],
[
-30,
34
]
]
},
{
"name": "Прохожий",
"x": 8,
"z": -8,
"type": "citizen",
"color": "#4488cc",
"patrol": [
[
8,
-8
],
[
20,
-8
],
[
30,
-8
],
[
20,
-8
]
]
},
{
"name": "Бабушка Зина",
"x": -22,
"z": 22,
"type": "citizen",
"color": "#cc88cc",
"patrol": [
[
-22,
22
],
[
-27,
26
],
[
-22,
30
],
[
-17,
26
]
]
},
{
"name": "Охранник",
"x": -25,
"z": -18,
"type": "citizen",
"color": "#445566"
},
{
"name": "Отец Михаил",
"x": 28,
"z": 44,
"type": "citizen",
"color": "#2a2a2a",
"patrol": [
[
28,
33
],
[
30,
30
],
[
26,
30
],
[
28,
33
]
]
},
{
"name": "Михалыч",
"x": 72,
"z": 58,
"type": "hobo",
"color": "#6b5b4b",
"patrol": [
[
72,
58
],
[
75,
60
],
[
68,
62
],
[
72,
58
]
]
}
],
"vehicles": {
"routes": [
{
"axis": "x",
"lane": -3,
"start": -130,
"end": 130,
"dir": 1
},
{
"axis": "x",
"lane": 3,
"start": 130,
"end": -130,
"dir": -1
},
{
"axis": "x",
"lane": -47,
"start": -120,
"end": 120,
"dir": 1
},
{
"axis": "x",
"lane": -43,
"start": 120,
"end": -120,
"dir": -1
},
{
"axis": "x",
"lane": 48,
"start": -100,
"end": 100,
"dir": 1
},
{
"axis": "x",
"lane": 52,
"start": 100,
"end": -100,
"dir": -1
},
{
"axis": "z",
"lane": -3,
"start": -130,
"end": 130,
"dir": 1
},
{
"axis": "z",
"lane": 3,
"start": 130,
"end": -130,
"dir": -1
},
{
"axis": "z",
"lane": -57,
"start": -50,
"end": 50,
"dir": 1
},
{
"axis": "z",
"lane": -53,
"start": 50,
"end": -50,
"dir": -1
},
{
"axis": "z",
"lane": 53,
"start": -50,
"end": 50,
"dir": 1
},
{
"axis": "z",
"lane": 57,
"start": 50,
"end": -50,
"dir": -1
}
]
},
"passerbyRoutes": [
{
"waypoints": [
[
-80,
8
],
[
-40,
8
],
[
0,
8
],
[
30,
8
],
[
60,
8
],
[
80,
8
]
]
},
{
"waypoints": [
[
80,
-8
],
[
40,
-8
],
[
0,
-8
],
[
-30,
-8
],
[
-60,
-8
],
[
-80,
-8
]
]
},
{
"waypoints": [
[
-8,
-70
],
[
-8,
-40
],
[
-8,
0
],
[
-8,
30
],
[
-8,
60
],
[
-8,
80
]
]
},
{
"waypoints": [
[
8,
80
],
[
8,
40
],
[
8,
0
],
[
8,
-30
],
[
8,
-60
],
[
8,
-80
]
]
},
{
"waypoints": [
[
-80,
-50
],
[
-40,
-50
],
[
0,
-50
],
[
40,
-50
],
[
80,
-50
]
]
},
{
"waypoints": [
[
80,
55
],
[
40,
55
],
[
0,
55
],
[
-40,
55
],
[
-80,
55
]
]
},
{
"waypoints": [
[
-58,
-40
],
[
-58,
-20
],
[
-58,
0
],
[
-58,
20
],
[
-58,
40
]
]
},
{
"waypoints": [
[
58,
40
],
[
58,
20
],
[
58,
0
],
[
58,
-20
],
[
58,
-40
]
]
},
{
"waypoints": [
[
-50,
8
],
[
-30,
8
],
[
-20,
20
],
[
-20,
30
],
[
-30,
8
]
]
},
{
"waypoints": [
[
20,
-8
],
[
20,
-25
],
[
35,
-25
],
[
35,
-8
],
[
50,
-8
]
]
}
]
}