Updated escoria-demo-game

This commit is contained in:
2023-06-06 19:28:49 +02:00
parent 6d3bd3511c
commit 0d38a8646a
116 changed files with 1670 additions and 1291 deletions

View File

@@ -15,14 +15,14 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v2
with: with:
token: ${{ secrets.DEPLOYMENT_TOKEN }} token: ${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}
repository: godot-escoria/escoria-demo-game repository: godot-escoria/escoria-demo-game
ref: "develop" ref: "develop"
path: game path: game
- name: "Checkout docs repo" - name: "Checkout docs repo"
uses: actions/checkout@v2 uses: actions/checkout@v2
with: with:
token: ${{ secrets.DEPLOYMENT_TOKEN }} token: ${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}
repository: godot-escoria/escoria-docs repository: godot-escoria/escoria-docs
ref: "devel" ref: "devel"
fetch-depth: 0 fetch-depth: 0

View File

@@ -38,12 +38,12 @@ jobs:
sudo apt-get install git -y sudo apt-get install git -y
fi fi
- name: "Checkout" - name: "Checkout"
uses: "actions/checkout@v2" uses: "actions/checkout@v3"
with: with:
repository: "godot-escoria/escoria-demo-game" repository: "godot-escoria/escoria-demo-game"
ref: "develop" ref: "develop"
path: "demo-game" path: "demo-game"
token: "${{ secrets.DEPLOYMENT_TOKEN }}" token: "${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}"
fetch-depth: 0 fetch-depth: 0
- name: "Filtering out ${{ env.DIR }}" - name: "Filtering out ${{ env.DIR }}"
run: | run: |
@@ -55,12 +55,12 @@ jobs:
git clean -fd git clean -fd
git status git status
- name: "Checkout" - name: "Checkout"
uses: "actions/checkout@v2" uses: "actions/checkout@v3"
with: with:
repository: "${{ env.REPO }}" repository: "${{ env.REPO }}"
ref: "develop" ref: "develop"
path: "target" path: "target"
token: "${{ secrets.DEPLOYMENT_TOKEN }}" token: "${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}"
fetch-depth: 0 fetch-depth: 0
- name: "Apply changes" - name: "Apply changes"
run: | run: |

View File

@@ -14,7 +14,7 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
fetch-depth: 0 fetch-depth: 0
token: ${{ secrets.DEPLOYMENT_TOKEN }} token: ${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}
- name: Remove trailing whitespace - name: Remove trailing whitespace
run: | run: |
OUTPUT=$(find . -name "*.gd" -type f | xargs sed -i 's/[[:space:]]$//') OUTPUT=$(find . -name "*.gd" -type f | xargs sed -i 's/[[:space:]]$//')
@@ -29,7 +29,7 @@ jobs:
id: calculate_version id: calculate_version
uses: mathieudutour/github-tag-action@v5.6 uses: mathieudutour/github-tag-action@v5.6
with: with:
github_token: ${{ secrets.DEPLOYMENT_TOKEN }} github_token: ${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}
dry_run: true dry_run: true
pre_release_branches: "develop" pre_release_branches: "develop"
append_to_pre_release_tag: "alpha" append_to_pre_release_tag: "alpha"
@@ -58,12 +58,12 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
fetch-depth: 0 fetch-depth: 0
token: ${{ secrets.DEPLOYMENT_TOKEN }} token: ${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}
- name: Create version - name: Create version
id: create_version id: create_version
uses: mathieudutour/github-tag-action@v5.6 uses: mathieudutour/github-tag-action@v5.6
with: with:
github_token: ${{ secrets.DEPLOYMENT_TOKEN }} github_token: ${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}
dry_run: true dry_run: true
pre_release_branches: "develop" pre_release_branches: "develop"
append_to_pre_release_tag: "alpha" append_to_pre_release_tag: "alpha"
@@ -72,7 +72,7 @@ jobs:
- name: Create a GitHub release - name: Create a GitHub release
uses: actions/create-release@v1 uses: actions/create-release@v1
env: env:
GITHUB_TOKEN: ${{ secrets.DEPLOYMENT_TOKEN }} GITHUB_TOKEN: ${{ secrets.ESCORIA_DEPLOYMENT_TOKEN }}
with: with:
tag_name: ${{ steps.create_version.outputs.new_tag }} tag_name: ${{ steps.create_version.outputs.new_tag }}
release_name: ${{ steps.create_version.outputs.new_tag }} release_name: ${{ steps.create_version.outputs.new_tag }}

View File

