From 4df06b6637ffc47e60a19811da0f942bee81620f Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Mon, 17 Aug 2020 20:16:08 +0100 Subject: [PATCH] Added rocket launcher --- project/blocky_game/blocks/block.gd | 3 + project/blocky_game/blocky_game.tscn | 6 +- .../blocky_game/gui/inventory/inventory.gd | 23 +- .../blocky_game/gui/inventory_item_display.gd | 7 +- project/blocky_game/items/item.gd | 15 + project/blocky_game/items/item_db.gd | 38 + .../items/rocket_launcher/debris.gd | 51 + .../items/rocket_launcher/debris.tscn | 16 + .../items/rocket_launcher/rocket.gd | 55 + .../items/rocket_launcher/rocket.tscn | 17 + .../items/rocket_launcher/rocket_explosion.gd | 11 + .../rocket_launcher/rocket_explosion.tscn | 64 + .../items/rocket_launcher/rocket_launcher.bin | Bin 0 -> 12488 bytes .../items/rocket_launcher/rocket_launcher.gd | 15 + .../rocket_launcher/rocket_launcher.gltf | 145 +++ .../rocket_launcher.gltf.import | 1063 +++++++++++++++++ .../items/rocket_launcher/rocket_launcher.png | Bin 0 -> 5119 bytes .../rocket_launcher.png.import | 36 + .../rocket_launcher/rocket_launcher.tscn | 5 + .../rocket_launcher/rocket_launcher_mat.tres | 13 + .../rocket_launcher_sprite.png | Bin 0 -> 14994 bytes .../rocket_launcher_sprite.png.import | 34 + .../items/rocket_launcher/smoke_particle.png | Bin 0 -> 7008 bytes .../rocket_launcher/smoke_particle.png.import | 36 + .../blocky_game/player/avatar_interaction.gd | 65 +- 25 files changed, 1681 insertions(+), 37 deletions(-) create mode 100644 project/blocky_game/items/item.gd create mode 100644 project/blocky_game/items/item_db.gd create mode 100644 project/blocky_game/items/rocket_launcher/debris.gd create mode 100644 project/blocky_game/items/rocket_launcher/debris.tscn create mode 100644 project/blocky_game/items/rocket_launcher/rocket.gd create mode 100644 project/blocky_game/items/rocket_launcher/rocket.tscn create mode 100644 project/blocky_game/items/rocket_launcher/rocket_explosion.gd create mode 100644 project/blocky_game/items/rocket_launcher/rocket_explosion.tscn create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher.bin create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher.gd create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher.gltf create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher.gltf.import create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher.png create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher.png.import create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher.tscn create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher_mat.tres create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher_sprite.png create mode 100644 project/blocky_game/items/rocket_launcher/rocket_launcher_sprite.png.import create mode 100644 project/blocky_game/items/rocket_launcher/smoke_particle.png create mode 100644 project/blocky_game/items/rocket_launcher/smoke_particle.png.import diff --git a/project/blocky_game/blocks/block.gd b/project/blocky_game/blocks/block.gd index 37143be..26347d9 100644 --- a/project/blocky_game/blocks/block.gd +++ b/project/blocky_game/blocks/block.gd @@ -21,3 +21,6 @@ class BaseInfo: var base_info := BaseInfo.new() +func place(_voxel_tool: VoxelTool, _pos: Vector3, _look_dir: Vector3): + pass + diff --git a/project/blocky_game/blocky_game.tscn b/project/blocky_game/blocky_game.tscn index 98fe9a4..9a62bd1 100644 --- a/project/blocky_game/blocky_game.tscn +++ b/project/blocky_game/blocky_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=2] +[gd_scene load_steps=17 format=2] [ext_resource path="res://blocky_game/blocks/voxel_library.tres" type="VoxelLibrary" id=1] [ext_resource path="res://blocky_game/blocks/terrain_material.tres" type="Material" id=2] @@ -12,6 +12,7 @@ [ext_resource path="res://blocky_game/random_ticks.gd" type="Script" id=10] [ext_resource path="res://blocky_game/water.gd" type="Script" id=11] [ext_resource path="res://blocky_game/blocks/blocks.gd" type="Script" id=12] +[ext_resource path="res://blocky_game/items/item_db.gd" type="Script" id=13] [sub_resource type="ProceduralSky" id=1] sky_top_color = Color( 0.268204, 0.522478, 0.847656, 1 ) @@ -51,6 +52,9 @@ script = ExtResource( 5 ) [node name="Blocks" type="Node" parent="."] script = ExtResource( 12 ) +[node name="Items" type="Node" parent="."] +script = ExtResource( 13 ) + [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource( 2 ) diff --git a/project/blocky_game/gui/inventory/inventory.gd b/project/blocky_game/gui/inventory/inventory.gd index 258bf2d..a94f699 100644 --- a/project/blocky_game/gui/inventory/inventory.gd +++ b/project/blocky_game/gui/inventory/inventory.gd @@ -26,12 +26,16 @@ func _ready(): # Initial contents var hotbar_begin_index := BAG_WIDTH * BAG_HEIGHT - var hotbar_block_ids := [1, 2, 3, 4, 5, 6, 7, 8, 9] - for i in BAG_WIDTH: - var item := InventoryItem.new() - item.type = InventoryItem.TYPE_BLOCK - item.id = hotbar_block_ids[i] - _slots[hotbar_begin_index + i] = item + _slots[hotbar_begin_index + 0] = _make_item(InventoryItem.TYPE_BLOCK, 1) + _slots[hotbar_begin_index + 1] = _make_item(InventoryItem.TYPE_BLOCK, 2) + _slots[hotbar_begin_index + 2] = _make_item(InventoryItem.TYPE_BLOCK, 3) + _slots[hotbar_begin_index + 3] = _make_item(InventoryItem.TYPE_BLOCK, 4) + _slots[hotbar_begin_index + 4] = _make_item(InventoryItem.TYPE_BLOCK, 5) + _slots[hotbar_begin_index + 5] = _make_item(InventoryItem.TYPE_BLOCK, 6) + _slots[hotbar_begin_index + 6] = _make_item(InventoryItem.TYPE_BLOCK, 7) + _slots[hotbar_begin_index + 7] = _make_item(InventoryItem.TYPE_ITEM, 0) + _slots[hotbar_begin_index + 8] = _make_item(InventoryItem.TYPE_BLOCK, 9) + _slots[0] = _make_item(InventoryItem.TYPE_BLOCK, 8) # Init views var slot_idx := 0 @@ -45,6 +49,13 @@ func _ready(): slot_idx += 1 +static func _make_item(type, id): + var i = InventoryItem.new() + i.id = id + i.type = type + return i + + func _update_views(): var slot_idx := 0 for container in [_bag_container, _hotbar_container]: diff --git a/project/blocky_game/gui/inventory_item_display.gd b/project/blocky_game/gui/inventory_item_display.gd index 3ea755d..1d4f5bf 100644 --- a/project/blocky_game/gui/inventory_item_display.gd +++ b/project/blocky_game/gui/inventory_item_display.gd @@ -1,10 +1,11 @@ extends TextureRect const InventoryItem = preload("res://blocky_game/player/inventory_item.gd") -const DefaultTexture = preload("res://icon.png") const Blocks = preload("../blocks/blocks.gd") +const ItemDB = preload("../items/item_db.gd") onready var _block_types : Blocks = get_node("/root/Main/Blocks") +onready var _item_db : ItemDB = get_node("/root/Main/Items") func set_item(data: InventoryItem): @@ -16,8 +17,8 @@ func set_item(data: InventoryItem): texture = block.base_info.sprite_texture elif data.type == InventoryItem.TYPE_ITEM: - # TODO Items db - texture = DefaultTexture + var item := _item_db.get_item(data.id) + texture = item.base_info.sprite else: assert(false) diff --git a/project/blocky_game/items/item.gd b/project/blocky_game/items/item.gd new file mode 100644 index 0000000..4cd9f22 --- /dev/null +++ b/project/blocky_game/items/item.gd @@ -0,0 +1,15 @@ +extends Node + + +class BaseInfo: + var id := 0 + var name := "" + var sprite : Texture + + +var base_info := BaseInfo.new() + + +func use(_trans: Transform): + pass + diff --git a/project/blocky_game/items/item_db.gd b/project/blocky_game/items/item_db.gd new file mode 100644 index 0000000..fa70749 --- /dev/null +++ b/project/blocky_game/items/item_db.gd @@ -0,0 +1,38 @@ +extends Node + +const ROOT = "res://blocky_game/items" + +const Item = preload("./item.gd") + + +var _items := [] + + +func _init(): + _create_item({ + "name": "rocket_launcher", + "behavior": "rocket_launcher.gd" + }) + + +func get_item(id: int) -> Item: + assert(id >= 0) + return _items[id] + + +func _create_item(d: Dictionary): + var dir = str(ROOT, "/", d.name, "/") + + var item : Item + if d.has("behavior"): + var behavior_script = load(str(dir, d.name, ".gd")) + item = behavior_script.new() + else: + item = Item.new() + + var base_info = item.base_info + base_info.id = len(_items) + base_info.name = d.name + base_info.sprite = load(str(dir, d.name, "_sprite.png")) + _items.append(item) + add_child(item) diff --git a/project/blocky_game/items/rocket_launcher/debris.gd b/project/blocky_game/items/rocket_launcher/debris.gd new file mode 100644 index 0000000..bf73fa5 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/debris.gd @@ -0,0 +1,51 @@ +extends Spatial + +const GRAVITY = Vector3(0, -14, 0) +const LIFETIME = 3.0 + +onready var _mesh_instance = $MeshInstance +onready var _terrain : VoxelTerrain = get_node("/root/Main/VoxelTerrain") +onready var _terrain_tool := _terrain.get_voxel_tool() + + +var _velocity := Vector3() +var _rotation_axis := Vector3() +var _angular_velocity := 4.0 * TAU * rand_range(-1.0, 1.0) +var _remaining_time := rand_range(0.5, 1.5) * LIFETIME + + +func _ready(): + rotation = Vector3(rand_range(-PI, PI), rand_range(-PI, PI), rand_range(-PI, PI)) + scale = Vector3(rand_range(0.5, 1.5), rand_range(0.5, 1.5), rand_range(0.5, 1.5)) + _rotation_axis = \ + Vector3(rand_range(-PI, PI), rand_range(-PI, PI), rand_range(-PI, PI)).normalized() + + +func set_velocity(vel: Vector3): + _velocity = vel + + +func _process(delta: float): + _remaining_time -= delta + if _remaining_time <= 0: + queue_free() + return + + _velocity += GRAVITY * delta + + var trans := transform + + trans.basis = trans.basis.rotated(_rotation_axis, _angular_velocity * delta) + + var motion := _velocity * delta + var hit := _terrain_tool.raycast(trans.origin, motion.normalized(), motion.length() * 1.01) + if hit != null: + # BOUNCE + var normal = hit.previous_position - hit.position + _velocity = _velocity.bounce(normal) + # Damp on impact + _velocity *= 0.5 + _angular_velocity *= 0.5 + + trans.origin += _velocity * delta + transform = trans diff --git a/project/blocky_game/items/rocket_launcher/debris.tscn b/project/blocky_game/items/rocket_launcher/debris.tscn new file mode 100644 index 0000000..c31cde8 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/debris.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://blocky_game/items/rocket_launcher/debris.gd" type="Script" id=1] + +[sub_resource type="CubeMesh" id=1] +size = Vector3( 0.3, 0.3, 0.3 ) + +[sub_resource type="SpatialMaterial" id=2] +albedo_color = Color( 0.458824, 0.266667, 0.0980392, 1 ) + +[node name="Debris" type="Spatial"] +script = ExtResource( 1 ) + +[node name="MeshInstance" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 2 ) diff --git a/project/blocky_game/items/rocket_launcher/rocket.gd b/project/blocky_game/items/rocket_launcher/rocket.gd new file mode 100644 index 0000000..8af3a9f --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket.gd @@ -0,0 +1,55 @@ +extends Spatial + +const LIFETIME = 10.0 + +const DebrisScene = preload("./debris.tscn") +const ExplosionScene = preload("./rocket_explosion.tscn") + +onready var _terrain : VoxelTerrain = get_node("../VoxelTerrain") +onready var _terrain_tool := _terrain.get_voxel_tool() + +var _direction := Vector3(0, 0, 1) +var _speed := 20.0 +var _remaining_time := LIFETIME + + +func set_direction(direction: Vector3): + assert(is_inside_tree()) + direction += Vector3(0.0001, 0.0001, 0.001) # Haaaaak + _direction = direction.normalized() + look_at(global_transform.origin + _direction, Vector3(0, 1, 0)) + + +func _physics_process(delta: float): + _remaining_time -= delta + if _remaining_time <= 0: + queue_free() + return + + var trans = global_transform + var crossed_distance := _speed * delta + var motion := crossed_distance * _direction + + var hit = _terrain_tool.raycast(trans.origin, _direction, crossed_distance) + if hit != null: + # EXPLODE + _terrain_tool.do_sphere(hit.position, 4.0) + + var explosion = ExplosionScene.instance() + explosion.translation = trans.origin + get_parent().add_child(explosion) + + # Create debris + for i in 30: + var debris = DebrisScene.instance() + var debris_velocity := \ + Vector3(rand_range(-1, 1), rand_range(-1, 1), rand_range(-1, 1)).normalized() + debris_velocity *= rand_range(5.0, 30.0) + debris.set_velocity(debris_velocity) + debris.translation = trans.origin + get_parent().add_child(debris) + queue_free() + + else: + trans.origin += motion + global_transform = trans diff --git a/project/blocky_game/items/rocket_launcher/rocket.tscn b/project/blocky_game/items/rocket_launcher/rocket.tscn new file mode 100644 index 0000000..8d4eafd --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://blocky_game/items/rocket_launcher/rocket.gd" type="Script" id=1] + +[sub_resource type="CylinderMesh" id=1] +top_radius = 0.1 +bottom_radius = 0.3 +height = 1.0 +radial_segments = 8 + +[node name="Rocket" type="Spatial"] +script = ExtResource( 1 ) + +[node name="MeshInstance" type="MeshInstance" parent="."] +transform = Transform( -1, -3.25841e-07, 5.30863e-14, 0, -1.62921e-07, -1, 3.25841e-07, -1, 1.62921e-07, 0, 0, 0 ) +mesh = SubResource( 1 ) +material/0 = null diff --git a/project/blocky_game/items/rocket_launcher/rocket_explosion.gd b/project/blocky_game/items/rocket_launcher/rocket_explosion.gd new file mode 100644 index 0000000..f5c9080 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket_explosion.gd @@ -0,0 +1,11 @@ +extends Spatial + +onready var _particles = $Particles + + +func _ready(): + _particles.emitting = true + + +func _on_Timer_timeout(): + queue_free() diff --git a/project/blocky_game/items/rocket_launcher/rocket_explosion.tscn b/project/blocky_game/items/rocket_launcher/rocket_explosion.tscn new file mode 100644 index 0000000..8cc1297 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket_explosion.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://blocky_game/items/rocket_launcher/smoke_particle.png" type="Texture" id=1] +[ext_resource path="res://blocky_game/items/rocket_launcher/rocket_explosion.gd" type="Script" id=2] + + +[sub_resource type="SpatialMaterial" id=1] +flags_transparent = true +vertex_color_use_as_albedo = true +params_billboard_mode = 3 +particles_anim_h_frames = 1 +particles_anim_v_frames = 1 +particles_anim_loop = false +albedo_texture = ExtResource( 1 ) + +[sub_resource type="Gradient" id=2] +colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 1, 0 ) + +[sub_resource type="GradientTexture" id=3] +gradient = SubResource( 2 ) +width = 64 + +[sub_resource type="Curve" id=6] +_data = [ Vector2( 0, 0.364035 ), 0.0, 6.99055, 0, 0, Vector2( 0.0810811, 0.723684 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.399123 ), 0.0, 0.0, 0, 0 ] + +[sub_resource type="CurveTexture" id=7] +curve = SubResource( 6 ) + +[sub_resource type="ParticlesMaterial" id=4] +render_priority = -1 +direction = Vector3( 0, 1, 0 ) +spread = 170.0 +gravity = Vector3( 0, 1, 0 ) +initial_velocity = 10.0 +initial_velocity_random = 0.51 +linear_accel = -6.0 +scale = 10.0 +scale_random = 0.39 +scale_curve = SubResource( 7 ) +color_ramp = SubResource( 3 ) + +[sub_resource type="QuadMesh" id=5] + +[node name="RocketExplosion" type="Spatial"] +script = ExtResource( 2 ) + +[node name="Particles" type="Particles" parent="."] +material_override = SubResource( 1 ) +emitting = false +amount = 15 +lifetime = 2.0 +one_shot = true +explosiveness = 0.95 +process_material = SubResource( 4 ) +draw_pass_1 = SubResource( 5 ) + +[node name="DirectionalLight" type="DirectionalLight" parent="."] +transform = Transform( 1, 0, 0, 0, 0.790016, 0.613086, 0, -0.613086, 0.790016, 0, 3.14598, 4.16366 ) +editor_only = true + +[node name="Timer" type="Timer" parent="."] +wait_time = 3.0 +autostart = true +[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] diff --git a/project/blocky_game/items/rocket_launcher/rocket_launcher.bin b/project/blocky_game/items/rocket_launcher/rocket_launcher.bin new file mode 100644 index 0000000000000000000000000000000000000000..352af6355737a51b2e93a64578cbc783b37c4d18 GIT binary patch literal 12488 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 literal 0 HcmV?d00001 diff --git a/project/blocky_game/items/rocket_launcher/rocket_launcher.gd b/project/blocky_game/items/rocket_launcher/rocket_launcher.gd new file mode 100644 index 0000000..126df18 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket_launcher.gd @@ -0,0 +1,15 @@ +extends "../item.gd" + +const RocketScene = preload("./rocket.tscn") + +onready var _world = get_node("/root/Main") + + +func use(trans: Transform): + var rocket = RocketScene.instance() + rocket.translation = trans.origin + _world.add_child(rocket) + print("Launch rocket at ", rocket.translation) + var forward = -trans.basis.z.normalized() + rocket.set_direction(forward) + diff --git a/project/blocky_game/items/rocket_launcher/rocket_launcher.gltf b/project/blocky_game/items/rocket_launcher/rocket_launcher.gltf new file mode 100644 index 0000000..e893b17 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket_launcher.gltf @@ -0,0 +1,145 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v1.2.75", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 0 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "RocketLauncher", + "rotation" : [ + 0, + 0.19509032368659973, + 0, + 0.9807852506637573 + ] + } + ], + "materials" : [ + { + "doubleSided" : true, + "emissiveFactor" : [ + 0, + 0, + 0 + ], + "name" : "rocket_launcher_mat", + "pbrMetallicRoughness" : { + "baseColorTexture" : { + "index" : 0, + "texCoord" : 0 + }, + "metallicFactor" : 0, + "roughnessFactor" : 1 + } + } + ], + "meshes" : [ + { + "name" : "Cylinder.001", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2 + }, + "indices" : 3, + "material" : 0 + } + ] + } + ], + "textures" : [ + { + "sampler" : 0, + "source" : 0 + } + ], + "images" : [ + { + "mimeType" : "image/png", + "name" : "rocket_launcher", + "uri" : "rocket_launcher.png" + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 358, + "max" : [ + 0.49119770526885986, + 0.34520694613456726, + 1.5060045719146729 + ], + "min" : [ + -0.8064760565757751, + -0.6934827566146851, + -0.9066932797431946 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 358, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 358, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5123, + "count" : 516, + "type" : "SCALAR" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 4296, + "byteOffset" : 0 + }, + { + "buffer" : 0, + "byteLength" : 4296, + "byteOffset" : 4296 + }, + { + "buffer" : 0, + "byteLength" : 2864, + "byteOffset" : 8592 + }, + { + "buffer" : 0, + "byteLength" : 1032, + "byteOffset" : 11456 + } + ], + "samplers" : [ + { + "magFilter" : 9728, + "minFilter" : 9984 + } + ], + "buffers" : [ + { + "byteLength" : 12488, + "uri" : "rocket_launcher.bin" + } + ] +} diff --git a/project/blocky_game/items/rocket_launcher/rocket_launcher.gltf.import b/project/blocky_game/items/rocket_launcher/rocket_launcher.gltf.import new file mode 100644 index 0000000..65dc805 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket_launcher.gltf.import @@ -0,0 +1,1063 @@ +[remap] + +importer="scene" +type="PackedScene" +path="res://.import/rocket_launcher.gltf-ded10881832c42fb1322c6c995faaaef.scn" + +[deps] + +source_file="res://blocky_game/items/rocket_launcher/rocket_launcher.gltf" +dest_files=[ "res://.import/rocket_launcher.gltf-ded10881832c42fb1322c6c995faaaef.scn" ] + +[params] + +nodes/root_type="Spatial" +nodes/root_name="Scene Root" +nodes/root_scale=1.0 +nodes/custom_script="" +nodes/storage=0 +materials/location=1 +materials/storage=2 +materials/keep_on_reimport=true +meshes/compress=true +meshes/ensure_tangents=true +meshes/storage=0 +meshes/light_baking=0 +meshes/lightmap_texel_size=0.1 +skins/use_named_skins=true +external_files/store_in_subdir=false +animation/import=true +animation/fps=15 +animation/filter_script="" +animation/storage=false +animation/keep_custom_tracks=false +animation/optimizer/enabled=true +animation/optimizer/max_linear_error=0.05 +animation/optimizer/max_angular_error=0.01 +animation/optimizer/max_angle=22 +animation/optimizer/remove_unused_tracks=true +animation/clips/amount=0 +animation/clip_1/name="" +animation/clip_1/start_frame=0 +animation/clip_1/end_frame=0 +animation/clip_1/loops=false +animation/clip_2/name="" +animation/clip_2/start_frame=0 +animation/clip_2/end_frame=0 +animation/clip_2/loops=false +animation/clip_3/name="" +animation/clip_3/start_frame=0 +animation/clip_3/end_frame=0 +animation/clip_3/loops=false +animation/clip_4/name="" +animation/clip_4/start_frame=0 +animation/clip_4/end_frame=0 +animation/clip_4/loops=false +animation/clip_5/name="" +animation/clip_5/start_frame=0 +animation/clip_5/end_frame=0 +animation/clip_5/loops=false +animation/clip_6/name="" +animation/clip_6/start_frame=0 +animation/clip_6/end_frame=0 +animation/clip_6/loops=false +animation/clip_7/name="" +animation/clip_7/start_frame=0 +animation/clip_7/end_frame=0 +animation/clip_7/loops=false +animation/clip_8/name="" +animation/clip_8/start_frame=0 +animation/clip_8/end_frame=0 +animation/clip_8/loops=false +animation/clip_9/name="" +animation/clip_9/start_frame=0 +animation/clip_9/end_frame=0 +animation/clip_9/loops=false +animation/clip_10/name="" +animation/clip_10/start_frame=0 +animation/clip_10/end_frame=0 +animation/clip_10/loops=false +animation/clip_11/name="" +animation/clip_11/start_frame=0 +animation/clip_11/end_frame=0 +animation/clip_11/loops=false +animation/clip_12/name="" +animation/clip_12/start_frame=0 +animation/clip_12/end_frame=0 +animation/clip_12/loops=false +animation/clip_13/name="" +animation/clip_13/start_frame=0 +animation/clip_13/end_frame=0 +animation/clip_13/loops=false +animation/clip_14/name="" +animation/clip_14/start_frame=0 +animation/clip_14/end_frame=0 +animation/clip_14/loops=false +animation/clip_15/name="" +animation/clip_15/start_frame=0 +animation/clip_15/end_frame=0 +animation/clip_15/loops=false +animation/clip_16/name="" +animation/clip_16/start_frame=0 +animation/clip_16/end_frame=0 +animation/clip_16/loops=false +animation/clip_17/name="" +animation/clip_17/start_frame=0 +animation/clip_17/end_frame=0 +animation/clip_17/loops=false +animation/clip_18/name="" +animation/clip_18/start_frame=0 +animation/clip_18/end_frame=0 +animation/clip_18/loops=false +animation/clip_19/name="" +animation/clip_19/start_frame=0 +animation/clip_19/end_frame=0 +animation/clip_19/loops=false +animation/clip_20/name="" +animation/clip_20/start_frame=0 +animation/clip_20/end_frame=0 +animation/clip_20/loops=false +animation/clip_21/name="" +animation/clip_21/start_frame=0 +animation/clip_21/end_frame=0 +animation/clip_21/loops=false +animation/clip_22/name="" +animation/clip_22/start_frame=0 +animation/clip_22/end_frame=0 +animation/clip_22/loops=false +animation/clip_23/name="" +animation/clip_23/start_frame=0 +animation/clip_23/end_frame=0 +animation/clip_23/loops=false +animation/clip_24/name="" +animation/clip_24/start_frame=0 +animation/clip_24/end_frame=0 +animation/clip_24/loops=false +animation/clip_25/name="" +animation/clip_25/start_frame=0 +animation/clip_25/end_frame=0 +animation/clip_25/loops=false +animation/clip_26/name="" +animation/clip_26/start_frame=0 +animation/clip_26/end_frame=0 +animation/clip_26/loops=false +animation/clip_27/name="" +animation/clip_27/start_frame=0 +animation/clip_27/end_frame=0 +animation/clip_27/loops=false +animation/clip_28/name="" +animation/clip_28/start_frame=0 +animation/clip_28/end_frame=0 +animation/clip_28/loops=false +animation/clip_29/name="" +animation/clip_29/start_frame=0 +animation/clip_29/end_frame=0 +animation/clip_29/loops=false +animation/clip_30/name="" +animation/clip_30/start_frame=0 +animation/clip_30/end_frame=0 +animation/clip_30/loops=false +animation/clip_31/name="" +animation/clip_31/start_frame=0 +animation/clip_31/end_frame=0 +animation/clip_31/loops=false +animation/clip_32/name="" +animation/clip_32/start_frame=0 +animation/clip_32/end_frame=0 +animation/clip_32/loops=false +animation/clip_33/name="" +animation/clip_33/start_frame=0 +animation/clip_33/end_frame=0 +animation/clip_33/loops=false +animation/clip_34/name="" +animation/clip_34/start_frame=0 +animation/clip_34/end_frame=0 +animation/clip_34/loops=false +animation/clip_35/name="" +animation/clip_35/start_frame=0 +animation/clip_35/end_frame=0 +animation/clip_35/loops=false +animation/clip_36/name="" +animation/clip_36/start_frame=0 +animation/clip_36/end_frame=0 +animation/clip_36/loops=false +animation/clip_37/name="" +animation/clip_37/start_frame=0 +animation/clip_37/end_frame=0 +animation/clip_37/loops=false +animation/clip_38/name="" +animation/clip_38/start_frame=0 +animation/clip_38/end_frame=0 +animation/clip_38/loops=false +animation/clip_39/name="" +animation/clip_39/start_frame=0 +animation/clip_39/end_frame=0 +animation/clip_39/loops=false +animation/clip_40/name="" +animation/clip_40/start_frame=0 +animation/clip_40/end_frame=0 +animation/clip_40/loops=false +animation/clip_41/name="" +animation/clip_41/start_frame=0 +animation/clip_41/end_frame=0 +animation/clip_41/loops=false +animation/clip_42/name="" +animation/clip_42/start_frame=0 +animation/clip_42/end_frame=0 +animation/clip_42/loops=false +animation/clip_43/name="" +animation/clip_43/start_frame=0 +animation/clip_43/end_frame=0 +animation/clip_43/loops=false +animation/clip_44/name="" +animation/clip_44/start_frame=0 +animation/clip_44/end_frame=0 +animation/clip_44/loops=false +animation/clip_45/name="" +animation/clip_45/start_frame=0 +animation/clip_45/end_frame=0 +animation/clip_45/loops=false +animation/clip_46/name="" +animation/clip_46/start_frame=0 +animation/clip_46/end_frame=0 +animation/clip_46/loops=false +animation/clip_47/name="" +animation/clip_47/start_frame=0 +animation/clip_47/end_frame=0 +animation/clip_47/loops=false +animation/clip_48/name="" +animation/clip_48/start_frame=0 +animation/clip_48/end_frame=0 +animation/clip_48/loops=false +animation/clip_49/name="" +animation/clip_49/start_frame=0 +animation/clip_49/end_frame=0 +animation/clip_49/loops=false +animation/clip_50/name="" +animation/clip_50/start_frame=0 +animation/clip_50/end_frame=0 +animation/clip_50/loops=false +animation/clip_51/name="" +animation/clip_51/start_frame=0 +animation/clip_51/end_frame=0 +animation/clip_51/loops=false +animation/clip_52/name="" +animation/clip_52/start_frame=0 +animation/clip_52/end_frame=0 +animation/clip_52/loops=false +animation/clip_53/name="" +animation/clip_53/start_frame=0 +animation/clip_53/end_frame=0 +animation/clip_53/loops=false +animation/clip_54/name="" +animation/clip_54/start_frame=0 +animation/clip_54/end_frame=0 +animation/clip_54/loops=false +animation/clip_55/name="" +animation/clip_55/start_frame=0 +animation/clip_55/end_frame=0 +animation/clip_55/loops=false +animation/clip_56/name="" +animation/clip_56/start_frame=0 +animation/clip_56/end_frame=0 +animation/clip_56/loops=false +animation/clip_57/name="" +animation/clip_57/start_frame=0 +animation/clip_57/end_frame=0 +animation/clip_57/loops=false +animation/clip_58/name="" +animation/clip_58/start_frame=0 +animation/clip_58/end_frame=0 +animation/clip_58/loops=false +animation/clip_59/name="" +animation/clip_59/start_frame=0 +animation/clip_59/end_frame=0 +animation/clip_59/loops=false +animation/clip_60/name="" +animation/clip_60/start_frame=0 +animation/clip_60/end_frame=0 +animation/clip_60/loops=false +animation/clip_61/name="" +animation/clip_61/start_frame=0 +animation/clip_61/end_frame=0 +animation/clip_61/loops=false +animation/clip_62/name="" +animation/clip_62/start_frame=0 +animation/clip_62/end_frame=0 +animation/clip_62/loops=false +animation/clip_63/name="" +animation/clip_63/start_frame=0 +animation/clip_63/end_frame=0 +animation/clip_63/loops=false +animation/clip_64/name="" +animation/clip_64/start_frame=0 +animation/clip_64/end_frame=0 +animation/clip_64/loops=false +animation/clip_65/name="" +animation/clip_65/start_frame=0 +animation/clip_65/end_frame=0 +animation/clip_65/loops=false +animation/clip_66/name="" +animation/clip_66/start_frame=0 +animation/clip_66/end_frame=0 +animation/clip_66/loops=false +animation/clip_67/name="" +animation/clip_67/start_frame=0 +animation/clip_67/end_frame=0 +animation/clip_67/loops=false +animation/clip_68/name="" +animation/clip_68/start_frame=0 +animation/clip_68/end_frame=0 +animation/clip_68/loops=false +animation/clip_69/name="" +animation/clip_69/start_frame=0 +animation/clip_69/end_frame=0 +animation/clip_69/loops=false +animation/clip_70/name="" +animation/clip_70/start_frame=0 +animation/clip_70/end_frame=0 +animation/clip_70/loops=false +animation/clip_71/name="" +animation/clip_71/start_frame=0 +animation/clip_71/end_frame=0 +animation/clip_71/loops=false +animation/clip_72/name="" +animation/clip_72/start_frame=0 +animation/clip_72/end_frame=0 +animation/clip_72/loops=false +animation/clip_73/name="" +animation/clip_73/start_frame=0 +animation/clip_73/end_frame=0 +animation/clip_73/loops=false +animation/clip_74/name="" +animation/clip_74/start_frame=0 +animation/clip_74/end_frame=0 +animation/clip_74/loops=false +animation/clip_75/name="" +animation/clip_75/start_frame=0 +animation/clip_75/end_frame=0 +animation/clip_75/loops=false +animation/clip_76/name="" +animation/clip_76/start_frame=0 +animation/clip_76/end_frame=0 +animation/clip_76/loops=false +animation/clip_77/name="" +animation/clip_77/start_frame=0 +animation/clip_77/end_frame=0 +animation/clip_77/loops=false +animation/clip_78/name="" +animation/clip_78/start_frame=0 +animation/clip_78/end_frame=0 +animation/clip_78/loops=false +animation/clip_79/name="" +animation/clip_79/start_frame=0 +animation/clip_79/end_frame=0 +animation/clip_79/loops=false +animation/clip_80/name="" +animation/clip_80/start_frame=0 +animation/clip_80/end_frame=0 +animation/clip_80/loops=false +animation/clip_81/name="" +animation/clip_81/start_frame=0 +animation/clip_81/end_frame=0 +animation/clip_81/loops=false +animation/clip_82/name="" +animation/clip_82/start_frame=0 +animation/clip_82/end_frame=0 +animation/clip_82/loops=false +animation/clip_83/name="" +animation/clip_83/start_frame=0 +animation/clip_83/end_frame=0 +animation/clip_83/loops=false +animation/clip_84/name="" +animation/clip_84/start_frame=0 +animation/clip_84/end_frame=0 +animation/clip_84/loops=false +animation/clip_85/name="" +animation/clip_85/start_frame=0 +animation/clip_85/end_frame=0 +animation/clip_85/loops=false +animation/clip_86/name="" +animation/clip_86/start_frame=0 +animation/clip_86/end_frame=0 +animation/clip_86/loops=false +animation/clip_87/name="" +animation/clip_87/start_frame=0 +animation/clip_87/end_frame=0 +animation/clip_87/loops=false +animation/clip_88/name="" +animation/clip_88/start_frame=0 +animation/clip_88/end_frame=0 +animation/clip_88/loops=false +animation/clip_89/name="" +animation/clip_89/start_frame=0 +animation/clip_89/end_frame=0 +animation/clip_89/loops=false +animation/clip_90/name="" +animation/clip_90/start_frame=0 +animation/clip_90/end_frame=0 +animation/clip_90/loops=false +animation/clip_91/name="" +animation/clip_91/start_frame=0 +animation/clip_91/end_frame=0 +animation/clip_91/loops=false +animation/clip_92/name="" +animation/clip_92/start_frame=0 +animation/clip_92/end_frame=0 +animation/clip_92/loops=false +animation/clip_93/name="" +animation/clip_93/start_frame=0 +animation/clip_93/end_frame=0 +animation/clip_93/loops=false +animation/clip_94/name="" +animation/clip_94/start_frame=0 +animation/clip_94/end_frame=0 +animation/clip_94/loops=false +animation/clip_95/name="" +animation/clip_95/start_frame=0 +animation/clip_95/end_frame=0 +animation/clip_95/loops=false +animation/clip_96/name="" +animation/clip_96/start_frame=0 +animation/clip_96/end_frame=0 +animation/clip_96/loops=false +animation/clip_97/name="" +animation/clip_97/start_frame=0 +animation/clip_97/end_frame=0 +animation/clip_97/loops=false +animation/clip_98/name="" +animation/clip_98/start_frame=0 +animation/clip_98/end_frame=0 +animation/clip_98/loops=false +animation/clip_99/name="" +animation/clip_99/start_frame=0 +animation/clip_99/end_frame=0 +animation/clip_99/loops=false +animation/clip_100/name="" +animation/clip_100/start_frame=0 +animation/clip_100/end_frame=0 +animation/clip_100/loops=false +animation/clip_101/name="" +animation/clip_101/start_frame=0 +animation/clip_101/end_frame=0 +animation/clip_101/loops=false +animation/clip_102/name="" +animation/clip_102/start_frame=0 +animation/clip_102/end_frame=0 +animation/clip_102/loops=false +animation/clip_103/name="" +animation/clip_103/start_frame=0 +animation/clip_103/end_frame=0 +animation/clip_103/loops=false +animation/clip_104/name="" +animation/clip_104/start_frame=0 +animation/clip_104/end_frame=0 +animation/clip_104/loops=false +animation/clip_105/name="" +animation/clip_105/start_frame=0 +animation/clip_105/end_frame=0 +animation/clip_105/loops=false +animation/clip_106/name="" +animation/clip_106/start_frame=0 +animation/clip_106/end_frame=0 +animation/clip_106/loops=false +animation/clip_107/name="" +animation/clip_107/start_frame=0 +animation/clip_107/end_frame=0 +animation/clip_107/loops=false +animation/clip_108/name="" +animation/clip_108/start_frame=0 +animation/clip_108/end_frame=0 +animation/clip_108/loops=false +animation/clip_109/name="" +animation/clip_109/start_frame=0 +animation/clip_109/end_frame=0 +animation/clip_109/loops=false +animation/clip_110/name="" +animation/clip_110/start_frame=0 +animation/clip_110/end_frame=0 +animation/clip_110/loops=false +animation/clip_111/name="" +animation/clip_111/start_frame=0 +animation/clip_111/end_frame=0 +animation/clip_111/loops=false +animation/clip_112/name="" +animation/clip_112/start_frame=0 +animation/clip_112/end_frame=0 +animation/clip_112/loops=false +animation/clip_113/name="" +animation/clip_113/start_frame=0 +animation/clip_113/end_frame=0 +animation/clip_113/loops=false +animation/clip_114/name="" +animation/clip_114/start_frame=0 +animation/clip_114/end_frame=0 +animation/clip_114/loops=false +animation/clip_115/name="" +animation/clip_115/start_frame=0 +animation/clip_115/end_frame=0 +animation/clip_115/loops=false +animation/clip_116/name="" +animation/clip_116/start_frame=0 +animation/clip_116/end_frame=0 +animation/clip_116/loops=false +animation/clip_117/name="" +animation/clip_117/start_frame=0 +animation/clip_117/end_frame=0 +animation/clip_117/loops=false +animation/clip_118/name="" +animation/clip_118/start_frame=0 +animation/clip_118/end_frame=0 +animation/clip_118/loops=false +animation/clip_119/name="" +animation/clip_119/start_frame=0 +animation/clip_119/end_frame=0 +animation/clip_119/loops=false +animation/clip_120/name="" +animation/clip_120/start_frame=0 +animation/clip_120/end_frame=0 +animation/clip_120/loops=false +animation/clip_121/name="" +animation/clip_121/start_frame=0 +animation/clip_121/end_frame=0 +animation/clip_121/loops=false +animation/clip_122/name="" +animation/clip_122/start_frame=0 +animation/clip_122/end_frame=0 +animation/clip_122/loops=false +animation/clip_123/name="" +animation/clip_123/start_frame=0 +animation/clip_123/end_frame=0 +animation/clip_123/loops=false +animation/clip_124/name="" +animation/clip_124/start_frame=0 +animation/clip_124/end_frame=0 +animation/clip_124/loops=false +animation/clip_125/name="" +animation/clip_125/start_frame=0 +animation/clip_125/end_frame=0 +animation/clip_125/loops=false +animation/clip_126/name="" +animation/clip_126/start_frame=0 +animation/clip_126/end_frame=0 +animation/clip_126/loops=false +animation/clip_127/name="" +animation/clip_127/start_frame=0 +animation/clip_127/end_frame=0 +animation/clip_127/loops=false +animation/clip_128/name="" +animation/clip_128/start_frame=0 +animation/clip_128/end_frame=0 +animation/clip_128/loops=false +animation/clip_129/name="" +animation/clip_129/start_frame=0 +animation/clip_129/end_frame=0 +animation/clip_129/loops=false +animation/clip_130/name="" +animation/clip_130/start_frame=0 +animation/clip_130/end_frame=0 +animation/clip_130/loops=false +animation/clip_131/name="" +animation/clip_131/start_frame=0 +animation/clip_131/end_frame=0 +animation/clip_131/loops=false +animation/clip_132/name="" +animation/clip_132/start_frame=0 +animation/clip_132/end_frame=0 +animation/clip_132/loops=false +animation/clip_133/name="" +animation/clip_133/start_frame=0 +animation/clip_133/end_frame=0 +animation/clip_133/loops=false +animation/clip_134/name="" +animation/clip_134/start_frame=0 +animation/clip_134/end_frame=0 +animation/clip_134/loops=false +animation/clip_135/name="" +animation/clip_135/start_frame=0 +animation/clip_135/end_frame=0 +animation/clip_135/loops=false +animation/clip_136/name="" +animation/clip_136/start_frame=0 +animation/clip_136/end_frame=0 +animation/clip_136/loops=false +animation/clip_137/name="" +animation/clip_137/start_frame=0 +animation/clip_137/end_frame=0 +animation/clip_137/loops=false +animation/clip_138/name="" +animation/clip_138/start_frame=0 +animation/clip_138/end_frame=0 +animation/clip_138/loops=false +animation/clip_139/name="" +animation/clip_139/start_frame=0 +animation/clip_139/end_frame=0 +animation/clip_139/loops=false +animation/clip_140/name="" +animation/clip_140/start_frame=0 +animation/clip_140/end_frame=0 +animation/clip_140/loops=false +animation/clip_141/name="" +animation/clip_141/start_frame=0 +animation/clip_141/end_frame=0 +animation/clip_141/loops=false +animation/clip_142/name="" +animation/clip_142/start_frame=0 +animation/clip_142/end_frame=0 +animation/clip_142/loops=false +animation/clip_143/name="" +animation/clip_143/start_frame=0 +animation/clip_143/end_frame=0 +animation/clip_143/loops=false +animation/clip_144/name="" +animation/clip_144/start_frame=0 +animation/clip_144/end_frame=0 +animation/clip_144/loops=false +animation/clip_145/name="" +animation/clip_145/start_frame=0 +animation/clip_145/end_frame=0 +animation/clip_145/loops=false +animation/clip_146/name="" +animation/clip_146/start_frame=0 +animation/clip_146/end_frame=0 +animation/clip_146/loops=false +animation/clip_147/name="" +animation/clip_147/start_frame=0 +animation/clip_147/end_frame=0 +animation/clip_147/loops=false +animation/clip_148/name="" +animation/clip_148/start_frame=0 +animation/clip_148/end_frame=0 +animation/clip_148/loops=false +animation/clip_149/name="" +animation/clip_149/start_frame=0 +animation/clip_149/end_frame=0 +animation/clip_149/loops=false +animation/clip_150/name="" +animation/clip_150/start_frame=0 +animation/clip_150/end_frame=0 +animation/clip_150/loops=false +animation/clip_151/name="" +animation/clip_151/start_frame=0 +animation/clip_151/end_frame=0 +animation/clip_151/loops=false +animation/clip_152/name="" +animation/clip_152/start_frame=0 +animation/clip_152/end_frame=0 +animation/clip_152/loops=false +animation/clip_153/name="" +animation/clip_153/start_frame=0 +animation/clip_153/end_frame=0 +animation/clip_153/loops=false +animation/clip_154/name="" +animation/clip_154/start_frame=0 +animation/clip_154/end_frame=0 +animation/clip_154/loops=false +animation/clip_155/name="" +animation/clip_155/start_frame=0 +animation/clip_155/end_frame=0 +animation/clip_155/loops=false +animation/clip_156/name="" +animation/clip_156/start_frame=0 +animation/clip_156/end_frame=0 +animation/clip_156/loops=false +animation/clip_157/name="" +animation/clip_157/start_frame=0 +animation/clip_157/end_frame=0 +animation/clip_157/loops=false +animation/clip_158/name="" +animation/clip_158/start_frame=0 +animation/clip_158/end_frame=0 +animation/clip_158/loops=false +animation/clip_159/name="" +animation/clip_159/start_frame=0 +animation/clip_159/end_frame=0 +animation/clip_159/loops=false +animation/clip_160/name="" +animation/clip_160/start_frame=0 +animation/clip_160/end_frame=0 +animation/clip_160/loops=false +animation/clip_161/name="" +animation/clip_161/start_frame=0 +animation/clip_161/end_frame=0 +animation/clip_161/loops=false +animation/clip_162/name="" +animation/clip_162/start_frame=0 +animation/clip_162/end_frame=0 +animation/clip_162/loops=false +animation/clip_163/name="" +animation/clip_163/start_frame=0 +animation/clip_163/end_frame=0 +animation/clip_163/loops=false +animation/clip_164/name="" +animation/clip_164/start_frame=0 +animation/clip_164/end_frame=0 +animation/clip_164/loops=false +animation/clip_165/name="" +animation/clip_165/start_frame=0 +animation/clip_165/end_frame=0 +animation/clip_165/loops=false +animation/clip_166/name="" +animation/clip_166/start_frame=0 +animation/clip_166/end_frame=0 +animation/clip_166/loops=false +animation/clip_167/name="" +animation/clip_167/start_frame=0 +animation/clip_167/end_frame=0 +animation/clip_167/loops=false +animation/clip_168/name="" +animation/clip_168/start_frame=0 +animation/clip_168/end_frame=0 +animation/clip_168/loops=false +animation/clip_169/name="" +animation/clip_169/start_frame=0 +animation/clip_169/end_frame=0 +animation/clip_169/loops=false +animation/clip_170/name="" +animation/clip_170/start_frame=0 +animation/clip_170/end_frame=0 +animation/clip_170/loops=false +animation/clip_171/name="" +animation/clip_171/start_frame=0 +animation/clip_171/end_frame=0 +animation/clip_171/loops=false +animation/clip_172/name="" +animation/clip_172/start_frame=0 +animation/clip_172/end_frame=0 +animation/clip_172/loops=false +animation/clip_173/name="" +animation/clip_173/start_frame=0 +animation/clip_173/end_frame=0 +animation/clip_173/loops=false +animation/clip_174/name="" +animation/clip_174/start_frame=0 +animation/clip_174/end_frame=0 +animation/clip_174/loops=false +animation/clip_175/name="" +animation/clip_175/start_frame=0 +animation/clip_175/end_frame=0 +animation/clip_175/loops=false +animation/clip_176/name="" +animation/clip_176/start_frame=0 +animation/clip_176/end_frame=0 +animation/clip_176/loops=false +animation/clip_177/name="" +animation/clip_177/start_frame=0 +animation/clip_177/end_frame=0 +animation/clip_177/loops=false +animation/clip_178/name="" +animation/clip_178/start_frame=0 +animation/clip_178/end_frame=0 +animation/clip_178/loops=false +animation/clip_179/name="" +animation/clip_179/start_frame=0 +animation/clip_179/end_frame=0 +animation/clip_179/loops=false +animation/clip_180/name="" +animation/clip_180/start_frame=0 +animation/clip_180/end_frame=0 +animation/clip_180/loops=false +animation/clip_181/name="" +animation/clip_181/start_frame=0 +animation/clip_181/end_frame=0 +animation/clip_181/loops=false +animation/clip_182/name="" +animation/clip_182/start_frame=0 +animation/clip_182/end_frame=0 +animation/clip_182/loops=false +animation/clip_183/name="" +animation/clip_183/start_frame=0 +animation/clip_183/end_frame=0 +animation/clip_183/loops=false +animation/clip_184/name="" +animation/clip_184/start_frame=0 +animation/clip_184/end_frame=0 +animation/clip_184/loops=false +animation/clip_185/name="" +animation/clip_185/start_frame=0 +animation/clip_185/end_frame=0 +animation/clip_185/loops=false +animation/clip_186/name="" +animation/clip_186/start_frame=0 +animation/clip_186/end_frame=0 +animation/clip_186/loops=false +animation/clip_187/name="" +animation/clip_187/start_frame=0 +animation/clip_187/end_frame=0 +animation/clip_187/loops=false +animation/clip_188/name="" +animation/clip_188/start_frame=0 +animation/clip_188/end_frame=0 +animation/clip_188/loops=false +animation/clip_189/name="" +animation/clip_189/start_frame=0 +animation/clip_189/end_frame=0 +animation/clip_189/loops=false +animation/clip_190/name="" +animation/clip_190/start_frame=0 +animation/clip_190/end_frame=0 +animation/clip_190/loops=false +animation/clip_191/name="" +animation/clip_191/start_frame=0 +animation/clip_191/end_frame=0 +animation/clip_191/loops=false +animation/clip_192/name="" +animation/clip_192/start_frame=0 +animation/clip_192/end_frame=0 +animation/clip_192/loops=false +animation/clip_193/name="" +animation/clip_193/start_frame=0 +animation/clip_193/end_frame=0 +animation/clip_193/loops=false +animation/clip_194/name="" +animation/clip_194/start_frame=0 +animation/clip_194/end_frame=0 +animation/clip_194/loops=false +animation/clip_195/name="" +animation/clip_195/start_frame=0 +animation/clip_195/end_frame=0 +animation/clip_195/loops=false +animation/clip_196/name="" +animation/clip_196/start_frame=0 +animation/clip_196/end_frame=0 +animation/clip_196/loops=false +animation/clip_197/name="" +animation/clip_197/start_frame=0 +animation/clip_197/end_frame=0 +animation/clip_197/loops=false +animation/clip_198/name="" +animation/clip_198/start_frame=0 +animation/clip_198/end_frame=0 +animation/clip_198/loops=false +animation/clip_199/name="" +animation/clip_199/start_frame=0 +animation/clip_199/end_frame=0 +animation/clip_199/loops=false +animation/clip_200/name="" +animation/clip_200/start_frame=0 +animation/clip_200/end_frame=0 +animation/clip_200/loops=false +animation/clip_201/name="" +animation/clip_201/start_frame=0 +animation/clip_201/end_frame=0 +animation/clip_201/loops=false +animation/clip_202/name="" +animation/clip_202/start_frame=0 +animation/clip_202/end_frame=0 +animation/clip_202/loops=false +animation/clip_203/name="" +animation/clip_203/start_frame=0 +animation/clip_203/end_frame=0 +animation/clip_203/loops=false +animation/clip_204/name="" +animation/clip_204/start_frame=0 +animation/clip_204/end_frame=0 +animation/clip_204/loops=false +animation/clip_205/name="" +animation/clip_205/start_frame=0 +animation/clip_205/end_frame=0 +animation/clip_205/loops=false +animation/clip_206/name="" +animation/clip_206/start_frame=0 +animation/clip_206/end_frame=0 +animation/clip_206/loops=false +animation/clip_207/name="" +animation/clip_207/start_frame=0 +animation/clip_207/end_frame=0 +animation/clip_207/loops=false +animation/clip_208/name="" +animation/clip_208/start_frame=0 +animation/clip_208/end_frame=0 +animation/clip_208/loops=false +animation/clip_209/name="" +animation/clip_209/start_frame=0 +animation/clip_209/end_frame=0 +animation/clip_209/loops=false +animation/clip_210/name="" +animation/clip_210/start_frame=0 +animation/clip_210/end_frame=0 +animation/clip_210/loops=false +animation/clip_211/name="" +animation/clip_211/start_frame=0 +animation/clip_211/end_frame=0 +animation/clip_211/loops=false +animation/clip_212/name="" +animation/clip_212/start_frame=0 +animation/clip_212/end_frame=0 +animation/clip_212/loops=false +animation/clip_213/name="" +animation/clip_213/start_frame=0 +animation/clip_213/end_frame=0 +animation/clip_213/loops=false +animation/clip_214/name="" +animation/clip_214/start_frame=0 +animation/clip_214/end_frame=0 +animation/clip_214/loops=false +animation/clip_215/name="" +animation/clip_215/start_frame=0 +animation/clip_215/end_frame=0 +animation/clip_215/loops=false +animation/clip_216/name="" +animation/clip_216/start_frame=0 +animation/clip_216/end_frame=0 +animation/clip_216/loops=false +animation/clip_217/name="" +animation/clip_217/start_frame=0 +animation/clip_217/end_frame=0 +animation/clip_217/loops=false +animation/clip_218/name="" +animation/clip_218/start_frame=0 +animation/clip_218/end_frame=0 +animation/clip_218/loops=false +animation/clip_219/name="" +animation/clip_219/start_frame=0 +animation/clip_219/end_frame=0 +animation/clip_219/loops=false +animation/clip_220/name="" +animation/clip_220/start_frame=0 +animation/clip_220/end_frame=0 +animation/clip_220/loops=false +animation/clip_221/name="" +animation/clip_221/start_frame=0 +animation/clip_221/end_frame=0 +animation/clip_221/loops=false +animation/clip_222/name="" +animation/clip_222/start_frame=0 +animation/clip_222/end_frame=0 +animation/clip_222/loops=false +animation/clip_223/name="" +animation/clip_223/start_frame=0 +animation/clip_223/end_frame=0 +animation/clip_223/loops=false +animation/clip_224/name="" +animation/clip_224/start_frame=0 +animation/clip_224/end_frame=0 +animation/clip_224/loops=false +animation/clip_225/name="" +animation/clip_225/start_frame=0 +animation/clip_225/end_frame=0 +animation/clip_225/loops=false +animation/clip_226/name="" +animation/clip_226/start_frame=0 +animation/clip_226/end_frame=0 +animation/clip_226/loops=false +animation/clip_227/name="" +animation/clip_227/start_frame=0 +animation/clip_227/end_frame=0 +animation/clip_227/loops=false +animation/clip_228/name="" +animation/clip_228/start_frame=0 +animation/clip_228/end_frame=0 +animation/clip_228/loops=false +animation/clip_229/name="" +animation/clip_229/start_frame=0 +animation/clip_229/end_frame=0 +animation/clip_229/loops=false +animation/clip_230/name="" +animation/clip_230/start_frame=0 +animation/clip_230/end_frame=0 +animation/clip_230/loops=false +animation/clip_231/name="" +animation/clip_231/start_frame=0 +animation/clip_231/end_frame=0 +animation/clip_231/loops=false +animation/clip_232/name="" +animation/clip_232/start_frame=0 +animation/clip_232/end_frame=0 +animation/clip_232/loops=false +animation/clip_233/name="" +animation/clip_233/start_frame=0 +animation/clip_233/end_frame=0 +animation/clip_233/loops=false +animation/clip_234/name="" +animation/clip_234/start_frame=0 +animation/clip_234/end_frame=0 +animation/clip_234/loops=false +animation/clip_235/name="" +animation/clip_235/start_frame=0 +animation/clip_235/end_frame=0 +animation/clip_235/loops=false +animation/clip_236/name="" +animation/clip_236/start_frame=0 +animation/clip_236/end_frame=0 +animation/clip_236/loops=false +animation/clip_237/name="" +animation/clip_237/start_frame=0 +animation/clip_237/end_frame=0 +animation/clip_237/loops=false +animation/clip_238/name="" +animation/clip_238/start_frame=0 +animation/clip_238/end_frame=0 +animation/clip_238/loops=false +animation/clip_239/name="" +animation/clip_239/start_frame=0 +animation/clip_239/end_frame=0 +animation/clip_239/loops=false +animation/clip_240/name="" +animation/clip_240/start_frame=0 +animation/clip_240/end_frame=0 +animation/clip_240/loops=false +animation/clip_241/name="" +animation/clip_241/start_frame=0 +animation/clip_241/end_frame=0 +animation/clip_241/loops=false +animation/clip_242/name="" +animation/clip_242/start_frame=0 +animation/clip_242/end_frame=0 +animation/clip_242/loops=false +animation/clip_243/name="" +animation/clip_243/start_frame=0 +animation/clip_243/end_frame=0 +animation/clip_243/loops=false +animation/clip_244/name="" +animation/clip_244/start_frame=0 +animation/clip_244/end_frame=0 +animation/clip_244/loops=false +animation/clip_245/name="" +animation/clip_245/start_frame=0 +animation/clip_245/end_frame=0 +animation/clip_245/loops=false +animation/clip_246/name="" +animation/clip_246/start_frame=0 +animation/clip_246/end_frame=0 +animation/clip_246/loops=false +animation/clip_247/name="" +animation/clip_247/start_frame=0 +animation/clip_247/end_frame=0 +animation/clip_247/loops=false +animation/clip_248/name="" +animation/clip_248/start_frame=0 +animation/clip_248/end_frame=0 +animation/clip_248/loops=false +animation/clip_249/name="" +animation/clip_249/start_frame=0 +animation/clip_249/end_frame=0 +animation/clip_249/loops=false +animation/clip_250/name="" +animation/clip_250/start_frame=0 +animation/clip_250/end_frame=0 +animation/clip_250/loops=false +animation/clip_251/name="" +animation/clip_251/start_frame=0 +animation/clip_251/end_frame=0 +animation/clip_251/loops=false +animation/clip_252/name="" +animation/clip_252/start_frame=0 +animation/clip_252/end_frame=0 +animation/clip_252/loops=false +animation/clip_253/name="" +animation/clip_253/start_frame=0 +animation/clip_253/end_frame=0 +animation/clip_253/loops=false +animation/clip_254/name="" +animation/clip_254/start_frame=0 +animation/clip_254/end_frame=0 +animation/clip_254/loops=false +animation/clip_255/name="" +animation/clip_255/start_frame=0 +animation/clip_255/end_frame=0 +animation/clip_255/loops=false +animation/clip_256/name="" +animation/clip_256/start_frame=0 +animation/clip_256/end_frame=0 +animation/clip_256/loops=false diff --git a/project/blocky_game/items/rocket_launcher/rocket_launcher.png b/project/blocky_game/items/rocket_launcher/rocket_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..738228364664759e2d1717b30509018be8960217 GIT binary patch literal 5119 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 bLbj2rcYk$yd^k8#$!B)k>Q?bT&aeItu47AR literal 0 HcmV?d00001 diff --git a/project/blocky_game/items/rocket_launcher/rocket_launcher_sprite.png.import b/project/blocky_game/items/rocket_launcher/rocket_launcher_sprite.png.import new file mode 100644 index 0000000..223d32d --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/rocket_launcher_sprite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/rocket_launcher_sprite.png-16646f5a50978a86494ee5643a399252.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://blocky_game/items/rocket_launcher/rocket_launcher_sprite.png" +dest_files=[ "res://.import/rocket_launcher_sprite.png-16646f5a50978a86494ee5643a399252.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/project/blocky_game/items/rocket_launcher/smoke_particle.png b/project/blocky_game/items/rocket_launcher/smoke_particle.png new file mode 100644 index 0000000000000000000000000000000000000000..3a03d14c7184f618018f782ef181b7edbd7a1814 GIT binary patch literal 7008 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 literal 0 HcmV?d00001 diff --git a/project/blocky_game/items/rocket_launcher/smoke_particle.png.import b/project/blocky_game/items/rocket_launcher/smoke_particle.png.import new file mode 100644 index 0000000..8c50513 --- /dev/null +++ b/project/blocky_game/items/rocket_launcher/smoke_particle.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="StreamTexture" +path.s3tc="res://.import/smoke_particle.png-fb3550ba61ffc8fc9954e15c5a87c644.s3tc.stex" +path.etc2="res://.import/smoke_particle.png-fb3550ba61ffc8fc9954e15c5a87c644.etc2.stex" +metadata={ +"imported_formats": [ "s3tc", "etc2" ], +"vram_texture": true +} + +[deps] + +source_file="res://blocky_game/items/rocket_launcher/smoke_particle.png" +dest_files=[ "res://.import/smoke_particle.png-fb3550ba61ffc8fc9954e15c5a87c644.s3tc.stex", "res://.import/smoke_particle.png-fb3550ba61ffc8fc9954e15c5a87c644.etc2.stex" ] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=true +flags/filter=true +flags/mipmaps=true +flags/anisotropic=false +flags/srgb=1 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/project/blocky_game/player/avatar_interaction.gd b/project/blocky_game/player/avatar_interaction.gd index 24133b4..1de4e17 100644 --- a/project/blocky_game/player/avatar_interaction.gd +++ b/project/blocky_game/player/avatar_interaction.gd @@ -2,7 +2,9 @@ extends Node const Util = preload("res://common/util.gd") const Blocks = preload("../blocks/blocks.gd") +const ItemDB = preload("../items/item_db.gd") const InventoryItem = preload("./inventory_item.gd") +const Hotbar = preload("../gui/hotbar/hotbar.gd") const COLLISION_LAYER_AVATAR = 2 @@ -23,15 +25,16 @@ export(Material) var cursor_material = null # TODO Eventually invert these dependencies onready var _head : Camera = get_parent().get_node("Camera") -onready var _hotbar = get_node("../HotBar") +onready var _hotbar : Hotbar = get_node("../HotBar") onready var _block_types : Blocks = get_node("/root/Main/Blocks") +onready var _item_db : ItemDB = get_node("/root/Main/Items") onready var _water_updater = get_node("../../Water") var _terrain = null var _terrain_tool = null var _cursor = null var _action_place = false -var _action_remove = false +var _action_use = false var _action_pick = false @@ -62,7 +65,7 @@ func _get_pointed_voxel(): return hit -func _physics_process(delta): +func _physics_process(_delta): if _terrain == null: return @@ -74,34 +77,42 @@ func _physics_process(delta): else: _cursor.hide() DDD.set_text("Pointed voxel", "---") + + var inv_item := _hotbar.get_selected_item() # These inputs have to be in _fixed_process because they rely on collision queries - if hit != null: + if inv_item == null or inv_item.type == InventoryItem.TYPE_BLOCK: + if hit != null: + var hit_raw_id = _terrain_tool.get_voxel(hit.position) + var has_cube = hit_raw_id != 0 + + if _action_use and has_cube: + var pos = hit.position + _place_single_block(pos, 0) + + elif _action_place: + var pos = hit.previous_position + if has_cube == false: + pos = hit.position + if _can_place_voxel_at(pos): + if inv_item != null: + _place_single_block(pos, inv_item.id) + print("Place voxel at ", pos) + else: + print("Can't place here!") + + elif inv_item.type == InventoryItem.TYPE_ITEM: + if _action_use: + var item = _item_db.get_item(inv_item.id) + item.use(_head.global_transform) + + if _action_pick and hit != null: var hit_raw_id = _terrain_tool.get_voxel(hit.position) - var has_cube = hit_raw_id != 0 - - if _action_remove and has_cube: - var pos = hit.position - _place_single_block(pos, 0) - - elif _action_place: - var pos = hit.previous_position - if has_cube == false: - pos = hit.position - if _can_place_voxel_at(pos): - var item = _hotbar.get_selected_item() - if item != null and item.type == InventoryItem.TYPE_BLOCK: - _place_single_block(pos, item.id) - print("Place voxel at ", pos) - else: - print("Can't place here!") - - elif _action_pick: - var rm := _block_types.get_raw_mapping(hit_raw_id) - _hotbar.try_select_slot_by_block_id(rm.block_id) + var rm := _block_types.get_raw_mapping(hit_raw_id) + _hotbar.try_select_slot_by_block_id(rm.block_id) _action_place = false - _action_remove = false + _action_use = false _action_pick = false @@ -110,7 +121,7 @@ func _unhandled_input(event): if event.pressed: match event.button_index: BUTTON_LEFT: - _action_remove = true + _action_use = true BUTTON_RIGHT: _action_place = true BUTTON_MIDDLE: