From 6890d927f5164aea4e27a51c408c765b78fc9862 Mon Sep 17 00:00:00 2001 From: Julian Murgia Date: Mon, 18 Jan 2021 23:32:38 +0100 Subject: [PATCH] Continued camera effects adding (zoom, shift) Added trigger behaviour to ESCItem and removed ESCTriggerZone. --- addons/escoria-core/editor/plugin_escoria.gd | 3 - .../game/core-scripts/esc/esc_runner.gd | 22 +- .../game/core-scripts/esc/esc_runner_level.gd | 21 +- .../escoria-core/game/core-scripts/escitem.gd | 50 ++- .../game/core-scripts/esctriggerzone.gd | 40 +-- addons/escoria-core/game/escoria.gd | 28 +- addons/escoria-core/game/main.gd | 6 +- .../game/scenes/camera_player/esccamera.gd | 9 +- .../label/action_target_tooltip.gd | 3 +- game/items/escitems/button.tscn | 103 +++++++ game/rooms/room3/background.tscn | 106 +------ game/rooms/room3/button.tscn | 59 ---- game/rooms/room3/esc/button.esc | 4 + game/rooms/room3/room3.tscn | 14 +- game/rooms/room7/esc/button_follow.esc | 7 + game/rooms/room7/esc/button_push.esc | 7 + game/rooms/room7/esc/button_shift.esc | 7 + game/rooms/room7/esc/button_zoom.esc | 10 + game/rooms/room7/esc/room7.esc | 14 +- game/rooms/room7/esc/trigger_left.esc | 4 + game/rooms/room7/esc/trigger_right.esc | 5 + game/rooms/room7/room7.tscn | 289 +++++++++++++++++- game/start_game.esc | 4 +- game/ui/ui_9verbs/game.gd | 12 +- 24 files changed, 581 insertions(+), 246 deletions(-) create mode 100644 game/items/escitems/button.tscn delete mode 100644 game/rooms/room3/button.tscn create mode 100755 game/rooms/room7/esc/button_follow.esc create mode 100755 game/rooms/room7/esc/button_push.esc create mode 100755 game/rooms/room7/esc/button_shift.esc create mode 100755 game/rooms/room7/esc/button_zoom.esc create mode 100755 game/rooms/room7/esc/trigger_left.esc create mode 100755 game/rooms/room7/esc/trigger_right.esc diff --git a/addons/escoria-core/editor/plugin_escoria.gd b/addons/escoria-core/editor/plugin_escoria.gd index 94e26f30..2d3e94a9 100644 --- a/addons/escoria-core/editor/plugin_escoria.gd +++ b/addons/escoria-core/editor/plugin_escoria.gd @@ -25,8 +25,6 @@ func _enter_tree(): load("res://addons/escoria-core/game/core-scripts/escroom.gd"), null) add_custom_type("ESCTerrain", "Navigation2D", load("res://addons/escoria-core/game/core-scripts/escterrain.gd"), null) - add_custom_type("ESCTriggerZone", "Area2D", - load("res://addons/escoria-core/game/core-scripts/esctriggerzone.gd"), null) set_escoria_main_settings() set_escoria_debug_settings() @@ -152,7 +150,6 @@ func _exit_tree(): remove_custom_type("ESCPlayer") remove_custom_type("ESCRoom") remove_custom_type("ESCTerrain") - remove_custom_type("ESCTriggerZone") remove_autoloads() diff --git a/addons/escoria-core/game/core-scripts/esc/esc_runner.gd b/addons/escoria-core/game/core-scripts/esc/esc_runner.gd index 06ee350a..4c9e210f 100644 --- a/addons/escoria-core/game/core-scripts/esc/esc_runner.gd +++ b/addons/escoria-core/game/core-scripts/esc/esc_runner.gd @@ -440,28 +440,19 @@ func register_object(name : String, val : Object, force : bool = false): # Most objects have states/animations, but don't count on it # if val.has_method("set_state"): - if val is ESCItem or val is ESCPlayer or val is ESCCharacter or val is ESCHotspot: + if val is ESCItem or val is ESCPlayer or val is ESCCharacter: if name in states: set_state(name, [states[name], true]) else: set_state(name, [esctypes.OBJ_DEFAULT_STATE]) - if val is ESCItem or val is ESCHotspot: + if val is ESCItem: if val.is_interactive: set_interactive(name, true) - -# if val.has_method("set_active"): -# if name in actives: -# val.set_active(actives[name]) - -# if val.has_method("set_interactive"): -# if name in interactives: -# val.set_interactive(interactives[name]) - if val.get("esc_script") != null and !val.get("esc_script").empty(): objects_events_table[name] = escoria.esc_compiler.load_esc_file(val.esc_script) - + func get_object(name): if !(name in objects): @@ -588,11 +579,6 @@ func set_state(global_id : String, p_params : Array): # animation_node = obj.get("animation") if obj.get_animation_player() != null: animation_node = obj.get_animation_player() - elif obj is ESCHotspot and obj.get_item_child_if_any() != null: - #if obj.get_item_child_if_any().get("animation") != null: - # animation_node = obj.get_item_child_if_any().animation - if obj.get_item_child_if_any().get_animation_player() != null: - animation_node = obj.get_item_child_if_any().get_animation_player() if animation_node: animation_node.stop() @@ -614,7 +600,7 @@ func set_state(global_id : String, p_params : Array): var animation = actual_animator.get_animation(p_params[0]) var animation_length = animation.length animation_node.seek(animation_length) - + print_debug("Item " + obj.global_id + " changed state to: " + p_params[0]) """ When object is active, it is VISIBLE. diff --git a/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd b/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd index c9fc0d47..90f37616 100644 --- a/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd +++ b/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd @@ -156,10 +156,13 @@ camera_set_pos speed x y Moves the camera to a position defined by "x" and "y", at the speed defined by "speed" in pixels per second. If speed is 0, camera is teleported to the position. """ -func camera_set_pos(): +func camera_set_pos(command_params : Array): +# var speed = command_params[0] +# var x = command_params[1] +# var y = command_params[2] +# escoria.esc_runner.get_object("camera").set_pos(speed, x, y) pass - """ camera_set_target speed object [object2 object3 ...] Configures the camera to follow 1 or more objects, using "speed" as speed limit. @@ -180,8 +183,10 @@ the camera out, and smaller values zooms in, relative to the default value of 1. An optional time in seconds controls how long it takes for the camera to zoom into position. """ -func camera_set_zoom(): - pass +func camera_set_zoom(command_params : Array): + var zoom_level = command_params[0] + var speed = command_params[0] if command_params.size() > 1 else 0 + escoria.esc_runner.get_object("camera").set_camera_zoom(zoom_level, speed) """ @@ -198,8 +203,12 @@ Shift camera by x and y pixels over time seconds. - type is any of the Tween.TransitionType values without the prefix, eg. LINEAR, QUART or CIRC; defaults to QUART. """ -func camera_shift(): - pass +func camera_shift(command_params : Array): + var x = command_params[0] + var y = command_params[1] + var time = command_params[2] + var type = command_params[3] if command_params.size() > 3 else "QUAD" + escoria.esc_runner.get_object("camera").shift(x, y, time, type) """ diff --git a/addons/escoria-core/game/core-scripts/escitem.gd b/addons/escoria-core/game/core-scripts/escitem.gd index fe830c54..3986d669 100644 --- a/addons/escoria-core/game/core-scripts/escitem.gd +++ b/addons/escoria-core/game/core-scripts/escitem.gd @@ -20,10 +20,23 @@ var MovableScript = load("res://addons/escoria-core/game/core-scripts/behaviors/ export(String) var global_id export(String, FILE, "*.esc") var esc_script + # If true, the ESC script may have an ":exit_scene" event to manage scene changes export(bool) var is_exit + +# is_trigger If true, object is considered as trigger. Allows using :trigger_in and +# :trigger_out verbs in ESC scripts. +export(bool) var is_trigger +export(String) var trigger_in_verb = "trigger_in" +export(String) var trigger_out_verb = "trigger_out" + +# is_interactive : If true, object is not "focusable". export(bool) var is_interactive = true + +# player_orients_on_arrival : If true, player orients towards 'interaction_direction' as +# player character arrives. export(bool) var player_orients_on_arrival = true + export(ESCPlayer.Directions) var interaction_direction export(String) var tooltip_name export(String) var default_action @@ -97,6 +110,7 @@ var last_deg : int var last_dir : int func _ready(): + assert(!global_id.empty()) # Adds movable behavior Movable = Node.new() @@ -120,11 +134,17 @@ func _ready(): if !Engine.is_editor_hint(): escoria.register_object(self) - connect("mouse_entered_item", escoria.inputs_manager, "_on_mouse_entered_item") - connect("mouse_exited_item", escoria.inputs_manager, "_on_mouse_exited_item") - connect("mouse_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_clicked_item") - connect("mouse_double_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_double_clicked_item") - connect("mouse_right_clicked_item", escoria.inputs_manager, "_on_mouse_right_clicked_item") + if !is_trigger: + connect("mouse_entered_item", escoria.inputs_manager, "_on_mouse_entered_item") + connect("mouse_exited_item", escoria.inputs_manager, "_on_mouse_exited_item") + connect("mouse_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_clicked_item") + connect("mouse_double_left_clicked_item", escoria.inputs_manager, "_on_mouse_left_double_clicked_item") + connect("mouse_right_clicked_item", escoria.inputs_manager, "_on_mouse_right_clicked_item") + else: + connect("area_entered", self, "element_entered") + connect("area_exited", self, "element_exited") + connect("body_entered", self, "element_entered") + connect("body_exited", self, "element_exited") if !is_exit: last_scale = scale @@ -184,12 +204,32 @@ func _on_mouse_exited(): ################################################################################ +# TRIGGER functions + +func element_entered(body): + if body is ESCBackground or body.get_parent() is ESCBackground: + return + escoria.do("trigger_in", [global_id, body.global_id, trigger_in_verb]) + + +func element_exited(body): + if body is ESCBackground or body.get_parent() is ESCBackground: + return + escoria.do("trigger_out", [global_id, body.global_id, trigger_out_verb]) + +################################################################################ + +# MOVING OBJECT functions + func teleport(target, angle : Object = null) -> void: Movable.teleport(target, angle) func walk_to(pos : Vector2, p_walk_context = null): Movable.walk_to(pos, p_walk_context) +################################################################################ + +# TALKATIVE object functions func start_talking(): # if animation_sprite.is_playing(): diff --git a/addons/escoria-core/game/core-scripts/esctriggerzone.gd b/addons/escoria-core/game/core-scripts/esctriggerzone.gd index 891df391..d768100c 100644 --- a/addons/escoria-core/game/core-scripts/esctriggerzone.gd +++ b/addons/escoria-core/game/core-scripts/esctriggerzone.gd @@ -2,30 +2,30 @@ tool extends Area2D class_name ESCTriggerZone -signal left_click_on_trigger -signal left_dblclick_on_trigger -signal right_click_on_trigger -signal mouse_enter_trigger -signal mouse_exit_trigger +func get_class(): + return "ESCTriggerZone" -func mouse_enter(): - emit_signal("mouse_enter_trigger", self) -func mouse_exit(): - emit_signal("mouse_exit_trigger", self) +export(String) var global_id +export(String, FILE, "*.esc") var esc_script -func body_entered(body): -# if body is esc_type.PLAYER: -# if self.visible: -# run_event("enter") - pass - -func body_exited(body): -# if body is esc_type.PLAYER: -# if self.visible: -# run_event("exit") - pass +func _ready(): + assert(!global_id.empty()) + escoria.register_object(self) + connect("area_entered", self, "element_entered") + connect("area_exited", self, "element_exited") + connect("body_entered", self, "element_entered") + connect("body_exited", self, "element_exited") + +func element_entered(body): + if body is ESCBackground or body.get_parent() is ESCBackground: + return + escoria.do("trigger_in", [global_id, body.global_id]) + + +func element_exited(body): + escoria.do("trigger_out", [global_id, body.global_id]) diff --git a/addons/escoria-core/game/escoria.gd b/addons/escoria-core/game/escoria.gd index 9cfb1f20..3a02a48a 100644 --- a/addons/escoria-core/game/escoria.gd +++ b/addons/escoria-core/game/escoria.gd @@ -87,7 +87,7 @@ func register_object(object : Object): if object is ESCPlayer: $esc_runner.register_object(object_id, object, true) - if object is ESCHotspot or object is Position2D: + if object is Position2D: $esc_runner.register_object(object_id, object, true) if object is ESCItem: @@ -104,6 +104,9 @@ func register_object(object : Object): if object is ESCInventory: inventory = object + + if object is ESCTriggerZone: + $esc_runner.register_object(object_id, object, true) """ @@ -154,17 +157,28 @@ func do(action : String, params : Array = []) -> void: "item_left_click": if params[0] is String: printt("escoria.do : item_left_click on item ", params[0]) - - # call : ev_left_click_on_item() - ev_left_click_on_item($esc_runner.get_object(params[0]), params[1]) + var item = $esc_runner.get_object(params[0]) + ev_left_click_on_item(item, params[1]) "item_right_click": if params[0] is String: printt("escoria.do : item_right_click on item ", params[0]) - - # call : ev_left_click_on_item() ev_left_click_on_item($esc_runner.get_object(params[0]), params[1], true) - + + "trigger_in": + var trigger_id = params[0] + var object_id = params[1] + var trigger_in_verb = params[2] + printt("escoria.do() : trigger_in ", trigger_id, " by ", object_id) + esc_runner.run_event(esc_runner.objects_events_table[trigger_id][trigger_in_verb]) + + "trigger_out": + var trigger_id = params[0] + var object_id = params[1] + var trigger_out_verb = params[2] + printt("escoria.do() : trigger_out ", trigger_id, " by ", object_id) + esc_runner.run_event(esc_runner.objects_events_table[trigger_id][trigger_out_verb]) + _: # $esc_runner.activate(action, params[0]) report_warnings("escoria.gd:do()", ["Action received:", action, "with params ", params]) diff --git a/addons/escoria-core/game/main.gd b/addons/escoria-core/game/main.gd index 719941c4..c7c2e9c7 100644 --- a/addons/escoria-core/game/main.gd +++ b/addons/escoria-core/game/main.gd @@ -82,9 +82,7 @@ func set_current_scene(p_scene, run_events=true): if "setup" in escoria.esc_runner.game: escoria.esc_runner.run_event(escoria.esc_runner.game["setup"]) yield(escoria.esc_runner, "event_done") - - # Because 1) changing a scene and 2) having a scene become ready - # both call `set_current_scene`, we don't want to duplicate thing + if not escoria.esc_runner.running_event: escoria.esc_runner.run_game() @@ -179,3 +177,5 @@ func check_game_scene_methods(): assert(current_scene.game.has_method("inventory_item_focused")) assert(current_scene.game.has_method("inventory_item_unfocused")) + + assert(current_scene.game.has_method("mousewheel_action")) diff --git a/addons/escoria-core/game/scenes/camera_player/esccamera.gd b/addons/escoria-core/game/scenes/camera_player/esccamera.gd index 83c3ad88..a34731f7 100644 --- a/addons/escoria-core/game/scenes/camera_player/esccamera.gd +++ b/addons/escoria-core/game/scenes/camera_player/esccamera.gd @@ -15,6 +15,7 @@ var zoom_target # This is needed to adjust dialog positions and such, see dialog_instance.gd var zoom_transform + """ Sets camera limits so it doesn't go out of the scene. If kwargs is null, default limits are used. See Camera2D limits for more details. @@ -65,6 +66,7 @@ func set_drag_margin_enabled(p_dm_h_enabled, p_dm_v_enabled): self.drag_margin_h_enabled = p_dm_h_enabled self.drag_margin_v_enabled = p_dm_v_enabled + func set_target(p_target, p_speed : float = 0.0): speed = p_speed target = p_target @@ -157,16 +159,15 @@ func shift(p_x, p_y, p_time, p_type): escoria.report_warnings("camera", ["Tween still active running camera_shift: " + tweenstat]) tween.emit_signal("tween_completed") - + tween.interpolate_property(self, "global_position", self.global_position, - new_pos, time, tween.get(type), Tween.EASE_IN_OUT) + new_pos, float(time), tween.get(type), Tween.EASE_IN_OUT) tween.start() -func target_reached(_obj=null, _key=null): +func target_reached(): tween.stop_all() - func _process(_delta): zoom_transform = self.get_canvas_transform() diff --git a/addons/escoria-core/template_scenes/label/action_target_tooltip.gd b/addons/escoria-core/template_scenes/label/action_target_tooltip.gd index 4530e9ec..5b04c2d0 100644 --- a/addons/escoria-core/template_scenes/label/action_target_tooltip.gd +++ b/addons/escoria-core/template_scenes/label/action_target_tooltip.gd @@ -13,14 +13,13 @@ var waiting_for_target2 = false func _ready(): escoria.esc_runner.connect("action_changed", self, "on_action_selected") - escoria.inputs_manager.connect("element_focused", self, "on_element_focused") func on_action_selected() -> void: current_action = escoria.esc_runner.current_action update_tooltip_text() -func on_element_focused(element_id : String) -> void: +func element_focused(element_id : String) -> void: printt("action_target_tooltip.gd:on_element_focused()", "Element focused: ", element_id) if element_id == "": diff --git a/game/items/escitems/button.tscn b/game/items/escitems/button.tscn new file mode 100644 index 00000000..6188190f --- /dev/null +++ b/game/items/escitems/button.tscn @@ -0,0 +1,103 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=1] +[ext_resource path="res://game/rooms/room3/smoke.png" type="Texture" id=2] + +[sub_resource type="Gradient" id=1] +offsets = PoolRealArray( 0, 0.830189 ) +colors = PoolColorArray( 1, 1, 1, 1, 0.353516, 0.353516, 0.353516, 1 ) + +[sub_resource type="GradientTexture" id=2] +gradient = SubResource( 1 ) + +[sub_resource type="Curve" id=3] +_data = [ Vector2( 0, 0.0886364 ), 0.0, 0.0, 0, 0, Vector2( 0.612766, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.770213, 0.95 ), -1.55372, -1.55372, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ] + +[sub_resource type="CurveTexture" id=4] +curve = SubResource( 3 ) + +[sub_resource type="ParticlesMaterial" id=5] +lifetime_randomness = 0.2 +emission_shape = 1 +emission_sphere_radius = 1.0 +flag_disable_z = true +gravity = Vector3( 0, -9.81, 0 ) +angular_velocity = 14.47 +orbit_velocity = 0.0 +orbit_velocity_random = 1.0 +radial_accel = 3.97 +radial_accel_random = 0.63 +angle = 160.0 +angle_random = 1.0 +scale = 0.5 +scale_random = 0.45 +scale_curve = SubResource( 4 ) +color_ramp = SubResource( 2 ) + +[sub_resource type="Animation" id=6] +resource_name = "button_broken" +tracks/0/type = "value" +tracks/0/path = NodePath("Particles2D:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} + +[sub_resource type="Animation" id=7] +resource_name = "button_repaired" +tracks/0/type = "value" +tracks/0/path = NodePath("Particles2D:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[node name="button" type="Area2D"] +script = ExtResource( 1 ) +global_id = "r3_button" +esc_script = "res://game/rooms/room3/esc/button.esc" +tooltip_name = "Button" +default_action = "use" +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": Vector2( 0, 0 ) +} + +[node name="lines" type="Line2D" parent="."] +position = Vector2( 0, -266.591 ) +points = PoolVector2Array( 322.305, 390.985, 322.305, 439.068, 368.698, 440.037, 368.974, 392.399, 319.028, 391.549 ) + +[node name="Polygon2D" type="Polygon2D" parent="lines"] +visible = false +polygon = PoolVector2Array( 343.993, 396.767, 323.298, 415.689, 344.585, 438.158, 365.872, 417.463 ) + +[node name="Particles2D" type="Particles2D" parent="."] +position = Vector2( 344.768, 142.144 ) +amount = 16 +lifetime = 4.0 +preprocess = 1.99 +speed_scale = 1.39 +process_material = SubResource( 5 ) +texture = ExtResource( 2 ) +__meta__ = { +"_editor_description_": "" +} + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/button_broken = SubResource( 6 ) +anims/button_repaired = SubResource( 7 ) + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."] +polygon = PoolVector2Array( 319.633, 122.126, 320.427, 177.685, 371.224, 176.098, 372.811, 121.332 ) diff --git a/game/rooms/room3/background.tscn b/game/rooms/room3/background.tscn index 6a8c4a77..f0af2e02 100644 --- a/game/rooms/room3/background.tscn +++ b/game/rooms/room3/background.tscn @@ -1,70 +1,7 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://addons/escoria-core/game/core-scripts/escbackground.gd" type="Script" id=1] [ext_resource path="res://game/rooms/room2/bridge.tscn" type="PackedScene" id=2] -[ext_resource path="res://game/rooms/room3/smoke.png" type="Texture" id=3] -[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=4] - -[sub_resource type="Gradient" id=1] -offsets = PoolRealArray( 0, 0.830189 ) -colors = PoolColorArray( 1, 1, 1, 1, 0.353516, 0.353516, 0.353516, 1 ) - -[sub_resource type="GradientTexture" id=2] -gradient = SubResource( 1 ) - -[sub_resource type="Curve" id=3] -_data = [ Vector2( 0, 0.0886364 ), 0.0, 0.0, 0, 0, Vector2( 0.612766, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.770213, 0.95 ), -1.55372, -1.55372, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ] - -[sub_resource type="CurveTexture" id=4] -curve = SubResource( 3 ) - -[sub_resource type="ParticlesMaterial" id=5] -lifetime_randomness = 0.2 -emission_shape = 1 -emission_sphere_radius = 1.0 -flag_disable_z = true -gravity = Vector3( 0, -9.81, 0 ) -angular_velocity = 14.47 -orbit_velocity = 0.0 -orbit_velocity_random = 1.0 -radial_accel = 3.97 -radial_accel_random = 0.63 -angle = 160.0 -angle_random = 1.0 -scale = 0.5 -scale_random = 0.45 -scale_curve = SubResource( 4 ) -color_ramp = SubResource( 2 ) - -[sub_resource type="Animation" id=6] -resource_name = "button_broken" -tracks/0/type = "value" -tracks/0/path = NodePath("Particles2D:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} - -[sub_resource type="Animation" id=7] -resource_name = "button_repaired" -tracks/0/type = "value" -tracks/0/path = NodePath("Particles2D:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} [node name="background" type="TextureRect"] margin_right = 1300.0 @@ -96,44 +33,3 @@ global_id = "r3_bridge" interact_positions = { "default": Vector2( 0, 0 ) } - -[node name="button" type="Area2D" parent="."] -script = ExtResource( 4 ) -global_id = "r3_button" -esc_script = "res://game/rooms/room3/esc/button.esc" -tooltip_name = "Button" -default_action = "use" -dialog_color = Color( 1, 1, 1, 1 ) -interact_positions = { -"default": Vector2( 347.767, 378.011 ) -} - -[node name="lines" type="Line2D" parent="button"] -position = Vector2( 0, -266.591 ) -points = PoolVector2Array( 322.305, 390.985, 322.305, 439.068, 368.698, 440.037, 368.974, 392.399, 319.028, 391.549 ) - -[node name="Polygon2D" type="Polygon2D" parent="button/lines"] -visible = false -polygon = PoolVector2Array( 343.993, 396.767, 323.298, 415.689, 344.585, 438.158, 365.872, 417.463 ) - -[node name="Particles2D" type="Particles2D" parent="button"] -position = Vector2( 344.768, 142.144 ) -amount = 16 -lifetime = 4.0 -preprocess = 1.99 -speed_scale = 1.39 -process_material = SubResource( 5 ) -texture = ExtResource( 3 ) -__meta__ = { -"_editor_description_": "" -} - -[node name="AnimationPlayer" type="AnimationPlayer" parent="button"] -anims/button_broken = SubResource( 6 ) -anims/button_repaired = SubResource( 7 ) - -[node name="interact_pos" type="Position2D" parent="button"] -position = Vector2( 347.767, 378.011 ) - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="button"] -polygon = PoolVector2Array( 319.633, 122.126, 320.427, 177.685, 371.224, 176.098, 372.811, 121.332 ) diff --git a/game/rooms/room3/button.tscn b/game/rooms/room3/button.tscn deleted file mode 100644 index cf36c020..00000000 --- a/game/rooms/room3/button.tscn +++ /dev/null @@ -1,59 +0,0 @@ -[gd_scene load_steps=5 format=2] - -[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=1] - -[sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 28.6442, 23.5021 ) - -[sub_resource type="Animation" id=2] -resource_name = "button_broken" -tracks/0/type = "value" -tracks/0/path = NodePath("../../background/button/Particles2D:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} - -[sub_resource type="Animation" id=3] -resource_name = "button_repaired" -tracks/0/type = "value" -tracks/0/path = NodePath("../../background/button/Particles2D:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} - -[node name="button" type="Area2D"] -position = Vector2( 346.18, 151.013 ) -script = ExtResource( 1 ) -__meta__ = { -"_editor_description_": "" -} -global_id = "button" -esc_script = "res://game/rooms/room3/esc/button.esc" -tooltip_name = "Button" -dialog_color = Color( 1, 1, 1, 1 ) -interact_positions = { -"default": Vector2( 346.18, 151.013 ) -} - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource( 1 ) - -[node name="Position2D" type="Position2D" parent="."] - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -anims/button_broken = SubResource( 2 ) -anims/button_repaired = SubResource( 3 ) diff --git a/game/rooms/room3/esc/button.esc b/game/rooms/room3/esc/button.esc index 0084cb94..69c24609 100755 --- a/game/rooms/room3/esc/button.esc +++ b/game/rooms/room3/esc/button.esc @@ -1,3 +1,7 @@ +:ready +set_state r3_button button_broken + + :look say player "That button must activate the bridge, but it is broken." [button_broken] say player "It should work now." [!button_broken] diff --git a/game/rooms/room3/room3.tscn b/game/rooms/room3/room3.tscn index d1d11109..ecf6912d 100644 --- a/game/rooms/room3/room3.tscn +++ b/game/rooms/room3/room3.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://game/rooms/room3/walkable_area.tscn" type="PackedScene" id=1] [ext_resource path="res://game/rooms/room3/background.tscn" type="PackedScene" id=2] @@ -6,6 +6,7 @@ [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/escroom.gd" type="Script" id=6] +[ext_resource path="res://game/items/escitems/button.tscn" type="PackedScene" id=7] [node name="room3" type="Node2D"] script = ExtResource( 6 ) @@ -90,5 +91,16 @@ polygon = PoolVector2Array( -2.71457, 437.818, 6.6293, 121.462, 89.3893, 74.7422 [node name="Position2D" type="Position2D" parent="Hotspots/l_door"] position = Vector2( 44.1375, 384.691 ) +[node name="button" parent="Hotspots" instance=ExtResource( 7 )] +interact_positions = { +"default": Vector2( 347.767, 378.011 ) +} + +[node name="Position2D" type="Position2D" parent="Hotspots/button"] +position = Vector2( 347.767, 378.011 ) +__meta__ = { +"_editor_description_": "" +} + [node name="player_start" type="Position2D" parent="."] position = Vector2( 63.3074, 444.653 ) diff --git a/game/rooms/room7/esc/button_follow.esc b/game/rooms/room7/esc/button_follow.esc new file mode 100755 index 00000000..1ff9bd39 --- /dev/null +++ b/game/rooms/room7/esc/button_follow.esc @@ -0,0 +1,7 @@ +:look +say player "That button makes the camera target me." + +:use +camera_set_limits 0 +camera_set_target 0 player + diff --git a/game/rooms/room7/esc/button_push.esc b/game/rooms/room7/esc/button_push.esc new file mode 100755 index 00000000..a99cebc6 --- /dev/null +++ b/game/rooms/room7/esc/button_push.esc @@ -0,0 +1,7 @@ +:look +say player "That button triggers a camera push effect." + +:use +camera_push r7_object2 1 LINEAR +wait 3 +camera_push player 1 LINEAR diff --git a/game/rooms/room7/esc/button_shift.esc b/game/rooms/room7/esc/button_shift.esc new file mode 100755 index 00000000..daa44627 --- /dev/null +++ b/game/rooms/room7/esc/button_shift.esc @@ -0,0 +1,7 @@ +:look +say player "That button triggers a camera shift effect." + +:use +camera_shift 700 0 5 LINEAR +wait 1 + diff --git a/game/rooms/room7/esc/button_zoom.esc b/game/rooms/room7/esc/button_zoom.esc new file mode 100755 index 00000000..5961aa9d --- /dev/null +++ b/game/rooms/room7/esc/button_zoom.esc @@ -0,0 +1,10 @@ +:look +say player "That button triggers a camera zoom effect." + +:use +camera_set_zoom 1.3 2 +wait 3 +camera_set_zoom 0.5 2 +wait 3 +camera_set_zoom 1 0 + diff --git a/game/rooms/room7/esc/room7.esc b/game/rooms/room7/esc/room7.esc index 09263033..fbb88652 100755 --- a/game/rooms/room7/esc/room7.esc +++ b/game/rooms/room7/esc/room7.esc @@ -1,4 +1,8 @@ +# :SETUP is called EVERY TIME the room is loaded +# :READY is called only the FIRST TIME the room is loaded + :setup +set_state r7_button_push button_repaired > [eq ESC_LAST_SCENE room6] teleport player r7_l_exit # Set player look right @@ -8,13 +12,13 @@ teleport player player_start stop + :ready -camera_push player 0 LINEAR - -camera_push r7_object2 1 LINEAR -wait 3 -camera_push player 1 LINEAR +#camera_push player 0 LINEAR +#camera_push r7_object2 1 LINEAR +#wait 3 +#camera_push player 1 LINEAR #camera_set_drag_margin_enabled bool bool #camera_set_pos real int int diff --git a/game/rooms/room7/esc/trigger_left.esc b/game/rooms/room7/esc/trigger_left.esc new file mode 100755 index 00000000..8b729508 --- /dev/null +++ b/game/rooms/room7/esc/trigger_left.esc @@ -0,0 +1,4 @@ +:trigger_in +set_state r7_light_left red + +:trigger_out diff --git a/game/rooms/room7/esc/trigger_right.esc b/game/rooms/room7/esc/trigger_right.esc new file mode 100755 index 00000000..8e71fa1b --- /dev/null +++ b/game/rooms/room7/esc/trigger_right.esc @@ -0,0 +1,5 @@ +:trigger_in +set_state r7_light_right green + +:trigger_out +set_state r7_light_right red diff --git a/game/rooms/room7/room7.tscn b/game/rooms/room7/room7.tscn index bb9f889f..db9b468d 100644 --- a/game/rooms/room7/room7.tscn +++ b/game/rooms/room7/room7.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=16 format=2] [ext_resource path="res://addons/escoria-core/game/core-scripts/escterrain.gd" type="Script" id=1] [ext_resource path="res://game/rooms/room7/background.tscn" type="PackedScene" id=2] +[ext_resource path="res://game/items/escitems/button.tscn" type="PackedScene" id=3] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/ui/commons/fonts/caslonantique.tres" type="DynamicFont" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/escroom.gd" type="Script" id=6] @@ -17,6 +18,72 @@ vertices = PoolVector2Array( 2031.55, -451.45, 135.719, -939.662, 287.172, -941. polygons = [ PoolIntArray( 0, 1, 2, 3, 4 ), PoolIntArray( 5, 4, 3 ), PoolIntArray( 5, 3, 6, 7, 8 ) ] outlines = [ PoolVector2Array( 2027.99, -629.63, 1390.1, -752.574, 1448.12, -803.5, 1425.74, -843.446, 1343.78, -834.537, 1235.09, -777.519, 287.172, -941.444, 135.719, -939.662, 2031.55, -451.45 ) ] +[sub_resource type="RectangleShape2D" id=3] +extents = Vector2( 79.0288, 129.758 ) + +[sub_resource type="CircleShape2D" id=4] +radius = 35.4361 + +[sub_resource type="Animation" id=5] +resource_name = "green" +tracks/0/type = "value" +tracks/0/path = NodePath("Polygon2D:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 0.0313726, 0.996078, 0, 1 ) ] +} + +[sub_resource type="Animation" id=9] +resource_name = "red" +tracks/0/type = "value" +tracks/0/path = NodePath("Polygon2D:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 1, 0, 0, 1 ) ] +} + +[sub_resource type="Animation" id=7] +resource_name = "green" +tracks/0/type = "value" +tracks/0/path = NodePath("Polygon2D:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 0.0313726, 0.996078, 0, 1 ) ] +} + +[sub_resource type="Animation" id=10] +resource_name = "red" +tracks/0/type = "value" +tracks/0/path = NodePath("Polygon2D:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 1, 0, 0, 1 ) ] +} + [node name="room7" type="Node2D"] script = ExtResource( 6 ) __meta__ = { @@ -37,6 +104,9 @@ margin_right = 40.0 margin_bottom = 14.0 custom_fonts/font = ExtResource( 5 ) text = "ROOM 7 - upstairs" +__meta__ = { +"_edit_use_anchors_": false +} [node name="room_label_2" type="Label" parent="background"] margin_top = 1354.53 @@ -111,8 +181,25 @@ __meta__ = { "_editor_description_": "" } +[node name="object_1" type="Area2D" parent="Hotspots"] +position = Vector2( 358.099, -1195.07 ) +script = ExtResource( 7 ) +global_id = "r7_object_1" +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": Vector2( 818.94, 320.88 ) +} + +[node name="Line2D" type="Line2D" parent="Hotspots/object_1"] +position = Vector2( 0, 1345.52 ) +points = PoolVector2Array( 398.738, 142.591, 518.947, 64.809, 516.118, 275.527 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/object_1"] +position = Vector2( 460.841, 1515.95 ) +shape = SubResource( 3 ) + [node name="object2" type="Area2D" parent="Hotspots"] -position = Vector2( 1600.63, 1358.99 ) +position = Vector2( 1770.63, 1358.99 ) script = ExtResource( 7 ) __meta__ = { "_editor_description_": "" @@ -156,6 +243,10 @@ global_id = "r7_upper_stairs" esc_script = "res://game/rooms/room7/esc/upper_stairs.esc" is_exit = true tooltip_name = "Stairs" +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": Vector2( 1375.17, 604.793 ) +} [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/upper_stairs"] position = Vector2( -1334.92, 936.565 ) @@ -164,9 +255,197 @@ polygon = PoolVector2Array( 1221.86, -804.627, 1220.52, -1158.36, 1450.46, -1134 [node name="Position2D" type="Position2D" parent="Hotspots/upper_stairs"] position = Vector2( 27.5337, 131.767 ) -[node name="object_1" type="Line2D" parent="Hotspots"] -position = Vector2( 0, 1345.52 ) -points = PoolVector2Array( 398.738, 142.591, 518.947, 64.809, 516.118, 275.527 ) +[node name="button_camera_push" parent="Hotspots" instance=ExtResource( 3 )] +position = Vector2( -167.43, 1463.23 ) +global_id = "r7_button_push" +esc_script = "res://game/rooms/room7/esc/button_push.esc" +interact_positions = { +"default": Vector2( 279.618, 1763.84 ) +} + +[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_push"] +position = Vector2( 343.048, 300.613 ) +__meta__ = { +"_editor_description_": "" +} + +[node name="Label" type="Label" parent="Hotspots/button_camera_push"] +margin_left = 304.871 +margin_top = 97.219 +margin_right = 384.871 +margin_bottom = 113.219 +custom_fonts/font = ExtResource( 5 ) +text = "Camera_push" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="button_camera_shift" parent="Hotspots" instance=ExtResource( 3 )] +position = Vector2( 9.393, 1464.03 ) +global_id = "r7_button_push" +esc_script = "res://game/rooms/room7/esc/button_shift.esc" +interact_positions = { +"default": Vector2( 463.651, 1765.65 ) +} + +[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_shift"] +position = Vector2( 350.258, 301.616 ) + +[node name="Label" type="Label" parent="Hotspots/button_camera_shift"] +margin_left = 305.626 +margin_top = 97.515 +margin_right = 387.626 +margin_bottom = 113.515 +custom_fonts/font = ExtResource( 5 ) +text = "Camera_shift" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="button_camera_follow" parent="Hotspots" instance=ExtResource( 3 )] +position = Vector2( 172.527, 1464.03 ) +global_id = "r7_button_follow" +esc_script = "res://game/rooms/room7/esc/button_follow.esc" +interact_positions = { +"default": Vector2( 463.651, 1765.65 ) +} + +[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_follow"] +position = Vector2( 350.258, 301.616 ) + +[node name="Label" type="Label" parent="Hotspots/button_camera_follow"] +margin_left = 305.626 +margin_top = 97.515 +margin_right = 387.626 +margin_bottom = 113.515 +custom_fonts/font = ExtResource( 5 ) +text = "Camera_follow" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="button_camera_zoom" parent="Hotspots" instance=ExtResource( 3 )] +position = Vector2( 332.527, 1464.03 ) +global_id = "r7_button_zoom" +esc_script = "res://game/rooms/room7/esc/button_zoom.esc" +interact_positions = { +"default": Vector2( 522.785, 1765.65 ) +} + +[node name="Position2D" type="Position2D" parent="Hotspots/button_camera_zoom"] +position = Vector2( 350.258, 301.616 ) + +[node name="Label" type="Label" parent="Hotspots/button_camera_zoom"] +margin_left = 305.626 +margin_top = 97.515 +margin_right = 387.626 +margin_bottom = 113.515 +custom_fonts/font = ExtResource( 5 ) +text = "Camera_zoom" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="trigger_left" type="Area2D" parent="Hotspots"] +position = Vector2( 406, 0 ) +script = ExtResource( 7 ) +global_id = "trigger_left" +esc_script = "res://game/rooms/room7/esc/trigger_left.esc" +is_trigger = true +is_interactive = false +player_orients_on_arrival = false +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": null +} + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/trigger_left"] +polygon = PoolVector2Array( 724.356, 1944.36, 716.865, 1752.57, 800.77, 1752.57, 814.254, 1942.86 ) + +[node name="Label" type="Label" parent="Hotspots/trigger_left"] +margin_left = 672.764 +margin_top = 1705.64 +margin_right = 812.764 +margin_bottom = 1740.64 +custom_fonts/font = ExtResource( 5 ) +text = "This trigger is activated +once if player walks on it" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="trigger_right" type="Area2D" parent="Hotspots"] +position = Vector2( 220, 0 ) +script = ExtResource( 7 ) +global_id = "trigger_right" +esc_script = "res://game/rooms/room7/esc/trigger_right.esc" +is_trigger = true +is_interactive = false +player_orients_on_arrival = false +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": null +} + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/trigger_right"] +position = Vector2( 372.68, 4.12805 ) +polygon = PoolVector2Array( 724.356, 1944.36, 716.865, 1752.57, 800.77, 1752.57, 814.254, 1942.86 ) + +[node name="Label" type="Label" parent="Hotspots/trigger_right"] +margin_left = 1068.46 +margin_top = 1707.64 +margin_right = 1218.46 +margin_bottom = 1742.64 +custom_fonts/font = ExtResource( 5 ) +text = "This trigger activates when + player walks in AND out" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="light_left" type="Area2D" parent="Hotspots"] +position = Vector2( 412, 0 ) +script = ExtResource( 7 ) +global_id = "r7_light_left" +is_interactive = false +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": null +} + +[node name="Polygon2D" type="Polygon2D" parent="Hotspots/light_left"] +color = Color( 0.0313726, 0.996078, 0, 1 ) +polygon = PoolVector2Array( 718.946, 1494.91, 709.047, 1518.24, 717.885, 1540.16, 740.837, 1551.8, 764.908, 1541.57, 774.1, 1519.65, 763.847, 1494.2, 742.336, 1484.38 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/light_left"] +position = Vector2( 742.194, 1518.8 ) +shape = SubResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/light_left"] +anims/green = SubResource( 5 ) +anims/red = SubResource( 9 ) + +[node name="light_right" type="Area2D" parent="Hotspots"] +position = Vector2( 613.333, -1.13 ) +script = ExtResource( 7 ) +global_id = "r7_light_right" +is_interactive = false +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": Vector2( 742.194, 1518.8 ) +} + +[node name="Polygon2D" type="Polygon2D" parent="Hotspots/light_right"] +color = Color( 1, 0, 0, 1 ) +polygon = PoolVector2Array( 718.946, 1494.91, 709.047, 1518.24, 717.885, 1540.16, 740.837, 1551.8, 764.908, 1541.57, 774.1, 1519.65, 763.847, 1494.2, 742.336, 1484.38 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/light_right"] +position = Vector2( 742.194, 1518.8 ) +shape = SubResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/light_right"] +anims/green = SubResource( 7 ) +anims/red = SubResource( 10 ) [node name="player_start" type="Position2D" parent="."] position = Vector2( 76.7617, 1847.24 ) diff --git a/game/start_game.esc b/game/start_game.esc index decf4c4e..5851a9af 100755 --- a/game/start_game.esc +++ b/game/start_game.esc @@ -16,9 +16,9 @@ #change_scene res://game/rooms/room5/room5.tscn # 6/ character room -change_scene res://game/rooms/room6/room6.tscn +#change_scene res://game/rooms/room6/room6.tscn # 7/ long room with camera shift to object 2 if look on object 1 # and stairs with camera shift too -#change_scene res://game/rooms/room7/room7.tscn +change_scene res://game/rooms/room7/room7.tscn diff --git a/game/ui/ui_9verbs/game.gd b/game/ui/ui_9verbs/game.gd index 98d38c3b..cc1f3c0e 100644 --- a/game/ui/ui_9verbs/game.gd +++ b/game/ui/ui_9verbs/game.gd @@ -14,7 +14,17 @@ Implement methods to react to inputs. - right_click_on_item(item_global_id : String, event : InputEvent) - left_double_click_on_item(item_global_id : String, event : InputEvent) +- left_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent) +- right_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent) +- left_double_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent) +- inventory_item_focused(inventory_item_global_id : String) +- inventory_item_unfocused() +- open_inventory() +- close_inventory() + - mousewheel_action(direction : int) + + """ signal element_focused(element_global_id) @@ -40,7 +50,7 @@ func left_double_click_on_bg(position : Vector2) -> void: escoria.do("walk", ["player", position, true]) -## ITEM/HOTSPOT FOCUS ## +## ITEM FOCUS ## func element_focused(element_id : String) -> void: #emit_signal("element_focused", element_id)