shuvit 4 years ago
parent
commit
0f398b76fe

+ 2
- 2
assets/bld_kits/wall_b_window_color.png View File

@@ -1,3 +1,3 @@
1 1
 version https://git-lfs.github.com/spec/v1
2
-oid sha256:c0a3d37d85f7216e1fb8ba2ecbbb4fced5953ca2b9e9f41ca6b85ff17ea8d0ca
3
-size 4351
2
+oid sha256:86e128e9bff0b26d86de3b3b1ebb8022929007f5bbfd14c16e088713d8929288
3
+size 4371

+ 2
- 2
assets/car1.blend View File

@@ -1,3 +1,3 @@
1 1
 version https://git-lfs.github.com/spec/v1
2
-oid sha256:4d50a7dd29dc4dd0d9ae2e25740c5ffb537636b0ef7cf935917ab7817e6d80a3
3
-size 2003676
2
+oid sha256:a326d236c07858ff79280694f672e4be2a81fcc691a89fc484b8ef374d1e22e5
3
+size 2005876

+ 2
- 2
assets/mini_b.blend View File

@@ -1,3 +1,3 @@
1 1
 version https://git-lfs.github.com/spec/v1
2
-oid sha256:e1ff0591377ef662b4a9b21d6503029647c9ea8e87392514d9fd625cb18de3a1
3
-size 118444584
2
+oid sha256:c50475ff329f80b485d322d9fb99b998b6ff88da735e508451e508d316bcf729
3
+size 118448512

+ 1
- 1
assets/nav_points
File diff suppressed because it is too large
View File


+ 2
- 2
assets/stores.blend View File

@@ -1,3 +1,3 @@
1 1
 version https://git-lfs.github.com/spec/v1
2
-oid sha256:c6052008729156fef96bdf28b34fa1c1c9bf545e56e7dfc1681630b8bbb1e246
3
-size 14603012
2
+oid sha256:2a102d7a5911fd622405287a1e7dfb49f91be5e14388719a868787fa6f89f0ad
3
+size 14579496

+ 3
- 0
assets/stores_bad.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:24cc14b23cb3822603540d700e5f54523880b6065e9701dc761f8abca3c49f51
3
+size 14557008

+ 3
- 0
assets/train.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:5b45619a53e46d4fdc354fa570d4a5a96413548d7eec2377c264e71872344e03
3
+size 4560976

+ 3
- 0
assets/train_route1.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:0b8f0531c02da7a473216df1df461715f497527069c45f72410ab3d95331b6f0
3
+size 862972

+ 3
- 0
assets/train_route2.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:7e2f493372304b3829a0daab893cd31965adf4621f2ecf960881bc600c05318f
3
+size 4249240

+ 3
- 0
assets/train_route2_working.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:dbbe3b7e93e52d571d10233c16f87b306554c8ab4a19f6ba73df798ad01ffffa
3
+size 2265880

+ 3
- 0
assets/train_route2_working_path.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:4d8a8b5ca9e61b08893276704a05f1d8772eb0a3c7c393fe73e4464837bf4098
3
+size 963016

+ 3
- 0
assets/train_tracks.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:f6bbbd248bbff497c2e13dcf979edb8aeee682ff3d4d3ac19042c15287faef67
3
+size 4604876

+ 2
- 2
assets/user2.blend View File

@@ -1,3 +1,3 @@
1 1
 version https://git-lfs.github.com/spec/v1
2
-oid sha256:27d91460377601ced66f9e90980afd9b1d21a3da8bf7c4a03357655d10ef28a4
3
-size 584296
2
+oid sha256:646fe5ee28529278929593a3c6e8ef648077ba22a9fffda45eaf8a0be4bde1cb
3
+size 14111624

+ 3
- 0
assets/user2_pit.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:27d91460377601ced66f9e90980afd9b1d21a3da8bf7c4a03357655d10ef28a4
3
+size 584296

+ 2
- 2
assets/user2_working.blend View File

@@ -1,3 +1,3 @@
1 1
 version https://git-lfs.github.com/spec/v1
2
-oid sha256:4c3671edb4e3bbb4f492d23f7d13bc3c9b1d8fc18f6e5f64c85cfba1db641da4
3
-size 4920184
2
+oid sha256:d81ae5a52205243525c1fe08bdfd1de81ee3763b075d0f7f623285dd6e7401c8
3
+size 4938780

+ 3
- 0
assets/user8_working.blend View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:22cab52f25fc85cbe22681fae7dc7123ee0f8a9d947f5fdd3737c93d1d81ecf3
3
+size 10652112

+ 1
- 1
assets/walker_nav_points
File diff suppressed because it is too large
View File


+ 6
- 6
config.ini View File

@@ -54,12 +54,12 @@ character = ken
54 54
 
55 55
 shirt_logo = 2
56 56
 
57
-shirt_color_r = 0.61
58
-shirt_color_g = 0.61
57
+shirt_color_r = 0.03
58
+shirt_color_g = 0.16
59 59
 shirt_color_b = 0.0
60 60
 
61
-shoe_color_r = 0.92
62
-shoe_color_g = 0.0
61
+shoe_color_r = 0.55
62
+shoe_color_g = 0.18
63 63
 shoe_color_b = 0
64 64
 #-----------------
65 65
 
@@ -91,7 +91,7 @@ wheel4_b = 0.21
91 91
 ###################
92 92
 
93 93
 #brightness / contrast
94
-bc = 1
94
+bc = 0
95 95
 BC_BRIGHTNESS = 0.92
96 96
 BC_CONTRAST = 1.13
97 97
 
@@ -110,7 +110,7 @@ aoradius = 2.4
110 110
 dof_on = 0
111 111
 
112 112
 #Bloom
113
-bloom_on = 1
113
+bloom_on = 0
114 114
 
115 115
 #FXAA
116 116
 fxaa = 1

+ 23
- 0
scripts/FSM.py View File

@@ -4,6 +4,7 @@ import StatesWalker
4 4
 import StatesCamera
5 5
 import StatesCar
6 6
 import StatesEa
7
+import StatesTrain
7 8
    
8 9
 #====================================
9 10
 class Transition(object):
@@ -164,6 +165,28 @@ class WalkerFSM(Char):
164 165
     def Execute(self):
165 166
         self.FSM.Execute(self.owner)   
166 167
 
168
+#=================================== 
169
+
170
+class TrainFSM(Char):
171
+    def __init__(self, owner):
172
+        self.FSM = FSM(self, owner)
173
+        self.owner = owner
174
+
175
+        
176
+        state_list = [
177
+        'Example']
178
+        
179
+        for s in state_list:
180
+            self.FSM.AddState(s, getattr(StatesTrain, s)(self.FSM))
181
+            t = 'to' + s
182
+            self.FSM.AddTransition(t, Transition(s))
183
+        
184
+        if self.FSM.curState == None:
185
+            self.FSM.SetState('Example')
186
+    
187
+    def Execute(self):
188
+        self.FSM.Execute(self.owner)           
189
+
167 190
 
168 191
 #=================================== 
169 192
 

+ 21
- 2
scripts/StatesCar.py View File

@@ -3,6 +3,7 @@ import bge
3 3
 import random
4 4
 from mathutils import Vector
5 5
 import mathutils
6
+#import sound_man
6 7
 #import math
7 8
 
8 9
 #====================================     
@@ -432,7 +433,8 @@ class NavigateToTarget(State):
432 433
         
433 434
     def Enter(self):
434 435
         self.FSM.stateLife = 1
435
-        
436
+        self.FSM.owner.obj.actuators['cs'].volume = .5
437
+        #self.FSM.owner.obj.actuators['cs'].startSound()
436 438
         super(NavigateToTarget, self).Enter()        
437 439
         
438 440
     def Execute(self):
@@ -445,23 +447,40 @@ class NavigateToTarget(State):
445 447
         set_height(self.FSM.owner)
446 448
         delta_to_vect(self.FSM.owner)
447 449
         gas = True
450
+        #print(self.FSM.owner.manager.parent.name)
451
+        #self.FSM.owner.manager.parent['sndmgr'].queue_sound(['engine_idle', self.FSM.owner.obj, self.FSM.owner.manager.parent, 1, 1]) 
452
+        #self.FSM.owner.manager.parent['sndmgr'].queue_sound(['engine_idle', self.FSM.owner.manager.parent, self.FSM.owner.obj,  .5, 1]) 
453
+        #print(self.FSM.owner.obj.actuators['cs'])
454
+        
448 455
         if self.forward_ray[0]:
449 456
             
450 457
             dist = self.FSM.owner.obj.getDistanceTo(self.forward_ray[1])
451 458
             if dist < 10:
452 459
                 gas = False
453 460
                 self.FSM.owner.obj.linearVelocity.x *= .98
454
-            print(dist, 'forward ray', self.forward_ray[0])
461
+            #print(dist, 'forward ray', self.forward_ray[0])
455 462
         
456 463
         if gas:
457 464
             apply_gas(self.FSM.owner, 1)
458 465
 
466
+        pitch = self.FSM.owner.obj.linearVelocity.x
467
+        pitch = pitch / self.FSM.owner.manager.default_speed
468
+        pitch2 = abs(round(pitch * 1.5, 2))
469
+        #if pitch2 > .75:
470
+            #self.FSM.owner.obj.actuators['cs'].pitch  = 1.25
471
+        #else:
472
+            #self.FSM.owner.obj.actuators['cs'].pitch  = .75            
473
+        self.FSM.owner.obj.actuators['cs'].pitch  = pitch2
474
+
475
+        #print(pitch2, 'pitch') 
476
+
459 477
         #emergency exit
460 478
         if self.FSM.stateLife > 30 * 90:
461 479
             get_parking_type(self.FSM.owner)
462 480
             #self.FSM.ToTransition('toEnterParallelPark')
463 481
 
464 482
     def Exit(self):
483
+        self.FSM.owner.obj.actuators['cs'].volume = .0
465 484
         pass        
466 485
 
467 486
 #====================================  

+ 7
- 5
scripts/StatesEa.py View File

@@ -28,7 +28,7 @@ class Example(State):
28 28
         
29 29
     def Execute(self):
30 30
         self.FSM.stateLife += 1
31
-        print('doing example', self.FSM.owner['EaRequest'])
31
+        #print('doing example', self.FSM.owner['EaRequest'])
32 32
 
33 33
         if self.FSM.owner['EaRequest'] == 'land':
34 34
             self.FSM.ToTransition('toLand')
@@ -44,7 +44,9 @@ class Land(State):
44 44
         
45 45
     def Enter(self):
46 46
         self.FSM.stateLife = 1
47
-        self.strength = random.choice([.1, .2, .3, .4, .5, .6, .7, .8, .9, .9, .9, .9])
47
+        #self.strength = random.choice([.1, .2, .3, .4, .5, .6, .7, .8, .9, .9, .9, .9])
48
+        self.strength = random.choice([.1, .2, .3, .4, .5, .6, .7, .8, .9])
49
+        self.act = random.choice(['ea_land2', 'ea_land3'])
48 50
         #self.strength = random.choice([.1])
49 51
         super(Land, self).Enter()        
50 52
         
@@ -53,15 +55,15 @@ class Land(State):
53 55
         print('land')
54 56
         arm = bge.logic.globalDict['p1']
55 57
 
56
-        if self.FSM.stateLife > 40:
58
+        if self.FSM.stateLife > 80:
57 59
             if self.strength < 1:
58 60
                 self.strength += .05
59 61
                 arm.stopAction(8)
60 62
         
61
-        arm.playAction('ea_land1', 0,40, layer=8, play_mode=0, speed=.5, blendin=10, layer_weight=self.strength)
63
+        arm.playAction(self.act, 0,80, layer=8, play_mode=0, speed=1, blendin=10, layer_weight=self.strength)
62 64
 
63 65
 
64
-        if self.FSM.stateLife > 80:
66
+        if self.FSM.stateLife > 100:
65 67
             self.FSM.owner['EaRequest'] = None
66 68
             self.FSM.ToTransition('toExample')    
67 69
 

+ 37
- 0
scripts/StatesTrain.py View File

