diff options
Diffstat (limited to 'godot')
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 Binary files differnew file mode 100644 index 0000000..0b94c5e --- /dev/null +++ b/godot/materials/Barrel.material 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 |