@@ -1,3 +1,100 @@
## [4.0.0-alpha.248](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.248) (2023-05-31)
### Bug Fixes
* corrects the interrupt signal call arguments ([3077907](https://github.com/godot-escoria/escoria-demo-game/commit/30779078443f1eb2ba7dd9f133fd22d804b5502b))
* forces all show_menu and hide_menu commands to use auto transitions since the pause menu pauses the game, blocking further ESC script commands from running; updates room 14 for now ([6dd0a2c](https://github.com/godot-escoria/escoria-demo-game/commit/6dd0a2cd1958d7dbd7542aa85b09596e4fd14255))
## [4.0.0-alpha.247](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.247) (2023-05-29)
## [4.0.0-alpha.246](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.246) (2023-05-27)
### Bug Fixes
* accounts for text going past vertical limits of screen ([2294d83](https://github.com/godot-escoria/escoria-demo-game/commit/2294d83ff17e1dfc50523f51dc7439c6b2869e4d))
## [4.0.0-alpha.245](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.245) (2023-05-24)
### Bug Fixes
* fixes incorrect handler signature; also checks for null since it appears that sometimes the tween parameter is null when the handler is called ([0e47989](https://github.com/godot-escoria/escoria-demo-game/commit/0e47989fd1c9fb7cabfdd3b27fc73590d0e01222))
## [4.0.0-alpha.244](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.244) (2023-05-23)
## [4.0.0-alpha.243](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.243) (2023-05-23)
## [4.0.0-alpha.242](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.242) (2023-05-14)
### Features
* adds 'block_say' command/structure to allow for the reuse of dialog players, which can produce a better visual experience for characters that have speech spanning more than one dialog box ([04121b0](https://github.com/godot-escoria/escoria-demo-game/commit/04121b087bd1a7a3bd56d4679dbe9833c4b62fc5))
## [4.0.0-alpha.241](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.241) (2023-05-04)
### Features
* add fullscren option in options menu ([19c7685](https://github.com/godot-escoria/escoria-demo-game/commit/19c7685a68fc820fb0532a46978f9e12411ae7c7))
* updates checkout action version and allows for testing on this branch ([dd00869](https://github.com/godot-escoria/escoria-demo-game/commit/dd008690a3a71a8cca192e6dba3e6fc5ff65de9e))
* validates for multiple start locations set in an ESCRoom and updates scene tree with configuration warnings next to the offending ESCLocation nodes ([1f16421](https://github.com/godot-escoria/escoria-demo-game/commit/1f16421d65407c72f78d8e30e41f5299eb8db166))
* Wizard - set up combine when selected for inventory items ([dc4b6c2](https://github.com/godot-escoria/escoria-demo-game/commit/dc4b6c24fec49190bda594d8dfca83007d1fcb41))
### Bug Fixes
* adds code to manually show the popup since, according to Godot docs, using show() in the parent CanvasLayer won't show Popup-derived nodes ([fd05bc9](https://github.com/godot-escoria/escoria-demo-game/commit/fd05bc9f744abf604000925e2c8618a745f02cae))
* allows for string joining that's compatible with pre-3.5 Godot ([3727f82](https://github.com/godot-escoria/escoria-demo-game/commit/3727f82fbfeedd8bd433aae24b62509351673eb7))
* Attempted method call on a deleted object. ([#677](https://github.com/godot-escoria/escoria-demo-game/issues/677)) ([39165e4](https://github.com/godot-escoria/escoria-demo-game/commit/39165e4f20ea08329305616df46d78a8dd0249ce))
* avoids removing and re-adding dialog managers unnecessarily ([fdba154](https://github.com/godot-escoria/escoria-demo-game/commit/fdba1541c05f11128b1ca53cf08ff893559e9196))
* changes pause mode to block children from processing during pause by default ([648747c](https://github.com/godot-escoria/escoria-demo-game/commit/648747cf62a58becfb7b9ca3583a05bcd82d1722))
* Character creator - add tooltip, fix 8 dir angles, and make character selectable by default ([b47e653](https://github.com/godot-escoria/escoria-demo-game/commit/b47e65345f1dd453541cd5953063b54db5a7660e))
* clears tooltip when event is finished ([b827092](https://github.com/godot-escoria/escoria-demo-game/commit/b8270921760b333e2058845df4e1aad7b7d353eb))
* Correct error message for missing animation player ([82ebdc2](https://github.com/godot-escoria/escoria-demo-game/commit/82ebdc2d6e8e8d122bcb8bb65e97e79c7a9a9eb7))
* Corrected error message for angle in esc_movable ([5f78c02](https://github.com/godot-escoria/escoria-demo-game/commit/5f78c026dac1511adebac931c1a9d537cc7f4103))
* Debug message for when an item has no ESCLocation ([1709a25](https://github.com/godot-escoria/escoria-demo-game/commit/1709a25452ed3a1fc0359f2ffa836c68b7811d28))
* debugging; possible expired token so switching for new one created by me ([1d69c30](https://github.com/godot-escoria/escoria-demo-game/commit/1d69c30eda26ced393bea24b547a0a9eab267df0))
* Enabled playing of animated sprite by default ([cc0a067](https://github.com/godot-escoria/escoria-demo-game/commit/cc0a067b189e94b9b2ee503526c4f78b1d413682))
* ensure tidiness ([95f849e](https://github.com/godot-escoria/escoria-demo-game/commit/95f849ed5238b1977f0c9843fa5d8bf6039d5086))
* ensures proper number of interpolation placeholders ([68220ce](https://github.com/godot-escoria/escoria-demo-game/commit/68220ced91281e15b081283d2a11689a2153774d))
* Fix bug where inventory is invisible by default ([c597414](https://github.com/godot-escoria/escoria-demo-game/commit/c597414659f4fadb72e4e8cde2fde0acb7d41c29))
* Fix p_child is null exit on quit ([4604e00](https://github.com/godot-escoria/escoria-demo-game/commit/4604e006485f0f68c44ff056ab2aa785af6fc726))
* forces current_state updates as options don't always yield ([0ba6c37](https://github.com/godot-escoria/escoria-demo-game/commit/0ba6c3782a06dea0fffc17e6fcb6e272fd54d5da))
* Issue 336 - unclickable area with simplemouse ([cbb7984](https://github.com/godot-escoria/escoria-demo-game/commit/cbb79842d8b170a15153beb323bbd3b3a5505b3c))
* Issue-333 Error when room has no Global ID set ([a5195ef](https://github.com/godot-escoria/escoria-demo-game/commit/a5195ef2fc9c362cdd1c90fdb3f01def7b0ff7f5))
* makes 9verbs the default UI plugin ([14e5625](https://github.com/godot-escoria/escoria-demo-game/commit/14e5625bb572eff2fcdb0f410d77936ccd9f11b6))
* missing this check to see if the item needs to be combined with something or not ([7f1add6](https://github.com/godot-escoria/escoria-demo-game/commit/7f1add6505189bb355a306a6b953e39952edc6d2))
* Movable commands on non-movable items will be handled gracefully. ([0ea7b28](https://github.com/godot-escoria/escoria-demo-game/commit/0ea7b285b7e2d3831862910d9a84b3150d46dab9))
* moves resource caching into _process method and out of a separate thread to avoid odd resource/RID loading issues, as noted here: https://github.com/godotengine/godot/issues/63493 ([cfbc3a5](https://github.com/godot-escoria/escoria-demo-game/commit/cfbc3a5c3137afb98a5ab12dddf8b2af7721b5a5))
* necessary in order to prevent error message from printing out ([6842ed4](https://github.com/godot-escoria/escoria-demo-game/commit/6842ed48eaf13c21cc1bcce267848bda35723d27))
* Populate default animation as the object manager expects it ([0610449](https://github.com/godot-escoria/escoria-demo-game/commit/0610449dbf4681e14e2ac07e02174e3e1b77e1e7))
* Remove call to stop dialog to correct player mirroring ([6692953](https://github.com/godot-escoria/escoria-demo-game/commit/6692953385e1a96082b4dad676715de6f8a0d2c5))
* removes type as ESCResourceCache checks the type of 'res' and can expect a non-Resource-derived value, e.g. ResourceInteractiveLoader ([16fd3d6](https://github.com/godot-escoria/escoria-demo-game/commit/16fd3d63011e9a18b9abb86a728b7b75bb6644f6))
* updates various references to use new dialog manager code ([ffb6271](https://github.com/godot-escoria/escoria-demo-game/commit/ffb6271d0eccbe95c5be4377576d0288828f9f09))
* uses proper casting and updates validation checks ([327b72f](https://github.com/godot-escoria/escoria-demo-game/commit/327b72f67b2a2358977c326d5a2f4516690cb911))
* uses updated, non-expiring PAT although it's 'personal' and mine; the fix for the fanout issues involved resetting the repos that used 'core' as there was a divergence between the repos ([bf30156](https://github.com/godot-escoria/escoria-demo-game/commit/bf301565eb51409002fcdfaae2ef0890594b87b7))
* Wizard - NPCs have to be ESCItems instead of ESCPlayers ([b0c0c5d](https://github.com/godot-escoria/escoria-demo-game/commit/b0c0c5d61b70bd0f24d62388deb1425333ac913f))
* wrong argument passed in turn_to error message ([4e146ae](https://github.com/godot-escoria/escoria-demo-game/commit/4e146ae78ca137f3056668db55bd52e82af23ab7))
## [4.0.0-alpha.240](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.240) (2022-12-15) ## [4.0.0-alpha.240](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.240) (2022-12-15)

View File

@@ -0,0 +1,62 @@
# `block_say`
#
# `say` commands called subsequent to using the `block_say` command will reuse the
# dialog box type of the previous `say` command if both dialog box types between the two `say`
# commands match.
#
# Different dialog box types can be used across multiple `say` commands, with the latest one
# used being preserved for reuse by the next `say` command should the dialog box type specified by
# both `say` commands match.
#
# This reuse will continue until a call to `end_block_say` is made.
#
# Using `block_say` more than once prior to calling `end_block_say` is idempotent and has the
# following behaviour:
#
# - If no `say` command has yet been encountered since the first use of `block_say`,
# the result of using this command will be as described above.
# - If a `say` command has been encountered since the previous use of `block_say`,
# the dialog box used with that `say` command will continue to be reused for subsequent
# `say` commands should the dialog box type requested match. Note that the dialog box used with
# the next `say` command may be different than the one currently being reused.
#
# Example:
# `block say`
# `say player "Picture's looking good."`
# `say player "And so am I."`
# `end_block_say`
#
# This example will reuse the same dialog box type since they are the same between both `say` calls.
#
# @ESC
extends ESCBaseCommand
class_name BlockSayCommand
# Constructor
func _init() -> void:
pass
# Return the descriptor of the arguments of this command
func configure() -> ESCCommandArgumentDescriptor:
return ESCCommandArgumentDescriptor.new(0)
# Validate whether the given arguments match the command descriptor
func validate(arguments: Array):
return true
# Run the command
func run(command_params: Array) -> int:
escoria.dialog_player.enable_preserve_dialog_box()
return ESCExecution.RC_OK
# Function called when the command is interrupted.
func interrupt():
escoria.logger.debug(
self,
"[%s] interrupt() function not implemented." % get_command_name()
)

View File

@@ -0,0 +1,47 @@
# `end_block_say`
#
# `say` commands used subsequent to using the `end_block_say` command will no longer
# reuse the dialog box type used by the previous `say` command(s) encountered.
#
# Using `end_block_say` more than once is safe and idempotent.
#
# Example:
# `block say`
# `say player "Picture's looking good."`
# `say player "And so am I."`
# `end_block_say`
#
# This example will reuse the same dialog box type since they are the same between both `say` calls.
#
# @ESC
extends ESCBaseCommand
class_name EndBlockSayCommand
# Constructor
func _init() -> void:
pass
# Return the descriptor of the arguments of this command
func configure() -> ESCCommandArgumentDescriptor:
return ESCCommandArgumentDescriptor.new(0)
# Validate whether the given arguments match the command descriptor
func validate(arguments: Array):
return true
# Run the command
func run(command_params: Array) -> int:
escoria.dialog_player.disable_preserve_dialog_box()
return ESCExecution.RC_OK
# Function called when the command is interrupted.
func interrupt():
escoria.logger.debug(
self,
"[%s] interrupt() function not implemented." % get_command_name()
)

View File

@@ -1,18 +1,11 @@
# `hide_menu menu_type [enable_automatic_transition]` # `hide_menu menu_type`
# #
# Hides either the main menu or the pause menu. The enable_automatic_transition # Hides either the main menu or the pause menu. Transitions from the menu using
# parameter can be used to specify if Escoria manages the graphical transition # the default transition type (set in the Escoria project settings).
# for you or not.
# Setting `enable_automatic_transition` to false allows you to manage the
# transition effect for your room as it transitions in and out. Place a
# `transition` command in the room's `setup` event to manage the look of the
# transition in, and in the room's `exit_scene` event to manage the look of the
# transition out.
# #
# **Parameters** # **Parameters**
# #
# - *menu_type*: Which menu to hide. Can be either `main` or `pause` (default: `main`) # - *menu_type*: Which menu to hide. Can be either `main` or `pause` (default: `main`)
# - *enable_automatic_transition*: Whether to automatically transition from the menu (default: `false`)
# #
# @ESC # @ESC
extends ESCBaseCommand extends ESCBaseCommand
@@ -23,8 +16,8 @@ class_name HideMenuCommand
func configure() -> ESCCommandArgumentDescriptor: func configure() -> ESCCommandArgumentDescriptor:
return ESCCommandArgumentDescriptor.new( return ESCCommandArgumentDescriptor.new(
0, 0,
[TYPE_STRING, TYPE_BOOL], [TYPE_STRING],
["main", false] ["main"]
) )
@@ -45,26 +38,26 @@ func validate(arguments: Array):
# Run the command # Run the command
func run(command_params: Array) -> int: func run(command_params: Array) -> int:
var transition_id: int var transition_id: int
if command_params[1]:
# Transition out from menu
transition_id = escoria.main.scene_transition.transition(
"",
ESCTransitionPlayer.TRANSITION_MODE.OUT
)
if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT: # Transition out from menu
while yield( transition_id = escoria.main.scene_transition.transition(
escoria.main.scene_transition, "",
"transition_done" ESCTransitionPlayer.TRANSITION_MODE.OUT
) != transition_id: )
pass
if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT:
while yield(
escoria.main.scene_transition,
"transition_done"
) != transition_id:
pass
if command_params[0] == "main": if command_params[0] == "main":
escoria.game_scene.hide_main_menu() escoria.game_scene.hide_main_menu()
elif command_params[0] == "pause": elif command_params[0] == "pause":
escoria.game_scene.unpause_game() escoria.game_scene.unpause_game()
if command_params[1] and escoria.main.current_scene != null: if escoria.main.current_scene != null:
transition_id = escoria.main.scene_transition.transition() transition_id = escoria.main.scene_transition.transition()
if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT: if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT:

View File

@@ -1,18 +1,11 @@
# `show_menu menu_type [enable_automatic_transition]` # `show_menu menu_type`
# #
# Shows either the main menu or the pause menu. The enable_automatic_transition # Shows either the main menu or the pause menu. Transitions to the menu using
# parameter can be used to specify if Escoria manages the graphical transition to # the default transition type (set in the Escoria project settings).
# the menu or not.
# Setting `enable_automatic_transition` to false allows you to manage the
# transition effect for your menu as it transitions in and out. Place a
# `transition` command in the menu's `setup` event to manage the look of the
# transition in, and in the menu's `exit_scene` event to manage the look of the
# transition out.
# #
# **Parameters** # **Parameters**
# #
# - *menu_type*: Which menu to show. Can be either `main` or `pause` (default: `main`) # - *menu_type*: Which menu to show. Can be either `main` or `pause` (default: `main`)
# - *enable_automatic_transition*: Whether to automatically transition to the menu (default: `false`)
# #
# @ESC # @ESC
extends ESCBaseCommand extends ESCBaseCommand
@@ -23,8 +16,8 @@ class_name ShowMenuCommand
func configure() -> ESCCommandArgumentDescriptor: func configure() -> ESCCommandArgumentDescriptor:
return ESCCommandArgumentDescriptor.new( return ESCCommandArgumentDescriptor.new(
0, 0,
[TYPE_STRING, TYPE_BOOL], [TYPE_STRING],
["main", false] ["main"]
) )
@@ -47,39 +40,33 @@ func run(command_params: Array) -> int:
if not escoria.game_scene.is_inside_tree(): if not escoria.game_scene.is_inside_tree():
escoria.add_child(escoria.game_scene) escoria.add_child(escoria.game_scene)
if command_params[1]: # Transition out from current scene
# Transition out from current scene var transition_id = escoria.main.scene_transition.transition(
var transition_id = escoria.main.scene_transition.transition( "",
"", ESCTransitionPlayer.TRANSITION_MODE.OUT
ESCTransitionPlayer.TRANSITION_MODE.OUT )
)
if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT: if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT:
while yield( while yield(
escoria.main.scene_transition, escoria.main.scene_transition,
"transition_done" "transition_done"
) != transition_id: ) != transition_id:
pass pass
if command_params[0] == "main": if command_params[0] == "main":
escoria.game_scene.show_main_menu() escoria.game_scene.show_main_menu()
elif command_params[0] == "pause": elif command_params[0] == "pause":
escoria.game_scene.pause_game() escoria.game_scene.pause_game()
# Transition in to menu # Transition in to menu
transition_id = escoria.main.scene_transition.transition() transition_id = escoria.main.scene_transition.transition()
if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT: if transition_id != ESCTransitionPlayer.TRANSITION_ID_INSTANT:
while yield( while yield(
escoria.main.scene_transition, escoria.main.scene_transition,
"transition_done" "transition_done"
) != transition_id: ) != transition_id:
pass pass
else:
if command_params[0] == "main":
escoria.game_scene.show_main_menu()
elif command_params[0] == "pause":
escoria.game_scene.pause_game()
return ESCExecution.RC_OK return ESCExecution.RC_OK

View File

@@ -117,5 +117,6 @@ func interrupt():
tween.stop_all() tween.stop_all()
func _on_tween_completed(tween: Tween): func _on_tween_completed(tween: Tween, _key: NodePath):
tween.queue_free() if tween:
tween.queue_free()

View File

@@ -75,11 +75,6 @@ var action_state = ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM \
# #
# - action: type of the action to run # - action: type of the action to run
# - params: Parameters for the action # - params: Parameters for the action
# - BACKGROUND_CLICK: [moving_obj, target, walk_fast]
# - ITEM_LEFT_CLICK: [item, input_event]
# - ITEM_RIGHT_CLICK: [item, input_event]
# - TRIGGER_IN: [trigger_id, object_id, trigger_in_verb]
# - TRIGGER_OUT: [trigger_id, object_id, trigger_out_verb]
# - can_interrupt: if true, this command will interrupt any ongoing event # - can_interrupt: if true, this command will interrupt any ongoing event
# before it is finished # before it is finished
func do(action: int, params: Array = [], can_interrupt: bool = false) -> void: func do(action: int, params: Array = [], can_interrupt: bool = false) -> void:

View File

@@ -121,6 +121,12 @@ func register_object(object: ESCObject, room: ESCRoom = null, force: bool = fals
if room == null or room.global_id.empty(): if room == null or room.global_id.empty():
# We duplicate the key so as to not hold a reference when current_room_key # We duplicate the key so as to not hold a reference when current_room_key
# changes. # changes.
if current_room_key.room_global_id.empty():
escoria.logger.error(
self,
"The current room has no Global ID.\n" +
"Please set the ESCRoom's Global ID property."
)
room_key.room_global_id = current_room_key.room_global_id room_key.room_global_id = current_room_key.room_global_id
room_key.room_instance_id = current_room_key.room_instance_id room_key.room_instance_id = current_room_key.room_instance_id

View File

@@ -89,7 +89,7 @@ func change_scene(room_path: String, enable_automatic_transitions: bool) -> void
if escoria.dialog_player: if escoria.dialog_player:
escoria.dialog_player.interrupt() escoria.dialog_player.interrupt()
escoria.inputs_manager.hover_stack_clear() escoria.inputs_manager.hover_stack.clear()
# Check if game scene was loaded # Check if game scene was loaded
if not escoria.game_scene: if not escoria.game_scene:

View File

@@ -39,7 +39,7 @@ func run() -> int:
if _is_interrupted: if _is_interrupted:
final_rc = ESCExecution.RC_INTERRUPTED final_rc = ESCExecution.RC_INTERRUPTED
statement.interrupt() statement.interrupt()
emit_signal("interrupted", self, final_rc) emit_signal("interrupted", self, statement, final_rc)
return final_rc return final_rc
if statement.is_valid(): if statement.is_valid():

View File

@@ -74,6 +74,10 @@ func _enter_tree():
func _ready(): func _ready():
mouse_filter = MOUSE_FILTER_IGNORE mouse_filter = MOUSE_FILTER_IGNORE
# If background has no texture, set its rect size to viewport size
if texture == null and rect_size == Vector2.ZERO:
rect_size = escoria.game_size
if !Engine.is_editor_hint(): if !Engine.is_editor_hint():
escoria.inputs_manager.register_background(self) escoria.inputs_manager.register_background(self)

View File

@@ -46,6 +46,9 @@ var tooltip_node: Object
# function of game.gd script. # function of game.gd script.
var room_ready_for_inputs: bool = false var room_ready_for_inputs: bool = false
# Displayer node for hover stack debugging
var hover_stack_displayer
# Function called when ESCGame enters the scene tree. # Function called when ESCGame enters the scene tree.
func _enter_tree(): func _enter_tree():
@@ -59,13 +62,21 @@ func _enter_tree():
self, self,
"_on_action_finished" "_on_action_finished"
) )
escoria.main.connect( escoria.main.connect(
"room_ready", "room_ready",
self, self,
"_on_room_ready" "_on_room_ready"
) )
# Debug display for hover stack
if ProjectSettings.get_setting(ESCProjectSettingsManager.ENABLE_HOVER_STACK_VIEWER) and \
get_node_or_null("hover_stack_layer") == null:
hover_stack_displayer = preload(
"res://addons/escoria-core/ui_library/tools/hover_stack/hover_stack.tscn"
).instance()
add_child(hover_stack_displayer)
escoria.inputs_manager.hover_stack.connect("hover_stack_changed", hover_stack_displayer, "update")
# Function called when ESCGame exits the scene tree. # Function called when ESCGame exits the scene tree.
func _exit_tree(): func _exit_tree():

View File

@@ -300,7 +300,7 @@ func _ready():
# the top level of overlapping stack. # the top level of overlapping stack.
func _on_mouse_exited(): func _on_mouse_exited():
if escoria.inputs_manager.hover_stack.has(self): if escoria.inputs_manager.hover_stack.has(self):
escoria.inputs_manager.hover_stack_erase_item(self) escoria.inputs_manager.hover_stack.erase_item(self)
escoria.inputs_manager.unset_hovered_node(self) escoria.inputs_manager.unset_hovered_node(self)
@@ -321,7 +321,7 @@ class HoverStackSorter:
func _on_input_event(_viewport: Object, event: InputEvent, _shape_idx: int): func _on_input_event(_viewport: Object, event: InputEvent, _shape_idx: int):
if event is InputEventMouseMotion: if event is InputEventMouseMotion:
var physics2d_dss: Physics2DDirectSpaceState = get_world_2d().direct_space_state var physics2d_dss: Physics2DDirectSpaceState = get_world_2d().direct_space_state
var colliding: Array = physics2d_dss.intersect_point(get_global_mouse_position(), 32, [], 0x7FFFFFFF, true, true) var colliding: Array = physics2d_dss.intersect_point(get_global_mouse_position(), 32, [], 0x7FFFFFFF, true, true)
var colliding_nodes = [] var colliding_nodes = []
for c in colliding: for c in colliding:
if c.collider.get("global_id") \ if c.collider.get("global_id") \
@@ -331,8 +331,8 @@ func _on_input_event(_viewport: Object, event: InputEvent, _shape_idx: int):
if colliding_nodes.empty(): if colliding_nodes.empty():
return return
colliding_nodes.sort_custom(HoverStackSorter, "sort_ascending_z_index") colliding_nodes.sort_custom(HoverStackSorter, "sort_ascending_z_index")
escoria.inputs_manager.hover_stack_clear() escoria.inputs_manager.hover_stack.clear()
escoria.inputs_manager.hover_stack_add_items(colliding_nodes) escoria.inputs_manager.hover_stack.add_items(colliding_nodes)
escoria.inputs_manager.set_hovered_node(colliding_nodes.back()) escoria.inputs_manager.set_hovered_node(colliding_nodes.back())
@@ -587,7 +587,7 @@ func teleport_to(target: Vector2) -> void:
escoria.logger.warn( escoria.logger.warn(
self, self,
"Node %s cannot \"teleport_to\". Its \"is_movable\" parameter is false." %self "Node %s cannot \"teleport_to\". Its \"is_movable\" parameter is false." %self
) )
# Use the movable node to make the item walk to the given position # Use the movable node to make the item walk to the given position
@@ -603,7 +603,7 @@ func walk_to(pos: Vector2, p_walk_context: ESCWalkContext = null) -> void:
escoria.logger.warn( escoria.logger.warn(
self, self,
"Node %s cannot use \"walk_to\". Its \"is_movable\" parameter is false." %self "Node %s cannot use \"walk_to\". Its \"is_movable\" parameter is false." %self
) )
# Stop the movable node immediately and remain where it is at this moment, # Stop the movable node immediately and remain where it is at this moment,
@@ -667,7 +667,7 @@ func set_angle(deg: int, wait: float = 0.0):
escoria.logger.warn( escoria.logger.warn(
self, self,
"Node %s cannot use \"set_angle\". Its \"is_movable\" parameter is false." % self "Node %s cannot use \"set_angle\". Its \"is_movable\" parameter is false." % self
) )
# Turn to face another object # Turn to face another object
@@ -718,13 +718,13 @@ func check_talk_possible():
) )
return false return false
return true return true
# Play the talking animation # Play the talking animation
func start_talking(): func start_talking():
if not check_talk_possible(): if not check_talk_possible():
return return
var animation_player = get_animation_player() var animation_player = get_animation_player()
if animation_player.is_playing(): if animation_player.is_playing():
@@ -744,7 +744,7 @@ func start_talking():
func stop_talking(): func stop_talking():
if not check_talk_possible(): if not check_talk_possible():
return return
var animation_player = get_animation_player() var animation_player = get_animation_player()
if animation_player.is_playing(): if animation_player.is_playing():

View File

@@ -3,15 +3,23 @@
# automatically use an `ESCLocation` that is a child of the destination node. # automatically use an `ESCLocation` that is a child of the destination node.
# Commands like `turn_to`--which are not movement-based--will ignore child # Commands like `turn_to`--which are not movement-based--will ignore child
# `ESCLocation`s and refer to the parent node. # `ESCLocation`s and refer to the parent node.
tool
extends Position2D extends Position2D
class_name ESCLocation, "res://addons/escoria-core/design/esc_location.svg" class_name ESCLocation, "res://addons/escoria-core/design/esc_location.svg"
signal is_start_location_set
const MULTIPLE_START_LOCATIONS_WARNING = \
"Only 1 ESCLocation should have is_start_location set to true in an ESCRoom"
# The global ID of this item # The global ID of this item
export(String) var global_id export(String) var global_id
# If true, this ESCLocation is considered as a player start location # If true, this ESCLocation is considered as a player start location
export(bool) var is_start_location = false export(bool) var is_start_location = false setget set_is_start_location
# If true, player orients towards 'interaction_direction' as # If true, player orients towards 'interaction_direction' as
# player character arrives. # player character arrives.
@@ -22,6 +30,9 @@ export(bool) var player_orients_on_arrival = true
export(int) var interaction_direction export(int) var interaction_direction
var _multiple_start_locations_exist: bool = false setget set_multiple_locations_exist
# Used by "is" keyword to check whether a node's class_name # Used by "is" keyword to check whether a node's class_name
# is the same as p_classname. # is the same as p_classname.
# #
@@ -34,10 +45,36 @@ func is_class(p_classname: String) -> bool:
# Ready function # Ready function
func _ready(): func _ready():
if not self.global_id.empty(): if not Engine.is_editor_hint():
escoria.object_manager.register_object( if not self.global_id.empty():
ESCObject.new( escoria.object_manager.register_object(
self.global_id, ESCObject.new(
self self.global_id,
self
)
) )
)
func _exit_tree():
if Engine.is_editor_hint():
if is_start_location:
emit_signal("is_start_location_set", self)
func _get_configuration_warning():
if _multiple_start_locations_exist:
return MULTIPLE_START_LOCATIONS_WARNING
return ""
func set_multiple_locations_exist(value: bool) -> void:
_multiple_start_locations_exist = value
update_configuration_warning()
func set_is_start_location(value: bool) -> void:
is_start_location = value
if Engine.is_editor_hint() and is_instance_valid(get_owner()):
emit_signal("is_start_location_set")

View File

@@ -1,47 +1,24 @@
# A cache for resources # A cache for resources
extends Reference extends Node
class_name ESCResourceCache class_name ESCResourceCache
var thread: Thread
var mutex: Mutex
var sem: Semaphore
var queue: Array = []
var pending: Dictionary = {}
signal resource_loading_progress(path, progress) signal resource_loading_progress(path, progress)
signal resource_loading_done(path) signal resource_loading_done(path)
signal resource_queue_progress(queue_size) signal resource_queue_progress(queue_size)
#warning-ignore:unused_argument var queue: Array = []
func _lock(caller): var pending: Dictionary = {}
mutex.lock()
#warning-ignore:unused_argument
func _unlock(caller):
mutex.unlock()
#warning-ignore:unused_argument
func _post(caller):
sem.post()
#warning-ignore:unused_argument
func _wait(caller):
sem.wait()
func queue_resource(path: String, p_in_front: bool = false, p_permanent: bool = false): func queue_resource(path: String, p_in_front: bool = false, p_permanent: bool = false):
_lock("queue_resource")
if path in pending: if path in pending:
_unlock("queue_resource")
return return
elif ResourceLoader.has(path): elif ResourceLoader.has(path):
var res = ResourceLoader.load(path) var res = ResourceLoader.load(path)
pending[path] = ESCResourceDescriptor.new(res, p_permanent) pending[path] = ESCResourceDescriptor.new(res, p_permanent)
_unlock("queue_resource")
return
else: else:
var res = ResourceLoader.load_interactive(path) var res = ResourceLoader.load_interactive(path)
res.set_meta("path", path) res.set_meta("path", path)
@@ -50,21 +27,16 @@ func queue_resource(path: String, p_in_front: bool = false, p_permanent: bool =
else: else:
queue.push_back(res) queue.push_back(res)
pending[path] = ESCResourceDescriptor.new(res, p_permanent) pending[path] = ESCResourceDescriptor.new(res, p_permanent)
_post("queue_resource")
_unlock("queue_resource")
return
func cancel_resource(path): func cancel_resource(path):
_lock("cancel_resource")
if path in pending: if path in pending:
if pending[path].res is ResourceInteractiveLoader: if pending[path].res is ResourceInteractiveLoader:
queue.erase(pending[path].res) queue.erase(pending[path].res)
pending.erase(path) pending.erase(path)
_unlock("cancel_resource")
func clear(): func clear():
_lock("clear")
for p in pending.keys(): for p in pending.keys():
if pending[p].permanent: if pending[p].permanent:
continue continue
@@ -72,11 +44,8 @@ func clear():
#queue = [] #queue = []
#pending = {} #pending = {}
_unlock("clear")
func get_progress(path): func get_progress(path):
_lock("get_progress")
var ret = -1 var ret = -1
if path in pending: if path in pending:
if pending[path].res is ResourceInteractiveLoader: if pending[path].res is ResourceInteractiveLoader:
@@ -85,36 +54,32 @@ func get_progress(path):
ret = 1.0 ret = 1.0
emit_signal("resource_loading_done", path) emit_signal("resource_loading_done", path)
emit_signal("resource_loading_progress", path, ret) emit_signal("resource_loading_progress", path, ret)
_unlock("get_progress")
return ret return ret
func is_ready(path): func is_ready(path):
var ret var ret
_lock("is_ready")
if path in pending: if path in pending:
ret = !(pending[path].res is ResourceInteractiveLoader) ret = !(pending[path].res is ResourceInteractiveLoader)
else: else:
ret = false ret = false
_unlock("is_ready")
return ret return ret
func _wait_for_resource(res, path): func _wait_for_resource(res, path):
_unlock("wait_for_resource")
while true: while true:
#VisualServer.call("sync") # workaround because sync is a keyword #VisualServer.call("sync") # workaround because sync is a keyword
VisualServer.force_sync() VisualServer.force_sync()
OS.delay_usec(16000) # wait 1 frame OS.delay_usec(16000) # wait 1 frame
_lock("wait_for_resource")
if queue.size() == 0 || queue[0] != res: if queue.size() == 0 || queue[0] != res:
return pending[path].res return pending[path].res
_unlock("wait_for_resource")
func get_resource(path): func get_resource(path):
_lock("get_resource")
if path in pending: if path in pending:
if pending[path].res is ResourceInteractiveLoader: if pending[path].res is ResourceInteractiveLoader:
var res = pending[path].res var res = pending[path].res
@@ -127,17 +92,16 @@ func get_resource(path):
if !pending[path].permanent: if !pending[path].permanent:
pending.erase(path) pending.erase(path)
_unlock("return")
return res return res
else: else:
var res = pending[path].res var res = pending[path].res
if !pending[path].permanent: if !pending[path].permanent:
pending.erase(path) pending.erase(path)
_unlock("return")
return res return res
else: else:
_unlock("return")
# We can't use ESCProjectSettingsManager here since this method # We can't use ESCProjectSettingsManager here since this method
# can be called from escoria._init() # can be called from escoria._init()
if not ProjectSettings.get_setting("escoria/platform/skip_cache"): if not ProjectSettings.get_setting("escoria/platform/skip_cache"):
@@ -146,17 +110,32 @@ func get_resource(path):
return res return res
return ResourceLoader.load(path) return ResourceLoader.load(path)
func thread_process():
_wait("thread_process")
_lock("process") func print_progress(p_path, p_progress):
printt(p_path, "loading", round(p_progress * 100), "%")
func res_loaded(p_path):
printt("loaded resource", p_path)
func print_queue_progress(p_queue_size):
printt("queue size:", p_queue_size)
func start():
pass
## Uncomment these for debug, or wait for someone to implement log levels
# connect("resource_loading_progress", self, "print_progress")
# connect("resource_loading_done", self, "res_loaded")
# connect("resource_queue_progress", self, "print_queue_progress")
func _process(_delta) -> void:
while queue.size() > 0: while queue.size() > 0:
var res = queue[0] var res = queue[0]
_unlock("process_poll")
var ret = res.poll() var ret = res.poll()
_lock("process_check_queue")
var path = res.get_meta("path") var path = res.get_meta("path")
if ret == ERR_FILE_EOF || ret != OK: if ret == ERR_FILE_EOF || ret != OK:
@@ -166,33 +145,3 @@ func thread_process():
queue.erase(res) # something might have been put at the front of the queue while we polled, so use erase instead of remove queue.erase(res) # something might have been put at the front of the queue while we polled, so use erase instead of remove
emit_signal("resource_queue_progress", queue.size()) emit_signal("resource_queue_progress", queue.size())
get_progress(path)
_unlock("process")
#warning-ignore:unused_argument
func thread_func(u):
while true:
thread_process()
func print_progress(p_path, p_progress):
printt(p_path, "loading", round(p_progress * 100), "%")
func res_loaded(p_path):
printt("loaded resource", p_path)
func print_queue_progress(p_queue_size):
printt("queue size:", p_queue_size)
func start():
mutex = Mutex.new()
sem = Semaphore.new()
thread = Thread.new()
thread.start(self, "thread_func", 0)
## Uncomment these for debug, or wait for someone to implement log levels
# connect("resource_loading_progress", self, "print_progress")
# connect("resource_loading_done", self, "res_loaded")
# connect("resource_queue_progress", self, "print_queue_progress")

View File

@@ -12,6 +12,8 @@ enum EditorRoomDebugDisplay {
CAMERA_LIMITS CAMERA_LIMITS
} }
const ESC_BACKGROUND_NAME = "escbackground"
# The global id of this room # The global id of this room
export(String) var global_id = "" export(String) var global_id = ""
@@ -66,8 +68,26 @@ func _ready():
) != self.filename: ) != self.filename:
is_run_directly = true is_run_directly = true
if not Engine.is_editor_hint(): if Engine.is_editor_hint():
escoria.room_manager.init_room(self) _connect_location_nodes()
_validate_start_locations()
return
# If room has no ESCBackground child, add one
var found_escbackground: bool = false
for child in get_children():
if child is ESCBackground:
found_escbackground = true
move_child(child, 0)
if not found_escbackground:
var esc_bg = ESCBackground.new()
esc_bg.name = ESC_BACKGROUND_NAME
if not camera_limits.empty():
esc_bg.set_size(camera_limits.front().size)
add_child(esc_bg)
move_child(esc_bg, 0)
escoria.room_manager.init_room(self)
# Draw the camera limits visualization if enabled # Draw the camera limits visualization if enabled
@@ -97,6 +117,56 @@ func _draw():
camera_limits[i].position.y + 30), str(i), camera_limits_colors[i]) camera_limits[i].position.y + 30), str(i), camera_limits_colors[i])
# Listen for any signals from ESCLocation indicating that the is_start_location attribute
# has been set/unset in order to update start location validation.
func _connect_location_nodes() -> void:
_connect_location_nodes_in_tree(self)
func _connect_location_nodes_in_tree(node: Node):
for n in node.get_children():
if n is ESCLocation:
if not n.is_connected("is_start_location_set", self, "_validate_start_locations"):
n.connect("is_start_location_set", self, "_validate_start_locations")
if n.get_child_count() > 0:
_connect_location_nodes_in_tree(n)
# Validate that we only have one start location for this scene. If we don't, call it out in the
# scene tree via configuration warnings.
#
# We may have to ignore a node if it's being removed/deleted from the scene tree.
func _validate_start_locations(to_ignore: ESCLocation = null):
var esc_locations: Array = _find_esc_locations(self)
var num_start_locations: int = 0
for n in esc_locations:
if n == to_ignore:
continue
num_start_locations += 1 if n.is_start_location else 0
for n in esc_locations:
if n == to_ignore:
continue
n.set_multiple_locations_exist(n.is_start_location and num_start_locations > 1)
func _find_esc_locations(node: Node) -> Array:
var esc_locations: Array = []
for n in node.get_children():
if n is ESCLocation:
esc_locations.append(n)
if n.get_child_count() > 0:
esc_locations.append_array(_find_esc_locations(n))
return esc_locations
# Set the camera limits # Set the camera limits
# #
# #### Parameters # #### Parameters

View File

@@ -4,12 +4,12 @@ class_name ESCResourceDescriptor
# The resource being described # The resource being described
var res: Resource var res
# Whether the resource is permanent # Whether the resource is permanent
var permanent: bool var permanent: bool
func _init(res_in: Resource, permanent_in: bool) -> void: func _init(res_in, permanent_in: bool) -> void:
res = res_in res = res_in
permanent = permanent_in permanent = permanent_in

View File

@@ -30,7 +30,7 @@ const ESC_UI_PRIMARY_ACTION = "esc_ui_primary_action"
var input_mode = INPUT_ALL var input_mode = INPUT_ALL
# A LIFO stack of hovered items # A LIFO stack of hovered items
var hover_stack: Array = [] var hover_stack: HoverStack
# The global id of the topmost item from the hover_stack # The global id of the topmost item from the hover_stack
var hotspot_focused: String = "" var hotspot_focused: String = ""
@@ -55,6 +55,8 @@ var _hovered_element = null
# Constructor # Constructor
func _init(): func _init():
escoria.event_manager.connect("event_finished", self, "_on_event_finished") escoria.event_manager.connect("event_finished", self, "_on_event_finished")
hover_stack = HoverStack.new()
hover_stack.connect("hover_stack_changed", self, "_on_hover_stack_changed")
# Called when an event is finished, so that the current hotspot is reset # Called when an event is finished, so that the current hotspot is reset
@@ -175,22 +177,12 @@ func try_custom_input_handler(event: InputEvent, is_default_state: bool) -> bool
return false return false
# Callback called by hover stack content change.
# Unsets the hovered node. func _on_hover_stack_changed():
# if hover_stack.empty():
# **Parameters** unset_hovered_node(_hovered_element)
# else:
# - item: the item that was unfocused (mouse_exited) set_hovered_node(hover_stack.get_top_item())
func unset_hovered_node(item: ESCItem):
if _hovered_element == item:
_hovered_element.mouse_exited()
_hovered_element = null
if hover_stack:
set_hovered_node(hover_stack.pop_back())
else:
hotspot_focused = ""
# Sets the hovered node and calls its mouse_entered() method if it was the top # Sets the hovered node and calls its mouse_entered() method if it was the top
@@ -203,6 +195,12 @@ func unset_hovered_node(item: ESCItem):
# **Returns** # **Returns**
# True if item is the new top hovered object # True if item is the new top hovered object
func set_hovered_node(item: ESCItem) -> bool: func set_hovered_node(item: ESCItem) -> bool:
if _hovered_element != item \
and escoria.action_manager.is_object_actionable(item.global_id) \
or (item is ESCPlayer and not (item as ESCPlayer).selectable):
_hovered_element = item
_hovered_element.mouse_entered()
return true
# If tested item was already hovered # If tested item was already hovered
# or is not actionable (not selectable for ESCPlayer) then do nothing # or is not actionable (not selectable for ESCPlayer) then do nothing
if _hovered_element == item \ if _hovered_element == item \
@@ -211,7 +209,7 @@ func set_hovered_node(item: ESCItem) -> bool:
return true return true
# Else if the tested item is on top of hover stack (or null) # Else if the tested item is on top of hover stack (or null)
# Set that item as hovered and call that item's mouse_entered() # Set that item as hovered and call that item's mouse_entered()
if not is_instance_valid(_hovered_element) or hover_stack.back() != item: if not is_instance_valid(_hovered_element) or hover_stack.get_top_item() != item:
_hovered_element = item _hovered_element = item
_hovered_element.mouse_entered() _hovered_element.mouse_entered()
return true return true
@@ -220,6 +218,20 @@ func set_hovered_node(item: ESCItem) -> bool:
return false return false
# Unsets the hovered node.
#
# **Parameters**
#
# - item: the item that was unfocused (mouse_exited)
func unset_hovered_node(item: ESCItem):
if item == null:
return
if _hovered_element == item:
_hovered_element.mouse_exited()
_hovered_element = null
hotspot_focused = ""
# The background was clicked with the LMB # The background was clicked with the LMB
# #
# #### Parameters # #### Parameters
@@ -366,7 +378,7 @@ func _on_mouse_entered_item(item: ESCItem) -> void:
hotspot_focused = "" hotspot_focused = ""
escoria.main.current_scene.game.element_unfocused() escoria.main.current_scene.game.element_unfocused()
else: else:
hotspot_focused = hover_stack.back().global_id hotspot_focused = hover_stack.get_top_item().global_id
escoria.main.current_scene.game.element_focused(hotspot_focused) escoria.main.current_scene.game.element_focused(hotspot_focused)
return return
@@ -394,7 +406,7 @@ func _on_mouse_entered_item(item: ESCItem) -> void:
func _on_mouse_exited_item(item: ESCItem) -> void: func _on_mouse_exited_item(item: ESCItem) -> void:
var object: ESCObject = escoria.object_manager.get_object(item.global_id) var object: ESCObject = escoria.object_manager.get_object(item.global_id)
if object and not object.interactive: if object and not object.interactive:
hover_stack_erase_item(item) hover_stack.erase_item(item)
escoria.main.current_scene.game.element_unfocused() escoria.main.current_scene.game.element_unfocused()
return return
@@ -413,7 +425,7 @@ func _on_mouse_exited_item(item: ESCItem) -> void:
hotspot_focused = "" hotspot_focused = ""
escoria.main.current_scene.game.element_unfocused() escoria.main.current_scene.game.element_unfocused()
else: else:
hotspot_focused = hover_stack.back().global_id hotspot_focused = hover_stack.get_top_item().global_id
escoria.main.current_scene.game.element_focused(hotspot_focused) escoria.main.current_scene.game.element_focused(hotspot_focused)
@@ -426,13 +438,13 @@ func _on_mouse_exited_item(item: ESCItem) -> void:
func on_item_non_interactive(item: ESCItem) -> void: func on_item_non_interactive(item: ESCItem) -> void:
var object: ESCObject = escoria.object_manager.get_object(item.global_id) var object: ESCObject = escoria.object_manager.get_object(item.global_id)
if object and not object.interactive: if object and not object.interactive:
hover_stack_erase_item(item) hover_stack.erase_item(item)
escoria.main.current_scene.game.element_unfocused() escoria.main.current_scene.game.element_unfocused()
hover_stack.sort_custom(HoverStackSorter, "sort_ascending_z_index")
if hover_stack.empty(): if hover_stack.empty():
return return
else: else:
var new_item = hover_stack.back() var new_item = hover_stack.get_top_item()
escoria.action_manager.set_action_input_state(ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM) escoria.action_manager.set_action_input_state(ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM)
new_item.mouse_entered() new_item.mouse_entered()
@@ -454,7 +466,7 @@ func _on_mouse_left_clicked_item(item: ESCItem, event: InputEvent) -> void:
# Get next object in hover stack and forward event to it # Get next object in hover stack and forward event to it
if not hover_stack.empty(): if not hover_stack.empty():
var next_item = hover_stack.pop_back() var next_item = hover_stack.pop_top_item()
_on_mouse_left_clicked_item(next_item, event) _on_mouse_left_clicked_item(next_item, event)
else: # if no next object, consider this click as background click else: # if no next object, consider this click as background click
hotspot_focused = "" hotspot_focused = ""
@@ -498,7 +510,7 @@ func _on_mouse_left_double_clicked_item(
# Get next object in hover stack and forward event to it # Get next object in hover stack and forward event to it
if not hover_stack.empty(): if not hover_stack.empty():
var next_item = hover_stack.pop_back() var next_item = hover_stack.pop_top_item()
_on_mouse_left_double_clicked_item(next_item, event) _on_mouse_left_double_clicked_item(next_item, event)
else: # if no next object, consider this click as background click else: # if no next object, consider this click as background click
hotspot_focused = "" hotspot_focused = ""
@@ -536,7 +548,7 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
) )
if not hover_stack.empty(): if not hover_stack.empty():
var next_item = hover_stack.pop_back() var next_item = hover_stack.pop_top_item()
_on_mouse_right_clicked_item(next_item, event) _on_mouse_right_clicked_item(next_item, event)
return return
@@ -553,7 +565,7 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
# we consider we clicked through it. # we consider we clicked through it.
var object: ESCObject = escoria.object_manager.get_object(item.global_id) var object: ESCObject = escoria.object_manager.get_object(item.global_id)
if object.node is ESCPlayer and not (object.node as ESCPlayer).selectable: if object.node is ESCPlayer and not (object.node as ESCPlayer).selectable:
actual_item = hover_stack.back() actual_item = hover_stack.get_top_item()
else: else:
actual_item = item actual_item = item
@@ -594,51 +606,121 @@ func _on_pause_menu_requested():
escoria.main.current_scene.game.pause_game() escoria.main.current_scene.game.pause_game()
# Add the given item to the stack if not already in it. # Hover Stack implementation.
# class HoverStack:
# #### Parameters
# - item: the item to add to the hover stack
func hover_stack_add_item(item): # Emitted when the content of the hover stack has changed
if item is ESCPlayer and not (item as ESCPlayer).selectable: signal hover_stack_changed
return
if not hover_stack.has(item): # Emitted when the hover stack was emptied
hover_stack.push_back(item) signal hover_stack_emptied
# Array representing the hover stack
var hover_stack: Array = []
# Add the given item to the stack if not already in it.
#
# #### Parameters
# - item: the item to add to the hover stack
func add_item(item):
if item is ESCPlayer and not (item as ESCPlayer).selectable:
return
if not hover_stack.has(item):
hover_stack.push_back(item)
_sort()
emit_signal("hover_stack_changed")
# Add the items contained in given list to the stack if not already in it.
#
# #### Parameters
# - items: the items list (array) to add to the hover stack
func add_items(items: Array):
for item in items:
if escoria.action_manager.is_object_actionable(item.global_id):
add_item(item)
# Clean the hover stack
func clean():
for e in hover_stack:
if e == null or !is_instance_valid(e):
hover_stack.erase(e)
emit_signal("hover_stack_changed")
# Pops the top element of the hover stack and returns it
#
# **Returns**
# The top element of the hover stack
func pop_top_item():
var ret = hover_stack.pop_back()
if is_instance_valid(ret):
emit_signal("hover_stack_changed")
return ret
# Returns the top element of the hover stack a
#
# **Returns**
# The top element of the hover stack
func get_top_item():
return hover_stack.back()
# Remove the given item from the stack
#
# #### Parameters
# - item: the item to remove from the hover stack
func erase_item(item):
hover_stack.erase(item)
_sort()
emit_signal("hover_stack_changed")
# Clear the stack of hovered items
func clear():
hover_stack = []
emit_signal("hover_stack_emptied")
# Returns true if the hover stack is empty, else false
#
# **Returns**
# True if hover stack is empty, else false
func empty() -> bool:
return hover_stack.empty()
# Sort the hover stack by items' z-index
func _sort():
hover_stack.sort_custom(HoverStackSorter, "sort_ascending_z_index") hover_stack.sort_custom(HoverStackSorter, "sort_ascending_z_index")
# Add the items contained in given list to the stack if not already in it. # Returns true if the hover stack contains the given item
# #
# #### Parameters # #### Parameters
# - items: the items list (array) to add to the hover stack # - item: the item to search
func hover_stack_add_items(items: Array): #
for item in items: # **Returns**
if escoria.action_manager.is_object_actionable(item.global_id): # True if hover stack contains given item, else false
hover_stack_add_item(item) func has(item) -> bool:
return hover_stack.has(item)
# Clean the hover stack # Returns the hover stack array
func _clean_hover_stack(): #
for e in hover_stack: # **Returns**
if e == null or !is_instance_valid(e): # The hover stack array
hover_stack.erase(e) func get_all() -> Array:
return hover_stack
# Z Sorter class for hover stack
# Remove the given item from the stack class HoverStackSorter:
# static func sort_ascending_z_index(a, b):
# #### Parameters if a.z_index < b.z_index:
# - item: the item to remove from the hover stack return true
func hover_stack_erase_item(item): return false
hover_stack.erase(item)
hover_stack.sort_custom(HoverStackSorter, "sort_ascending_z_index")
# Clear the stack of hovered items
func hover_stack_clear():
hover_stack = []
class HoverStackSorter:
static func sort_ascending_z_index(a, b):
if a.z_index < b.z_index:
return true
return false

View File

@@ -37,12 +37,15 @@ const _DEBUG_ROOT = "debug"
const CRASH_MESSAGE = "%s/%s/crash_message" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const CRASH_MESSAGE = "%s/%s/crash_message" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
const DEVELOPMENT_LANG = "%s/%s/development_lang" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const DEVELOPMENT_LANG = "%s/%s/development_lang" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
# If enabled, displays the room selection box for quick room change
const ENABLE_ROOM_SELECTOR = "%s/%s/enable_room_selector" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const ENABLE_ROOM_SELECTOR = "%s/%s/enable_room_selector" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
const LOG_FILE_PATH = "%s/%s/log_file_path" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const LOG_FILE_PATH = "%s/%s/log_file_path" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
const LOG_LEVEL = "%s/%s/log_level" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const LOG_LEVEL = "%s/%s/log_level" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
const ROOM_SELECTOR_ROOM_DIR = "%s/%s/room_selector_room_dir" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const ROOM_SELECTOR_ROOM_DIR = "%s/%s/room_selector_room_dir" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
const TERMINATE_ON_ERRORS = "%s/%s/terminate_on_errors" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const TERMINATE_ON_ERRORS = "%s/%s/terminate_on_errors" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
const TERMINATE_ON_WARNINGS = "%s/%s/terminate_on_warnings" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT] const TERMINATE_ON_WARNINGS = "%s/%s/terminate_on_warnings" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
# If enabled, displays the hover stack on screen
const ENABLE_HOVER_STACK_VIEWER = "%s/%s/enable_hover_stack_viewer" % [_ESCORIA_SETTINGS_ROOT, _DEBUG_ROOT]
# Sound-related Escoria project settings # Sound-related Escoria project settings
const _SOUND_ROOT = "sound" const _SOUND_ROOT = "sound"

View File

@@ -25,7 +25,6 @@ func _init():
escoria.object_manager = ESCObjectManager.new() escoria.object_manager = ESCObjectManager.new()
escoria.command_registry = ESCCommandRegistry.new() escoria.command_registry = ESCCommandRegistry.new()
escoria.resource_cache = ESCResourceCache.new() escoria.resource_cache = ESCResourceCache.new()
escoria.resource_cache.start()
escoria.save_manager = ESCSaveManager.new() escoria.save_manager = ESCSaveManager.new()
escoria.inputs_manager = ESCInputsManager.new() escoria.inputs_manager = ESCInputsManager.new()
escoria.settings_manager = ESCSettingsManager.new() escoria.settings_manager = ESCSettingsManager.new()
@@ -45,6 +44,8 @@ func _init():
# Load settings # Load settings
func _ready(): func _ready():
add_child(escoria.resource_cache)
_handle_direct_scene_run() _handle_direct_scene_run()
escoria.settings_manager.load_settings() escoria.settings_manager.load_settings()

View File

@@ -4,7 +4,6 @@
[ext_resource path="res://addons/escoria-core/game/escoria.gd" type="Script" id=3] [ext_resource path="res://addons/escoria-core/game/escoria.gd" type="Script" id=3]
[node name="escoria_scene" type="Node"] [node name="escoria_scene" type="Node"]
pause_mode = 2
script = ExtResource( 3 ) script = ExtResource( 3 )
[node name="main" parent="." instance=ExtResource( 2 )] [node name="main" parent="." instance=ExtResource( 2 )]

View File

@@ -46,13 +46,35 @@ func say(dialog_player: Node, global_id: String, text: String, type: String):
pass pass
# Instructs the dialog manager to preserve the next dialog box used by a `say`
# command until a call to `disable_preserve_dialog_box` is made.
#
# This method should be idempotent, i.e. if called after the first time and
# prior to `disable_preserve_dialog_box` being called, the result should be the
# same.
func enable_preserve_dialog_box() -> void:
pass
# Instructs the dialog manager to no longer preserve the currently-preserved
# dialog box or to not preserve the next dialog box used by a `say` command
# (this is the default state).
#
# This method should be idempotent, i.e. if called after the first time and
# prior to `enable_preserve_dialog_box` being called, the result should be the
# same.
func disable_preserve_dialog_box() -> void:
pass
# Present an option chooser to the player and sends the signal # Present an option chooser to the player and sends the signal
# `option_chosen` with the chosen dialog option # `option_chosen` with the chosen dialog option
# #
# #### Parameters # #### Parameters
# - dialog_player: Node of the dialog player in the UI # - dialog_player: Node of the dialog player in the UI
# - dialog: Information about the dialog to display # - dialog: Information about the dialog to display
func choose(dialog_player: Node, dialog: ESCDialog): # - type: The dialog chooser type to use
func choose(dialog_player: Node, dialog: ESCDialog, type: String):
pass pass

View File

@@ -1,5 +1,5 @@
# Escoria dialog player # Escoria dialog player
extends StateMachine extends Node
class_name ESCDialogPlayer class_name ESCDialogPlayer
@@ -14,8 +14,20 @@ signal option_chosen(option)
signal say_finished signal say_finished
# Reference to the currently playing dialog manager # Used when specifying dialog types in various methods
var _dialog_manager: ESCDialogManager = null const DIALOG_TYPE_SAY = "say"
const DIALOG_TYPE_CHOOSE = "choose"
# Reference to the currently playing "say" dialog manager
var _say_dialog_manager: ESCDialogManager = null
# Reference to the currently playing "choose" dialog manager
var _choose_dialog_manager: ESCDialogManager = null
# Whether to use the "dialog box preservation" feature
var _block_say_enabled: bool = false
# Register the dialog player and load the dialog resources # Register the dialog player and load the dialog resources
@@ -25,38 +37,27 @@ func _ready():
escoria.dialog_player = self escoria.dialog_player = self
_create_states()
_add_states_to_machine()
states_map["say"].connect("dialog_manager_set", self, "_on_dialog_manager_set") # Instructs the dialog manager to preserve the next dialog box used by a `say`
# command until a call to `disable_preserve_dialog_box` is made.
current_state_name = "idle" #
START_STATE = states_map[current_state_name] # This method should be idempotent, i.e. if called after the first time and
# prior to `disable_preserve_dialog_box` being called, the result should be the
initialize(START_STATE) # same.
func enable_preserve_dialog_box() -> void:
_block_say_enabled = true
# Creates the states for this state machine. # Instructs the dialog manager to no longer preserve the currently-preserved
func _create_states() -> void: # dialog box or to not preserve the next dialog box used by a `say` command
states_map = { # (this is the default state).
"idle": DialogIdle.new(), #
"say": DialogSay.new(), # This method should be idempotent, i.e. if called after the first time and
"say_fast": DialogSayFast.new(), # prior to `enable_preserve_dialog_box` being called, the result should be the
"say_finish": DialogSayFinish.new(), # same.
"visible": DialogVisible.new(), func disable_preserve_dialog_box() -> void:
"finish": DialogFinish.new(), _block_say_enabled = false
"interrupt": DialogInterrupt.new(), _say_dialog_manager.disable_preserve_dialog_box()
"choices": DialogChoices.new(),
}
# This state needs a reference to this class.
states_map["finish"].initialize(self)
# Adds any created states into the state machine as children.
func _add_states_to_machine() -> void:
for key in states_map:
add_child(states_map[key])
# Make a character say some text # Make a character say some text
@@ -67,18 +68,19 @@ func _add_states_to_machine() -> void:
# - type: UI to use for the dialog # - type: UI to use for the dialog
# - text: Text to say # - text: Text to say
func say(character: String, type: String, text: String) -> void: func say(character: String, type: String, text: String) -> void:
states_map["say"].initialize(character, type, text) if type == "":
_change_state("say") type = ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.DEFAULT_DIALOG_TYPE
)
# We only need to remove the dialog manager from the scene tree if the dialog manager type
# has changed since the last use of this method.
_update_dialog_manager(DIALOG_TYPE_SAY, _say_dialog_manager, type)
# Called when a dialogue line is to be sped up. if _block_say_enabled:
func speedup() -> void: _say_dialog_manager.enable_preserve_dialog_box()
_change_state("say_fast")
_say_dialog_manager.say(self, character, text, type)
# Called when a dialogue line is to be finished immediately.
func finish() -> void:
_change_state("say_finish")
# Display a list of choices # Display a list of choices
@@ -86,22 +88,111 @@ func finish() -> void:
# #### Parameters # #### Parameters
# #
# - dialog: The dialog to start # - dialog: The dialog to start
# - type: The dialog chooser type to use (default: "simple")
func start_dialog_choices(dialog: ESCDialog, type: String = "simple"): func start_dialog_choices(dialog: ESCDialog, type: String = "simple"):
states_map["choices"].initialize(self, dialog, type) # We only need to remove the dialog manager from the scene tree if the dialog manager type
_change_state("choices") # has changed since the last use of this method.
_update_dialog_manager(DIALOG_TYPE_CHOOSE, _choose_dialog_manager, type)
_choose_dialog_manager.choose(self, dialog, type)
# Interrupt the currently running dialog # Interrupt the currently running dialog
func interrupt() -> void: func interrupt() -> void:
_change_state("interrupt") if is_instance_valid(_say_dialog_manager):
_say_dialog_manager.interrupt()
# Since the dialog manager is determined when a `say` command is performed and # Loads the first dialog manager that supports the specified "say" type; otherwise,
# other states need to know which one was picked, we notify the necessary states # the engine throws an error and stops.
# via this method. #
func _on_dialog_manager_set(dialog_manager: ESCDialogManager) -> void: # #### Parameters
_dialog_manager = dialog_manager # - type: The type the dialog manager should support, e.g. "floating"
states_map["say_fast"].initialize(dialog_manager) func _determine_say_dialog_manager(type: String) -> void:
states_map["say_finish"].initialize(dialog_manager) var dialog_manager: ESCDialogManager = null
states_map["visible"].initialize(dialog_manager)
states_map["interrupt"].initialize(dialog_manager) for _manager_class in ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.DIALOG_MANAGERS
):
if ResourceLoader.exists(_manager_class):
var _manager: ESCDialogManager = load(_manager_class).new()
if _manager.has_type(type):
dialog_manager = _manager
else:
dialog_manager = null
if not is_instance_valid(dialog_manager):
escoria.logger.error(
self,
"No dialog manager called '%s' configured." % type
)
_say_dialog_manager = dialog_manager
# Loads the first dialog manager that supports the specified "choose" type; otherwise,
# the engine throws an error and stops.
#
# #### Parameters
# - type: The type the dialog manager should support, e.g. "simple"
func _determine_choose_dialog_manager(type: String) -> void:
var dialog_manager: ESCDialogManager = null
for _manager_class in ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.DIALOG_MANAGERS
):
if ResourceLoader.exists(_manager_class):
var _manager: ESCDialogManager = load(_manager_class).new()
if _manager.has_chooser_type(type):
dialog_manager = _manager
else:
dialog_manager = null
if not is_instance_valid(dialog_manager):
escoria.logger.error(
self,
"No dialog manager called '%s' configured." % type
)
_choose_dialog_manager = dialog_manager
# If necessary, updates the dialog manager for the specified dialog type.
#
# #### Parameters
#
# - dialog_type: The type of dialog that will be managed, e.g. "say" or "choose"
# - current_dialog_manager: The dialog manager currently being used (if any) for the specified
# dialog type
# - dialog_manager_type: The dialog manager type specific to the dialog manager being requested
func _update_dialog_manager(dialog_type: String, current_dialog_manager: ESCDialogManager, \
dialog_manager_type: String) -> void:
if is_instance_valid(current_dialog_manager):
if not current_dialog_manager.has_type(dialog_manager_type):
if is_a_parent_of(current_dialog_manager):
remove_child(current_dialog_manager)
add_child(_determine_dialog_manager(dialog_type, dialog_manager_type))
else:
add_child(_determine_dialog_manager(dialog_type, dialog_manager_type))
# Sets the requested dialog manager type for the specified dialog function.
#
# #### Parameters
#
# - dialog_type: The type of dialog that will be managed, e.g. "say" or "choose"
# - dialog_manager_type: The dialog manager type specific to the dialog manager being requested
#
# *Returns* the newly-resolved dialog manager
func _determine_dialog_manager(dialog_type: String, dialog_manager_type: String) -> ESCDialogManager:
if dialog_type == DIALOG_TYPE_SAY:
_determine_say_dialog_manager(dialog_manager_type)
return _say_dialog_manager
elif dialog_type == DIALOG_TYPE_CHOOSE:
_determine_choose_dialog_manager(dialog_manager_type)
return _choose_dialog_manager
# This line will never be hit as a failure above will result in an Escoria error
return null

View File

@@ -302,6 +302,14 @@ func set_escoria_debug_settings():
} }
) )
register_setting(
ESCProjectSettingsManager.ENABLE_HOVER_STACK_VIEWER,
false,
{
"type": TYPE_BOOL
}
)
# Prepare the settings in the Escoria sound settings # Prepare the settings in the Escoria sound settings
func set_escoria_sound_settings(): func set_escoria_sound_settings():

View File

@@ -81,6 +81,13 @@ func _on_inventory_item_gui_input(event: InputEvent):
global_id, global_id,
event event
) )
# Make sure fast right clicks in the inventory aren't ignored
elif event.button_index == BUTTON_RIGHT:
emit_signal(
"mouse_right_inventory_item",
global_id,
event
)
else: else:
if event.is_pressed(): if event.is_pressed():
if event.button_index == BUTTON_LEFT: if event.button_index == BUTTON_LEFT:

View File

@@ -7,6 +7,9 @@
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
script = ExtResource( 3 ) script = ExtResource( 3 )
__meta__ = {
"_edit_use_anchors_": false
}
slot_ui_scene = ExtResource( 2 ) slot_ui_scene = ExtResource( 2 )
[node name="Panel" type="Panel" parent="."] [node name="Panel" type="Panel" parent="."]
@@ -29,7 +32,7 @@ __meta__ = {
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] [node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
margin_right = 623.0 margin_right = 623.0
margin_bottom = 276.0 margin_bottom = 336.0
size_flags_vertical = 3 size_flags_vertical = 3
scroll_horizontal_enabled = false scroll_horizontal_enabled = false
__meta__ = { __meta__ = {
@@ -38,7 +41,7 @@ __meta__ = {
[node name="slots" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"] [node name="slots" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"]
margin_right = 623.0 margin_right = 623.0
margin_bottom = 276.0 margin_bottom = 336.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
__meta__ = { __meta__ = {
@@ -46,9 +49,9 @@ __meta__ = {
} }
[node name="back" type="Button" parent="VBoxContainer"] [node name="back" type="Button" parent="VBoxContainer"]
margin_top = 280.0 margin_top = 340.0
margin_right = 623.0 margin_right = 623.0
margin_bottom = 300.0 margin_bottom = 360.0
text = "OPTIONS_BACK" text = "OPTIONS_BACK"
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false

View File

@@ -14,7 +14,7 @@ func _on_load_game_pressed():
$load_game.show() $load_game.show()
# Show the optiset_gui_visible trueons panel # Show the options panel
func _on_options_pressed(): func _on_options_pressed():
$main.hide() $main.hide()
$options.show() $options.show()

View File

@@ -9,6 +9,9 @@
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
script = ExtResource( 1 ) script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="load_game" parent="." instance=ExtResource( 5 )] [node name="load_game" parent="." instance=ExtResource( 5 )]
visible = false visible = false
@@ -41,18 +44,18 @@ __meta__ = {
} }
[node name="TextureRect" type="TextureRect" parent="main/main"] [node name="TextureRect" type="TextureRect" parent="main/main"]
margin_top = 92.0 margin_top = 162.0
margin_right = 616.0 margin_right = 616.0
margin_bottom = 318.0 margin_bottom = 398.0
texture = ExtResource( 3 ) texture = ExtResource( 3 )
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="buttons" type="VBoxContainer" parent="main/main"] [node name="buttons" type="VBoxContainer" parent="main/main"]
margin_top = 418.0 margin_top = 498.0
margin_right = 616.0 margin_right = 616.0
margin_bottom = 658.0 margin_bottom = 738.0
custom_constants/separation = 10 custom_constants/separation = 10
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false

View File

@@ -25,9 +25,9 @@ __meta__ = {
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"] [node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"]
margin_left = 391.0 margin_left = 391.0
margin_top = 265.0 margin_top = 340.0
margin_right = 888.0 margin_right = 888.0
margin_bottom = 460.0 margin_bottom = 535.0
size_flags_horizontal = 6 size_flags_horizontal = 6
custom_constants/margin_right = 20 custom_constants/margin_right = 20
custom_constants/margin_top = 20 custom_constants/margin_top = 20
@@ -144,9 +144,9 @@ margin_right = 457.0
margin_bottom = 155.0 margin_bottom = 155.0
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
margin_top = 464.0 margin_top = 539.0
margin_right = 1280.0 margin_right = 1280.0
margin_bottom = 404.0 margin_bottom = 500
custom_constants/separation = 20 custom_constants/separation = 20
alignment = 1 alignment = 1

View File

@@ -0,0 +1,14 @@
extends CanvasLayer
onready var list = $VBoxContainer/hover_stack
func update() -> void:
for e in list.get_children():
list.remove_child(e)
e.queue_free()
if escoria.inputs_manager.hover_stack.empty():
return
for e in escoria.inputs_manager.hover_stack.get_all():
var l = Label.new()
l.text = e.global_id
list.add_child(l)

View File

@@ -0,0 +1,27 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/ui_library/tools/hover_stack/hover_stack.gd" type="Script" id=1]
[node name="hover_stack_layer" type="CanvasLayer"]
script = ExtResource( 1 )
[node name="VBoxContainer" type="VBoxContainer" parent="."]
margin_top = 32.0
margin_right = 99.0
margin_bottom = 72.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="title" type="RichTextLabel" parent="VBoxContainer"]
margin_right = 99.0
margin_bottom = 18.0
size_flags_vertical = 3
bbcode_enabled = true
bbcode_text = "[u]Hover stack[/u]"
text = "Hover stack"
[node name="hover_stack" type="VBoxContainer" parent="VBoxContainer"]
margin_top = 22.0
margin_right = 99.0
margin_bottom = 40.0
size_flags_vertical = 3

View File

@@ -1,14 +1,28 @@
# A simple dialog manager for Escoria # A simple dialog manager for Escoria
extends ESCDialogManager extends ESCDialogManager
class_name ESCDialogSimple
# State machine that governs how the dialog manager behaves
var state_machine = preload("res://addons/escoria-dialog-simple/esc_dialog_simple_state_machine.gd").new()
# The currently running player # The currently running player
var _type_player: Node = null var _type_player: Node = null
var _preserved_type_player_type: String = ""
# Reference to the dialog player # Reference to the dialog player
var _dialog_player: Node = null var _dialog_player: Node = null
# Basic state tracking
var _is_saying: bool = false
# Whether to preserve the next dialog box used by `say`, or, if already
# preserving a dialog box, whether to continue using that dialog box
var _should_preserve_dialog_box: bool = false
func _ready() -> void:
add_child(state_machine)
# Check whether a specific type is supported by the # Check whether a specific type is supported by the
# dialog plugin # dialog plugin
@@ -30,6 +44,31 @@ func has_chooser_type(type: String) -> bool:
return true if type == "simple" else false return true if type == "simple" else false
# Instructs the dialog manager to preserve the next dialog box used by a `say`
# command until a call to `disable_preserve_dialog_box` is made.
#
# This method should be idempotent, i.e. if called after the first time and
# prior to `disable_preserve_dialog_box` being called, the result should be the
# same.
func enable_preserve_dialog_box() -> void:
_should_preserve_dialog_box = true
# Instructs the dialog manager to no longer preserve the currently-preserved
# dialog box or to not preserve the next dialog box used by a `say` command
# (this is the default state).
#
# This method should be idempotent, i.e. if called after the first time and
# prior to `enable_preserve_dialog_box` being called, the result should be the
# same.
func disable_preserve_dialog_box() -> void:
_should_preserve_dialog_box = false
if is_instance_valid(_dialog_player) and _dialog_player.get_children().has(_type_player):
_dialog_player.remove_child(_type_player)
_preserved_type_player_type = ""
# Output a text said by the item specified by the global id. Emit # Output a text said by the item specified by the global id. Emit
# `say_finished` after finishing displaying the text. # `say_finished` after finishing displaying the text.
# #
@@ -42,6 +81,40 @@ func has_chooser_type(type: String) -> bool:
func say(dialog_player: Node, global_id: String, text: String, type: String): func say(dialog_player: Node, global_id: String, text: String, type: String):
_dialog_player = dialog_player _dialog_player = dialog_player
_initialize_say_states(global_id, text, type)
if _should_preserve_dialog_box:
# If the dialog box type doesn't match what's currently being reused (if anything),
# we want to remove the old one (if it exists) and then initialize and add the new dialog
# box type to the dialog player
if type != _preserved_type_player_type:
if _dialog_player.get_children().has(_type_player):
_dialog_player.remove_child(_type_player)
_init_type_player(type)
_preserved_type_player_type = type
else:
_init_type_player(type)
state_machine._change_state("say")
# yield(_type_player, "say_finished")
# if _dialog_player.get_children().has(_type_player):
# _dialog_player.remove_child(_type_player)
# emit_signal("say_finished")
func do_say(global_id: String, text: String) -> void:
# Only add_child here in order to prevent _type_player from running its _process method
# before we're ready, and only if it's necessary
if not _dialog_player.get_children().has(_type_player):
_dialog_player.add_child(_type_player)
_type_player.say(global_id, text)
func _init_type_player(type: String) -> void:
if type == "floating": if type == "floating":
_type_player = preload(\ _type_player = preload(\
"res://addons/escoria-dialog-simple/types/floating.tscn"\ "res://addons/escoria-dialog-simple/types/floating.tscn"\
@@ -51,21 +124,26 @@ func say(dialog_player: Node, global_id: String, text: String, type: String):
"res://addons/escoria-dialog-simple/types/avatar.tscn"\ "res://addons/escoria-dialog-simple/types/avatar.tscn"\
).instance() ).instance()
_type_player.connect("say_finished", self, "_on_say_finished", [], CONNECT_ONESHOT) _type_player.connect("say_finished", self, "_on_say_finished")
_type_player.connect("say_visible", self, "_on_say_visible", [], CONNECT_ONESHOT) _type_player.connect("say_visible", self, "_on_say_visible")
_dialog_player.add_child(_type_player)
_type_player.say(global_id, text) func _initialize_say_states(global_id: String, text: String, type: String) -> void:
# yield(_type_player, "say_finished") state_machine.states_map["say"].initialize(self, global_id, text, type)
# if _dialog_player.get_children().has(_type_player): state_machine.states_map["finish"].initialize(_dialog_player)
# _dialog_player.remove_child(_type_player) state_machine.states_map["say_fast"].initialize(self)
# emit_signal("say_finished") state_machine.states_map["say_finish"].initialize(self)
state_machine.states_map["visible"].initialize(self)
state_machine.states_map["interrupt"].initialize(self)
func _on_say_finished(): func _on_say_finished():
if _dialog_player.get_children().has(_type_player): if not _should_preserve_dialog_box and _dialog_player.get_children().has(_type_player):
_dialog_player.remove_child(_type_player) _dialog_player.remove_child(_type_player)
emit_signal("say_finished")
_is_saying = false
emit_signal("say_finished")
func _on_say_visible(): func _on_say_visible():
@@ -78,13 +156,26 @@ func _on_say_visible():
# #### Parameters # #### Parameters
# - dialog_player: Node of the dialog player in the UI # - dialog_player: Node of the dialog player in the UI
# - dialog: Information about the dialog to display # - dialog: Information about the dialog to display
func choose(dialog_player: Node, dialog: ESCDialog): # - type: The dialog chooser type to use
var chooser = preload(\ func choose(dialog_player: Node, dialog: ESCDialog, type: String):
"res://addons/escoria-dialog-simple/chooser/simple.tscn"\ _dialog_player = dialog_player
).instance()
state_machine.states_map["choices"].initialize(dialog_player, self, dialog, type)
state_machine._change_state("choices")
func do_choose(dialog_player: Node, dialog: ESCDialog, type: String = "simple"):
var chooser
if type == "simple" or type == "":
chooser = preload(\
"res://addons/escoria-dialog-simple/chooser/simple.tscn"\
).instance()
dialog_player.add_child(chooser) dialog_player.add_child(chooser)
chooser.set_dialog(dialog) chooser.set_dialog(dialog)
chooser.show_chooser() chooser.show_chooser()
var option = yield(chooser, "option_chosen") var option = yield(chooser, "option_chosen")
dialog_player.remove_child(chooser) dialog_player.remove_child(chooser)
emit_signal("option_chosen", option) emit_signal("option_chosen", option)
@@ -92,13 +183,13 @@ func choose(dialog_player: Node, dialog: ESCDialog):
# Trigger running the dialogue faster # Trigger running the dialogue faster
func speedup(): func speedup():
if _type_player != null: if is_instance_valid(_type_player):
_type_player.speedup() _type_player.speedup()
# Trigger an instant finish of the current dialog # Trigger an instant finish of the current dialog
func finish(): func finish():
if _type_player != null: if is_instance_valid(_type_player):
_type_player.finish() _type_player.finish()
@@ -110,11 +201,13 @@ func interrupt():
as ESCSpeechPlayer as ESCSpeechPlayer
).set_state("off") ).set_state("off")
_dialog_player.remove_child(_type_player) if not _should_preserve_dialog_box and _dialog_player.get_children().has(_type_player):
_dialog_player.remove_child(_type_player)
emit_signal("say_finished") emit_signal("say_finished")
# To be called if voice audio has finished. # To be called if voice audio has finished.
func voice_audio_finished(): func voice_audio_finished():
if _type_player != null: if is_instance_valid(_type_player):
_type_player.voice_audio_finished() _type_player.voice_audio_finished()

View File

@@ -0,0 +1,20 @@
extends Resource
class_name SimpleDialogSettings
const SETTINGS_ROOT = "escoria/dialog_simple"
const AVATARS_PATH = "%s/avatars_path" % SETTINGS_ROOT
const TEXT_TIME_PER_LETTER_MS = "%s/text_time_per_letter_ms" % SETTINGS_ROOT
const TEXT_TIME_PER_LETTER_MS_FAST = "%s/text_time_per_fast_letter_ms" % SETTINGS_ROOT
const READING_SPEED_IN_WPM = "%s/reading_speed_in_wpm" % SETTINGS_ROOT
const CLEAR_TEXT_BY_CLICK_ONLY = "%s/clear_text_by_click_only" % SETTINGS_ROOT
const LEFT_CLICK_ACTION = "%s/left_click_action" % SETTINGS_ROOT
const STOP_TALKING_ANIMATION_ON = "%s/stop_talking_animation_on" % SETTINGS_ROOT
const LEFT_CLICK_ACTION_SPEED_UP = "Speed up"
const LEFT_CLICK_ACTION_INSTANT_FINISH = "Instant finish"
const LEFT_CLICK_ACTION_NOTHING = "None"
const STOP_TALKING_ANIMATION_ON_END_OF_TEXT = "End of text"
const STOP_TALKING_ANIMATION_ON_END_OF_AUDIO = "End of audio"

View File

@@ -0,0 +1,31 @@
extends "res://addons/escoria-dialog-simple/patterns/state_machine/state_machine.gd"
func _init():
_create_states()
_add_states_to_machine()
current_state_name = "idle"
START_STATE = states_map[current_state_name]
initialize(START_STATE)
# Creates the states for this state machine.
func _create_states() -> void:
states_map = {
"idle": preload("res://addons/escoria-dialog-simple/states/dialog_idle.gd").new(),
"say": preload("res://addons/escoria-dialog-simple/states/dialog_say.gd").new(),
"say_fast": preload("res://addons/escoria-dialog-simple/states/dialog_say_fast.gd").new(),
"say_finish": preload("res://addons/escoria-dialog-simple/states/dialog_say_finish.gd").new(),
"visible": preload("res://addons/escoria-dialog-simple/states/dialog_visible.gd").new(),
"finish": preload("res://addons/escoria-dialog-simple/states/dialog_finish.gd").new(),
"interrupt": preload("res://addons/escoria-dialog-simple/states/dialog_interrupt.gd").new(),
"choices": preload("res://addons/escoria-dialog-simple/states/dialog_choices.gd").new(),
}
# Adds any created states into the state machine as children.
func _add_states_to_machine() -> void:
for key in states_map:
add_child(states_map[key])

View File

@@ -0,0 +1,31 @@
"""
Base interface for all states: it doesn't do anything in itself
but forces us to pass the right arguments to the methods below
and makes sure every State object had all of these methods.
"""
extends Node
signal finished(next_state_name)
# Initialize the state. E.g. change the animation
func enter():
return
# Clean up the state. Reinitialize values like a timer
func exit():
return
func handle_input(_event):
return
func update(_delta):
return
func _on_animation_finished(_anim_name):
return

View File

@@ -0,0 +1,92 @@
"""
Base interface for a generic state machine
It handles initializing, setting the machine active or not
delegating _physics_process, _input calls to the State nodes,
and changing the current/active state.
"""
extends Node
signal state_changed(current_state)
"""
You must set a starting node from the inspector or on
the node that inherits from this state machine interface
If you don't the game will crash (on purpose, so you won't
forget to initialize the state machine)
"""
export(NodePath) var START_STATE
var states_map = {}
var states_stack = [] # can also be used as a pushdown automaton
var current_state = null
var current_state_name = ""
var _active = false setget set_active
func initialize(start_state):
for child in get_children():
child.connect("finished", self, "_change_state")
set_active(true)
states_stack.push_front(start_state)
current_state = states_stack[0]
current_state.enter()
func set_active(value):
_active = value
set_physics_process(value)
set_process_input(value)
if not _active:
states_stack = []
current_state = null
func _input(event):
current_state.handle_input(event)
func _physics_process(delta):
current_state.update(delta)
func _on_animation_finished(anim_name):
if not _active:
return
current_state._on_animation_finished(anim_name)
func _change_state(state_name):
if not _active:
return
escoria.logger.trace(
self,
"Dialog State Machine: Changing state from '%s' to '%s'." % [current_state_name, state_name]
)
current_state.exit()
if state_name == "previous":
states_stack.pop_front()
else:
states_stack[0] = states_map[state_name]
current_state = states_stack[0]
emit_signal("state_changed", current_state)
#if state_name != "previous":
current_state.enter()
current_state_name = state_name
func get_current_state_name():
for key in states_map.keys():
if states_map[key] == current_state:
return key
return null

View File

@@ -1,26 +1,8 @@
# A simple dialog manager for Escoria # A simple dialog manager for Escoria
tool tool
extends EditorPlugin extends EditorPlugin
class_name SimpleDialogPlugin
const MANAGER_CLASS = "res://addons/escoria-dialog-simple/esc_dialog_simple.gd"
const MANAGER_CLASS="res://addons/escoria-dialog-simple/esc_dialog_simple.gd"
const SETTINGS_ROOT="escoria/dialog_simple"
const AVATARS_PATH = "%s/avatars_path" % SETTINGS_ROOT
const TEXT_TIME_PER_LETTER_MS = "%s/text_time_per_letter_ms" % SETTINGS_ROOT
const TEXT_TIME_PER_LETTER_MS_FAST = "%s/text_time_per_fast_letter_ms" % SETTINGS_ROOT
const READING_SPEED_IN_WPM = "%s/reading_speed_in_wpm" % SETTINGS_ROOT
const CLEAR_TEXT_BY_CLICK_ONLY = "%s/clear_text_by_click_only" % SETTINGS_ROOT
const LEFT_CLICK_ACTION = "%s/left_click_action" % SETTINGS_ROOT
const STOP_TALKING_ANIMATION_ON = "%s/stop_talking_animation_on" % SETTINGS_ROOT
const LEFT_CLICK_ACTION_SPEED_UP = "Speed up"
const LEFT_CLICK_ACTION_INSTANT_FINISH = "Instant finish"
const LEFT_CLICK_ACTION_NOTHING = "None"
const STOP_TALKING_ANIMATION_ON_END_OF_TEXT = "End of text"
const STOP_TALKING_ANIMATION_ON_END_OF_AUDIO = "End of audio"
const READING_SPEED_IN_WPM_DEFAULT_VALUE = 200 const READING_SPEED_IN_WPM_DEFAULT_VALUE = 200
const TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE = 100 const TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE = 100
@@ -28,14 +10,14 @@ const TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE = 25
var left_click_actions: PoolStringArray = [ var left_click_actions: PoolStringArray = [
LEFT_CLICK_ACTION_SPEED_UP, SimpleDialogSettings.LEFT_CLICK_ACTION_SPEED_UP,
LEFT_CLICK_ACTION_INSTANT_FINISH, SimpleDialogSettings.LEFT_CLICK_ACTION_INSTANT_FINISH,
LEFT_CLICK_ACTION_NOTHING SimpleDialogSettings.LEFT_CLICK_ACTION_NOTHING
] ]
var stop_talking_animation_on_options: PoolStringArray = [ var stop_talking_animation_on_options: PoolStringArray = [
STOP_TALKING_ANIMATION_ON_END_OF_TEXT, SimpleDialogSettings.STOP_TALKING_ANIMATION_ON_END_OF_TEXT,
STOP_TALKING_ANIMATION_ON_END_OF_AUDIO SimpleDialogSettings.STOP_TALKING_ANIMATION_ON_END_OF_AUDIO
] ]
@@ -52,31 +34,31 @@ func disable_plugin():
) )
ESCProjectSettingsManager.remove_setting( ESCProjectSettingsManager.remove_setting(
AVATARS_PATH SimpleDialogSettings.AVATARS_PATH
) )
ESCProjectSettingsManager.remove_setting( ESCProjectSettingsManager.remove_setting(
TEXT_TIME_PER_LETTER_MS SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS
) )
ESCProjectSettingsManager.remove_setting( ESCProjectSettingsManager.remove_setting(
TEXT_TIME_PER_LETTER_MS_FAST SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST
) )
ESCProjectSettingsManager.remove_setting( ESCProjectSettingsManager.remove_setting(
CLEAR_TEXT_BY_CLICK_ONLY SimpleDialogSettings.CLEAR_TEXT_BY_CLICK_ONLY
) )
ESCProjectSettingsManager.remove_setting( ESCProjectSettingsManager.remove_setting(
READING_SPEED_IN_WPM SimpleDialogSettings.READING_SPEED_IN_WPM
) )
ESCProjectSettingsManager.remove_setting( ESCProjectSettingsManager.remove_setting(
LEFT_CLICK_ACTION SimpleDialogSettings.LEFT_CLICK_ACTION
) )
ESCProjectSettingsManager.remove_setting( ESCProjectSettingsManager.remove_setting(
STOP_TALKING_ANIMATION_ON SimpleDialogSettings.STOP_TALKING_ANIMATION_ON
) )
EscoriaPlugin.deregister_dialog_manager(MANAGER_CLASS) EscoriaPlugin.deregister_dialog_manager(MANAGER_CLASS)
@@ -96,7 +78,7 @@ func enable_plugin():
) )
ESCProjectSettingsManager.register_setting( ESCProjectSettingsManager.register_setting(
AVATARS_PATH, SimpleDialogSettings.AVATARS_PATH,
"res://game/dialog_avatars", "res://game/dialog_avatars",
{ {
"type": TYPE_STRING, "type": TYPE_STRING,
@@ -105,7 +87,7 @@ func enable_plugin():
) )
ESCProjectSettingsManager.register_setting( ESCProjectSettingsManager.register_setting(
TEXT_TIME_PER_LETTER_MS, SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS,
TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE, TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE,
{ {
"type": TYPE_REAL "type": TYPE_REAL
@@ -113,7 +95,7 @@ func enable_plugin():
) )
ESCProjectSettingsManager.register_setting( ESCProjectSettingsManager.register_setting(
TEXT_TIME_PER_LETTER_MS_FAST, SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST,
TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE, TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE,
{ {
"type": TYPE_REAL "type": TYPE_REAL
@@ -121,7 +103,7 @@ func enable_plugin():
) )
ESCProjectSettingsManager.register_setting( ESCProjectSettingsManager.register_setting(
CLEAR_TEXT_BY_CLICK_ONLY, SimpleDialogSettings.CLEAR_TEXT_BY_CLICK_ONLY,
false, false,
{ {
"type": TYPE_BOOL "type": TYPE_BOOL
@@ -129,7 +111,7 @@ func enable_plugin():
) )
ESCProjectSettingsManager.register_setting( ESCProjectSettingsManager.register_setting(
READING_SPEED_IN_WPM, SimpleDialogSettings.READING_SPEED_IN_WPM,
READING_SPEED_IN_WPM_DEFAULT_VALUE, READING_SPEED_IN_WPM_DEFAULT_VALUE,
{ {
"type": TYPE_INT "type": TYPE_INT
@@ -139,8 +121,8 @@ func enable_plugin():
var left_click_actions_string: String = left_click_actions.join(",") var left_click_actions_string: String = left_click_actions.join(",")
ESCProjectSettingsManager.register_setting( ESCProjectSettingsManager.register_setting(
LEFT_CLICK_ACTION, SimpleDialogSettings.LEFT_CLICK_ACTION,
LEFT_CLICK_ACTION_SPEED_UP, SimpleDialogSettings.LEFT_CLICK_ACTION_SPEED_UP,
{ {
"type": TYPE_STRING, "type": TYPE_STRING,
"hint": PROPERTY_HINT_ENUM, "hint": PROPERTY_HINT_ENUM,
@@ -151,8 +133,8 @@ func enable_plugin():
var stop_talking_animation_on_options_string: String = stop_talking_animation_on_options.join(",") var stop_talking_animation_on_options_string: String = stop_talking_animation_on_options.join(",")
ESCProjectSettingsManager.register_setting( ESCProjectSettingsManager.register_setting(
STOP_TALKING_ANIMATION_ON, SimpleDialogSettings.STOP_TALKING_ANIMATION_ON,
STOP_TALKING_ANIMATION_ON_END_OF_AUDIO, SimpleDialogSettings.STOP_TALKING_ANIMATION_ON_END_OF_AUDIO,
{ {
"type": TYPE_STRING, "type": TYPE_STRING,
"hint": PROPERTY_HINT_ENUM, "hint": PROPERTY_HINT_ENUM,

View File

@@ -1,5 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogChoices
# The owning dialog player. # The owning dialog player.
@@ -14,8 +13,9 @@ var _dialog_chooser_ui: ESCDialogManager = null
var _ready_to_choose: bool var _ready_to_choose: bool
func initialize(dialog_player, dialog: ESCDialog, type: String) -> void: func initialize(dialog_player, dialog_chooser_ui: ESCDialogManager, dialog: ESCDialog, type: String) -> void:
_dialog_player = dialog_player _dialog_player = dialog_player
_dialog_chooser_ui = dialog_chooser_ui
_dialog = dialog _dialog = dialog
_type = type _type = type
@@ -29,27 +29,13 @@ func enter():
"Received dialog options array was empty." "Received dialog options array was empty."
) )
for _manager_class in ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.DIALOG_MANAGERS
):
if ResourceLoader.exists(_manager_class):
var _manager: ESCDialogManager = load(_manager_class).new()
if _manager.has_chooser_type(_type):
_dialog_chooser_ui = _manager
if _dialog_chooser_ui == null:
escoria.logger.error(
self,
"No dialog manager supports the chooser type %s." % _type
)
_ready_to_choose = true _ready_to_choose = true
func update(_delta): func update(_delta):
if _ready_to_choose: if _ready_to_choose:
_ready_to_choose = false _ready_to_choose = false
_dialog_chooser_ui.choose(self, _dialog) _dialog_chooser_ui.do_choose(_dialog_player, _dialog, _type)
var option = yield(_dialog_chooser_ui, "option_chosen") var option = yield(_dialog_chooser_ui, "option_chosen")
escoria.logger.trace(self, "Dialog State Machine: 'choices' -> 'idle'") escoria.logger.trace(self, "Dialog State Machine: 'choices' -> 'idle'")

View File

@@ -1,5 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogFinish
# Owning dialog player # Owning dialog player

View File

@@ -1,5 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogIdle
func enter(): func enter():

View File

@@ -1,5 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogInterrupt
# Reference to the currently playing dialog manager # Reference to the currently playing dialog manager
@@ -15,7 +14,7 @@ func enter():
if _dialog_manager != null: if _dialog_manager != null:
if not _dialog_manager.is_connected("say_finished", self, "_on_say_finished"): if not _dialog_manager.is_connected("say_finished", self, "_on_say_finished"):
_dialog_manager.connect("say_finished", self, "_on_say_finished", [], CONNECT_ONESHOT) _dialog_manager.connect("say_finished", self, "_on_say_finished")
_dialog_manager.interrupt() _dialog_manager.interrupt()

View File

@@ -1,8 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogSay
signal dialog_manager_set(dialog_manager)
# A regular expression that separates the translation key from the text # A regular expression that separates the translation key from the text
@@ -34,12 +30,13 @@ func _init() -> void:
_keytext_regex.compile(KEYTEXT_REGEX) _keytext_regex.compile(KEYTEXT_REGEX)
func initialize(character: String, type: String, text: String) -> void: func initialize(dialog_manager: ESCDialogManager, character: String, text: String, type: String) -> void:
_dialog_manager = dialog_manager
_character = character _character = character
_type = type
_text = text _text = text
_type = type
_stop_talking_animation_on_option = \ _stop_talking_animation_on_option = \
ESCProjectSettingsManager.get_setting(SimpleDialogPlugin.STOP_TALKING_ANIMATION_ON) ESCProjectSettingsManager.get_setting(SimpleDialogSettings.STOP_TALKING_ANIMATION_ON)
func handle_input(_event): func handle_input(_event):
@@ -48,20 +45,20 @@ func handle_input(_event):
escoria.inputs_manager.INPUT_NONE and \ escoria.inputs_manager.INPUT_NONE and \
_dialog_manager != null: _dialog_manager != null:
var left_click_action = ESCProjectSettingsManager.get_setting(SimpleDialogPlugin.LEFT_CLICK_ACTION) var left_click_action = ESCProjectSettingsManager.get_setting(SimpleDialogSettings.LEFT_CLICK_ACTION)
_handle_left_click_action(left_click_action) _handle_left_click_action(left_click_action)
func _handle_left_click_action(left_click_action: String) -> void: func _handle_left_click_action(left_click_action: String) -> void:
match left_click_action: match left_click_action:
SimpleDialogPlugin.LEFT_CLICK_ACTION_SPEED_UP: SimpleDialogSettings.LEFT_CLICK_ACTION_SPEED_UP:
if _dialog_manager.is_connected("say_visible", self, "_on_say_visible"): if _dialog_manager.is_connected("say_visible", self, "_on_say_visible"):
_dialog_manager.disconnect("say_visible", self, "_on_say_visible") _dialog_manager.disconnect("say_visible", self, "_on_say_visible")
escoria.logger.trace(self, "Dialog State Machine: 'say' -> 'say_fast'") escoria.logger.trace(self, "Dialog State Machine: 'say' -> 'say_fast'")
emit_signal("finished", "say_fast") emit_signal("finished", "say_fast")
SimpleDialogPlugin.LEFT_CLICK_ACTION_INSTANT_FINISH: SimpleDialogSettings.LEFT_CLICK_ACTION_INSTANT_FINISH:
if _dialog_manager.is_connected("say_visible", self, "_on_say_visible"): if _dialog_manager.is_connected("say_visible", self, "_on_say_visible"):
_dialog_manager.disconnect("say_visible", self, "_on_say_visible") _dialog_manager.disconnect("say_visible", self, "_on_say_visible")
@@ -74,34 +71,8 @@ func _handle_left_click_action(left_click_action: String) -> void:
func enter(): func enter():
escoria.logger.trace(self, "Dialog State Machine: Entered 'say'.") escoria.logger.trace(self, "Dialog State Machine: Entered 'say'.")
if _type == "":
_type = ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.DEFAULT_DIALOG_TYPE
)
var dialog_manager: ESCDialogManager = null
for _manager_class in ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.DIALOG_MANAGERS
):
if ResourceLoader.exists(_manager_class):
var _manager: ESCDialogManager = load(_manager_class).new()
if _manager.has_type(_type):
dialog_manager = _manager
else:
dialog_manager = null
if dialog_manager == null:
escoria.logger.error(
self,
"No dialog manager called '%s' configured." % _type
)
_dialog_manager = dialog_manager
emit_signal("dialog_manager_set", dialog_manager)
if not _dialog_manager.is_connected("say_visible", self, "_on_say_visible"): if not _dialog_manager.is_connected("say_visible", self, "_on_say_visible"):
_dialog_manager.connect("say_visible", self, "_on_say_visible", [], CONNECT_ONESHOT) _dialog_manager.connect("say_visible", self, "_on_say_visible")
var matches = _keytext_regex.search(_text) var matches = _keytext_regex.search(_text)
@@ -129,11 +100,16 @@ func enter():
as ESCSpeechPlayer as ESCSpeechPlayer
).set_state(_speech_resource) ).set_state(_speech_resource)
if _stop_talking_animation_on_option == SimpleDialogPlugin.STOP_TALKING_ANIMATION_ON_END_OF_AUDIO: if _stop_talking_animation_on_option == SimpleDialogSettings.STOP_TALKING_ANIMATION_ON_END_OF_AUDIO:
( if not (
escoria.object_manager.get_object(escoria.object_manager.SPEECH).node\ escoria.object_manager.get_object(escoria.object_manager.SPEECH).node\
as ESCSpeechPlayer as ESCSpeechPlayer
).stream.connect("finished", self, "_on_audio_finished", [], CONNECT_ONESHOT) ).stream.is_connected("finished", self, "_on_audio_finished"):
(
escoria.object_manager.get_object(escoria.object_manager.SPEECH).node\
as ESCSpeechPlayer
).stream.connect("finished", self, "_on_audio_finished")
var translated_text: String = tr(matches.get_string("key")) var translated_text: String = tr(matches.get_string("key"))
@@ -155,7 +131,7 @@ func enter():
func update(_delta): func update(_delta):
if _ready_to_say: if _ready_to_say:
_dialog_manager.say(self, _character, _text, _type) _dialog_manager.do_say(_character, _text)
_ready_to_say = false _ready_to_say = false

View File

@@ -1,5 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogSayFast
# Reference to the currently playing dialog manager # Reference to the currently playing dialog manager
@@ -18,7 +17,7 @@ func enter():
_dialog_manager != null: _dialog_manager != null:
if not _dialog_manager.is_connected("say_visible", self, "_on_say_visible"): if not _dialog_manager.is_connected("say_visible", self, "_on_say_visible"):
_dialog_manager.connect("say_visible", self, "_on_say_visible", [], CONNECT_ONESHOT) _dialog_manager.connect("say_visible", self, "_on_say_visible")
_dialog_manager.speedup() _dialog_manager.speedup()
else: else:

View File

@@ -1,5 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogSayFinish
# Reference to the currently playing dialog manager # Reference to the currently playing dialog manager
@@ -18,7 +17,7 @@ func enter():
_dialog_manager != null: _dialog_manager != null:
if not _dialog_manager.is_connected("say_visible", self, "_on_say_visible"): if not _dialog_manager.is_connected("say_visible", self, "_on_say_visible"):
_dialog_manager.connect("say_visible", self, "_on_say_visible", [], CONNECT_ONESHOT) _dialog_manager.connect("say_visible", self, "_on_say_visible")
_dialog_manager.finish() _dialog_manager.finish()
else: else:

View File

@@ -1,5 +1,4 @@
extends State extends "res://addons/escoria-dialog-simple/patterns/state_machine/state.gd"
class_name DialogVisible
# Reference to the currently playing dialog manager # Reference to the currently playing dialog manager
@@ -14,7 +13,7 @@ func enter():
escoria.logger.trace(self, "Dialog State Machine: Entered 'visible'.") escoria.logger.trace(self, "Dialog State Machine: Entered 'visible'.")
if not _dialog_manager.is_connected("say_finished", self, "_on_say_finished"): if not _dialog_manager.is_connected("say_finished", self, "_on_say_finished"):
_dialog_manager.connect("say_finished", self, "_on_say_finished", [], CONNECT_ONESHOT) _dialog_manager.connect("say_finished", self, "_on_say_finished")
func handle_input(_event): func handle_input(_event):

View File

@@ -47,7 +47,7 @@ onready var is_paused: bool = true
# Build up the UI # Build up the UI
func _ready(): func _ready():
_text_time_per_character = ProjectSettings.get_setting( _text_time_per_character = ProjectSettings.get_setting(
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS
) )
if _text_time_per_character < 0: if _text_time_per_character < 0:
@@ -55,15 +55,15 @@ func _ready():
self, self,
"%s setting must be a non-negative number. Will use default value of %s." % "%s setting must be a non-negative number. Will use default value of %s." %
[ [
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS, SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS,
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE
] ]
) )
_text_time_per_character = SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE _text_time_per_character = SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE
_fast_text_time_per_character = ProjectSettings.get_setting( _fast_text_time_per_character = ProjectSettings.get_setting(
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST
) )
if _fast_text_time_per_character < 0: if _fast_text_time_per_character < 0:
@@ -71,15 +71,15 @@ func _ready():
self, self,
"%s setting must be a non-negative number. Will use default value of %s." % "%s setting must be a non-negative number. Will use default value of %s." %
[ [
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST, SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST,
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE
] ]
) )
_fast_text_time_per_character = SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE _fast_text_time_per_character = SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE
_reading_speed_in_wpm = ProjectSettings.get_setting( _reading_speed_in_wpm = ProjectSettings.get_setting(
SimpleDialogPlugin.READING_SPEED_IN_WPM SimpleDialogSettings.READING_SPEED_IN_WPM
) )
if _reading_speed_in_wpm <= 0: if _reading_speed_in_wpm <= 0:
@@ -87,12 +87,12 @@ func _ready():
self, self,
"%s setting must be a positive number. Will use default value of %s." % "%s setting must be a positive number. Will use default value of %s." %
[ [
SimpleDialogPlugin.READING_SPEED_IN_WPM, SimpleDialogSettings.READING_SPEED_IN_WPM,
SimpleDialogPlugin.READING_SPEED_IN_WPM_DEFAULT_VALUE SimpleDialogSettings.READING_SPEED_IN_WPM_DEFAULT_VALUE
] ]
) )
_reading_speed_in_wpm = SimpleDialogPlugin.READING_SPEED_IN_WPM_DEFAULT_VALUE _reading_speed_in_wpm = SimpleDialogSettings.READING_SPEED_IN_WPM_DEFAULT_VALUE
_word_regex.compile("\\S+") _word_regex.compile("\\S+")
@@ -106,6 +106,8 @@ func _ready():
escoria.connect("paused", self, "_on_paused") escoria.connect("paused", self, "_on_paused")
escoria.connect("resumed", self, "_on_resumed") escoria.connect("resumed", self, "_on_resumed")
connect("tree_exited", self, "_on_tree_exited")
# Switch the current character # Switch the current character
# #
@@ -191,8 +193,11 @@ func _on_dialog_line_typed(object, key):
text_node.visible_characters = -1 text_node.visible_characters = -1
var time_to_disappear: float = _calculate_time_to_disappear() var time_to_disappear: float = _calculate_time_to_disappear()
if not $Timer.is_connected("timeout", self, "_on_dialog_finished"):
$Timer.connect("timeout", self, "_on_dialog_finished")
$Timer.start(time_to_disappear) $Timer.start(time_to_disappear)
$Timer.connect("timeout", self, "_on_dialog_finished")
emit_signal("say_visible") emit_signal("say_visible")
@@ -207,10 +212,11 @@ func _get_number_of_words() -> int:
# Ending the dialog # Ending the dialog
func _on_dialog_finished(): func _on_dialog_finished():
$Timer.stop()
# Only trigger to clear the text if we aren't limiting the clearing trigger to a click. # Only trigger to clear the text if we aren't limiting the clearing trigger to a click.
if not ESCProjectSettingsManager.get_setting(SimpleDialogPlugin.CLEAR_TEXT_BY_CLICK_ONLY): if not ESCProjectSettingsManager.get_setting(SimpleDialogSettings.CLEAR_TEXT_BY_CLICK_ONLY):
emit_signal("say_finished") emit_signal("say_finished")
queue_free()
# Handler managing pause notification from Escoria # Handler managing pause notification from Escoria
@@ -223,7 +229,14 @@ func _on_paused():
# Handler managing resume notification from Escoria # Handler managing resume notification from Escoria
func _on_resumed(): func _on_resumed():
if not tween.is_active(): if not tween.is_active():
# We can't rely on "show()" to make an invisible popup reappear, as per the docs for
# CanvasItem. Instead, we need to use one of the popup_* methods.
if is_inside_tree():
popup_centered()
is_paused = false is_paused = false
tween.resume_all() tween.resume_all()
func _on_tree_exited():
queue_free()

View File

@@ -46,7 +46,7 @@ onready var is_paused: bool = true
# Enable bbcode and catch the signal when a tween completed # Enable bbcode and catch the signal when a tween completed
func _ready(): func _ready():
_text_time_per_character = ProjectSettings.get_setting( _text_time_per_character = ProjectSettings.get_setting(
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS
) )
if _text_time_per_character < 0: if _text_time_per_character < 0:
@@ -54,15 +54,15 @@ func _ready():
self, self,
"%s setting must be a non-negative number. Will use default value of %s." % "%s setting must be a non-negative number. Will use default value of %s." %
[ [
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS, SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS,
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE
] ]
) )
_text_time_per_character = SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE _text_time_per_character = SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_DEFAULT_VALUE
_fast_text_time_per_character = ProjectSettings.get_setting( _fast_text_time_per_character = ProjectSettings.get_setting(
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST
) )
if _fast_text_time_per_character < 0: if _fast_text_time_per_character < 0:
@@ -70,15 +70,15 @@ func _ready():
self, self,
"%s setting must be a non-negative number. Will use default value of %s." % "%s setting must be a non-negative number. Will use default value of %s." %
[ [
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST, SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST,
SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE
] ]
) )
_fast_text_time_per_character = SimpleDialogPlugin.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE _fast_text_time_per_character = SimpleDialogSettings.TEXT_TIME_PER_LETTER_MS_FAST_DEFAULT_VALUE
_reading_speed_in_wpm = ProjectSettings.get_setting( _reading_speed_in_wpm = ProjectSettings.get_setting(
SimpleDialogPlugin.READING_SPEED_IN_WPM SimpleDialogSettings.READING_SPEED_IN_WPM
) )
if _reading_speed_in_wpm <= 0: if _reading_speed_in_wpm <= 0:
@@ -86,12 +86,12 @@ func _ready():
self, self,
"%s setting must be a positive number. Will use default value of %s." % "%s setting must be a positive number. Will use default value of %s." %
[ [
SimpleDialogPlugin.READING_SPEED_IN_WPM, SimpleDialogSettings.READING_SPEED_IN_WPM,
SimpleDialogPlugin.READING_SPEED_IN_WPM_DEFAULT_VALUE SimpleDialogSettings.READING_SPEED_IN_WPM_DEFAULT_VALUE
] ]
) )
_reading_speed_in_wpm = SimpleDialogPlugin.READING_SPEED_IN_WPM_DEFAULT_VALUE _reading_speed_in_wpm = SimpleDialogSettings.READING_SPEED_IN_WPM_DEFAULT_VALUE
_word_regex.compile("\\S+") _word_regex.compile("\\S+")
@@ -114,14 +114,9 @@ func _process(delta):
.get_global_transform_with_canvas().origin .get_global_transform_with_canvas().origin
rect_position.x -= rect_size.x / 2 rect_position.x -= rect_size.x / 2
if rect_position.x < 0: _account_for_margin_x()
rect_position.x = 0
var screen_margin = rect_position.x + rect_size.x - \ _account_for_margin_y()
ProjectSettings.get("display/window/size/width")
if screen_margin > 0:
rect_position.x -= screen_margin
# Make a character say something # Make a character say something
@@ -156,14 +151,9 @@ func say(character: String, line: String) :
rect_position.x = 0 rect_position.x = 0
rect_size.x = ProjectSettings.get_setting("display/window/size/width") rect_size.x = ProjectSettings.get_setting("display/window/size/width")
if rect_position.x < 0: _account_for_margin_x()
rect_position.x = 0
var screen_margin = rect_position.x + rect_size.x - \ _account_for_margin_y()
ProjectSettings.get("display/window/size/width")
if screen_margin > 0:
rect_position.x -= screen_margin
_current_character.start_talking() _current_character.start_talking()
@@ -227,7 +217,7 @@ func _get_number_of_words() -> int:
# Ending the dialog # Ending the dialog
func _on_dialog_finished(): func _on_dialog_finished():
# Only trigger to clear the text if we aren't limiting the clearing trigger to a click. # Only trigger to clear the text if we aren't limiting the clearing trigger to a click.
if not ESCProjectSettingsManager.get_setting(SimpleDialogPlugin.CLEAR_TEXT_BY_CLICK_ONLY): if not ESCProjectSettingsManager.get_setting(SimpleDialogSettings.CLEAR_TEXT_BY_CLICK_ONLY):
emit_signal("say_finished") emit_signal("say_finished")
@@ -254,3 +244,25 @@ func _stop_character_talking():
# Make the speaking item animation stop talking, if it is still alive # Make the speaking item animation stop talking, if it is still alive
if is_instance_valid(_current_character) and _current_character != null: if is_instance_valid(_current_character) and _current_character != null:
_current_character.stop_talking() _current_character.stop_talking()
func _account_for_margin_x() -> void:
if rect_position.x < 0:
rect_position.x = 0
var screen_margin_x = rect_position.x + rect_size.x - \
ProjectSettings.get("display/window/size/width")
if screen_margin_x > 0:
rect_position.x -= screen_margin_x
func _account_for_margin_y() -> void:
if rect_position.y < 0:
rect_position.y = 0
var screen_margin_y = rect_position.y + rect_size.y - \
ProjectSettings.get("display/window/size/height")
if screen_margin_y > 0:
rect_position.y -= screen_margin_y

View File

@@ -53,7 +53,7 @@ func _enter_tree():
var room_selector_parent = $ui/Control/panel_down/VBoxContainer\ var room_selector_parent = $ui/Control/panel_down/VBoxContainer\
/HBoxContainer/MainMargin/VBoxContainer /HBoxContainer/MainMargin/VBoxContainer
if ProjectSettings.get_setting("escoria/debug/enable_room_selector") and \ if ProjectSettings.get_setting(ESCProjectSettingsManager.ENABLE_ROOM_SELECTOR) and \
room_selector_parent.get_node_or_null("room_select") == null: room_selector_parent.get_node_or_null("room_select") == null:
room_select = preload( room_select = preload(
"res://addons/escoria-core/ui_library/tools/room_select" +\ "res://addons/escoria-core/ui_library/tools/room_select" +\
@@ -121,7 +121,6 @@ func element_focused(element_id: String) -> void:
if escoria.action_manager.current_action != VERB_USE \ if escoria.action_manager.current_action != VERB_USE \
and target_obj is ESCItem: and target_obj is ESCItem:
verbs_menu.set_by_name(target_obj.default_action) verbs_menu.set_by_name(target_obj.default_action)
ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM: ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM:
tooltip.set_target(target_obj.tooltip_name) tooltip.set_target(target_obj.tooltip_name)

View File

@@ -244,6 +244,9 @@ func left_click_on_item(item_global_id: String, event: InputEvent) -> void:
[item_global_id, event], [item_global_id, event],
true true
) )
$mouse_layer/verbs_menu.clear_tool_texture()
func right_click_on_item(item_global_id: String, event: InputEvent) -> void: func right_click_on_item(item_global_id: String, event: InputEvent) -> void:
mousewheel_action(1) mousewheel_action(1)
@@ -398,7 +401,6 @@ func _on_action_finished():
func _on_event_done(_return_code: int, _event_name: String): func _on_event_done(_return_code: int, _event_name: String):
if _return_code == ESCExecution.RC_OK: if _return_code == ESCExecution.RC_OK:
escoria.action_manager.clear_current_action() escoria.action_manager.clear_current_action()
$mouse_layer/verbs_menu.clear_tool_texture()
$tooltip_layer/tooltip.set_target("") $tooltip_layer/tooltip.set_target("")

View File

@@ -35,16 +35,15 @@ __meta__ = {
anchor_top = 0.9 anchor_top = 0.9
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
mouse_filter = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
theme = ExtResource( 9 ) theme = ExtResource( 9 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/ui"] [node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/ui"]
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
mouse_filter = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
__meta__ = { __meta__ = {
@@ -54,6 +53,7 @@ __meta__ = {
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/ui/HBoxContainer"] [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/ui/HBoxContainer"]
margin_right = 58.0 margin_right = 58.0
margin_bottom = 90.0 margin_bottom = 90.0
mouse_filter = 2
[node name="MenuButton" type="Button" parent="CanvasLayer/ui/HBoxContainer/VBoxContainer"] [node name="MenuButton" type="Button" parent="CanvasLayer/ui/HBoxContainer/VBoxContainer"]
margin_right = 58.0 margin_right = 58.0
@@ -64,6 +64,7 @@ text = "Menu"
margin_left = 62.0 margin_left = 62.0
margin_right = 1186.0 margin_right = 1186.0
margin_bottom = 90.0 margin_bottom = 90.0
mouse_filter = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="inventory_ui" parent="CanvasLayer/ui/HBoxContainer" instance=ExtResource( 1 )] [node name="inventory_ui" parent="CanvasLayer/ui/HBoxContainer" instance=ExtResource( 1 )]

View File

@@ -61,6 +61,7 @@ anchor_bottom = 1.0
margin_left = -516.0 margin_left = -516.0
margin_top = -160.0 margin_top = -160.0
rect_min_size = Vector2( 0, 160 ) rect_min_size = Vector2( 0, 160 )
mouse_filter = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
texture = ExtResource( 2 ) texture = ExtResource( 2 )
@@ -72,27 +73,27 @@ __meta__ = {
[node name="MarginContainer" type="MarginContainer" parent="FloatingInventory/panel"] [node name="MarginContainer" type="MarginContainer" parent="FloatingInventory/panel"]
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
mouse_filter = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
custom_constants/margin_right = 20 custom_constants/margin_right = 20
custom_constants/margin_top = 20 custom_constants/margin_top = 20
custom_constants/margin_left = 20 custom_constants/margin_left = 20
custom_constants/margin_bottom = 20 custom_constants/margin_bottom = 20
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ScrollContainer" type="ScrollContainer" parent="FloatingInventory/panel/MarginContainer"] [node name="ScrollContainer" type="ScrollContainer" parent="FloatingInventory/panel/MarginContainer"]
margin_left = 20.0 margin_left = 20.0
margin_top = 80.0 margin_top = 80.0
margin_right = 496.0 margin_right = 496.0
margin_bottom = 80.0 margin_bottom = 80.0
mouse_filter = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 6 size_flags_vertical = 6
scroll_vertical_enabled = false scroll_vertical_enabled = false
[node name="container" type="HBoxContainer" parent="FloatingInventory/panel/MarginContainer/ScrollContainer"] [node name="container" type="HBoxContainer" parent="FloatingInventory/panel/MarginContainer/ScrollContainer"]
margin_right = 476.0 margin_right = 476.0
mouse_filter = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
custom_constants/separation = 20 custom_constants/separation = 20

View File

@@ -1264,7 +1264,7 @@ func export_player(scene_name) -> void:
new_character.global_id = get_node(NAME_NODE).get_node("global_id").text new_character.global_id = get_node(NAME_NODE).get_node("global_id").text
new_character.tooltip_name = get_node(NAME_NODE).get_node("node_name").text new_character.tooltip_name = get_node(NAME_NODE).get_node("node_name").text
new_character.default_action = "look" new_character.default_action = "look"
var animations_resource = ESCAnimationResource.new() var animations_resource = ESCAnimationResource.new()

View File

@@ -158,7 +158,7 @@ func _on_CreateButton_pressed() -> void:
item.global_id = get_node(GLOBAL_ID_NODE).text item.global_id = get_node(GLOBAL_ID_NODE).text
item.is_interactive = get_node(INTERACTIVE_NODE).pressed item.is_interactive = get_node(INTERACTIVE_NODE).pressed
item.tooltip_name = get_node(ITEM_NAME_NODE).text item.tooltip_name = get_node(ITEM_NAME_NODE).text
var selected_index = get_node(ACTION_NODE).selected var selected_index = get_node(ACTION_NODE).selected
item.default_action = get_node(ACTION_NODE).get_item_text(selected_index) item.default_action = get_node(ACTION_NODE).get_item_text(selected_index)
@@ -167,7 +167,7 @@ func _on_CreateButton_pressed() -> void:
var new_pool_array: PoolStringArray = item.combine_when_selected_action_is_in var new_pool_array: PoolStringArray = item.combine_when_selected_action_is_in
new_pool_array.append("use") new_pool_array.append("use")
item.combine_when_selected_action_is_in = new_pool_array item.combine_when_selected_action_is_in = new_pool_array
# Add Dialog Position to the background item # Add Dialog Position to the background item
var interact_position = ESCLocation.new() var interact_position = ESCLocation.new()
interact_position.name = "interact_position" interact_position.name = "interact_position"

View File

@@ -1,16 +1,11 @@
[gd_scene load_steps=17 format=2] [gd_scene load_steps=15 format=2]
[ext_resource path="res://game/rooms/intro/escoria-logo-comet-anim.png" type="Texture" id=1] [ext_resource path="res://game/rooms/intro/escoria-logo-comet-anim.png" type="Texture" id=1]
[ext_resource path="res://game/rooms/intro/intro_background_space.png" type="Texture" id=2]
[ext_resource path="res://game/rooms/intro/escoria-logo-comet.png" type="Texture" id=3] [ext_resource path="res://game/rooms/intro/escoria-logo-comet.png" type="Texture" id=3]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=5]
[ext_resource path="res://game/rooms/intro/escoria_background.png" type="Texture" id=6]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7]
[sub_resource type="StreamTexture" id=10]
flags = 4
load_path = "res://.import/intro_background_space.png-03815c403298b393ba1bea2b29eafeac.stex"
[sub_resource type="AtlasTexture" id=1] [sub_resource type="AtlasTexture" id=1]
flags = 4 flags = 4
atlas = ExtResource( 1 ) atlas = ExtResource( 1 )
@@ -88,7 +83,7 @@ tracks/2/keys = {
"values": [ false ] "values": [ false ]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/path = NodePath("ESCBackground:visible") tracks/3/path = NodePath("asteroid:position")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/imported = false tracks/3/imported = false
@@ -96,11 +91,11 @@ tracks/3/enabled = true
tracks/3/keys = { tracks/3/keys = {
"times": PoolRealArray( 0 ), "times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ), "transitions": PoolRealArray( 1 ),
"update": 1, "update": 0,
"values": [ true ] "values": [ Vector2( 620, 450 ) ]
} }
tracks/4/type = "value" tracks/4/type = "value"
tracks/4/path = NodePath("asteroid:position") tracks/4/path = NodePath("Polygon2D:visible")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/imported = false tracks/4/imported = false
@@ -109,18 +104,6 @@ tracks/4/keys = {
"times": PoolRealArray( 0 ), "times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ), "transitions": PoolRealArray( 1 ),
"update": 0, "update": 0,
"values": [ Vector2( 620, 450 ) ]
}
tracks/5/type = "value"
tracks/5/path = NodePath("Polygon2D:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ true ] "values": [ true ]
} }
@@ -265,18 +248,9 @@ global_id = "intro_cutscene"
esc_script = "res://game/rooms/intro/esc/intro.esc" esc_script = "res://game/rooms/intro/esc/intro.esc"
camera_limits = [ Rect2( 0, 0, 1920, 1080 ) ] camera_limits = [ Rect2( 0, 0, 1920, 1080 ) ]
[node name="ESCBackground" type="TextureRect" parent="."]
margin_right = 1279.0
margin_bottom = 900.0
mouse_filter = 2
texture = ExtResource( 6 )
expand = true
stretch_mode = 1
script = ExtResource( 4 )
[node name="initial_background" type="Sprite" parent="."] [node name="initial_background" type="Sprite" parent="."]
position = Vector2( 640, 450 ) position = Vector2( 640, 450 )
texture = SubResource( 10 ) texture = ExtResource( 2 )
[node name="animated_asteroid" type="AnimatedSprite" parent="."] [node name="animated_asteroid" type="AnimatedSprite" parent="."]
visible = false visible = false

View File

@@ -8,6 +8,8 @@
set_global dialog_popup_advance 2 set_global dialog_popup_advance 2
stop stop
> [eq dialog_popup_advance 2] > [eq dialog_popup_advance 2]
block_say
say player ROOM1_look_wall_item_3:"No, SERIOUSLY, I have no idea what that is!" avatar say player ROOM1_look_wall_item_3:"No, SERIOUSLY, I have no idea what that is!" avatar
say player ROOM1_look_wall_item_4:"Please stop asking me that!" avatar say player ROOM1_look_wall_item_4:"Please stop asking me that!" avatar
end_block_say
stop stop

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=12 format=2] [gd_scene load_steps=11 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5]
@@ -16,7 +15,7 @@ vertices = PoolVector2Array( 125, 357, 1170, 355, 1277, 417, 1279, 550, -1, 548,
polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 5 ) ] polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 5 ) ]
outlines = [ PoolVector2Array( 125, 357, 1170, 355, 1277, 417, 1279, 550, -1, 548, 0, 449 ) ] outlines = [ PoolVector2Array( 125, 357, 1170, 355, 1277, 417, 1279, 550, -1, 548, 0, 449 ) ]
[node name="room2" type="Node2D"] [node name="room1" type="Node2D"]
script = ExtResource( 6 ) script = ExtResource( 6 )
__meta__ = { __meta__ = {
"_edit_vertical_guides_": [ ] "_edit_vertical_guides_": [ ]
@@ -27,17 +26,14 @@ player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1280, 550 ) ] camera_limits = [ Rect2( 0, 0, 1280, 550 ) ]
editor_debug_mode = 1 editor_debug_mode = 1
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room1Background" type="Sprite" parent="."]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 2
texture = ExtResource( 8 ) texture = ExtResource( 8 )
script = ExtResource( 2 ) centered = false
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_lock_": true
} }
[node name="advice2" type="Label" parent="ESCBackground"] [node name="advice2" type="Label" parent="Room1Background"]
anchor_right = 0.023274 anchor_right = 0.023274
anchor_bottom = 0.018018 anchor_bottom = 0.018018
margin_left = 90.2752 margin_left = 90.2752
@@ -47,11 +43,8 @@ margin_bottom = 215.824
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "Move : left click text = "Move : left click
Fast move : double left click" Fast move : double left click"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="room_label" type="Label" parent="ESCBackground"] [node name="room_label" type="Label" parent="Room1Background"]
margin_left = 7.0 margin_left = 7.0
margin_top = 3.0 margin_top = 3.0
margin_right = 89.0 margin_right = 89.0
@@ -62,7 +55,7 @@ __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="advice" type="Label" parent="ESCBackground"] [node name="advice" type="Label" parent="Room1Background"]
anchor_right = 0.023274 anchor_right = 0.023274
anchor_bottom = 0.018018 anchor_bottom = 0.018018
margin_left = 90.0 margin_left = 90.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -1,11 +1,10 @@
[gd_scene load_steps=21 format=2] [gd_scene load_steps=20 format=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=8] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=8]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=9]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=10] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=10]
[ext_resource path="res://game/rooms/room02/room2background.png" type="Texture" id=11] [ext_resource path="res://game/rooms/room02/room2background.png" type="Texture" id=11]
[ext_resource path="res://game/rooms/room02/floor3.png" type="Texture" id=12] [ext_resource path="res://game/rooms/room02/floor3.png" type="Texture" id=12]
@@ -32,7 +31,7 @@ extents = Vector2( 39, 39.5 )
[sub_resource type="Animation" id=5] [sub_resource type="Animation" id=5]
length = 0.001 length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/path = NodePath("ESCBackground/Floor1:position") tracks/0/path = NodePath("Room2Background/Floor1:position")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/imported = false tracks/0/imported = false
@@ -44,7 +43,7 @@ tracks/0/keys = {
"values": [ Vector2( 495, 650 ) ] "values": [ Vector2( 495, 650 ) ]
} }
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/path = NodePath("ESCBackground/Floor2:position") tracks/1/path = NodePath("Room2Background/Floor2:position")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/imported = false tracks/1/imported = false
@@ -56,7 +55,7 @@ tracks/1/keys = {
"values": [ Vector2( 585, 650 ) ] "values": [ Vector2( 585, 650 ) ]
} }
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/path = NodePath("ESCBackground/Floor3:position") tracks/2/path = NodePath("Room2Background/Floor3:position")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/imported = false tracks/2/imported = false
@@ -68,7 +67,7 @@ tracks/2/keys = {
"values": [ Vector2( 696, 650 ) ] "values": [ Vector2( 696, 650 ) ]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/path = NodePath("ESCBackground/Floor4:position") tracks/3/path = NodePath("Room2Background/Floor4:position")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/imported = false tracks/3/imported = false
@@ -83,7 +82,7 @@ tracks/3/keys = {
[sub_resource type="Animation" id=6] [sub_resource type="Animation" id=6]
length = 1.6 length = 1.6
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/path = NodePath("ESCBackground/Floor1:position") tracks/0/path = NodePath("Room2Background/Floor1:position")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/imported = false tracks/0/imported = false
@@ -95,7 +94,7 @@ tracks/0/keys = {
"values": [ Vector2( 495, 650 ), Vector2( 495, 450 ) ] "values": [ Vector2( 495, 650 ), Vector2( 495, 450 ) ]
} }
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/path = NodePath("ESCBackground/Floor2:position") tracks/1/path = NodePath("Room2Background/Floor2:position")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/imported = false tracks/1/imported = false
@@ -107,7 +106,7 @@ tracks/1/keys = {
"values": [ Vector2( 585, 650 ), Vector2( 585, 650 ), Vector2( 585, 450 ) ] "values": [ Vector2( 585, 650 ), Vector2( 585, 650 ), Vector2( 585, 450 ) ]
} }
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/path = NodePath("ESCBackground/Floor4:position") tracks/2/path = NodePath("Room2Background/Floor4:position")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/imported = false tracks/2/imported = false
@@ -119,7 +118,7 @@ tracks/2/keys = {
"values": [ Vector2( 786, 650 ), Vector2( 786, 650 ), Vector2( 786, 450 ) ] "values": [ Vector2( 786, 650 ), Vector2( 786, 650 ), Vector2( 786, 450 ) ]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/path = NodePath("ESCBackground/Floor3:position") tracks/3/path = NodePath("Room2Background/Floor3:position")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/imported = false tracks/3/imported = false
@@ -134,7 +133,7 @@ tracks/3/keys = {
[sub_resource type="Animation" id=7] [sub_resource type="Animation" id=7]
length = 1.6 length = 1.6
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/path = NodePath("ESCBackground/Floor1:position") tracks/0/path = NodePath("Room2Background/Floor1:position")
tracks/0/interp = 2 tracks/0/interp = 2
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/imported = false tracks/0/imported = false
@@ -146,7 +145,7 @@ tracks/0/keys = {
"values": [ Vector2( 495, 450 ), Vector2( 495, 450 ), Vector2( 495, 650 ) ] "values": [ Vector2( 495, 450 ), Vector2( 495, 450 ), Vector2( 495, 650 ) ]
} }
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/path = NodePath("ESCBackground/Floor2:position") tracks/1/path = NodePath("Room2Background/Floor2:position")
tracks/1/interp = 2 tracks/1/interp = 2
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/imported = false tracks/1/imported = false
@@ -158,7 +157,7 @@ tracks/1/keys = {
"values": [ Vector2( 585, 450 ), Vector2( 585, 450 ), Vector2( 585, 650 ) ] "values": [ Vector2( 585, 450 ), Vector2( 585, 450 ), Vector2( 585, 650 ) ]
} }
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/path = NodePath("ESCBackground/Floor3:position") tracks/2/path = NodePath("Room2Background/Floor3:position")
tracks/2/interp = 2 tracks/2/interp = 2
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/imported = false tracks/2/imported = false
@@ -170,7 +169,7 @@ tracks/2/keys = {
"values": [ Vector2( 696, 450 ), Vector2( 696, 450 ), Vector2( 696, 650 ) ] "values": [ Vector2( 696, 450 ), Vector2( 696, 450 ), Vector2( 696, 650 ) ]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/path = NodePath("ESCBackground/Floor4:position") tracks/3/path = NodePath("Room2Background/Floor4:position")
tracks/3/interp = 2 tracks/3/interp = 2
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/imported = false tracks/3/imported = false
@@ -192,6 +191,52 @@ player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1280, 555 ) ] camera_limits = [ Rect2( 0, 0, 1280, 555 ) ]
editor_debug_mode = 1 editor_debug_mode = 1
[node name="Room2Background" type="Sprite" parent="."]
texture = ExtResource( 11 )
centered = false
[node name="room_label" type="Label" parent="Room2Background"]
margin_left = 18.0
margin_top = 12.0
margin_right = 100.0
margin_bottom = 33.0
custom_fonts/font = ExtResource( 3 )
text = "ROOM 2"
[node name="Floor1" type="Sprite" parent="Room2Background"]
position = Vector2( 495, 650 )
texture = ExtResource( 13 )
[node name="Floor2" type="Sprite" parent="Room2Background"]
position = Vector2( 585, 650 )
texture = ExtResource( 15 )
[node name="Floor4" type="Sprite" parent="Room2Background"]
position = Vector2( 786, 650 )
texture = ExtResource( 14 )
[node name="Floor3" type="Sprite" parent="Room2Background"]
position = Vector2( 696, 650 )
scale = Vector2( 1.01351, 1 )
texture = ExtResource( 12 )
[node name="Polygon2D" type="Polygon2D" parent="Room2Background"]
color = Color( 0, 0, 0, 1 )
polygon = PoolVector2Array( 0, 550, 1280, 550, 1280, 800, 0, 800 )
[node name="room_label2" type="Label" parent="Room2Background"]
margin_left = 17.0
margin_top = 558.0
margin_right = 1126.0
margin_bottom = 627.0
custom_fonts/font = ExtResource( 3 )
text = "Room 2 demonstrates modifying the walkable area of a room. Performing \"use\" on the button will cause the original navmesh (which has a gap
in the middle) with one that covers the whole room (platforms + bridge) - allowing the player to walk from one side to the other.
Setting the state of the r2_bridge variable to \"bridge_open\" or \"bridge_closed\" (see button.esc) automatically runs the animation with the same name."
__meta__ = {
"_edit_use_anchors_": false
}
[node name="r_platform" type="Area2D" parent="."] [node name="r_platform" type="Area2D" parent="."]
pause_mode = 1 pause_mode = 1
script = ExtResource( 7 ) script = ExtResource( 7 )
@@ -200,6 +245,7 @@ esc_script = "res://game/rooms/room02/esc/right_platform.esc"
interaction_direction = 3 interaction_direction = 3
tooltip_name = "Right platform" tooltip_name = "Right platform"
default_action = "look" default_action = "look"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -218,6 +264,7 @@ esc_script = "res://game/rooms/room02/esc/right_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Right exit" tooltip_name = "Right exit"
default_action = "walk" default_action = "walk"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -236,6 +283,7 @@ esc_script = "res://game/rooms/room02/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Left exit" tooltip_name = "Left exit"
default_action = "walk" default_action = "walk"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -252,61 +300,6 @@ script = ExtResource( 8 )
global_id = "r2_player_start" global_id = "r2_player_start"
is_start_location = true is_start_location = true
[node name="ESCBackground" type="TextureRect" parent="."]
margin_right = 1280.0
margin_bottom = 550.0
mouse_filter = 2
texture = ExtResource( 11 )
script = ExtResource( 9 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="room_label" type="Label" parent="ESCBackground"]
margin_left = 18.0
margin_top = 12.0
margin_right = 100.0
margin_bottom = 33.0
custom_fonts/font = ExtResource( 3 )
text = "ROOM 2"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Floor1" type="Sprite" parent="ESCBackground"]
position = Vector2( 495, 650 )
texture = ExtResource( 13 )
[node name="Floor2" type="Sprite" parent="ESCBackground"]
position = Vector2( 585, 650 )
texture = ExtResource( 15 )
[node name="Floor4" type="Sprite" parent="ESCBackground"]
position = Vector2( 786, 650 )
texture = ExtResource( 14 )
[node name="Floor3" type="Sprite" parent="ESCBackground"]
position = Vector2( 696, 650 )
scale = Vector2( 1.01351, 1 )
texture = ExtResource( 12 )
[node name="Polygon2D" type="Polygon2D" parent="ESCBackground"]
color = Color( 0, 0, 0, 1 )
polygon = PoolVector2Array( 0, 550, 1280, 550, 1280, 800, 0, 800 )
[node name="room_label2" type="Label" parent="ESCBackground"]
margin_left = 17.0
margin_top = 558.0
margin_right = 99.0
margin_bottom = 579.0
custom_fonts/font = ExtResource( 3 )
text = "Room 2 demonstrates modifying the walkable area of a room. Performing \"use\" on the button will cause the original navmesh (which has a gap
in the middle) with one that covers the whole room (platforms + bridge) - allowing the player to walk from one side to the other.
Setting the state of the r2_bridge variable to \"bridge_open\" or \"bridge_closed\" (see button.esc) automatically runs the animation with the same name."
__meta__ = {
"_edit_use_anchors_": false
}
[node name="walkable_area" type="Navigation2D" parent="."] [node name="walkable_area" type="Navigation2D" parent="."]
script = ExtResource( 10 ) script = ExtResource( 10 )
debug_mode = 1 debug_mode = 1
@@ -327,6 +320,7 @@ global_id = "r2_button"
esc_script = "res://game/rooms/room02/esc/button.esc" esc_script = "res://game/rooms/room02/esc/button.esc"
tooltip_name = "button" tooltip_name = "button"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 0.196078, 1, 0, 1 ) dialog_color = Color( 0.196078, 1, 0, 1 )
animations = null animations = null
@@ -347,6 +341,7 @@ global_id = "r2_button_right"
esc_script = "res://game/rooms/room02/esc/button.esc" esc_script = "res://game/rooms/room02/esc/button.esc"
tooltip_name = "button" tooltip_name = "button"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 0.196078, 1, 0, 1 ) dialog_color = Color( 0.196078, 1, 0, 1 )
animations = null animations = null
@@ -364,6 +359,7 @@ script = ExtResource( 8 )
pause_mode = 1 pause_mode = 1
script = ExtResource( 7 ) script = ExtResource( 7 )
global_id = "r2_bridge" global_id = "r2_bridge"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=25 format=2] [gd_scene load_steps=24 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
@@ -6,7 +6,6 @@
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=8] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=8]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=9]
[ext_resource path="res://game/rooms/room03/room3chasm.png" type="Texture" id=10] [ext_resource path="res://game/rooms/room03/room3chasm.png" type="Texture" id=10]
[ext_resource path="res://game/rooms/room03/room3bridge.png" type="Texture" id=11] [ext_resource path="res://game/rooms/room03/room3bridge.png" type="Texture" id=11]
[ext_resource path="res://game/rooms/room03/room3background.png" type="Texture" id=12] [ext_resource path="res://game/rooms/room03/room3background.png" type="Texture" id=12]
@@ -159,6 +158,7 @@ __meta__ = {
} }
global_id = "r3_right_platform" global_id = "r3_right_platform"
esc_script = "res://game/rooms/room03/esc/right_platform.esc" esc_script = "res://game/rooms/room03/esc/right_platform.esc"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -187,6 +187,7 @@ esc_script = "res://game/rooms/room03/esc/right_exit.esc"
is_exit = true is_exit = true
is_interactive = false is_interactive = false
tooltip_name = "Exit" tooltip_name = "Exit"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -211,6 +212,7 @@ global_id = "r3_l_exit"
esc_script = "res://game/rooms/room03/esc/left_exit.esc" esc_script = "res://game/rooms/room03/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Exit" tooltip_name = "Exit"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -232,6 +234,7 @@ pause_mode = 1
script = ExtResource( 5 ) script = ExtResource( 5 )
global_id = "r3_bridge" global_id = "r3_bridge"
esc_script = "res://game/rooms/room03/esc/room03_bridge.esc" esc_script = "res://game/rooms/room03/esc/room03_bridge.esc"
combine_when_selected_action_is_in = [ ]
inventory_texture = ExtResource( 10 ) inventory_texture = ExtResource( 10 )
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -257,21 +260,15 @@ polygon = PoolVector2Array( 501, 349, 780, 351, 859, 548, 419, 551 )
position = Vector2( 434, 441 ) position = Vector2( 434, 441 )
script = ExtResource( 8 ) script = ExtResource( 8 )
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room3Background" type="Sprite" parent="."]
margin_right = 1280.0
margin_bottom = 550.0
mouse_filter = 2
texture = ExtResource( 12 ) texture = ExtResource( 12 )
script = ExtResource( 9 ) centered = false
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Polygon2D" type="Polygon2D" parent="ESCBackground"] [node name="Polygon2D" type="Polygon2D" parent="Room3Background"]
color = Color( 0, 0, 0, 1 ) color = Color( 0, 0, 0, 1 )
polygon = PoolVector2Array( 0, 550, 1280, 550, 1280, 800, 0, 800 ) polygon = PoolVector2Array( 0, 550, 1280, 550, 1280, 800, 0, 800 )
[node name="room_label2" type="Label" parent="ESCBackground"] [node name="room_label2" type="Label" parent="Room3Background"]
margin_left = 17.0 margin_left = 17.0
margin_top = 558.0 margin_top = 558.0
margin_right = 1224.0 margin_right = 1224.0
@@ -280,18 +277,12 @@ custom_fonts/font = ExtResource( 3 )
text = "Room 3 demonstrates a chain of steps to complete a game task. It demonstrates different talk responses based on the state of the button (which sets the text = "Room 3 demonstrates a chain of steps to complete a game task. It demonstrates different talk responses based on the state of the button (which sets the
\"broken_button\" variable to true or false respectively). Setting the \"button_repaired\" state automatically plays the button_repaired animation, which turns off \"broken_button\" variable to true or false respectively). Setting the \"button_repaired\" state automatically plays the button_repaired animation, which turns off
the particle emitter for the button. The custom command shows how to execute functions written in gdscript." the particle emitter for the button. The custom command shows how to execute functions written in gdscript."
__meta__ = {
"_edit_use_anchors_": false
}
[node name="room_label" type="Label" parent="ESCBackground"] [node name="room_label" type="Label" parent="Room3Background"]
margin_right = 82.0 margin_right = 82.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 3" text = "ROOM 3"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="r3_button" type="Area2D" parent="."] [node name="r3_button" type="Area2D" parent="."]
pause_mode = 1 pause_mode = 1
@@ -300,6 +291,7 @@ global_id = "r3_button"
esc_script = "res://game/rooms/room03/esc/button.esc" esc_script = "res://game/rooms/room03/esc/button.esc"
tooltip_name = "Button" tooltip_name = "Button"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=13 format=2] [gd_scene load_steps=12 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5]
@@ -25,20 +24,20 @@ player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 2390, 1200 ) ] camera_limits = [ Rect2( 0, 0, 2390, 1200 ) ]
editor_debug_mode = 1 editor_debug_mode = 1
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Forrest" type="Sprite" parent="."]
margin_right = 2390.0
margin_bottom = 1200.0
mouse_filter = 2
texture = ExtResource( 7 ) texture = ExtResource( 7 )
script = ExtResource( 2 ) centered = false
__meta__ = {
"_edit_lock_": true
}
[node name="room_label" type="Label" parent="ESCBackground"] [node name="room_label" type="Label" parent="Forrest"]
margin_right = 82.0 margin_right = 82.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 4" text = "ROOM 4"
[node name="Label" type="Label" parent="ESCBackground"] [node name="Label" type="Label" parent="Forrest"]
modulate = Color( 0, 0, 0, 1 ) modulate = Color( 0, 0, 0, 1 )
margin_left = 782.0 margin_left = 782.0
margin_top = 159.0 margin_top = 159.0
@@ -58,7 +57,7 @@ __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="Label2" type="Label" parent="ESCBackground"] [node name="Label2" type="Label" parent="Forrest"]
modulate = Color( 0, 0, 0, 1 ) modulate = Color( 0, 0, 0, 1 )
margin_left = 1246.0 margin_left = 1246.0
margin_top = 506.0 margin_top = 506.0
@@ -76,7 +75,7 @@ __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="Label3" type="Label" parent="ESCBackground"] [node name="Label3" type="Label" parent="Forrest"]
modulate = Color( 0, 0, 0, 1 ) modulate = Color( 0, 0, 0, 1 )
margin_left = 1285.0 margin_left = 1285.0
margin_top = 211.0 margin_top = 211.0

View File

@@ -1,27 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1271.64, 671.735, 1188.64, 624.843 )

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=2] [gd_scene load_steps=17 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://game/items/inventory/r5_empty_sheet.tscn" type="PackedScene" id=2] [ext_resource path="res://game/items/inventory/r5_empty_sheet.tscn" type="PackedScene" id=2]
@@ -11,7 +11,6 @@
[ext_resource path="res://game/rooms/room05/water_droplet.png" type="Texture" id=9] [ext_resource path="res://game/rooms/room05/water_droplet.png" type="Texture" id=9]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=11] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=11]
[ext_resource path="res://game/rooms/room05/room5background.png" type="Texture" id=13] [ext_resource path="res://game/rooms/room05/room5background.png" type="Texture" id=13]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=15]
[sub_resource type="NavigationPolygon" id=1] [sub_resource type="NavigationPolygon" id=1]
vertices = PoolVector2Array( 1187, 387, 1188, 352, 1269.59, 398, 1267, 538, 15, 401, 93, 350, 96, 375, 12, 539, 129.634, 362, 1155, 361 ) vertices = PoolVector2Array( 1187, 387, 1188, 352, 1269.59, 398, 1267, 538, 15, 401, 93, 350, 96, 375, 12, 539, 129.634, 362, 1155, 361 )
@@ -70,24 +69,21 @@ esc_script = "res://game/rooms/room05/esc/room05.esc"
player_scene = ExtResource( 4 ) player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1280, 555 ) ] camera_limits = [ Rect2( 0, 0, 1280, 555 ) ]
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room5Background" type="Sprite" parent="."]
margin_right = 1280.0
margin_bottom = 550.0
mouse_filter = 2
texture = ExtResource( 13 ) texture = ExtResource( 13 )
script = ExtResource( 15 ) centered = false
[node name="room_label" type="Label" parent="ESCBackground"] [node name="room_label" type="Label" parent="Room5Background"]
margin_right = 82.0 margin_right = 82.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 5" text = "ROOM 5"
[node name="background_for_text" type="Polygon2D" parent="ESCBackground"] [node name="background_for_text" type="Polygon2D" parent="Room5Background"]
color = Color( 0.364706, 0.109804, 0.447059, 1 ) color = Color( 0.364706, 0.109804, 0.447059, 1 )
polygon = PoolVector2Array( 128, 4, 555, 4, 555, 315, 128, 315 ) polygon = PoolVector2Array( 128, 4, 555, 4, 555, 315, 128, 315 )
[node name="room_details1" type="Label" parent="ESCBackground/background_for_text"] [node name="room_details1" type="Label" parent="Room5Background/background_for_text"]
margin_left = 141.0 margin_left = 141.0
margin_top = 7.0 margin_top = 7.0
margin_right = 427.0 margin_right = 427.0
@@ -99,7 +95,7 @@ Combine the pen and paper in your
inventory to create a new object which inventory to create a new object which
will be used in the next room." will be used in the next room."
[node name="room_details2" type="Label" parent="ESCBackground/background_for_text"] [node name="room_details2" type="Label" parent="Room5Background/background_for_text"]
margin_left = 138.0 margin_left = 138.0
margin_top = 136.0 margin_top = 136.0
margin_right = 580.0 margin_right = 580.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 139 KiB

View File

@@ -1,27 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1271.64, 671.735, 1188.64, 624.843 )

View File

@@ -83,4 +83,26 @@ set_active worker false
set_gui_visible true set_gui_visible true
accept_input ALL accept_input ALL
# use has to be supported as simplemouse has no "give" icon
:use r5_filled_sheet
set_gui_visible false
accept_input SKIP
inventory_remove r5_filled_sheet
say worker "I've unlocked the door, in you go!"
walk worker r6_r_exit
# Open the door
set_global r6_r_exit_locked false
# Hide the closed door graphic
set_state r6_r_exit open_door
# Make the open exit visible
set_active r6_r_exit true
# Disappear!
say worker "I will see you again... MUAHAHAHAHA!"
wait 1
set_active worker false
set_gui_visible true
accept_input ALL

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=19 format=2] [gd_scene load_steps=18 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=3] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://game/rooms/room06/wave.png" type="Texture" id=5] [ext_resource path="res://game/rooms/room06/wave.png" type="Texture" id=5]
@@ -63,12 +62,9 @@ esc_script = "res://game/rooms/room06/esc/room06.esc"
player_scene = ExtResource( 4 ) player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1280, 555 ) ] camera_limits = [ Rect2( 0, 0, 1280, 555 ) ]
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room6Background" type="Sprite" parent="."]
margin_right = 1280.0
margin_bottom = 550.0
mouse_filter = 2
texture = ExtResource( 12 ) texture = ExtResource( 12 )
script = ExtResource( 2 ) centered = false
[node name="walkable_area" type="Navigation2D" parent="."] [node name="walkable_area" type="Navigation2D" parent="."]
script = ExtResource( 1 ) script = ExtResource( 1 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -1,39 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 2092.0
margin_bottom = 1970.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="low_platform" type="Line2D" parent="."]
position = Vector2( 2, 1139.32 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1983.92, 613.668, 2076.67, 670.75, 2079.05, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="low_stairs" type="Line2D" parent="low_platform"]
position = Vector2( -2, 266 )
points = PoolVector2Array( 1049.73, 346.599, 1051.16, 24.8604, 832.783, 25.3764, 829.419, 346.599, 829.364, 347.648, 828.734, 314.26, 1044.72, 313.433, 1045.16, 292.5, 862.657, 293, 836.294, 309.85, 864.157, 290, 864.657, 264, 1043.66, 263.5, 1043.16, 245.5, 889.657, 244.5, 864.157, 262.5, 890.657, 242, 890.657, 219, 1046.16, 218.36, 1046.16, 196.86, 916.157, 197.36, 889.157, 216.36, 918.657, 193.86, 919.157, 172.36, 1045.66, 171.36, 1048.29, 148.878, 969.081, 147.031, 916.657, 169.36 )
[node name="l_door" type="Line2D" parent="low_platform"]
position = Vector2( -2, 0 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="low_platform"]
position = Vector2( 806.661, -1.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1271.64, 671.735, 1188.64, 624.843 )
[node name="upper_platform" type="Line2D" parent="."]
position = Vector2( 3.56348, 1405.32 )
points = PoolVector2Array( 2079.3, -389.423, 15.1762, -952.628, 13.387, -1281.56, 310.131, -1283.61, 2112.1, -1390.9, 310.131, -1283.61, 311.013, -960.022, 19.414, -956.866, 309.824, -958.833, 2080.98, -643.198, 2082.47, -392.598 )
[node name="upper_stairs" type="Line2D" parent="upper_platform"]
position = Vector2( 401.921, -1166.13 )
points = PoolVector2Array( 1054.04, 411.089, 1051.16, 24.8604, 818.179, 7.1228, 818.571, 365.834, 867.079, 342.133, 1049.09, 372.198 )

View File

@@ -9,10 +9,10 @@ set_state r7_lift lift_floor_2_to_1_no_player true
camera_set_target 0 player camera_set_target 0 player
# camera_set_limits is how you change the active camera limits. # camera_set_limits is how you change the active camera limits.
# If you change the below command to "camera_set_limits 0" you'll notice # If you change the below command to "camera_set_limits 1" you'll notice
# some of the camera commands start having issues as the camera no longer # some of the camera commands start having issues as the camera no longer
# has access to the requested coordinates # has access to the requested coordinates
camera_set_limits 1 camera_set_limits 0
> [eq ESC_LAST_SCENE room6] > [eq ESC_LAST_SCENE room6]
teleport player r7_l_exit teleport player r7_l_exit

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=26 format=2] [gd_scene load_steps=25 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=5] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=5]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6]
@@ -672,7 +671,7 @@ __meta__ = {
global_id = "room7" global_id = "room7"
esc_script = "res://game/rooms/room07/esc/room07.esc" esc_script = "res://game/rooms/room07/esc/room07.esc"
player_scene = ExtResource( 4 ) player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1300, 2000 ), Rect2( 0, 0, 2260, 2000 ) ] camera_limits = [ Rect2( 0, 0, 2260, 2000 ), Rect2( 0, 0, 1300, 2000 ) ]
editor_debug_mode = 1 editor_debug_mode = 1
[node name="lift_shaft" type="Polygon2D" parent="."] [node name="lift_shaft" type="Polygon2D" parent="."]
@@ -739,29 +738,23 @@ position = Vector2( 1430, 960 )
scale = Vector2( -1, 1 ) scale = Vector2( -1, 1 )
texture = ExtResource( 12 ) texture = ExtResource( 12 )
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room7Background" type="Sprite" parent="."]
margin_right = 2260.0
margin_bottom = 1600.0
mouse_filter = 2
texture = ExtResource( 9 ) texture = ExtResource( 9 )
script = ExtResource( 2 ) centered = false
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_lock_": true
} }
[node name="room_label" type="Label" parent="ESCBackground"] [node name="room_label" type="Label" parent="Room7Background"]
margin_left = 7.0 margin_left = 7.0
margin_top = 3.0 margin_top = 3.0
margin_right = 89.0 margin_right = 179.0
margin_bottom = 24.0 margin_bottom = 24.0
custom_colors/font_color = Color( 0, 0, 0, 1 ) custom_colors/font_color = Color( 0, 0, 0, 1 )
custom_fonts/font = ExtResource( 5 ) custom_fonts/font = ExtResource( 5 )
text = "ROOM 7 upper floor" text = "ROOM 7 upper floor"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="room_label2" type="Label" parent="ESCBackground"] [node name="room_label2" type="Label" parent="Room7Background"]
margin_left = 10.0 margin_left = 10.0
margin_top = 628.0 margin_top = 628.0
margin_right = 182.0 margin_right = 182.0
@@ -773,7 +766,7 @@ __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="room_label3" type="Label" parent="ESCBackground"] [node name="room_label3" type="Label" parent="Room7Background"]
margin_left = 275.0 margin_left = 275.0
margin_top = 681.0 margin_top = 681.0
margin_right = 989.0 margin_right = 989.0

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=18 format=2] [gd_scene load_steps=17 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5]
@@ -226,28 +225,21 @@ script = ExtResource( 7 )
global_id = "r8_player_start" global_id = "r8_player_start"
is_start_location = true is_start_location = true
[node name="background" type="TextureRect" parent="."] [node name="Room8Background" type="Sprite" parent="."]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
texture = ExtResource( 8 ) texture = ExtResource( 8 )
script = ExtResource( 2 ) centered = false
__meta__ = {
"_edit_lock_": true,
"_edit_use_anchors_": false
}
[node name="Label" type="Label" parent="background"] [node name="Label" type="Label" parent="Room8Background"]
margin_right = 48.0 margin_right = 62.0
margin_bottom = 16.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "Room 8" text = "Room 8"
[node name="Label2" type="Label" parent="background"] [node name="Label2" type="Label" parent="Room8Background"]
margin_left = 835.0 margin_left = 835.0
margin_top = 12.0 margin_top = 12.0
margin_right = 1133.0 margin_right = 1133.0
margin_bottom = 201.0 margin_bottom = 249.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "This room demonstrates mixing Escoria text = "This room demonstrates mixing Escoria
with an external GDScript puzzle. with an external GDScript puzzle.
@@ -275,6 +267,7 @@ global_id = "r8_l_exit"
esc_script = "res://game/rooms/room08/esc/left_exit.esc" esc_script = "res://game/rooms/room08/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Exit" tooltip_name = "Exit"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -296,6 +289,7 @@ global_id = "r8_m_door"
esc_script = "res://game/rooms/room08/esc/middle_exit.esc" esc_script = "res://game/rooms/room08/esc/middle_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Exit" tooltip_name = "Exit"
combine_when_selected_action_is_in = [ ]
inventory_texture = ExtResource( 10 ) inventory_texture = ExtResource( 10 )
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -344,6 +338,7 @@ polygon = PoolVector2Array( 635, 55, 810, 56, 810, 350, 634, 350 )
pause_mode = 1 pause_mode = 1
script = ExtResource( 5 ) script = ExtResource( 5 )
global_id = "r8_mini_puzzle_unlocked" global_id = "r8_mini_puzzle_unlocked"
combine_when_selected_action_is_in = [ ]
inventory_texture = ExtResource( 11 ) inventory_texture = ExtResource( 11 )
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -359,6 +354,7 @@ global_id = "r8_mini_puzzle_button"
esc_script = "res://game/rooms/room08/esc/button_puzzle.esc" esc_script = "res://game/rooms/room08/esc/button_puzzle.esc"
tooltip_name = "Button" tooltip_name = "Button"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
inventory_texture = ExtResource( 9 ) inventory_texture = ExtResource( 9 )
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -391,6 +387,7 @@ global_id = "r8_button_reset_puzzle"
esc_script = "res://game/rooms/room08/esc/button_reset_puzzle.esc" esc_script = "res://game/rooms/room08/esc/button_reset_puzzle.esc"
tooltip_name = "Button" tooltip_name = "Button"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 146 KiB

View File

@@ -1,23 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=32 format=2] [gd_scene load_steps=31 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://game/rooms/room09/button.png" type="Texture" id=5] [ext_resource path="res://game/rooms/room09/button.png" type="Texture" id=5]
@@ -417,24 +416,21 @@ __meta__ = {
"_editor_description_": "" "_editor_description_": ""
} }
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room9Background" type="Sprite" parent="."]
margin_right = 1280.0
margin_bottom = 550.0
mouse_filter = 2
texture = ExtResource( 9 ) texture = ExtResource( 9 )
script = ExtResource( 2 ) centered = false
[node name="room_label" type="Label" parent="ESCBackground"] [node name="room_label" type="Label" parent="Room9Background"]
margin_right = 82.0 margin_right = 82.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 9" text = "ROOM 9"
[node name="Label" type="Label" parent="ESCBackground"] [node name="Label" type="Label" parent="Room9Background"]
margin_left = 841.0 margin_left = 841.0
margin_top = 7.0 margin_top = 7.0
margin_right = 909.0 margin_right = 1158.0
margin_bottom = 21.0 margin_bottom = 225.0
custom_colors/font_color = Color( 0, 0, 0, 1 ) custom_colors/font_color = Color( 0, 0, 0, 1 )
text = "This room demonstrates a puzzle that changes text = "This room demonstrates a puzzle that changes
depending on what the player does. The bottle depending on what the player does. The bottle
@@ -495,6 +491,7 @@ script = ExtResource( 13 )
global_id = "r9_l_exit" global_id = "r9_l_exit"
esc_script = "res://game/rooms/room09/esc/left_exit.esc" esc_script = "res://game/rooms/room09/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Left exit"
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/door_l"] [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/door_l"]
polygon = PoolVector2Array( 0, 108, 105, 62, 108, 355, 1, 422 ) polygon = PoolVector2Array( 0, 108, 105, 62, 108, 355, 1, 422 )
@@ -508,6 +505,7 @@ script = ExtResource( 13 )
global_id = "r9_r_exit" global_id = "r9_r_exit"
esc_script = "res://game/rooms/room09/esc/right_exit.esc" esc_script = "res://game/rooms/room09/esc/right_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Right exit"
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/door_r"] [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/door_r"]
polygon = PoolVector2Array( 1174, 61, 1280, 107, 1280, 423, 1172, 353 ) polygon = PoolVector2Array( 1174, 61, 1280, 107, 1280, 423, 1172, 353 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=2] [gd_scene load_steps=10 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=2] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=2]
@@ -8,7 +8,6 @@
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7]
[ext_resource path="res://game/rooms/room10/room10background.png" type="Texture" id=10] [ext_resource path="res://game/rooms/room10/room10background.png" type="Texture" id=10]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=11]
[sub_resource type="NavigationPolygon" id=1] [sub_resource type="NavigationPolygon" id=1]
vertices = PoolVector2Array( 1185.27, 712.779, 1187.27, 663.779, 1259.27, 705.779, 1260.27, 800.779, 13.2684, 699.779, 83.2684, 666.779, 85.2684, 704.779, 11.2684, 799.779, 112.268, 685.779, 1153.27, 688.779 ) vertices = PoolVector2Array( 1185.27, 712.779, 1187.27, 663.779, 1259.27, 705.779, 1260.27, 800.779, 13.2684, 699.779, 83.2684, 666.779, 85.2684, 704.779, 11.2684, 799.779, 112.268, 685.779, 1153.27, 688.779 )
@@ -61,6 +60,7 @@ esc_script = "res://game/rooms/room10/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Left exit" tooltip_name = "Left exit"
default_action = "walk" default_action = "walk"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -80,6 +80,7 @@ global_id = "r10_btn_stop_bg_music"
esc_script = "res://game/rooms/room10/esc/button_stop_bg_music.esc" esc_script = "res://game/rooms/room10/esc/button_stop_bg_music.esc"
tooltip_name = "stop music" tooltip_name = "stop music"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -115,6 +116,7 @@ global_id = "r10_btn_play_bg_music"
esc_script = "res://game/rooms/room10/esc/button_play_bg_music.esc" esc_script = "res://game/rooms/room10/esc/button_play_bg_music.esc"
tooltip_name = "play music" tooltip_name = "play music"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -148,6 +150,7 @@ global_id = "test_accept_input"
esc_script = "res://game/rooms/room10/esc/button_accept_input_test.esc" esc_script = "res://game/rooms/room10/esc/button_accept_input_test.esc"
tooltip_name = "accept input" tooltip_name = "accept input"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -180,6 +183,7 @@ global_id = "button_slide"
esc_script = "res://game/rooms/room10/esc/button_slide.esc" esc_script = "res://game/rooms/room10/esc/button_slide.esc"
tooltip_name = "test slide" tooltip_name = "test slide"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -215,6 +219,7 @@ global_id = "button_turn_to"
esc_script = "res://game/rooms/room10/esc/button_turn_to.esc" esc_script = "res://game/rooms/room10/esc/button_turn_to.esc"
tooltip_name = "Test turn_to" tooltip_name = "Test turn_to"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -246,6 +251,7 @@ global_id = "r10_btn_play_snd"
esc_script = "res://game/rooms/room10/esc/button_play_snd.esc" esc_script = "res://game/rooms/room10/esc/button_play_snd.esc"
tooltip_name = "play sound" tooltip_name = "play sound"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -290,24 +296,15 @@ position = Vector2( 938, 509 )
script = ExtResource( 5 ) script = ExtResource( 5 )
global_id = "accept_input_location" global_id = "accept_input_location"
[node name="ESCBackground" type="TextureRect" parent="."] [node name="room_label" type="Label" parent="."]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 2
texture = ExtResource( 10 )
script = ExtResource( 11 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="room_label" type="Label" parent="ESCBackground"]
margin_right = 92.0 margin_right = 92.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 10" text = "ROOM 10"
__meta__ = {
"_edit_use_anchors_": false [node name="Room10Background" type="Sprite" parent="."]
} texture = ExtResource( 10 )
centered = false
[node name="Room_overview" type="Node2D" parent="."] [node name="Room_overview" type="Node2D" parent="."]
@@ -336,6 +333,3 @@ boundaries. Turn_to rotates the player
Accept_input stops the player from Accept_input stops the player from
interracting with the game while an interracting with the game while an
ESCscript is in progress." ESCscript is in progress."
__meta__ = {
"_edit_use_anchors_": false
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 KiB

After

Width:  |  Height:  |  Size: 484 KiB

View File

@@ -1,30 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1278.31, 672.412, 1188.64, 624.843 )
__meta__ = {
"_editor_description_": ""
}

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=11 format=2] [gd_scene load_steps=10 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://game/rooms/room11/background.tscn" type="PackedScene" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5]
@@ -27,16 +26,29 @@ esc_script = "res://game/rooms/room11/esc/room11.esc"
player_scene = ExtResource( 4 ) player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1280, 555 ) ] camera_limits = [ Rect2( 0, 0, 1280, 555 ) ]
[node name="background" parent="." instance=ExtResource( 2 )] [node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="room_label" type="Label" parent="background"] [node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1278.31, 672.412, 1188.64, 624.843 )
__meta__ = {
"_editor_description_": ""
}
[node name="room_label" type="Label" parent="."]
margin_right = 92.0 margin_right = 92.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 11" text = "ROOM 11"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="walkable_area" type="Navigation2D" parent="."] [node name="walkable_area" type="Navigation2D" parent="."]
script = ExtResource( 1 ) script = ExtResource( 1 )
@@ -58,6 +70,7 @@ esc_script = "res://game/rooms/room11/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Left exit" tooltip_name = "Left exit"
default_action = "walk" default_action = "walk"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -71,6 +84,7 @@ script = ExtResource( 5 )
[node name="r_door" parent="Hotspots" instance=ExtResource( 8 )] [node name="r_door" parent="Hotspots" instance=ExtResource( 8 )]
global_id = "r11_r_exit" global_id = "r11_r_exit"
esc_script = "res://game/rooms/room11/esc/right_exit.esc" esc_script = "res://game/rooms/room11/esc/right_exit.esc"
combine_when_selected_action_is_in = [ ]
[node name="ESCLocation" type="Position2D" parent="Hotspots/r_door"] [node name="ESCLocation" type="Position2D" parent="Hotspots/r_door"]
position = Vector2( 1236.02, 366.281 ) position = Vector2( 1236.02, 366.281 )
@@ -84,6 +98,7 @@ global_id = "r11_circle_tk"
esc_script = "res://game/rooms/room11/esc/mysterious_circle_tk.esc" esc_script = "res://game/rooms/room11/esc/mysterious_circle_tk.esc"
tooltip_name = "Mysterious circle" tooltip_name = "Mysterious circle"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -117,6 +132,7 @@ global_id = "r11_circle_nott"
esc_script = "res://game/rooms/room11/esc/mysterious_circle_nott.esc" esc_script = "res://game/rooms/room11/esc/mysterious_circle_nott.esc"
tooltip_name = "Mysterious circle" tooltip_name = "Mysterious circle"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -150,6 +166,7 @@ global_id = "r11_circle_nohud"
esc_script = "res://game/rooms/room11/esc/mysterious_circle_nohud.esc" esc_script = "res://game/rooms/room11/esc/mysterious_circle_nohud.esc"
tooltip_name = "Mysterious circle" tooltip_name = "Mysterious circle"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -183,6 +200,7 @@ global_id = "r11_circle_nosave"
esc_script = "res://game/rooms/room11/esc/mysterious_circle_nosave.esc" esc_script = "res://game/rooms/room11/esc/mysterious_circle_nosave.esc"
tooltip_name = "Mysterious circle" tooltip_name = "Mysterious circle"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -216,6 +234,7 @@ global_id = "r11_circle_fadein"
esc_script = "res://game/rooms/room11/esc/mysterious_circle_fadein.esc" esc_script = "res://game/rooms/room11/esc/mysterious_circle_fadein.esc"
tooltip_name = "Mysterious circle" tooltip_name = "Mysterious circle"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null

