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