summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2024-02-09 11:24:39 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2024-02-09 11:24:39 -0500
commit12c696bc5b6e960a1d9228a5b68e5aafcc02e23c (patch)
tree93dee66407e73ff4bab7b5737f3ddf447aa5605e
parent56857faf6f9149e0cd48cb9bfc842849c796f3a7 (diff)
downloadlingo-race-12c696bc5b6e960a1d9228a5b68e5aafcc02e23c.tar.gz
lingo-race-12c696bc5b6e960a1d9228a5b68e5aafcc02e23c.tar.bz2
lingo-race-12c696bc5b6e960a1d9228a5b68e5aafcc02e23c.zip
LL2 support
-rw-r--r--racing/lobby.gd85
-rw-r--r--racing/manager.gd1
-rw-r--r--racing/router.gd149
3 files changed, 162 insertions, 73 deletions
diff --git a/racing/lobby.gd b/racing/lobby.gd index 86e4920..c81694a 100644 --- a/racing/lobby.gd +++ b/racing/lobby.gd
@@ -11,66 +11,14 @@ var everyone_ready = false
11var members_to_join = [] 11var members_to_join = []
12var is_starting = false 12var is_starting = false
13 13
14var router
15
14const MAX_PLAYERS = 250 16const MAX_PLAYERS = 250
15const PROTOCOL_VERSION = 2 17const PROTOCOL_VERSION = 2
16const RECIPIENT_BROADCAST_ALL = -1 18const RECIPIENT_BROADCAST_ALL = -1
17const LOBBY_MAP_NAME = "ll1_racing" 19const LOBBY_MAP_NAME = "ll1_racing"
18const VERSION = "0.0.7" 20const VERSION = "0.0.7"
19 21
20const LL1_AREAS = [
21 ["Starting Room", 0, 0, 0],
22 ["Second Room", 0, 0, -15],
23 ["The Traveled", 34, 0, -18],
24 ["The Agreeable", 30, 0, -45],
25 ["The Colorful", 10, 0, -83],
26 ["Suits Area", 0, 0, -78, true],
27 ["Arrow Garden", -93, 1, -93],
28 ["The Wondrous (Table)", -108, 1, -78],
29 ["Courtyard", -64, 0, -71],
30 ["Yellow Backside Nine", -38, 0, -58],
31 ["Hot Crusts Area", -20, 0, -81],
32 ["Crossroads Corner", -28, 0, -54],
33 ["The Discerning", -54, 0, -34, true],
34 ["Green Backside", 22, 0, -94],
35 ["Observant Upstairs", 40, 9, -92, true],
36 ["Eight Room", 95, 15, -28],
37 ["The Perceptive", 60, 9, -57],
38 ["The Tenacious", 0, 0, -43],
39 ["Rainbow", -96, 0, -41],
40 ["The Undeterred", -87, 0, 25, true],
41 ["Directional Gallery", -57, 0, 0],
42 ["The Eyes They See", -54, 0, -23],
43 ["Tower First Floor", -27, 0, -23],
44 ["The Optimistic", 76, 0, -17],
45 ["The Initiated", 63, 0, -0, true],
46 ["Art Gallery", 92, 0, 15],
47 ["Art Gallery Top", 80, 30, 15],
48 ["Lookout", 75, 18, 51],
49 ["Knight Night Room", 37, 0, 7],
50 ["The Seeker", 9, 0, 16, true],
51 ["Hidden Room", 13, 0, 4],
52 ["Owl Hallway", 44, 0, -26],
53 ["Challenge Room", -9, 6, 13],
54 ["Pilgrim Room", -22, 0, 24, true],
55 ["Cellar Replica", -44, 0, 30],
56 ["Elements Area", -61, 0, 40],
57 ["The Artistic", -25, 0, 54, true],
58 ["Outside The Wise", -44, 0, 71],
59 ["The Wise", -72, 0, 72, true],
60 ["The Scientific", -18, 0, 89],
61 ["The Wanderer", 0, 0, 80],
62 ["The Fearless", 18, 10, 90],
63 ["Champion's Rest", 23, 0, 62, true],
64 ["The Steady", 31, 0, 77, true],
65 ["The Bold", 67, 0, 77, true],
66 ["Color Hunt", 45, 0, 69],
67 ["Room Room", 95, 6, 84],
68 ["The Bearer", 61, 0, 51],
69 ["Tower Third Floor", 18, 0, 33],
70 ["Rhyme Room (Cross)", 0, 9, 42],
71 ["Tower Seventh Floor", 0, 37, 64],
72]
73
74 22
75func _ready(): 23func _ready():
76 global._print("Starting Lobby") 24 global._print("Starting Lobby")
@@ -100,6 +48,9 @@ func _ready():
100 var race_manager = global.get_node("RaceManager") 48 var race_manager = global.get_node("RaceManager")
101 race_manager.held_messages.clear() 49 race_manager.held_messages.clear()
102 50
51 var router_script = load("user://maps/racing/router.gd")
52 router = router_script.new()
53
103 var _ignore = get_node("Panel/main_button").connect("pressed", self, "_main_button_pressed") 54 var _ignore = get_node("Panel/main_button").connect("pressed", self, "_main_button_pressed")
104 _ignore = get_node("Panel/return_button").connect("pressed", self, "_return_button_pressed") 55 _ignore = get_node("Panel/return_button").connect("pressed", self, "_return_button_pressed")
105 56
@@ -295,6 +246,7 @@ func _read_p2p_packet() -> void:
295 false 246 false
296 ) 247 )
297 if "start_x" in data: 248 if "start_x" in data:
249 race_manager.level = data["level"]
298 race_manager.start_pos = [ 250 race_manager.start_pos = [
299 data["start_name"], 251 data["start_name"],
300 int(data["start_x"]), 252 int(data["start_x"]),
@@ -352,30 +304,16 @@ func _main_button_pressed():
352 if everyone_ready and is_vip: 304 if everyone_ready and is_vip:
353 get_node("Panel/main_button").disabled = true 305 get_node("Panel/main_button").disabled = true
354 306
355 var rng = RandomNumberGenerator.new() 307 var route = router.choose_route()
356 rng.randomize() 308 var start_pos = route[1]
357 309 var end_pos = route[2]
358 var start_pos
359 var end_pos
360 var found = false
361 while !found:
362 var areas_dupe = LL1_AREAS.duplicate()
363 var i = rng.randi_range(0, areas_dupe.size() - 1)
364 start_pos = areas_dupe[i]
365 areas_dupe.remove(i)
366 i = rng.randi_range(0, areas_dupe.size() - 1)
367 end_pos = areas_dupe[i]
368
369 var start_vec = Vector3(start_pos[1], start_pos[2], start_pos[3])
370 var end_vec = Vector3(end_pos[1], end_pos[2], end_pos[3])
371 if start_vec.distance_to(end_vec) > 50 and not (start_pos.size() >= 5 and start_pos[4]):
372 found = true
373 310
374 members_to_join = active_lobby_members.duplicate() 311 members_to_join = active_lobby_members.duplicate()
375 members_to_join.erase(player_steam_id) 312 members_to_join.erase(player_steam_id)
376 is_starting = true 313 is_starting = true
377 314
378 var race_manager = global.get_node("RaceManager") 315 var race_manager = global.get_node("RaceManager")
316 race_manager.level = route[0]
379 race_manager.start_pos = start_pos 317 race_manager.start_pos = start_pos
380 race_manager.end_pos = end_pos 318 race_manager.end_pos = end_pos
381 319
@@ -384,6 +322,7 @@ func _main_button_pressed():
384 else: 322 else:
385 _send_p2p_packet( 323 _send_p2p_packet(
386 { 324 {
325 "level": route[0],
387 "start_name": start_pos[0], 326 "start_name": start_pos[0],
388 "start_x": str(start_pos[1]), 327 "start_x": str(start_pos[1]),
389 "start_y": str(start_pos[2]), 328 "start_y": str(start_pos[2]),
@@ -416,7 +355,7 @@ func _start_game():
416 355
417 # Switch to LL1 356 # Switch to LL1
418 Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) 357 Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
419 global.map = "level1" 358 global.map = race_manager.level
420 global.entry_point = Vector3( 359 global.entry_point = Vector3(
421 race_manager.start_pos[1], race_manager.start_pos[2] + 1, race_manager.start_pos[3] 360 race_manager.start_pos[1], race_manager.start_pos[2] + 1, race_manager.start_pos[3]
422 ) 361 )
diff --git a/racing/manager.gd b/racing/manager.gd index 349b83e..48ef466 100644 --- a/racing/manager.gd +++ b/racing/manager.gd
@@ -2,6 +2,7 @@ extends Node
2 2
3var SCRIPT_multiplayer 3var SCRIPT_multiplayer
4 4
5var level
5var start_pos 6var start_pos
6var end_pos 7var end_pos
7var lobby_id 8var lobby_id
diff --git a/racing/router.gd b/racing/router.gd new file mode 100644 index 0000000..15b3f31 --- /dev/null +++ b/racing/router.gd
@@ -0,0 +1,149 @@
1extends Node
2
3const LL1_AREAS = [
4 ["Starting Room", 0, 0, 0],
5 ["Second Room", 0, 0, -15],
6 ["The Traveled", 34, 0, -18],
7 ["The Agreeable", 30, 0, -45],
8 ["The Colorful", 10, 0, -83],
9 ["Suits Area", 0, 0, -78, true],
10 ["Arrow Garden", -93, 1, -93],
11 ["The Wondrous (Table)", -108, 1, -78],
12 ["Courtyard", -64, 0, -71],
13 ["Yellow Backside Nine", -38, 0, -58],
14 ["Hot Crusts Area", -20, 0, -81],
15 ["Crossroads Corner", -28, 0, -54],
16 ["The Discerning", -54, 0, -34, true],
17 ["Green Backside", 22, 0, -94],
18 ["Observant Upstairs", 40, 9, -92, true],
19 ["Eight Room", 95, 15, -28],
20 ["The Perceptive", 60, 9, -57],
21 ["The Tenacious", 0, 0, -43],
22 ["Rainbow", -96, 0, -41],
23 ["The Undeterred", -87, 0, 25, true],
24 ["Directional Gallery", -57, 0, 0],
25 ["The Eyes They See", -54, 0, -23],
26 ["Tower First Floor", -27, 0, -23],
27 ["The Optimistic", 76, 0, -17],
28 ["The Initiated", 63, 0, -0, true],
29 ["Art Gallery", 92, 0, 15],
30 ["Art Gallery Top", 80, 30, 15],
31 ["Lookout", 75, 18, 51],
32 ["Knight Night Room", 37, 0, 7],
33 ["The Seeker", 9, 0, 16, true],
34 ["Hidden Room", 13, 0, 4],
35 ["Owl Hallway", 44, 0, -26],
36 ["Challenge Room", -9, 6, 13],
37 ["Pilgrim Room", -22, 0, 24, true],
38 ["Cellar Replica", -44, 0, 30],
39 ["Elements Area", -61, 0, 40],
40 ["The Artistic", -25, 0, 54, true],
41 ["Outside The Wise", -44, 0, 71],
42 ["The Wise", -72, 0, 72, true],
43 ["The Scientific", -18, 0, 89],
44 ["The Wanderer", 0, 0, 80],
45 ["The Fearless", 18, 10, 90],
46 ["Champion's Rest", 23, 0, 62, true],
47 ["The Steady", 31, 0, 77, true],
48 ["The Bold", 67, 0, 77, true],
49 ["Color Hunt", 45, 0, 69],
50 ["Room Room", 95, 6, 84],
51 ["The Bearer", 61, 0, 51],
52 ["Tower Third Floor", 18, 0, 33],
53 ["Rhyme Room (Cross)", 0, 9, 42],
54 ["Tower Seventh Floor", 0, 37, 64],
55]
56
57const LL2_AREAS = [
58 ["Orange Pyramid", 86, 10, -84, true],
59 ["The Stellar", 43, 6, -86],
60 ["The Fuzzy", 12, 1, -86, true],
61 ["The Devious", 0, 0, -88],
62 ["The Sharp", -26, 0, -88, true],
63 ["The Structured", -50, 0, -88],
64 ["Brown Pyramid", -86, 10, -85, true],
65 ["The Tasty", -86, 7, -62],
66 ["Black White Room", -88, 0, -32],
67 ["Lime Magenta Room", -96, 0, -24],
68 ["Red Blue Room", -87, 0, -23],
69 ["The Archaeologist", -74, 0, -32],
70 ["The Earnest", -87, 0, -56],
71 ["The Hidden", -50, 6, -71, true],
72 ["The Sapient", -36, 36, -41],
73 ["The Ethereal", -42, 0, -22],
74 ["The Learned", 34, 1, -64, true],
75 ["Whispers Behind Quiet Walls", 44, 0, -51, true],
76 ["The Lunar", 45, 0, -22],
77 ["The Arcadian", 86, 0, -53],
78 ["The Frozen", 84, 0, -27],
79 ["The Unscrambled", -50, 0, -10],
80 ["Nightmare", 73, 0, -27, true],
81 ["The Amazing", -13, 0, -42],
82 ["Challenge Room", -94, 0, 2],
83 ["The Fresh", -82, 0, -10],
84 ["The Exemplary", -82, 0, 11],
85 ["The Roaming", -66, 0, -11],
86 ["The Veteran", -66, 0, 12],
87 ["The Royal", -50, 0, 10],
88 ["The Exact", -33, 0, -12],
89 ["The Appreciated", -33, 0, 11],
90 ["The Unsullied", -17, 0, -11],
91 ["The Unopposed", -18, 0, 10],
92 ["The Multitalented", -10, 0, 0],
93 ["Starting Room", 0, 0, 0],
94 ["Control Room", 0, 0, 14],
95 ["Countdown Room", 0, 0, 33, true],
96 ["The Lucky", 13, 1, 32, true],
97 ["Greenhouse", 14, 0, 6],
98 ["The Sweet", 24, 0, 18, true],
99 ["The Fall", 87, 0, -4, true],
100 ["White Pyramid", 46, 0, -1],
101 ["Z", 95, 0, 25, true],
102 ["The Worldly", 92, 0, 58],
103 ["The Perennial", 39, 0, 32],
104 ["The Analytical", -28, 0, 35],
105 ["Car Room", -59, 0, 50, true],
106 ["The Mythical", -35, 4, 73],
107 ["LL1 Starting Room", -70, 0, 41],
108 ["LL1 Second Room", -86, 0, 41],
109 ["The Seen", -83, 0, 57, true],
110 ["Purple Pyramid", -87, 10, 85, true],
111 ["Four Pips", -66, 0, 76],
112 ["Twinkle Twinkle Little Star", 6, 0, 55, true],
113 ["The Unforgettable", 9, 40, 88],
114 ["HI Room", 27, 0, 59],
115 ["The Handy", 39, 10, 83],
116 ["Mint Pyramid", 86, 10, 83, true],
117]
118
119
120func choose_route():
121 var rng = RandomNumberGenerator.new()
122 rng.randomize()
123
124 var areas_slot
125 var level_name
126 if rng.randi_range(0, 2) == 0:
127 areas_slot = LL1_AREAS
128 level_name = "level1"
129 else:
130 areas_slot = LL2_AREAS
131 level_name = "level2"
132
133 var start_pos
134 var end_pos
135 var found = false
136 while !found:
137 var areas_dupe = areas_slot.duplicate()
138 var i = rng.randi_range(0, areas_dupe.size() - 1)
139 start_pos = areas_dupe[i]
140 areas_dupe.remove(i)
141 i = rng.randi_range(0, areas_dupe.size() - 1)
142 end_pos = areas_dupe[i]
143
144 var start_vec = Vector3(start_pos[1], start_pos[2], start_pos[3])
145 var end_vec = Vector3(end_pos[1], end_pos[2], end_pos[3])
146 if start_vec.distance_to(end_vec) > 50 and not (start_pos.size() >= 5 and start_pos[4]):
147 found = true
148
149 return [level_name, start_pos, end_pos]