View File

@@ -4,4 +4,4 @@ say player "Blackout"
transition fade_black out 0.0 transition fade_black out 0.0
wait 1 wait 1
transition fade_black in 0.0 transition fade_black in 0.0
accept_input ALL accept_input ALL

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=12 format=2] [gd_scene load_steps=11 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5]
@@ -48,6 +47,7 @@ esc_script = "res://game/rooms/room12/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Left exit" tooltip_name = "Left exit"
default_action = "walk" default_action = "walk"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -81,6 +81,7 @@ global_id = "r12_transition_default"
esc_script = "res://game/rooms/room12/esc/transition_default.esc" esc_script = "res://game/rooms/room12/esc/transition_default.esc"
tooltip_name = "transition_default" tooltip_name = "transition_default"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -108,6 +109,7 @@ global_id = "r12_transition_black"
esc_script = "res://game/rooms/room12/esc/transition_black.esc" esc_script = "res://game/rooms/room12/esc/transition_black.esc"
tooltip_name = "transition_black" tooltip_name = "transition_black"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -135,6 +137,7 @@ global_id = "r12_transition_white"
esc_script = "res://game/rooms/room12/esc/transition_white.esc" esc_script = "res://game/rooms/room12/esc/transition_white.esc"
tooltip_name = "transition_white" tooltip_name = "transition_white"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -162,6 +165,7 @@ global_id = "r12_transition_shards"
esc_script = "res://game/rooms/room12/esc/transition_shards.esc" esc_script = "res://game/rooms/room12/esc/transition_shards.esc"
tooltip_name = "transition_shards" tooltip_name = "transition_shards"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -189,6 +193,7 @@ global_id = "r12_transition_centre"
esc_script = "res://game/rooms/room12/esc/transition_centre.esc" esc_script = "res://game/rooms/room12/esc/transition_centre.esc"
tooltip_name = "transition_centre" tooltip_name = "transition_centre"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -216,6 +221,7 @@ global_id = "r12_transition_blackout"
esc_script = "res://game/rooms/room12/esc/transition_blackout.esc" esc_script = "res://game/rooms/room12/esc/transition_blackout.esc"
tooltip_name = "transition_blackout" tooltip_name = "transition_blackout"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -241,26 +247,23 @@ script = ExtResource( 5 )
global_id = "player_start" global_id = "player_start"
is_start_location = true is_start_location = true
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room12Background" type="Sprite" parent="."]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 2
texture = ExtResource( 9 ) texture = ExtResource( 9 )
script = ExtResource( 2 ) centered = false
[node name="room_label" type="Label" parent="ESCBackground"] [node name="room_label" type="Label" parent="Room12Background"]
margin_right = 92.0 margin_right = 92.0
margin_bottom = 45.0 margin_bottom = 45.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 12 text = "ROOM 12
" "
[node name="room_label2" type="Label" parent="ESCBackground"] [node name="room_label2" type="Label" parent="Room12Background"]
modulate = Color( 0.0352941, 0.0705882, 0.239216, 1 ) modulate = Color( 0.0352941, 0.0705882, 0.239216, 1 )
margin_left = 121.0 margin_left = 121.0
margin_top = 62.0 margin_top = 62.0
margin_right = 213.0 margin_right = 361.0
margin_bottom = 107.0 margin_bottom = 299.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "This room demonstrates the text = "This room demonstrates the
transitions you can use for room transitions you can use for room

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 KiB