@@ -0,0 +1,37 @@
1
+import bge
2
+import random
3
+#====================================     
4
+
5
+State = type("State", (object,), {})
6
+#====================================     
7
+class State(object):
8
+    def __init__(self, FSM):
9
+        self.FSM = FSM
10
+        self.timer = 0
11
+        self.startTime = 0
12
+    def Enter(self):
13
+        self.timer = 0
14
+        self.startTime = 0
15
+    def Execute(self):
16
+        print('Executing')
17
+    def Exit(self):
18
+        print('Exiting')
19
+
20
+#==================================== 
21
+            
22
+class Example(State):
23
+    def __init__(self,FSM):
24
+        super(Example, self).__init__(FSM)    
25
+        
26
+    def Enter(self):
27
+        self.FSM.stateLife = 1
28
+        super(Example, self).Enter()        
29
+        
30
+    def Execute(self):
31
+        self.FSM.stateLife += 1
32
+        #self.FSM.ToTransition('toLand')
33
+        
34
+    def Exit(self):
35
+        pass
36
+
37
+#==================================== 

+ 1
- 1
scripts/StatesWalker.py View File

@@ -174,7 +174,7 @@ class Example(State):
174 174
         
175 175
     def Execute(self):
176 176
         self.FSM.stateLife += 1
177
-        print('doing example')
177
+        #print('doing example')
178 178
         
179 179
     def Exit(self):
180 180
         pass

+ 1
- 1
scripts/actionPlayer.py View File

@@ -474,7 +474,7 @@ def main(cont):
474 474
 
475 475
 
476 476
 	#-----------------------
477
-	print(own['aState'], newState, rA)
477
+	#print(own['aState'], newState, rA)
478 478
 	#print()
479 479
 	if newState != '':
480 480
 		own['aState'] = newState 

+ 2
- 2
scripts/camera.py View File

@@ -358,9 +358,9 @@ def main(cont):
358 358
     sound_man.main(cont)
359 359
     
360 360
     if own['life'] % 2 == 1:
361
-        #cars.Execute(cont)
361
+        cars.Execute(cont)
362 362
         own['CamFSM'].Execute()
363
-        #walkers.Execute(cont)
363
+        walkers.Execute(cont)
364 364
 
365 365
     else:
366 366
         pass

+ 4
- 2
scripts/sound_man.py View File

@@ -11,6 +11,7 @@ def init_sounds(self):
11 11
 	self.land = sounds('land')
12 12
 	self.roll = sounds('roll')
13 13
 	self.revert = sounds('revert')
14
+	self.engine_idle = sounds('engine_idle')
14 15
 	self.roll.loop = True
15 16
 	self.grind_cement = sounds('grind_cement')
16 17
 	self.grind_cement.loop = True
@@ -18,6 +19,7 @@ def init_sounds(self):
18 19
 	self.grind_rail = sounds('grind_rail')
19 20
 	self.grind_rail.loop = True
20 21
 	self.grind_rail.pingpong = True
22
+	self.engine_idle.loop = True
21 23
 	#self.pop.name = 'pop'
22 24
 
23 25
 
@@ -66,8 +68,8 @@ class sound_manager:
66 68
 				result = getattr(self, ev[0])
67 69
 				#print(result)
68 70
 				#print(result.name)
69
-				if result.name == 'roll':
70
-				#if result.loop:
71
+				#if result.name == 'roll':
72
+				if result.loop:
71 73
 					result.loop_play(ev[1], ev[2], ev[3], ev[4])
72 74
 				else:
73 75
 					result.play(ev[1], ev[2])

+ 195
- 0
scripts/trains.py View File

@@ -0,0 +1,195 @@
1
+import bge
2
+import random
3
+import FSM
4
+import astar
5
+import observer
6
+
7
+car_colors = [[.2,.01,.01,1], [.5,.5,.4,1], [.005,.01,.015,1], [.005, .1, 0.003, 1], [.1, .1, .1, 1]]
8
+
9
+npcs = ['carlos', 'maria', 'denise', 'charlie']
10
+
11
+def idle_run_check(self):
12
+	output = False
13
+	for x in bge.logic.getCurrentScene().objects:
14
+		if 'walker_idle_spot' in x.name:
15
+			self.idle_spots.append(x)
16
+			x['in_use'] = False
17
+			output = True
18
+	print(output, 'walker idle spots')
19
+	return output
20
+			
21
+
22
+def get_idle_spots():
23
+	op = []
24
+	for obj in bge.logic.getCurrentScene().objects:
25
+		if 'idle_spot' in obj.name:
26
+			ps = IdleSpot(obj, 'available')
27
+			if 'corner' in obj:
28
+				ps.type = 'corner'
29
+			op.append(ps)
30
+	print('&&&&&& idle spots')
31
+	print(op)		
32
+	return op
33
+
34
+def get_intersections():
35
+	op = []
36
+	for obj in bge.logic.getCurrentScene().objects:
37
+		if 'intersection' in obj:
38
+			op.append(obj)
39
+	return op		
40
+
41
+def add_walker(self, x):
42
+	print(x.obj.worldPosition, '--walker here')
43
+	#walker = bge.logic.getCurrentScene().addObject('larryCube', x.obj, 0)
44
+	#walker = bge.logic.getCurrentScene().addObject('npcCube', x.obj, 0)
45
+	choice = random.choice(npcs)
46
+	walker = bge.logic.getCurrentScene().addObject(choice, x.obj, 0)
47
+	print(walker.worldPosition)
48
+	
49
+	#walker.worldPosition = x.obj.worldPosition
50
+	walker.worldOrientation = x.obj.worldOrientation
51
+	walker.worldPosition.z += 2.8
52
+	walker.name = 'lwalker' + str(len(self.manager.walkers))
53
+	walker.childrenRecursive['shirt'].color = [random.random(),random.random(),random.random(),1]
54
+	walker['npc'] = True
55
+	x.status = 'in_use'
56
+
57
+	return walker
58
+
59
+#====================================  
60
+
61
+class IdleSpot:
62
+	def __init__(self, obj, status):
63
+		self.obj = obj
64
+		self.status = status
65
+		self.type = None
66
+
67
+class Walker:
68
+	def __init__(self, own, start_empty):
69
+		self.manager = own
70
+		self.life = 0
71
+		self.start_empty = start_empty
72
+		self.obj = add_walker(self, self.start_empty)
73
+		self.speed_targ = self.manager.default_speed
74
+		self.speed_inc = 100
75
+		self.FSM = FSM.WalkerFSM(self)
76
+		self.active = False
77
+		self.target = start_empty
78
+		self.lane_point = self.obj.worldPosition
79
+		self.last_lane_point = self.obj.worldPosition
80
+		self.path = None
81
+		self.path_index = 0
82
+		self.path_display = []
83
+		self.cla = None
84
+		self.manager.pub.register("path found", self)
85
+		#self.obj.worldPosition = self.start_empty.obj.worldPosition
86
+
87
+	def Execute(self):
88
+		self.FSM.Execute()
89
+		self.life += 1
90
+
91
+	def ReceiveMessage(self, message):
92
+		#print(message[0])
93
+		if message[0] == 'path':
94
+			if self == message[1]:
95
+				self.path = message[2]
96
+				self.FSM.FSM.ToTransition('toExitParallelPark')
97
+				#print('path got')
98
+		elif message[0] == 'hit':
99
+			if self.obj == message[2]:
100
+				#print('something was hit')
101
+				active_ = False
102
+				if self in self.manager.walkers_active:
103
+					active_ = True
104
+					#print(self.FSM.FSM.curState.__class__.__name__, 'name')
105
+					if self.FSM.FSM.curState.__class__.__name__ == 'NavigateToTarget':
106
+						self.FSM.FSM.ToTransition('toWalkingHitBySkater')
107
+				else:
108
+					self.manager.walkers_active.append(self)
109
+					self.FSM.FSM.ToTransition('toHitBySkater')
110
+				#print('i was hit', message[2], active_)		
111
+
112
+class WalkerManager:
113
+	def __init__(self, own):
114
+		self.parent = own
115
+		self.navmesh = None
116
+		self.pub = observer.Publisher(['path found', 'working'])
117
+		self.navmesh2 =  astar.Astar('walker_nav_points', self.pub)
118
+		self.walkers = []
119
+		self.max_walkers = 16
120
+		self.max_active = 8
121
+		self.targets = []
122
+		self.target_loc = None
123
+		self.idle_spots = get_idle_spots()
124
+		self.active = True
125
+		self.walkers_active = []
126
+		self.walkers_loaded = False
127
+		self.life = 0
128
+		self.default_speed = 1.0#5.0
129
+		self.lane_position = 0.5#1.75
130
+
131
+	def load_walkers(self):
132
+		iter_ = 0
133
+		if npcs[0] in bge.logic.getCurrentScene().objectsInactive:
134
+			start_choices = self.idle_spots.copy()
135
+			while len(self.walkers) < self.max_walkers:
136
+				#get starting position
137
+				start_choice = random.choice(start_choices)
138
+				start_choices.remove(start_choice)
139
+
140
+				walker_ = Walker(self, start_choice)
141
+				#walker_.cla = self
142
+				self.walkers.append(walker_)
143
+
144
+			for x in self.idle_spots:
145
+				iter_ += 1	
146
+
147
+			self.walkers_loaded = True	
148
+
149
+		else:
150
+			for obj in npcs:
151
+				mainDir = bge.logic.expandPath("//npc_walkers/")
152
+				npc = obj
153
+				fileName = mainDir + str(npc) + '.blend'    
154
+				path = bge.logic.expandPath(fileName)
155
+				print('loading npc')
156
+				try:
157
+					bge.logic.LibLoad(fileName, 'Scene', load_actions=True) 
158
+					print(' loaded', obj)
159
+				except Exception as e:
160
+					print('loading', fileName, 'failed', e)   
161
+
162
+	def activator_check(self):
163
+		if len(self.walkers_active) < self.max_active:
164
+			l = []
165
+			for c in self.walkers:
166
+				if not c.active:
167
+					l.append(c)
168
+			walker = random.choice(l)
169
+			self.walkers_active.append(walker)
170
+			walker.active = True
171
+			walker.obj.worldPosition = walker.start_empty.obj.worldPosition
172
+			walker.FSM.FSM.ToTransition('toRequestPath')
173
+			#print('activating walker')
174
+
175
+	def update(self):
176
+		self.life += 1
177
+		if self.walkers_loaded:
178
+			if self.life % 180 == 0:
179
+				self.activator_check()
180
+
181
+			for walker in self.walkers_active:
182
+				walker.Execute()
183
+			self.navmesh2.update()
184
+
185
+		else:
186
+			self.load_walkers()
187
+
188
+def Execute(cont):
189
+	own = cont.owner
190
+	if 'walker_manager' not in own:
191
+		own['walker_manager'] = WalkerManager(own)
192
+	walker_man = own['walker_manager']	
193
+	if walker_man.active:
194
+
195
+		walker_man.update()

