summaryrefslogtreecommitdiff
path: root/godot
diff options
context:
space:
mode:
Diffstat (limited to 'godot')
-rw-r--r--godot/.import/cballbarrel.gltf-137dd62c1fc21e6e0e224aa365463978.md53
-rw-r--r--godot/maps/Main.tscn372
-rw-r--r--godot/materials/Barrel.materialbin0 -> 339612 bytes
-rw-r--r--godot/meshes/barrel.tres18
-rw-r--r--godot/project.godot14
-rw-r--r--godot/scenes/GameBase.tscn4
-rw-r--r--godot/scenes/ballistics/Cannonball.tscn6
-rw-r--r--godot/scenes/characters/PlayerRigid.tscn33
-rw-r--r--godot/scenes/environment/BallBarrel.gd10
-rw-r--r--godot/scenes/environment/BallBarrel.tscn31
-rw-r--r--godot/scenes/machines/Cannon.tscn13
-rw-r--r--godot/scenes/vehicles/Gunbrig.tscn55
-rw-r--r--godot/scenes/worldprops/ball_bucket.tscn1
-rw-r--r--godot/scripts/CharacterAIManager.gd18
-rw-r--r--godot/scripts/GameBase.gd3
-rw-r--r--godot/scripts/Server.gd26
-rw-r--r--godot/scripts/World.gd7
-rw-r--r--godot/scripts/ballistics/Cannonball.gd11
-rw-r--r--godot/scripts/characters/Idle.gd2
-rw-r--r--godot/scripts/characters/ManCannon.gd107
-rw-r--r--godot/scripts/characters/NetworkedCharacter.gd14
-rw-r--r--godot/scripts/characters/player_controller_new.gd164
-rw-r--r--godot/scripts/fsm/State.gd22
-rw-r--r--godot/scripts/fsm/StateMachine.gd35
-rw-r--r--godot/scripts/machines/Cannon.gd27
-rw-r--r--godot/scripts/vehicles/Gunboat.gd10
-rw-r--r--godot/ui/HUD.gd35
-rw-r--r--godot/ui/HUD.tscn17
-rw-r--r--godot/ui/servermenu/CmdPrompt.gd6
-rw-r--r--godot/watershadertest.tscn115
30 files changed, 764 insertions, 415 deletions
diff --git a/godot/.import/cballbarrel.gltf-137dd62c1fc21e6e0e224aa365463978.md5 b/godot/.import/cballbarrel.gltf-137dd62c1fc21e6e0e224aa365463978.md5
new file mode 100644
index 0000000..2e93d73
--- /dev/null
+++ b/godot/.import/cballbarrel.gltf-137dd62c1fc21e6e0e224aa365463978.md5
@@ -0,0 +1,3 @@
+source_md5="3cebfa9de2099efb5514096583811f9e"
+dest_md5="2fbf66597c306db7b390852b81cd72b3"
+
diff --git a/godot/maps/Main.tscn b/godot/maps/Main.tscn
index c84ea11..37a2d21 100644
--- a/godot/maps/Main.tscn
+++ b/godot/maps/Main.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=57 format=2]
+[gd_scene load_steps=41 format=2]
[ext_resource path="res://scripts/World.gd" type="Script" id=1]
[ext_resource path="res://scenes/machines/Cannon.tscn" type="PackedScene" id=2]
@@ -19,136 +19,72 @@
[ext_resource path="res://scenes/weapons/pistol.gd" type="Script" id=17]
[ext_resource path="res://scenes/weapons/rockets.gd" type="Script" id=18]
[ext_resource path="res://scenes/weapons/grapplinghook.gd" type="Script" id=19]
-[ext_resource path="res://scenes/worldprops/ball_bucket.tscn" type="PackedScene" id=20]
-[sub_resource type="PhysicsMaterial" id=17]
+[sub_resource type="PhysicsMaterial" id=48]
resource_local_to_scene = true
rough = true
-[sub_resource type="Resource" id=20]
-resource_local_to_scene = true
-script = ExtResource( 15 )
-
-[sub_resource type="Resource" id=21]
-resource_local_to_scene = true
-script = ExtResource( 17 )
-
-[sub_resource type="Resource" id=22]
-resource_local_to_scene = true
-script = ExtResource( 18 )
-
-[sub_resource type="Resource" id=41]
-resource_local_to_scene = true
-script = ExtResource( 19 )
-
-[sub_resource type="PhysicsMaterial" id=18]
+[sub_resource type="PhysicsMaterial" id=49]
resource_local_to_scene = true
rough = true
-[sub_resource type="Resource" id=23]
-resource_local_to_scene = true
-script = ExtResource( 15 )
-
-[sub_resource type="Resource" id=24]
-resource_local_to_scene = true
-script = ExtResource( 17 )
-
-[sub_resource type="Resource" id=25]
-resource_local_to_scene = true
-script = ExtResource( 18 )
-
-[sub_resource type="Resource" id=42]
-resource_local_to_scene = true
-script = ExtResource( 19 )
-
-[sub_resource type="PhysicsMaterial" id=19]
+[sub_resource type="PhysicsMaterial" id=57]
resource_local_to_scene = true
rough = true
-[sub_resource type="Resource" id=26]
+[sub_resource type="PhysicsMaterial" id=50]
resource_local_to_scene = true
-script = ExtResource( 15 )
-[sub_resource type="Resource" id=27]
+[sub_resource type="PhysicsMaterial" id=51]
resource_local_to_scene = true
-script = ExtResource( 17 )
-[sub_resource type="Resource" id=28]
+[sub_resource type="PhysicsMaterial" id=58]
resource_local_to_scene = true
-script = ExtResource( 18 )
+rough = true
-[sub_resource type="Resource" id=43]
+[sub_resource type="PhysicsMaterial" id=17]
resource_local_to_scene = true
-script = ExtResource( 19 )
+rough = true
-[sub_resource type="Resource" id=29]
+[sub_resource type="Resource" id=20]
resource_local_to_scene = true
script = ExtResource( 15 )
-[sub_resource type="Resource" id=30]
+[sub_resource type="Resource" id=21]
resource_local_to_scene = true
script = ExtResource( 17 )
-[sub_resource type="Resource" id=31]
+[sub_resource type="Resource" id=22]
resource_local_to_scene = true
script = ExtResource( 18 )
-[sub_resource type="Resource" id=44]
+[sub_resource type="Resource" id=41]
resource_local_to_scene = true
script = ExtResource( 19 )
-[sub_resource type="Resource" id=32]
-resource_local_to_scene = true
-script = ExtResource( 15 )
-
-[sub_resource type="Resource" id=33]
+[sub_resource type="Resource" id=52]
resource_local_to_scene = true
script = ExtResource( 17 )
-[sub_resource type="Resource" id=34]
-resource_local_to_scene = true
-script = ExtResource( 18 )
-
-[sub_resource type="Resource" id=45]
-resource_local_to_scene = true
-script = ExtResource( 19 )
-
-[sub_resource type="Resource" id=35]
+[sub_resource type="Resource" id=53]
resource_local_to_scene = true
script = ExtResource( 15 )
-[sub_resource type="Resource" id=36]
+[sub_resource type="Resource" id=54]
resource_local_to_scene = true
script = ExtResource( 17 )
-[sub_resource type="Resource" id=37]
+[sub_resource type="Resource" id=55]
resource_local_to_scene = true
script = ExtResource( 18 )
-[sub_resource type="Resource" id=46]
-resource_local_to_scene = true
-script = ExtResource( 19 )
-
-[sub_resource type="Resource" id=38]
-resource_local_to_scene = true
-script = ExtResource( 15 )
-
-[sub_resource type="Resource" id=39]
-resource_local_to_scene = true
-script = ExtResource( 17 )
-
-[sub_resource type="Resource" id=40]
-resource_local_to_scene = true
-script = ExtResource( 18 )
-
-[sub_resource type="Resource" id=47]
+[sub_resource type="Resource" id=56]
resource_local_to_scene = true
script = ExtResource( 19 )
[sub_resource type="NavigationMesh" id=14]
-vertices = PoolVector3Array( 7.53034, -0.161953, -20.3654, 6.53034, -0.411953, -23.3654, 2.53034, 0.338047, -21.3654, -3.46966, 0.588047, -19.3654, 7.53034, -0.161953, -20.3654, 2.53034, 0.338047, -21.3654, -3.46966, -0.161953, -22.3654, 1.53034, 1.83805, -16.3654, 5.53034, 2.08805, -15.3654, 4.53034, 1.58805, -17.3654, 6.53034, 2.58805, -11.3654, 13.5303, 1.83805, -10.3654, 12.5303, 1.33805, -14.3654, 5.53034, 2.08805, -15.3654, -16.4697, -1.41195, -12.3654, -16.4697, -0.911953, -10.3654, -12.4697, -0.411953, -11.3654, -16.4697, -1.41195, -12.3654, -12.4697, -0.411953, -11.3654, -16.4697, -1.91195, -14.3654, -18.4697, -2.16195, -12.3654, -16.4697, -1.41195, -12.3654, -16.4697, -1.91195, -14.3654, -23.4697, -1.91195, -14.3654, -19.9697, -2.41195, -14.3654, -23.4697, -1.91195, -14.3654, -23.4697, -0.411953, -5.36539, -17.4697, -1.16195, -8.36539, -18.4697, -2.16195, -12.3654, -9.46966, 3.83805, -3.36539, -9.46966, 3.83805, -2.36539, -8.46966, 3.83805, -2.36539, -7.46966, 3.83805, -4.36539, -9.46966, 3.83805, -4.36539, -9.46966, 3.83805, -3.36539, -8.46966, 3.83805, -2.36539, 17.5303, 1.58805, 0.634615, 12.5303, 2.58805, -0.365385, 10.5303, 3.08805, 0.634615, 9.53034, 3.08805, 2.63461, 12.5303, 2.08805, 9.63461, 16.5303, 1.33805, 8.63461, 17.0303, 1.58805, 4.63461, -7.46966, 3.83805, -4.36539, -8.46966, 3.83805, -2.36539, -7.46966, 3.83805, -1.36539, -5.46966, 3.33805, -7.36539, 0.530344, 3.83805, -9.36539, 2.53034, 3.83805, -9.36539, 1.53034, 3.83805, -13.3654, -10.4697, 2.58805, -9.36539, -9.46966, 3.08805, -6.36539, -7.46966, 3.33805, -6.36539, -5.46966, 3.33805, -7.36539, -7.46966, 2.08805, -14.3654, -6.46966, 3.08805, -10.8654, 1.53034, 3.58805, -4.36539, 2.53034, 3.83805, -6.36539, 0.530344, 3.83805, -9.36539, -5.46966, 3.33805, -7.36539, -0.469656, 3.33805, 4.63461, -2.46966, 3.33805, 3.63461, -1.46966, 2.83805, 6.63461, 0.530344, 2.83805, 10.6346, 1.53034, 3.58805, -4.36539, -5.46966, 3.33805, -7.36539, -7.46966, 3.83805, -1.36539, -2.46966, 3.33805, 3.63461, -0.469656, 3.33805, 4.63461, 4.53034, 3.33805, 0.634615, -5.46966, 3.33805, -7.36539, -7.46966, 3.33805, -6.36539, -7.46966, 3.83805, -4.36539, 4.53034, 3.33805, 0.634615, 2.53034, 3.83805, -3.36539, 1.53034, 3.58805, -4.36539, 16.5303, 1.58805, -7.36539, 14.5303, 2.08805, -7.36539, 12.5303, 2.58805, -0.365385, 17.5303, 1.58805, 0.634615, 0.530344, 3.83805, -9.36539, 1.53034, 3.83805, -13.3654, -4.46966, 3.83805, -13.3654, -5.46966, 3.33805, -7.36539, -1.46966, 2.83805, 6.63461, -3.46966, 3.33805, 4.63461, -8.46966, 2.83805, 6.63461, -3.46966, 2.08805, 15.6346, 0.530344, 2.83805, 10.6346, -2.46966, 1.83805, 16.6346, 4.53034, 1.83805, 16.6346, 0.530344, 2.83805, 10.6346, -3.46966, 2.08805, 15.6346, 4.53034, 3.33805, 0.634615, -0.469656, 3.33805, 4.63461, 1.53034, 3.08805, 6.63461, 9.53034, 3.08805, 2.63461, 10.5303, 3.08805, 0.634615, 5.53034, 3.33805, 4.63461, -8.46966, 3.33805, -0.365385, -8.46966, 3.83805, -2.36539, -9.46966, 3.83805, -2.36539, -11.4697, 3.33805, -3.36539, -9.46966, 3.83805, -3.36539, -9.46966, 3.83805, -4.36539, -5.46966, 1.33805, 17.6346, -2.46966, 1.83805, 16.6346, -3.46966, 2.08805, 15.6346, -6.46966, 1.58805, 15.6346, -8.46966, 2.83805, 6.63461, -3.46966, 3.33805, 4.63461, -2.46966, 3.33805, 3.63461, -7.46966, 3.83805, -1.36539, -8.46966, 3.33805, -0.365385, -11.4697, 2.58805, 5.63461, -6.46966, 1.58805, 15.6346, -3.46966, 2.08805, 15.6346, -7.46966, 1.58805, 13.6346, -11.4697, 3.33805, -3.36539, -9.46966, 3.83805, -4.36539, -9.46966, 3.08805, -6.36539, -10.4697, 2.58805, -9.36539, -14.4697, 1.83805, -8.36539, -13.4697, 2.58805, -5.36539, -8.46966, 3.33805, -0.365385, -9.46966, 3.83805, -2.36539, -11.4697, 3.33805, -3.36539, -20.4697, 1.58805, -1.36539, -20.4697, 1.08805, 3.63461, -17.4697, 2.08805, 1.63461, -18.4697, 2.08805, -3.36539, -11.4697, 1.08805, 15.6346, -6.46966, 1.58805, 15.6346, -7.46966, 1.58805, 13.6346, -11.4697, 1.83805, 12.6346, -24.4697, 1.58805, -3.36539, -25.4697, 1.58805, -13.3654, -27.4697, 1.58805, -13.3654, -28.4697, 1.58805, -2.36539, -14.4697, 2.33805, 4.63461, -14.4697, 1.33805, 11.6346, -11.4697, 2.08805, 7.63461, -11.4697, 2.58805, 5.63461, -17.4697, 2.08805, 1.63461, -14.4697, 2.33805, 4.63461, -11.4697, 2.58805, 5.63461, -8.46966, 3.33805, -0.365385, -11.4697, 3.33805, -3.36539, -18.4697, 2.08805, -3.36539, -13.4697, 2.58805, -5.36539, -16.4697, 1.58805, -6.36539, -18.4697, 2.08805, -3.36539, -11.4697, 3.33805, -3.36539, -11.4697, 1.83805, 12.6346, -7.46966, 1.58805, 13.6346, -8.46966, 2.58805, 8.63461, -11.4697, 2.08805, 7.63461, -14.4697, 1.33805, 11.6346, -24.4697, 1.58805, -3.36539, -28.4697, 1.58805, -2.36539, -20.4697, 1.58805, -1.36539, -18.4697, 2.08805, -3.36539, 4.53034, 4.33805, -5.36539, 1.53034, 3.58805, -4.36539, 2.53034, 3.83805, -3.36539, 4.53034, 4.33805, -3.36539, 6.53034, 4.08805, -7.36539, 4.53034, 4.33805, -5.36539, 4.53034, 4.33805, -3.36539, 6.53034, 4.08805, -7.36539, 4.53034, 3.83805, -13.3654, 1.53034, 3.83805, -13.3654, 2.53034, 3.83805, -9.36539, 4.53034, 4.33805, -5.36539, 4.53034, 4.33805, -3.36539, 4.53034, 4.08805, -1.36539, 9.53034, 4.08805, -2.36539, 10.5303, 3.58805, -8.36539, 6.53034, 4.08805, -7.36539, 3.53034, 2.83805, 8.63461, 5.53034, 2.33805, 12.6346, 9.53034, 2.33805, 10.6346, 8.53034, 2.83805, 6.63461, -19.4697, -0.661953, 7.63461, -19.4697, -1.41195, 10.6346, -17.4697, -0.911953, 10.6346, -16.4697, 0.088047, 13.6346, -12.4697, 0.338047, 16.6346, -13.4697, 0.838047, 13.6346 )
-polygons = [ PoolIntArray( 2, 1, 0 ), PoolIntArray( 6, 5, 3 ), PoolIntArray( 3, 5, 4 ), PoolIntArray( 7, 9, 8 ), PoolIntArray( 13, 12, 10 ), PoolIntArray( 10, 12, 11 ), PoolIntArray( 16, 15, 14 ), PoolIntArray( 19, 18, 17 ), PoolIntArray( 21, 20, 22 ), PoolIntArray( 22, 20, 24 ), PoolIntArray( 24, 20, 23 ), PoolIntArray( 28, 27, 25 ), PoolIntArray( 25, 27, 26 ), PoolIntArray( 31, 30, 29 ), PoolIntArray( 34, 33, 35 ), PoolIntArray( 35, 33, 32 ), PoolIntArray( 38, 37, 39 ), PoolIntArray( 39, 37, 36 ), PoolIntArray( 39, 36, 42 ), PoolIntArray( 39, 42, 41 ), PoolIntArray( 39, 41, 40 ), PoolIntArray( 44, 43, 45 ), PoolIntArray( 45, 43, 46 ), PoolIntArray( 49, 48, 47 ), PoolIntArray( 52, 51, 53 ), PoolIntArray( 53, 51, 50 ), PoolIntArray( 53, 50, 55 ), PoolIntArray( 55, 50, 54 ), PoolIntArray( 57, 56, 58 ), PoolIntArray( 58, 56, 59 ), PoolIntArray( 61, 60, 62 ), PoolIntArray( 62, 60, 63 ), PoolIntArray( 68, 67, 69 ), PoolIntArray( 69, 67, 64 ), PoolIntArray( 64, 67, 66 ), PoolIntArray( 64, 66, 65 ), PoolIntArray( 71, 70, 72 ), PoolIntArray( 73, 75, 74 ), PoolIntArray( 77, 76, 78 ), PoolIntArray( 78, 76, 79 ), PoolIntArray( 81, 80, 82 ), PoolIntArray( 82, 80, 83 ), PoolIntArray( 84, 88, 85 ), PoolIntArray( 85, 88, 86 ), PoolIntArray( 86, 88, 87 ), PoolIntArray( 92, 91, 89 ), PoolIntArray( 89, 91, 90 ), PoolIntArray( 96, 98, 97 ), PoolIntArray( 97, 98, 93 ), PoolIntArray( 93, 98, 95 ), PoolIntArray( 93, 95, 94 ), PoolIntArray( 101, 100, 99 ), PoolIntArray( 104, 103, 102 ), PoolIntArray( 106, 105, 107 ), PoolIntArray( 107, 105, 108 ), PoolIntArray( 110, 109, 111 ), PoolIntArray( 111, 109, 114 ), PoolIntArray( 111, 114, 113 ), PoolIntArray( 111, 113, 112 ), PoolIntArray( 117, 116, 115 ), PoolIntArray( 119, 118, 120 ), PoolIntArray( 120, 118, 123 ), PoolIntArray( 120, 123, 121 ), PoolIntArray( 121, 123, 122 ), PoolIntArray( 126, 125, 124 ), PoolIntArray( 130, 129, 127 ), PoolIntArray( 127, 129, 128 ), PoolIntArray( 134, 133, 131 ), PoolIntArray( 131, 133, 132 ), PoolIntArray( 136, 135, 137 ), PoolIntArray( 137, 135, 138 ), PoolIntArray( 142, 141, 139 ), PoolIntArray( 139, 141, 140 ), PoolIntArray( 144, 143, 145 ), PoolIntArray( 145, 143, 146 ), PoolIntArray( 146, 143, 147 ), PoolIntArray( 147, 143, 148 ), PoolIntArray( 149, 152, 150 ), PoolIntArray( 150, 152, 151 ), PoolIntArray( 157, 156, 153 ), PoolIntArray( 153, 156, 155 ), PoolIntArray( 153, 155, 154 ), PoolIntArray( 161, 160, 158 ), PoolIntArray( 158, 160, 159 ), PoolIntArray( 164, 163, 165 ), PoolIntArray( 165, 163, 162 ), PoolIntArray( 168, 167, 166 ), PoolIntArray( 171, 170, 172 ), PoolIntArray( 172, 170, 169 ), PoolIntArray( 172, 169, 173 ), PoolIntArray( 175, 174, 176 ), PoolIntArray( 176, 174, 178 ), PoolIntArray( 176, 178, 177 ), PoolIntArray( 180, 179, 181 ), PoolIntArray( 181, 179, 182 ), PoolIntArray( 185, 184, 183 ), PoolIntArray( 188, 187, 186 ) ]
-cell_size = 1.0
+vertices = PoolVector3Array( -6.71966, 2.08805, -14.1154, -5.71966, 2.08805, -13.6154, -5.46966, 2.08805, -14.1154, -6.96966, 1.58805, -15.1154, -8.46966, 0.588047, -15.1154, -8.46966, 0.588047, -14.6154, -6.96966, 1.58805, -15.1154, -7.46966, 0.588047, -16.8654, -4.71966, -0.411953, -20.3654, -5.46966, 0.588047, -18.3654, -5.46966, 2.08805, -14.1154, 2.53034, 2.33805, -14.1154, 2.53034, -0.161953, -22.1154, -0.219656, -0.161953, -22.3654, -1.34466, 0.088047, -21.8654, -0.4895, 1.33805, -15.8476, -3.45952, 1.83805, -15.8695, -1.95461, 0.588047, -18.8464, -0.219656, -0.161953, -22.3654, -2.46966, -0.411953, -22.6154, -4.71966, -0.411953, -20.3654, -1.34466, 0.088047, -21.8654, -4.71966, -0.411953, -20.3654, -5.46966, -0.161953, -19.3654, -5.46966, 0.588047, -18.3654, -0.219656, -0.161953, -22.3654, -1.71966, -0.911953, -25.3654, -2.46966, -0.411953, -22.6154, -7.46966, 0.588047, -16.8654, -6.96966, 1.58805, -15.1154, -5.46966, 2.08805, -14.1154, -5.46966, 0.588047, -18.3654, 8.03034, -0.161953, -18.6154, 9.53034, -0.911953, -18.6154, 8.03034, -0.161953, -18.8654, 5.28034, 2.08805, -14.1154, 5.53034, 2.08805, -13.6154, 8.78034, 0.838047, -16.8654, 8.03034, 0.838047, -17.3654, 5.28034, 2.08805, -14.1154, 8.03034, 0.838047, -17.3654, 8.03034, -0.161953, -18.6154, 6.03034, -0.411953, -23.1154, 2.53034, -0.161953, -22.1154, 2.53034, 2.33805, -14.1154, 5.51542, 1.08805, -17.3745, 5.52537, -0.161953, -20.3684, 4.04036, -0.161953, -20.3794, 4.03041, 1.33805, -17.3854, 8.03034, -0.161953, -18.6154, 8.03034, -0.161953, -18.8654, 6.03034, -0.411953, -23.1154, 12.7803, 0.588047, -14.6154, 13.5303, 0.088047, -14.8654, 13.7803, -0.411953, -15.3654, 12.0303, -0.161953, -16.3654, 11.7803, 0.588047, -15.3654, 20.2803, -0.161953, -2.61539, 20.0303, -0.161953, -2.86539, 19.0303, 0.588047, -2.86539, 19.0303, 0.838047, -0.865385, 20.0303, -0.161953, -1.11539, 12.5303, 1.08805, 11.6346, 13.5303, 0.588047, 11.8846, 13.5303, 1.58805, 10.3846, 12.7803, 1.58805, 10.3846, 18.0303, 0.838047, -5.36539, 16.7803, 0.838047, -8.36539, 15.0303, 1.08805, -11.1154, 12.7803, 1.58805, 10.3846, 13.5303, 1.58805, 10.3846, 14.0303, 1.58805, 9.88461, 14.0303, 1.58805, 9.88461, 15.7803, 1.08805, 9.38461, 16.7803, 1.08805, 8.13461, 12.7803, 1.58805, 10.3846, 14.0303, 1.58805, 9.88461, 16.7803, 1.08805, 8.13461, 10.2803, 2.83805, 5.63461, 15.4803, 1.58805, 7.63461, 12.7803, 0.838047, -13.8654, 12.7803, 0.588047, -14.6154, 11.7803, 0.588047, -15.3654, 10.7803, 0.838047, -15.3654, 18.7803, 0.838047, 2.38461, 19.2803, 0.588047, 1.88461, 19.0303, 0.838047, -0.865385, 8.03034, 3.08805, 3.38461, 8.78034, 3.08805, 3.38461, 18.7803, 0.838047, 2.38461, 18.0303, 0.838047, -5.36539, 15.0303, 1.08805, -11.1154, 5.53034, 3.58805, -8.86539, 5.80812, 4.08805, -7.50427, 6.64145, 4.33805, -3.42094, 7.47479, 3.08805, 0.662394, 15.9232, 1.83805, 2.67033, 18.4053, 1.08805, -1.49039, 9.60177, 2.83805, -9.82967, 10.0455, 3.83805, -5.38657, 11.5507, 2.58805, -2.34373, 8.53065, 4.08805, -2.36571, 10.0257, 3.33805, -0.888798, 13.0055, 2.08805, -6.88051, 11.5104, 3.08805, -8.35742, 14.5506, 2.08805, -5.3536, 13.0155, 2.33805, -5.36459, 10.0208, 2.83805, 0.638111, 19.0303, 0.588047, -3.61539, 18.7803, 0.588047, -5.11539, 18.0303, 0.838047, -5.36539, 19.0303, 0.588047, -2.86539, 18.2803, 0.588047, -6.86539, 17.7803, 0.588047, -7.86539, 16.7803, 0.838047, -8.36539, 18.0303, 0.838047, -5.36539, 15.0303, 1.08805, -11.1154, 15.0303, 0.838047, -11.6154, 14.0303, 0.588047, -13.1154, 12.7803, 0.838047, -13.8654, 16.7803, 0.838047, -8.36539, 16.7803, 0.838047, -9.11539, 16.0303, 0.588047, -10.6154, 15.0303, 1.08805, -11.1154, 16.7803, 1.08805, 8.13461, 18.0303, 0.838047, 5.38461, 18.7803, 0.838047, 2.38461, 8.78034, 3.08805, 3.38461, 10.2803, 2.83805, 5.63461, 15.4803, 1.58805, 7.63461, 15.9232, 1.83805, 2.67033, 10.7803, 0.838047, -15.3654, 10.7803, 0.338047, -16.6154, 8.78034, 0.838047, -16.8654, 5.53034, 2.08805, -13.6154, 19.0303, 0.838047, -0.865385, 19.0303, 0.588047, -2.86539, 18.0303, 0.838047, -5.36539, 18.7803, 0.838047, 2.38461, 18.4053, 1.08805, -1.49039, 16.7803, 1.08805, 8.13461, 18.0303, 0.338047, 7.63461, 18.0303, 0.838047, 5.38461, 18.0303, 0.838047, 5.38461, 18.7803, 0.588047, 4.88461, 18.7803, 0.838047, 2.38461, 15.0303, 1.08805, -11.1154, 12.7803, 0.838047, -13.8654, 10.7803, 0.838047, -15.3654, 5.53034, 2.08805, -13.6154, 5.53034, 3.58805, -8.86539, 9.60177, 2.83805, -9.82967, 5.53034, 2.83805, -10.0529, 20.0303, -0.161953, -3.61539, 20.0303, -0.161953, -2.86539, 20.2803, -0.161953, -2.61539, 22.0303, -0.911953, -4.61539, 18.2803, 0.088047, -8.11539, 17.7803, 0.588047, -7.86539, 18.2803, 0.588047, -6.86539, 19.2803, -0.161953, -6.61539, 13.7803, -0.411953, -15.3654, 13.5303, 0.088047, -14.8654, 14.5303, -0.161953, -14.1154, 16.2803, -0.911953, -14.6154, 14.0303, 0.588047, -13.1154, 15.0303, 0.838047, -11.6154, 15.2803, 0.588047, -12.1154, 14.5303, 0.338047, -13.3654, 16.2803, -0.911953, -14.6154, 16.0303, 0.088047, -12.1154, 16.5303, -0.161953, -11.6154, 16.5303, 0.338047, -10.8654, 16.0303, 0.588047, -10.6154, 16.7803, 0.838047, -9.11539, 19.2803, 0.088047, -5.36539, 18.7803, 0.588047, -5.11539, 19.0303, 0.588047, -3.61539, 20.0303, -0.161953, -3.61539, 16.5303, -0.161953, -11.6154, 17.7803, -0.161953, -9.36539, 18.2803, -0.161953, -8.86539, 20.0303, -0.911953, -10.1154, 16.2803, -0.911953, -14.6154, 18.2803, -0.161953, -8.86539, 18.2803, 0.088047, -8.11539, 19.2803, -0.161953, -6.61539, 22.0303, -0.911953, -5.36539, 20.0303, -0.911953, -10.1154, 20.0303, -0.161953, -3.61539, 22.0303, -0.911953, -4.61539, 22.0303, -0.911953, -5.36539, 19.2803, -0.161953, -6.61539, 19.2803, 0.088047, -5.36539, 14.5303, 0.338047, -13.3654, 15.2803, 0.588047, -12.1154, 16.0303, 0.088047, -12.1154, 16.2803, -0.911953, -14.6154, 14.5303, -0.161953, -14.1154, 16.5303, 0.338047, -10.8654, 16.7803, 0.838047, -9.11539, 17.7803, -0.161953, -9.36539, 16.5303, -0.161953, -11.6154, -29.9697, -1.66195, -15.1154, -28.7197, -0.661953, -6.86539, -28.4697, -1.66195, -14.3654, -29.9697, -1.66195, -15.1154, -28.4697, -1.66195, -14.3654, -26.9697, -1.91195, -14.6154, -20.2197, 0.838047, -4.11539, -20.2197, 0.588047, -4.61539, -21.2197, 0.088047, -4.86539, -24.2197, -0.411953, -4.11539, -22.8863, -0.411953, -4.11539, -22.2197, -0.411953, -4.61539, -11.4697, -0.161953, -11.3654, -10.4697, -0.161953, -11.6154, -10.4697, -0.411953, -12.3654, -12.2197, -0.911953, -12.8654, -20.9697, -0.661953, -5.86539, -17.7197, -1.16195, -7.36539, -15.9697, -0.911953, -9.11539, -17.2197, -1.41195, -8.30289, -11.4697, 0.088047, -10.8654, -11.4697, -0.161953, -11.3654, -12.2197, -0.911953, -12.8654, -14.7197, -2.16195, -14.6154, -17.7197, -2.41195, -13.6154, -15.9697, -0.911953, -9.11539, -20.9697, -0.661953, -5.86539, -15.9697, -0.911953, -9.11539, -17.7197, -2.41195, -13.6154, -24.2197, -2.16195, -14.3654, -24.2197, -0.411953, -4.11539, -17.2197, -1.41195, -8.30289, -19.0197, -2.66195, -13.7654, -24.2197, -0.411953, -4.11539, -21.2197, 0.088047, -4.86539, -20.9697, -0.661953, -5.86539, -22.2197, -0.411953, -4.61539, -20.2197, 0.588047, -4.61539, -20.2197, 0.838047, -4.11539, -19.4697, 1.33805, -4.11539, -16.2197, 1.58805, -5.36539, -21.9697, 0.338047, 2.63461, -21.4697, 0.588047, 3.38461, -20.9697, 0.588047, 3.38461, -19.9697, 1.08805, 3.13461, -20.2197, 1.33805, 0.134615, -17.7197, 1.33805, 4.13461, -16.9697, 0.588047, 5.63461, -16.7197, 0.338047, 5.63461, -16.9697, 1.58805, 3.38461, -11.7197, 2.08805, -8.61539, -15.2197, 1.58805, -8.11539, -16.2197, 1.58805, -5.36539, -3.71966, 3.58805, -7.86539, -5.71966, 3.08805, -8.11539, -9.27521, 2.83805, -6.75427, -6.49743, 2.83805, -7.30983, -16.2197, 1.58805, -5.36539, -14.4697, 2.08805, 4.88461, -13.4697, 1.83805, 8.63461, 1.03034, 2.83805, 8.63461, 1.03034, 2.58805, 7.38461, -3.71966, 3.58805, -7.86539, -6.49743, 2.83805, -7.30983, -9.27521, 2.83805, -6.75427, -15.4697, 2.33805, -0.972528, -10.5697, 1.83805, 8.63461, -3.31966, 3.08805, 8.63461, 0.166708, 3.33805, 4.61189, -1.56056, 3.33805, -0.933567, -2.85602, 3.83805, -5.09266, -9.46456, 3.83805, -3.85249, -0.493813, 2.33805, 6.62871, -1.97882, 2.58805, 6.61772, -6.48386, 3.08805, 6.63476, -1.98902, 3.33805, 3.64193, -3.49393, 2.58805, 5.11884, -4.95904, 3.33805, 3.61996, -4.95952, 3.33805, -3.86953, -7.98926, 3.08805, 0.622189, -9.48398, 2.83805, 5.12489, -7.94945, 3.83805, -2.3536, -10.9889, 2.08805, 6.6518, -4.95461, 3.58805, -5.34644, -10.9496, 3.08805, -3.86348, -10.9695, 3.33805, -2.37558, -13.9696, 2.58805, -3.88545, -9.71966, 2.33805, -9.86539, -10.4697, 2.33805, -9.86539, -11.7197, 2.08805, -8.61539, -5.71966, 3.08805, -8.11539, -19.9697, 1.08805, 3.13461, -17.7197, 1.33805, 4.13461, -16.9697, 1.58805, 3.38461, -19.7197, 1.58805, -3.11539, -20.2197, 1.58805, -0.615385, -20.2197, 1.33805, 0.134615, -20.2197, 1.33805, 0.134615, -27.9697, -0.911953, 0.134615, -27.9697, -0.911953, 0.634615, -23.2197, -0.411953, 2.88461, -21.9697, 0.338047, 2.63461, -24.0947, -0.411953, 0.134615, -19.9697, 1.08805, 3.13461, -16.9697, 1.58805, 3.38461, -15.9697, 2.08805, 3.13461, -16.2197, 1.58805, -5.36539, -19.4697, 1.33805, -4.11539, -19.7197, 1.58805, -3.11539, -20.2197, 1.33805, 0.134615, -19.9697, 1.08805, 3.13461, -15.9697, 2.08805, 3.13461, -16.0947, 2.33805, -1.11539, -18.4896, 1.83805, 0.642576, -18.4696, 1.33805, 2.11455, -5.71966, 2.08805, -13.6154, -6.71966, 2.08805, -14.1154, -9.71966, 2.33805, -9.86539, -5.71966, 3.08805, -8.11539, -5.71966, 3.08805, -10.8654, -16.2197, 1.58805, -5.36539, -15.9697, 2.08805, 3.13461, -14.4697, 2.08805, 4.88461, -15.4697, 2.33805, -0.972528, -16.0947, 2.33805, -1.11539, -27.4697, 1.58805, -6.11539, -28.2197, 1.58805, -5.86539, -28.2197, 1.58805, -3.61539, -27.4697, 1.58805, -3.36539, -25.2197, 1.58805, -3.36539, -25.2197, 1.58805, -13.6154, -27.4697, 1.58805, -13.6154, -27.4697, 1.58805, -6.11539, -25.2197, 1.58805, -3.36539, -27.4697, 1.58805, -0.865385, -20.2197, 1.58805, -0.615385, -19.7197, 1.58805, -3.11539, -25.2197, 1.58805, -3.36539, -27.4697, 1.58805, -3.36539, -3.46966, 3.83805, -8.36539, -0.469656, 3.83805, -8.36539, -0.469656, 3.83805, -8.86539, -3.46966, 3.83805, -8.86539, -4.71966, 3.83805, -13.1154, -3.46966, 3.83805, -8.86539, -0.469656, 3.83805, -8.86539, -4.71966, 3.83805, -13.1154, -4.71966, 3.83805, -8.86539, -3.46966, 3.83805, -8.86539, 4.03034, 3.83805, -8.61539, 4.53034, 3.83805, -8.86539, 4.53034, 3.83805, -13.1154, -4.71966, 3.83805, -13.1154, -0.469656, 3.83805, -8.86539, 4.53034, 3.83805, -8.86539, 4.03034, 3.83805, -8.61539, 3.78034, 3.58805, -7.86539, 6.28034, 3.08805, 4.63461, 8.03034, 3.08805, 3.38461, 5.53034, 3.58805, -8.86539, 4.3359, 4.33805, -5.08761, 5.44701, 3.33805, 0.467949, 7.47479, 3.08805, 0.662394, 6.64145, 4.33805, -3.42094, 5.80812, 4.08805, -7.50427, 5.03034, 3.08805, 5.63461, 6.28034, 3.08805, 5.13461, 6.28034, 3.08805, 4.63461, 3.78034, 3.58805, -7.86539, 4.03034, 4.33805, -5.16538, 4.40534, 3.33805, -1.11539, 5.44701, 3.33805, 0.467949, 4.3359, 4.33805, -5.08761, -27.2197, -0.411953, -6.86539, -25.4697, -0.411953, -6.86539, -25.4697, -0.411953, -7.86539, -27.2197, -0.411953, -8.61539, -0.469656, 3.33805, -7.86539, -0.469656, 3.83805, -8.36539, -3.46966, 3.83805, -8.36539, -0.469656, 3.33805, -7.86539, -3.46966, 3.83805, -8.36539, -3.71966, 3.58805, -7.86539, 1.03034, 2.58805, 7.38461, 1.28034, 2.83805, 6.88461, 0.930344, 3.33805, 3.93461, -2.85602, 3.83805, -5.09266, -1.56056, 3.33805, -0.933567, 0.166708, 3.33805, 4.61189, 1.28034, 2.83805, 6.88461, 2.78034, 2.83805, 6.88461, 5.03034, 3.08805, 5.63461, 3.78034, 3.58805, -7.86539, -0.469656, 3.33805, -7.86539, 0.930344, 3.33805, 3.93461, 4.40534, 3.33805, -1.11539, 4.03034, 4.33805, -5.16538, 2.36368, 3.08805, -7.86539, 1.00534, 3.08805, -6.89038, 2.53041, 3.58805, -3.88545, -27.2197, -0.411953, -5.61539, -27.2197, -0.411953, -4.11539, -26.2197, -0.411953, -4.86539, -26.2197, -0.411953, -5.61539, -24.2197, -0.411953, -2.86539, -24.2197, -0.411953, -2.11539, -23.4697, -0.411953, -2.61539, -26.9697, -0.411953, -2.61539, -26.2197, -0.411953, -1.86539, -26.4697, -0.411953, -2.61539, -13.7197, 1.58805, 9.63461, -14.4697, 1.08805, 9.63461, -13.9697, 1.58805, 10.3846, -20.9697, 0.338047, 4.13461, -20.9697, 0.588047, 3.38461, -21.4697, 0.588047, 3.38461, -16.7197, 0.338047, 5.63461, -16.9697, 0.588047, 5.63461, -16.7197, -0.411953, 7.13461, -15.9697, -0.161953, 7.88461, -13.4697, 1.83805, 8.63461, -13.7197, 1.58805, 9.63461, -13.7197, 0.838047, 13.3846, -12.4697, 0.088047, 17.1346, -15.9697, -0.161953, 7.88461, -16.7197, -0.411953, 7.13461, -17.7197, -0.911953, 7.38461, -19.7197, -1.41195, 8.63461, -16.9697, -0.161953, 13.1346, -16.2197, -0.911953, 11.6346, -18.3447, -1.41195, 10.8846, -16.9596, -1.16195, 9.6206, 8.78034, 0.838047, 16.1346, 10.5303, 0.338047, 15.3846, 10.2803, 1.08805, 14.3846, -0.219656, 0.838047, 18.8846, 1.78034, 0.588047, 19.3846, 2.28034, 0.838047, 18.8846, 6.03034, 0.838047, 17.8846, 7.78034, 0.588047, 17.8846, 8.78034, 0.838047, 16.1346, 5.78034, 1.83805, 15.3846, 10.2803, 1.08805, 14.3846, 13.5303, 0.588047, 11.8846, 12.5303, 1.08805, 11.6346, -13.7197, 1.58805, 9.63461, -13.9697, 1.58805, 10.3846, -13.7197, 0.838047, 13.3846, 2.28034, 0.838047, 18.8846, 4.78034, 0.588047, 18.8846, 6.03034, 0.838047, 17.8846, -6.71966, 0.088047, 19.6346, -0.969656, 0.588047, 19.3846, -0.219656, 0.838047, 18.8846, 10.2803, 1.08805, 14.3846, 12.5303, 1.08805, 11.6346, 5.78034, 1.83805, 15.3846, 8.78034, 0.838047, 16.1346, 9.15534, 1.58805, 13.5096, -0.219656, 0.838047, 18.8846, 4.53034, 1.83805, 15.3846, 1.03034, 2.83805, 8.63461, -13.4697, 1.83805, 8.63461, -12.4697, 0.088047, 17.1346, -6.71966, 0.088047, 19.6346, 2.19701, 2.83805, 10.8846, -3.31966, 3.08805, 8.63461, -10.5697, 1.83805, 8.63461, -6.49417, 1.58805, 15.6491, -10.9795, 1.83805, 11.1585, -7.95952, 1.58805, 11.1305, -6.4943, 1.33805, 14.1392, -1.98926, 2.33805, 14.1222, -9.46432, 1.58805, 14.1173, -4.9895, 2.58805, 11.1524, -9.47463, 2.08805, 9.63159, -4.96959, 2.83805, 9.61455, -10.9492, 0.588047, 15.6161, -10.9493, 1.33805, 14.1563, -13.7197, 0.838047, 13.3846, -14.7197, 0.338047, 13.3846, -12.4697, 0.088047, 17.1346, 6.03034, 0.838047, 17.8846, 5.78034, 1.83805, 15.3846, 4.53034, 1.83805, 15.3846, -0.219656, 0.838047, 18.8846, 2.28034, 0.838047, 18.8846, -16.9697, -0.161953, 13.1346, -12.4697, 0.088047, 17.1346, -14.7197, 0.338047, 13.3846, -16.2197, -0.911953, 11.6346, -20.9697, 0.338047, 4.13461, -21.4697, 0.588047, 3.38461, -19.7197, -1.41195, 8.63461, -20.5947, -0.161953, 6.00961, -17.7197, -0.911953, 7.38461, -20.9697, 0.338047, 4.13461, -19.7197, -1.41195, 8.63461, -18.5322, -0.911953, 6.57211, 1.53034, 6.33805, 8.13461, 1.53034, 6.83805, 8.88461, 4.78034, 6.58805, 14.6346, 12.0303, 6.33805, 10.8846, 8.78034, 6.58805, 4.38461, 3.48034, 9.08805, 12.3346, 5.98868, 6.58805, 14.0096, 10.7303, 9.08805, 8.28462, 7.03544, 8.83805, 9.64751, 8.52045, 8.83805, 9.6585, 8.53041, 8.58805, 8.11455, 5.28034, 2.08805, 13.6346, 11.0303, 1.83805, 10.6346, 8.53034, 2.83805, 5.63461, 2.53034, 2.83805, 8.63461, 5.51038, 2.08805, 9.64258, 8.53041, 2.33805, 9.61455, 7.05043, 1.83805, 11.1365 )
+polygons = [ PoolIntArray( 1, 0, 2 ), PoolIntArray( 2, 0, 3 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 12, 17, 13 ), PoolIntArray( 13, 17, 14 ), PoolIntArray( 14, 17, 8 ), PoolIntArray( 8, 17, 9 ), PoolIntArray( 9, 16, 10 ), PoolIntArray( 10, 15, 11 ), PoolIntArray( 11, 15, 12 ), PoolIntArray( 12, 15, 17 ), PoolIntArray( 17, 16, 9 ), PoolIntArray( 16, 15, 10 ), PoolIntArray( 15, 16, 17 ), PoolIntArray( 18, 21, 19 ), PoolIntArray( 19, 21, 20 ), PoolIntArray( 24, 23, 22 ), PoolIntArray( 27, 26, 25 ), PoolIntArray( 29, 28, 30 ), PoolIntArray( 30, 28, 31 ), PoolIntArray( 34, 33, 32 ), PoolIntArray( 35, 38, 36 ), PoolIntArray( 36, 38, 37 ), PoolIntArray( 43, 48, 44 ), PoolIntArray( 44, 48, 39 ), PoolIntArray( 39, 45, 40 ), PoolIntArray( 40, 45, 41 ), PoolIntArray( 41, 46, 42 ), PoolIntArray( 42, 47, 43 ), PoolIntArray( 43, 47, 48 ), PoolIntArray( 48, 45, 39 ), PoolIntArray( 45, 46, 41 ), PoolIntArray( 46, 47, 42 ), PoolIntArray( 47, 46, 48 ), PoolIntArray( 48, 46, 45 ), PoolIntArray( 51, 50, 49 ), PoolIntArray( 53, 52, 54 ), PoolIntArray( 54, 52, 56 ), PoolIntArray( 54, 56, 55 ), PoolIntArray( 58, 57, 59 ), PoolIntArray( 59, 57, 61 ), PoolIntArray( 59, 61, 60 ), PoolIntArray( 65, 64, 62 ), PoolIntArray( 62, 64, 63 ), PoolIntArray( 68, 67, 66 ), PoolIntArray( 71, 70, 69 ), PoolIntArray( 74, 73, 72 ), PoolIntArray( 77, 76, 79 ), PoolIntArray( 79, 76, 75 ), PoolIntArray( 79, 75, 78 ), PoolIntArray( 81, 80, 82 ), PoolIntArray( 82, 80, 83 ), PoolIntArray( 86, 85, 84 ), PoolIntArray( 98, 93, 92 ), PoolIntArray( 93, 99, 94 ), PoolIntArray( 94, 101, 95 ), PoolIntArray( 95, 88, 87 ), PoolIntArray( 88, 107, 96 ), PoolIntArray( 96, 97, 89 ), PoolIntArray( 97, 105, 90 ), PoolIntArray( 90, 105, 91 ), PoolIntArray( 91, 104, 98 ), PoolIntArray( 98, 99, 93 ), PoolIntArray( 99, 101, 94 ), PoolIntArray( 101, 102, 95 ), PoolIntArray( 95, 107, 88 ), PoolIntArray( 107, 100, 96 ), PoolIntArray( 96, 100, 97 ), PoolIntArray( 97, 100, 105 ), PoolIntArray( 105, 103, 91 ), PoolIntArray( 104, 99, 98 ), PoolIntArray( 91, 103, 104 ), PoolIntArray( 99, 100, 101 ), PoolIntArray( 102, 107, 95 ), PoolIntArray( 101, 100, 102 ), PoolIntArray( 107, 102, 100 ), PoolIntArray( 100, 106, 105 ), PoolIntArray( 105, 106, 103 ), PoolIntArray( 104, 103, 99 ), PoolIntArray( 99, 106, 100 ), PoolIntArray( 106, 99, 103 ), PoolIntArray( 109, 108, 110 ), PoolIntArray( 110, 108, 111 ), PoolIntArray( 113, 112, 114 ), PoolIntArray( 114, 112, 115 ), PoolIntArray( 117, 116, 118 ), PoolIntArray( 118, 116, 119 ), PoolIntArray( 121, 120, 122 ), PoolIntArray( 122, 120, 123 ), PoolIntArray( 124, 129, 125 ), PoolIntArray( 125, 129, 126 ), PoolIntArray( 126, 129, 130 ), PoolIntArray( 130, 129, 128 ), PoolIntArray( 130, 128, 127 ), PoolIntArray( 132, 131, 133 ), PoolIntArray( 133, 131, 134 ), PoolIntArray( 138, 139, 135 ), PoolIntArray( 135, 139, 136 ), PoolIntArray( 136, 139, 137 ), PoolIntArray( 142, 141, 140 ), PoolIntArray( 145, 144, 143 ), PoolIntArray( 150, 152, 151 ), PoolIntArray( 151, 152, 149 ), PoolIntArray( 151, 149, 148 ), PoolIntArray( 151, 148, 147 ), PoolIntArray( 151, 147, 146 ), PoolIntArray( 154, 153, 155 ), PoolIntArray( 155, 153, 156 ), PoolIntArray( 158, 157, 159 ), PoolIntArray( 159, 157, 160 ), PoolIntArray( 162, 161, 163 ), PoolIntArray( 163, 161, 164 ), PoolIntArray( 168, 167, 165 ), PoolIntArray( 165, 167, 166 ), PoolIntArray( 169, 171, 170 ), PoolIntArray( 172, 174, 173 ), PoolIntArray( 176, 175, 177 ), PoolIntArray( 177, 175, 178 ), PoolIntArray( 181, 180, 182 ), PoolIntArray( 182, 180, 179 ), PoolIntArray( 182, 179, 183 ), PoolIntArray( 185, 184, 186 ), PoolIntArray( 186, 184, 188 ), PoolIntArray( 186, 188, 187 ), PoolIntArray( 190, 189, 191 ), PoolIntArray( 191, 189, 193 ), PoolIntArray( 191, 193, 192 ), PoolIntArray( 195, 194, 196 ), PoolIntArray( 196, 194, 198 ), PoolIntArray( 196, 198, 197 ), PoolIntArray( 200, 199, 201 ), PoolIntArray( 201, 199, 202 ), PoolIntArray( 205, 204, 203 ), PoolIntArray( 208, 207, 206 ), PoolIntArray( 210, 209, 211 ), PoolIntArray( 211, 209, 214 ), PoolIntArray( 214, 209, 213 ), PoolIntArray( 214, 213, 212 ), PoolIntArray( 216, 215, 217 ), PoolIntArray( 217, 215, 218 ), PoolIntArray( 221, 220, 222 ), PoolIntArray( 222, 220, 219 ), PoolIntArray( 224, 223, 225 ), PoolIntArray( 225, 223, 226 ), PoolIntArray( 226, 223, 227 ), PoolIntArray( 227, 223, 228 ), PoolIntArray( 230, 234, 231 ), PoolIntArray( 231, 234, 235 ), PoolIntArray( 235, 234, 229 ), PoolIntArray( 235, 229, 232 ), PoolIntArray( 232, 229, 233 ), PoolIntArray( 237, 239, 238 ), PoolIntArray( 238, 239, 236 ), PoolIntArray( 241, 240, 242 ), PoolIntArray( 242, 240, 243 ), PoolIntArray( 245, 244, 246 ), PoolIntArray( 246, 244, 247 ), PoolIntArray( 247, 244, 248 ), PoolIntArray( 250, 249, 251 ), PoolIntArray( 251, 249, 252 ), PoolIntArray( 256, 259, 257 ), PoolIntArray( 257, 259, 258 ), PoolIntArray( 257, 258, 253 ), PoolIntArray( 253, 258, 254 ), PoolIntArray( 254, 258, 255 ), PoolIntArray( 273, 286, 265 ), PoolIntArray( 265, 286, 266 ), PoolIntArray( 266, 274, 267 ), PoolIntArray( 267, 289, 260 ), PoolIntArray( 260, 289, 268 ), PoolIntArray( 268, 288, 261 ), PoolIntArray( 261, 285, 262 ), PoolIntArray( 262, 285, 269 ), PoolIntArray( 269, 277, 270 ), PoolIntArray( 270, 275, 263 ), PoolIntArray( 263, 275, 264 ), PoolIntArray( 264, 275, 271 ), PoolIntArray( 271, 278, 272 ), PoolIntArray( 272, 281, 273 ), PoolIntArray( 273, 281, 286 ), PoolIntArray( 286, 274, 266 ), PoolIntArray( 274, 287, 267 ), PoolIntArray( 267, 287, 289 ), PoolIntArray( 289, 288, 268 ), PoolIntArray( 288, 282, 261 ), PoolIntArray( 261, 283, 285 ), PoolIntArray( 285, 283, 269 ), PoolIntArray( 277, 279, 270 ), PoolIntArray( 269, 283, 277 ), PoolIntArray( 270, 276, 275 ), PoolIntArray( 275, 276, 271 ), PoolIntArray( 278, 280, 272 ), PoolIntArray( 271, 276, 278 ), PoolIntArray( 272, 282, 281 ), PoolIntArray( 281, 274, 286 ), PoolIntArray( 274, 288, 287 ), PoolIntArray( 287, 288, 289 ), PoolIntArray( 282, 283, 261 ), PoolIntArray( 288, 284, 282 ), PoolIntArray( 279, 276, 270 ), PoolIntArray( 277, 280, 279 ), PoolIntArray( 283, 280, 277 ), PoolIntArray( 280, 282, 272 ), PoolIntArray( 278, 279, 280 ), PoolIntArray( 276, 279, 278 ), PoolIntArray( 282, 284, 281 ), PoolIntArray( 281, 284, 274 ), PoolIntArray( 274, 284, 288 ), PoolIntArray( 282, 280, 283 ), PoolIntArray( 291, 290, 292 ), PoolIntArray( 292, 290, 293 ), PoolIntArray( 296, 295, 294 ), PoolIntArray( 299, 298, 297 ), PoolIntArray( 301, 305, 302 ), PoolIntArray( 302, 305, 303 ), PoolIntArray( 303, 305, 304 ), PoolIntArray( 304, 305, 300 ), PoolIntArray( 308, 307, 306 ), PoolIntArray( 313, 317, 314 ), PoolIntArray( 314, 316, 315 ), PoolIntArray( 315, 310, 309 ), PoolIntArray( 310, 315, 311 ), PoolIntArray( 311, 316, 312 ), PoolIntArray( 312, 317, 313 ), PoolIntArray( 317, 316, 314 ), PoolIntArray( 316, 311, 315 ), PoolIntArray( 316, 317, 312 ), PoolIntArray( 318, 322, 319 ), PoolIntArray( 319, 322, 321 ), PoolIntArray( 319, 321, 320 ), PoolIntArray( 323, 326, 327 ), PoolIntArray( 327, 326, 324 ), PoolIntArray( 324, 326, 325 ), PoolIntArray( 329, 328, 330 ), PoolIntArray( 330, 328, 331 ), PoolIntArray( 331, 328, 332 ), PoolIntArray( 334, 333, 335 ), PoolIntArray( 335, 333, 336 ), PoolIntArray( 341, 340, 337 ), PoolIntArray( 337, 340, 338 ), PoolIntArray( 338, 340, 339 ), PoolIntArray( 345, 344, 342 ), PoolIntArray( 342, 344, 343 ), PoolIntArray( 348, 347, 346 ), PoolIntArray( 351, 350, 349 ), PoolIntArray( 353, 352, 354 ), PoolIntArray( 354, 352, 356 ), PoolIntArray( 354, 356, 355 ), PoolIntArray( 358, 357, 359 ), PoolIntArray( 359, 357, 362 ), PoolIntArray( 359, 362, 367 ), PoolIntArray( 359, 367, 363 ), PoolIntArray( 363, 367, 366 ), PoolIntArray( 363, 366, 364 ), PoolIntArray( 364, 366, 365 ), PoolIntArray( 364, 365, 361 ), PoolIntArray( 364, 361, 360 ), PoolIntArray( 369, 368, 370 ), PoolIntArray( 370, 368, 374 ), PoolIntArray( 374, 368, 373 ), PoolIntArray( 374, 373, 375 ), PoolIntArray( 375, 373, 372 ), PoolIntArray( 375, 372, 371 ), PoolIntArray( 377, 376, 378 ), PoolIntArray( 378, 376, 379 ), PoolIntArray( 382, 381, 380 ), PoolIntArray( 386, 391, 387 ), PoolIntArray( 387, 391, 388 ), PoolIntArray( 388, 391, 390 ), PoolIntArray( 388, 390, 389 ), PoolIntArray( 388, 389, 383 ), PoolIntArray( 383, 389, 385 ), PoolIntArray( 383, 385, 384 ), PoolIntArray( 400, 401, 396 ), PoolIntArray( 396, 402, 397 ), PoolIntArray( 397, 393, 392 ), PoolIntArray( 393, 397, 394 ), PoolIntArray( 394, 397, 398 ), PoolIntArray( 398, 402, 399 ), PoolIntArray( 399, 400, 395 ), PoolIntArray( 401, 402, 396 ), PoolIntArray( 400, 399, 401 ), PoolIntArray( 402, 398, 397 ), PoolIntArray( 402, 401, 399 ), PoolIntArray( 406, 405, 403 ), PoolIntArray( 403, 405, 404 ), PoolIntArray( 409, 408, 407 ), PoolIntArray( 412, 411, 410 ), PoolIntArray( 415, 414, 413 ), PoolIntArray( 418, 417, 416 ), PoolIntArray( 420, 419, 421 ), PoolIntArray( 421, 419, 422 ), PoolIntArray( 424, 423, 425 ), PoolIntArray( 425, 423, 426 ), PoolIntArray( 431, 433, 432 ), PoolIntArray( 432, 434, 427 ), PoolIntArray( 427, 429, 428 ), PoolIntArray( 429, 434, 430 ), PoolIntArray( 430, 434, 433 ), PoolIntArray( 433, 434, 432 ), PoolIntArray( 434, 429, 427 ), PoolIntArray( 437, 436, 435 ), PoolIntArray( 440, 439, 438 ), PoolIntArray( 442, 441, 443 ), PoolIntArray( 443, 441, 444 ), PoolIntArray( 447, 446, 445 ), PoolIntArray( 450, 449, 448 ), PoolIntArray( 451, 453, 452 ), PoolIntArray( 456, 455, 454 ), PoolIntArray( 458, 457, 461 ), PoolIntArray( 461, 457, 460 ), PoolIntArray( 461, 460, 459 ), PoolIntArray( 466, 480, 467 ), PoolIntArray( 467, 471, 462 ), PoolIntArray( 462, 475, 463 ), PoolIntArray( 463, 475, 468 ), PoolIntArray( 468, 475, 464 ), PoolIntArray( 464, 475, 469 ), PoolIntArray( 469, 479, 470 ), PoolIntArray( 470, 472, 465 ), PoolIntArray( 465, 481, 466 ), PoolIntArray( 480, 471, 467 ), PoolIntArray( 466, 481, 480 ), PoolIntArray( 471, 475, 462 ), PoolIntArray( 475, 477, 469 ), PoolIntArray( 479, 478, 470 ), PoolIntArray( 469, 477, 479 ), PoolIntArray( 472, 481, 465 ), PoolIntArray( 470, 478, 472 ), PoolIntArray( 480, 476, 471 ), PoolIntArray( 481, 476, 480 ), PoolIntArray( 471, 474, 475 ), PoolIntArray( 475, 474, 477 ), PoolIntArray( 479, 473, 478 ), PoolIntArray( 477, 473, 479 ), PoolIntArray( 472, 476, 481 ), PoolIntArray( 478, 473, 472 ), PoolIntArray( 476, 474, 471 ), PoolIntArray( 474, 473, 477 ), PoolIntArray( 472, 473, 476 ), PoolIntArray( 476, 473, 474 ), PoolIntArray( 484, 483, 482 ), PoolIntArray( 486, 485, 487 ), PoolIntArray( 487, 485, 489 ), PoolIntArray( 487, 489, 488 ), PoolIntArray( 493, 492, 490 ), PoolIntArray( 490, 492, 491 ), PoolIntArray( 495, 494, 497 ), PoolIntArray( 497, 494, 496 ), PoolIntArray( 498, 500, 501 ), PoolIntArray( 501, 500, 499 ), PoolIntArray( 509, 512, 506 ), PoolIntArray( 506, 512, 502 ), PoolIntArray( 502, 510, 503 ), PoolIntArray( 503, 510, 507 ), PoolIntArray( 507, 508, 504 ), PoolIntArray( 508, 511, 505 ), PoolIntArray( 505, 511, 509 ), PoolIntArray( 509, 511, 512 ), PoolIntArray( 512, 510, 502 ), PoolIntArray( 510, 508, 507 ), PoolIntArray( 508, 510, 511 ), PoolIntArray( 511, 510, 512 ), PoolIntArray( 515, 517, 516 ), PoolIntArray( 516, 517, 513 ), PoolIntArray( 513, 519, 514 ), PoolIntArray( 514, 518, 515 ), PoolIntArray( 515, 518, 517 ), PoolIntArray( 517, 519, 513 ), PoolIntArray( 519, 518, 514 ), PoolIntArray( 518, 519, 517 ) ]
filter_walkable_low_height_spans = true
[sub_resource type="SpatialMaterial" id=10]
@@ -183,6 +119,7 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 0.794522, -23.7914, 4.93151, -6.7
transform = Transform( 0.479394, 0.044261, -0.876483, -0.0919361, 0.995765, 2.73991e-09, 0.872771, 0.0805805, 0.481432, 6.69452, -0.752387, 9.33614 )
[node name="battery" parent="WORLDGEO" instance=ExtResource( 4 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.01468, -11.0669 )
[node name="Ladder" parent="WORLDGEO" instance=ExtResource( 12 )]
transform = Transform( -4.37114e-08, 0, -1, 0, 5, 0, 1, 0, -4.37114e-08, 27.2981, 0.114466, -0.737169 )
@@ -199,16 +136,15 @@ transform = Transform( -1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, -13.819
[node name="Runway3" parent="WORLDGEO" instance=ExtResource( 13 )]
transform = Transform( 1.94707e-07, 0, -1, 0, 1, 0, 1, 0, 1.94707e-07, 49.6462, 19.1714, 35.7231 )
-[node name="ball_bucket" parent="WORLDGEO" instance=ExtResource( 20 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.216192, 3.60375, -12.2556 )
-
[node name="MACHINES" type="Spatial" parent="."]
[node name="Cannon" parent="MACHINES" instance=ExtResource( 2 )]
-transform = Transform( -0.182167, 0, 0.983268, 0, 1, 0, -0.983268, 0, -0.182167, -3.28944, 3.51975, -12.3747 )
+transform = Transform( -0.182167, 0, 0.983268, 0, 1, 0, -0.983268, 0, -0.182167, -3.28944, 3.23929, -12.3747 )
+physics_material_override = SubResource( 48 )
[node name="Cannon2" parent="MACHINES" instance=ExtResource( 2 )]
-transform = Transform( 0.277851, 0, 0.960625, 0, 1, 0, -0.960625, 0, 0.277851, 2.86139, 3.51975, -12.2864 )
+transform = Transform( 0.277851, 0, 0.960625, 0, 1, 0, -0.960625, 0, 0.277851, 2.86139, 3.23929, -12.2864 )
+physics_material_override = SubResource( 49 )
[node name="CaptureFlag" parent="MACHINES" instance=ExtResource( 11 )]
transform = Transform( -0.854422, 0, 0.519579, 0, 1, 0, -0.519579, 0, -0.854422, -2.70943, 2.59075, 8.79298 )
@@ -217,161 +153,189 @@ transform = Transform( -0.854422, 0, 0.519579, 0, 1, 0, -0.519579, 0, -0.854422,
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 30.8999, 5.13129, -8.23008 )
[node name="Gunbrig" parent="MACHINES" instance=ExtResource( 10 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -49.9367, 0.0469036, -4.88982 )
-
-[node name="Gunbrig2" parent="MACHINES" instance=ExtResource( 10 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -49.9367, 0.0469036, 5.81905 )
-
-[node name="Gunbrig3" parent="MACHINES" instance=ExtResource( 10 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -49.9367, 0.0469036, -18.4704 )
-
-[node name="Gunbrig4" parent="MACHINES" instance=ExtResource( 10 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -49.9367, 0.0469036, -33.3132 )
-
-[node name="BALLISTICS" type="Spatial" parent="."]
-
-[node name="Cannonball" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.1422, 4.06477, -6.08684 )
-
-[node name="Cannonball2" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.303401, 4.06477, -12.7643 )
-
-[node name="Cannonball3" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.303401, 4.06477, -12.2326 )
-
-[node name="Cannonball4" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.162657, 4.06477, -12.2326 )
+transform = Transform( 0.991572, 0, 0.129557, 0, 1, 0, -0.129557, 0, 0.991572, -15.9425, 0.356345, -60.9052 )
+physics_material_override = SubResource( 57 )
-[node name="Cannonball5" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.162657, 4.06477, -11.7252 )
+[node name="Cannon" parent="MACHINES/Gunbrig/ARTILLERY" index="0"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball6" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.369819, 4.06477, -11.7252 )
+[node name="Cannon2" parent="MACHINES/Gunbrig/ARTILLERY" index="1"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball7" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.06477, -11.7252 )
+[node name="Cannon3" parent="MACHINES/Gunbrig/ARTILLERY" index="2"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball8" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.06477, -12.1919 )
+[node name="Cannon4" parent="MACHINES/Gunbrig/ARTILLERY" index="3"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball9" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.06477, -12.7322 )
-
-[node name="Cannonball10" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.206795, 4.06477, -12.7322 )
-
-[node name="Cannonball11" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.303401, 4.47363, -12.7643 )
+[node name="Cannon5" parent="MACHINES/Gunbrig/ARTILLERY" index="4"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball12" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.303401, 4.47363, -12.2326 )
+[node name="Cannon6" parent="MACHINES/Gunbrig/ARTILLERY" index="5"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball13" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.162657, 4.47363, -12.2326 )
+[node name="Cannon7" parent="MACHINES/Gunbrig/ARTILLERY" index="6"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball14" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.162657, 4.47363, -11.7252 )
+[node name="Cannon8" parent="MACHINES/Gunbrig/ARTILLERY" index="7"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball15" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.369819, 4.47363, -11.7252 )
+[node name="Cannon9" parent="MACHINES/Gunbrig/ARTILLERY" index="8"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball16" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.47363, -11.7252 )
+[node name="Cannon10" parent="MACHINES/Gunbrig/ARTILLERY" index="9"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball17" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.47363, -12.1919 )
+[node name="Cannon11" parent="MACHINES/Gunbrig/ARTILLERY" index="10"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball18" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.47363, -12.7322 )
+[node name="Cannon12" parent="MACHINES/Gunbrig/ARTILLERY" index="11"]
+physics_material_override = SubResource( 50 )
-[node name="Cannonball19" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.206795, 4.47363, -12.7322 )
+[node name="BallBarrel" parent="MACHINES/Gunbrig" index="28"]
+physics_material_override = SubResource( 51 )
-[node name="Cannonball20" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.303401, 4.92571, -12.7643 )
+[node name="Gunbrig2" parent="MACHINES" instance=ExtResource( 10 )]
+transform = Transform( 0.991572, 0, 0.129557, 0, 1, 0, -0.129557, 0, 0.991572, -11.5067, 0.356345, -30.6261 )
+physics_material_override = SubResource( 58 )
-[node name="Cannonball21" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.303401, 4.92571, -12.2326 )
+[node name="BALLISTICS" type="Spatial" parent="."]
-[node name="Cannonball22" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.162657, 4.92571, -12.2326 )
+[node name="Cannonball" parent="BALLISTICS" instance=ExtResource( 16 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.1422, 4.06477, -6.08684 )
-[node name="Cannonball23" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.162657, 4.92571, -11.7252 )
+[node name="Cannonball2" parent="BALLISTICS" instance=ExtResource( 16 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.54584, 4.06477, -10.0298 )
-[node name="Cannonball24" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.369819, 4.92571, -11.7252 )
+[node name="Cannonball4" parent="BALLISTICS" instance=ExtResource( 16 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.162657, 4.06477, -12.2326 )
-[node name="Cannonball25" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.92571, -11.7252 )
+[node name="Cannonball9" parent="BALLISTICS" instance=ExtResource( 16 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.815202, 4.06477, -11.8287 )
-[node name="Cannonball26" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.92571, -12.1919 )
+[node name="Cannonball10" parent="BALLISTICS" instance=ExtResource( 16 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.206795, 4.06477, -9.9287 )
[node name="Cannonball27" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.792434, 4.92571, -12.7322 )
-
-[node name="Cannonball28" parent="BALLISTICS" instance=ExtResource( 16 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.206795, 4.92571, -12.7322 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.31559, 5.30409, -12.7322 )
[node name="PLAYERS" type="Spatial" parent="."]
[node name="Player" parent="PLAYERS" instance=ExtResource( 5 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 28.8794, 2.55194, 2.65124 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -10.0276, 0.953085, -60.8257 )
physics_material_override = SubResource( 17 )
weapon_slot1 = SubResource( 20 )
weapon_slot2 = SubResource( 21 )
weapon_slot3 = SubResource( 22 )
weapon_slot4 = SubResource( 41 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon")
[node name="Player2" parent="PLAYERS" instance=ExtResource( 5 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 49.2067, 27.526, 45.9431 )
-physics_material_override = SubResource( 18 )
-team = "BLUE"
-weapon_slot1 = SubResource( 23 )
-weapon_slot2 = SubResource( 24 )
-weapon_slot3 = SubResource( 25 )
-weapon_slot4 = SubResource( 42 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -11.8334, 0.953085, -60.8257 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 20 )
+weapon_slot2 = SubResource( 52 )
+weapon_slot3 = SubResource( 22 )
+weapon_slot4 = SubResource( 41 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon2")
[node name="Player3" parent="PLAYERS" instance=ExtResource( 5 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.426252, 5.22026, -3.48068 )
-physics_material_override = SubResource( 19 )
-weapon_slot1 = SubResource( 26 )
-weapon_slot2 = SubResource( 27 )
-weapon_slot3 = SubResource( 28 )
-weapon_slot4 = SubResource( 43 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -13.7114, 0.953085, -60.8257 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon3")
+
+[node name="Player4" parent="PLAYERS" instance=ExtResource( 5 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15.2939, 0.953085, -60.8257 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon4")
[node name="Player5" parent="PLAYERS" instance=ExtResource( 5 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.86776, 6.37388, -1.22525 )
-physics_material_override = SubResource( 19 )
-weapon_slot1 = SubResource( 29 )
-weapon_slot2 = SubResource( 30 )
-weapon_slot3 = SubResource( 31 )
-weapon_slot4 = SubResource( 44 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5852, 0.953085, -60.8257 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon5")
+
+[node name="Player6" parent="PLAYERS" instance=ExtResource( 5 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15.0248, 0.953085, -59.3606 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon6")
[node name="Player7" parent="PLAYERS" instance=ExtResource( 5 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.11742, 6.37388, 0.816121 )
-physics_material_override = SubResource( 19 )
-weapon_slot1 = SubResource( 32 )
-weapon_slot2 = SubResource( 33 )
-weapon_slot3 = SubResource( 34 )
-weapon_slot4 = SubResource( 45 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -10.0276, 0.953085, -62.6512 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon12")
[node name="Player8" parent="PLAYERS" instance=ExtResource( 5 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.888317, 6.37388, 1.86328 )
-physics_material_override = SubResource( 19 )
-weapon_slot1 = SubResource( 35 )
-weapon_slot2 = SubResource( 36 )
-weapon_slot3 = SubResource( 37 )
-weapon_slot4 = SubResource( 46 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -11.8334, 0.953085, -62.6512 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon11")
[node name="Player9" parent="PLAYERS" instance=ExtResource( 5 )]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.819816, 6.37388, 2.89708 )
-physics_material_override = SubResource( 19 )
-weapon_slot1 = SubResource( 38 )
-weapon_slot2 = SubResource( 39 )
-weapon_slot3 = SubResource( 40 )
-weapon_slot4 = SubResource( 47 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -13.7114, 0.953085, -62.6512 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon10")
+
+[node name="Player10" parent="PLAYERS" instance=ExtResource( 5 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15.2939, 0.953085, -62.6512 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon9")
+
+[node name="Player11" parent="PLAYERS" instance=ExtResource( 5 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5852, 0.953085, -62.6512 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon8")
+
+[node name="Player12" parent="PLAYERS" instance=ExtResource( 5 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -19.0553, 0.953085, -61.8983 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 53 )
+weapon_slot2 = SubResource( 54 )
+weapon_slot3 = SubResource( 55 )
+weapon_slot4 = SubResource( 56 )
+ai_target_machine_path = NodePath("../../MACHINES/Gunbrig/ARTILLERY/Cannon7")
+
+[node name="PlayerCap" parent="PLAYERS" instance=ExtResource( 5 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -27.5218, 3.29532, -60.578 )
+physics_material_override = SubResource( 17 )
+weapon_slot1 = SubResource( 20 )
+weapon_slot2 = SubResource( 21 )
+weapon_slot3 = SubResource( 22 )
+weapon_slot4 = SubResource( 41 )
[node name="worldnavmesh" type="NavigationMeshInstance" parent="."]
navmesh = SubResource( 14 )
@@ -405,7 +369,7 @@ visible = false
mesh = SubResource( 16 )
[node name="DEFAULTCAM" type="Camera" parent="."]
-transform = Transform( -0.507541, -0.344177, 0.789902, -0.0365804, 0.924536, 0.379336, -0.860851, 0.163633, -0.48183, 12.1857, 17.0183, -13.3083 )
+transform = Transform( 0.741938, -0.229168, 0.630088, -0.0365804, 0.924536, 0.379335, -0.66947, -0.304492, 0.677565, 4.16951, 17.0183, -46.6387 )
current = true
far = 8192.0
@@ -414,3 +378,5 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.64212, -0.283324, 20.7042 )
[node name="END" type="Spatial" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -17.7889, 2.93695, 22.3751 )
+
+[editable path="MACHINES/Gunbrig"]
diff --git a/godot/materials/Barrel.material b/godot/materials/Barrel.material
new file mode 100644
index 0000000..0b94c5e
--- /dev/null
+++ b/godot/materials/Barrel.material
Binary files differ
diff --git a/godot/meshes/barrel.tres b/godot/meshes/barrel.tres
new file mode 100644
index 0000000..ebb6cc4
--- /dev/null
+++ b/godot/meshes/barrel.tres
@@ -0,0 +1,18 @@
+[gd_resource type="ArrayMesh" load_steps=2 format=2]
+
+[ext_resource path="res://materials/Barrel.material" type="Material" id=1]
+
+[resource]
+resource_name = "cballbarrel_Cylinder"
+surfaces/0 = {
+"aabb": AABB( -0.57096, -0.6, -0.600343, 1.14192, 1.2, 1.20069 ),
+"array_data": PoolByteArray( 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 191, 144, 157, 0, 9, 128, 53, 241, 59, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 191, 0, 129, 129, 63, 184, 57, 176, 53, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 191, 112, 157, 250, 11, 128, 53, 229, 32, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 191, 144, 99, 234, 3, 53, 37, 241, 59, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 191, 244, 77, 107, 77, 131, 56, 186, 57, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 191, 12, 77, 71, 50, 194, 55, 212, 57, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 191, 112, 99, 18, 1, 53, 37, 229, 32, 24, 121, 150, 62, 154, 153, 25, 191, 189, 27, 207, 190, 0, 129, 129, 63, 77, 57, 246, 53, 24, 121, 150, 62, 154, 153, 25, 191, 189, 27, 207, 190, 112, 157, 246, 12, 128, 53, 83, 46, 24, 121, 150, 62, 154, 153, 25, 191, 189, 27, 207, 190, 114, 196, 242, 11, 128, 53, 83, 46, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 190, 226, 74, 90, 82, 7, 57, 248, 57, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 190, 244, 77, 107, 77, 7, 57, 248, 57, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 190, 112, 99, 20, 1, 53, 37, 83, 46, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 190, 114, 60, 24, 5, 53, 37, 83, 46, 113, 120, 243, 62, 154, 153, 25, 191, 121, 55, 30, 190, 0, 129, 129, 63, 11, 57, 172, 54, 113, 120, 243, 62, 154, 153, 25, 191, 121, 55, 30, 190, 114, 196, 240, 11, 128, 53, 113, 50, 113, 120, 243, 62, 154, 153, 25, 191, 121, 55, 30, 190, 109, 239, 238, 8, 128, 53, 113, 50, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 190, 214, 84, 84, 84, 85, 57, 115, 58, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 190, 226, 74, 90, 82, 85, 57, 115, 58, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 190, 114, 60, 23, 6, 53, 37, 113, 50, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 190, 109, 17, 22, 8, 53, 37, 113, 50, 113, 120, 243, 62, 154, 153, 25, 191, 121, 55, 30, 62, 0, 129, 129, 63, 11, 57, 140, 55, 113, 120, 243, 62, 154, 153, 25, 191, 121, 55, 30, 62, 0, 130, 130, 63, 11, 57, 140, 55, 113, 120, 243, 62, 154, 153, 25, 191, 121, 55, 30, 62, 66, 244, 233, 6, 128, 53, 166, 52, 113, 120, 243, 62, 154, 153, 25, 191, 121, 55, 30, 62, 109, 239, 234, 8, 128, 53, 166, 52, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 62, 214, 84, 84, 84, 85, 57, 5, 59, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 62, 204, 96, 89, 81, 85, 57, 5, 59, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 62, 66, 12, 16, 11, 53, 37, 166, 52, 113, 120, 243, 62, 154, 153, 25, 63, 121, 55, 30, 62, 109, 17, 18, 8, 53, 37, 166, 52, 24, 121, 150, 62, 154, 153, 25, 191, 189, 27, 207, 62, 0, 129, 130, 63, 77, 57, 33, 56, 24, 121, 150, 62, 154, 153, 25, 191, 189, 27, 207, 62, 0, 130, 130, 63, 77, 57, 33, 56, 24, 121, 150, 62, 154, 153, 25, 191, 189, 27, 207, 62, 27, 242, 236, 1, 128, 53, 97, 54, 24, 121, 150, 62, 154, 153, 25, 191, 189, 27, 207, 62, 66, 244, 232, 5, 128, 53, 97, 54, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 62, 204, 96, 89, 81, 7, 57, 128, 59, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 62, 207, 114, 99, 73, 7, 57, 128, 59, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 62, 27, 14, 10, 12, 53, 37, 97, 54, 24, 121, 150, 62, 154, 153, 25, 63, 189, 27, 207, 62, 66, 12, 14, 11, 53, 37, 97, 54, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 63, 229, 242, 22, 3, 128, 53, 2, 56, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 63, 0, 129, 129, 63, 184, 57, 68, 56, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 63, 27, 242, 18, 1, 128, 53, 2, 56, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 63, 229, 14, 0, 9, 53, 37, 2, 56, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 63, 207, 114, 99, 73, 131, 56, 191, 59, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 63, 49, 114, 100, 60, 131, 56, 191, 59, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 0, 63, 27, 14, 6, 11, 53, 37, 2, 56, 24, 121, 150, 190, 154, 153, 25, 191, 189, 27, 207, 62, 190, 244, 22, 7, 128, 53, 212, 56, 24, 121, 150, 190, 154, 153, 25, 191, 189, 27, 207, 62, 229, 242, 24, 5, 128, 53, 212, 56, 24, 121, 150, 190, 154, 153, 25, 191, 189, 27, 207, 62, 0, 129, 129, 63, 35, 58, 33, 56, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 62, 190, 12, 246, 12, 53, 37, 212, 56, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 62, 229, 14, 253, 10, 53, 37, 212, 56, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 62, 49, 114, 100, 60, 229, 55, 173, 59, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 62, 52, 96, 77, 51, 229, 55, 173, 59, 113, 120, 243, 190, 154, 153, 25, 191, 121, 55, 30, 62, 147, 239, 17, 9, 128, 53, 177, 57, 113, 120, 243, 190, 154, 153, 25, 191, 121, 55, 30, 62, 190, 244, 22, 8, 128, 53, 177, 57, 113, 120, 243, 190, 154, 153, 25, 191, 121, 55, 30, 62, 0, 129, 129, 63, 101, 58, 140, 55, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 62, 147, 17, 240, 11, 53, 37, 177, 57, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 62, 190, 12, 244, 11, 53, 37, 177, 57, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 62, 52, 96, 77, 51, 3, 55, 80, 59, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 62, 42, 84, 67, 46, 3, 55, 80, 59, 113, 120, 243, 190, 154, 153, 25, 191, 121, 55, 30, 190, 147, 239, 16, 11, 128, 53, 104, 58, 113, 120, 243, 190, 154, 153, 25, 191, 121, 55, 30, 190, 142, 196, 12, 11, 128, 53, 104, 58, 113, 120, 243, 190, 154, 153, 25, 191, 121, 55, 30, 190, 0, 130, 130, 63, 101, 58, 172, 54, 113, 120, 243, 190, 154, 153, 25, 191, 121, 55, 30, 190, 0, 129, 129, 63, 101, 58, 172, 54, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 190, 147, 17, 239, 9, 53, 37, 104, 58, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 190, 142, 60, 234, 8, 53, 37, 104, 58, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 190, 30, 74, 67, 46, 168, 54, 198, 58, 113, 120, 243, 190, 154, 153, 25, 63, 121, 55, 30, 190, 42, 84, 67, 46, 168, 54, 198, 58, 24, 121, 150, 190, 154, 153, 25, 191, 189, 27, 207, 190, 142, 196, 10, 12, 128, 53, 58, 59, 24, 121, 150, 190, 154, 153, 25, 191, 189, 27, 207, 190, 144, 157, 3, 10, 128, 53, 58, 59, 24, 121, 150, 190, 154, 153, 25, 191, 189, 27, 207, 190, 0, 130, 130, 63, 35, 58, 246, 53, 24, 121, 150, 190, 154, 153, 25, 191, 189, 27, 207, 190, 0, 129, 130, 63, 35, 58, 246, 53, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 190, 142, 60, 234, 7, 53, 37, 58, 59, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 190, 144, 99, 232, 5, 53, 37, 58, 59, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 190, 12, 77, 71, 50, 239, 54, 56, 58, 24, 121, 150, 190, 154, 153, 25, 63, 189, 27, 207, 190, 30, 74, 67, 46, 239, 54, 56, 58, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 191, 144, 157, 7, 11, 211, 49, 241, 59, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 191, 144, 99, 238, 1, 211, 49, 241, 59, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 191, 112, 157, 0, 9, 211, 49, 229, 32, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 191, 112, 99, 22, 3, 211, 49, 229, 32, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 190, 112, 157, 253, 10, 211, 49, 83, 46, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 190, 112, 99, 24, 5, 211, 49, 83, 46, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 190, 114, 196, 246, 12, 211, 49, 83, 46, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 190, 114, 60, 22, 7, 211, 49, 83, 46, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 190, 114, 196, 244, 11, 211, 49, 113, 50, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 190, 114, 60, 22, 8, 211, 49, 113, 50, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 190, 109, 239, 240, 11, 211, 49, 113, 50, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 190, 109, 17, 17, 9, 211, 49, 113, 50, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 62, 66, 244, 234, 8, 211, 49, 166, 52, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 62, 66, 12, 12, 11, 211, 49, 166, 52, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 62, 109, 239, 239, 9, 211, 49, 166, 52, 108, 42, 18, 63, 0, 0, 0, 0, 236, 247, 61, 62, 109, 17, 16, 11, 211, 49, 166, 52, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 62, 27, 242, 232, 5, 211, 49, 97, 54, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 62, 27, 14, 3, 10, 211, 49, 97, 54, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 62, 66, 244, 234, 7, 211, 49, 97, 54, 182, 171, 180, 62, 0, 0, 0, 0, 5, 172, 248, 62, 66, 12, 10, 12, 211, 49, 97, 54, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 63, 229, 242, 238, 1, 211, 49, 2, 56, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 63, 229, 14, 249, 11, 211, 49, 2, 56, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 63, 27, 242, 234, 3, 211, 49, 2, 56, 192, 102, 36, 48, 0, 0, 0, 0, 14, 176, 25, 63, 27, 14, 0, 9, 211, 49, 2, 56, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 62, 190, 244, 24, 5, 211, 49, 212, 56, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 62, 190, 12, 242, 11, 211, 49, 212, 56, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 62, 229, 242, 20, 1, 211, 49, 212, 56, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 62, 229, 14, 246, 12, 211, 49, 212, 56, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 62, 147, 239, 22, 8, 211, 49, 177, 57, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 62, 147, 17, 237, 8, 211, 49, 177, 57, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 62, 190, 244, 23, 6, 211, 49, 177, 57, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 62, 190, 12, 240, 11, 211, 49, 177, 57, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 190, 147, 239, 19, 8, 211, 49, 104, 58, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 190, 147, 17, 234, 8, 211, 49, 104, 58, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 190, 142, 196, 16, 11, 211, 49, 104, 58, 108, 42, 18, 191, 0, 0, 0, 0, 236, 247, 61, 190, 142, 60, 233, 6, 211, 49, 104, 58, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 190, 142, 196, 14, 11, 211, 49, 58, 59, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 190, 142, 60, 232, 5, 211, 49, 58, 59, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 190, 144, 157, 10, 12, 211, 49, 58, 59, 182, 171, 180, 190, 0, 0, 0, 0, 5, 172, 248, 190, 144, 99, 236, 1, 211, 49, 58, 59, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 128, 0, 130, 130, 63, 184, 57, 28, 55, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 128, 0, 129, 129, 63, 184, 57, 28, 55, 0, 0, 0, 0, 154, 153, 25, 191, 0, 0, 0, 128, 0, 130, 130, 63, 184, 57, 28, 55, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 190, 244, 77, 107, 77, 127, 56, 207, 57, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 190, 0, 126, 183, 63, 116, 56, 153, 52, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 190, 0, 126, 183, 63, 116, 56, 153, 52, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 190, 0, 126, 183, 63, 116, 56, 153, 52, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 190, 0, 126, 183, 63, 116, 56, 153, 52, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 190, 12, 77, 71, 50, 214, 55, 231, 57, 3, 71, 138, 62, 6, 158, 20, 63, 143, 82, 190, 190, 226, 74, 90, 82, 249, 56, 8, 58, 3, 71, 138, 62, 6, 158, 20, 63, 143, 82, 190, 190, 244, 77, 107, 77, 249, 56, 8, 58, 3, 71, 138, 62, 6, 158, 20, 63, 143, 82, 190, 190, 0, 126, 183, 63, 51, 56, 204, 51, 206, 188, 223, 62, 6, 158, 20, 63, 184, 100, 17, 190, 214, 84, 84, 84, 64, 57, 121, 58, 206, 188, 223, 62, 6, 158, 20, 63, 184, 100, 17, 190, 226, 74, 90, 82, 64, 57, 121, 58, 206, 188, 223, 62, 6, 158, 20, 63, 184, 100, 17, 190, 0, 126, 183, 63, 51, 56, 17, 50, 206, 188, 223, 62, 6, 158, 20, 63, 184, 100, 17, 62, 214, 84, 84, 84, 64, 57, 255, 58, 206, 188, 223, 62, 6, 158, 20, 63, 184, 100, 17, 62, 204, 96, 89, 81, 64, 57, 255, 58, 206, 188, 223, 62, 6, 158, 20, 63, 184, 100, 17, 62, 0, 126, 183, 63, 116, 56, 170, 48, 206, 188, 223, 62, 6, 158, 20, 63, 184, 100, 17, 62, 0, 126, 183, 63, 116, 56, 170, 48, 3, 71, 138, 62, 6, 158, 20, 63, 143, 82, 190, 62, 204, 96, 89, 81, 249, 56, 112, 59, 3, 71, 138, 62, 6, 158, 20, 63, 143, 82, 190, 62, 207, 114, 99, 73, 249, 56, 112, 59, 3, 71, 138, 62, 6, 158, 20, 63, 143, 82, 190, 62, 0, 126, 183, 63, 221, 56, 33, 48, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 62, 207, 114, 99, 73, 127, 56, 170, 59, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 62, 0, 126, 183, 63, 71, 57, 170, 48, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 62, 0, 126, 183, 63, 71, 57, 170, 48, 72, 202, 132, 175, 6, 158, 20, 63, 101, 64, 235, 62, 49, 114, 100, 60, 127, 56, 170, 59, 3, 71, 138, 190, 6, 158, 20, 63, 143, 82, 190, 62, 0, 126, 183, 63, 136, 57, 17, 50, 3, 71, 138, 190, 6, 158, 20, 63, 143, 82, 190, 62, 49, 114, 100, 60, 245, 55, 153, 59, 3, 71, 138, 190, 6, 158, 20, 63, 143, 82, 190, 62, 52, 96, 77, 51, 245, 55, 153, 59, 206, 188, 223, 190, 6, 158, 20, 63, 184, 100, 17, 62, 0, 126, 183, 63, 136, 57, 204, 51, 206, 188, 223, 190, 6, 158, 20, 63, 184, 100, 17, 62, 0, 126, 183, 63, 136, 57, 204, 51, 206, 188, 223, 190, 6, 158, 20, 63, 184, 100, 17, 62, 52, 96, 77, 51, 38, 55, 68, 59, 206, 188, 223, 190, 6, 158, 20, 63, 184, 100, 17, 62, 42, 84, 67, 46, 38, 55, 68, 59, 206, 188, 223, 190, 6, 158, 20, 63, 184, 100, 17, 190, 0, 126, 183, 63, 71, 57, 153, 52, 206, 188, 223, 190, 6, 158, 20, 63, 184, 100, 17, 190, 30, 74, 67, 46, 210, 54, 197, 58, 206, 188, 223, 190, 6, 158, 20, 63, 184, 100, 17, 190, 42, 84, 67, 46, 210, 54, 197, 58, 3, 71, 138, 190, 6, 158, 20, 63, 143, 82, 190, 190, 0, 126, 183, 63, 221, 56, 222, 52, 3, 71, 138, 190, 6, 158, 20, 63, 143, 82, 190, 190, 12, 77, 71, 50, 20, 55, 67, 58, 3, 71, 138, 190, 6, 158, 20, 63, 143, 82, 190, 190, 30, 74, 67, 46, 20, 55, 67, 58 ),
+"array_index_data": PoolByteArray( 77, 0, 12, 0, 6, 0, 77, 0, 79, 0, 12, 0, 81, 0, 19, 0, 13, 0, 81, 0, 83, 0, 19, 0, 85, 0, 28, 0, 20, 0, 85, 0, 89, 0, 28, 0, 87, 0, 36, 0, 27, 0, 87, 0, 93, 0, 36, 0, 91, 0, 43, 0, 35, 0, 91, 0, 97, 0, 43, 0, 95, 0, 48, 0, 40, 0, 95, 0, 101, 0, 48, 0, 99, 0, 55, 0, 47, 0, 99, 0, 105, 0, 55, 0, 103, 0, 62, 0, 54, 0, 103, 0, 107, 0, 62, 0, 109, 0, 70, 0, 63, 0, 109, 0, 111, 0, 70, 0, 113, 0, 3, 0, 71, 0, 113, 0, 75, 0, 3, 0, 67, 0, 74, 0, 112, 0, 67, 0, 0, 0, 74, 0, 59, 0, 110, 0, 108, 0, 59, 0, 66, 0, 110, 0, 51, 0, 106, 0, 102, 0, 51, 0, 58, 0, 106, 0, 44, 0, 104, 0, 98, 0, 44, 0, 52, 0, 104, 0, 37, 0, 100, 0, 94, 0, 37, 0, 45, 0, 100, 0, 31, 0, 96, 0, 90, 0, 31, 0, 39, 0, 96, 0, 23, 0, 92, 0, 86, 0, 23, 0, 32, 0, 92, 0, 16, 0, 88, 0, 84, 0, 16, 0, 24, 0, 88, 0, 9, 0, 82, 0, 80, 0, 9, 0, 15, 0, 82, 0, 2, 0, 78, 0, 76, 0, 2, 0, 8, 0, 78, 0, 68, 0, 60, 0, 114, 0, 61, 0, 53, 0, 115, 0, 53, 0, 46, 0, 115, 0, 69, 0, 115, 0, 1, 0, 7, 0, 1, 0, 115, 0, 14, 0, 7, 0, 115, 0, 21, 0, 14, 0, 115, 0, 30, 0, 22, 0, 116, 0, 46, 0, 38, 0, 115, 0, 38, 0, 29, 0, 115, 0, 56, 0, 142, 0, 50, 0, 56, 0, 145, 0, 142, 0, 49, 0, 139, 0, 42, 0, 49, 0, 141, 0, 139, 0, 41, 0, 134, 0, 34, 0, 41, 0, 136, 0, 134, 0, 33, 0, 130, 0, 26, 0, 33, 0, 133, 0, 130, 0, 11, 0, 117, 0, 4, 0, 11, 0, 124, 0, 117, 0, 25, 0, 126, 0, 17, 0, 25, 0, 129, 0, 126, 0, 18, 0, 123, 0, 10, 0, 18, 0, 127, 0, 123, 0, 5, 0, 151, 0, 72, 0, 5, 0, 122, 0, 151, 0, 73, 0, 148, 0, 64, 0, 73, 0, 152, 0, 148, 0, 65, 0, 146, 0, 57, 0, 65, 0, 149, 0, 146, 0, 147, 0, 120, 0, 144, 0, 147, 0, 150, 0, 120, 0, 125, 0, 131, 0, 118, 0, 125, 0, 128, 0, 131, 0, 132, 0, 138, 0, 121, 0, 132, 0, 135, 0, 138, 0, 137, 0, 143, 0, 119, 0, 137, 0, 140, 0, 143, 0 ),
+"blend_shape_data": [ ],
+"format": 2194711,
+"index_count": 234,
+"material": ExtResource( 1 ),
+"primitive": 4,
+"skeleton_aabb": [ ],
+"vertex_count": 153
+}
diff --git a/godot/project.godot b/godot/project.godot
index 8c82ff3..08df693 100644
--- a/godot/project.godot
+++ b/godot/project.godot
@@ -23,11 +23,23 @@ _global_script_classes=[ {
"class": "NetObject",
"language": "GDScript",
"path": "res://scripts/ballistics/NetworkedProjectile.gd"
+}, {
+"base": "Node",
+"class": "State",
+"language": "GDScript",
+"path": "res://scripts/fsm/State.gd"
+}, {
+"base": "Node",
+"class": "StateMachine",
+"language": "GDScript",
+"path": "res://scripts/fsm/StateMachine.gd"
} ]
_global_script_class_icons={
"NetChar": "",
"NetMachine": "",
-"NetObject": ""
+"NetObject": "",
+"State": "",
+"StateMachine": ""
}
[application]
diff --git a/godot/scenes/GameBase.tscn b/godot/scenes/GameBase.tscn
index 1f09aa2..c339c37 100644
--- a/godot/scenes/GameBase.tscn
+++ b/godot/scenes/GameBase.tscn
@@ -9,7 +9,7 @@
script = ExtResource( 3 )
[node name="Water" parent="." instance=ExtResource( 1 )]
-transform = Transform( 6000, 0, 0, 0, 100, 0, 0, 0, 6000, 0, 0, 0 )
+transform = Transform( 10000, 0, 0, 0, 100, 0, 0, 0, 10000, 0, 0, 0 )
[node name="WORLDGEO" type="Spatial" parent="."]
@@ -27,5 +27,5 @@ far = 8192.0
[node name="PLAYERCAM" type="ClippedCamera" parent="."]
near = 0.01
-far = 520.7
+far = 2000.0
script = ExtResource( 4 )
diff --git a/godot/scenes/ballistics/Cannonball.tscn b/godot/scenes/ballistics/Cannonball.tscn
index b9d5a0d..8412fee 100644
--- a/godot/scenes/ballistics/Cannonball.tscn
+++ b/godot/scenes/ballistics/Cannonball.tscn
@@ -14,6 +14,7 @@ rings = 8
[sub_resource type="OpenSimplexNoise" id=4]
[sub_resource type="NoiseTexture" id=5]
+seamless = true
as_normalmap = true
bump_strength = 8.7
noise = SubResource( 4 )
@@ -43,12 +44,11 @@ shape = SubResource( 1 )
mesh = SubResource( 2 )
material/0 = SubResource( 3 )
-[node name="CarryArea" type="Area" parent="."]
+[node name="PickupArea" type="Area" parent="."]
collision_layer = 2
collision_mask = 2
-monitoring = false
-[node name="CollisionShape" type="CollisionShape" parent="CarryArea"]
+[node name="CollisionShape" type="CollisionShape" parent="PickupArea"]
shape = SubResource( 6 )
[connection signal="body_entered" from="." to="." method="_on_collision"]
diff --git a/godot/scenes/characters/PlayerRigid.tscn b/godot/scenes/characters/PlayerRigid.tscn
index bc5f588..d66655a 100644
--- a/godot/scenes/characters/PlayerRigid.tscn
+++ b/godot/scenes/characters/PlayerRigid.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=14 format=2]
+[gd_scene load_steps=18 format=2]
[ext_resource path="res://scripts/characters/player_controller_new.gd" type="Script" id=1]
[ext_resource path="res://theming/Rapscallion-q341.ttf" type="DynamicFontData" id=2]
@@ -8,6 +8,9 @@
[ext_resource path="res://scenes/weapons/pistol.tres" type="Resource" id=6]
[ext_resource path="res://scenes/weapons/rockets.tres" type="Resource" id=7]
[ext_resource path="res://scenes/weapons/grapplinghook.tres" type="Resource" id=8]
+[ext_resource path="res://scripts/fsm/StateMachine.gd" type="Script" id=9]
+[ext_resource path="res://scripts/characters/ManCannon.gd" type="Script" id=10]
+[ext_resource path="res://scripts/characters/Idle.gd" type="Script" id=11]
[sub_resource type="PhysicsMaterial" id=8]
resource_local_to_scene = true
@@ -28,7 +31,10 @@ font_data = ExtResource( 2 )
[sub_resource type="BoxShape" id=1]
extents = Vector3( 0.325, 0.9, 0.325 )
-[node name="Soldier" type="RigidBody" groups=["playable", "player"]]
+[sub_resource type="SphereShape" id=9]
+radius = 50.0
+
+[node name="Marine" type="RigidBody" groups=["playable", "player"]]
collision_layer = 32769
collision_mask = 32769
mode = 2
@@ -93,11 +99,8 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0 )
mesh = SubResource( 4 )
[node name="NavigationAgent" type="NavigationAgent" parent="."]
-path_desired_distance = 1.5
-target_desired_distance = 1.5
-agent_height_offset = -0.5
-path_max_distance = 1.0
-neighbor_dist = 15.0
+avoidance_enabled = true
+radius = 0.3
[node name="Nametag" type="Label3D" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.08522, 0 )
@@ -115,5 +118,21 @@ script = ExtResource( 3 )
[node name="Collision" type="CollisionShape" parent="AreaDetect"]
shape = SubResource( 1 )
+[node name="AISearchArea" type="Area" parent="."]
+monitorable = false
+
+[node name="Collision" type="CollisionShape" parent="AISearchArea"]
+shape = SubResource( 9 )
+
+[node name="AIStateMachine" type="Node" parent="."]
+script = ExtResource( 9 )
+initial_state = NodePath("Idle")
+
+[node name="Idle" type="Node" parent="AIStateMachine"]
+script = ExtResource( 11 )
+
+[node name="ManCannon" type="Node" parent="AIStateMachine"]
+script = ExtResource( 10 )
+
[connection signal="area_entered" from="AreaDetect" to="AreaDetect" method="_on_AreaDetect_area_entered"]
[connection signal="area_exited" from="AreaDetect" to="AreaDetect" method="_on_AreaDetect_area_exited"]
diff --git a/godot/scenes/environment/BallBarrel.gd b/godot/scenes/environment/BallBarrel.gd
new file mode 100644
index 0000000..80b721e
--- /dev/null
+++ b/godot/scenes/environment/BallBarrel.gd
@@ -0,0 +1,10 @@
+extends RigidBody
+
+const balls_max = 100
+onready var balls_left = balls_max
+
+func use_generic(player: NetChar) -> void:
+ if balls_left > 0 and player.inventory["cannonball"] < player.inventory_caps["cannonball"]:
+ player.inventory["cannonball"] += 1
+ balls_left -= 1
+ player.rset("inventory", player.inventory)
diff --git a/godot/scenes/environment/BallBarrel.tscn b/godot/scenes/environment/BallBarrel.tscn
new file mode 100644
index 0000000..4378d7e
--- /dev/null
+++ b/godot/scenes/environment/BallBarrel.tscn
@@ -0,0 +1,31 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://meshes/barrel.tres" type="ArrayMesh" id=1]
+[ext_resource path="res://scenes/environment/BallBarrel.gd" type="Script" id=2]
+
+[sub_resource type="PhysicsMaterial" id=3]
+resource_local_to_scene = true
+
+[sub_resource type="CylinderShape" id=1]
+height = 1.18356
+radius = 0.597426
+
+[sub_resource type="BoxShape" id=2]
+extents = Vector3( 0.62804, 0.686083, 0.635326 )
+
+[node name="BallBarrel" type="RigidBody"]
+mass = 400.0
+physics_material_override = SubResource( 3 )
+script = ExtResource( 2 )
+
+[node name="CollisionShape" type="CollisionShape" parent="."]
+shape = SubResource( 1 )
+
+[node name="MeshInstance" type="MeshInstance" parent="."]
+mesh = ExtResource( 1 )
+
+[node name="UseArea" type="Area" parent="."]
+monitoring = false
+
+[node name="CollisionShape" type="CollisionShape" parent="UseArea"]
+shape = SubResource( 2 )
diff --git a/godot/scenes/machines/Cannon.tscn b/godot/scenes/machines/Cannon.tscn
index 9bcd95d..182ff8a 100644
--- a/godot/scenes/machines/Cannon.tscn
+++ b/godot/scenes/machines/Cannon.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=10 format=2]
+[gd_scene load_steps=9 format=2]
[ext_resource path="res://scripts/machines/Cannon.gd" type="Script" id=1]
[ext_resource path="res://sounds/explode.wav" type="AudioStream" id=2]
@@ -6,9 +6,6 @@
[ext_resource path="res://meshes/cannon_base.tres" type="ArrayMesh" id=4]
[ext_resource path="res://theming/FreeMono.otf" type="DynamicFontData" id=5]
-[sub_resource type="PhysicsMaterial" id=8]
-rough = true
-
[sub_resource type="BoxShape" id=1]
extents = Vector3( 1, 0.5, 0.5 )
@@ -23,7 +20,7 @@ font_data = ExtResource( 5 )
[node name="Cannon" type="RigidBody"]
mass = 3180.0
-physics_material_override = SubResource( 8 )
+linear_damp = 0.0
script = ExtResource( 1 )
[node name="CollisionShape" type="CollisionShape" parent="."]
@@ -69,3 +66,9 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.748, 1.143, 0 )
billboard = 2
text = "!"
font = SubResource( 9 )
+
+[node name="NavigationObstacle" type="NavigationObstacle" parent="."]
+estimate_radius = false
+
+[node name="AINavPoint" type="Spatial" parent="."]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.392, 0, 0 )
diff --git a/godot/scenes/vehicles/Gunbrig.tscn b/godot/scenes/vehicles/Gunbrig.tscn
index 70a30ad..250eb69 100644
--- a/godot/scenes/vehicles/Gunbrig.tscn
+++ b/godot/scenes/vehicles/Gunbrig.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=25 format=2]
+[gd_scene load_steps=29 format=2]
[ext_resource path="res://scripts/vehicles/Gunboat.gd" type="Script" id=1]
[ext_resource path="res://scenes/machines/Cannon.tscn" type="PackedScene" id=2]
@@ -12,8 +12,10 @@
[ext_resource path="res://scenes/environment/Cable.tscn" type="PackedScene" id=10]
[ext_resource path="res://meshes/ship_components/rudder.tres" type="ArrayMesh" id=11]
[ext_resource path="res://scenes/vehicles/ship_parts/SquareSail.tscn" type="PackedScene" id=12]
+[ext_resource path="res://scenes/environment/BallBarrel.tscn" type="PackedScene" id=13]
[sub_resource type="PhysicsMaterial" id=28]
+resource_local_to_scene = true
rough = true
[sub_resource type="BoxShape" id=5]
@@ -22,6 +24,9 @@ extents = Vector3( 0.2, 0.2, 0.2 )
[sub_resource type="CubeMesh" id=6]
size = Vector3( 0.4, 0.4, 0.4 )
+[sub_resource type="PhysicsMaterial" id=50]
+resource_local_to_scene = true
+
[sub_resource type="BoxShape" id=7]
extents = Vector3( 0.1, 0.1, 0.1 )
@@ -45,17 +50,23 @@ extents = Vector3( 1.20173, 0.287114, 1.17431 )
extents = Vector3( 0.294164, 0.287114, 7.50894 )
[sub_resource type="NavigationMesh" id=26]
-vertices = PoolVector3Array( -11.5351, 2.7234, -0.635424, -10.5351, 2.7234, -1.13542, -10.5351, 2.7234, -3.13542, -13.5351, 2.7234, -3.13542, -13.5351, 2.7234, 2.86458, -10.5351, 2.7234, 2.86458, -11.5351, 2.7234, -0.635424, -13.5351, 2.7234, -3.13542, 9.46486, 1.9734, 2.86458, 10.9649, 1.7234, 2.86458, 13.4649, 1.9734, 0.864576, 12.4649, 1.9734, -1.63542, 9.46486, 1.9734, -3.13542, -4.03514, 0.473404, 2.36458, -3.53514, 0.473404, 1.36458, -4.53514, 0.473404, 0.864576, -9.53514, 0.473404, 2.36458, -4.53514, 0.473404, -0.635424, -3.03514, 0.473404, -1.13542, -3.03514, 0.473404, -2.63542, -9.53514, 0.473404, -2.13542, -4.53514, 0.473404, 0.864576, -4.53514, 0.473404, -0.635424, -9.53514, 0.473404, -2.13542, -9.53514, 0.473404, 2.36458, -2.03514, 0.473404, 0.364576, -3.53514, 0.473404, 1.36458, -4.03514, 0.473404, 2.36458, 1.46486, 0.473404, 2.86458, -3.03514, 0.473404, -2.63542, -3.03514, 0.473404, -1.13542, -2.03514, 0.473404, 0.364576, 1.46486, 0.473404, 2.86458, 7.96486, 0.473404, 2.86458, 7.96486, 0.473404, -2.63542 )
-polygons = [ PoolIntArray( 1, 0, 2 ), PoolIntArray( 2, 0, 3 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 9, 8, 10 ), PoolIntArray( 10, 8, 11 ), PoolIntArray( 11, 8, 12 ), PoolIntArray( 14, 13, 15 ), PoolIntArray( 15, 13, 16 ), PoolIntArray( 18, 17, 19 ), PoolIntArray( 19, 17, 20 ), PoolIntArray( 21, 24, 22 ), PoolIntArray( 22, 24, 23 ), PoolIntArray( 26, 25, 27 ), PoolIntArray( 27, 25, 28 ), PoolIntArray( 30, 29, 31 ), PoolIntArray( 31, 29, 32 ), PoolIntArray( 32, 29, 33 ), PoolIntArray( 33, 29, 34 ) ]
+vertices = PoolVector3Array( -11.5351, 2.7234, -0.635424, -10.5351, 2.7234, -1.13542, -10.5351, 2.7234, -3.13542, -13.5351, 2.7234, -3.13542, -13.5351, 2.7234, 2.86458, -10.5351, 2.7234, 2.86458, -11.5351, 2.7234, -0.635424, -13.5351, 2.7234, -3.13542, 9.46486, 1.9734, 2.86458, 10.9649, 1.7234, 2.86458, 13.4649, 1.9734, 0.864576, 12.4649, 1.9734, -1.63542, 9.46486, 1.9734, -3.13542, -4.03514, 0.473404, 2.36458, -3.53514, 0.473404, 1.36458, -4.53514, 0.473404, 0.864576, -9.53514, 0.473404, 2.36458, -4.53514, 0.473404, -0.635424, -2.53514, 0.473404, -1.13542, -2.53514, 0.473404, -2.63542, -9.53514, 0.473404, -2.13542, -4.53514, 0.473404, 0.864576, -4.53514, 0.473404, -0.635424, -9.53514, 0.473404, -2.13542, -9.53514, 0.473404, 2.36458, -2.53514, 0.473404, -2.63542, -2.53514, 0.473404, -1.13542, -1.03514, 0.473404, -0.635424, 7.96486, 0.473404, -2.63542, -1.03514, 0.473404, 0.864576, -3.53514, 0.473404, 1.36458, -4.03514, 0.473404, 2.36458, 1.46486, 0.473404, 2.86458, -1.03514, 0.473404, -0.635424, -1.03514, 0.473404, 0.864576, 1.46486, 0.473404, 2.86458, 7.96486, 0.473404, 2.86458, 7.96486, 0.473404, -2.63542 )
+polygons = [ PoolIntArray( 1, 0, 2 ), PoolIntArray( 2, 0, 3 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 9, 8, 10 ), PoolIntArray( 10, 8, 11 ), PoolIntArray( 11, 8, 12 ), PoolIntArray( 14, 13, 15 ), PoolIntArray( 15, 13, 16 ), PoolIntArray( 18, 17, 19 ), PoolIntArray( 19, 17, 20 ), PoolIntArray( 21, 24, 22 ), PoolIntArray( 22, 24, 23 ), PoolIntArray( 26, 25, 27 ), PoolIntArray( 27, 25, 28 ), PoolIntArray( 30, 29, 31 ), PoolIntArray( 31, 29, 32 ), PoolIntArray( 34, 33, 35 ), PoolIntArray( 35, 33, 36 ), PoolIntArray( 36, 33, 37 ) ]
cell_size = 0.5
agent_height = 1.8
agent_radius = 0.18
agent_max_slope = 46.0
region_min_size = 3.0
+[sub_resource type="CubeMesh" id=51]
+size = Vector3( 2, 2, 1.1 )
+
[sub_resource type="BoxShape" id=36]
extents = Vector3( 10.0294, 0.598376, 0.166381 )
+[sub_resource type="PhysicsMaterial" id=49]
+resource_local_to_scene = true
+
[node name="Gunbrig" type="RigidBody"]
mass = 238000.0
physics_material_override = SubResource( 28 )
@@ -77,39 +88,63 @@ mesh = SubResource( 6 )
[node name="Cannon" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 6.33448, 0.107111, 3.3196 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon2" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 3.36645, 0.107111, 3.3196 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon3" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 0.322236, 0.107111, 3.3196 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon4" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, -2.66973, 0.107111, 3.21655 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon5" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, -5.62184, 0.107111, 3.19748 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon6" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, -8.72409, 0.107111, 2.8206 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon7" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( -0.0811907, 0, 0.996699, 0, 1, 0, -0.996699, 0, -0.0811907, -8.6751, 0.107111, -2.89481 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon8" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, -5.70608, 0.107111, -3.29825 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon9" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, -2.67884, 0.107111, -3.31267 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon10" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, 0.421378, 0.107111, -3.35383 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon11" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( 0.0172777, 0, 0.999851, 0, 1, 0, -0.999851, 0, 0.0172777, 3.36481, 0.107111, -3.38258 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="Cannon12" parent="ARTILLERY" instance=ExtResource( 2 )]
transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, 6.37315, 0.107111, -3.35613 )
+mode = 3
+physics_material_override = SubResource( 50 )
[node name="FloatPoints" type="Spatial" parent="."]
@@ -285,7 +320,7 @@ transform = Transform( 0.949512, -0.0304534, 0, 0.0304534, 0.949512, 0, 0, 0, 0.
transform = Transform( 0.797373, -0.0647854, 0, 0.0647854, 0.797373, 0, 0, 0, 0.8, -3.33794, 24.7801, 0 )
[node name="CollisionShape" type="CollisionShape" parent="."]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.3912, 5.52662, 0.0706616 )
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.29681, 5.52662, 0.0706616 )
shape = SubResource( 33 )
[node name="CollisionShape2" type="CollisionShape" parent="."]
@@ -298,7 +333,6 @@ shape = SubResource( 35 )
[node name="NavigationMeshInstance" type="NavigationMeshInstance" parent="."]
navmesh = SubResource( 26 )
-enabled = false
[node name="Hull" type="MeshInstance" parent="NavigationMeshInstance"]
visible = false
@@ -350,6 +384,11 @@ transform = Transform( 0.926234, 1.7263e-09, 0.0323448, 0.0323448, -1.10483e-07,
visible = false
mesh = ExtResource( 7 )
+[node name="MeshInstance" type="MeshInstance" parent="NavigationMeshInstance"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2.60567, 0.683043, 0 )
+visible = false
+mesh = SubResource( 51 )
+
[node name="GunwhaleR" type="CollisionShape" parent="."]
transform = Transform( 0.999486, 0, -0.0320562, 0, 1, 0, 0.0320562, 0, 0.999486, -0.646409, 0.658986, 3.50438 )
shape = SubResource( 36 )
@@ -358,4 +397,10 @@ shape = SubResource( 36 )
transform = Transform( 0.999486, 0, 0.0320562, 0, 1, 0, -0.0320562, 0, 0.999486, -0.646409, 0.658986, -3.46571 )
shape = SubResource( 36 )
+[node name="BallBarrel" parent="." instance=ExtResource( 13 )]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.93881, 0.836955, 0.05643 )
+mode = 1
+mass = 0.01
+physics_material_override = SubResource( 49 )
+
[connection signal="navigation_mesh_changed" from="NavigationMeshInstance" to="NavigationMeshInstance" method="mesh_changed"]
diff --git a/godot/scenes/worldprops/ball_bucket.tscn b/godot/scenes/worldprops/ball_bucket.tscn
index d85a2fc..25a454e 100644
--- a/godot/scenes/worldprops/ball_bucket.tscn
+++ b/godot/scenes/worldprops/ball_bucket.tscn
@@ -11,6 +11,7 @@ albedo_color = Color( 0.266667, 0.168627, 0.0235294, 1 )
metallic_specular = 0.0
[node name="ball_bucket" type="StaticBody"]
+collision_layer = 0
[node name="CollisionShape" type="CollisionShape" parent="."]
shape = SubResource( 1 )
diff --git a/godot/scripts/CharacterAIManager.gd b/godot/scripts/CharacterAIManager.gd
index fb86a48..61d38ae 100644
--- a/godot/scripts/CharacterAIManager.gd
+++ b/godot/scripts/CharacterAIManager.gd
@@ -4,7 +4,7 @@ var calcs_per_tick: int = 15
var request_queue: Array = [] #array of dictionaries
var cur_req: Dictionary
var cur_req_args: Dictionary
-var WORLD_MAP_RID
+var WORLD_MAP_RID: RID
enum Task {PATHFIND, FINDITEM}
@@ -13,6 +13,9 @@ enum Task {PATHFIND, FINDITEM}
func _ready():
pass # Replace with function body.
+func set_rid(id: RID) -> void:
+ WORLD_MAP_RID = id
+
func _physics_process(_delta):
for i in calcs_per_tick:
if len(request_queue) == 0:
@@ -22,7 +25,20 @@ func _physics_process(_delta):
if cur_req["type"] == Task.PATHFIND:
var dest_vec: Vector3 = cur_req_args["dest"] if cur_req_args["obj"] == null else cur_req_args["obj"].global_transform.origin
var path: PoolVector3Array = NavigationServer.map_get_path(WORLD_MAP_RID, cur_req["char"].global_transform.origin, dest_vec, cur_req_args["optimize"])
+ cur_req["char"].ai_set_path_array(path)
+ elif cur_req["type"] == Task.FINDITEM:
+ var bodies = cur_req["char"].get_node("AISearchArea").get_overlapping_bodies()
+ for body in bodies:
+ if body.name.begins_with(cur_req_args["objtype"]):
+ var path: PoolVector3Array = NavigationServer.map_get_path(WORLD_MAP_RID, cur_req["char"].global_transform.origin, body.global_transform.origin, cur_req_args["optimize"])
+ cur_req["char"].ai_set_path_target(body.global_transform.origin)
+ #cur_req["char"].ai_set_path_array(path)
+ cur_req["char"].ai_set_look_status(body, "TRACK")
+ return
#will request a path from character to dest_g, or to the global origin of obj if passed
func request_find_path(character: NetChar, dest_g: Vector3, precise: bool, obj: Spatial = null) -> void:
request_queue.append({"char" : character, "type" : Task.PATHFIND, "args" : {"dest" : dest_g, "obj" : obj, "optimize" : !precise}})
+
+func request_find_object(character: NetChar, object: String, radius: float, precise: bool):
+ request_queue.append({"char" : character, "type" : Task.FINDITEM, "args" : {"objtype" : object, "radius" : radius, "optimize" : !precise}})
diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd
index 9f24d7b..abc269f 100644
--- a/godot/scripts/GameBase.gd
+++ b/godot/scripts/GameBase.gd
@@ -9,6 +9,7 @@ var player_name : String
var player_team : String
var player_char = null
onready var cam = $PLAYERCAM
+onready var hud = $HUD
var players_info = {} #dictionary of id : name, team, ping, etc.
@@ -77,7 +78,7 @@ remotesync func game_hitsound():
remotesync func game_killsound():
$HUD.ui_play_killsound()
-func select_character(dest):
+func request_select_character(dest):
if player_char == null:
rpc_id(1, "_call_on_server", "_client_request_change_character", {"id" : client_id, "current_char_name" : "NULL", "char_name" : dest})
else:
diff --git a/godot/scripts/Server.gd b/godot/scripts/Server.gd
index b4b0a28..e360703 100644
--- a/godot/scripts/Server.gd
+++ b/godot/scripts/Server.gd
@@ -30,7 +30,15 @@ func start_server(_server_name: String, _motd: String, max_players: int, map_pat
server_name = _server_name
motd = _motd
player_limit = max_players
-
+
+ server_enet = NetworkedMultiplayerENet.new()
+ var srv_stat = server_enet.create_server(port, max_players)
+ if srv_stat != OK:
+ print_line("Error creating server. Code: "+str(srv_stat))
+ stop_server()
+ return
+ tree.set_network_peer(server_enet)
+
world = load(map_path)
if world:
world = world.instance()
@@ -43,14 +51,6 @@ func start_server(_server_name: String, _motd: String, max_players: int, map_pat
world.client_id = 1
- server_enet = NetworkedMultiplayerENet.new()
- var srv_stat = server_enet.create_server(port, max_players)
- if srv_stat != OK:
- print_line("Error creating server. Code: "+str(srv_stat))
- stop_server()
- return
- tree.set_network_peer(server_enet)
-
print_line("Server started successfully.")
func stop_server():
@@ -125,3 +125,11 @@ func _send_chat(arguments):
arguments["name"]=connected_players[arguments["id"]][0]
print_line(arguments["name"]+ ": " + arguments["msg"])
world.rpc("game_chat_msg", arguments["name"]+ ": " + arguments["msg"])
+
+func _set_ai_state(args):
+ var charname: String = args[0]
+ var state: String = args[1]
+ print(args)
+ var man: NetChar = world.get_node("PLAYERS/"+charname)
+ if man:
+ man.ai_set_state(state)
diff --git a/godot/scripts/World.gd b/godot/scripts/World.gd
index 01df1b5..90b3cf7 100644
--- a/godot/scripts/World.gd
+++ b/godot/scripts/World.gd
@@ -7,7 +7,7 @@ onready var pathfinder = get_node("PLAYERS/Player2")
var path = []
var map_rids
var client_id
-var player_char
+var player_char: NetChar
var players_info = {}
var WORLD_MAP_RID : RID
@@ -23,12 +23,13 @@ func _ready():
#merge all nav meshes onto the main map
yield(get_tree().create_timer(1.0), "timeout")
WORLD_MAP_RID = get_world().get_navigation_map()
- find_path()
+ CharacterAIManager.set_rid(WORLD_MAP_RID)
+ #find_path()
remotesync func update_players_info(info):
players_info = info
-remote func _call_on_server(function, arguments):
+remotesync func _call_on_server(function, arguments):
print('Remote server call: ' + function)
$Server.call(function, arguments)
diff --git a/godot/scripts/ballistics/Cannonball.gd b/godot/scripts/ballistics/Cannonball.gd
index b41f104..5e6b84d 100644
--- a/godot/scripts/ballistics/Cannonball.gd
+++ b/godot/scripts/ballistics/Cannonball.gd
@@ -3,9 +3,12 @@ extends "res://scripts/ballistics/NetworkedProjectile.gd"
export var drag_constant: float = 0.3
var damage_exceptions = []
var oldvel: Vector3
+var oldoldvel: Vector3
+const inventory_name: String = "cannonball"
func _physics_process(_delta):
if is_network_master():
+ oldoldvel = oldvel
oldvel = linear_velocity
add_force(-1*linear_velocity*drag_constant, Vector3.ZERO)
if global_transform.origin.y < -20:
@@ -15,10 +18,6 @@ func get_init_info():
return {"linear_velocity" : linear_velocity, "angular_velocity" : angular_velocity, "oldvel" : oldvel, "shooter" : shooter, "shooter_id" : shooter_id}
func _on_collision(body):
- if is_network_master() and body.has_method("load_cannonball") and !body.loaded:
- body.rpc("load_cannonball")
- rpc("net_remove")
- return
- if is_network_master() and oldvel.length() > 20 and !damage_exceptions.has(body) and body.has_method("damage"):
- body.rpc("damage", oldvel.length(), "BLUNT", [shooter_id, shooter], "using 'cannon'")
+ if is_network_master() and oldoldvel.length() > 20 and !damage_exceptions.has(body) and body.has_method("damage"):
+ body.rpc("damage", oldoldvel.length(), "BLUNT", [shooter_id, shooter], "using 'cannon'")
damage_exceptions.append(body)
diff --git a/godot/scripts/characters/Idle.gd b/godot/scripts/characters/Idle.gd
new file mode 100644
index 0000000..4be00e4
--- /dev/null
+++ b/godot/scripts/characters/Idle.gd
@@ -0,0 +1,2 @@
+extends State
+
diff --git a/godot/scripts/characters/ManCannon.gd b/godot/scripts/characters/ManCannon.gd
new file mode 100644
index 0000000..b4d111c
--- /dev/null
+++ b/godot/scripts/characters/ManCannon.gd
@@ -0,0 +1,107 @@
+extends State
+
+enum ManCannonStates { INITIAL, OPERATE_CANNON, MOVE_TO_CANNON, FIND_CANNONBALL }
+var ai_substate: int
+var path_requested: bool = false
+var retry_timer: float = 0.0
+var searching_for: String
+
+var cannon: NetMachine
+
+# Corresponds to the `_process()` callback.
+func update(delta: float) -> void:
+ retry_timer -= delta
+
+# Virtual function. Corresponds to the `_physics_process()` callback.
+func physics_update(_delta: float) -> void:
+ match ai_substate:
+ ManCannonStates.INITIAL:
+ _state_initial()
+ ManCannonStates.MOVE_TO_CANNON:
+ _state_move_to_cannon()
+ ManCannonStates.FIND_CANNONBALL:
+ _state_find_cannonball()
+ ManCannonStates.OPERATE_CANNON:
+ _state_operate_cannon()
+
+func _state_initial() -> void:
+ if cannon.loaded:
+ change_substate(ManCannonStates.MOVE_TO_CANNON)
+ else:
+ change_substate(ManCannonStates.FIND_CANNONBALL)
+
+func _state_move_to_cannon() -> void:
+ if !path_requested:
+ #CharacterAIManager.request_find_path(owner, Vector3.ZERO, true, cannon.get_node("AINavPoint"))
+ owner.ai_set_path_target(cannon.get_node("AINavPoint").global_transform.origin)
+ owner.ai_set_look_status(cannon.steer_area, "TRACK")
+ path_requested = true
+ if (owner.global_transform.origin - cannon.get_node("AINavPoint").global_transform.origin).length_squared() > 4:
+ owner.ai_set_path_target(cannon.get_node("AINavPoint").global_transform.origin)
+ if retry_timer <= 0 and owner.use_ray.is_colliding():
+ if owner.use_ray.get_collider() == cannon.steer_area:
+ owner.use_held = false
+ owner.initiate_use()
+ if !cannon.loaded:
+ owner.use_held = true
+ retry_timer = 3.1
+
+ if owner.machine == cannon:
+ owner.ai_set_look_status(null, "NONE")
+ retry_timer = 1.0
+ change_substate(ManCannonStates.OPERATE_CANNON)
+
+func _state_find_cannonball() -> void:
+ #CHECK FOR BALL BOX FIRST! /setaistate Player ManCannon
+ if !path_requested:
+ CharacterAIManager.request_find_object(owner, "BallBarrel", 50, true)
+ searching_for = "BallBarrel"
+ path_requested = true
+ #if !path_requested:
+ # CharacterAIManager.request_find_object(owner, "Cannonball", 50, false)
+ # searching_for = "Cannonball"
+ # path_requested = true
+ if owner.use_ray.is_colliding():
+ if owner.use_ray.get_collider().name.begins_with("UseArea") and owner.use_ray.get_collider().get_parent().name.begins_with(searching_for):
+ owner.initiate_use()
+
+ #cannonball found
+ if owner.inventory["cannonball"] > 0:
+ change_substate(ManCannonStates.MOVE_TO_CANNON)
+
+func _state_operate_cannon() -> void:
+ if owner.machine != cannon: #if control lost
+ if is_instance_valid(cannon):
+ change_substate(ManCannonStates.MOVE_TO_CANNON)
+ else:
+ state_machine.transition_to("Idle")
+ return
+ if retry_timer <= 0.0:
+ cannon.attack1()
+ owner.initiate_use()
+ change_substate(ManCannonStates.FIND_CANNONBALL)
+
+func change_substate(to: int):
+ path_requested = false
+ ai_substate = to
+
+func enter(msg := {}) -> void:
+ retry_timer = 0
+ ai_substate = ManCannonStates.INITIAL
+ if "cannon" in msg.keys():
+ cannon = msg["cannon"]
+ else:
+ if owner.ai_target_machine != null:
+ cannon = owner.ai_target_machine
+ return
+ var bodies = owner.get_node("AISearchArea").get_overlapping_bodies()
+ for body in bodies:
+ if body.name.begins_with("Cannon"):
+ cannon = body
+ return
+ #if cannon not found
+ print("cannon not found")
+ state_machine.transition_to("Idle")
+
+func exit() -> void:
+ pass
diff --git a/godot/scripts/characters/NetworkedCharacter.gd b/godot/scripts/characters/NetworkedCharacter.gd
index c8e90a4..c14d46f 100644
--- a/godot/scripts/characters/NetworkedCharacter.gd
+++ b/godot/scripts/characters/NetworkedCharacter.gd
@@ -15,14 +15,21 @@ var world: Spatial = null
var carrying: bool = false
var carrying_object: NetObject = null
+var loading: bool = false
+var load_target: RigidBody = null
+var load_ammo: String
+
# Control
var controlling_machine: bool = false #whether character is riding/controlling something
var machine: RigidBody = null
-export var is_player: bool = false #whether character is currently controlled by a player
+var is_player: bool = false #whether character is currently controlled by a player
var ladder_m: Spatial = null
+const inventory_caps: Dictionary = {"cannonball" : 1}
+remote var inventory: Dictionary = {"cannonball" : 0} #
+
func get_init_info() -> Dictionary:
- return {"linear_velocity" : linear_velocity, "angular_velocity" : angular_velocity, "controlling_machine" : controlling_machine, "team" : team, "health" : health, "nametag" : $Nametag.text}
+ return {"linear_velocity" : linear_velocity, "angular_velocity" : angular_velocity, "controlling_machine" : controlling_machine, "team" : team, "health" : health, "inventory": inventory, "nametag" : $Nametag.text}
func mp_init(init_info: Dictionary):
for variable in init_info.keys():
@@ -60,11 +67,12 @@ func take_control_of_machine(slave_machine: RigidBody):
controlling_machine = true
func lose_machine():
- if is_network_master(): world.cam.attach(self, "FIRSTPERSON", "./Neck/Head")
+ if is_network_master() and get_network_master() != 1: world.cam.attach(self, "FIRSTPERSON", "./Neck/Head")
controlling_machine = false
machine = null
remotesync func damage(dmg_amt: int, _type: String, shooter: Array, extra: String):
+ print(dmg_amt)
health -= dmg_amt
if health <= 0 and is_network_master():
if shooter[0] != get_network_master() and shooter[0] != 1: world.rpc_id(shooter[0], "game_killsound")
diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd
index 6e2a28b..b2af75c 100644
--- a/godot/scripts/characters/player_controller_new.gd
+++ b/godot/scripts/characters/player_controller_new.gd
@@ -7,6 +7,7 @@ var mouse_axis: Vector2 = Vector2.ZERO
onready var head: Spatial = $Neck/Head
onready var neck: Spatial = $Neck
onready var melee_ray: RayCast = $"%MeleeRay"
+onready var use_ray: RayCast = $"%UseRay"
onready var gun_ray: RayCast = $Neck/Head/GunRay
onready var carry_point: Position3D = $Neck/Head/CarryPoint
onready var viewmodel: Spatial = $Neck/Head/VIEWMODEL_ARMS
@@ -17,6 +18,7 @@ var direction := Vector3()
var move_axis := Vector2()
var floorspeed := Vector3()
var jumping:bool = false
+var use_held:bool = false
var can_jump:bool = true
onready var nav: NavigationAgent = $NavigationAgent
@@ -37,10 +39,17 @@ var c_friction:float = 4.0
var air_control:float = 0.3
#ai
-var ai_state: String = "IDLE"
+onready var ai_state_machine:StateMachine = get_node("AIStateMachine")
+enum AIStates { IDLE, MAN_CANNON }
+export(AIStates) var ai_state = AIStates.IDLE
+
+export var ai_target_machine_path := NodePath()
+var ai_target_machine: NetMachine = null
var ai_should_pathfind: bool = false
var ai_path_target_global: Vector3 = Vector3.ZERO
+var ai_path_array: Array = []
+const AI_PATH_PROXIM_DIST_SQ: float = 1.0
var ai_look_target: Vector3 = Vector3.ZERO
var ai_should_look: bool = false
@@ -63,6 +72,15 @@ func _ready() -> void:
$"%MeleeRay".add_exception(self)
$"%UseRay".add_exception($AreaDetect)
$"%MeleeRay".add_exception($AreaDetect)
+
+ if ai_target_machine_path:
+ ai_target_machine = get_node(ai_target_machine_path)
+ if get_tree().get_network_unique_id() != 1: #only server needs ai processing
+ get_node("AIStateMachine").queue_free()
+
+ #for playerbody in get_tree().get_nodes_in_group("player"):
+ # if playerbody.team == team and playerbody != self:
+ # add_collision_exception_with(playerbody)
func add_weapon_vm(weapon_vm: Spatial, trfrm: Transform):
viewmodel.get_node("Skeleton/GunBone").add_child(weapon_vm)
@@ -70,10 +88,12 @@ func add_weapon_vm(weapon_vm: Spatial, trfrm: Transform):
# Called every frame. 'delta' is the elapsed time since the previous frame
func _process(_delta: float) -> void:
- if is_player and !world.is_chatting:
+ if is_network_master() and !is_player:
+ pass
+ elif is_player and !world.is_chatting:
+ use_held = Input.is_action_pressed("use")
if Input.is_action_just_pressed("use"):
initiate_use()
-
if controlling_machine:
if Input.is_action_just_pressed("fire"):
machine.attack1()
@@ -121,26 +141,57 @@ func initiate_use():
carrying_object.rpc("set_nm",1)
carrying_object = null
return
- if $"%UseRay".is_colliding():
- var area_c = $"%UseRay".get_collider()
- match area_c.name:
- "SteerArea": #must be a networkedmachine
- if area_c.get_parent().controllable: world.rpc_id(1, "_call_on_server", "_client_request_control_vehicle", {"id" : world.client_id, "machine_path" : area_c.get_parent().get_path(), "char_name" : name})
- "LadderArea":
- mount_ladder(area_c.get_parent())
- "TugArea":
- pass
- "CarryArea":
- if weapon.name == "HANDS" and weapon.can_pickup():
- carrying = true
- carrying_object = area_c.get_parent()
- carrying_object.rpc("set_nm",get_network_master())
- carry_point.global_transform.origin = carrying_object.global_transform.origin
- _:
- pass
+
+ #interact with world
+ if !use_ray.is_colliding(): return
+ var area_c = use_ray.get_collider()
+ match area_c.name:
+ "SteerArea": #must be a networkedmachine
+ if area_c.get_parent().controllable: world.rpc_id(1, "_call_on_server", "_client_request_control_vehicle", {"id" : world.client_id, "machine_path" : area_c.get_parent().get_path(), "char_name" : name})
+ elif !area_c.get_parent().loaded and inventory[area_c.get_parent().ammo_type] > 0:
+ loading = true
+ load_target = area_c.get_parent()
+ load_ammo = area_c.get_parent().ammo_type
+ "LadderArea":
+ mount_ladder(area_c.get_parent())
+ "TugArea":
+ pass
+ "UseArea": #must have method use_generic
+ area_c.get_parent().use_generic(self)
+ "PickupArea": #must be a networkedprojectile. must have inventory_name property
+ var type: String = area_c.get_parent().inventory_name
+ if inventory[type] < inventory_caps[type]:
+ area_c.get_parent().rpc("net_remove")
+ inventory[type] += 1
+ rset("inventory", inventory)
+ "CarryArea":
+ if weapon.name == "HANDS" and weapon.can_pickup():
+ carrying = true
+ carrying_object = area_c.get_parent()
+ carrying_object.rpc("set_nm",get_network_master())
+ carry_point.global_transform.origin = carrying_object.global_transform.origin
+ _:
+ pass
+
+func load_process(delta) -> void:
+ if use_ray.is_colliding() and use_ray.get_collider().get_parent() == load_target and use_held:
+ var progress: float =load_target.increase_load(delta)
+ if progress < 0:
+ if get_network_master() != 1: world.hud.hide_progress()
+ load_target.reset_load()
+ loading = false
+ load_target = null
+ inventory[load_ammo] -= 1
+ else:
+ if get_network_master() != 1: world.hud.set_progress(progress)
+ else:
+ if get_network_master() != 1: world.hud.hide_progress()
+ load_target.reset_load()
+ loading = false
+ load_target = null
func carry_process() -> void:
- if !is_instance_valid(carrying_object):
+ if !is_instance_valid(carrying_object) or carrying_object.get_network_master() != get_network_master():
carrying_object = null
carrying = false
return
@@ -157,6 +208,8 @@ func carry_process() -> void:
# Called every physics tick. 'delta' is constant
func _physics_process(delta: float) -> void:
if is_network_master():
+ if loading: load_process(delta)
+ move_dir_process()
if !is_player: #ai behavior
if ai_should_look: ai_look_at()
if carrying:
@@ -168,6 +221,21 @@ func _physics_process(delta: float) -> void:
else:
walk(delta)
is_on_floor = false #reset whether is on floor in between frames
+
+
+func move_dir_process():
+ direction = Vector3()
+ if is_player:
+ var aim: Basis = head.get_global_transform().basis
+ direction += -move_axis.x * aim.z + move_axis.y * aim.x
+ direction.y = 0
+ direction = direction.normalized()
+ else:
+ if ai_should_pathfind:
+ if !ai_path_process(): return
+ direction = ai_path_target_global - global_transform.origin
+ direction.y = 0
+ direction = direction.normalized()
# called each physics frame
func on_floor_test() -> bool:
@@ -198,19 +266,14 @@ func _integrate_forces(state: PhysicsDirectBodyState) -> void:
break
if i == player_state.get_contact_count() - 1:
friction = 1
- nav.set_velocity(velocity)
+
rpc("set_phys_transform", transform, linear_velocity)
if global_transform.origin.y < -30:
rpc("damage", 500000, "drown", [1, "Davy Jones"], "")
+
+ nav.set_velocity(velocity)
func walk(_delta: float) -> void:
- # Input
- direction = Vector3()
- var aim: Basis = head.get_global_transform().basis
- direction += -move_axis.x * aim.z + move_axis.y * aim.x
- direction.y = 0
- direction = direction.normalized()
-
if floor_normal != Vector3.UP: direction = direction.rotated(floor_normal.cross(Vector3.UP).normalized(), Vector3.UP.angle_to(floor_normal))
# Jump
@@ -306,13 +369,17 @@ remotesync func play_weapon_sound(filepath) -> void:
remotesync func add_rocket_to_scene(pos, dir, id):
var rocket = preload("res://scenes/ballistics/Rocket.tscn").instance()
world.get_node("BALLISTICS").add_child(rocket, true)
- rocket.shooter = name + " (" + world.players_info[get_network_master()][0] + ")"
+ rocket.shooter = name
+ if get_network_master() != 1: rocket.shooter+= " (" + world.players_info[get_network_master()][0] + ")"
rocket.shooter_id = id
rocket.global_transform.origin = pos
rocket.global_transform.basis = Basis(-1*dir.z, dir.y, dir.x)
rocket.add_collision_exception_with(self)
-func set_look_status(target, type="STATIC"):
+func ai_set_state(state: String):
+ ai_state_machine.transition_to(state)
+
+func ai_set_look_status(target, type:String="STATIC"):
if type == "STATIC":
ai_look_target = target
ai_should_look = true
@@ -321,11 +388,9 @@ func set_look_status(target, type="STATIC"):
ai_should_look = true
ai_should_track = true
else:
+ ai_should_look = false
ai_should_track = false
-func set_path_target(target):
- ai_path_target_global = target
-
func ai_look_at():
if ai_should_track:
if is_instance_valid(ai_track_object):
@@ -335,10 +400,33 @@ func ai_look_at():
ai_should_track = false
var p_neck: float = Vector3(ai_look_target.x - neck.global_transform.origin.x, 0, ai_look_target.z - neck.global_transform.origin.z).signed_angle_to(-neck.global_transform.basis.z, neck.global_transform.basis.y )
var p_head: float = Vector3(ai_look_target.x - neck.global_transform.origin.x, ai_look_target.y - head.global_transform.origin.y, ai_look_target.z - neck.global_transform.origin.z).signed_angle_to( -head.global_transform.basis.z, head.global_transform.basis.x)
- if abs(p_neck) > 0.01:
- neck.rotation_degrees.y = lerp(neck.rotation_degrees.y, neck.rotation_degrees.y-p_neck, AI_LOOK_SPEED+abs(p_neck/3.1415))
- if abs(p_head) > 0.01:
- head.rotation_degrees.x = lerp(head.rotation_degrees.x, head.rotation_degrees.x-p_head, AI_LOOK_SPEED+abs(p_head/3.1415))
+ neck.rotation_degrees.y = lerp(neck.rotation_degrees.y, neck.rotation_degrees.y-p_neck, AI_LOOK_SPEED+abs(p_neck/3.1415))
+ head.rotation_degrees.x = lerp(head.rotation_degrees.x, head.rotation_degrees.x-p_head, AI_LOOK_SPEED+abs(p_head/3.1415))
if abs(p_neck) <= 0.01 and abs(p_head) <= 0.01 and !ai_should_track:
ai_should_look = false
+
+func ai_set_path_target(target: Vector3):
+ ai_should_pathfind = true
+ nav.set_target_location(target)
+ #CharacterAIManager.request_find_path(self, target, true)
+
+func ai_set_path_array(arr: PoolVector3Array):
+ world.draw_path(arr)
+ ai_should_pathfind = true
+ ai_path_array = arr
+ ai_path_target_global = ai_path_array[0]
+
+func ai_path_process() -> bool:
+# if (global_transform.origin - ai_path_array[0]).length_squared() < AI_PATH_PROXIM_DIST_SQ:
+# ai_path_array.remove(0)
+# if len(ai_path_array) == 0: #destination reached
+# ai_should_pathfind = false
+# return false
+# else: ai_path_target_global = ai_path_array[0]
+# return true
+ if nav.is_navigation_finished():
+ ai_should_pathfind = false
+ return false
+ ai_path_target_global = nav.get_next_location()
+ return true
diff --git a/godot/scripts/fsm/State.gd b/godot/scripts/fsm/State.gd
new file mode 100644
index 0000000..be7ba2d
--- /dev/null
+++ b/godot/scripts/fsm/State.gd
@@ -0,0 +1,22 @@
+class_name State
+extends Node
+
+var state_machine = null
+
+# Corresponds to the `_process()` callback.
+func update(_delta: float) -> void:
+ pass
+
+# Virtual function. Corresponds to the `_physics_process()` callback.
+func physics_update(_delta: float) -> void:
+ pass
+
+# Virtual function. Called by the state machine upon changing the active state. The `msg` parameter
+# is a dictionary with arbitrary data the state can use to initialize itself.
+func enter(_msg := {}) -> void:
+ pass
+
+# Virtual function. Called by the state machine before changing the active state. Use this function
+# to clean up the state.
+func exit() -> void:
+ pass
diff --git a/godot/scripts/fsm/StateMachine.gd b/godot/scripts/fsm/StateMachine.gd
new file mode 100644
index 0000000..834f036
--- /dev/null
+++ b/godot/scripts/fsm/StateMachine.gd
@@ -0,0 +1,35 @@
+class_name StateMachine
+extends Node
+
+# Emitted when transitioning to a new state.
+signal transitioned(state_name)
+
+# Path to the initial active state. We export it to be able to pick the initial state in the inspector.
+export var initial_state := NodePath()
+
+# The current active state. At the start of the game, we get the `initial_state`.
+onready var state: State = get_node(initial_state)
+
+
+func _ready() -> void:
+ yield(owner, "ready")
+ # The state machine assigns itself to the State objects' state_machine property.
+ for child in get_children():
+ child.state_machine = self
+ state.enter()
+
+func _process(delta: float) -> void:
+ state.update(delta)
+
+func _physics_process(delta: float) -> void:
+ state.physics_update(delta)
+
+func transition_to(target_state_name: String, msg: Dictionary = {}) -> void:
+ if not has_node(target_state_name):
+ print("no state")
+ return
+
+ state.exit()
+ state = get_node(target_state_name)
+ state.enter(msg)
+ emit_signal("transitioned", state.name)
diff --git a/godot/scripts/machines/Cannon.gd b/godot/scripts/machines/Cannon.gd
index 6c0b350..b66903a 100644
--- a/godot/scripts/machines/Cannon.gd
+++ b/godot/scripts/machines/Cannon.gd
@@ -21,6 +21,22 @@ export var max_yaw = 15
onready var muzzle: Spatial = get_node("YawJoint/PitchJoint/Muzzle")
onready var status: Label3D = get_node("StatusNotifier")
+onready var steer_area: Area = get_node("SteerArea")
+
+const ammo_type = "cannonball"
+
+var load_time: float = 3.0
+var load_progress: float = 0.0
+
+func increase_load(delta) -> float:
+ if loaded: return -1.0
+ load_progress += delta
+ if load_progress >= load_time:
+ rpc("load_cannonball")
+ return load_progress/load_time
+
+func reset_load():
+ load_progress = 0
remote func update_aim(pitch_z, yaw_y):
$YawJoint/PitchJoint.rotation_degrees.z = pitch_z
@@ -39,12 +55,13 @@ func mp_init(init_info):
func _ready():
if get_parent().name != "MACHINES": #if cannon is aboard ship
add_collision_exception_with(get_parent().get_parent())
- mode = RigidBody.MODE_KINEMATIC
+ mode = RigidBody.MODE_STATIC
+ print("kinematic")
world_ballistics = world.get_node("BALLISTICS")
if loaded: controllable = true
func on_new_control():
- if is_network_master(): world.cam.attach(self, "STATIC", "./YawJoint/PitchJoint/CameraPoint")
+ if is_network_master() and get_network_master() != 1: world.cam.attach(self, "STATIC", "./YawJoint/PitchJoint/CameraPoint")
func _physics_process(delta):
if in_use and is_network_master(): #aim
@@ -78,9 +95,11 @@ remotesync func fire():
add_collision_exception_with(cball)
cball.global_transform.origin = muzzle.global_transform.origin
cball.linear_velocity = muzzle.global_transform.basis.x*ball_speed
- cball.shooter = user.name + " (" + world.players_info[user.get_network_master()][0] + ")"
+ cball.set_network_master(1)
+ cball.shooter = user.name
+ if user.get_network_master() != 1: cball.shooter += " (" + world.players_info[user.get_network_master()][0] + ")"
cball.shooter_id = user.get_network_master()
- if mode == RigidBody.MODE_KINEMATIC:
+ if mode == RigidBody.MODE_STATIC:
get_parent().get_parent().apply_impulse($YawJoint/PitchJoint.global_transform.origin - get_parent().global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x)
else:
if is_network_master(): apply_impulse($YawJoint/PitchJoint.global_transform.origin - global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x)
diff --git a/godot/scripts/vehicles/Gunboat.gd b/godot/scripts/vehicles/Gunboat.gd
index 03252e6..fe5473a 100644
--- a/godot/scripts/vehicles/Gunboat.gd
+++ b/godot/scripts/vehicles/Gunboat.gd
@@ -5,7 +5,7 @@ export var team = 0
const accel = 500000
const turn_accel = 50000
-export(float, 0.0, 1.0) var sail_out = 0.0
+remote var sail_out = 0.0
export var sail_speed : float = 0.2
var sail_turn = 0
export var sail_turn_speed = 30
@@ -87,9 +87,9 @@ func _physics_process(delta):
sail.set_sheet(sail_out)
$Rudder.rotation_degrees.y = rudder_turn
#$Mast.rotation_degrees.y = sail_turn
- #var push_force = accel*sail_out*world.winddir.dot($Mast.global_transform.basis.x)
- #if world.winddir.angle_to($Mast.global_transform.basis.x) < PI/2:
- # add_force(global_transform.basis.x*push_force, Vector3.ZERO)
+ var push_force = accel*sail_out*world.winddir.dot(global_transform.basis.x)
+ if world.winddir.angle_to(global_transform.basis.x) < PI/2:
+ add_force(global_transform.basis.x*push_force, Vector3.ZERO)
add_torque(Vector3(0,-rudder_turn*rudder_constant*(0.5+linear_velocity.dot(global_transform.basis.x)),0))
add_torque(Vector3(-100000*angular_velocity.x,0,0))
add_torque(Vector3(0,0,-100000*angular_velocity.z))
@@ -110,5 +110,5 @@ func _physics_process(delta):
sail_out = clamp(sail_out, 0, 1)
rudder_turn = clamp(rudder_turn, -RUDDER_MAX, RUDDER_MAX)
sail_turn = clamp(sail_turn, -SAIL_MAX, SAIL_MAX)
-
+ rset("sail_out", sail_out)
#add_force(transform.basis.x*accel*Input.get_action_strength("move_forward"), Vector3.ZERO)
diff --git a/godot/ui/HUD.gd b/godot/ui/HUD.gd
index 9bbcae1..cfef629 100644
--- a/godot/ui/HUD.gd
+++ b/godot/ui/HUD.gd
@@ -3,6 +3,7 @@ extends Control
var world
onready var character_list = $CharacterSelect/VBoxContainer
+onready var progress_bar: ProgressBar = $UseProgress
# Called when the node enters the scene tree for the first time.
func _ready():
@@ -36,11 +37,31 @@ func _input(_event):
yield(get_tree(), "idle_frame")
$ChatPrompt.text = ""
-func send_chat_msg(txt):
+func send_chat_msg(txt: String):
world.is_chatting = false
- world.rpc_id(1, "_call_on_server", "_send_chat", {"id" : world.client_id, "msg" : txt})
$ChatPrompt.visible = false
$ChatPrompt.text = ""
+ if !txt.begins_with("/"):
+ world.rpc_id(1, "_call_on_server", "_send_chat", {"id" : world.client_id, "msg" : txt})
+ return
+ #command process
+ var end_ind = txt.find(" ")-1
+ if end_ind < -1: end_ind = -1
+ var cmd: String = txt.get_slice(" ", 0).substr(1).to_lower()
+ var args = txt.substr(end_ind+1, -1).split(" ", false)
+ match cmd:
+ "goto":
+ var pos: Vector3 = str2var("Vector3("+txt.get_slice(" ", 1)+")")
+ if world.player_char:
+ world.player_char.ai_set_path_target(pos)
+ "find":
+ var item: String = txt.get_slice(" ", 1)
+ if world.player_char:
+ CharacterAIManager.request_find_object(world.player_char, item, 50, true)
+ "setaistate":
+ world.rpc_id(1,"_call_on_server", "_set_ai_state", [args[0], args[1]])
+ for i in range(2,13):
+ world.rpc_id(1,"_call_on_server", "_set_ai_state", [args[0]+str(i), args[1]])
func ui_chat_msg(msg):
$HUDAnim.stop()
@@ -71,7 +92,7 @@ func update_characters():
for character in world.get_node("PLAYERS").get_children():
if world.player_team == character.team:
var select_button = Button.new()
- select_button.connect("pressed", world, "select_character", [character.name])
+ select_button.connect("pressed", world, "request_select_character", [character.name])
select_button.text = character.name + " (" + str(character.get_network_master()) + ")"
character_list.add_child(select_button)
@@ -83,3 +104,11 @@ func ui_join_red():
func ui_join_blue():
world.join_team("BLUE")
+
+func set_progress(delta: float)-> void:
+ progress_bar.visible = true
+ progress_bar.set_value(delta)
+
+func hide_progress() -> void:
+ progress_bar.set_value(0)
+ progress_bar.visible = false
diff --git a/godot/ui/HUD.tscn b/godot/ui/HUD.tscn
index 5299b14..0c1538f 100644
--- a/godot/ui/HUD.tscn
+++ b/godot/ui/HUD.tscn
@@ -54,6 +54,10 @@ anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
+margin_left = -4.0
+margin_top = -6.0
+margin_right = 4.0
+margin_bottom = 8.0
text = "+"
[node name="ServerJoinMenu" type="Control" parent="."]
@@ -215,6 +219,19 @@ volume_db = 5.244
stream = ExtResource( 4 )
volume_db = 5.244
+[node name="UseProgress" type="ProgressBar" parent="."]
+visible = false
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+margin_left = -21.0
+margin_top = 6.0
+margin_right = 20.0
+margin_bottom = 11.0
+max_value = 1.0
+percent_visible = false
+
[connection signal="pressed" from="ServerJoinMenu/JoinTeam1" to="." method="ui_join_red"]
[connection signal="pressed" from="ServerJoinMenu/JoinTeam2" to="." method="ui_join_blue"]
[connection signal="pressed" from="ServerJoinMenu/Disconnect" to="." method="_ui_disconnect"]
diff --git a/godot/ui/servermenu/CmdPrompt.gd b/godot/ui/servermenu/CmdPrompt.gd
index 965631b..e6deb0f 100644
--- a/godot/ui/servermenu/CmdPrompt.gd
+++ b/godot/ui/servermenu/CmdPrompt.gd
@@ -3,7 +3,7 @@ extends LineEdit
export var console_path := @""; onready var console := get_node(console_path) as ScrollContainer
var server_ref = null
var ui_ref = null
-
+#/setaistate Player3 ManCannon
func enter_cmd(new_text: String):
console.add_line(new_text)
text = ""
@@ -23,4 +23,8 @@ func enter_cmd(new_text: String):
elif cmd == "stop":
if server_ref != null:
ui_ref.stop_server()
+ elif cmd == "setaistate":
+ if server_ref != null:
+ #char name, desired state
+ server_ref._set_ai_state([args[0], args[1]])
diff --git a/godot/watershadertest.tscn b/godot/watershadertest.tscn
deleted file mode 100644
index 2c370d9..0000000
--- a/godot/watershadertest.tscn
+++ /dev/null
@@ -1,115 +0,0 @@
-[gd_scene load_steps=10 format=2]
-
-[sub_resource type="Shader" id=1]
-code = "shader_type spatial;
-render_mode unshaded;
-
-uniform vec4 deep_color : hint_color;
-uniform vec4 shallow_color : hint_color = vec4(1);
-
-uniform float refraction_speed = 0.25;
-uniform float refraction_strength = 1.0;
-
-uniform float foam_amount = 1.0;
-uniform float foam_cutoff = 1.0;
-uniform vec4 foam_color : hint_color = vec4(1);
-
-uniform float displacement_strength = 0.25;
-
-uniform float depth_distance = 1.0;
-
-uniform vec2 movement_direction = vec2(1,0);
-
-uniform sampler2D refraction_noise : hint_normal;
-uniform sampler2D foam_noise : hint_black_albedo;
-uniform sampler2D displacement_noise : hint_black;
-
-void vertex() {
- float displacement = textureLod(
- displacement_noise,
- UV + (TIME * movement_direction) * refraction_speed,
- 0.0).r * 2.0 - 1.0;
-
- VERTEX.y += displacement * displacement_strength;
-}
-
-void fragment() {
- vec2 uv = SCREEN_UV + refraction_strength
- * (texture(refraction_noise, UV + (TIME * movement_direction) * refraction_speed).rg
- * 2.0 - 1.0);
-
- float real_depth = texture(DEPTH_TEXTURE, SCREEN_UV).r * 2.0 - 1.0;
- real_depth = PROJECTION_MATRIX[3][2] / (real_depth + PROJECTION_MATRIX[2][2]) + VERTEX.z;
-
- // Get the raw linear depth from the depth texture into a [-1, 1] range
- float depth = texture(DEPTH_TEXTURE, uv).r * 2.0 - 1.0;
- // Recreate linear depth of the intersecting geometry using projection matrix, and subtract the vertex of the sphere
- depth = PROJECTION_MATRIX[3][2] / (depth + PROJECTION_MATRIX[2][2]) + VERTEX.z;
-
- depth = max(depth, real_depth);
-
- float intersection = clamp(depth / foam_amount, 0, 1) * foam_cutoff;
-
- vec4 out_color = mix(shallow_color, deep_color, clamp((depth / depth_distance), 0, 1));
- vec4 scene_color = texture(SCREEN_TEXTURE, uv);
- out_color = mix(scene_color, out_color, out_color.a);
-
- vec3 foam = step(intersection,
- texture(foam_noise, UV + (TIME * movement_direction) * refraction_speed).rgb)
- * foam_color.rgb;
-
- ALBEDO = out_color.rgb + foam;
-}"
-
-[sub_resource type="OpenSimplexNoise" id=4]
-
-[sub_resource type="NoiseTexture" id=5]
-flags = 3
-width = 1024
-height = 1024
-noise = SubResource( 4 )
-
-[sub_resource type="OpenSimplexNoise" id=6]
-
-[sub_resource type="NoiseTexture" id=7]
-width = 1024
-height = 1024
-noise = SubResource( 6 )
-
-[sub_resource type="OpenSimplexNoise" id=8]
-
-[sub_resource type="NoiseTexture" id=9]
-width = 1024
-height = 1024
-noise = SubResource( 8 )
-
-[sub_resource type="ShaderMaterial" id=2]
-shader = SubResource( 1 )
-shader_param/deep_color = Color( 0.00784314, 0, 0.196078, 1 )
-shader_param/shallow_color = Color( 0.65098, 1, 1, 1 )
-shader_param/refraction_speed = 0.25
-shader_param/refraction_strength = 1.0
-shader_param/foam_amount = 1.0
-shader_param/foam_cutoff = 1.0
-shader_param/foam_color = Color( 1, 1, 1, 1 )
-shader_param/displacement_strength = 0.25
-shader_param/depth_distance = 5.0
-shader_param/movement_direction = Vector2( 1, 0 )
-shader_param/refraction_noise = SubResource( 9 )
-shader_param/foam_noise = SubResource( 7 )
-shader_param/displacement_noise = SubResource( 5 )
-
-[sub_resource type="PlaneMesh" id=3]
-material = SubResource( 2 )
-subdivide_width = 512
-subdivide_depth = 512
-
-[node name="Spatial" type="Spatial"]
-
-[node name="MeshInstance" type="MeshInstance" parent="."]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.182733, -0.0156302 )
-mesh = SubResource( 3 )
-
-[node name="OmniLight" type="OmniLight" parent="."]
-transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.336934, 0 )
-omni_range = 0.949787