After

Width:  |  Height:  |  Size: 390 KiB

View File

@@ -1,30 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1278.31, 672.412, 1188.64, 624.843 )
__meta__ = {
"_editor_description_": ""
}

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=11 format=2] [gd_scene load_steps=10 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://game/rooms/room13/background.tscn" type="PackedScene" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=4] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5]
@@ -26,16 +25,29 @@ global_id = "room13"
esc_script = "res://game/rooms/room13/esc/room13.esc" esc_script = "res://game/rooms/room13/esc/room13.esc"
camera_limits = [ Rect2( 0, 0, 1280, 555 ) ] camera_limits = [ Rect2( 0, 0, 1280, 555 ) ]
[node name="background" parent="." instance=ExtResource( 2 )] [node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="room_label" type="Label" parent="background"] [node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1278.31, 672.412, 1188.64, 624.843 )
__meta__ = {
"_editor_description_": ""
}
[node name="room_label" type="Label" parent="."]
margin_right = 92.0 margin_right = 92.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 13" text = "ROOM 13"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="walkable_area" type="Navigation2D" parent="."] [node name="walkable_area" type="Navigation2D" parent="."]
script = ExtResource( 1 ) script = ExtResource( 1 )
@@ -57,6 +69,7 @@ esc_script = "res://game/rooms/room13/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Left exit" tooltip_name = "Left exit"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -75,6 +88,7 @@ global_id = "r13_hint"
esc_script = "res://game/rooms/room13/esc/hint.esc" esc_script = "res://game/rooms/room13/esc/hint.esc"
tooltip_name = "A hint" tooltip_name = "A hint"
default_action = "look" default_action = "look"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -110,15 +124,18 @@ position = Vector2( -172.899, -45.2554 )
global_id = "play_wav" global_id = "play_wav"
esc_script = "res://game/rooms/room13/esc/play_wav.esc" esc_script = "res://game/rooms/room13/esc/play_wav.esc"
tooltip_name = "Play WAV" tooltip_name = "Play WAV"
combine_when_selected_action_is_in = [ ]
[node name="play_wav_loop" parent="Hotspots" instance=ExtResource( 8 )] [node name="play_wav_loop" parent="Hotspots" instance=ExtResource( 8 )]
position = Vector2( -173.479, 43.5148 ) position = Vector2( -173.479, 43.5148 )
global_id = "play_wav_loop" global_id = "play_wav_loop"
esc_script = "res://game/rooms/room13/esc/play_wav_loop.esc" esc_script = "res://game/rooms/room13/esc/play_wav_loop.esc"
tooltip_name = "Play WAV Loop" tooltip_name = "Play WAV Loop"
combine_when_selected_action_is_in = [ ]
[node name="stop_loop" parent="Hotspots" instance=ExtResource( 8 )] [node name="stop_loop" parent="Hotspots" instance=ExtResource( 8 )]
position = Vector2( -173.479, 132.865 ) position = Vector2( -173.479, 132.865 )
global_id = "stop_loop" global_id = "stop_loop"
esc_script = "res://game/rooms/room13/esc/stop_loop.esc" esc_script = "res://game/rooms/room13/esc/stop_loop.esc"
tooltip_name = "Stop Looping" tooltip_name = "Stop Looping"
combine_when_selected_action_is_in = [ ]

View File

@@ -1,30 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1278.31, 672.412, 1188.64, 624.843 )
__meta__ = {
"_editor_description_": ""
}

View File

@@ -1,15 +1,14 @@
:use :use
# Show main menu, automatic transitions ENABLED # Show main menu, automatic transitions ENABLED
show_menu main true show_menu main
# wait 2 seconds # wait 2 seconds
wait 2 wait 2
# Hide main menu, automatic transitions ENABLED # Hide main menu, automatic transitions ENABLED
hide_menu main true hide_menu main
:look :look
say player "button main menu" say player "button main menu"

View File

@@ -1,41 +0,0 @@
:use
# This event demonstrates the following:
#- fade out to black
#- show the pause menu (automatic transition disabled to manage those manually)
#- wait 2 seconds
#- change scene (automatic transition disabled to manage those manually) to reload this same room
set_global transition_manual true
# Fade out to black
transition fade_black out
wait 2
# Show main menu, automatic transition DISABLED
show_menu pause
# Showing menu
transition shards in
# Wait 2 seconds on menu
wait 2
# Transition out before hiding menu
transition fade_black out
# Hide the menu
hide_menu pause
wait 1
# Do NOT transition IN as this transition will be managed by the room's :setup event!
# If you transition IN here instead of room's :setup event, you will show the previous room
# Change scene to same scene, disabled automatic transition
change_scene res://game/rooms/room14/room14.tscn false
# Do not transition here either, as change_scene ends the execution of this script
:look
say player "Button change scene"

View File

@@ -1,30 +0,0 @@
:use
# This event demonstrates the following:
#- fade out to black
#- show the pause menu (automatic transition disabled to manage those manually)
#- wait 2 seconds
#- change scene (automatic transition enabled) to reload this same room
set_global transition_manual false
# Fade out to black
transition fade_black out
wait 2
# Show main menu, automatic transition DISABLED
show_menu pause
# Showing menu
transition shards in
# Wait 2 seconds on menu
wait 2
# Change scene to same scene, enabled automatic transition
change_scene res://game/rooms/room14/room14.tscn
:look
say player "Button change scene auto"

View File

@@ -1,16 +1,12 @@
:use :use
# Show pause menu, automatic transition are disabled by default # Show pause menu
# So we can manage them manually using `transition` ESC command
show_menu pause show_menu pause
# wait 2 seconds # Wait 2 seconds (this will run AFTER the pause menu is closed since the pause
# menu also pauses the game)
wait 2 wait 2
# Hide pause menu, automatic transition are disabled by default
# So we can manage them manually using `transition` ESC command
hide_menu pause
:look :look
say player "Button pause menu" say player "Button pause menu"

View File

@@ -44,4 +44,4 @@
queue_event worker moveworker _queuedemo true queue_event worker moveworker _queuedemo true
queue_event worker2 moveworker2 _queuedemo queue_event worker2 moveworker2 _queuedemo

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=12 format=2] [gd_scene load_steps=11 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://game/rooms/room14/background.tscn" type="PackedScene" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5]
@@ -26,9 +25,25 @@ esc_script = "res://game/rooms/room14/esc/room14.esc"
player_scene = ExtResource( 4 ) player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1280, 555 ) ] camera_limits = [ Rect2( 0, 0, 1280, 555 ) ]
[node name="background" parent="." instance=ExtResource( 2 )] [node name="l_platform" type="Line2D" parent="."]
position = Vector2( 2, -266 )
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
[node name="room_label" type="Label" parent="background"] [node name="l_door" type="Line2D" parent="."]
position = Vector2( 0, -266 )
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
__meta__ = {
"_editor_description_": ""
}
[node name="r_door" type="Line2D" parent="."]
position = Vector2( 0, -267.828 )
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1278.31, 672.412, 1188.64, 624.843 )
__meta__ = {
"_editor_description_": ""
}
[node name="room_label" type="Label" parent="."]
margin_right = 92.0 margin_right = 92.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
@@ -100,13 +115,8 @@ margin_top = 194.216
margin_right = 408.569 margin_right = 408.569
margin_bottom = 259.216 margin_bottom = 259.216
text = "Show main menu text = "Show main menu
with automatic
transitions enabled
" "
align = 1 align = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="show_pause_menu" parent="." instance=ExtResource( 9 )] [node name="show_pause_menu" parent="." instance=ExtResource( 9 )]
position = Vector2( 233.415, 0 ) position = Vector2( 233.415, 0 )
@@ -123,59 +133,9 @@ margin_left = 273.915
margin_top = 194.216 margin_top = 194.216
margin_right = 413.915 margin_right = 413.915
margin_bottom = 242.216 margin_bottom = 242.216
text = "Show pause menu text = "Show pause menu"
with NO transition
(manual or automatic)"
align = 1 align = 1
[node name="show_pause_change_scene_manual" parent="." instance=ExtResource( 9 )]
position = Vector2( 463.318, 0 )
global_id = "button_main_change_scene"
esc_script = "res://game/rooms/room14/esc/button_main_menu_change_scene.esc"
combine_when_selected_action_is_in = [ ]
[node name="ESCLocation" type="Position2D" parent="show_pause_change_scene_manual"]
position = Vector2( 343.887, 381.305 )
script = ExtResource( 5 )
[node name="Label" type="Label" parent="show_pause_change_scene_manual"]
margin_left = 277.027
margin_top = 194.0
margin_right = 428.027
margin_bottom = 259.0
text = "Show pause menu with
manual transition
and change_scene with
manual transition"
align = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="show_pause_change_scene_auto" parent="." instance=ExtResource( 9 )]
position = Vector2( 676.318, 0 )
global_id = "button_pause_change_scene_auto"
esc_script = "res://game/rooms/room14/esc/button_main_menu_change_scene_auto.esc"
combine_when_selected_action_is_in = [ ]
[node name="ESCLocation" type="Position2D" parent="show_pause_change_scene_auto"]
position = Vector2( 343.887, 381.305 )
script = ExtResource( 5 )
[node name="Label" type="Label" parent="show_pause_change_scene_auto"]
margin_left = 277.027
margin_top = 194.0
margin_right = 428.027
margin_bottom = 259.0
text = "Show pause menu with
manual transition
and change_scene with
automatic transition"
align = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="worker" parent="." instance=ExtResource( 10 )] [node name="worker" parent="." instance=ExtResource( 10 )]
position = Vector2( 204.268, 376.233 ) position = Vector2( 204.268, 376.233 )
esc_script = "res://game/rooms/room14/esc/worker.esc" esc_script = "res://game/rooms/room14/esc/worker.esc"

