From 20b0ce05de4043d81aebde52b6020bd74ba4f623 Mon Sep 17 00:00:00 2001 From: Segey Lapin Date: Tue, 30 Jul 2019 13:23:34 +0300 Subject: [PATCH] Ball implemented, started work on game AI --- proto2/ai/ball_game_ai3d.gd | 92 ++++++++++++++++++++ proto2/assets/ball_container.blend | Bin 681216 -> 681216 bytes proto2/autoloads/characters.gd | 3 + proto2/autoloads/controls.gd | 4 +- proto2/autoloads/world.gd | 1 + proto2/characters/character.gd | 12 ++- proto2/characters/female_2018.tscn | 10 +++ proto2/characters/male_2018.tscn | 9 ++ proto2/furniture/training_basket.gd | 9 +- proto2/{ => items}/ball/ball.escn | 0 proto2/{ => items}/ball/ball.escn.import | 6 +- proto2/items/ball/ball.gd | 43 ++++++++++ proto2/items/ball/ball.tscn | 15 ++++ proto2/items/item.gd | 68 +++++++++++++++ proto2/main.gd | 33 +++++++ proto2/main.tscn | 104 ++++++++++++++++++++--- proto2/project.godot | 12 +++ 17 files changed, 400 insertions(+), 21 deletions(-) create mode 100644 proto2/ai/ball_game_ai3d.gd rename proto2/{ => items}/ball/ball.escn (100%) rename proto2/{ => items}/ball/ball.escn.import (99%) create mode 100644 proto2/items/ball/ball.gd create mode 100644 proto2/items/ball/ball.tscn create mode 100644 proto2/items/item.gd diff --git a/proto2/ai/ball_game_ai3d.gd b/proto2/ai/ball_game_ai3d.gd new file mode 100644 index 0000000..9181b40 --- /dev/null +++ b/proto2/ai/ball_game_ai3d.gd @@ -0,0 +1,92 @@ +extends Node +class_name BallGameAI3D + +var _cheers = {} +var _game_area: AABB +var _teams = {} +var _main +var _state = STATE_INIT +var _ball_instance +var _cheer_locations = {} +var _team_start = {} +var _ball_carrier = null +var _ball_team = -1 +var ch2team: Dictionary = {} +var gate2team = {} +var _gates = {} +var _scores = {} + +enum {STATE_INIT, STATE_START, STATE_RUNNING, STATE_FINISH} +func _ready(): + _game_area = AABB() + +func set_ball(ball: Node): + _ball_instance = ball + +func add_player(team: int, pl: Dictionary): + if !_teams.has(team): + _teams[team] = [pl] + else: + _teams[team].push_back(pl) + assert pl != null + ch2team[pl.scene] = team +func add_cheer(team: int, ch: Dictionary): + if !_cheers.has(team): + _cheers[team] = [ch] + else: + _cheers[team].push_back(ch) + assert ch != null + ch2team[ch.scene] = team +func add_cheer_game_location(team: int, loc: Vector3): + if !_cheer_locations.has(team): + _cheer_locations[team] = [loc] + else: + _cheer_locations[team].push_back(loc) + _game_area = _game_area.expand(loc) +func set_team_start(team: int, v: Vector3): + _team_start[team] = v + _game_area = _game_area.expand(v) +func set_team_gate(team: int, gate: Area): + _gates[team] = gate + gate2team[gate] = team + gate.connect("body_entered", self, "check_goal", [gate]) + var o : = gate.global_transform.origin + _game_area = _game_area.expand(o) +func set_main(n): + _main = n +func start_game(): + var ball = _ball_instance + ball.add_to_group("ball") + _state = STATE_START + for t in _teams.keys(): + for ch in _teams[t]: + assert ch != null + print(ch) + assert ch.scene != null + print("start: ", _team_start[t]) + ch.scene.walkto(_team_start[t]) + var loc = 0 + for t in _cheers.keys(): + for ch in _cheers[t]: + assert ch != null + print(ch) + assert ch.scene != null + ch.scene.walkto(_cheer_locations[t][loc % _cheer_locations[t].size()]) + loc += 1 + for t in _teams.keys(): + _scores[t] = 0 +func stop_game(): +# for k in get_tree().get_nodes_in_group("ball"): +# k.queue_free() + _state = STATE_INIT + var max_score = -1 + var winner_team = -1 + for k in _scores.keys(): + if _scores[k] > max_score: + max_score = _scores[k] + winner_team = k + if winner_team >= 0: + for e in _teams[winner_team]: + world.increase_xp(e, min(e.xp * 2, min(100 * e.level, 1000))) + for e in _cheers[winner_team]: + world.increase_xp(e, min(e.xp * 2, min(200 * e.level, 2000))) diff --git a/proto2/assets/ball_container.blend b/proto2/assets/ball_container.blend index 059937277d967b2b18da99415b64af32ccd387b4..22182c58041bc5a417b95e86f766dbcdef2e858e 100644 GIT binary patch delta 711 zcmXw0Ur1A79NqW(cH7TsZu9!$W;9r#C?swVAL0<}-tZX7}c4+UJTW=+7 zy%q8&XuvSQx}q>BN@5{4q0(n|@#YX55F;jx5<&i6^**tY+aj^ou ztUV4%BGq3u?+QMzz-i3hHX7O1Fw{k2V6#`?v)Phd(hZ8vJxoo&0XdHy6*z8Jetn(S zBsXfh)kaOVipVR<$GjH6=^t0U&SJ|Xd?y$1U=mKk>l(JDILmX_roE`RslUj_7E`d? zDS2#rTAs&N9J_aZ3)X9>HPNBZ$MR+QGAJ%QCKUjF5iZUI4dw zKf`*vo?ibrJJ(N-wvZ?e#;M!f2*lSST5LC7Y}G{^*FTV0L>GYs{kUjQbhp)QtM8oebn)=P`#n7G^Sn=`Jy2;6)Qg~e znU`P6q~AhJ>LUwTCHCg$^x_?pNnkHZR^oH~c=A`Dgb%#PV<-b2wPq!~ZZL%x)_aJ$ z-UISs8Z?E~LotX8V)@+!7pUOP1ZQHGMm-rS!fC9yGmW^(nWYMj!mSwyz=(jo8HhTBG0yT|;H;3koPpJT@u8FN z^Sdx{m!&z1kt$0wZKRpj(?lK8C2n7dc4R#k{;t9%8N`qG;D#v0xp?a~KCZ(cKChT9 zYOMxH#FU%sOWhc}&-9OJaeU&Op+9HnD^pxQJJOL=cAmY24B^HSW6m1PS3LeTzxC>S{cUdnL!T@M7h;o?!OUP`*u`LF5EyJ~Y*KvX{0Fnw^D_Vd diff --git a/proto2/autoloads/characters.gd b/proto2/autoloads/characters.gd index b9bc151..bb670ed 100644 --- a/proto2/autoloads/characters.gd +++ b/proto2/autoloads/characters.gd @@ -12,3 +12,6 @@ func _ready(): # Called every frame. 'delta' is the elapsed time since the previous frame. #func _process(delta): # pass +#func _physics_process(delta): +# for obj in get_tree().get_nodes_in_group("characters"): +# pass diff --git a/proto2/autoloads/controls.gd b/proto2/autoloads/controls.gd index 639f658..ff7f783 100644 --- a/proto2/autoloads/controls.gd +++ b/proto2/autoloads/controls.gd @@ -27,7 +27,9 @@ func _process(delta): var tf_turn = Transform(Quat(Vector3(0, 1, 0), PI * 0.6 * delta)) frame_tf *= tf_turn if Input.is_action_just_pressed("action1"): - if monitored_objects.size() > 0: + if master_node.item_right_hand: + master_node.item_right_hand.activate() + elif monitored_objects.size() > 0: var closest = monitored_objects[0] var dst = master_node.global_transform.origin.distance_to(closest.global_transform.origin) for k in monitored_objects: diff --git a/proto2/autoloads/world.gd b/proto2/autoloads/world.gd index 143d5f0..d74952a 100644 --- a/proto2/autoloads/world.gd +++ b/proto2/autoloads/world.gd @@ -3,6 +3,7 @@ signal room_event signal next_day signal next_period signal level_up +signal start_training var money: int = 2000 var master_node diff --git a/proto2/characters/character.gd b/proto2/characters/character.gd index 0a4c01e..5754a52 100644 --- a/proto2/characters/character.gd +++ b/proto2/characters/character.gd @@ -5,6 +5,8 @@ var skel: Skeleton var anim_tree: AnimationTree var aplay: AnimationPlayer const GRAVITY = Vector3(0, -9.8, 0) +var ball_carry: Node +var item_right_hand: Node # Declare member variables here. Examples: # var a = 2 # var b = "text" @@ -33,6 +35,7 @@ func _ready(): anim.loop = true add_to_group("characters") add_to_group("activatable") + ball_carry = get_children()[0].get_children()[0].get_node("item_carry/ball_carry") func get_act(): return "Talk" @@ -61,7 +64,12 @@ func walkto(target: Vector3, spd: float = 1.4): set_walk_speed(spd) walk() -func _process(delta): +func take_object(obj): + if obj.is_in_group("items"): + obj.taken(self) + + +func _physics_process(delta): orientation = global_transform orientation.origin = Vector3() var sm: AnimationNodeStateMachinePlayback = anim_tree["parameters/base/playback"] @@ -84,7 +92,7 @@ func _process(delta): var direction: Vector3 = (next - global_transform.origin).normalized() var actual_direction: Vector3 = -global_transform.basis[2] var angle: float = Vector2(actual_direction.x, actual_direction.z).angle_to(Vector2(direction.x, direction.z)) - var tf_turn = Transform(Quat(Vector3(0, 1, 0), -angle * delta)) + var tf_turn = Transform(Quat(Vector3(0, 1, 0), -angle * min(delta * 2.0, 1.0))) orientation *= tf_turn if !_path || _path.size() == 0: idle() diff --git a/proto2/characters/female_2018.tscn b/proto2/characters/female_2018.tscn index f0b307e..d93672d 100644 --- a/proto2/characters/female_2018.tscn +++ b/proto2/characters/female_2018.tscn @@ -78,6 +78,16 @@ script = ExtResource( 1 ) [node name="female_2018" parent="." instance=ExtResource( 2 )] +[node name="female_2018" parent="female_2018" index="0"] +bones/132/bound_children = [ NodePath("item_carry") ] + +[node name="item_carry" type="BoneAttachment" parent="female_2018/female_2018" index="13"] +transform = Transform( 0.816538, -0.555132, -0.158408, 0.505615, 0.555284, 0.660309, -0.278598, -0.619263, 0.734095, 0.174373, 0.783361, -0.0350451 ) +bone_name = "wrist_R" + +[node name="ball_carry" type="Spatial" parent="female_2018/female_2018/item_carry"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.12, 0, 0 ) + [node name="AnimationTree" type="AnimationTree" parent="female_2018"] tree_root = SubResource( 14 ) anim_player = NodePath("../female_2018/AnimationPlayer") diff --git a/proto2/characters/male_2018.tscn b/proto2/characters/male_2018.tscn index 86ffea7..06aa573 100644 --- a/proto2/characters/male_2018.tscn +++ b/proto2/characters/male_2018.tscn @@ -74,6 +74,15 @@ script = ExtResource( 2 ) [node name="male_2018" parent="." instance=ExtResource( 1 )] +[node name="male_g_2018" parent="male_2018" index="0"] +bones/110/bound_children = [ NodePath("item_carry") ] + +[node name="item_carry" type="BoneAttachment" parent="male_2018/male_g_2018" index="9"] +transform = Transform( 0.579234, -0.742538, -0.336341, 0.736249, 0.299448, 0.606851, -0.349893, -0.59914, 0.720144, 0.334017, 1.00794, -0.175007 ) +bone_name = "wrist_R" + +[node name="ball_carry" type="Spatial" parent="male_2018/male_g_2018/item_carry"] + [node name="AnimationTree" type="AnimationTree" parent="male_2018"] tree_root = SubResource( 13 ) anim_player = NodePath("../male_g_2018/AnimationPlayer") diff --git a/proto2/furniture/training_basket.gd b/proto2/furniture/training_basket.gd index b517b39..4262830 100644 --- a/proto2/furniture/training_basket.gd +++ b/proto2/furniture/training_basket.gd @@ -9,9 +9,14 @@ func _ready(): add_to_group("activatable") func get_act(): - return "Start training" + return "Get a ball" func activate(): - print("Starting training...") + print("Getting a ball...") + var ball_st = load("res://items/ball/ball.tscn").instance() + get_node("/root/main").add_child(ball_st) + ball_st.global_transform = world.master_node.global_transform + ball_st.global_transform.origin += ball_st.global_transform.xform(Vector3(0, 0.5, -0.25)) + ball_st.taken(world.master_node) # Called every frame. 'delta' is the elapsed time since the previous frame. #func _process(delta): diff --git a/proto2/ball/ball.escn b/proto2/items/ball/ball.escn similarity index 100% rename from proto2/ball/ball.escn rename to proto2/items/ball/ball.escn diff --git a/proto2/ball/ball.escn.import b/proto2/items/ball/ball.escn.import similarity index 99% rename from proto2/ball/ball.escn.import rename to proto2/items/ball/ball.escn.import index 44b3f14..c2c7341 100644 --- a/proto2/ball/ball.escn.import +++ b/proto2/items/ball/ball.escn.import @@ -2,12 +2,12 @@ importer="scene" type="PackedScene" -path="res://.import/ball.escn-c244a295d2ddfac47ce2708f1bcb6791.scn" +path="res://.import/ball.escn-8722f09c6da73e6847feb641eaa35784.scn" [deps] -source_file="res://ball/ball.escn" -dest_files=[ "res://.import/ball.escn-c244a295d2ddfac47ce2708f1bcb6791.scn" ] +source_file="res://items/ball/ball.escn" +dest_files=[ "res://.import/ball.escn-8722f09c6da73e6847feb641eaa35784.scn" ] [params] diff --git a/proto2/items/ball/ball.gd b/proto2/items/ball/ball.gd new file mode 100644 index 0000000..c3eed5b --- /dev/null +++ b/proto2/items/ball/ball.gd @@ -0,0 +1,43 @@ +extends Item + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass +func _taken_act(pobj): + mode = RigidBody.MODE_KINEMATIC + collision_layer = 16 + collision_mask = 16 | 2 + get_parent().remove_child(self) + if pobj.is_in_group("characters"): + pobj.ball_carry.add_child(self) + transform = Transform() + pobj.item_right_hand = self + remove_from_group("activatable") + else: + pobj.add_child(self) + transform = Transform() + set_as_toplevel(false) + is_at_hands = true +func _dropped_act(pobj): + ._dropped_act(get_parent()) + pobj.item_right_hand = null + add_to_group("activatable") + +func get_take_act(): + return "Take ball" + +func get_drop_act(): + return "Drop ball" + +func activate(): + if is_at_hands: + dropped(world.master_node) + world.emit_signal("start_training", self) diff --git a/proto2/items/ball/ball.tscn b/proto2/items/ball/ball.tscn new file mode 100644 index 0000000..3aa2892 --- /dev/null +++ b/proto2/items/ball/ball.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://items/ball/ball.gd" type="Script" id=1] +[ext_resource path="res://items/ball/ball.escn" type="PackedScene" id=2] + +[sub_resource type="SphereShape" id=1] +radius = 0.25 + +[node name="ball" type="RigidBody"] +script = ExtResource( 1 ) + +[node name="ball" parent="." instance=ExtResource( 2 )] + +[node name="CollisionShape" type="CollisionShape" parent="."] +shape = SubResource( 1 ) diff --git a/proto2/items/item.gd b/proto2/items/item.gd new file mode 100644 index 0000000..08e8226 --- /dev/null +++ b/proto2/items/item.gd @@ -0,0 +1,68 @@ +extends RigidBody +class_name Item + +var _taken: bool = false +var _taken_by: Object +var _dropped: bool = false +var _dropped_by: Object +var is_at_hands: bool = false +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + +# Called when the node enters the scene tree for the first time. +func _ready(): + add_to_group("activatable") + +func get_take_act(): + return "Take item" + +func get_drop_act(): + return "Drop item" + +func get_act(): + if is_at_hands: + return get_drop_act() + else: + return get_take_act() +func activate(): + if is_at_hands: + dropped(world.master_node) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass +func _taken_act(pobj): + mode = RigidBody.MODE_KINEMATIC + collision_layer = 16 + collision_mask = 16 | 2 + get_parent().remove_child(self) + pobj.add_child(self) + transform = Transform() + set_as_toplevel(false) + is_at_hands = true +func _dropped_act(pobj): + mode = RigidBody.MODE_RIGID + collision_layer = 1 + collision_mask = 1 | 2 + get_parent().remove_child(self) + world.master_node.get_node("/root/main").add_child(self) + global_transform = pobj.global_transform + set_as_toplevel(true) + is_at_hands = false +func _physics_process(delta): + if _taken: + _taken_act(_taken_by) + _taken = false + _taken_by = null + if _dropped: + _dropped_act(_dropped_by) + _dropped = false + _dropped_by = null +func taken(pobj): + _taken = true + _taken_by = pobj +func dropped(pobj): + _dropped = true + _dropped_by = pobj diff --git a/proto2/main.gd b/proto2/main.gd index cf166c6..411ad9b 100644 --- a/proto2/main.gd +++ b/proto2/main.gd @@ -6,8 +6,11 @@ extends Spatial # Called when the node enters the scene tree for the first time. var frame_tf: Transform = Transform() +var ball_game : BallGameAI3D func master_control(pos): + var n = lerp(world.master_node.get_walk_speed(), 3.8, 0.1) + world.master_node.set_walk_speed(n) $master.walkto(pos) func update_quests(): @@ -28,6 +31,35 @@ func start_interaction(obj): else: obj.activate() +func start_training(ball): + print("start training") + ball_game = BallGameAI3D.new() + var t0 = $team0 + var t1 = $team1 + for k in t0.get_children(): + if k.name.begins_with("cheer"): + ball_game.add_cheer_game_location(0, k.global_transform.origin) + elif k.name == "start": + ball_game.set_team_start(0, k.global_transform.origin) + elif k.name == "gate": + ball_game.set_team_gate(0, k) + for k in t1.get_children(): + if k.name.begins_with("cheer"): + ball_game.add_cheer_game_location(1, k.global_transform.origin) + elif k.name == "start": + ball_game.set_team_start(1, k.global_transform.origin) + elif k.name == "gate": + ball_game.set_team_gate(1, k) + for ch in world.cheer_team.keys(): + assert world.cheer_team[ch] != null + ball_game.add_cheer(randi() % 2, world.cheer_team[ch]) + for ch in world.team.keys(): + assert world.team[ch] != null + ball_game.add_player(randi() % 2, world.team[ch]) + ball_game.set_ball(ball) + ball_game.set_main(self) + ball_game.start_game() + func _ready(): $master.add_to_group("master") controls.master_node = $master @@ -79,6 +111,7 @@ func _ready(): quest_timer.connect("timeout", self, "update_quests") quest_timer.start() controls.connect("action1", self, "start_interaction") + world.connect("start_training", self, "start_training") func _process(delta): var pos = $master.global_transform.origin diff --git a/proto2/main.tscn b/proto2/main.tscn index 40055a4..c022025 100644 --- a/proto2/main.tscn +++ b/proto2/main.tscn @@ -1,12 +1,12 @@ -[gd_scene load_steps=11 format=2] +[gd_scene load_steps=13 format=2] -[ext_resource path="res://ui/start_quest_notification.tscn" type="PackedScene" id=1] -[ext_resource path="res://walls/walls.tscn" type="PackedScene" id=2] +[ext_resource path="res://characters/male_2018.tscn" type="PackedScene" id=1] +[ext_resource path="res://furniture/training_basket.tscn" type="PackedScene" id=2] [ext_resource path="res://main.gd" type="Script" id=3] -[ext_resource path="res://characters/male_2018.tscn" type="PackedScene" id=4] -[ext_resource path="res://ui/interaction.tscn" type="PackedScene" id=5] -[ext_resource path="res://furniture/master_desk_act.tscn" type="PackedScene" id=6] -[ext_resource path="res://furniture/training_basket.tscn" type="PackedScene" id=7] +[ext_resource path="res://ui/start_quest_notification.tscn" type="PackedScene" id=4] +[ext_resource path="res://furniture/master_desk_act.tscn" type="PackedScene" id=5] +[ext_resource path="res://walls/walls.tscn" type="PackedScene" id=6] +[ext_resource path="res://ui/interaction.tscn" type="PackedScene" id=7] [sub_resource type="NavigationMesh" id=1] vertices = PoolVector3Array( 0.450001, 3.6, 14.3543, 9.65, 3.6, 14.1543, 0.450001, 3.6, 14.1543, 18.85, 3.6, 14.1543, 11.25, 3.6, 14.3543, 18.85, 3.6, 14.3543, -29.35, 3.6, 21.5543, -29.75, 3.6, 18.9543, -29.75, 3.6, 21.9543, -29.95, 3.6, 8.1543, -29.55, 3.6, 10.5543, -29.35, 3.6, 8.1543, -15.35, 3.6, 14.1543, -15.95, 3.6, 13.7543, -16.15, 3.6, 14.1543, -16.15, 3.6, 14.3543, -15.35, 3.6, 14.3543, 20.65, 3.6, 21.9543, 20.65, 3.6, 21.5543, 19.45, 3.6, 21.3543, 19.05, 3.6, 21.3543, 14.45, 3.6, 21.5543, 14.45, 3.6, 21.9543, 23.45, 3.6, 21.3543, 22.25, 3.6, 21.5543, 22.25, 3.6, 21.9543, 23.85, 3.6, 21.9543, -0.349998, 3.6, 21.5543, -7.95, 3.6, 21.5543, -8.55, 3.6, 21.9543, 2.05, 3.6, 21.9543, -29.95, 3.6, 4.9543, -29.55, 3.6, 4.9543, -29.35, 3.6, 3.5543, -29.35, 3.6, 3.1543, -29.55, 3.6, -6.4457, -29.95, 3.6, -6.0457, -16.15, 3.6, 14.3543, -15.95, 3.6, 16.3543, -15.55, 3.6, 16.3543, -15.35, 3.6, 14.3543, -8.15, 3.6, -38.8457, -8.55, 3.6, -38.6457, -0.349998, 3.6, -38.6457, 0.0499992, 3.6, -38.8457, -32.15, 3.6, 7.9543, -32.35, 3.6, 8.3543, -29.95, 3.6, 8.1543, -29.75, 3.6, 12.1543, -29.75, 3.6, 17.3543, -29.35, 3.6, 14.3543, -29.35, 3.6, 14.1543, -7.95, 3.6, 40.9543, -8.15, 3.6, 41.1543, 0.0499992, 3.6, 41.1543, 0.25, 3.6, 40.9543, -32.15, 3.6, 7.9543, -29.95, 3.6, 8.1543, -29.35, 3.6, 8.1543, -15.35, 3.6, 21.5543, -15.55, 3.6, 18.1543, -15.95, 3.6, 18.1543, -16.15, 3.6, 21.5543, -32.35, 3.6, 32.9543, -32.55, 3.6, 31.1543, -32.55, 3.6, 41.1543, -32.15, 3.6, 40.9543, -11.35, 3.6, -16.8457, -11.35, 3.6, -16.4457, -7.55, 3.6, -16.2457, -7.15, 3.6, -16.2457, -1.95, 3.6, -16.4457, -1.95, 3.6, -16.8457, -17.15, 3.6, -35.8457, -13.15, 3.6, -36.0457, -13.15, 3.6, -36.4457, -22.55, 3.6, -36.4457, -22.55, 3.6, -36.0457, -17.75, 3.6, -35.8457, -11.55, 3.6, -36.4457, -11.55, 3.6, -36.0457, -7.35, 3.6, -35.8457, -6.95, 3.6, -35.8457, -2.15, 3.6, -36.0457, -2.15, 3.6, -36.4457, -17.35, 3.6, -16.2457, -13.15, 3.6, -16.4457, -13.15, 3.6, -16.8457, -22.35, 3.6, -16.8457, -22.35, 3.6, -16.4457, -17.75, 3.6, -16.2457, -16.15, 3.6, 8.1543, -15.95, 3.6, 12.3543, -15.55, 3.6, 12.3543, -15.35, 3.6, 8.1543, -16.15, 3.6, 7.9543, 32.65, 3.6, -28.8457, 32.65, 3.6, -38.8457, 32.45, 3.6, -38.4457, 32.45, 3.6, -27.0457, -15.95, 3.6, 40.9543, -16.35, 3.6, 41.1543, -8.15, 3.6, 41.1543, -7.95, 3.6, 40.9543, 16.45, 3.6, 40.9543, 16.25, 3.6, 41.1543, 24.45, 3.6, 41.1543, 24.45, 3.6, 40.9543, 8.05, 3.6, 7.9543, 0.25, 3.6, 7.7543, 0.25, 3.6, 8.3543, 9.45, 3.6, 8.1543, -29.15, 3.6, -19.8457, -29.95, 3.6, -20.0457, -32.15, 3.6, -19.8457, 8.25, 3.6, 40.9543, 8.05, 3.6, 41.1543, 16.25, 3.6, 41.1543, 16.45, 3.6, 40.9543, -0.349998, 3.6, 3.1543, -0.349998, 3.6, 3.5543, 0.25, 3.6, 7.7543, 0.25, 3.6, -3.8457, -0.149998, 3.6, -8.2457, 32.45, 3.6, 32.5543, 32.45, 3.6, 40.7543, 32.65, 3.6, 41.1543, 32.65, 3.6, 31.1543, -7.15, 3.6, 2.9543, -7.75, 3.6, 3.5543, -0.349998, 3.6, 3.5543, -0.349998, 3.6, 3.1543, -32.55, 3.6, -18.8457, -32.35, 3.6, -19.2457, -32.15, 3.6, -19.8457, -32.35, 3.6, -29.0457, -32.55, 3.6, -28.8457, -7.35, 3.6, -20.0457, -16.95, 3.6, -19.8457, -16.55, 3.6, -19.4457, -8.55, 3.6, -19.4457, -6.95, 3.6, -20.0457, 32.45, 3.6, 40.7543, 24.45, 3.6, 40.9543, 24.45, 3.6, 41.1543, 32.65, 3.6, 41.1543, 0.25, 3.6, 40.9543, 0.0499992, 3.6, 41.1543, 8.05, 3.6, 41.1543, 8.25, 3.6, 40.9543, -24.15, 3.6, 7.9543, -32.15, 3.6, 7.9543, -29.35, 3.6, 8.1543, -22.75, 3.6, 8.1543, 24.45, 3.6, -38.8457, 16.25, 3.6, -38.8457, 16.25, 3.6, -38.6457, 24.45, 3.6, -38.6457, -29.35, 3.6, -35.8457, -24.15, 3.6, -36.0457, -24.15, 3.6, -36.4457, -29.95, 3.6, -36.4457, 24.45, 3.6, -38.8457, 24.45, 3.6, -38.6457, 32.45, 3.6, -38.4457, 32.65, 3.6, -38.8457, -24.55, 3.6, -38.8457, -24.55, 3.6, -38.6457, -16.55, 3.6, -38.6457, -16.35, 3.6, -38.8457, -29.55, 3.6, -16.2457, -29.95, 3.6, -16.8457, -29.95, 3.6, -6.0457, -29.55, 3.6, -6.4457, -24.15, 3.6, 40.9543, -24.55, 3.6, 41.1543, -16.35, 3.6, 41.1543, -15.95, 3.6, 40.9543, -29.55, 3.6, -16.2457, -24.15, 3.6, -16.4457, -24.15, 3.6, -16.8457, -29.95, 3.6, -16.8457, 32.65, 3.6, -18.8457, 32.65, 3.6, -28.8457, 32.45, 3.6, -27.0457, 32.45, 3.6, -15.4457, -0.349998, 3.6, 14.3543, 0.450001, 3.6, 14.3543, 0.450001, 3.6, 14.1543, 0.25, 3.6, 8.3543, -0.149998, 3.6, 8.3543, -0.349998, 3.6, 14.1543, 23.45, 3.6, 21.3543, 23.85, 3.6, 21.9543, 23.85, 3.6, 15.1543, 23.45, 3.6, 14.5543, -0.149998, 3.6, 8.3543, 0.25, 3.6, 8.3543, -0.149998, 3.6, 7.7543, -8.15, 3.6, 7.9543, -7.75, 3.6, 8.1543, 23.45, 3.6, 14.5543, 23.85, 3.6, 15.1543, 23.85, 3.6, 8.3543, 23.25, 3.6, 8.1543, -0.349998, 3.6, 14.3543, -0.349998, 3.6, 21.5543, 0.25, 3.6, 21.3543, 0.450001, 3.6, 14.3543, -32.35, 3.6, -12.4457, -32.35, 3.6, -19.2457, -32.55, 3.6, -18.8457, -32.55, 3.6, -8.8457, -0.349998, 3.6, 3.5543, -0.149998, 3.6, 7.7543, 0.25, 3.6, 8.3543, 0.25, 3.6, 7.7543, -32.35, 3.6, -5.6457, -32.35, 3.6, -12.4457, -32.55, 3.6, -8.8457, 12.85, 3.6, 21.9543, 12.85, 3.6, 21.5543, 6.45, 3.6, 21.5543, 2.05, 3.6, 21.9543, 32.45, 3.6, 24.1543, 32.25, 3.6, 24.7543, 32.45, 3.6, 32.5543, 32.65, 3.6, 31.1543, 2.05, 3.6, 21.9543, 6.45, 3.6, 21.5543, 0.25, 3.6, 21.3543, -0.349998, 3.6, 21.5543, -16.15, 3.6, 7.9543, -24.15, 3.6, 7.9543, -22.75, 3.6, 8.1543, -16.15, 3.6, 8.1543, 32.45, 3.6, 15.9543, 32.45, 3.6, 24.1543, 32.65, 3.6, 21.1543, 32.65, 3.6, 11.1543, 32.45, 3.6, -15.4457, 32.45, 3.6, -3.8457, 32.65, 3.6, -8.8457, 32.65, 3.6, -18.8457, -22.75, 3.6, 14.1543, -29.35, 3.6, 14.1543, -29.35, 3.6, 14.3543, -22.75, 3.6, 14.3543, 32.45, 3.6, 24.1543, 32.65, 3.6, 31.1543, 32.65, 3.6, 21.1543, -16.15, 3.6, 14.1543, -22.75, 3.6, 14.1543, -22.75, 3.6, 14.3543, -16.15, 3.6, 14.3543, -16.55, 3.6, -19.4457, -16.95, 3.6, -19.8457, -17.75, 3.6, -20.0457, -29.15, 3.6, -19.8457, -24.55, 3.6, -19.4457, -17.15, 3.6, -35.8457, -17.75, 3.6, -35.8457, -17.75, 3.6, -28.0457, -17.15, 3.6, -27.8457, 16.25, 3.6, 7.9543, 8.05, 3.6, 7.9543, 9.45, 3.6, 8.1543, 18.85, 3.6, 8.1543, 18.85, 3.6, 14.3543, 19.05, 3.6, 21.3543, 19.45, 3.6, 21.3543, 19.45, 3.6, 14.7543, 18.85, 3.6, 14.1543, -7.15, 3.6, 2.9543, -7.15, 3.6, -6.6457, -7.55, 3.6, -6.6457, -7.55, 3.6, 2.9543, 8.05, 3.6, -38.8457, 0.0499992, 3.6, -38.8457, 0.25, 3.6, -38.4457, 8.05, 3.6, -38.6457, 18.85, 3.6, 14.1543, 19.45, 3.6, 14.7543, 19.45, 3.6, 8.3543, 18.85, 3.6, 8.1543, 18.85, 3.6, 8.1543, 23.25, 3.6, 8.1543, 24.45, 3.6, 7.9543, 16.25, 3.6, 7.9543, 18.85, 3.6, 8.1543, 19.45, 3.6, 8.3543, 23.25, 3.6, 8.1543, -32.35, 3.6, -5.6457, -32.55, 3.6, -8.8457, -32.55, 3.6, 1.1543, -32.35, 3.6, 1.1543, -0.349998, 3.6, -38.6457, -0.149998, 3.6, -29.4457, 0.25, 3.6, -27.0457, 0.25, 3.6, -38.4457, 0.0499992, 3.6, -38.8457, -32.15, 3.6, 7.9543, -32.35, 3.6, 1.1543, -32.55, 3.6, 1.1543, -32.35, 3.6, 8.3543, -22.75, 3.6, 21.5543, -29.35, 3.6, 21.5543, -29.75, 3.6, 21.9543, -19.15, 3.6, 21.9543, -17.15, 3.6, -27.8457, -17.75, 3.6, -28.0457, -17.75, 3.6, -20.0457, -16.95, 3.6, -19.8457, -16.15, 3.6, 21.5543, -22.75, 3.6, 21.5543, -19.15, 3.6, 21.9543, -15.35, 3.6, 21.5543, -16.15, 3.6, 21.5543, -19.15, 3.6, 21.9543, -15.35, 3.6, 21.5543, -19.15, 3.6, 21.9543, -8.55, 3.6, 21.9543, -7.95, 3.6, 21.5543, -32.35, 3.6, -19.2457, -24.55, 3.6, -19.4457, -29.15, 3.6, -19.8457, -32.15, 3.6, -19.8457, -8.15, 3.6, 7.9543, -16.15, 3.6, 7.9543, -15.35, 3.6, 8.1543, -7.75, 3.6, 8.1543, -14.95, 3.6, 3.5543, -7.75, 3.6, 3.5543, -7.15, 3.6, 2.9543, -7.55, 3.6, 2.9543, -17.15, 3.6, 3.1543, 0.25, 3.6, -27.0457, -0.149998, 3.6, -29.4457, -0.149998, 3.6, -20.0457, 0.25, 3.6, -15.4457, -32.35, 3.6, 8.3543, -32.55, 3.6, 1.1543, -32.55, 3.6, 11.1543, -32.35, 3.6, 16.3543, -32.35, 3.6, 8.3543, -32.55, 3.6, 11.1543, -32.55, 3.6, 21.1543, 16.25, 3.6, -38.8457, 8.05, 3.6, -38.8457, 8.05, 3.6, -38.6457, 16.25, 3.6, -38.6457, -32.15, 3.6, 24.3543, -32.35, 3.6, 16.3543, -32.55, 3.6, 21.1543, -32.35, 3.6, 24.9543, -6.95, 3.6, -20.0457, -6.95, 3.6, -28.0457, -7.35, 3.6, -28.0457, -7.35, 3.6, -20.0457, -32.35, 3.6, 24.9543, -32.55, 3.6, 21.1543, -32.55, 3.6, 31.1543, -32.35, 3.6, 32.9543, -17.35, 3.6, -6.4457, -17.75, 3.6, -6.6457, -17.75, 3.6, 2.9543, -17.15, 3.6, 3.1543, -7.95, 3.6, 14.1543, -15.35, 3.6, 14.1543, -15.35, 3.6, 14.3543, -7.95, 3.6, 14.3543, -7.15, 3.6, -6.6457, -7.15, 3.6, -16.2457, -7.55, 3.6, -16.2457, -7.55, 3.6, -6.6457, -0.349998, 3.6, 14.1543, -7.95, 3.6, 14.1543, -7.95, 3.6, 14.3543, -0.349998, 3.6, 14.3543, -22.15, 3.6, 3.5543, -14.95, 3.6, 3.5543, -17.15, 3.6, 3.1543, -16.35, 3.6, -38.8457, -16.55, 3.6, -38.6457, -8.55, 3.6, -38.6457, -8.15, 3.6, -38.8457, 24.45, 3.6, 24.3543, 24.05, 3.6, 24.7543, 32.25, 3.6, 24.7543, 32.45, 3.6, 24.1543, -0.349998, 3.6, -19.4457, -0.149998, 3.6, -8.2457, 0.25, 3.6, -3.8457, 0.25, 3.6, -15.4457, -0.149998, 3.6, -20.0457, -32.15, 3.6, 24.3543, -32.35, 3.6, 24.9543, -24.55, 3.6, 24.7543, -24.15, 3.6, 24.3543, -32.15, 3.6, 40.9543, -32.55, 3.6, 41.1543, -24.55, 3.6, 41.1543, -24.15, 3.6, 40.9543, -29.35, 3.6, -35.8457, -29.95, 3.6, -36.4457, -29.95, 3.6, -28.2457, -29.35, 3.6, -27.8457, -32.35, 3.6, -38.4457, -32.55, 3.6, -38.8457, -32.55, 3.6, -28.8457, -32.35, 3.6, -29.0457, -24.55, 3.6, -38.8457, -32.55, 3.6, -38.8457, -32.35, 3.6, -38.4457, -24.55, 3.6, -38.6457, -22.15, 3.6, 3.5543, -17.15, 3.6, 3.1543, -17.75, 3.6, 2.9543, -29.35, 3.6, 3.1543, -29.35, 3.6, 3.5543, -6.95, 3.6, -28.0457, -6.95, 3.6, -35.8457, -7.35, 3.6, -35.8457, -7.35, 3.6, -28.0457, 32.25, 3.6, 8.1543, 32.45, 3.6, 7.7543, 24.45, 3.6, 7.9543, 23.25, 3.6, 8.1543, 23.85, 3.6, 8.3543, -24.15, 3.6, 24.3543, -24.55, 3.6, 24.7543, -16.35, 3.6, 24.7543, -15.95, 3.6, 24.3543, 32.65, 3.6, 11.1543, 32.45, 3.6, 7.7543, 32.25, 3.6, 8.1543, 32.45, 3.6, 15.9543, -15.95, 3.6, 24.3543, -16.35, 3.6, 24.7543, -8.35, 3.6, 24.7543, -7.95, 3.6, 24.3543, -0.349998, 3.6, -19.4457, -0.149998, 3.6, -20.0457, -6.95, 3.6, -20.0457, -8.55, 3.6, -19.4457, -7.95, 3.6, 24.3543, -8.35, 3.6, 24.7543, -0.149998, 3.6, 24.7543, 0.25, 3.6, 24.3543, 32.45, 3.6, 7.7543, 32.65, 3.6, 11.1543, 32.65, 3.6, 1.1543, 32.45, 3.6, -3.8457, 0.25, 3.6, 24.3543, -0.149998, 3.6, 24.7543, 7.85, 3.6, 24.7543, 8.25, 3.6, 24.3543, 32.65, 3.6, 1.1543, 32.65, 3.6, -8.8457, 32.45, 3.6, -3.8457, 8.25, 3.6, 24.3543, 7.85, 3.6, 24.7543, 16.05, 3.6, 24.7543, 16.45, 3.6, 24.3543, -17.35, 3.6, -16.2457, -17.75, 3.6, -16.2457, -17.75, 3.6, -6.6457, -17.35, 3.6, -6.4457, 16.45, 3.6, 24.3543, 16.05, 3.6, 24.7543, 24.05, 3.6, 24.7543, 24.45, 3.6, 24.3543, -29.35, 3.6, -27.8457, -29.95, 3.6, -28.2457, -29.95, 3.6, -20.0457, -29.15, 3.6, -19.8457, -23.75, 0.8, -36.2457, -22.95, 0.8, -36.2457, -22.75, 0.8, -36.8457, -24.15, 0.8, -38.2457, -23.95, 0.8, -36.8457, -12.95, 0.8, -36.8457, -12.75, 0.8, -36.2457, -11.95, 0.8, -36.2457, -11.75, 0.8, -36.8457, -30.35, 0.8, -36.6457, -23.95, 0.8, -36.8457, -24.15, 0.8, -38.2457, -31.95, 0.8, -38.2457, -22.75, 0.8, -36.8457, -12.95, 0.8, -36.8457, -16.35, 0.8, -38.2457, -24.15, 0.8, -38.2457, -1.95, 0.8, -36.8457, -1.75, 0.8, -36.2457, -0.549999, 0.8, -36.2457, -0.549999, 0.8, -38.2457, -30.35, 0.8, -36.6457, -31.95, 0.8, -38.2457, -31.95, 0.8, -29.2457, -30.35, 0.8, -28.4457, -1.95, 0.8, -36.8457, -0.549999, 0.8, -38.2457, -8.55, 0.8, -38.2457, -11.75, 0.8, -36.8457, -31.95, 0.8, -20.2457, -30.35, 0.8, -20.2457, -30.35, 0.8, -28.4457, -31.95, 0.8, -29.2457, -12.95, 0.8, -36.8457, -11.75, 0.8, -36.8457, -8.55, 0.8, -38.2457, -16.35, 0.8, -38.2457, 14.65, 0.8, 7.5543, 14.85, 0.8, 7.9543, 15.45, 0.8, 7.9543, 0.650002, 0.8, -2.8457, 0.0499992, 0.8, -2.6457, 0.0499992, 0.8, -2.0457, 0.650002, 0.8, -1.8457, 16.25, 0.8, -38.2457, 8.45, 0.8, -38.2457, 0.650002, 0.8, -26.8457, 0.650002, 0.8, -18.8457, 14.65, 0.8, 7.5543, 15.45, 0.8, 7.9543, 15.65, 0.8, 7.5543, 0.650002, 0.8, -10.8457, 0.650002, 0.8, -2.8457, 0.0499992, 0.8, -35.6457, 0.0499992, 0.8, -34.8457, 0.650002, 0.8, -34.6457, 8.45, 0.8, -38.2457, 0.650002, 0.8, -35.8457, 32.05, 0.8, -26.8457, 24.05, 0.8, -38.2457, 16.25, 0.8, -38.2457, 32.05, 0.8, -15.4457, 8.45, 0.8, -38.2457, 0.650002, 0.8, -38.2457, 0.650002, 0.8, -35.8457, 15.65, 0.8, 7.5543, 23.85, 0.8, 7.5543, 32.05, 0.8, -4.0457, 0.650002, 0.8, -1.8457, 0.650002, 0.8, 7.5543, 7.65, 0.8, 7.5543, 0.650002, 0.8, -2.8457, 0.650002, 0.8, -1.8457, 7.65, 0.8, 7.5543, 14.65, 0.8, 7.5543, 8.45, 0.8, -38.2457, 0.650002, 0.8, -34.6457, 0.650002, 0.8, -26.8457, 32.05, 0.8, -26.8457, 32.05, 0.8, -38.2457, 24.05, 0.8, -38.2457, 23.85, 0.8, 7.5543, 32.05, 0.8, 7.5543, 32.05, 0.8, -4.0457, 15.65, 0.8, 7.5543, 32.05, 0.8, -4.0457, 32.05, 0.8, -15.4457, 16.25, 0.8, -38.2457, 0.650002, 0.8, -18.8457, 0.650002, 0.8, -10.8457, -29.55, 0.8, -28.0457, -29.35, 0.8, -36.2457, -29.75, 0.8, -36.2457, -29.75, 0.8, -27.8457, -29.95, 0.8, -19.8457, -29.35, 0.8, -19.6457, -29.55, 0.8, -28.0457, -29.75, 0.8, -27.8457, -22.95, 0.8, -36.2457, -23.75, 0.8, -36.2457, -23.95, 0.8, -35.6457, -22.75, 0.8, -35.6457, -18.15, 0.8, -28.0457, -22.75, 0.8, -35.6457, -23.95, 0.8, -35.6457, -28.95, 0.8, -28.0457, -28.95, 0.8, -20.2457, -18.15, 0.8, -20.2457, -18.15, 0.8, -28.0457, -18.15, 0.8, -35.6457, -22.75, 0.8, -35.6457, -23.95, 0.8, -35.6457, -28.95, 0.8, -35.6457, -28.95, 0.8, -28.0457, -17.35, 0.8, -28.0457, -17.15, 0.8, -36.2457, -17.75, 0.8, -36.2457, -17.55, 0.8, -28.0457, -17.55, 0.8, -28.0457, -17.75, 0.8, -19.6457, -17.15, 0.8, -19.6457, -17.35, 0.8, -28.0457, -11.95, 0.8, -36.2457, -12.75, 0.8, -36.2457, -12.95, 0.8, -35.6457, -11.75, 0.8, -35.6457, -7.75, 0.8, -28.0457, -11.75, 0.8, -35.6457, -12.95, 0.8, -35.6457, -16.75, 0.8, -28.0457, -16.75, 0.8, -20.2457, -7.75, 0.8, -20.2457, -12.95, 0.8, -35.6457, -16.75, 0.8, -35.6457, -16.75, 0.8, -28.0457, -7.75, 0.8, -28.0457, -7.75, 0.8, -35.6457, -11.75, 0.8, -35.6457, 0.0499992, 0.8, -34.8457, 0.0499992, 0.8, -35.6457, -0.549999, 0.8, -35.8457, -0.549999, 0.8, -34.6457, 0.0499992, 0.8, -34.8457, -0.549999, 0.8, -35.8457, -1.75, 0.8, -36.2457, -1.95, 0.8, -35.6457, -0.549999, 0.8, -35.8457, -0.549999, 0.8, -36.2457, -1.75, 0.8, -36.2457, -0.549999, 0.8, -34.6457, -1.95, 0.8, -35.6457, -6.55, 0.8, -35.6457, -6.55, 0.8, -28.0457, -0.549999, 0.8, -27.4457, -6.55, 0.8, -20.2457, -0.549999, 0.8, -20.2457, -0.549999, 0.8, -27.4457, -6.55, 0.8, -28.0457, -23.95, 0.8, -17.2457, -23.75, 0.8, -16.6457, -22.75, 0.8, -16.6457, -22.55, 0.8, -17.2457, -24.15, 0.8, -19.0457, -12.95, 0.8, -17.2457, -12.75, 0.8, -16.6457, -11.75, 0.8, -16.6457, -11.55, 0.8, -17.2457, -1.75, 0.8, -17.2457, -1.55, 0.8, -16.6457, -0.549999, 0.8, -16.6457, -0.549999, 0.8, -19.0457, -16.35, 0.8, -19.0457, -24.15, 0.8, -19.0457, -22.55, 0.8, -17.2457, -12.95, 0.8, -17.2457, -12.95, 0.8, -17.2457, -11.55, 0.8, -17.2457, -8.55, 0.8, -19.0457, -16.35, 0.8, -19.0457, -24.15, 0.8, -19.0457, -31.95, 0.8, -19.0457, -30.15, 0.8, -17.2457, -23.95, 0.8, -17.2457, -31.95, 0.8, -15.4457, -30.35, 0.8, -15.4457, -30.15, 0.8, -17.2457, -31.95, 0.8, -19.0457, -1.75, 0.8, -17.2457, -0.549999, 0.8, -19.0457, -8.55, 0.8, -19.0457, -11.55, 0.8, -17.2457, -22.75, 0.8, -16.6457, -23.75, 0.8, -16.6457, -23.95, 0.8, -16.0457, -22.55, 0.8, -16.0457, -18.15, 0.8, -6.6457, -22.55, 0.8, -16.0457, -23.95, 0.8, -16.0457, -29.15, 0.8, -6.6457, -29.15, 0.8, 2.7543, -18.15, 0.8, 2.7543, -18.15, 0.8, -6.6457, -18.15, 0.8, -16.0457, -22.55, 0.8, -16.0457, -23.95, 0.8, -16.0457, -29.15, 0.8, -16.0457, -29.15, 0.8, -6.6457, -11.75, 0.8, -16.6457, -12.75, 0.8, -16.6457, -12.95, 0.8, -16.0457, -11.55, 0.8, -16.0457, -7.95, 0.8, -6.6457, -11.55, 0.8, -16.0457, -12.95, 0.8, -16.0457, -16.95, 0.8, -6.6457, -16.95, 0.8, 2.7543, -7.95, 0.8, 2.7543, -7.95, 0.8, -6.6457, -7.95, 0.8, -16.0457, -11.55, 0.8, -16.0457, -12.95, 0.8, -16.0457, -16.95, 0.8, -16.0457, -16.95, 0.8, -6.6457, 0.0499992, 0.8, -2.0457, 0.0499992, 0.8, -2.6457, -0.549999, 0.8, -2.8457, -0.549999, 0.8, -1.8457, -6.75, 0.8, -6.6457, -6.75, 0.8, 2.7543, -0.549999, 0.8, -1.8457, -0.549999, 0.8, -2.8457, -0.549999, 0.8, -16.6457, -1.55, 0.8, -16.6457, -1.75, 0.8, -16.0457, -0.549999, 0.8, -9.8457, -0.549999, 0.8, -9.8457, -1.75, 0.8, -16.0457, -6.75, 0.8, -16.0457, -6.75, 0.8, -6.6457, -0.549999, 0.8, -2.8457, -6.75, 0.8, 2.7543, -0.549999, 0.8, 2.7543, -0.549999, 0.8, -1.8457, -28.95, 0.8, 7.5543, -29.15, 0.8, 4.9543, -29.35, 0.8, 5.3543, -28.95, 0.8, 7.5543, -29.35, 0.8, 5.3543, -30.35, 0.8, 5.1543, -31.95, 0.8, 7.5543, -30.35, 0.8, -5.2457, -30.35, 0.8, -15.4457, -31.95, 0.8, -15.4457, -31.95, 0.8, -4.0457, -31.95, 0.8, -4.0457, -31.95, 0.8, 7.5543, -30.35, 0.8, 5.1543, -30.35, 0.8, -5.2457, -29.15, 0.8, 3.9543, -29.15, 0.8, 4.9543, -28.95, 0.8, 7.5543, -21.95, 0.8, 7.5543, -22.15, 0.8, 3.9543, -7.75, 0.8, 7.5543, -0.549999, 0.8, 7.5543, -0.549999, 0.8, 3.9543, -7.75, 0.8, 3.9543, -7.75, 0.8, 3.9543, -14.95, 0.8, 3.9543, -14.75, 0.8, 7.5543, -7.75, 0.8, 7.5543, -14.95, 0.8, 3.9543, -22.15, 0.8, 3.9543, -21.95, 0.8, 7.5543, -14.75, 0.8, 7.5543, 15.65, 0.8, 8.5543, 15.45, 0.8, 7.9543, 14.85, 0.8, 7.9543, 14.65, 0.8, 8.5543, 7.65, 0.8, 8.5543, 0.650002, 0.8, 8.5543, 0.650002, 0.8, 13.7543, 9.85, 0.8, 13.7543, 10.05, 0.8, 14.3543, 10.85, 0.8, 14.3543, 11.05, 0.8, 13.7543, 9.85, 0.8, 13.7543, 11.05, 0.8, 13.7543, 14.65, 0.8, 8.5543, 7.65, 0.8, 8.5543, 9.85, 0.8, 13.7543, 18.65, 0.8, 13.7543, 18.65, 0.8, 8.5543, 15.65, 0.8, 8.5543, 18.65, 0.8, 13.7543, 15.65, 0.8, 8.5543, 14.65, 0.8, 8.5543, 11.05, 0.8, 13.7543, -30.15, 0.8, 18.7543, -29.55, 0.8, 18.5543, -29.55, 0.8, 17.7543, -30.15, 0.8, 17.5543, -30.15, 0.8, 11.9543, -29.55, 0.8, 11.7543, -29.55, 0.8, 10.9543, -30.15, 0.8, 10.7543, -30.15, 0.8, 18.7543, -31.95, 0.8, 16.1543, -31.95, 0.8, 23.9543, -30.15, 0.8, 22.1543, -30.15, 0.8, 11.9543, -31.95, 0.8, 8.5543, -31.95, 0.8, 16.1543, -30.15, 0.8, 17.5543, -29.75, 0.8, 23.9543, -29.75, 0.8, 22.3543, -30.15, 0.8, 22.1543, -31.95, 0.8, 23.9543, -30.15, 0.8, 18.7543, -30.15, 0.8, 17.5543, -31.95, 0.8, 16.1543, -30.15, 0.8, 10.7543, -30.15, 0.8, 8.5543, -31.95, 0.8, 8.5543, -30.15, 0.8, 11.9543, -30.15, 0.8, 10.7543, -31.95, 0.8, 8.5543, -15.75, 0.8, 13.3543, -15.75, 0.8, 12.7543, -16.35, 0.8, 12.5543, -22.75, 0.8, 13.7543, -16.35, 0.8, 13.7543, -29.55, 0.8, 10.9543, -29.55, 0.8, 11.7543, -29.15, 0.8, 11.9543, -29.15, 0.8, 10.7543, -29.15, 0.8, 11.9543, -29.15, 0.8, 13.7543, -22.75, 0.8, 13.7543, -22.75, 0.8, 8.5543, -29.15, 0.8, 8.5543, -29.15, 0.8, 10.7543, -22.75, 0.8, 8.5543, -29.15, 0.8, 10.7543, -29.15, 0.8, 11.9543, -22.75, 0.8, 13.7543, -16.35, 0.8, 12.5543, -16.35, 0.8, 8.5543, -15.15, 0.8, 12.5543, -15.75, 0.8, 12.7543, -15.75, 0.8, 13.3543, -15.15, 0.8, 13.7543, -7.95, 0.8, 13.7543, -7.95, 0.8, 8.5543, -15.15, 0.8, 8.5543, -15.15, 0.8, 12.5543, -7.95, 0.8, 13.7543, -7.95, 0.8, 13.7543, -0.549999, 0.8, 13.7543, -0.549999, 0.8, 8.5543, -7.95, 0.8, 8.5543, 21.05, 0.8, 21.7543, 21.85, 0.8, 21.7543, 22.05, 0.8, 21.1543, 20.85, 0.8, 21.1543, 19.85, 0.8, 14.7543, 20.85, 0.8, 21.1543, 22.05, 0.8, 21.1543, 23.05, 0.8, 14.7543, 23.05, 0.8, 8.5543, 19.85, 0.8, 8.5543, 22.05, 0.8, 21.1543, 23.05, 0.8, 21.1543, 23.05, 0.8, 14.7543, 19.85, 0.8, 14.7543, 19.85, 0.8, 21.1543, 20.85, 0.8, 21.1543, 32.05, 0.8, 16.9543, 32.65, 0.8, 16.7543, 32.65, 0.8, 16.1543, 32.05, 0.8, 15.9543, 24.25, 0.8, 15.3543, 32.05, 0.8, 8.5543, 24.25, 0.8, 8.5543, 24.25, 0.8, 15.3543, 32.05, 0.8, 15.9543, 24.25, 0.8, 22.1543, 23.85, 0.8, 22.3543, 23.85, 0.8, 23.9543, 32.05, 0.8, 23.9543, 24.25, 0.8, 22.1543, 32.05, 0.8, 23.9543, 32.05, 0.8, 16.9543, 24.25, 0.8, 15.3543, 11.05, 0.8, 14.7543, 10.85, 0.8, 14.3543, 10.05, 0.8, 14.3543, 9.85, 0.8, 14.7543, 6.85, 0.8, 21.1543, 13.05, 0.8, 21.1543, 13.25, 0.8, 21.7543, 14.05, 0.8, 21.7543, 14.25, 0.8, 21.1543, 11.05, 0.8, 14.7543, 13.05, 0.8, 21.1543, 14.25, 0.8, 21.1543, 18.65, 0.8, 21.1543, 18.65, 0.8, 14.7543, 11.05, 0.8, 14.7543, 0.650002, 0.8, 14.7543, 0.650002, 0.8, 21.1543, 6.85, 0.8, 21.1543, 9.85, 0.8, 14.7543, -29.55, 0.8, 17.7543, -29.55, 0.8, 18.5543, -29.15, 0.8, 18.7543, -29.15, 0.8, 17.5543, -22.75, 0.8, 14.7543, -29.15, 0.8, 14.7543, -29.15, 0.8, 17.5543, -16.35, 0.8, 17.9543, -15.75, 0.8, 17.7543, -15.75, 0.8, 16.7543, -16.35, 0.8, 16.5543, -22.75, 0.8, 14.7543, -22.75, 0.8, 21.1543, -16.35, 0.8, 21.1543, -16.35, 0.8, 17.9543, -22.75, 0.8, 14.7543, -29.15, 0.8, 17.5543, -29.15, 0.8, 18.7543, -16.35, 0.8, 16.5543, -16.35, 0.8, 14.7543, -22.75, 0.8, 14.7543, -29.15, 0.8, 18.7543, -29.15, 0.8, 21.1543, -22.75, 0.8, 21.1543, -15.75, 0.8, 16.7543, -15.75, 0.8, 17.7543, -15.15, 0.8, 17.9543, -7.95, 0.8, 14.7543, -15.15, 0.8, 16.5543, -7.95, 0.8, 21.1543, -0.549999, 0.8, 21.1543, -0.549999, 0.8, 14.7543, -7.95, 0.8, 14.7543, -7.95, 0.8, 14.7543, -15.15, 0.8, 14.7543, -15.15, 0.8, 16.5543, -15.15, 0.8, 17.9543, -15.15, 0.8, 21.1543, -7.95, 0.8, 21.1543, -7.95, 0.8, 14.7543, -15.55, 0.8, 23.9543, -15.35, 0.8, 24.5543, -14.55, 0.8, 24.5543, -14.35, 0.8, 23.9543, 22.05, 0.8, 22.3543, 21.85, 0.8, 21.7543, 21.05, 0.8, 21.7543, 14.25, 0.8, 22.3543, 14.05, 0.8, 21.7543, 13.25, 0.8, 21.7543, 13.05, 0.8, 22.3543, 14.25, 0.8, 23.9543, -19.15, 0.8, 22.3543, -22.75, 0.8, 23.9543, -15.55, 0.8, 23.9543, 22.05, 0.8, 22.3543, 21.05, 0.8, 21.7543, 20.85, 0.8, 22.3543, 23.85, 0.8, 23.9543, 4.65, 0.8, 23.9543, 14.25, 0.8, 23.9543, 13.05, 0.8, 22.3543, 2.25, 0.8, 22.3543, 23.85, 0.8, 23.9543, 23.85, 0.8, 22.3543, 22.05, 0.8, 22.3543, -8.35, 0.8, 22.3543, -19.15, 0.8, 22.3543, -14.35, 0.8, 23.9543, -4.95, 0.8, 23.9543, 14.25, 0.8, 23.9543, 23.85, 0.8, 23.9543, 20.85, 0.8, 22.3543, 14.25, 0.8, 22.3543, 2.25, 0.8, 22.3543, -8.35, 0.8, 22.3543, -4.95, 0.8, 23.9543, 4.65, 0.8, 23.9543, -19.15, 0.8, 22.3543, -15.55, 0.8, 23.9543, -14.35, 0.8, 23.9543, -29.75, 0.8, 22.3543, -29.75, 0.8, 23.9543, -22.75, 0.8, 23.9543, -19.15, 0.8, 22.3543, -14.55, 0.8, 24.5543, -15.35, 0.8, 24.5543, -15.55, 0.8, 25.1543, -15.95, 0.8, 40.5543, -14.35, 0.8, 25.1543, -2.75, 0.8, 25.1543, -7.95, 0.8, 40.5543, 0.0499992, 0.8, 40.5543, -31.95, 0.8, 32.7543, -31.95, 0.8, 40.5543, -23.95, 0.8, 40.5543, 24.05, 0.8, 40.5543, 32.05, 0.8, 40.5543, 32.05, 0.8, 32.7543, -23.75, 0.8, 25.1543, -31.95, 0.8, 25.1543, -31.95, 0.8, 32.7543, 32.05, 0.8, 32.7543, 32.05, 0.8, 25.1543, 20.45, 0.8, 25.1543, 16.05, 0.8, 40.5543, 24.05, 0.8, 40.5543, -23.75, 0.8, 25.1543, -31.95, 0.8, 32.7543, -23.95, 0.8, 40.5543, -15.95, 0.8, 40.5543, -15.55, 0.8, 25.1543, 0.0499992, 0.8, 40.5543, 8.05, 0.8, 40.5543, 8.85, 0.8, 25.1543, -2.75, 0.8, 25.1543, -14.35, 0.8, 25.1543, -15.95, 0.8, 40.5543, -7.95, 0.8, 40.5543, -2.75, 0.8, 25.1543, 16.05, 0.8, 40.5543, 20.45, 0.8, 25.1543, 8.85, 0.8, 25.1543, 8.05, 0.8, 40.5543 ) @@ -23,6 +23,12 @@ background_mode = 2 background_sky = SubResource( 2 ) ambient_light_color = Color( 0.227451, 0.2, 0.2, 1 ) +[sub_resource type="BoxShape" id=4] +extents = Vector3( 4, 1, 1 ) + +[sub_resource type="BoxShape" id=5] +extents = Vector3( 4, 1, 1 ) + [node name="main" type="Spatial"] script = ExtResource( 3 ) @@ -31,13 +37,13 @@ script = ExtResource( 3 ) [node name="navmesh" type="NavigationMeshInstance" parent="nav"] navmesh = SubResource( 1 ) -[node name="building" parent="nav/navmesh" instance=ExtResource( 2 )] +[node name="building" parent="nav/navmesh" instance=ExtResource( 6 )] [node name="Camera" type="Camera" parent="."] transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 22.648, 6, 17.621 ) environment = SubResource( 3 ) -[node name="master" parent="." instance=ExtResource( 4 )] +[node name="master" parent="." instance=ExtResource( 1 )] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 21.6253, 0.5, 11.7667 ) [node name="line_spawn" type="Spatial" parent="."] @@ -69,10 +75,10 @@ margin_right = 81.0 margin_bottom = 14.0 text = "Current task:" -[node name="start_quest_notification" parent="." instance=ExtResource( 1 )] +[node name="start_quest_notification" parent="." instance=ExtResource( 4 )] visible = false -[node name="interaction" parent="." instance=ExtResource( 5 )] +[node name="interaction" parent="." instance=ExtResource( 7 )] [node name="quest_dst_closet" type="Position3D" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -14.711, 0.5, 27.206 ) @@ -86,8 +92,80 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -23.352, 0.5, -2.47834 ) [node name="quest_dst_male_dorm" type="Position3D" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -23.352, 0.5, -25.5247 ) -[node name="master_desk_act" parent="." instance=ExtResource( 6 )] +[node name="master_desk_act" parent="." instance=ExtResource( 5 )] transform = Transform( 0.000582179, 0, -1, 0, 1, 0, 1, 0, 0.000582179, 22.551, 0.5, 10.3779 ) -[node name="training_basket" parent="." instance=ExtResource( 7 )] +[node name="training_basket" parent="." instance=ExtResource( 2 )] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 29.243, 0.5, 1.694 ) + +[node name="team0" type="Spatial" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 16.3614, 0, 4.64406 ) + +[node name="cheer1" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -12.9066, 0, 0 ) + +[node name="cheer2" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -11.2188, 0, 0 ) + +[node name="cheer3" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -7.87633, 0, 0 ) + +[node name="cheer4" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -5.22882, 0, 0 ) + +[node name="cheer5" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08491, 0, 0 ) + +[node name="cheer6" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5.92379, 0, 0 ) + +[node name="cheer7" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 8.86914, 0, 0 ) + +[node name="cheer8" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 14.1972, 0, 0 ) + +[node name="start" type="Position3D" parent="team0"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -14.3958, 0, -7.14826 ) + +[node name="gate" type="Area" parent="team0"] + +[node name="CollisionShape" type="CollisionShape" parent="team0/gate"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0 ) +shape = SubResource( 4 ) + +[node name="team1" type="Spatial" parent="."] +transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 16.3614, 0, -34.1586 ) + +[node name="cheer1" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -12.9066, 0, 0 ) + +[node name="cheer2" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -11.2188, 0, 0 ) + +[node name="cheer3" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -7.87633, 0, 0 ) + +[node name="cheer4" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -5.22882, 0, 0 ) + +[node name="cheer5" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08491, 0, 0 ) + +[node name="cheer6" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5.92379, 0, 0 ) + +[node name="cheer7" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 8.86914, 0, 0 ) + +[node name="cheer8" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 14.1972, 0, 0 ) + +[node name="start" type="Position3D" parent="team1"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -14.3958, 0, -7.14826 ) + +[node name="gate" type="Area" parent="team1"] + +[node name="CollisionShape" type="CollisionShape" parent="team1/gate"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0 ) +shape = SubResource( 5 ) diff --git a/proto2/project.godot b/proto2/project.godot index 4afebdb..1e5cc73 100644 --- a/proto2/project.godot +++ b/proto2/project.godot @@ -14,6 +14,16 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://ai/ball_game_ai.gd" }, { +"base": "Node", +"class": "BallGameAI3D", +"language": "GDScript", +"path": "res://ai/ball_game_ai3d.gd" +}, { +"base": "RigidBody", +"class": "Item", +"language": "GDScript", +"path": "res://items/item.gd" +}, { "base": "Reference", "class": "Quest", "language": "GDScript", @@ -36,6 +46,8 @@ _global_script_classes=[ { } ] _global_script_class_icons={ "BallGameAI": "", +"BallGameAI3D": "", +"Item": "", "Quest": "", "QuestObjective": "", "StatsQuest": "",