+ 2
- 2
scripts/walkers.py View File

@@ -116,8 +116,8 @@ class WalkerManager:
116 116
 		self.pub = observer.Publisher(['path found', 'working'])
117 117
 		self.navmesh2 =  astar.Astar('walker_nav_points', self.pub)
118 118
 		self.walkers = []
119
-		self.max_walkers = 16
120
-		self.max_active = 8
119
+		self.max_walkers = 6
120
+		self.max_active = 3
121 121
 		self.targets = []
122 122
 		self.target_loc = None
123 123
 		self.idle_spots = get_idle_spots()

+ 2
- 2
shuvit.blend View File

@@ -1,3 +1,3 @@
1 1
 version https://git-lfs.github.com/spec/v1
2
-oid sha256:cb5a8bc22a72afdd6761d32a3fd5a45ab324126e5db7c2253590421cabadefc8
3
-size 117252472
2
+oid sha256:fa4bf039ff715598839dca1bb036c0d2fa188cd4a9b71b3a776dfe916452aea6
3
+size 117664932

+ 3
- 0
sounds/CarEngine.wav View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:458258d801a217908097190908315d4450cdea103cd723b705c364201c869940
3
+size 15572

+ 3
- 0
sounds/engine_idle.wav View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:51ded5e77076c2e7f7b40c30210953fe9dc7747b3758f646cfe35ffe93c5da2e
3
+size 1025272

+ 3
- 0
sounds/train_loop.wav View File

@@ -0,0 +1,3 @@
1
+version https://git-lfs.github.com/spec/v1
2
+oid sha256:1b97f93bbb2ba361850ba51feb3d0787a02fccf1a98fd03c45b8334d186c7bae
3
+size 852468

Loading…
Cancel
Save