View File

@@ -1,9 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
[node name="background" type="TextureRect"]
margin_right = 1289.0
margin_bottom = 555.0
mouse_filter = 2
script = ExtResource( 1 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 206 KiB

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=11 format=2] [gd_scene load_steps=10 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2]
[ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3]
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5]
@@ -25,19 +24,16 @@ esc_script = "res://game/rooms/room15/esc/room15.esc"
player_scene = ExtResource( 4 ) player_scene = ExtResource( 4 )
camera_limits = [ Rect2( 0, 0, 1280, 555 ) ] camera_limits = [ Rect2( 0, 0, 1280, 555 ) ]
[node name="ESCBackground" type="TextureRect" parent="."] [node name="Room15" type="Sprite" parent="."]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 2
texture = ExtResource( 8 ) texture = ExtResource( 8 )
script = ExtResource( 2 ) centered = false
[node name="ColorRect" type="ColorRect" parent="ESCBackground"] [node name="ColorRect" type="ColorRect" parent="Room15"]
margin_right = 387.0 margin_right = 387.0
margin_bottom = 207.0 margin_bottom = 207.0
color = Color( 0, 0, 0, 0.501961 ) color = Color( 0, 0, 0, 0.501961 )
[node name="description" type="Label" parent="ESCBackground/ColorRect"] [node name="description" type="Label" parent="Room15/ColorRect"]
margin_left = 9.0 margin_left = 9.0
margin_top = 32.0 margin_top = 32.0
margin_right = 615.0 margin_right = 615.0
@@ -49,20 +45,20 @@ player will spawn at starting location if there is one.
If there is none, the player will spawn at origin If there is none, the player will spawn at origin
(0,0), top-left corner of the screen. " (0,0), top-left corner of the screen. "
[node name="room_label" type="Label" parent="ESCBackground/ColorRect"] [node name="room_label" type="Label" parent="Room15/ColorRect"]
margin_right = 92.0 margin_right = 92.0
margin_bottom = 21.0 margin_bottom = 21.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "ROOM 15" text = "ROOM 15"
[node name="ColorRect2" type="ColorRect" parent="ESCBackground"] [node name="ColorRect2" type="ColorRect" parent="Room15"]
margin_left = 461.0 margin_left = 461.0
margin_top = 393.0 margin_top = 393.0
margin_right = 847.0 margin_right = 847.0
margin_bottom = 433.0 margin_bottom = 433.0
color = Color( 0, 0, 0, 0.501961 ) color = Color( 0, 0, 0, 0.501961 )
[node name="description" type="Label" parent="ESCBackground/ColorRect2"] [node name="description" type="Label" parent="Room15/ColorRect2"]
margin_left = 9.0 margin_left = 9.0
margin_top = 9.0 margin_top = 9.0
margin_right = 615.0 margin_right = 615.0
@@ -70,14 +66,14 @@ margin_bottom = 195.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "Use the second door to change between costumes" text = "Use the second door to change between costumes"
[node name="ColorRect3" type="ColorRect" parent="ESCBackground"] [node name="ColorRect3" type="ColorRect" parent="Room15"]
margin_left = 22.0 margin_left = 22.0
margin_top = 505.0 margin_top = 505.0
margin_right = 322.0 margin_right = 322.0
margin_bottom = 545.0 margin_bottom = 545.0
color = Color( 0, 0, 0, 0.501961 ) color = Color( 0, 0, 0, 0.501961 )
[node name="description" type="Label" parent="ESCBackground/ColorRect3"] [node name="description" type="Label" parent="Room15/ColorRect3"]
margin_left = 9.0 margin_left = 9.0
margin_top = 9.0 margin_top = 9.0
margin_right = 615.0 margin_right = 615.0
@@ -85,14 +81,14 @@ margin_bottom = 195.0
custom_fonts/font = ExtResource( 3 ) custom_fonts/font = ExtResource( 3 )
text = "Use the left column for say long left" text = "Use the left column for say long left"
[node name="ColorRect4" type="ColorRect" parent="ESCBackground"] [node name="ColorRect4" type="ColorRect" parent="Room15"]
margin_left = 952.0 margin_left = 952.0
margin_top = 502.0 margin_top = 502.0
margin_right = 1262.0 margin_right = 1262.0
margin_bottom = 542.0 margin_bottom = 542.0
color = Color( 0, 0, 0, 0.501961 ) color = Color( 0, 0, 0, 0.501961 )
[node name="description" type="Label" parent="ESCBackground/ColorRect4"] [node name="description" type="Label" parent="Room15/ColorRect4"]
margin_left = 9.0 margin_left = 9.0
margin_top = 9.0 margin_top = 9.0
margin_right = 615.0 margin_right = 615.0
@@ -123,6 +119,7 @@ esc_script = "res://game/rooms/room15/esc/left_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Left exit" tooltip_name = "Left exit"
default_action = "walk" default_action = "walk"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -143,6 +140,7 @@ esc_script = "res://game/rooms/room15/esc/right_exit.esc"
is_exit = true is_exit = true
tooltip_name = "Right exit" tooltip_name = "Right exit"
default_action = "walk" default_action = "walk"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -171,6 +169,7 @@ global_id = "say_long_left"
esc_script = "res://game/rooms/room15/esc/say_long.esc" esc_script = "res://game/rooms/room15/esc/say_long.esc"
tooltip_name = "Say long test left" tooltip_name = "Say long test left"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -188,6 +187,7 @@ global_id = "say_long_right"
esc_script = "res://game/rooms/room15/esc/say_long.esc" esc_script = "res://game/rooms/room15/esc/say_long.esc"
tooltip_name = "Say long test right" tooltip_name = "Say long test right"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null
@@ -205,6 +205,7 @@ global_id = "switch_animation"
esc_script = "res://game/rooms/room15/esc/switch_animation.esc" esc_script = "res://game/rooms/room15/esc/switch_animation.esc"
tooltip_name = "Switch animation" tooltip_name = "Switch animation"
default_action = "use" default_action = "use"
combine_when_selected_action_is_in = [ ]
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = null animations = null

Some files were not shown because too many files have changed in this diff Show More