Initial commit
This commit is contained in:
commit
7becdd23b6
989 changed files with 28526 additions and 0 deletions
47
scenes/logic/fishing_target.gd
Normal file
47
scenes/logic/fishing_target.gd
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
extends RigidBody2D
|
||||
|
||||
var index = -1
|
||||
var difficulty = 0.0
|
||||
var catched_by = null
|
||||
var current_direction = Vector2.ZERO
|
||||
var minimum_speed = 0.0
|
||||
|
||||
func init_target(target_index, target_sprite, fishing_difficulty):
|
||||
index = target_index
|
||||
difficulty = fishing_difficulty
|
||||
global_position = Vector2(randf_range(100, 700), randf_range(100, 340))
|
||||
$Sprite2D.texture = target_sprite
|
||||
minimum_speed = lerp(5.0, 150.0, difficulty)
|
||||
linear_velocity = Vector2(0.5 - randf(), 0.5 - randf()).normalized() * 2 * minimum_speed
|
||||
change_direction(true)
|
||||
|
||||
func _process(delta):
|
||||
if catched_by:
|
||||
global_position = catched_by.global_position
|
||||
else:
|
||||
if linear_velocity.length() < minimum_speed:
|
||||
linear_velocity *= 1.25
|
||||
if constant_force.length() > 5 * minimum_speed:
|
||||
constant_force *= 0.5
|
||||
else:
|
||||
add_constant_central_force(current_direction * delta)
|
||||
|
||||
func change_direction(init: bool = false):
|
||||
current_direction = (Vector2(400, 220) - global_position) \
|
||||
.rotated(deg_to_rad(randf_range(-30, 30))) \
|
||||
.normalized() * lerp(0.0, 40.0, difficulty)
|
||||
apply_torque_impulse(randf_range(-1.0, 1.0) * difficulty)
|
||||
# This conditional only exists because Godot is weird with Timers
|
||||
if init:
|
||||
$MovementTimer.wait_time = randf_range(2.0, 4.0)
|
||||
$MovementTimer.autostart = true
|
||||
else:
|
||||
$MovementTimer.start(randf_range(2.0, 4.0))
|
||||
|
||||
func _on_movement_timer_timeout():
|
||||
change_direction()
|
||||
|
||||
func grab_with(net_sprite_2d: AnimatedSprite2D):
|
||||
catched_by = net_sprite_2d
|
||||
$MovementTimer.paused = true
|
||||
global_position = catched_by.global_position
|
||||
31
scenes/logic/fishing_target.tscn
Normal file
31
scenes/logic/fishing_target.tscn
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://d4nyfv6r6d1an"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://d27pxmt2fxvy5" path="res://images/sprites/fishing_targets/default.png" id="1_0nylm"]
|
||||
[ext_resource type="Script" path="res://scenes/logic/fishing_target.gd" id="1_1eq3o"]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_0eaqh"]
|
||||
friction = 0.0
|
||||
bounce = 1.5
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_weeyi"]
|
||||
size = Vector2(44, 30)
|
||||
|
||||
[node name="FishingTarget" type="RigidBody2D"]
|
||||
position = Vector2(588, 142)
|
||||
collision_layer = 3
|
||||
collision_mask = 3
|
||||
physics_material_override = SubResource("PhysicsMaterial_0eaqh")
|
||||
inertia = 50.0
|
||||
script = ExtResource("1_1eq3o")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(-6, 2)
|
||||
shape = SubResource("RectangleShape2D_weeyi")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("1_0nylm")
|
||||
|
||||
[node name="MovementTimer" type="Timer" parent="."]
|
||||
one_shot = true
|
||||
|
||||
[connection signal="timeout" from="MovementTimer" to="." method="_on_movement_timer_timeout"]
|
||||
64
scenes/logic/net.gd
Normal file
64
scenes/logic/net.gd
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
extends Sprite2D
|
||||
|
||||
signal net_dropped(dropped_position: Vector2)
|
||||
|
||||
var sprite_rest = preload("res://images/sprites/fishing_net/ground.png")
|
||||
var sprite_grabbed = preload("res://images/sprites/fishing_net/grabbed.png")
|
||||
|
||||
var can_move = false
|
||||
var dragging = false
|
||||
var using_mouse = false
|
||||
var offs = Vector2.ZERO
|
||||
var starting_position = Vector2.ZERO
|
||||
|
||||
func _ready():
|
||||
starting_position = position
|
||||
|
||||
func _process(delta):
|
||||
if not visible:
|
||||
return
|
||||
if can_move and Input.is_action_just_pressed("ui_accept"):
|
||||
dragging = true
|
||||
using_mouse = false
|
||||
begin_dragging()
|
||||
elif dragging and not using_mouse and Input.is_action_just_released("ui_accept"):
|
||||
stop_dragging()
|
||||
if dragging:
|
||||
if using_mouse:
|
||||
position = get_global_mouse_position() - offs
|
||||
else:
|
||||
position += Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") * delta * 400
|
||||
|
||||
func begin_dragging():
|
||||
texture = sprite_grabbed
|
||||
$Shadow.visible = true
|
||||
$"..".play_sfx("net_picked_up")
|
||||
if using_mouse:
|
||||
offs = get_global_mouse_position() - global_position
|
||||
else:
|
||||
offs = Vector2.ZERO
|
||||
|
||||
func stop_dragging():
|
||||
dragging = false
|
||||
visible = false
|
||||
$Shadow.visible = false
|
||||
texture = sprite_rest
|
||||
$Button.disabled = true
|
||||
$ResetTimer.start()
|
||||
net_dropped.emit(position)
|
||||
position = starting_position
|
||||
|
||||
func _on_button_down():
|
||||
dragging = true
|
||||
using_mouse = true
|
||||
begin_dragging()
|
||||
|
||||
func _on_button_up():
|
||||
stop_dragging()
|
||||
|
||||
func _on_reset_timer_timeout():
|
||||
texture = sprite_rest
|
||||
$Button.disabled = false
|
||||
visible = true
|
||||
if can_move:
|
||||
$"..".play_sfx("net_returns")
|
||||
7
scenes/logic/save_text.gd
Normal file
7
scenes/logic/save_text.gd
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
extends CanvasLayer
|
||||
|
||||
func _on_autosave():
|
||||
$AnimationPlayer.queue("autosave_successful")
|
||||
|
||||
func _on_quick_save():
|
||||
$AnimationPlayer.queue("quick_save_successful")
|
||||
55
scenes/logic/tes1499.tmp
Normal file
55
scenes/logic/tes1499.tmp
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
$start_music loose_thoughts
|
||||
$prompt
|
||||
$option start Do the whole test
|
||||
$option take_me_here Jump to prompt
|
||||
$option opt2 Jump to [color=#b2b7d2]very end[/color]
|
||||
$label start
|
||||
$clear_sprites
|
||||
$stop
|
||||
$show_textbox
|
||||
$expand_textbox
|
||||
$set_sprite layer1 res://images/sprites/test2.png
|
||||
Bard: What the [color=#0f0]fuck?![/color]
|
||||
$set_sprite layer1 res://images/sprites/test2.png bounce
|
||||
: I don't know, I am just writing a lot of text to make sure that it will take a long time to write all of this out.
|
||||
$collapse_textbox
|
||||
$stop
|
||||
$expand_textbox
|
||||
$stop
|
||||
$set_sprite two res://images/sprites/test3.png bounce
|
||||
Marco: l
|
||||
m
|
||||
f
|
||||
a
|
||||
o
|
||||
$clear_sprites
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$show_textbox
|
||||
$hide_textbox
|
||||
$stop
|
||||
# Some comment about the dialogue, maybe??
|
||||
$label take_me_here
|
||||
$set_sprite two res://images/sprites/test3.png
|
||||
Marco: What if I just print stuff without the usual animations?
|
||||
$set some_variable 9
|
||||
$label redo_prompt
|
||||
: Will you wait?
|
||||
$prompt
|
||||
$option opt1 Yes?
|
||||
$option opt2 No, I think I can skip...
|
||||
$label opt1
|
||||
$increment some_variable
|
||||
$remove_sprite layer1
|
||||
:...
|
||||
$wait 2000
|
||||
$set_sprite layer1 res://images/sprites/test2.png bounce true
|
||||
Bard: I say this as long as you pick yes! But only a few times.
|
||||
$if some_variable <= 10 redo_prompt
|
||||
Bard: [color=#b2b7d2](Okay, that's enough...)[/color]
|
||||
$label opt2
|
||||
$clear_sprites
|
||||
Hehe... I'm actually a different textbox
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$goto start
|
||||
564
scenes/logic/vn_interpreter.gd
Normal file
564
scenes/logic/vn_interpreter.gd
Normal file
|
|
@ -0,0 +1,564 @@
|
|||
extends Node2D
|
||||
|
||||
# Instructions data
|
||||
var vn_labels = {}
|
||||
var vn_lines = []
|
||||
|
||||
# Runtime
|
||||
var vn_can_save = false
|
||||
var vn_play_advance_noise = false
|
||||
var vn_hash = ""
|
||||
var vn_title = ""
|
||||
var vn_music = ""
|
||||
var vn_pos: int = 0
|
||||
var vn_pos_savestate: int = 0
|
||||
var vn_pos_offset: int = 0
|
||||
var vn_sprite_map = {}
|
||||
var vn_bg_animation = "RESET"
|
||||
var vn_overlay_color = "00000000"
|
||||
var vn_vars = {}
|
||||
var vn_initial_state = {}
|
||||
|
||||
# Instantiable scenes
|
||||
@onready var vn_sprite: PackedScene = preload("res://scenes/ui_elements/vn_sprite.tscn")
|
||||
|
||||
enum VNInstruction {
|
||||
VN_NOOP = 100,
|
||||
VN_QUIT = 101,
|
||||
VN_ESCAPE = 102,
|
||||
VN_LOAD = 103,
|
||||
VN_COMMENT = 104,
|
||||
VN_SHOW_TEXTBOX = 105,
|
||||
VN_HIDE_TEXTBOX = 106,
|
||||
VN_EXPAND_TEXTBOX = 107,
|
||||
VN_COLLAPSE_TEXTBOX = 108,
|
||||
VN_TEXT = 109,
|
||||
VN_CONTINUE_AFTER_TEXT = 110,
|
||||
VN_STOP = 111,
|
||||
VN_GOTO = 112,
|
||||
VN_LABEL = 113,
|
||||
VN_SET = 114,
|
||||
VN_INCREMENT = 115,
|
||||
VN_DECREMENT = 116,
|
||||
VN_IF = 117,
|
||||
VN_PROMPT = 118,
|
||||
VN_WAIT = 119,
|
||||
VN_CLEAR_SPRITES = 120,
|
||||
VN_SET_SPRITE = 121,
|
||||
VN_REMOVE_SPRITE = 122,
|
||||
VN_START_MUSIC = 123,
|
||||
VN_STOP_MUSIC = 124,
|
||||
VN_TITLE = 125,
|
||||
VN_SET_BACKGROUND = 126,
|
||||
VN_OVERLAY_COLOR = 127,
|
||||
VN_PLAY_VIDEO = 128,
|
||||
VN_SOUND_EFFECT = 129,
|
||||
}
|
||||
|
||||
func parse_vn_file(input_file: String):
|
||||
var file = FileAccess.open(input_file, FileAccess.READ)
|
||||
var parsed_labels = {}
|
||||
var parsed_lines = []
|
||||
var parsed_vars = []
|
||||
var is_multiline_text: bool = false
|
||||
var line_count = 0
|
||||
while file.get_position() < file.get_length():
|
||||
var line = file.get_line().lstrip(" ").rstrip(" ")
|
||||
line_count += 1
|
||||
if not line:
|
||||
is_multiline_text = false
|
||||
elif line[0] == "#":
|
||||
is_multiline_text = false
|
||||
parsed_lines.append([VNInstruction.VN_COMMENT, line.right(-1).lstrip(" ")])
|
||||
elif line[0] == "$":
|
||||
var data = line.split(" ", false)
|
||||
match data[0]:
|
||||
# No parameters
|
||||
"$quit":
|
||||
parsed_lines.append([VNInstruction.VN_QUIT])
|
||||
"$end": # Alias of $quit
|
||||
parsed_lines.append([VNInstruction.VN_QUIT])
|
||||
"$show_textbox":
|
||||
parsed_lines.append([VNInstruction.VN_SHOW_TEXTBOX])
|
||||
"$hide_textbox":
|
||||
parsed_lines.append([VNInstruction.VN_HIDE_TEXTBOX])
|
||||
"$expand_textbox":
|
||||
parsed_lines.append([VNInstruction.VN_EXPAND_TEXTBOX])
|
||||
"$collapse_textbox":
|
||||
parsed_lines.append([VNInstruction.VN_COLLAPSE_TEXTBOX])
|
||||
"$continue_after_text":
|
||||
parsed_lines.append([VNInstruction.VN_CONTINUE_AFTER_TEXT])
|
||||
"$stop":
|
||||
parsed_lines.append([VNInstruction.VN_STOP])
|
||||
"$prompt":
|
||||
parsed_lines.append([VNInstruction.VN_PROMPT])
|
||||
"$clear_sprites":
|
||||
parsed_lines.append([VNInstruction.VN_CLEAR_SPRITES])
|
||||
"$reset_background": # Alias of $set_background RESET
|
||||
parsed_lines.append([VNInstruction.VN_SET_BACKGROUND, "RESET", false])
|
||||
# One parameter
|
||||
"$text_new_line": # remainder_of_the_text
|
||||
if is_multiline_text:
|
||||
parsed_lines[-1][2] += "\n%s" % line.split(" ", false, 1)[1].lstrip(" ").rstrip(" ")
|
||||
else:
|
||||
assert(false, "Cannot add new line to text without a preceding text!")
|
||||
continue
|
||||
"$title": # some text
|
||||
parsed_lines.append([VNInstruction.VN_TITLE, line.split(" ", false, 1)[1]])
|
||||
"$load": # next_vn
|
||||
parsed_lines.append([VNInstruction.VN_LOAD, data[1]])
|
||||
"$goto": # label_name
|
||||
parsed_lines.append([VNInstruction.VN_GOTO, data[1]])
|
||||
"$label": # label_name
|
||||
parsed_labels[data[1]] = parsed_lines.size()
|
||||
parsed_lines.append([VNInstruction.VN_LABEL, data[1]])
|
||||
"$increment": # var_name
|
||||
# Initialize var
|
||||
if not parsed_vars.has(data[1]):
|
||||
parsed_vars.append(data[1])
|
||||
parsed_lines.append([VNInstruction.VN_INCREMENT, data[1]])
|
||||
"$decrement": # var_name
|
||||
# Initialize var
|
||||
if not parsed_vars.has(data[1]):
|
||||
parsed_vars.append(data[1])
|
||||
parsed_lines.append([VNInstruction.VN_DECREMENT, data[1]])
|
||||
"$wait": # [time_secs]
|
||||
parsed_lines.append([VNInstruction.VN_WAIT, float(data[1])])
|
||||
"$remove_sprite": # layer_name
|
||||
parsed_lines.append([VNInstruction.VN_REMOVE_SPRITE, data[1]])
|
||||
"$stop_music": # [crossfade_secs]
|
||||
parsed_lines.append([VNInstruction.VN_STOP_MUSIC, 5.0])
|
||||
if data.size() >= 2:
|
||||
parsed_lines[-1].insert(1, float(data[1]))
|
||||
"$play_video": # video_name
|
||||
parsed_lines.append([VNInstruction.VN_PLAY_VIDEO, data[1]])
|
||||
"$sound_effect": # sfx_name
|
||||
parsed_lines.append([VNInstruction.VN_SOUND_EFFECT, data[1]])
|
||||
# Two parameters
|
||||
"$set_background": # bg_animation_name [await_bg_animation]
|
||||
if $"../Background/AnimationPlayer".has_animation(data[1]):
|
||||
parsed_lines.append([VNInstruction.VN_SET_BACKGROUND, data[1], false])
|
||||
if data.size() >= 3:
|
||||
if data[2] == "true":
|
||||
parsed_lines[-1][2] = true
|
||||
elif data[2] == "false":
|
||||
parsed_lines[-1][2] = false
|
||||
else:
|
||||
assert(false, "Invalid set_background boolean option '%s'" % data[2])
|
||||
else:
|
||||
assert(false, "Unknown background animation '%s'" % data[1])
|
||||
"$set": # var_name var_value
|
||||
# Initialize var
|
||||
if not parsed_vars.has(data[1]):
|
||||
parsed_vars.append(data[1])
|
||||
parsed_lines.append([VNInstruction.VN_SET, data[1], int(data[2])])
|
||||
"$option": # branch_label_name text
|
||||
var last_line = parsed_lines[-1]
|
||||
if last_line[0] == VNInstruction.VN_PROMPT:
|
||||
last_line.append([data[1], line.split(" ", false, 2)[2]])
|
||||
else:
|
||||
assert(false, "Error on file '%s', line %d: $option command must only come after a $prompt command" % [input_file, line_count])
|
||||
"$start_music": # track_name [crossfade_secs]
|
||||
parsed_lines.append([VNInstruction.VN_START_MUSIC, data[1], 0.0])
|
||||
if data.size() >= 3:
|
||||
parsed_lines[-1].insert(2, float(data[2]))
|
||||
"$overlay_color": # color [fade_secs]
|
||||
parsed_lines.append([VNInstruction.VN_OVERLAY_COLOR, Color(data[1]).to_html(), 1.0])
|
||||
if data.size() >= 3:
|
||||
parsed_lines[-1].insert(2, float(data[2]))
|
||||
# Four parameters
|
||||
"$if": # var_name comparison_operator var_value branch_label_name
|
||||
# Initialize var
|
||||
if not parsed_vars.has(data[1]):
|
||||
parsed_vars.append(data[1])
|
||||
if data[2] not in [">", "<", ">=", "<=", "==", "!="]:
|
||||
assert(false, "Error on file '%s', line %d: Invalid operator for $if statement: '%s'" % [input_file, line_count, data[2]])
|
||||
parsed_lines.append([VNInstruction.VN_IF, data[1], data[2], int(data[3]), data[4]])
|
||||
"$set_sprite": # layer_name sprite_path [animation_name [{"flip_h":true,...}]]
|
||||
parsed_lines.append([VNInstruction.VN_SET_SPRITE, data[1], data[2], "RESET", {}])
|
||||
if data.size() >= 4:
|
||||
parsed_lines[-1][3] = data[3]
|
||||
if data.size() >= 5:
|
||||
parsed_lines[-1][4] = JSON.parse_string(line.split(" ", false, 4)[4])
|
||||
# Variable parameters
|
||||
"$escape": # [arg [...]]
|
||||
parsed_lines.append([VNInstruction.VN_ESCAPE])
|
||||
parsed_lines[-1].append_array(data.slice(1))
|
||||
_:
|
||||
assert(false, "Error on file '%s', line %d: Unknown command '%s'" % [input_file, line_count, data])
|
||||
is_multiline_text = false
|
||||
else:
|
||||
var data = line.split(":", true, 1)
|
||||
if data.size() < 1:
|
||||
# Empty dialogue (i.e. line with only ":" and spaces) is ignored
|
||||
continue
|
||||
elif data.size() == 1:
|
||||
if is_multiline_text:
|
||||
parsed_lines[-1][2] += "\n%s" % data[0].lstrip(" ").rstrip(" ")
|
||||
else:
|
||||
parsed_lines.append([VNInstruction.VN_TEXT, "", data[0].lstrip(" ").rstrip(" ")])
|
||||
is_multiline_text = true
|
||||
else:
|
||||
parsed_lines.append([VNInstruction.VN_TEXT, data[0].rstrip(" "), data[1].lstrip(" ")])
|
||||
is_multiline_text = true
|
||||
file.close()
|
||||
var vn_data = {
|
||||
"labels": parsed_labels,
|
||||
"vars": parsed_vars,
|
||||
"lines": parsed_lines,
|
||||
}
|
||||
# Hash data to snapshot for save states
|
||||
var hash_ctx = HashingContext.new()
|
||||
hash_ctx.start(HashingContext.HASH_SHA256)
|
||||
# hash_ctx.update(var_to_bytes_with_objects(vn_data))
|
||||
hash_ctx.update(var_to_bytes(vn_data))
|
||||
vn_data["hash"] = hash_ctx.finish().hex_encode()
|
||||
return vn_data
|
||||
|
||||
func sprite_map_to_array():
|
||||
var sprite_values = vn_sprite_map.values()
|
||||
sprite_values.sort_custom(func (a, b): return a["idx"] < b["idx"])
|
||||
return sprite_values.map(func (sprite): return {
|
||||
"layer": vn_sprite_map.find_key(sprite),
|
||||
"texture": sprite["texture"],
|
||||
"properties": sprite["properties"],
|
||||
})
|
||||
|
||||
func save_vn():
|
||||
return {
|
||||
"hash": vn_hash,
|
||||
"title": vn_title,
|
||||
"pos": vn_pos_savestate - vn_pos_offset,
|
||||
"sprite_list": sprite_map_to_array(),
|
||||
"bg_animation": vn_bg_animation,
|
||||
"overlay_color": vn_overlay_color,
|
||||
"music": vn_music,
|
||||
"vars": vn_vars,
|
||||
"initial_state": vn_initial_state,
|
||||
}
|
||||
|
||||
func load_vn_data(vn_data, save_state = {}):
|
||||
# Next line might not be necessary...?
|
||||
vn_initial_state = save_state.get("initial_state", vn_initial_state)
|
||||
vn_hash = vn_data["hash"]
|
||||
# Restore original VN state if hash changed (i.e. VN was modified)
|
||||
if save_state.get("hash", vn_hash) != vn_hash:
|
||||
save_state = save_state.get("initial_state", {})
|
||||
vn_pos = save_state.get("pos", 0)
|
||||
vn_vars.merge(save_state.get("vars", {}), true)
|
||||
vn_title = save_state.get("title", vn_title)
|
||||
vn_music = save_state.get("music", vn_music)
|
||||
var sprite_list = save_state.get("sprite_list", [])
|
||||
vn_bg_animation = save_state.get("bg_animation", vn_bg_animation)
|
||||
vn_overlay_color = save_state.get("overlay_color", vn_overlay_color)
|
||||
vn_pos_savestate = vn_pos
|
||||
# Grab VN data
|
||||
vn_labels = vn_data.labels
|
||||
for preloaded_var in vn_data.vars:
|
||||
if preloaded_var not in vn_vars:
|
||||
vn_vars[preloaded_var] = 0
|
||||
# vn_initial_state["vars"].merge(vn_vars, false)
|
||||
vn_lines = vn_data.lines
|
||||
if vn_lines.size() > 0 and vn_lines[0][0] == VNInstruction.VN_TITLE:
|
||||
vn_title = vn_lines[0][1]
|
||||
$"../OverlayColor/ColorRect".color = vn_overlay_color
|
||||
if sprite_list:
|
||||
vn_sprite_map = {}
|
||||
for i in sprite_list.size():
|
||||
var sprite_data = sprite_list[i]
|
||||
var curr_sprite = vn_sprite.instantiate()
|
||||
curr_sprite.name = sprite_data["layer"]
|
||||
$"../Sprites".add_child(curr_sprite)
|
||||
populate_sprite_data(curr_sprite.get_node("Sprite"), sprite_data["texture"], sprite_data["properties"])
|
||||
curr_sprite.get_node("AnimationPlayer").play("RESET")
|
||||
vn_sprite_map[sprite_data["layer"]] = {
|
||||
"idx": i,
|
||||
"texture": sprite_data["texture"],
|
||||
"properties": sprite_data["properties"],
|
||||
}
|
||||
$"../Background/AnimationPlayer".play(vn_bg_animation)
|
||||
update_window_title()
|
||||
if vn_music:
|
||||
if not MusicManager.is_playing("vn_music", vn_music):
|
||||
MusicManager.play("vn_music", vn_music, 0.0)
|
||||
# Special case: Continue main menu music only with new game
|
||||
elif vn_vars.get("autostop_music", 1) == 1 and MusicManager.is_playing():
|
||||
MusicManager.stop(0.0)
|
||||
# Save initial state of VN (this state is restored when VN hash changes)
|
||||
if save_state.is_empty() and vn_pos == 0:
|
||||
vn_initial_state = {
|
||||
"title": vn_title,
|
||||
"pos": 0,
|
||||
"sprite_list": sprite_map_to_array(),
|
||||
"bg_animation": vn_bg_animation,
|
||||
"overlay_color": vn_overlay_color,
|
||||
"music": vn_music,
|
||||
"vars": vn_vars,
|
||||
}
|
||||
vn_can_save = true
|
||||
|
||||
func populate_sprite_data(sprite_node: Sprite2D, texture: String, properties: Dictionary):
|
||||
sprite_node.texture = load("res://images/sprites/%s.png" % texture)
|
||||
for prop in properties:
|
||||
sprite_node[prop] = properties[prop]
|
||||
|
||||
func update_window_title():
|
||||
if vn_title:
|
||||
get_window().title = "Crossing Over - %s" % vn_title
|
||||
else:
|
||||
get_window().title = "Crossing Over"
|
||||
|
||||
func can_save() -> bool:
|
||||
return vn_can_save
|
||||
|
||||
func can_play_sfx() -> bool:
|
||||
return not FileGlobals.get_global_data("muted") and not vn_vars.get("disable_sfx", 0)
|
||||
|
||||
func can_play_music() -> bool:
|
||||
return not FileGlobals.get_global_data("muted")
|
||||
|
||||
func advance_sfx():
|
||||
if can_play_sfx():
|
||||
#SoundManager.play("vn_sfx", "advance")
|
||||
SoundManager.play_varied("vn_sfx", "advance", 1.0, FileGlobals.get_global_data("volume", 0.0))
|
||||
|
||||
func advance_vn(label = null) -> Array:
|
||||
var continue_after_text = false
|
||||
if vn_play_advance_noise:
|
||||
advance_sfx()
|
||||
vn_play_advance_noise = false
|
||||
if label:
|
||||
vn_pos = vn_labels[label]
|
||||
while true:
|
||||
vn_can_save = false
|
||||
if vn_pos >= vn_lines.size():
|
||||
return ["@eof"]
|
||||
var curr_line = vn_lines[vn_pos]
|
||||
vn_pos_savestate = vn_pos
|
||||
vn_pos_offset = 0
|
||||
vn_pos += 1
|
||||
match curr_line[0]:
|
||||
# Textbox handling commands
|
||||
VNInstruction.VN_SHOW_TEXTBOX:
|
||||
await $"../Textbox".show_textbox()
|
||||
VNInstruction.VN_HIDE_TEXTBOX:
|
||||
await $"../Textbox".hide_textbox()
|
||||
VNInstruction.VN_EXPAND_TEXTBOX:
|
||||
await $"../Textbox".expand_textbox()
|
||||
VNInstruction.VN_COLLAPSE_TEXTBOX:
|
||||
await $"../Textbox".collapse_textbox()
|
||||
VNInstruction.VN_TEXT:
|
||||
vn_can_save = true
|
||||
await $"../Textbox".write_text(curr_line[2], curr_line[1])
|
||||
$"../ChatLog".add_line(curr_line[2], curr_line[1])
|
||||
if continue_after_text:
|
||||
continue_after_text = false
|
||||
else:
|
||||
vn_play_advance_noise = true
|
||||
break
|
||||
VNInstruction.VN_CONTINUE_AFTER_TEXT:
|
||||
continue_after_text = true
|
||||
# Control flow commands
|
||||
VNInstruction.VN_NOOP:
|
||||
continue
|
||||
VNInstruction.VN_TITLE:
|
||||
vn_title = curr_line[1]
|
||||
VNInstruction.VN_QUIT:
|
||||
return ["@quit"]
|
||||
VNInstruction.VN_LOAD:
|
||||
# return ["@load", curr_line[1], save_vn()]
|
||||
return ["@load", curr_line[1]]
|
||||
VNInstruction.VN_ESCAPE:
|
||||
var escape_args = ["@escape"]
|
||||
for arg in curr_line.slice(1):
|
||||
if arg[0] == "$":
|
||||
escape_args.append(vn_vars.get(arg.right(-1), arg))
|
||||
else:
|
||||
escape_args.append(arg)
|
||||
return escape_args
|
||||
VNInstruction.VN_STOP:
|
||||
vn_pos_offset = 1
|
||||
vn_can_save = true
|
||||
vn_play_advance_noise = true
|
||||
break
|
||||
VNInstruction.VN_GOTO:
|
||||
vn_pos = vn_labels[curr_line[1]]
|
||||
VNInstruction.VN_WAIT:
|
||||
$"../Textbox".disable_textbox()
|
||||
$"../Timer".start(curr_line[1])
|
||||
await $"../Timer".timeout
|
||||
VNInstruction.VN_LABEL:
|
||||
continue
|
||||
VNInstruction.VN_COMMENT:
|
||||
continue
|
||||
VNInstruction.VN_PROMPT:
|
||||
var options_array = curr_line.slice(1)
|
||||
if options_array.size() <= 0:
|
||||
push_warning("Skipping prompt with no complete options.")
|
||||
continue
|
||||
$"../Textbox".disable_textbox()
|
||||
$"../Prompt".clear_options()
|
||||
# Pass new options to prompt
|
||||
while options_array.size() > 0:
|
||||
match options_array.pop_front():
|
||||
[var option_label, var option_text]:
|
||||
$"../Prompt".create_option(option_label, option_text)
|
||||
var invalid_option:
|
||||
push_warning("Ignoring invalid option '%s'." % invalid_option)
|
||||
$"../Prompt".show_prompt()
|
||||
# Save any text present in the textbox
|
||||
if vn_pos_savestate > 0:
|
||||
if vn_lines[vn_pos_savestate - 1][0] == VNInstruction.VN_TEXT:
|
||||
vn_pos_offset = 1
|
||||
vn_can_save = true
|
||||
#var prompt_signal = await $"../Prompt".prompt_option_selected
|
||||
#var option_label = prompt_signal[0]
|
||||
#var option_text = prompt_signal[1]
|
||||
match await $"../Prompt".prompt_option_selected:
|
||||
[var option_label, var option_text]:
|
||||
advance_sfx()
|
||||
await $"../Prompt".hide_prompt()
|
||||
vn_pos = vn_labels[option_label]
|
||||
$"../Textbox".enable_textbox()
|
||||
$"../ChatLog".add_selected_option_text(option_text)
|
||||
continue
|
||||
VNInstruction.VN_IF:
|
||||
var condition = false
|
||||
match curr_line[2]:
|
||||
">":
|
||||
condition = vn_vars[curr_line[1]] > curr_line[3]
|
||||
"<":
|
||||
condition = vn_vars[curr_line[1]] < curr_line[3]
|
||||
">=":
|
||||
condition = vn_vars[curr_line[1]] >= curr_line[3]
|
||||
"<=":
|
||||
condition = vn_vars[curr_line[1]] <= curr_line[3]
|
||||
"==":
|
||||
condition = vn_vars[curr_line[1]] == curr_line[3]
|
||||
"!=":
|
||||
condition = vn_vars[curr_line[1]] != curr_line[3]
|
||||
_:
|
||||
push_warning("Unknown conditional operator '%s'. Not branching." % curr_line[2])
|
||||
if condition:
|
||||
vn_pos = vn_labels[curr_line[4]]
|
||||
# Variable mangling commands
|
||||
VNInstruction.VN_SET:
|
||||
vn_vars[curr_line[1]] = curr_line[2]
|
||||
VNInstruction.VN_INCREMENT:
|
||||
vn_vars[curr_line[1]] += 1
|
||||
VNInstruction.VN_DECREMENT:
|
||||
vn_vars[curr_line[1]] -= 1
|
||||
# Extra media
|
||||
VNInstruction.VN_CLEAR_SPRITES:
|
||||
vn_sprite_map = {}
|
||||
for node in $"../Sprites".get_children():
|
||||
node.visible = false
|
||||
$"../Sprites".remove_child(node)
|
||||
node.queue_free()
|
||||
VNInstruction.VN_REMOVE_SPRITE:
|
||||
var curr_sprite = $"../Sprites".get_node_or_null(curr_line[1])
|
||||
if curr_sprite == null:
|
||||
push_warning("Can't remove unknown sprite '%s'. Ignoring." % curr_line[1])
|
||||
continue
|
||||
#var curr_idx = vn_sprite_map.get(curr_line[1], {"idx": -1})["idx"]
|
||||
var curr_idx = curr_sprite.get_index()
|
||||
#if curr_idx == -1:
|
||||
# push_warning("Can't remove unknown sprite '%s'. Ignoring." % curr_line[1])
|
||||
# continue
|
||||
vn_sprite_map.erase(curr_line[1])
|
||||
for k in vn_sprite_map.keys():
|
||||
if vn_sprite_map[k]["idx"] > curr_idx:
|
||||
vn_sprite_map[k]["idx"] -= 1
|
||||
curr_sprite.visible = false
|
||||
$"../Sprites".remove_child(curr_sprite)
|
||||
curr_sprite.queue_free()
|
||||
VNInstruction.VN_SET_SPRITE:
|
||||
var curr_sprite = $"../Sprites".get_node_or_null(curr_line[1])
|
||||
# var already_exists = curr_sprite != null
|
||||
if not curr_sprite:
|
||||
# Create new sprite
|
||||
vn_sprite_map[curr_line[1]] = {
|
||||
"idx": $"../Sprites".get_children().size(),
|
||||
"texture": curr_line[2],
|
||||
"properties": curr_line[4],
|
||||
}
|
||||
curr_sprite = vn_sprite.instantiate()
|
||||
curr_sprite.name = curr_line[1]
|
||||
# Make sure reveal_fishing_item doesn't flash
|
||||
if curr_line[3] == "reveal_fishing_item":
|
||||
curr_sprite.get_node("Sprite").self_modulate = "#000"
|
||||
curr_line[4].erase("self_modulate")
|
||||
else:
|
||||
curr_sprite.get_node("Sprite").self_modulate = "#fff"
|
||||
$"../Sprites".add_child(curr_sprite)
|
||||
var sprite_node = curr_sprite.get_node("Sprite") as Sprite2D
|
||||
var animation_player = curr_sprite.get_node("AnimationPlayer") as AnimationPlayer
|
||||
# TODO: Figure out weird bugs with sprite props
|
||||
#if not already_exists:
|
||||
# animation_player.queue("RESET")
|
||||
populate_sprite_data(sprite_node, curr_line[2], curr_line[4])
|
||||
if curr_line[3] == "RESET":
|
||||
sprite_node.visible = true
|
||||
sprite_node.self_modulate = "#fff"
|
||||
else:
|
||||
if animation_player.get_animation_library("").has_animation(curr_line[3]):
|
||||
animation_player.queue(curr_line[3])
|
||||
else:
|
||||
push_warning("Unknown sprite animation '%s'. Skipping animation." % curr_line[3])
|
||||
VNInstruction.VN_START_MUSIC:
|
||||
vn_music = curr_line[1]
|
||||
if MusicManager.is_playing("vn_music", vn_music):
|
||||
print_debug("Already playing track '%s'" % vn_music)
|
||||
else:
|
||||
MusicManager.play("vn_music", vn_music, curr_line[2])
|
||||
VNInstruction.VN_STOP_MUSIC:
|
||||
vn_music = ""
|
||||
if MusicManager.is_playing():
|
||||
MusicManager.stop(curr_line[1])
|
||||
VNInstruction.VN_SOUND_EFFECT:
|
||||
if can_play_sfx():
|
||||
#SoundManager.play("vn_sfx", curr_line[1])
|
||||
SoundManager.play_varied("vn_sfx", curr_line[1], 1.0, FileGlobals.get_global_data("volume", 0.0))
|
||||
VNInstruction.VN_SET_BACKGROUND:
|
||||
if $"../Background/AnimationPlayer".has_animation(curr_line[1]):
|
||||
vn_bg_animation = curr_line[1]
|
||||
$"../Background/AnimationPlayer".play(vn_bg_animation)
|
||||
if curr_line[2]:
|
||||
$"../Textbox".disable_textbox()
|
||||
await $"../Background/AnimationPlayer".animation_finished
|
||||
else:
|
||||
push_warning("Unknown background animation '%s'. Ignoring." % curr_line[1])
|
||||
VNInstruction.VN_OVERLAY_COLOR:
|
||||
$"../Textbox".disable_textbox()
|
||||
vn_overlay_color = curr_line[1]
|
||||
var color = Color.html(vn_overlay_color)
|
||||
if curr_line[2] >= 0.09:
|
||||
var tween = get_tree().create_tween()
|
||||
tween.tween_property($"../OverlayColor/ColorRect", "color", color, curr_line[2])
|
||||
await tween.finished
|
||||
else:
|
||||
$"../OverlayColor/ColorRect".color = color
|
||||
VNInstruction.VN_PLAY_VIDEO:
|
||||
var video_file = "res://media/%s.ogv" % curr_line[1]
|
||||
if not FileAccess.file_exists(video_file):
|
||||
assert(false, "Video '%s.ogv' not found in res://media" % curr_line[1])
|
||||
continue
|
||||
$"../Textbox".disable_textbox()
|
||||
var video_stream = VideoStreamTheora.new()
|
||||
video_stream.file = video_file
|
||||
var player: VideoStreamPlayer = $"../Video/VideoStreamPlayer"
|
||||
player.stream = video_stream
|
||||
#if can_play_music():
|
||||
# player.volume_db = -12.0 + FileGlobals.get_global_data("volume", 0.0)
|
||||
#else:
|
||||
# player.volume = 0
|
||||
player.volume = 0
|
||||
player.visible = true
|
||||
player.play()
|
||||
await player.finished
|
||||
player.visible = false
|
||||
player.stream = null
|
||||
_:
|
||||
push_warning("Skipping unknown command. (%s)" % curr_line)
|
||||
$"../Textbox".ready_textbox()
|
||||
return []
|
||||
6
scenes/logic/vn_interpreter.tscn
Normal file
6
scenes/logic/vn_interpreter.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://jfv4ss4g55mw"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/logic/vn_interpreter.gd" id="1_q6fhh"]
|
||||
|
||||
[node name="VNInterpreter" type="Node2D"]
|
||||
script = ExtResource("1_q6fhh")
|
||||
11
scenes/screens/credits.txt
Normal file
11
scenes/screens/credits.txt
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
[center]A game by Bad Manners
|
||||
[url]https://badmanners.xyz[/url]
|
||||
© 2024 - All rights reserved
|
||||
|
||||
Special thanks to:
|
||||
[ul]Hans Woofington, whose encouragement made this project a reality.
|
||||
B., for their unwavering friendship.
|
||||
destinyisbad1, for the support since the very beginning.
|
||||
asofyeun, for supporting me on SubscribeStar.[/ul]
|
||||
|
||||
[url=licenses]Open third-party licenses[/url][/center]
|
||||
5
scenes/screens/credits_bonus.txt
Normal file
5
scenes/screens/credits_bonus.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
[center]
|
||||
BONUS
|
||||
[url=bonus_music]Music room[/url]
|
||||
[url=bonus_animation]Play video[/url]
|
||||
[url=bonus_fishing]Fishing minigame[/url][/center]
|
||||
78
scenes/screens/fishing_minigame.gd
Normal file
78
scenes/screens/fishing_minigame.gd
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
extends Node2D
|
||||
|
||||
var all_targets = []
|
||||
var targets_in_net = []
|
||||
var grabbed_target = null
|
||||
var boat_is_moving = false
|
||||
var net_is_dropped = false
|
||||
|
||||
var fishing_target_packed_scene: PackedScene = preload("res://scenes/logic/fishing_target.tscn")
|
||||
|
||||
signal fished(name: String)
|
||||
signal fished_all_targets
|
||||
|
||||
# Debug autostart
|
||||
#func _ready():
|
||||
# start_fishing_minigame(
|
||||
# [{"name": "test1", "sprite": load("res://images/sprites/fishing_targets/test.png")}],
|
||||
# 0.0,
|
||||
# false,
|
||||
# )
|
||||
|
||||
func _process(delta):
|
||||
if boat_is_moving and net_is_dropped:
|
||||
$ReleasedNet.position += Vector2.UP * 70.0 * delta
|
||||
|
||||
func play_sfx(sfx):
|
||||
if $"../VNInterpreter".can_play_sfx():
|
||||
#SoundManager.play("fishing_sfx", sfx)
|
||||
SoundManager.play_varied("fishing_sfx", sfx, 1.0, FileGlobals.get_global_data("volume", 0.0))
|
||||
|
||||
func start_fishing_minigame(targets, difficulty, is_moving = false):
|
||||
all_targets = targets
|
||||
boat_is_moving = is_moving
|
||||
if boat_is_moving:
|
||||
$Background.play("fishing_moving")
|
||||
else:
|
||||
$Background.play("fishing_stopped")
|
||||
$Net.visible = true
|
||||
$Net/Button.disabled = false
|
||||
for i in all_targets.size():
|
||||
var target = fishing_target_packed_scene.instantiate()
|
||||
target.init_target(i, all_targets[i]["sprite"], difficulty)
|
||||
$FishingTargets.add_child(target)
|
||||
|
||||
func _on_net_dropped(dropped_position):
|
||||
$ReleasedNet.play("default")
|
||||
net_is_dropped = true
|
||||
$ReleasedNet.position = dropped_position + 140 * Vector2.DOWN
|
||||
$ReleasedNet.visible = true
|
||||
$AnimationPlayer.play("drop_net")
|
||||
|
||||
func _on_animation_player_animation_finished(anim_name):
|
||||
if anim_name == "drop_net":
|
||||
play_sfx("net_splash")
|
||||
$ReleasedNet.play("grab_underwater")
|
||||
$ReleasedNet/DisappearTimer.start()
|
||||
if targets_in_net.size() >= 1:
|
||||
grabbed_target = targets_in_net.pop_back()
|
||||
# Stop target's movement and set position to inside the net
|
||||
grabbed_target.grab_with($ReleasedNet)
|
||||
else:
|
||||
grabbed_target = null
|
||||
|
||||
func _on_released_net_target_entered(target):
|
||||
targets_in_net.append(target)
|
||||
|
||||
func _on_released_net_target_exited(target):
|
||||
targets_in_net.erase(target)
|
||||
|
||||
func _on_released_net_disappear_timer_timeout():
|
||||
if grabbed_target:
|
||||
fished.emit(all_targets[grabbed_target.index]["name"])
|
||||
if $FishingTargets.get_child_count() <= 1:
|
||||
fished_all_targets.emit()
|
||||
grabbed_target.queue_free()
|
||||
grabbed_target = null
|
||||
net_is_dropped = false
|
||||
$ReleasedNet.visible = false
|
||||
364
scenes/screens/fishing_minigame.tscn
Normal file
364
scenes/screens/fishing_minigame.tscn
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
[gd_scene load_steps=44 format=3 uid="uid://b051fdn22dftw"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/screens/fishing_minigame.gd" id="1_7s5h5"]
|
||||
[ext_resource type="Script" path="res://scenes/logic/net.gd" id="1_yetkk"]
|
||||
[ext_resource type="Texture2D" uid="uid://b3mgxwv3cp1qm" path="res://images/backgrounds/fishing_02/0001.png" id="2_4krj7"]
|
||||
[ext_resource type="Texture2D" uid="uid://lqy1x6kqm88q" path="res://images/backgrounds/fishing_01.png" id="2_dgwmc"]
|
||||
[ext_resource type="Texture2D" uid="uid://kepym7kmjifc" path="res://images/backgrounds/fishing_02/0002.png" id="3_e8c31"]
|
||||
[ext_resource type="Texture2D" uid="uid://dgoe2mysnljkf" path="res://images/backgrounds/fishing_02/0003.png" id="4_02oa4"]
|
||||
[ext_resource type="Texture2D" uid="uid://bg3w5mitkvquh" path="res://images/backgrounds/fishing_02/0004.png" id="5_tqtjh"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1yoisbs8lgko" path="res://images/backgrounds/fishing_02/0005.png" id="6_ty1bg"]
|
||||
[ext_resource type="Texture2D" uid="uid://lxwjghm7etg2" path="res://images/backgrounds/fishing_02/0006.png" id="7_gud5g"]
|
||||
[ext_resource type="Texture2D" uid="uid://b124fi3eupqhk" path="res://images/backgrounds/fishing_02/0007.png" id="8_e8v68"]
|
||||
[ext_resource type="Texture2D" uid="uid://ch4b24x872268" path="res://images/backgrounds/fishing_02/0008.png" id="9_dubgg"]
|
||||
[ext_resource type="Texture2D" uid="uid://dmyv3kehfplqg" path="res://images/backgrounds/fishing_02/0009.png" id="10_j2ciw"]
|
||||
[ext_resource type="Texture2D" uid="uid://dbimx1shxh47s" path="res://images/sprites/fishing_net/ground.png" id="12_gow3b"]
|
||||
[ext_resource type="Texture2D" uid="uid://bgxon7ni33yvo" path="res://images/sprites/fishing_foreground.png" id="12_jlj73"]
|
||||
[ext_resource type="Texture2D" uid="uid://bxs47a05ioxwu" path="res://images/sprites/fishing_net/grabbed_shadow.png" id="14_mfswx"]
|
||||
[ext_resource type="Texture2D" uid="uid://cca7inw67j1aj" path="res://images/sprites/fishing_net/shadow_underwater/0001.png" id="15_sanpa"]
|
||||
[ext_resource type="Texture2D" uid="uid://c5p4iqee53bdn" path="res://images/sprites/fishing_net/released.png" id="16_020uy"]
|
||||
[ext_resource type="Texture2D" uid="uid://bvyx2qdefcgbg" path="res://images/sprites/fishing_net/shadow_underwater/0002.png" id="16_lbjk3"]
|
||||
[ext_resource type="Texture2D" uid="uid://c0v4akcfgy6f3" path="res://images/sprites/fishing_net/shadow_underwater/0003.png" id="17_dm662"]
|
||||
[ext_resource type="Texture2D" uid="uid://58hecowyh01o" path="res://images/sprites/fishing_net/shadow_underwater/0004.png" id="18_rph7a"]
|
||||
[ext_resource type="Texture2D" uid="uid://c7jann5xx0mjj" path="res://images/sprites/fishing_net/shadow_underwater/0005.png" id="19_17qn5"]
|
||||
[ext_resource type="Texture2D" uid="uid://wbrk7ketjskv" path="res://images/sprites/fishing_net/shadow_underwater/0006.png" id="20_f1sxv"]
|
||||
[ext_resource type="Texture2D" uid="uid://dere026aqonp8" path="res://images/sprites/fishing_net/shadow_underwater/0007.png" id="21_2tvvq"]
|
||||
[ext_resource type="Texture2D" uid="uid://cgrrpfsuscyye" path="res://images/sprites/fishing_net/shadow_underwater/0008.png" id="22_veott"]
|
||||
[ext_resource type="Texture2D" uid="uid://mh34nrov6tum" path="res://images/sprites/fishing_net/shadow_underwater/0009.png" id="23_qdeun"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/sound_manager/sound_bank.gd" id="26_3dk6v"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/sound_manager/sound_event_resource.gd" id="27_j0p8c"]
|
||||
[ext_resource type="AudioStream" uid="uid://ia71ea5lkhf0" path="res://sounds/net_picked_up.mp3" id="28_gwvbf"]
|
||||
[ext_resource type="AudioStream" uid="uid://cpw5iy7xmmdxl" path="res://sounds/net_splash.mp3" id="29_ws3wp"]
|
||||
[ext_resource type="AudioStream" uid="uid://baaj7tqj81uun" path="res://sounds/net_returns.mp3" id="30_kih1b"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_niynd"]
|
||||
resource_name = "RESET"
|
||||
length = 0.001
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ReleasedNet/ReleasedNetGhost:offset:y")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(-140, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Net:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Net/Button:disabled")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("ReleasedNet:animation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"default"]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("ReleasedNet/ReleasedNetGhost:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("ReleasedNet:visible")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bir22"]
|
||||
resource_name = "drop_net"
|
||||
length = 0.8
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ReleasedNet/ReleasedNetGhost:offset:y")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0),
|
||||
"points": PackedFloat32Array(-140, 0, 0, 0, 0, -140, 0, 0, 0, 0, -20, 0, -100, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.1, 0.8)
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ReleasedNet/ReleasedNetGhost:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.8),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_u2oub"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_niynd"),
|
||||
"drop_net": SubResource("Animation_bir22")
|
||||
}
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_4e28o"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("2_4krj7")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_e8c31")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_02oa4")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_tqtjh")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_ty1bg")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_gud5g")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("8_e8v68")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_dubgg")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_j2ciw")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"fishing_moving",
|
||||
"speed": 6.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("2_dgwmc")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"fishing_stopped",
|
||||
"speed": 6.0
|
||||
}]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_7eg46"]
|
||||
size = Vector2(879, 28)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_qcfpa"]
|
||||
size = Vector2(60, 463)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_si7tm"]
|
||||
size = Vector2(63, 465)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_s7cl4"]
|
||||
size = Vector2(876, 72)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_nktfp"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("15_sanpa")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("16_lbjk3")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("17_dm662")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("18_rph7a")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("19_17qn5")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("20_f1sxv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("21_2tvvq")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("22_veott")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("23_qdeun")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"grab_underwater",
|
||||
"speed": 12.0
|
||||
}]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_f8txh"]
|
||||
size = Vector2(107, 45)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_sxq6n"]
|
||||
script = ExtResource("27_j0p8c")
|
||||
name = "net_picked_up"
|
||||
bus = ""
|
||||
volume = -6.0
|
||||
pitch = 1.0
|
||||
streams = Array[AudioStream]([ExtResource("28_gwvbf")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_ifamc"]
|
||||
script = ExtResource("27_j0p8c")
|
||||
name = "net_splash"
|
||||
bus = ""
|
||||
volume = -6.0
|
||||
pitch = 1.0
|
||||
streams = Array[AudioStream]([ExtResource("29_ws3wp")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_8l1se"]
|
||||
script = ExtResource("27_j0p8c")
|
||||
name = "net_returns"
|
||||
bus = ""
|
||||
volume = 0.0
|
||||
pitch = 1.0
|
||||
streams = Array[AudioStream]([ExtResource("30_kih1b")])
|
||||
|
||||
[node name="FishingMinigame" type="Node2D"]
|
||||
script = ExtResource("1_7s5h5")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_u2oub")
|
||||
}
|
||||
|
||||
[node name="Background" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(400, 300)
|
||||
sprite_frames = SubResource("SpriteFrames_4e28o")
|
||||
animation = &"fishing_stopped"
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Background"]
|
||||
z_index = 1
|
||||
texture = ExtResource("12_jlj73")
|
||||
|
||||
[node name="Area2D" type="StaticBody2D" parent="Background"]
|
||||
collision_layer = 2
|
||||
|
||||
[node name="BoundaryBottom" type="CollisionShape2D" parent="Background/Area2D"]
|
||||
position = Vector2(4.5, 107)
|
||||
shape = SubResource("RectangleShape2D_7eg46")
|
||||
|
||||
[node name="BoundaryRight" type="CollisionShape2D" parent="Background/Area2D"]
|
||||
position = Vector2(395, -98.5)
|
||||
shape = SubResource("RectangleShape2D_qcfpa")
|
||||
|
||||
[node name="BoundaryLeft" type="CollisionShape2D" parent="Background/Area2D"]
|
||||
position = Vector2(-396.5, -103.5)
|
||||
shape = SubResource("RectangleShape2D_si7tm")
|
||||
|
||||
[node name="BoundaryTop" type="CollisionShape2D" parent="Background/Area2D"]
|
||||
position = Vector2(0, -278)
|
||||
shape = SubResource("RectangleShape2D_s7cl4")
|
||||
|
||||
[node name="FishingTargets" type="Node2D" parent="."]
|
||||
|
||||
[node name="Net" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
z_index = 1
|
||||
position = Vector2(400, 560)
|
||||
texture = ExtResource("12_gow3b")
|
||||
script = ExtResource("1_yetkk")
|
||||
|
||||
[node name="Shadow" type="Sprite2D" parent="Net"]
|
||||
z_as_relative = false
|
||||
texture = ExtResource("14_mfswx")
|
||||
offset = Vector2(0, 120)
|
||||
|
||||
[node name="Button" type="Button" parent="Net"]
|
||||
self_modulate = Color(1, 1, 1, 0)
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -96.5
|
||||
offset_top = -41.0
|
||||
offset_right = -96.5
|
||||
offset_bottom = -41.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
disabled = true
|
||||
|
||||
[node name="ResetTimer" type="Timer" parent="Net"]
|
||||
wait_time = 3.0
|
||||
one_shot = true
|
||||
|
||||
[node name="ReleasedNet" type="AnimatedSprite2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(-162, 244)
|
||||
sprite_frames = SubResource("SpriteFrames_nktfp")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="ReleasedNet"]
|
||||
collision_layer = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="ReleasedNet/Area2D"]
|
||||
position = Vector2(-0.5, -15.5)
|
||||
shape = SubResource("RectangleShape2D_f8txh")
|
||||
|
||||
[node name="ReleasedNetGhost" type="Sprite2D" parent="ReleasedNet"]
|
||||
z_index = 1
|
||||
texture = ExtResource("16_020uy")
|
||||
offset = Vector2(0, -140)
|
||||
|
||||
[node name="DisappearTimer" type="Timer" parent="ReleasedNet"]
|
||||
wait_time = 1.5
|
||||
one_shot = true
|
||||
|
||||
[node name="SoundBank" type="Node" parent="."]
|
||||
script = ExtResource("26_3dk6v")
|
||||
label = "fishing_sfx"
|
||||
events = Array[ExtResource("27_j0p8c")]([SubResource("Resource_sxq6n"), SubResource("Resource_ifamc"), SubResource("Resource_8l1se")])
|
||||
|
||||
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
|
||||
[connection signal="net_dropped" from="Net" to="." method="_on_net_dropped"]
|
||||
[connection signal="button_down" from="Net/Button" to="Net" method="_on_button_down"]
|
||||
[connection signal="button_up" from="Net/Button" to="Net" method="_on_button_up"]
|
||||
[connection signal="timeout" from="Net/ResetTimer" to="Net" method="_on_reset_timer_timeout"]
|
||||
[connection signal="body_entered" from="ReleasedNet/Area2D" to="." method="_on_released_net_target_entered"]
|
||||
[connection signal="body_exited" from="ReleasedNet/Area2D" to="." method="_on_released_net_target_exited"]
|
||||
[connection signal="timeout" from="ReleasedNet/DisappearTimer" to="." method="_on_released_net_disappear_timer_timeout"]
|
||||
474
scenes/screens/maiA0EA.tmp
Normal file
474
scenes/screens/maiA0EA.tmp
Normal file
|
|
@ -0,0 +1,474 @@
|
|||
[gd_scene load_steps=30 format=3 uid="uid://onv4dnuf1kk1"]
|
||||
|
||||
[ext_resource type="FontFile" uid="uid://cvjffehw5s8ut" path="res://fonts/FsJenson1.ttf" id="1_qkfah"]
|
||||
[ext_resource type="Script" path="res://scenes/screens/main_menu.gd" id="1_yehem"]
|
||||
[ext_resource type="Texture2D" uid="uid://cwx25ylanlny2" path="res://images/backgrounds/main_menu_01/0001.png" id="2_3aa2r"]
|
||||
[ext_resource type="Texture2D" uid="uid://c0qa5ixkx1cdj" path="res://images/backgrounds/main_menu_01/0002.png" id="3_rix5m"]
|
||||
[ext_resource type="Texture2D" uid="uid://bags8op6x23ay" path="res://images/backgrounds/main_menu_01/0003.png" id="4_iiljn"]
|
||||
[ext_resource type="Texture2D" uid="uid://8jipdoai5gy7" path="res://images/backgrounds/main_menu_01/0004.png" id="5_xbe5v"]
|
||||
[ext_resource type="Texture2D" uid="uid://gobqqmxfdtq" path="res://images/backgrounds/main_menu_01/0005.png" id="6_11q4i"]
|
||||
[ext_resource type="Texture2D" uid="uid://cgauglb4shsm3" path="res://images/backgrounds/main_menu_01/0006.png" id="7_mafjt"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1y26yiulx1xv" path="res://images/backgrounds/main_menu_01/0007.png" id="8_4qyl7"]
|
||||
[ext_resource type="Texture2D" uid="uid://eepfmshimjne" path="res://images/backgrounds/main_menu_01/0008.png" id="9_hm22s"]
|
||||
[ext_resource type="Texture2D" uid="uid://b21cecq2oiuj8" path="res://images/backgrounds/main_menu_01/0009.png" id="10_u8yo1"]
|
||||
[ext_resource type="Texture2D" uid="uid://ryis6tpqxxpp" path="res://images/backgrounds/main_menu_2.png" id="11_c4y3s"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/music_manager/music_bank.gd" id="12_kf5m8"]
|
||||
[ext_resource type="Texture2D" uid="uid://b350qf6o6i6gy" path="res://images/ui/volume-high-solid.svg" id="13_etr4h"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/music_manager/music_track_resource.gd" id="13_li636"]
|
||||
[ext_resource type="Texture2D" uid="uid://ykb3qmxlb1ph" path="res://images/ui/panel-border-014.png" id="13_y2w4v"]
|
||||
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="14_j72go"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/music_manager/music_stem_resource.gd" id="14_l87h8"]
|
||||
[ext_resource type="AudioStream" uid="uid://dyam8vvj6rlp7" path="res://music/Fulminant.mp3" id="15_w4ohi"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_3tys0"]
|
||||
resource_name = "main_menu_01"
|
||||
length = 1.50002
|
||||
loop_mode = 1
|
||||
step = 0.166667
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("TextureRect:texture")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.333333, 0.5, 0.666667, 0.833333, 1, 1.16667, 1.33333, 1.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [ExtResource("2_3aa2r"), ExtResource("3_rix5m"), ExtResource("4_iiljn"), ExtResource("5_xbe5v"), ExtResource("6_11q4i"), ExtResource("7_mafjt"), ExtResource("8_4qyl7"), ExtResource("9_hm22s"), ExtResource("10_u8yo1"), ExtResource("2_3aa2r")]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_abbe0"]
|
||||
resource_name = "RESET"
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColorRect:color")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_cf6h8"]
|
||||
resource_name = "reveal_main_menu"
|
||||
length = 0.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColorRect:color")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("TitleMarginContainer:theme_override_constants/margin_top")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-30, 20]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_6xul7"]
|
||||
resource_name = "main_menu_02"
|
||||
length = 0.001
|
||||
loop_mode = 2
|
||||
step = 0.166667
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("TextureRect:texture")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [ExtResource("11_c4y3s")]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_hgqec"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_abbe0"),
|
||||
"main_menu_01": SubResource("Animation_3tys0"),
|
||||
"main_menu_02": SubResource("Animation_6xul7"),
|
||||
"reveal_main_menu": SubResource("Animation_cf6h8")
|
||||
}
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_llf77"]
|
||||
bg_color = Color(0.74902, 0.74902, 0.74902, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wa6sw"]
|
||||
bg_color = Color(0.517647, 0.517647, 0.517647, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 3
|
||||
border_color = Color(0.203922, 0.482353, 0.85098, 1)
|
||||
corner_radius_top_left = 6
|
||||
corner_radius_top_right = 2
|
||||
corner_radius_bottom_right = 2
|
||||
corner_radius_bottom_left = 2
|
||||
expand_margin_left = 3.0
|
||||
expand_margin_top = 3.0
|
||||
expand_margin_right = 3.0
|
||||
expand_margin_bottom = 3.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_07dbw"]
|
||||
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.752941)
|
||||
corner_radius_top_left = 14
|
||||
corner_radius_top_right = 14
|
||||
corner_radius_bottom_right = 14
|
||||
corner_radius_bottom_left = 14
|
||||
|
||||
[sub_resource type="Resource" id="Resource_os855"]
|
||||
script = ExtResource("14_l87h8")
|
||||
name = "main"
|
||||
enabled = true
|
||||
volume = 0.0
|
||||
stream = ExtResource("15_w4ohi")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_kpms5"]
|
||||
script = ExtResource("13_li636")
|
||||
name = "fulminant"
|
||||
bus = ""
|
||||
stems = Array[ExtResource("14_l87h8")]([SubResource("Resource_os855")])
|
||||
|
||||
[node name="MainMenu" type="Node2D"]
|
||||
script = ExtResource("1_yehem")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
root_node = NodePath("../CanvasLayer")
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_hgqec")
|
||||
}
|
||||
|
||||
[node name="AnimationPlayerBG" type="AnimationPlayer" parent="."]
|
||||
root_node = NodePath("../CanvasLayer")
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_hgqec")
|
||||
}
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="CanvasLayer"]
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -400.0
|
||||
offset_top = -600.0
|
||||
offset_right = 400.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
texture = ExtResource("11_c4y3s")
|
||||
|
||||
[node name="TitleMarginContainer" type="MarginContainer" parent="CanvasLayer"]
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -217.0
|
||||
offset_right = 218.0
|
||||
offset_bottom = 222.0
|
||||
grow_horizontal = 2
|
||||
theme_override_constants/margin_top = -20
|
||||
|
||||
[node name="Title" type="Label" parent="CanvasLayer/TitleMarginContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 40
|
||||
theme_override_constants/line_spacing = -26
|
||||
theme_override_fonts/font = ExtResource("1_qkfah")
|
||||
theme_override_font_sizes/font_size = 180
|
||||
text = "Crossing
|
||||
Over"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="MuteButtonContainer" type="MarginContainer" parent="CanvasLayer"]
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -40.0
|
||||
offset_bottom = 40.0
|
||||
grow_horizontal = 0
|
||||
theme_override_constants/margin_top = 20
|
||||
theme_override_constants/margin_right = 20
|
||||
|
||||
[node name="MuteButton" type="Button" parent="CanvasLayer/MuteButtonContainer"]
|
||||
custom_minimum_size = Vector2(30, 30)
|
||||
layout_mode = 2
|
||||
focus_next = NodePath("../../ButtonsMarginContainer/VBoxContainer/NewGame/NewGameButton")
|
||||
focus_previous = NodePath("../../ButtonsMarginContainer/VBoxContainer/Credits/CreditsButton")
|
||||
theme_override_styles/hover = SubResource("StyleBoxFlat_llf77")
|
||||
theme_override_styles/focus = SubResource("StyleBoxFlat_wa6sw")
|
||||
keep_pressed_outside = true
|
||||
icon = ExtResource("13_etr4h")
|
||||
|
||||
[node name="Panel" type="Panel" parent="CanvasLayer/MuteButtonContainer/MuteButton"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_07dbw")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="CanvasLayer/MuteButtonContainer/MuteButton"]
|
||||
layout_mode = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
theme_override_constants/margin_left = 8
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 8
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="CanvasLayer/MuteButtonContainer/MuteButton/MarginContainer"]
|
||||
layout_mode = 2
|
||||
texture = ExtResource("13_etr4h")
|
||||
expand_mode = 2
|
||||
|
||||
[node name="ButtonsMarginContainer" type="MarginContainer" parent="CanvasLayer"]
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -266.0
|
||||
offset_top = -52.0
|
||||
offset_right = 266.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_constants/margin_bottom = 40
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/ButtonsMarginContainer"]
|
||||
custom_minimum_size = Vector2(532, 0)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/separation = 52
|
||||
alignment = 1
|
||||
|
||||
[node name="NewGame" type="Control" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="NewGameButton" type="Button" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/NewGame"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(0, 26)
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 512.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
focus_previous = NodePath("../../../../MuteButtonContainer/MuteButton")
|
||||
theme_override_styles/hover = SubResource("StyleBoxFlat_llf77")
|
||||
theme_override_styles/focus = SubResource("StyleBoxFlat_wa6sw")
|
||||
keep_pressed_outside = true
|
||||
|
||||
[node name="Panel" type="Panel" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/NewGame/NewGameButton"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_07dbw")
|
||||
|
||||
[node name="NameFrame" type="NinePatchRect" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/NewGame/NewGameButton"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("13_y2w4v")
|
||||
draw_center = false
|
||||
patch_margin_left = 14
|
||||
patch_margin_top = 14
|
||||
patch_margin_right = 14
|
||||
patch_margin_bottom = 14
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/NewGame/NewGameButton/NameFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 532.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="NewGameLabel" type="Label" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/NewGame/NewGameButton/NameFrame/Margin"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
theme = ExtResource("14_j72go")
|
||||
text = "New game"
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[node name="Continue" type="Control" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ContinueButton" type="Button" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Continue"]
|
||||
custom_minimum_size = Vector2(0, 26)
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 512.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_styles/hover = SubResource("StyleBoxFlat_llf77")
|
||||
theme_override_styles/focus = SubResource("StyleBoxFlat_wa6sw")
|
||||
keep_pressed_outside = true
|
||||
|
||||
[node name="Panel" type="Panel" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Continue/ContinueButton"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_07dbw")
|
||||
|
||||
[node name="NameFrame" type="NinePatchRect" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Continue/ContinueButton"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("13_y2w4v")
|
||||
draw_center = false
|
||||
patch_margin_left = 14
|
||||
patch_margin_top = 14
|
||||
patch_margin_right = 14
|
||||
patch_margin_bottom = 14
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Continue/ContinueButton/NameFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 532.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="ContinueLabel" type="Label" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Continue/ContinueButton/NameFrame/Margin"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
theme = ExtResource("14_j72go")
|
||||
text = "Continue"
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[node name="Credits" type="Control" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="CreditsButton" type="Button" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Credits"]
|
||||
custom_minimum_size = Vector2(0, 26)
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 512.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
focus_next = NodePath("../../../../MuteButtonContainer/MuteButton")
|
||||
theme_override_styles/hover = SubResource("StyleBoxFlat_llf77")
|
||||
theme_override_styles/focus = SubResource("StyleBoxFlat_wa6sw")
|
||||
keep_pressed_outside = true
|
||||
|
||||
[node name="Panel" type="Panel" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Credits/CreditsButton"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_07dbw")
|
||||
|
||||
[node name="NameFrame" type="NinePatchRect" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Credits/CreditsButton"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("13_y2w4v")
|
||||
draw_center = false
|
||||
patch_margin_left = 14
|
||||
patch_margin_top = 14
|
||||
patch_margin_right = 14
|
||||
patch_margin_bottom = 14
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Credits/CreditsButton/NameFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 532.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="CreditsLabel" type="Label" parent="CanvasLayer/ButtonsMarginContainer/VBoxContainer/Credits/CreditsButton/NameFrame/Margin"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
theme = ExtResource("14_j72go")
|
||||
text = "Credits"
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="MusicBank" type="Node" parent="."]
|
||||
script = ExtResource("12_kf5m8")
|
||||
label = "main_menu"
|
||||
tracks = Array[ExtResource("13_li636")]([SubResource("Resource_kpms5")])
|
||||
196
scenes/screens/main_menu.gd
Normal file
196
scenes/screens/main_menu.gd
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
extends Node2D
|
||||
|
||||
|
||||
@onready var vn_scene = preload("res://scenes/screens/visual_novel.tscn")
|
||||
|
||||
var licenses_scroll_bar = null
|
||||
|
||||
func advance_sfx():
|
||||
if not FileGlobals.get_global_data("muted"):
|
||||
#SoundManager.play("sfx_menu", "advance")
|
||||
SoundManager.play_varied("sfx_menu", "advance", 1.0, FileGlobals.get_global_data("volume", 0.0))
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
get_window().title = "Crossing Over"
|
||||
if not FileGlobals.has_loaded:
|
||||
await FileGlobals.loaded
|
||||
if not MusicManager.has_loaded:
|
||||
await MusicManager.loaded
|
||||
if not SoundManager.has_loaded:
|
||||
await SoundManager.loaded
|
||||
|
||||
$CanvasLayer/CreditsMenuControl/AnimatedBardSprite.play("default")
|
||||
|
||||
FileGlobals.new_game_save_file.clear()
|
||||
|
||||
if str(FileGlobals.get_global_data("answer")) == "42":
|
||||
$AnimationPlayerBG.play("main_menu_02")
|
||||
else:
|
||||
$AnimationPlayerBG.play("main_menu_01")
|
||||
%VolumeSlider.value = FileGlobals.get_global_data("volume", 0.0)
|
||||
init_credits()
|
||||
if FileGlobals.can_continue:
|
||||
%Continue.visible = true
|
||||
for file in FileGlobals.save_files:
|
||||
if file.get("is_autosave"):
|
||||
%ItemList.add_item(" Autosave | %s (%s)" % [file["name"], file["timestamp"]])
|
||||
else:
|
||||
%ItemList.add_item(" %s (%s)" % [file["name"], file["timestamp"]])
|
||||
if FileGlobals.get_global_data("muted"):
|
||||
mute()
|
||||
else:
|
||||
MusicManager.set_volume(%VolumeSlider.value)
|
||||
MusicManager.play("main_menu", "fulminant_mm", 0.0)
|
||||
$AnimationPlayer.play("reveal_main_menu")
|
||||
%NewGameButton.grab_focus()
|
||||
|
||||
func _process(delta):
|
||||
if $CanvasLayer/LicensesWindow.visible:
|
||||
if Input.is_action_just_pressed("ui_accept") or Input.is_action_just_pressed("ui_cancel"):
|
||||
advance_sfx()
|
||||
$CanvasLayer/LicensesWindow.hide()
|
||||
else:
|
||||
var vertical_scroll = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down").y * delta * 1000
|
||||
$CanvasLayer/LicensesWindow/RichTextLabel.get_v_scroll_bar().value += vertical_scroll
|
||||
|
||||
func mute():
|
||||
MusicManager.set_volume(-80.0)
|
||||
#SoundManager.set_volume(-80.0)
|
||||
FileGlobals.set_global_data("muted", true)
|
||||
%MuteTextureRect.texture = load("res://images/ui/speaker-x-mark.svg")
|
||||
|
||||
func unmute():
|
||||
var volume = FileGlobals.get_global_data("volume", 0.0)
|
||||
MusicManager.set_volume(FileGlobals.get_global_data("volume", 0.0))
|
||||
#SoundManager.set_volume(0.0)
|
||||
#SoundManager.play("sfx_menu", "advance")
|
||||
SoundManager.play_varied("sfx_menu", "advance", 1.0, volume)
|
||||
FileGlobals.set_global_data("muted", false)
|
||||
%MuteTextureRect.texture = load("res://images/ui/speaker-wave.svg")
|
||||
|
||||
func init_credits():
|
||||
%CreditsRichText.text = FileAccess.open("res://scenes/screens/credits.txt", FileAccess.READ).get_as_text()
|
||||
#if OS.has_feature("debug") or str(FileGlobals.get_global_data("game_completed")) == "1":
|
||||
if OS.has_feature("editor") or str(FileGlobals.get_global_data("game_completed")) == "1":
|
||||
%CreditsRichText.append_text(FileAccess.open("res://scenes/screens/credits_bonus.txt", FileAccess.READ).get_as_text())
|
||||
%PostGameButtons.visible = true
|
||||
|
||||
func show_licenses():
|
||||
if not $CanvasLayer/LicensesWindow/RichTextLabel.text:
|
||||
$CanvasLayer/LicensesWindow/RichTextLabel.text = FileAccess.open("res://licenses.txt", FileAccess.READ).get_as_text()
|
||||
advance_sfx()
|
||||
$CanvasLayer/LicensesWindow.show()
|
||||
|
||||
func start_new_game():
|
||||
FileGlobals.current_load_source = FileGlobals.VNLoadSource.NEW_GAME
|
||||
get_tree().change_scene_to_packed(vn_scene)
|
||||
|
||||
func _on_licenses_window_close_requested():
|
||||
advance_sfx()
|
||||
$CanvasLayer/LicensesWindow.hide()
|
||||
|
||||
func _on_mute_button_pressed():
|
||||
if FileGlobals.get_global_data("muted"):
|
||||
unmute()
|
||||
else:
|
||||
mute()
|
||||
|
||||
func _on_new_game_button_pressed():
|
||||
advance_sfx()
|
||||
start_new_game()
|
||||
|
||||
func _on_continue_button_pressed():
|
||||
advance_sfx()
|
||||
$CanvasLayer/ContinueMenuControl.visible = true
|
||||
$CanvasLayer/ContinueMenuControl/ReturnToMainMenuButtonContainer/ReturnToMainMenuButton.grab_focus()
|
||||
$CanvasLayer/MainMenuControl.visible = false
|
||||
|
||||
func _on_credits_button_pressed():
|
||||
advance_sfx()
|
||||
$CanvasLayer/CreditsMenuControl.visible = true
|
||||
$CanvasLayer/CreditsMenuControl/ReturnToMainMenuButtonContainer/ReturnToMainMenuButton.grab_focus()
|
||||
$CanvasLayer/MainMenuControl.visible = false
|
||||
|
||||
# Return to main menu
|
||||
func _on_return_to_main_menu_from_continue():
|
||||
$CanvasLayer/MainMenuControl/ButtonsMarginContainer/VBoxContainer/Continue/ContinueButton.grab_focus()
|
||||
_on_return_to_main_menu()
|
||||
|
||||
func _on_return_to_main_menu_from_credits():
|
||||
$CanvasLayer/MainMenuControl/ButtonsMarginContainer/VBoxContainer/Credits/CreditsButton.grab_focus()
|
||||
_on_return_to_main_menu()
|
||||
|
||||
func _on_return_to_main_menu():
|
||||
advance_sfx()
|
||||
$CanvasLayer/MainMenuControl.visible = true
|
||||
$CanvasLayer/CreditsMenuControl.visible = false
|
||||
$CanvasLayer/ContinueMenuControl.visible = false
|
||||
$CanvasLayer/LicensesWindow.hide()
|
||||
|
||||
func _on_credits_rich_text_meta_clicked(meta):
|
||||
match meta:
|
||||
"licenses":
|
||||
show_licenses()
|
||||
"bonus_music":
|
||||
FileGlobals.new_game_save_file["current_vn"] = "bonus_music"
|
||||
start_new_game()
|
||||
"bonus_animation":
|
||||
FileGlobals.new_game_save_file["current_vn"] = "bonus_animation"
|
||||
advance_sfx()
|
||||
start_new_game()
|
||||
"bonus_fishing":
|
||||
FileGlobals.new_game_save_file["current_vn"] = "bonus_fishing"
|
||||
advance_sfx()
|
||||
start_new_game()
|
||||
_:
|
||||
if meta.left(8) == "https://":
|
||||
advance_sfx()
|
||||
OS.shell_open(meta)
|
||||
else:
|
||||
push_warning("Unhandled [url] meta '%s'" % meta)
|
||||
|
||||
func _on_save_item_list_item_selected(index):
|
||||
FileGlobals.current_load_file = FileGlobals.save_files[index]
|
||||
if FileGlobals.current_load_file.get("is_autosave"):
|
||||
FileGlobals.current_load_source = FileGlobals.VNLoadSource.FROM_AUTOSAVE
|
||||
else:
|
||||
FileGlobals.current_load_source = FileGlobals.VNLoadSource.FROM_MANUAL_SAVE
|
||||
advance_sfx()
|
||||
get_tree().change_scene_to_packed(vn_scene)
|
||||
|
||||
#func _on_load_save_button_focus_entered():
|
||||
# if %LoadSaveButton.disabled:
|
||||
# %LoadSaveButton.find_next_valid_focus().grab_focus()
|
||||
#
|
||||
#func _on_load_save_button_focus_exited():
|
||||
# $AnimationPlayer.play("save_file_desselected")
|
||||
# await $AnimationPlayer.animation_finished
|
||||
#
|
||||
#func _on_load_save_button_pressed():
|
||||
# advance_sfx()
|
||||
# get_tree().change_scene_to_packed(vn_scene)
|
||||
|
||||
func _on_website_button_pressed():
|
||||
_on_credits_rich_text_meta_clicked("https://badmanners.xyz")
|
||||
|
||||
func _on_licenses_button_pressed():
|
||||
if $CanvasLayer/LicensesWindow.visible:
|
||||
advance_sfx()
|
||||
$CanvasLayer/LicensesWindow.hide()
|
||||
else:
|
||||
show_licenses()
|
||||
|
||||
func _on_music_room_button_pressed():
|
||||
_on_credits_rich_text_meta_clicked("bonus_music")
|
||||
|
||||
func _on_play_video_button_pressed():
|
||||
_on_credits_rich_text_meta_clicked("bonus_animation")
|
||||
|
||||
func _on_fishing_minigame_button_pressed():
|
||||
_on_credits_rich_text_meta_clicked("bonus_fishing")
|
||||
|
||||
func _on_volume_slider_value_changed(value):
|
||||
FileGlobals.set_global_data("volume", value)
|
||||
if not FileGlobals.get_global_data("muted", false):
|
||||
MusicManager.set_volume(value)
|
||||
1326
scenes/screens/main_menu.tscn
Normal file
1326
scenes/screens/main_menu.tscn
Normal file
File diff suppressed because it is too large
Load diff
61
scenes/screens/vis2CE9.tmp
Normal file
61
scenes/screens/vis2CE9.tmp
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
[gd_scene load_steps=15 format=3 uid="uid://4v1jmfn8kjpg"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b3hnb4vtqq6p3" path="res://scenes/ui_elements/textbox.tscn" id="1_7wls5"]
|
||||
[ext_resource type="Script" path="res://scenes/screens/visual_novel.gd" id="1_hggao"]
|
||||
[ext_resource type="PackedScene" uid="uid://x4yl51efxs5s" path="res://scenes/ui_elements/chat_log.tscn" id="3_cvy53"]
|
||||
[ext_resource type="PackedScene" uid="uid://db604d7kgvdrt" path="res://scenes/ui_elements/prompt.tscn" id="3_fgnej"]
|
||||
[ext_resource type="PackedScene" uid="uid://jfv4ss4g55mw" path="res://scenes/logic/vn_interpreter.tscn" id="5_3vb6j"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/music_manager/music_bank.gd" id="6_sqlrv"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/music_manager/music_track_resource.gd" id="7_so7qg"]
|
||||
[ext_resource type="Script" path="res://addons/resonate/music_manager/music_stem_resource.gd" id="8_74ruw"]
|
||||
[ext_resource type="AudioStream" uid="uid://bnvod0ng5ci14" path="res://music/LooseThoughts.mp3" id="9_4awv5"]
|
||||
[ext_resource type="AudioStream" uid="uid://4oq4eo5jxtw1" path="res://music/AboardTheAkhirah.mp3" id="10_5nc5r"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_gpkbv"]
|
||||
script = ExtResource("8_74ruw")
|
||||
name = "main"
|
||||
enabled = true
|
||||
volume = 0.0
|
||||
stream = ExtResource("9_4awv5")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_nuey8"]
|
||||
script = ExtResource("7_so7qg")
|
||||
name = "loose_thoughts"
|
||||
bus = ""
|
||||
stems = Array[ExtResource("8_74ruw")]([SubResource("Resource_gpkbv")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_38r80"]
|
||||
script = ExtResource("8_74ruw")
|
||||
name = "main"
|
||||
enabled = true
|
||||
volume = 0.0
|
||||
stream = ExtResource("10_5nc5r")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_grrpr"]
|
||||
script = ExtResource("7_so7qg")
|
||||
name = "aboard_the_akhirah"
|
||||
bus = ""
|
||||
stems = Array[ExtResource("8_74ruw")]([SubResource("Resource_38r80")])
|
||||
|
||||
[node name="VisualNovel" type="Node2D"]
|
||||
script = ExtResource("1_hggao")
|
||||
|
||||
[node name="Background" type="Node2D" parent="."]
|
||||
|
||||
[node name="Sprites" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="Textbox" parent="." instance=ExtResource("1_7wls5")]
|
||||
|
||||
[node name="Prompt" parent="." instance=ExtResource("3_fgnej")]
|
||||
|
||||
[node name="ChatLog" parent="." instance=ExtResource("3_cvy53")]
|
||||
|
||||
[node name="VNInterpreter" parent="." instance=ExtResource("5_3vb6j")]
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
one_shot = true
|
||||
|
||||
[node name="MusicBank" type="Node" parent="."]
|
||||
script = ExtResource("6_sqlrv")
|
||||
label = "vn_music"
|
||||
tracks = Array[ExtResource("7_so7qg")]([SubResource("Resource_nuey8"), SubResource("Resource_grrpr")])
|
||||
21
scenes/screens/visCB57.tmp
Normal file
21
scenes/screens/visCB57.tmp
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://4v1jmfn8kjpg"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b3hnb4vtqq6p3" path="res://scenes/ui_elements/textbox.tscn" id="1_7wls5"]
|
||||
[ext_resource type="Script" path="res://scenes/screens/visual_novel.gd" id="1_hggao"]
|
||||
[ext_resource type="PackedScene" uid="uid://x4yl51efxs5s" path="res://scenes/ui_elements/chat_log.tscn" id="3_cvy53"]
|
||||
[ext_resource type="PackedScene" uid="uid://db604d7kgvdrt" path="res://scenes/ui_elements/prompt.tscn" id="3_fgnej"]
|
||||
[ext_resource type="PackedScene" uid="uid://jfv4ss4g55mw" path="res://scenes/logic/vn_interpreter.tscn" id="5_3vb6j"]
|
||||
|
||||
[node name="VisualNovel" type="Node2D"]
|
||||
script = ExtResource("1_hggao")
|
||||
|
||||
[node name="Textbox" parent="." instance=ExtResource("1_7wls5")]
|
||||
|
||||
[node name="Prompt" parent="." instance=ExtResource("3_fgnej")]
|
||||
visible = false
|
||||
|
||||
[node name="ChatLog" parent="." instance=ExtResource("3_cvy53")]
|
||||
|
||||
[node name="VNInterpreter" parent="." instance=ExtResource("5_3vb6j")]
|
||||
|
||||
[connection signal="prompt_option_selected" from="Prompt" to="VNInterpreter" method="_on_prompt_prompt_option_selected"]
|
||||
272
scenes/screens/visual_novel.gd
Normal file
272
scenes/screens/visual_novel.gd
Normal file
|
|
@ -0,0 +1,272 @@
|
|||
extends Node2D
|
||||
|
||||
var can_advance_text = true
|
||||
|
||||
var vn_current_name = null
|
||||
var vn_save_state = null
|
||||
|
||||
var fishing_minigame_label = ""
|
||||
var fishing_minigame_finished = false
|
||||
var fishing_minigame_active = false
|
||||
|
||||
const SHOULD_SAVE_PARSED_BUFFERS = false
|
||||
const START_VN_NAME = "00_content_warning"
|
||||
|
||||
signal autosaved
|
||||
signal quick_saved
|
||||
|
||||
func _ready():
|
||||
if not FileGlobals.has_loaded:
|
||||
await FileGlobals.loaded
|
||||
if not MusicManager.has_loaded:
|
||||
await MusicManager.loaded
|
||||
|
||||
#if SHOULD_SAVE_PARSED_BUFFERS:
|
||||
# parse_all_txt_scenes()
|
||||
|
||||
$FishingMinigame.visible = false
|
||||
$ChatLog.visible = false
|
||||
|
||||
# Get current load source from file globals
|
||||
load_game(FileGlobals.current_load_source, FileGlobals.current_load_file)
|
||||
#run_visual_novel(vn_current_name, FileGlobals.current_load_source == FileGlobals.VNLoadSource.NEW_GAME, vn_save_state)
|
||||
run_visual_novel(vn_current_name, false, vn_save_state)
|
||||
|
||||
func _process(_delta):
|
||||
if Input.is_action_just_pressed("quicksave"):
|
||||
if save_game(FileGlobals.VNSaveTarget.MANUAL_SAVE):
|
||||
quick_saved.emit()
|
||||
elif Input.is_action_just_pressed("log"):
|
||||
toggle_chatlog()
|
||||
elif Input.is_action_just_pressed("ui_accept"):
|
||||
if should_process_click():
|
||||
#if $Textbox.is_ready():
|
||||
if $Textbox.is_idle():
|
||||
can_advance_text = false
|
||||
$TimerCanAdvanceText.start()
|
||||
vn_step()
|
||||
else:
|
||||
$Textbox.skip()
|
||||
elif Input.is_action_just_pressed("click"):
|
||||
if should_process_click():
|
||||
if $Textbox.is_idle():
|
||||
var mouse_position = get_global_mouse_position()
|
||||
if mouse_position.x <= 60 and mouse_position.y <= 60:
|
||||
toggle_chatlog()
|
||||
else:
|
||||
can_advance_text = false
|
||||
$TimerCanAdvanceText.start()
|
||||
vn_step()
|
||||
else:
|
||||
$Textbox.skip()
|
||||
#if should_advance_textbox():
|
||||
# if $Textbox.is_ready():
|
||||
# vn_step()
|
||||
# else:
|
||||
# $Textbox.skip()
|
||||
|
||||
func should_process_click() -> bool:
|
||||
return can_advance_text and not fishing_minigame_active and not $ChatLog.visible
|
||||
|
||||
#func should_advance_textbox() -> bool:
|
||||
# if fishing_minigame_active or $ChatLog.visible:
|
||||
# return false
|
||||
# if Input.is_action_just_pressed("ui_accept"):
|
||||
# return true
|
||||
# if Input.is_action_just_pressed("click"):
|
||||
# var mouse_position = get_global_mouse_position()
|
||||
# if mouse_position.x <= 60 and mouse_position.y <= 60:
|
||||
# toggle_chatlog()
|
||||
# return false
|
||||
# return true
|
||||
# return false
|
||||
|
||||
func toggle_chatlog():
|
||||
if $ChatLog.visible:
|
||||
$ChatLog.visible = false
|
||||
$VNInterpreter.advance_sfx()
|
||||
elif $Textbox.is_ready():
|
||||
$ChatLog.visible = true
|
||||
#$ChatLog.scroll_to_end()
|
||||
$ChatLog/CloseChatLogButtonContainer/CloseChatLogButton.grab_focus()
|
||||
$VNInterpreter.advance_sfx()
|
||||
else:
|
||||
print_debug("Can't open chatlog right now!")
|
||||
|
||||
func load_game(load_source: FileGlobals.VNLoadSource, load_file):
|
||||
var save_data = FileGlobals.load_save_file(load_source, load_file)
|
||||
vn_current_name = save_data.get("current_vn", START_VN_NAME)
|
||||
vn_save_state = save_data.get("save_state", {})
|
||||
|
||||
func save_game(save_target: FileGlobals.VNSaveTarget):
|
||||
#if $FishingMinigame.visible or $ChatLog.visible or not $VNInterpreter.can_save():
|
||||
if $FishingMinigame.visible or not $VNInterpreter.can_save():
|
||||
print_debug("Can't save VN right now!")
|
||||
return false
|
||||
vn_save_state = $VNInterpreter.save_vn()
|
||||
FileGlobals.create_save_file(save_target, {"current_vn": vn_current_name, "save_state": vn_save_state}, vn_save_state["title"])
|
||||
return true
|
||||
|
||||
func parse_all_txt_scenes():
|
||||
DirAccess.make_dir_absolute("user://compiled_scenes")
|
||||
for path in DirAccess.get_files_at("res://scenes/visual_novels"):
|
||||
if path.ends_with(".txt"):
|
||||
var data = $VNInterpreter.parse_vn_file("res://scenes/visual_novels/%s" % path)
|
||||
var file = FileAccess.open("user://compiled_scenes/%s.buf" % path.left(-4), FileAccess.WRITE)
|
||||
file.store_buffer(var_to_bytes_with_objects(data))
|
||||
file.close()
|
||||
|
||||
func run_visual_novel(vn_scene, should_autosave: bool = false, save_state = {}):
|
||||
vn_current_name = vn_scene
|
||||
# Find source for current file
|
||||
var file = null
|
||||
# Try pre-parsed scene first
|
||||
var should_parse = false
|
||||
var vn_file = "res://scenes/visual_novels/%s.buf" % vn_current_name
|
||||
file = FileAccess.open(vn_file, FileAccess.READ)
|
||||
if file:
|
||||
file.close()
|
||||
else:
|
||||
# Try unparsed scene
|
||||
should_parse = true
|
||||
vn_file = "res://scenes/visual_novels/%s.txt" % vn_current_name
|
||||
file = FileAccess.open(vn_file, FileAccess.READ)
|
||||
if file:
|
||||
file.close()
|
||||
else:
|
||||
assert(false, "Cannot find next VN scene '%s'!" % vn_scene)
|
||||
push_warning("Visual novel (%s) not found. Restarting visual novel..." % vn_scene)
|
||||
vn_current_name = START_VN_NAME
|
||||
save_state = {}
|
||||
|
||||
var data = null
|
||||
if should_parse:
|
||||
# Parse the original file
|
||||
data = $VNInterpreter.parse_vn_file(vn_file)
|
||||
# Store parsed data
|
||||
if SHOULD_SAVE_PARSED_BUFFERS:
|
||||
DirAccess.make_dir_absolute("user://compiled_scenes")
|
||||
file = FileAccess.open("user://compiled_scenes/%s.buf" % vn_current_name, FileAccess.WRITE)
|
||||
file.store_buffer(var_to_bytes_with_objects(data))
|
||||
file.close()
|
||||
else:
|
||||
# Load previously parsed data directly
|
||||
file = FileAccess.open(vn_file, FileAccess.READ)
|
||||
data = bytes_to_var_with_objects(file.get_buffer(file.get_length()))
|
||||
file.close()
|
||||
|
||||
# Make sure MusicManager is ready before proceeding
|
||||
if not MusicManager.has_loaded:
|
||||
await MusicManager.loaded
|
||||
|
||||
await $VNInterpreter.load_vn_data(data, save_state)
|
||||
|
||||
# Autosave only when loading a new VN
|
||||
if should_autosave:
|
||||
var saved = save_game(FileGlobals.VNSaveTarget.AUTOSAVE)
|
||||
if vn_scene != START_VN_NAME and saved:
|
||||
autosaved.emit()
|
||||
|
||||
vn_step()
|
||||
|
||||
func vn_step(label = null):
|
||||
while true:
|
||||
var vn_value = await $VNInterpreter.advance_vn(label)
|
||||
label = null
|
||||
match vn_value:
|
||||
[]:
|
||||
return
|
||||
["@escape", ..]:
|
||||
match vn_value.slice(1):
|
||||
# @escape print my_var $my_var
|
||||
["print", var value]:
|
||||
print("@print ", value)
|
||||
# @escape store_global name john_doe
|
||||
["store_global", var key, var value]:
|
||||
FileGlobals.set_global_data(key, value)
|
||||
# @escape fishing done_fishing 0.5 false {"name":"label_for_fishing_01","sprite":"sprite_name_01"} {...}
|
||||
["fishing", var label_finished, var difficulty_str, var boat_is_moving_str, ..]:
|
||||
fishing_minigame_label = label_finished
|
||||
var difficulty = float(difficulty_str)
|
||||
var is_moving = boat_is_moving_str == "true"
|
||||
fishing_minigame_finished = false
|
||||
var targets = []
|
||||
for target_json in vn_value.slice(5):
|
||||
var target = JSON.parse_string(target_json)
|
||||
target["sprite"] = load("res://images/sprites/fishing_targets/%s.png" % target["sprite"])
|
||||
targets.append(target)
|
||||
$FishingMinigame.start_fishing_minigame(targets, difficulty, is_moving)
|
||||
fishing_minigame_active = true
|
||||
$FishingMinigame.visible = true
|
||||
#$FishingMinigame/Net.can_move = true
|
||||
$TimerNetCanMove.start()
|
||||
$Sprites.visible = false
|
||||
$Textbox.visible = false
|
||||
$OverlayColor.visible = false
|
||||
$Prompt.visible = false
|
||||
# $ChatLog.visible = false
|
||||
can_advance_text = false
|
||||
return
|
||||
["return_to_fishing"]:
|
||||
if fishing_minigame_finished:
|
||||
$FishingMinigame.visible = false
|
||||
#$FishingMinigame/Net.can_move = false
|
||||
$Sprites.visible = true
|
||||
$Textbox.visible = true
|
||||
$OverlayColor.visible = true
|
||||
$Prompt.visible = true
|
||||
# $ChatLog.visible = true
|
||||
label = fishing_minigame_label
|
||||
else:
|
||||
fishing_minigame_active = true
|
||||
#$FishingMinigame/Net.can_move = true
|
||||
$TimerNetCanMove.start()
|
||||
$Sprites.visible = false
|
||||
$Textbox.visible = false
|
||||
$OverlayColor.visible = false
|
||||
$Prompt.visible = false
|
||||
# $ChatLog.visible = false
|
||||
return
|
||||
_:
|
||||
push_warning("Unhandled @escape ", vn_value.slice(1))
|
||||
return
|
||||
["@load", var next_scene, ..]:
|
||||
run_visual_novel(next_scene, true)
|
||||
return
|
||||
["@eof"]:
|
||||
push_warning("Reached end of VN instead of exiting gracefully!")
|
||||
get_tree().change_scene_to_file("res://scenes/screens/main_menu.tscn")
|
||||
return
|
||||
["@quit"]:
|
||||
get_tree().change_scene_to_file("res://scenes/screens/main_menu.tscn")
|
||||
return
|
||||
_:
|
||||
push_warning("Unknown interrupt ", vn_value)
|
||||
|
||||
func _on_fishing_minigame_fished(target_name):
|
||||
can_advance_text = false
|
||||
$TimerCanAdvanceText.start()
|
||||
fishing_minigame_active = false
|
||||
$FishingMinigame/Net.can_move = false
|
||||
$Sprites.visible = true
|
||||
$Textbox.visible = true
|
||||
$OverlayColor.visible = true
|
||||
$Prompt.visible = true
|
||||
# $ChatLog.visible = true
|
||||
vn_step(target_name)
|
||||
|
||||
func _on_fishing_minigame_fished_all_targets():
|
||||
fishing_minigame_finished = true
|
||||
|
||||
func _on_timer_net_can_move_timeout():
|
||||
$FishingMinigame/Net.can_move = true
|
||||
|
||||
func _on_timer_can_advance_text_timeout():
|
||||
can_advance_text = true
|
||||
|
||||
func _on_close_chat_log_button_pressed():
|
||||
toggle_chatlog()
|
||||
|
||||
func _on_quicksave_button_pressed():
|
||||
if save_game(FileGlobals.VNSaveTarget.MANUAL_SAVE):
|
||||
quick_saved.emit()
|
||||
1818
scenes/screens/visual_novel.tscn
Normal file
1818
scenes/screens/visual_novel.tscn
Normal file
File diff suppressed because it is too large
Load diff
120
scenes/ui_elements/chat_log.gd
Normal file
120
scenes/ui_elements/chat_log.gd
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
extends CanvasLayer
|
||||
|
||||
const MAX_LOG_SIZE = 100
|
||||
const CLEAN_BUCKET = 10
|
||||
var message_count = 0
|
||||
|
||||
@onready var scroll_container: ScrollContainer = $ScrollContainer
|
||||
@onready var chat_log_lines_container: VBoxContainer = $ScrollContainer/ChatLogLinesContainer
|
||||
@onready var chat_log_line = preload("res://scenes/ui_elements/chat_log_line.tscn")
|
||||
|
||||
var scroll_bar = null
|
||||
var scroll_value = 0
|
||||
var current_max_scroll = 0
|
||||
|
||||
var mouse_dragging = false
|
||||
var mouse_scrolling = false
|
||||
var mouse_dragging_initial_scroll_value = 0
|
||||
var mouse_dragging_initial_pos = 0
|
||||
var mouse_dragging_last_pos = Vector2.ZERO
|
||||
|
||||
func _ready():
|
||||
scroll_bar = scroll_container.get_v_scroll_bar()
|
||||
scroll_bar.changed.connect(_on_scroll_bar_changed)
|
||||
scroll_bar.gui_input.connect(_on_scroll_bar_gui_input)
|
||||
scroll_bar.set_deferred("custom_minimum_size", Vector2(20, scroll_bar.custom_minimum_size.y))
|
||||
scroll_bar.set_deferred("position", Vector2(scroll_container.size.x - 20, 0))
|
||||
#scroll_value = scroll_bar.max_value
|
||||
#scroll_container.scroll_vertical = scroll_value
|
||||
|
||||
func _process(delta):
|
||||
if visible:
|
||||
set_scroll_vertical(scroll_value + Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down").y * delta * 1000)
|
||||
|
||||
func add_line(speaker_text: String, speaker_name: String = ""):
|
||||
clean_log()
|
||||
var line = chat_log_line.instantiate()
|
||||
if speaker_name:
|
||||
line.get_node("NameLabel").text = speaker_name
|
||||
else:
|
||||
line.get_node("NameLabel").visible = false
|
||||
line.get_node("TextLabel").text = " %s" % speaker_text
|
||||
chat_log_lines_container.add_child(line)
|
||||
message_count += 1
|
||||
|
||||
func add_selected_option_text(selected_option_text: String):
|
||||
clean_log()
|
||||
var line = chat_log_line.instantiate()
|
||||
line.get_node("NameLabel").text = "◆ Option ◆"
|
||||
line.get_node("TextLabel").text = " %s" % selected_option_text
|
||||
chat_log_lines_container.add_child(line)
|
||||
message_count += 1
|
||||
|
||||
func clean_log():
|
||||
if message_count >= MAX_LOG_SIZE:
|
||||
var children = chat_log_lines_container.get_children()
|
||||
for i in CLEAN_BUCKET:
|
||||
var child = children[i]
|
||||
chat_log_lines_container.remove_child(child)
|
||||
child.visible = false
|
||||
child.queue_free()
|
||||
message_count -= CLEAN_BUCKET
|
||||
|
||||
func set_scroll_vertical(value):
|
||||
scroll_value = clamp(value, 0, current_max_scroll - scroll_container.size.y)
|
||||
scroll_container.scroll_vertical = scroll_value
|
||||
|
||||
func _on_scroll_bar_changed():
|
||||
if scroll_bar.max_value != current_max_scroll:
|
||||
current_max_scroll = scroll_bar.max_value
|
||||
scroll_value = max(0, current_max_scroll - scroll_container.size.y)
|
||||
scroll_container.scroll_vertical = scroll_value
|
||||
|
||||
func _on_scroll_container_gui_input(event: InputEvent):
|
||||
if event is InputEventMouseButton:
|
||||
match event.button_index:
|
||||
MOUSE_BUTTON_LEFT:
|
||||
if event.pressed and not mouse_dragging:
|
||||
mouse_dragging = true
|
||||
mouse_scrolling = false
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
#scroll_value = mouse_dragging_initial_scroll_value
|
||||
elif not event.pressed and mouse_dragging:
|
||||
mouse_dragging = false
|
||||
mouse_scrolling = false
|
||||
MOUSE_BUTTON_WHEEL_UP:
|
||||
set_scroll_vertical(scroll_value - 40)
|
||||
MOUSE_BUTTON_WHEEL_DOWN:
|
||||
set_scroll_vertical(scroll_value + 40)
|
||||
elif event is InputEventMouseMotion and mouse_dragging:
|
||||
# Fix for mobile touch and release not being detected; assume any instant jump in cursor distance of ~350px or more is a reset
|
||||
if event.global_position.distance_squared_to(mouse_dragging_last_pos) >= 120_000:
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
else:
|
||||
set_scroll_vertical(mouse_dragging_initial_scroll_value - (event.global_position.y - mouse_dragging_initial_pos))
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
|
||||
func _on_scroll_bar_gui_input(event: InputEvent):
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == MOUSE_BUTTON_LEFT:
|
||||
if event.pressed and not mouse_scrolling:
|
||||
mouse_dragging = false
|
||||
mouse_scrolling = true
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
#scroll_value = mouse_dragging_initial_scroll_value
|
||||
elif not event.pressed and mouse_scrolling:
|
||||
mouse_dragging = false
|
||||
mouse_scrolling = false
|
||||
elif event is InputEventMouseMotion and mouse_scrolling:
|
||||
# Fix for mobile touch and release not being detected; assume any instant jump in cursor distance of ~350px or more is a reset
|
||||
if event.global_position.distance_squared_to(mouse_dragging_last_pos) >= 120_000:
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
else:
|
||||
set_scroll_vertical(mouse_dragging_initial_scroll_value + (current_max_scroll / scroll_bar.page) * (event.global_position.y - mouse_dragging_initial_pos))
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
6
scenes/ui_elements/chat_log.tscn
Normal file
6
scenes/ui_elements/chat_log.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://x4yl51efxs5s"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/chat_log.gd" id="1_gtkh7"]
|
||||
|
||||
[node name="ChatLog" type="CanvasLayer"]
|
||||
script = ExtResource("1_gtkh7")
|
||||
41
scenes/ui_elements/chat_log_line.tscn
Normal file
41
scenes/ui_elements/chat_log_line.tscn
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://b7un1h6gdp8bq"]
|
||||
|
||||
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="1_erynh"]
|
||||
|
||||
[node name="ChatLogLine" type="HBoxContainer"]
|
||||
anchors_preset = 14
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -13.0
|
||||
offset_bottom = 13.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="NameLabel" type="Label" parent="."]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
theme = ExtResource("1_erynh")
|
||||
theme_override_colors/font_color = Color(0.698039, 0.717647, 0.823529, 1)
|
||||
text = "Name "
|
||||
horizontal_alignment = 1
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[node name="TextLabel" type="RichTextLabel" parent="."]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_filter = 2
|
||||
theme = ExtResource("1_erynh")
|
||||
bbcode_enabled = true
|
||||
text = "What the [color=#f00]fuck[/color]?!"
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
shortcut_keys_enabled = false
|
||||
meta_underlined = false
|
||||
hint_underlined = false
|
||||
drag_and_drop_selection_enabled = false
|
||||
visible_characters_behavior = 1
|
||||
29
scenes/ui_elements/prompt.gd
Normal file
29
scenes/ui_elements/prompt.gd
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
extends CanvasLayer
|
||||
|
||||
signal prompt_option_selected(option_label, option_text)
|
||||
|
||||
var prompt_option_scene: PackedScene = preload("res://scenes/ui_elements/prompt_option.tscn")
|
||||
|
||||
func clear_options():
|
||||
for child in $VBoxContainer.get_children():
|
||||
child.queue_free()
|
||||
|
||||
func show_prompt():
|
||||
visible = true
|
||||
$AnimationPlayer.play("show_prompt")
|
||||
await $AnimationPlayer.animation_finished
|
||||
var first_option = $VBoxContainer.get_child(0)
|
||||
if first_option:
|
||||
first_option.get_child(0).grab_focus()
|
||||
|
||||
func hide_prompt():
|
||||
visible = false
|
||||
$AnimationPlayer.play_backwards("show_prompt")
|
||||
|
||||
func create_option(option_label: String, option_text: String):
|
||||
var option = prompt_option_scene.instantiate()
|
||||
option.init_option(self, option_label, option_text)
|
||||
$VBoxContainer.add_child(option)
|
||||
|
||||
func on_option_selected(label: String, text: String):
|
||||
prompt_option_selected.emit(label, text)
|
||||
102
scenes/ui_elements/prompt.tscn
Normal file
102
scenes/ui_elements/prompt.tscn
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://db604d7kgvdrt"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/prompt.gd" id="1_hyk7g"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_rdapi"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("PanelContainer:modulate")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("VBoxContainer:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_tuv2n"]
|
||||
resource_name = "show_prompt"
|
||||
length = 0.5
|
||||
step = 0.25
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("PanelContainer:modulate")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("VBoxContainer:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ek38c"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_rdapi"),
|
||||
"show_prompt": SubResource("Animation_tuv2n")
|
||||
}
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w4jq4"]
|
||||
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.501961)
|
||||
|
||||
[node name="Prompt" type="CanvasLayer"]
|
||||
script = ExtResource("1_hyk7g")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_ek38c")
|
||||
}
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_w4jq4")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(532, 0)
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -266.0
|
||||
offset_right = 266.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/separation = 52
|
||||
alignment = 1
|
||||
12
scenes/ui_elements/prompt_option.gd
Normal file
12
scenes/ui_elements/prompt_option.gd
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
extends Control
|
||||
|
||||
var prompt = null
|
||||
|
||||
func _on_option_button_pressed():
|
||||
prompt.prompt_option_selected.emit(get_meta("option_label"), get_meta("option_text"))
|
||||
|
||||
func init_option(parent_prompt: Node, new_label: String, new_text: String):
|
||||
prompt = parent_prompt
|
||||
set_meta("option_label", new_label)
|
||||
set_meta("option_text", new_text)
|
||||
$OptionButton/NameFrame/Option/OptionLabel.text = new_text
|
||||
113
scenes/ui_elements/prompt_option.tscn
Normal file
113
scenes/ui_elements/prompt_option.tscn
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://ce1bk8d2kdx2d"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://ykb3qmxlb1ph" path="res://images/ui/panel-border-014.png" id="1_j6xkn"]
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/prompt_option.gd" id="1_ybyts"]
|
||||
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="2_xbmem"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_440le"]
|
||||
bg_color = Color(0.74902, 0.74902, 0.74902, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_05h6u"]
|
||||
bg_color = Color(0.517647, 0.517647, 0.517647, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 3
|
||||
border_color = Color(0.203922, 0.482353, 0.85098, 1)
|
||||
corner_radius_top_left = 6
|
||||
corner_radius_top_right = 2
|
||||
corner_radius_bottom_right = 2
|
||||
corner_radius_bottom_left = 2
|
||||
expand_margin_left = 3.0
|
||||
expand_margin_top = 3.0
|
||||
expand_margin_right = 3.0
|
||||
expand_margin_bottom = 3.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ujclv"]
|
||||
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.752941)
|
||||
corner_radius_top_left = 14
|
||||
corner_radius_top_right = 14
|
||||
corner_radius_bottom_right = 14
|
||||
corner_radius_bottom_left = 14
|
||||
|
||||
[node name="PromptOption" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
grow_horizontal = 2
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 8
|
||||
script = ExtResource("1_ybyts")
|
||||
metadata/option_label = ""
|
||||
metadata/option_text = ""
|
||||
|
||||
[node name="OptionButton" type="Button" parent="."]
|
||||
custom_minimum_size = Vector2(0, 26)
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 512.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_styles/hover = SubResource("StyleBoxFlat_440le")
|
||||
theme_override_styles/focus = SubResource("StyleBoxFlat_05h6u")
|
||||
keep_pressed_outside = true
|
||||
|
||||
[node name="Panel" type="Panel" parent="OptionButton"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_ujclv")
|
||||
|
||||
[node name="NameFrame" type="NinePatchRect" parent="OptionButton"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("1_j6xkn")
|
||||
draw_center = false
|
||||
patch_margin_left = 14
|
||||
patch_margin_top = 14
|
||||
patch_margin_right = 14
|
||||
patch_margin_bottom = 14
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Option" type="MarginContainer" parent="OptionButton/NameFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 532.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="OptionLabel" type="RichTextLabel" parent="OptionButton/NameFrame/Option"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
mouse_filter = 2
|
||||
theme = ExtResource("2_xbmem")
|
||||
bbcode_enabled = true
|
||||
text = "Button text"
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
autowrap_mode = 0
|
||||
shortcut_keys_enabled = false
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[connection signal="pressed" from="OptionButton" to="." method="_on_option_button_pressed"]
|
||||
11
scenes/ui_elements/sprites.gd
Normal file
11
scenes/ui_elements/sprites.gd
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
extends CanvasLayer
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
64
scenes/ui_elements/textbox.gd
Normal file
64
scenes/ui_elements/textbox.gd
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
extends CanvasLayer
|
||||
|
||||
|
||||
var is_textbox_visible: bool = false
|
||||
var is_textbox_expanded: bool = false
|
||||
|
||||
func is_ready() -> bool:
|
||||
return $AnimationPlayer.current_animation == "" or $AnimationPlayer.current_animation == "textbox_idle"
|
||||
|
||||
func is_idle() -> bool:
|
||||
return $AnimationPlayer.current_animation == "textbox_idle"
|
||||
|
||||
func skip():
|
||||
if $AnimationPlayer.current_animation == "write_text" or $AnimationPlayer.current_animation == "collapse_textbox" or $AnimationPlayer.current_animation == "expand_textbox":
|
||||
$AnimationPlayer.seek(0.9999, true)
|
||||
|
||||
func await_pending_animations():
|
||||
if not is_ready():
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func show_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play("show_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func hide_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play_backwards("show_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func expand_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play("expand_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func collapse_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play("collapse_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func ready_textbox():
|
||||
$AnimationPlayer.play("textbox_idle")
|
||||
|
||||
func disable_textbox():
|
||||
$AnimationPlayer.play("disable_textbox")
|
||||
|
||||
func enable_textbox():
|
||||
if $AnimationPlayer.current_animation == "disable_textbox":
|
||||
$AnimationPlayer.stop()
|
||||
|
||||
func write_text(speaker_text: String, speaker_name: String = ""):
|
||||
var text_label: RichTextLabel = $MarginContainer/VBoxContainer/TextContainer/Text/TextLabel
|
||||
text_label.visible_characters = 0
|
||||
text_label.text = speaker_text
|
||||
if speaker_name:
|
||||
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = speaker_name
|
||||
$MarginContainer/VBoxContainer/NameContainer.visible = true
|
||||
else:
|
||||
$MarginContainer/VBoxContainer/NameContainer.visible = false
|
||||
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = ""
|
||||
# Characters per second
|
||||
var animation_speed = 48.0 / text_label.get_total_character_count()
|
||||
$AnimationPlayer.play("write_text", -1, animation_speed)
|
||||
await $AnimationPlayer.animation_finished
|
||||
802
scenes/ui_elements/textbox.tscn
Normal file
802
scenes/ui_elements/textbox.tscn
Normal file
|
|
@ -0,0 +1,802 @@
|
|||
[gd_scene load_steps=16 format=3 uid="uid://b3hnb4vtqq6p3"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/textbox.gd" id="1_op1eo"]
|
||||
[ext_resource type="Texture2D" uid="uid://djlgpmcjf3djp" path="res://images/ui/panel-border-005.png" id="2_7k7l5"]
|
||||
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="2_guxsf"]
|
||||
[ext_resource type="Texture2D" uid="uid://6lomvlry6h2t" path="res://images/ui/panel-border-012.png" id="4_q4tn7"]
|
||||
[ext_resource type="Texture2D" uid="uid://rusdm825x727" path="res://images/ui/tile_finger_pointing_right.png" id="5_cu26b"]
|
||||
[ext_resource type="Texture2D" uid="uid://b1sfw7ruq8l0a" path="res://images/ui/chat-bubble.svg" id="6_27cyh"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_a34jj"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_characters")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/8/interp = 2
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0)]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/10/interp = 2
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_rto2s"]
|
||||
resource_name = "collapse_textbox"
|
||||
step = 0.25
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(596, 128), Vector2(0, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [18, 0]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/4/interp = 2
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [12, 0]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/5/interp = 2
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [18, 0]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/6/interp = 2
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [12, 0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/9/interp = 2
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lv0k3"]
|
||||
resource_name = "disable_textbox"
|
||||
length = 0.001
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_1wdjj"]
|
||||
resource_name = "expand_textbox"
|
||||
step = 0.25
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(596, 128)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 18]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/4/interp = 2
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 12]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/5/interp = 2
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 18]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/6/interp = 2
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 12]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_characters")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_kvu86"]
|
||||
resource_name = "show_textbox"
|
||||
length = 0.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_u2um3"]
|
||||
resource_name = "textbox_idle"
|
||||
length = 4.5
|
||||
loop_mode = 2
|
||||
step = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("OutsideMarginContainer:theme_override_constants/margin_left")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3, 0.6, 0.9, 1.2, 1.5, 1.8, 2.1, 2.4, 2.7, 3, 3.3, 3.6, 3.9, 4.2, 4.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 3.6, 4.2, 4.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0), Color(0.882353, 0.894118, 0.960784, 0), Color(0.882353, 0.894118, 0.960784, 0.501961), Color(0.882353, 0.894118, 0.960784, 0.501961)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_8t3xa"]
|
||||
resource_name = "write_text"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [18]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [12]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [18]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [12]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_ratio")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0.0, 1.0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/7/interp = 2
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(596, 128)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tk3r4"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_a34jj"),
|
||||
"collapse_textbox": SubResource("Animation_rto2s"),
|
||||
"disable_textbox": SubResource("Animation_lv0k3"),
|
||||
"expand_textbox": SubResource("Animation_1wdjj"),
|
||||
"show_textbox": SubResource("Animation_kvu86"),
|
||||
"textbox_idle": SubResource("Animation_u2um3"),
|
||||
"write_text": SubResource("Animation_8t3xa")
|
||||
}
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6ruof"]
|
||||
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.878431)
|
||||
|
||||
[node name="Textbox" type="CanvasLayer"]
|
||||
script = ExtResource("1_op1eo")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_tk3r4")
|
||||
}
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -12.0
|
||||
offset_top = -56.0
|
||||
offset_right = 12.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 8
|
||||
theme_override_constants/margin_bottom = 32
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 0
|
||||
|
||||
[node name="NameContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 8
|
||||
theme_override_constants/margin_left = 32
|
||||
theme_override_constants/margin_bottom = -2
|
||||
|
||||
[node name="Panel" type="Panel" parent="MarginContainer/VBoxContainer/NameContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_6ruof")
|
||||
|
||||
[node name="NameFrame" type="NinePatchRect" parent="MarginContainer/VBoxContainer/NameContainer"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
texture = ExtResource("2_7k7l5")
|
||||
draw_center = false
|
||||
patch_margin_left = 14
|
||||
patch_margin_top = 14
|
||||
patch_margin_right = 14
|
||||
patch_margin_bottom = 14
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Name" type="MarginContainer" parent="MarginContainer/VBoxContainer/NameContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/NameContainer/Name"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
custom_minimum_size = Vector2(112, 26)
|
||||
layout_mode = 2
|
||||
theme = ExtResource("2_guxsf")
|
||||
text = "Marco"
|
||||
horizontal_alignment = 1
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[node name="TextContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 8
|
||||
|
||||
[node name="Panel" type="Panel" parent="MarginContainer/VBoxContainer/TextContainer"]
|
||||
clip_contents = true
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_6ruof")
|
||||
|
||||
[node name="TextFrame" type="NinePatchRect" parent="MarginContainer/VBoxContainer/TextContainer"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
texture = ExtResource("4_q4tn7")
|
||||
draw_center = false
|
||||
patch_margin_left = 12
|
||||
patch_margin_top = 12
|
||||
patch_margin_right = 12
|
||||
patch_margin_bottom = 12
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Text" type="MarginContainer" parent="MarginContainer/VBoxContainer/TextContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 0
|
||||
theme_override_constants/margin_top = 0
|
||||
theme_override_constants/margin_right = 0
|
||||
theme_override_constants/margin_bottom = 0
|
||||
|
||||
[node name="TextLabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/TextContainer/Text"]
|
||||
visible = false
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
theme = ExtResource("2_guxsf")
|
||||
bbcode_enabled = true
|
||||
text = "What the [color=#f00]fuck[/color]?!"
|
||||
scroll_active = false
|
||||
scroll_following = true
|
||||
shortcut_keys_enabled = false
|
||||
meta_underlined = false
|
||||
hint_underlined = false
|
||||
drag_and_drop_selection_enabled = false
|
||||
visible_characters = 0
|
||||
visible_characters_behavior = 1
|
||||
visible_ratio = 0.0
|
||||
|
||||
[node name="OutsideMarginContainer" type="MarginContainer" parent="."]
|
||||
visible = false
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -12.0
|
||||
offset_top = -56.0
|
||||
offset_right = 12.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 8
|
||||
theme_override_constants/margin_left = 560
|
||||
theme_override_constants/margin_bottom = 42
|
||||
|
||||
[node name="TextureNext" type="TextureRect" parent="OutsideMarginContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
size_flags_vertical = 8
|
||||
texture = ExtResource("5_cu26b")
|
||||
|
||||
[node name="ChatLogIndicatorMarginContainer" type="MarginContainer" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
theme_override_constants/margin_left = 12
|
||||
theme_override_constants/margin_top = 12
|
||||
theme_override_constants/margin_right = 12
|
||||
theme_override_constants/margin_bottom = 12
|
||||
|
||||
[node name="TextureChatLogIndicator" type="TextureRect" parent="ChatLogIndicatorMarginContainer"]
|
||||
self_modulate = Color(0.882353, 0.894118, 0.960784, 0)
|
||||
custom_minimum_size = Vector2(36, 36)
|
||||
layout_mode = 2
|
||||
texture = ExtResource("6_27cyh")
|
||||
7
scenes/ui_elements/textbox_theme.tres
Normal file
7
scenes/ui_elements/textbox_theme.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Theme" load_steps=2 format=3 uid="uid://ckrbqku1sx5ge"]
|
||||
|
||||
[ext_resource type="FontFile" uid="uid://vr3gwqu6tvh6" path="res://fonts/EpilepsySans.ttf" id="1_ic16e"]
|
||||
|
||||
[resource]
|
||||
default_font = ExtResource("1_ic16e")
|
||||
default_font_size = 26
|
||||
190
scenes/ui_elements/vn_sprite.tscn
Normal file
190
scenes/ui_elements/vn_sprite.tscn
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://d1rjb8to843h4"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b2r3y8ou4x24q" path="res://images/sprites/bard/normal.png" id="1_rldh6"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_xnq4c"]
|
||||
resource_name = "RESET"
|
||||
length = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:scale")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 1)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Sprite:position")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(400, 300)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_cer7j"]
|
||||
resource_name = "sprite_1_bounce"
|
||||
length = 0.4
|
||||
step = 0.05
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:scale")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4),
|
||||
"transitions": PackedFloat32Array(2, 1, 2),
|
||||
"update": 0,
|
||||
"values": [Vector2(0.97, 0.9), Vector2(1.05, 1.1), Vector2(1, 1)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Sprite:position")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4),
|
||||
"transitions": PackedFloat32Array(2, 1, 2),
|
||||
"update": 0,
|
||||
"values": [Vector2(400, 360), Vector2(400, 300), Vector2(400, 300)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_624s1"]
|
||||
resource_name = "fade_out"
|
||||
length = 0.4
|
||||
step = 0.025
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3, 0.325),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [true, true, false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:self_modulate")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3, 0.375, 0.4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_yrtof"]
|
||||
resource_name = "fall_down"
|
||||
length = 0.5
|
||||
step = 0.05
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.4, 0.45),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [true, true, false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:position")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4, 0.45, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(400, 300), Vector2(400, 600), Vector2(400, 1300), Vector2(400, 1300), Vector2(400, 300)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_1wxb1"]
|
||||
resource_name = "reveal_fishing_item"
|
||||
length = 1.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:self_modulate")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 1.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 0.965936),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 1), Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2gw37"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_xnq4c"),
|
||||
"bounce": SubResource("Animation_cer7j"),
|
||||
"fade_out": SubResource("Animation_624s1"),
|
||||
"fall_down": SubResource("Animation_yrtof"),
|
||||
"reveal_fishing_item": SubResource("Animation_1wxb1")
|
||||
}
|
||||
|
||||
[node name="VNSprite" type="Node2D"]
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_2gw37")
|
||||
}
|
||||
|
||||
[node name="Sprite" type="Sprite2D" parent="."]
|
||||
position = Vector2(400, 300)
|
||||
texture = ExtResource("1_rldh6")
|
||||
20
scenes/visual_novels/00_content_warning.txt
Normal file
20
scenes/visual_novels/00_content_warning.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
$title Content warning
|
||||
: This visual novel is a game about death, fishing, and vore. It contains purely fictional content deemed inappropriate for minors.
|
||||
: It also deals with heavy subject matters like depression, abuse, and suicide, which may be unsuitable for some audiences.
|
||||
: If you continue, you acknowledge that you're an adult, and accept responsibility for your actions.
|
||||
$prompt
|
||||
$option cw_end Take me out of here!
|
||||
$option cw_accept I accept.
|
||||
$label cw_end
|
||||
$quit
|
||||
$label cw_accept
|
||||
$escape store_global answer $autostop_music
|
||||
$set autostop_music 1
|
||||
$stop_music
|
||||
: Use the Spacebar/[img=center]res://images/ui/tile_controller_ps_cross.png[/img]/[img=center]res://images/ui/tile_controller_xbox_a.png[/img] to advance text.
|
||||
: Use L/Esc/[img=center]res://images/ui/tile_controller_ps_square.png[/img]/[img=center]res://images/ui/tile_controller_xbox_x.png[/img], or click on the top left corner of the screen, to review the text log.
|
||||
: Use Q/[img=center]res://images/ui/tile_controller_ps_triangle.png[/img]/[img=center]res://images/ui/tile_controller_xbox_y.png[/img], or the "Save" button inside of the text log, to quicksave your progress.
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$stop
|
||||
$load 01_autopsy
|
||||
159
scenes/visual_novels/01_autopsy.txt
Normal file
159
scenes/visual_novels/01_autopsy.txt
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
$title Part 1: Autopsy
|
||||
# Everything is dark
|
||||
$start_music ambiance_cave
|
||||
$wait 5
|
||||
$show_textbox
|
||||
$expand_textbox
|
||||
: ...
|
||||
$wait 0.5
|
||||
: ......
|
||||
$wait 0.5
|
||||
: .........
|
||||
$wait 0.5
|
||||
: [color=#b2b7d2](...It feels cold. Why do I feel a draft?)[/color]
|
||||
???: Excuse me!
|
||||
$overlay_color #fff 0.0
|
||||
$overlay_color #ffffff00 0.5
|
||||
: ...?!
|
||||
[color=#b2b7d2](Is someone else here?)[/color]
|
||||
???: Can you hear me?
|
||||
: ...Y-Yes, I can hear you.
|
||||
???: Ah, that's good! And can you see me, too?
|
||||
: Not really.
|
||||
$stop_music 3
|
||||
???: Well, focus on my voice and look at me.
|
||||
: That's a weird way to call someone's attention.
|
||||
???: Never mind that! Just give it a try.
|
||||
$overlay_color #000 0.0
|
||||
$set_background first_shot
|
||||
: A-Alright, here goes...
|
||||
$hide_textbox
|
||||
$overlay_color #fff 1.0
|
||||
$wait 0.5
|
||||
$overlay_color #00000000 1.0
|
||||
$wait 0.3
|
||||
# Marco leaning down
|
||||
: ...! GAH!
|
||||
???: Hey! I assume that random grunt means you can see me, right?
|
||||
: Yeah! And who are YOU? You're huge!
|
||||
Marco: I'm Marco. Pleased to meet you!
|
||||
: Marco, huh. And what is it with the creepy mask?
|
||||
Marco: Oh, it's just something I like wearing. I didn't mean to scare you or anything!
|
||||
: ...
|
||||
Marco: ...
|
||||
Marco: ...What, aren't you going to ask "and what is it with the creepy trench coat"? Or my leg cuffs?
|
||||
: Wh-What? No, the trench coat looks fine on you.
|
||||
# Marco coy or embarrassed
|
||||
$set_background cave_wall_2
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: Hehe, I'll take that as a compliment.
|
||||
: Okay, enough with the jokes. What is going on right now?! Where am I?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Alright, I'll be blunt. The short version of it is that...
|
||||
$set_sprite marco marco_mask/reflect
|
||||
$start_music aboard_the_akhirah
|
||||
Marco: ...You are [color=#00ffff]dead[/color].
|
||||
: ...
|
||||
: ...You're kidding me.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Not at all! You're pretty dead.
|
||||
$set_sprite marco marco_mask/confused
|
||||
: Then how come I am speaking with you right now?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: That's simple! You're just a [color=#00ffff]soul[/color] now.
|
||||
: A [color=#00ffff]soul[/color]...?
|
||||
Marco: Yeah! And it's my duty to take you to the [color=#ff00ff]Hereafter[/color]–
|
||||
: Wait wait wait, slow down. What do you mean I'm a [color=#00ffff]soul[/color]? Th-That's not a real thing...!
|
||||
Marco: It definitely is! I'm talking to one right now.
|
||||
Marco: When a mortal's body expires, they leave a [color=#00ffff]soul[/color] behind. That's where I come in!
|
||||
: When you say their "body expires", you really mean, when they die. L-Like I have...
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Yes, that's what I said just now! You're dead!
|
||||
$set_sprite marco marco_mask/confused
|
||||
: But then... who are you?
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: I told you. I'm Marco.
|
||||
$set_sprite marco marco_mask/confused
|
||||
: I got that. What I mean is, how can you even talk to me if I'm dead?
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Because it's my job to take new souls to the [color=#ff00ff]Hereafter[/color].
|
||||
$set_sprite marco marco_mask/confused
|
||||
: Take me? But how?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: By boat, of course.
|
||||
: Uh huh. Sure. And where is this boat?
|
||||
Marco: We're already on her! Take a look around.
|
||||
# Reveals the cave and river
|
||||
$remove_sprite marco
|
||||
$set_background cave_wall
|
||||
$hide_textbox
|
||||
$wait 1.0
|
||||
: Huh, I see. This is certainly a unique river...
|
||||
# Reveals the side of Akhirah
|
||||
$set_background akhirah_wings
|
||||
: And what are those? Wings, on a boat?
|
||||
Marco: Yes! My boat is called Akhirah, and with her, I will ferry you to the [color=#ff00ff]Hereafter[/color] in no time.
|
||||
: Wait. So your job is to take [color=#00ffff]souls[/color] like me to the underworld?
|
||||
Marco: The [color=#ff00ff]Hereafter[/color], but yes.
|
||||
: Then, are you...Charon?
|
||||
$set_background cave_wall_2
|
||||
$set_sprite marco marco_mask/laugh bounce
|
||||
Marco: Hahahaha!
|
||||
Marco: No! Once again, I'm Marco...! Charon was a different [color=#ff00ff]soul ferrier[/color].
|
||||
: A [color=#ff00ff]soul ferrier[/color]...? So there are more than one?
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Of course! I wouldn't be able to do it all by myself, you know.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
$stop_music
|
||||
: ...
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Is everything okay?
|
||||
$set_sprite marco marco_mask/pensive
|
||||
: Y-Yeah, no. Not really. I'm still processing all of this...
|
||||
: ...Wait, how can I speak and see if I'm just a [color=#00ffff]soul[/color]?
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: I don't really know. But it's certainly handy, being able to communicate with the souls I ferry around.
|
||||
: S-So I'm just a [color=#00ffff]soul[/color], because I died...and you, Marco, are going to take me to this [color=#ff00ff]Hereafter[/color] on your boat...?
|
||||
$set_sprite marco marco_mask/confused
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: ...Aren't you curious?
|
||||
$set_sprite marco marco_mask/confused
|
||||
: Curious? About what?
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: About how you look, right now. What [color=#00ffff]your soul[/color] looks like.
|
||||
$set_sprite marco marco_mask/confused
|
||||
: I mean, I guess. All I can tell is that you're huge, so I must be s-small.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Well, try to picture looking at yourself.
|
||||
$set_sprite marco marco_mask/curious
|
||||
: How do I even do that?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: The same way you instinctively knew how to look at me and speak. Give it a try!
|
||||
$reset_background
|
||||
$clear_sprites
|
||||
: Alright...
|
||||
: [color=#b2b7d2](Maybe I'll try imagining looking into a mirror...)[/color]
|
||||
: ...
|
||||
$hide_textbox
|
||||
# Bard sees themself for the first time
|
||||
$overlay_color #000
|
||||
$set_sprite bard bard/normal
|
||||
$overlay_color #00000000 1.0
|
||||
$overlay_color #fff 0.0
|
||||
$set_sprite bard bard/normal bounce
|
||||
$overlay_color #ffffff00 0.3
|
||||
: ...!
|
||||
: I-Is that blobby-looking thing...me?
|
||||
Marco: Yep, that's you! From core to casing, you're a glowing, frail, tiny [color=#00ffff]soul[/color]. What do you think?
|
||||
$start_music ambiance_river 5.0
|
||||
: I still can't believe that I'm actually [color=#00ffff]a soul[/color]...
|
||||
: ...I'm sorry, Marco. I-I think I need some time to collect my thoughts...
|
||||
Marco: Of course, take as long as you need.
|
||||
: ...
|
||||
$hide_textbox
|
||||
$overlay_color #00000000 0.0
|
||||
$overlay_color #000 3.0
|
||||
$wait 1.0
|
||||
$clear_sprites
|
||||
$load 02_limbo
|
||||
287
scenes/visual_novels/02_limbo.txt
Normal file
287
scenes/visual_novels/02_limbo.txt
Normal file
|
|
@ -0,0 +1,287 @@
|
|||
$title Part 2: Limbo
|
||||
# Pan to wide shot of Akhirah
|
||||
$set_background wide_shot_full_speed
|
||||
$wait 0.5
|
||||
$overlay_color #00000000 2.5
|
||||
$wait 0.5
|
||||
Marco: By the way...
|
||||
Marco: I forgot to ask you for your name.
|
||||
: Why? Do you really need to know?
|
||||
$set_sprite marco marco_mask/curious_speak bounce {"flip_h":true}
|
||||
Marco: Well, it'd just make it easier to talk to you! You don't have to tell me, of course.
|
||||
$set_sprite marco marco_mask/curious RESET {"flip_h":true}
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
: ...
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/confused_speak RESET {"flip_h":true}
|
||||
Marco: ...Still ruminating on your life?
|
||||
$set_sprite marco marco_mask/confused RESET {"flip_h":true}
|
||||
: Not really. I'm just thinking about how weird this whole situation is.
|
||||
$set_sprite marco marco_mask/confused_speak RESET {"flip_h":true}
|
||||
Marco: I guess it would be pretty jarring. It's nothing like how things used to be for you, after all.
|
||||
: I dunno. There isn't anything about my life to reflect on.
|
||||
$set_sprite marco marco_mask/pensive_speak RESET {"flip_h":true}
|
||||
$stop_music
|
||||
Marco: There isn't? What do you mean?
|
||||
$set_sprite marco marco_mask/pensive RESET {"flip_h":true}
|
||||
: ...
|
||||
# Marco is worried
|
||||
$set_sprite marco marco_mask/shocked bounce {"flip_h":true}
|
||||
Marco: Wait, did you lose your memory or something?
|
||||
: ...Yeah.
|
||||
$set_sprite marco marco_mask/panic_speak RESET {"flip_h":true}
|
||||
Marco: Oh no! You don't remember anything?!
|
||||
$set_sprite marco marco_mask/panic RESET {"flip_h":true}
|
||||
: ...
|
||||
$set_sprite marco marco_mask/surprised RESET {"flip_h":true}
|
||||
Marco: You poor thing...! That must mean you're even more confused than I thought!
|
||||
$set_sprite bard bard/face_away RESET {"flip_h":true}
|
||||
: D-Don't worry about it, really.
|
||||
Marco: But your precious memories...! Don't you want a last chance to reflect on how your life was like?
|
||||
: I don't want to trouble you. Just do your job of taking me to the [color=#ff00ff]Hereafter[/color], or whatever.
|
||||
$set_sprite marco marco_mask/pensive_speak RESET {"flip_h":true}
|
||||
Marco: Oh, it's no trouble at all. And besides, I'm curious now.
|
||||
$set_sprite marco marco_mask/pensive RESET {"flip_h":true}
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
: Curious? About me?
|
||||
$set_sprite marco marco_mask/pensive_speak RESET {"flip_h":true}
|
||||
Marco: Yeah! I've ferried many, many [color=#00ffff]souls[/color] before. Too many that I lost count!
|
||||
Marco: But none of them had amnesia! There must be something... different about you.
|
||||
$set_sprite marco marco_mask/pensive RESET {"flip_h":true}
|
||||
: I really doubt it. I'm not special or anything... I think.
|
||||
$set_sprite marco marco_mask/explain RESET {"flip_h":true}
|
||||
Marco: Who knows? I think it's important to try to jog your memory, somehow. And besides, maybe there's a reason why you can't remember anything.
|
||||
$set_sprite bard bard/sweat bounce {"flip_h":true}
|
||||
: A-Actually, I think I can remember some things.
|
||||
$set_sprite marco marco_mask/playful_speak RESET {"flip_h":true}
|
||||
Marco: Really?! That's amazing! Maybe you can remember your name, for example?
|
||||
$set_sprite marco marco_mask/playful RESET {"flip_h":true}
|
||||
$set_sprite bard bard/face_away RESET {"flip_h":true}
|
||||
: ...
|
||||
$set_sprite marco marco_mask/curious_speak RESET {"flip_h":true}
|
||||
Marco: No? Well, what about–
|
||||
$start_music loose_thoughts
|
||||
Bard: Bard. My name is Bard.
|
||||
$set_sprite marco marco_mask/greet RESET {"flip_h":true}
|
||||
Marco: Oh, Bard! That's a nice name.
|
||||
# Bard blushes
|
||||
$set_sprite bard bard/sweat RESET {"flip_h":true}
|
||||
Bard: Th-Thanks. Well, I guess it WAS a nice name...
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
$set_sprite marco marco_mask/pensive_speak RESET {"flip_h":true}
|
||||
Marco: You know, Bard, I did find it weird how you reacted to the news about you being dead.
|
||||
$set_sprite marco marco_mask/pensive RESET {"flip_h":true}
|
||||
Bard: Why? I don't think most people – er, most [color=#00ffff]souls[/color] – would react well to that information.
|
||||
$set_sprite marco marco_mask/pensive_speak RESET {"flip_h":true}
|
||||
Marco: Exactly! Most of them react how I expect. With grievance, denial, anger, longing, accomplishment...or a mix of all of them.
|
||||
Marco: But there are a rare few, who simply remain quiet for the whole trip.
|
||||
$set_sprite marco marco_mask/pensive RESET {"flip_h":true}
|
||||
Bard: That's me, right?
|
||||
$set_sprite marco marco_mask/neutral_speak RESET {"flip_h":true}
|
||||
Marco: Yes, and no. All of them were reflecting on the lives that they lived. So far, you're the only [color=#00ffff]soul[/color] I've seen who didn't.
|
||||
$set_sprite marco marco_mask/neutral RESET {"flip_h":true}
|
||||
Bard: ...Of course. Because I lost my memory.
|
||||
$set_sprite marco marco_mask/shocked RESET {"flip_h":true}
|
||||
Marco: Just so! That's a first for me! If your thoughts were all over the place, that would be one thing. But to even forget your own name...
|
||||
Bard: B-But I remember my name now. Thanks to you.
|
||||
$set_sprite marco marco_mask/reflect RESET {"flip_h":true}
|
||||
Marco: And that's even more intriguing, isn't it? That means that there must be a way to make you remember more! And I'd like to help you to find out.
|
||||
Marco: Actually, I might have just the thing. What do you say?
|
||||
$set_sprite bard bard/sweat RESET {"flip_h":true}
|
||||
Bard: W-Well...
|
||||
$text_new_line [color=#b2b7d2](Whatever I say, it doesn't seem like Marco wants to let this simply go...)[/color]
|
||||
$prompt
|
||||
$option 02_remember Go with Marco's plan
|
||||
$option 02_change_subject Change the subject
|
||||
$label 02_change_subject
|
||||
$increment change_subject
|
||||
$set_sprite bard bard/face_away RESET {"flip_h":true}
|
||||
Bard: You know, I'm not sure I can really trust you.
|
||||
# Marco is confused
|
||||
$set_sprite marco marco_mask/curious_speak RESET {"flip_h":true}
|
||||
Marco: Why not?
|
||||
$set_sprite marco marco_mask/curious RESET {"flip_h":true}
|
||||
Bard: Well, it's your...c-clothes.
|
||||
$set_sprite marco marco_mask/confused_speak RESET {"flip_h":true}
|
||||
Marco: My clothes...?
|
||||
$set_sprite marco marco_mask/confused RESET {"flip_h":true}
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
Bard: Yeah. For starters, why do you wear that creepy mask with glowing red eyes?
|
||||
# Marco is embarrassed
|
||||
$set_sprite marco marco_mask/shy RESET {"flip_h":true}
|
||||
Marco: I... Gee, it's kind of embarrassing...
|
||||
Bard: Embarrassing?
|
||||
Marco: I don't like how my face looks.
|
||||
Bard: ...It can't be that bad.
|
||||
$set_sprite marco marco_mask/hold_face RESET {"flip_h":true}
|
||||
Marco: It's bad enough that I don't want it to be the last thing you see before you cross to the [color=#ff00ff]Hereafter[/color]!
|
||||
Bard: Heh. I guess I don't need to care about my appearance, now that I look like this...
|
||||
$set_sprite marco marco_mask/shy RESET {"flip_h":true}
|
||||
Bard: At first, you did look a bit threatening, but you really aren't.
|
||||
# Marco tries to recompose himself
|
||||
Marco: H-Hmf! So that means you trust me now?
|
||||
$set_sprite marco marco_mask/crossed_arms RESET {"flip_h":true}
|
||||
Bard: It means I don't mistrust you.
|
||||
Marco: What's the difference...? Anyway, I just want to help you remember! You won't have to tell me your memories, if you prefer.
|
||||
$label 02_remember
|
||||
$set_sprite bard bard/face_away RESET {"flip_h":true}
|
||||
Bard: Alright, I suppose. I guess it couldn't hurt.
|
||||
$set_sprite marco marco_mask/laugh bounce {"flip_h":true}
|
||||
Marco: That's the spirit! Let me grab my net, and we can start [color=#ffff00]fishing[/color].
|
||||
Bard: ...Huh? [color=#ffff00]Fishing[/color]...? How is that supposed to help me?
|
||||
$set_sprite marco marco_mask/reflect RESET {"flip_h":true}
|
||||
Marco: Things here work differently than in the mortal world. Normally, when you go fishing in a body of water, you find fish, right?
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
Bard: Of course. That's why it's called "fishing".
|
||||
$set_sprite marco marco_mask/explain RESET {"flip_h":true}
|
||||
Marco: But in the [color=#00ffff]soul plane[/color], things are different. The rivers that we [color=#ff00ff]soul ferriers[/color] traverse may look like yours, but they are not the same.
|
||||
Bard: ...The eerie pink glow gave that away.
|
||||
Marco: Instead of a water stream, this river is an ethereal vein of the soul world. Everyone must traverse one of these many veins in order to reach the [color=#ff00ff]Hereafter[/color].
|
||||
$set_sprite marco marco_mask/neutral_speak RESET {"flip_h":true}
|
||||
Marco: And I'm the one in charge of ferrying souls in this vein, which is called the [color=#ff00ff]Carnal River[/color].
|
||||
$set_sprite marco marco_mask/neutral RESET {"flip_h":true}
|
||||
Bard: Is that so... Then why is it called "carnal"?
|
||||
$set_sprite marco marco_mask/curious_speak RESET {"flip_h":true}
|
||||
Marco: Because it's filled with material thoughts. Reveries... Wishes... Repressed desires... And even long-lost memories.
|
||||
Marco: They all interweave themselves in the collective unconscious that feeds this vein... but they are usually too individualized to make out.
|
||||
$set_sprite marco marco_mask/reflect RESET {"flip_h":true}
|
||||
Marco: But sometimes, a strong emotion from living people – and their souls – can cause some objects to surface spontaneously.
|
||||
Bard: So what you're saying is... Sometimes, random objects appear in this river?
|
||||
$set_sprite marco marco_mask/greet RESET {"flip_h":true}
|
||||
Marco: Indeed! Loose fragments from people's combined imaginations, which arise and take a defined shape for a brief moment.
|
||||
$set_sprite marco marco_mask/confused_speak RESET {"flip_h":true}
|
||||
Marco: I figured that we could try [color=#ffff00]fishing something out[/color], and see if whatever we catch helps you remember anything about your life...!
|
||||
$set_sprite marco marco_mask/confused RESET {"flip_h":true}
|
||||
$stop_music
|
||||
Bard: Hmm, I'll admit that this sounds incredible... But I doubt I can fish without limbs.
|
||||
$set_sprite marco marco_mask/playful_speak RESET {"flip_h":true}
|
||||
Marco: Don't worry, Bard. I can be your limbs! I'll teach you how it works, and throw the net for you. It will be fun, I promise!
|
||||
$set_sprite marco marco_mask/playful RESET {"flip_h":true}
|
||||
Bard: Alright. I hope that it's as exciting as you make it out to be.
|
||||
$set_sprite marco marco_mask/playful_speak bounce {"flip_h":true}
|
||||
Marco: Great! Let me stop Akhirah first, it will be easier to fish once it's stopped.
|
||||
$clear_sprites
|
||||
$hide_textbox
|
||||
# Akhirah's wings close, and Marco walks to the back of the boat.
|
||||
$set_background wide_shot_boat_stops
|
||||
$wait 0.7
|
||||
$overlay_color #000 2.0
|
||||
# Tutorial start
|
||||
$clear_sprites
|
||||
$set_background fishing_tutorial_start
|
||||
$overlay_color #00000000 1.0
|
||||
$start_music under_the_surface
|
||||
Marco: First of all, take a look at the area immediately behind Akhirah.
|
||||
$hide_textbox
|
||||
$wait 1.0
|
||||
Bard: Akhirah... That's the name of your ferryboat, isn't it?
|
||||
Marco: Exactly! Now, do you notice anything off in the river?
|
||||
Bard: Of course. There's a spot that's brighter than the rest.
|
||||
$set_background fishing_tutorial_target
|
||||
$hide_textbox
|
||||
$wait 1.0
|
||||
Marco: Yes... That's one of those surfaced emotions from the collective unconscious I mentioned. Well, a materialized version of that emotion, to be precise.
|
||||
Bard: But how can we get it?
|
||||
Marco: Well, I can't just reach my hand into the water and grab it, that would be too dangerous.
|
||||
Bard: D-Dangerous...?
|
||||
$set_background fishing_tutorial_start
|
||||
Marco: Don't worry about it... Anyway, this is what this specialized [color=#ffff00]fishing net[/color] is for. Whenever it's thrown overboard, it will return to Akhirah soon afterwards.
|
||||
$set_background fishing_tutorial_net
|
||||
$hide_textbox
|
||||
$wait 1.0
|
||||
Bard: I see... So if it catches something from the river, the net will bring it to you.
|
||||
Marco: Exactly!
|
||||
Bard: And how do I tell you where to throw the net?
|
||||
$set_background fishing_tutorial_start
|
||||
Marco: Simply click and hold the net, then drag it to the desired location.
|
||||
Marco: Or if you're using a keyboard/controller, press and hold Spacebar/[img=center]res://images/ui/tile_controller_ps_cross.png[/img]/[img=center]res://images/ui/tile_controller_xbox_a.png[/img], then use the directional keys or joystick to move it.
|
||||
$set_background fishing_tutorial_grabbed
|
||||
$hide_textbox
|
||||
$wait 1.0
|
||||
Bard: And then I let go of the mouse button, or whatever "[img=center]res://images/ui/tile_controller_ps_cross.png[/img]" means, to make you release the net?
|
||||
Marco: Exactly! But keep an eye on the [color=#ffff00]shadow[/color] of the net. That's where it will fall, and you want your target to be right at the center.
|
||||
Bard: And what if you miss?
|
||||
$set_background fishing_tutorial_net
|
||||
$hide_textbox
|
||||
$wait 0.5
|
||||
Marco: The net will return to Akhirah, so we can try again.
|
||||
Bard: Alright, then. So I tell you to grab the net, move it to where I want dropped, and have you release it.
|
||||
Marco: Yes, that's all there is to it!
|
||||
$stop_music
|
||||
$hide_textbox
|
||||
$overlay_color #000 0.5
|
||||
$set_background before_marco_almost_falls
|
||||
$wait 0.3
|
||||
$overlay_color #00000000 0.5
|
||||
$wait 1.0
|
||||
# Back to wide shot
|
||||
$set_sprite bard bard/normal bounce
|
||||
Bard: There's just one thing I don't understand.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: What is it?
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Why is this Carnal River dangerous?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Well, I told you how it's made up of the many unconscious thoughts from the minds of living beings, right?
|
||||
Bard: I guess...if what you said is true.
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: And it is! But that train of thought can be quite unpredictable, and as soon as that person gets distracted by something else...poof! It's gone forever.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Hmm. So if that thought is gone, so is the materialized object.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: That's right. So for example, if I were to fall into the Carnal River, then I'd immediately vanish forever, since no living mortals know me.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: You...what?! That's insane!
|
||||
$set_sprite marco marco_mask/laugh
|
||||
Marco: It's alright. I take all the precautions so that I don't have any accidents!
|
||||
# Marco sits on the railing and almost falls back, he recovers and clutches his chest
|
||||
$clear_sprites
|
||||
$hide_textbox
|
||||
$wait 0.5
|
||||
$set_background marco_almost_falls
|
||||
$wait 4.5
|
||||
$set_sprite marco marco_mask/clutch_chest
|
||||
Marco: ...That was a close call.
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: M-MARCO!!! D-Don't scare me like that!
|
||||
Marco: I'm sorry, I didn't mean to!
|
||||
Bard: Sheesh... What would I even do if you suddenly disappeared?!
|
||||
# Marco blushes
|
||||
$set_sprite marco marco_mask/shy
|
||||
Marco: Aw, does that mean you'd miss me?
|
||||
Bard: Yeah... How would I throw the fishing net without you?
|
||||
# Marco is dejected
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: Oh... W-Well, that's true. Plus, I still need to ferry you to the [color=#ff00ff]Hereafter[/color] and all that...
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Marco: But don't worry, Bard. I'll be careful that nothing bad happens to–
|
||||
$set_sprite marco marco_mask/look_ahead_speak
|
||||
Marco: ...Oh, look! There's something in the water.
|
||||
$set_sprite marco marco_mask/look_ahead
|
||||
Bard: Is that a fish...?
|
||||
$set_sprite marco marco_mask/look_ahead_speak
|
||||
Marco: I don't know. Let's try catching it!
|
||||
$start_music under_the_surface
|
||||
$overlay_color #000 1.0
|
||||
$hide_textbox
|
||||
$clear_sprites
|
||||
$reset_background
|
||||
$wait 0.3
|
||||
$overlay_color #00000000 0.0
|
||||
|
||||
# Fishing 1
|
||||
$escape fishing fishing_01_end 0.0 false {"name":"fishing_01_butt_plug","sprite":"butt_plug"}
|
||||
$label fishing_01_butt_plug
|
||||
$set_sprite fishing_item fishing_objects/butt_plug reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: a butt plug!
|
||||
$text_new_line An adult toy used for anal pleasure. It is, in fact, not a fish.
|
||||
$remove_sprite fishing_item
|
||||
$hide_textbox
|
||||
$escape return_to_fishing
|
||||
$label fishing_01_end
|
||||
$overlay_color #000 0.0
|
||||
$stop_music
|
||||
$wait 2.0
|
||||
$load 03_memento_mori
|
||||
208
scenes/visual_novels/03_memento_mori.txt
Normal file
208
scenes/visual_novels/03_memento_mori.txt
Normal file
|
|
@ -0,0 +1,208 @@
|
|||
$title Part 3: Memento Mori
|
||||
$overlay_color #000 0.0
|
||||
$reset_background
|
||||
$wait 1.0
|
||||
$sound_effect net_picked_up
|
||||
$wait 0.5
|
||||
Marco: Good job, Bard! You did it!
|
||||
Bard: ...
|
||||
Marco: And did you see how I kept my arms steady when I released the net? It's all in the technique.
|
||||
Bard: ...
|
||||
Marco: There was this fisherman's soul who taught me the ropes. Shame that he crossed over to the [color=#ff00ff]Hereafter[/color] way before I managed to get good at it...
|
||||
# Bard is embarrassed
|
||||
$overlay_color #00000000 0.0
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$start_music aboard_the_akhirah
|
||||
Bard: A BUTT PLUG?!
|
||||
# Marco is confused
|
||||
$set_background post_fishing
|
||||
$remove_sprite bard
|
||||
$hide_textbox
|
||||
$wait 1.5
|
||||
Marco: I mean, yeah. Sex toys are pretty common representations of people's fantasies and repressed emotions.
|
||||
Marco: Didn't you also think about this sort of stuff every now and then?
|
||||
Bard: No! I-I mean, I don't know...!
|
||||
Marco: Hmm... So it hasn't jogged your memory, huh? Maybe you're averse to sex? Not that there's anything wrong with it if you are...
|
||||
Bard: I'm not– I wasn't averse to sex. It's just...complicated.
|
||||
Bard: ...I do remember feeling awkward talking about it with anyone. In fact, there wasn't any talking. J-Just me and my thoughts, inside of my head...
|
||||
Bard: But I don't think I could ever talk about it out loud. So I always got jealous of people who talked about it like it wasn't a big deal.
|
||||
$set_background akhirah_platform
|
||||
$set_sprite marco marco_mask/curious_speak RESET {"flip_h":true}
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
Marco: Like I'm doing right now?
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/face_away RESET {"flip_h":true}
|
||||
Bard: ......Y-Yeah.
|
||||
$set_sprite marco marco_mask/laugh RESET {"flip_h":true}
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
Marco: That's alright, Bard. My boat is a "no judgement" zone. If you ever feel like getting something out of your metaphysical chest, I can lend you two very large ears!
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/greet RESET {"flip_h":true}
|
||||
Marco: ...Or not! But I'll tell you what. I've heard so many posthumous confessions by now. I don't think there's anything left that can faze me.
|
||||
Bard: [color=#b2b7d2](Hmph... Marco sure seems quite pushy about getting me to talk more about myself.)[/color]
|
||||
Bard: [color=#b2b7d2](I dunno if I should be this trusting. But on the other hand, I don't know if there's any point in keeping secrets, if I'm already d–)[/color]
|
||||
$stop_music
|
||||
$set_sprite bard bard/face_away RESET {"flip_h":true}
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/neutral_speak RESET {"flip_h":true}
|
||||
Marco: ...Did you remember something else?
|
||||
$set_sprite marco marco_mask/neutral RESET {"flip_h":true}
|
||||
Bard: Huh? Ah, sorry, don't worry about me. It was just dawning on me – again – that I'm dead. That there isn't any going back to the way things were.
|
||||
$set_sprite marco marco_mask/neutral_speak RESET {"flip_h":true}
|
||||
Marco: Hmm... It's pretty normal to be shocked. Even when you know the inevitability of death.
|
||||
$set_sprite marco marco_mask/neutral RESET {"flip_h":true}
|
||||
$set_sprite bard bard/normal RESET {"flip_h":true}
|
||||
Bard: You know, Marco...
|
||||
Bard: When I was alive, sometimes I wondered what really happened after death...or if anything happened at all.
|
||||
$set_sprite marco marco_mask/playful_speak RESET {"flip_h":true}
|
||||
Marco: Oh. Does that mean you got some memories back?
|
||||
$set_sprite marco marco_mask/playful RESET {"flip_h":true}
|
||||
$start_music loose_thoughts
|
||||
Bard: Actually...yeah.
|
||||
|
||||
# Fork 1
|
||||
$prompt
|
||||
$option 03_f1_route_a Remember parent's words
|
||||
$option 03_f1_route_b Remember friend's words
|
||||
$option 03_f1_route_c Remember guru's words
|
||||
$label 03_f1_route_a
|
||||
$increment route_a
|
||||
$set_sprite marco marco_mask/crossed_arms RESET {"flip_h":true}
|
||||
Bard: It's not much, just something that one of my parents used to say. They were pretty religious.
|
||||
$overlay_color #000 0.3
|
||||
$clear_sprites
|
||||
$set_background cave_wall
|
||||
$overlay_color #00000000 0.3
|
||||
Bard: I remember them talking about souls going to heaven or hell, depending on how good or sinful they were.
|
||||
Marco: Ah, I see. Heaven and hell... You said that you heard it from your parent?
|
||||
Bard: I-I might've heard it from other people, too, but I definitely remember it from them, yeah.
|
||||
Bard: My other parent was always at work instead of home, so I spent a lot of my time at home with this one.
|
||||
Bard: To be fair, my parent didn't talk much about religion...
|
||||
Bard: But every now and then, they'd talk about how a terrible person on the news would go to hell "when their time came".
|
||||
Marco: I see. And what about you? Do you remember if you were religious?
|
||||
$set_sprite bard bard/normal
|
||||
Bard: No, I didn't believe in that stuff. And I never prayed, either. My parent did, but they never really pushed me to believe in it too.
|
||||
Bard: I know that not everyone has the privilege to choose what to believe in or not. So I guess I was lucky in that sense...
|
||||
$goto 03_f1_end
|
||||
$label 03_f1_route_b
|
||||
$increment route_b
|
||||
$set_sprite marco marco_mask/crossed_arms RESET {"flip_h":true}
|
||||
Bard: There was this friend of mine... Gosh, I can almost hear their voice going on and on about it!
|
||||
$overlay_color #000 0.3
|
||||
$clear_sprites
|
||||
$set_background cave_wall
|
||||
$overlay_color #00000000 0.3
|
||||
Bard: They were quite a fan of ghost stuff. Every time that we met, they'd keep talking about some new thing about parapsychology...
|
||||
Marco: Parapsychology...?
|
||||
Bard: Yeah. In a nutshell, it's when you believe that when someone dies, their soul lingers in the place where they died.
|
||||
Bard: And if that ghost had a happy death, it brings good fortune. But if they had a terrible death, they keep haunting the place that they died in.
|
||||
Marco: Oh... I think I know what you mean.
|
||||
Bard: I spent a lot of time with them when I wasn't at home, so they'd always be telling about all the evidence that this stuff was real. But to me, it just sounded fake.
|
||||
Bard: Still, I kept hanging out with them because...
|
||||
$set_sprite bard bard/blush
|
||||
Bard: Uhh... Th-This is kind of embarrassing to admit.
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Marco: Don't worry, Bard. I promise I won't laugh.
|
||||
Bard: ...I had a pretty big crush on them. W-We used to be childhood friends, and I kinda secretly fell in love with them.
|
||||
$set_sprite marco marco_mask/surprised bounce
|
||||
Marco: Aww, that's sweet! Did you two end up dating each other?
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...No. We simply stayed friends.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: Oh. I'm sorry to hear.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: It's okay. That's way in the past now. I still enjoyed chatting with them about paranormal stuff, even just as friends.
|
||||
$goto 03_f1_end
|
||||
$label 03_f1_route_c
|
||||
$increment route_c
|
||||
$set_sprite marco marco_mask/crossed_arms RESET {"flip_h":true}
|
||||
Bard: Hmm... Have you ever heard of "reincarnation", Marco?
|
||||
$set_sprite marco marco_mask/explain RESET {"flip_h":true}
|
||||
Marco: That's the belief that, when you die, your soul will return into a new body, no?
|
||||
$overlay_color #000 0.3
|
||||
$clear_sprites
|
||||
$set_background cave_wall
|
||||
$overlay_color #00000000 0.3
|
||||
Bard: Pretty much. My guru used to say that you could reincarnate into a different species after you died. Even into a snail!
|
||||
Marco: Your guru...?
|
||||
Bard: Oh, yeah. They're someone I used to talk to in private after I became an adult. My parents set us up together, and I paid for weekly sessions.
|
||||
Bard: I guess "counselor" is the better word, but they insisted on being called guru.
|
||||
Marco: A counselor... Like a, um, what do you call it... A therapist?
|
||||
Bard: Hmm... I don't think they were medically qualified or anything.
|
||||
Bard: But they'd listen to me, and then offer some life advice.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: It's funny, they were pretty carefree and all that. But they were pretty good at giving advices!
|
||||
$set_sprite bard bard/normal
|
||||
Bard: I'd be so lost without their help at the start. Still, there were days where they'd just keep rambling on and on about reincarnation and astral planes and all that...
|
||||
$label 03_f1_end
|
||||
|
||||
$clear_sprites
|
||||
$overlay_color #00000000 0.0
|
||||
Bard: But I guess none of it matters. Once you take me to the [color=#ff00ff]Hereafter[/color], I'll find out whether they were right or wrong about it.
|
||||
$stop_music
|
||||
$hide_textbox
|
||||
$overlay_color #000 2.0
|
||||
$set_background marco_sit
|
||||
$wait 0.5
|
||||
# Marco is pensive
|
||||
$overlay_color #00000000 2.0
|
||||
$wait 3.0
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Marco: ...
|
||||
$wait 1.0
|
||||
# Marco is happy
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: I'm happy that you got more memories back, Bard.
|
||||
$set_sprite marco marco_mask/playful
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Th-Thanks... But that memory wasn't important or anything.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: It wasn't? It sounded like they were very important in your life...
|
||||
Bard: N-No, I mean, it wasn't anything big. Like winning a championship, or going to Mars.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Sure, but it still must hold some significance. Otherwise you wouldn't have remembered it!
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: M-Maybe...
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: Would you like to try [color=#ffff00]fishing[/color] some more, Bard? I think I spotted something else under the surface of the river.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Oh? Sure. Hopefully this one is more of a challenge to catch.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...W-Wait. Where did that... uh, "thing" we fished go?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Ah, it must have dissipated on its own. I imagine that whichever thought it originated from must have wandered to a different fixation.
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: The manifestations that originate from the Carnal River are ephemeral. Despite their looks, they aren't real objects.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
$set_sprite bard bard/normal
|
||||
Bard: By the way, Marco. Why do you use a [color=#ffff00]fishing net[/color] to fish? Wouldn't it make more sense to use a typical fishing rod...?
|
||||
$set_sprite marco marco_mask/laugh
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Marco: Haha, of course not! How would a butt plug bite a fishing hook?
|
||||
$start_music under_the_surface
|
||||
Bard: [color=#b2b7d2](...I really hope this next thing doesn't just turn out to be another sex toy.)[/color]
|
||||
$overlay_color #00000000 0.0
|
||||
$hide_textbox
|
||||
$overlay_color #000 1.0
|
||||
$clear_sprites
|
||||
$reset_background
|
||||
$wait 0.5
|
||||
$overlay_color #00000000 0.0
|
||||
|
||||
# Fishing 2
|
||||
$escape fishing fishing_02_end 0.25 false {"name":"fishing_02_vore_drawing","sprite":"vore_drawing"}
|
||||
$label fishing_02_vore_drawing
|
||||
$set_sprite fishing_item fishing_objects/vore_drawing reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: a vore drawing!
|
||||
$text_new_line It depicts a dragon swallowing a maned wolf. The artwork is incredibly detailed.
|
||||
$hide_textbox
|
||||
$overlay_color #000 1.0
|
||||
$escape return_to_fishing
|
||||
$label fishing_02_end
|
||||
$stop_music
|
||||
$wait 2.0
|
||||
$load 04_psyche
|
||||
289
scenes/visual_novels/04_psyche.txt
Normal file
289
scenes/visual_novels/04_psyche.txt
Normal file
|
|
@ -0,0 +1,289 @@
|
|||
$title Part 4: Psyche
|
||||
$set_background cave_wall_2
|
||||
$wait 1.0
|
||||
$overlay_color #00000000 1.0
|
||||
$wait 3.0
|
||||
# Bard is embarrassed, Marco is confused
|
||||
$set_sprite bard bard/blush bounce
|
||||
Bard: H-Hang on, this is...!
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: ...A piece of paper? Looks like there is something drawn on it. Let me take a closer look...
|
||||
$clear_sprites
|
||||
$sound_effect paper_handling
|
||||
$wait 1.0
|
||||
Bard: ...
|
||||
$wait 1.0
|
||||
Marco: ...
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_mask/show_drawing
|
||||
Marco: ...
|
||||
$wait 1.0
|
||||
$start_music aboard_the_akhirah
|
||||
Marco: ...I don't get it. Did someone have a nightmare and decided to draw it?
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: A n-nightmare? Why do you say that...?
|
||||
# Marco shows the drawing directly to the screen
|
||||
Marco: Well, look. The poor maned wolf seems so scared, squirming helplessly while he's gobbled up by the large, hungry dragon.
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ...
|
||||
Marco: Bard? Are you okay? Did I scare you with this?
|
||||
Bard: ...It's not meant to be scary. J-Just trust me on this, Marco.
|
||||
Marco: Huh? If it's not, then what? ...Did you remember something?
|
||||
Bard: [color=#b2b7d2](Ugh. I-I can't believe I have to say this out loud...)[/color]
|
||||
$set_sprite bard bard/normal
|
||||
Bard: H-How do I put this? It's, uh, a vore drawing. Y-You can tell by how detailed the maw is.
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: A...vore drawing?
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: Yeah. Wh-Whoever drew this very much enjoys the scenario...
|
||||
$set_sprite marco marco_mask/show_drawing
|
||||
Marco: Huh... I mean, I can tell it's well-made, but I'm not sure I get it. I just feel bad for the poor fellow being eaten alive...
|
||||
Marco: What about you? Do you enjoy this "vore"?
|
||||
$set_sprite bard bard/blush bounce
|
||||
Bard: U-Uhh...!
|
||||
|
||||
$prompt
|
||||
$option 04_admit Admit it
|
||||
$option 04_change_subject Change the subject
|
||||
$label 04_change_subject
|
||||
$increment change_subject
|
||||
$if change_subject >= 2 04_roll_0_for_deception
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: U-Um... M-Maybe we should try fishing something else. Something more a-alluring than some scrapped paper.
|
||||
$set_sprite marco marco_mask/show_drawing
|
||||
Marco: Scrapped paper? I mean, it's a bit soggy from the river's ethereal goop, but it wouldn't have manifested if it didn't mean something to someone out there.
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Marco: ...Are you trying to hide something?
|
||||
$goto 04_you_made_marco_sad
|
||||
$label 04_roll_0_for_deception
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Wh-Why should I trust you...? Your clothes give a very suspicious vibe, a-and–
|
||||
# Marco is confused
|
||||
$set_sprite marco marco_mask/confused
|
||||
Marco: What? ...You already used that excuse before.
|
||||
$label 04_you_made_marco_sad
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: U-Urk!
|
||||
# Marco seems kind of dejected
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: If you don't wanna tell me, that's okay. I won't force you to speak.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: But I would prefer it if you told me so, instead of making up excuses...
|
||||
Bard: [color=#b2b7d2](Oh no... I think that made Marco sad.)[/color]
|
||||
Bard: [color=#b2b7d2](...You know what? Screw it. For once, I want to tell the truth about how I feel!
|
||||
$text_new_line ...Even though it makes me wanna throw up.)[/color]
|
||||
$label 04_admit
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ......
|
||||
Bard: .............................ffffine.
|
||||
# Marco is genuinely curious
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Marco: Hm?
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I admit it... I-I like vore.
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: ...Okay.
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: What?! I thought you were gonna say something more than "okay"...!
|
||||
$stop_music
|
||||
$if change_subject > 0 04_you_are_not_a_good_bean
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Bard, I can tell that you're being as honest with me as you can, and I really appreciate that in you...
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: ...So that's why I don't want to press you on it. I'd feel guilty if I accidentally ticked you off...
|
||||
$goto 04_awkward_silence
|
||||
$label 04_you_are_not_a_good_bean
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: I mean, I WAS going to ask you more about it...but it doesn't seem like you want to talk about it. So I won't.
|
||||
$label 04_awkward_silence
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Ah... W-Well, I didn't expect you to be that considerate. Now I feel bad...
|
||||
# Both of them seem apprehensive
|
||||
Bard: ...
|
||||
Marco: ...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...P-Please, just ask it. The silence is even worse.
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Marco: Oh! Are you sure, Bard? I don't want to strike a nerve or anything.
|
||||
Bard: I-I'm sure.
|
||||
$text_new_line [color=#b2b7d2](...that I don't envy myself right now.)[/color]
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
$start_music afloat
|
||||
Marco: Have you ever done a "vore" before?
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/blush
|
||||
Bard: U-Uhh, no. Of course not.
|
||||
...I mean, I'd definitely remember that.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Hmm... Then how can you like it without even trying?
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Well, I just do... G-Gosh, it's so awkward to say this out loud.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: What I mean is, I think it would be cozy.
|
||||
$set_sprite marco marco_mask/surprised
|
||||
Marco: Cozy? ...That drawing certainly doesn't give me that vibe.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: I guess vore can mean different things for different people...
|
||||
Bard: But to me, I like to imagine that I'm small. Th-Then, someone large and caring takes me in their maw, and...gently swallows me for safekeeping in their stomach.
|
||||
$set_sprite bard bard/blush
|
||||
Bard: So I guess it's more about being very intimate with s-someone special... at least, for me.
|
||||
# Marco is pensive
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Marco: ...
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: ...Wh-What?
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: You know, Bard.
|
||||
Marco: I've ferried many, many souls. And I've never heard any mention of vore from any of them.
|
||||
Bard: Oh.
|
||||
# Marco smiles
|
||||
$set_sprite marco marco_mask/laugh
|
||||
Marco: So I guess that makes you special!
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...
|
||||
Bard: ...What.
|
||||
Marco: Yeah! I mean, it's not going to Mars or anything, but I think that's very unique!
|
||||
$set_sprite bard bard/blush
|
||||
Bard: B-But it's just a silly fetish! That certainly doesn't make me special...!
|
||||
Marco: Well, anything that makes you YOU is special, right?
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: If I WERE special... But I'm definitely not!
|
||||
Marco: I'd argue you definitely are! Not everyone can make something like vore sound so nice and comfy! It even makes me want to try it!
|
||||
$stop_music
|
||||
Bard: R-Really, it's not a special memory or– ...Wh-What do you mean, try it?
|
||||
# Marco has a hungry look and Bard is flustered
|
||||
$remove_sprite bard
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Marco: ...
|
||||
$wait 0.5
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: What I mean is...
|
||||
$set_sprite marco marco_mask/neutral
|
||||
$wait 0.5
|
||||
$set_sprite marco marco_mask/hungry
|
||||
Marco: You look so small...and I'm so big...
|
||||
$wait 0.5
|
||||
Bard: M-Marco...! Wh-What are y-you–?!
|
||||
$wait 0.5
|
||||
# Marco opens his maw towards the camera
|
||||
$set_sprite marco marco_mask/show_maw
|
||||
Marco: ...Wouldn't you like to get inside...?
|
||||
Bard: M-MARCO...!!!
|
||||
$wait 0.5
|
||||
# Marco acts coy
|
||||
$set_sprite marco marco_mask/shy
|
||||
Marco: A-Ah... I'm sorry, Bard! I didn't mean to make you panic...! I just wanted to see if that would make you happy.
|
||||
$set_sprite bard bard/unwell
|
||||
Bard: I-I'm getting dizzy...
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Oh, wow. I didn't expect it to give you that much of a reaction...
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: N-No... I actually feel sick...
|
||||
$set_sprite marco marco_mask/panic_speak bounce
|
||||
Marco: Oh no! Is everything okay?!
|
||||
$set_sprite marco marco_mask/panic
|
||||
$set_sprite bard bard/unwell fall_down
|
||||
Bard: ...Ughh, m-my head...
|
||||
$overlay_color #fff 0.0
|
||||
$overlay_color #000 1.0
|
||||
$sound_effect wood_thud
|
||||
$clear_sprites
|
||||
Marco: Bard...?!
|
||||
$wait 0.5
|
||||
Bard: ...
|
||||
$set_background marco_kneel_front
|
||||
$wait 1.0
|
||||
$overlay_color #00000000 1.0
|
||||
Marco: ...
|
||||
$wait 1.0
|
||||
Bard: ...I-I'm better now.
|
||||
Marco: Are you sure...?
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Yeah... I'm sure. Don't worry about me.
|
||||
$set_sprite marco marco_mask/clutch_chest
|
||||
Marco: Phew. I'm glad. I was really worried that you'd–... Just tell me if you feel unwell again, Bard.
|
||||
Bard: Is something wrong?
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: No, no. Nothing wrong. You look alright to me. But I should order Akhirah to take us to the [color=#ff00ff]Hereafter[/color] quickly.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...Actually, Marco.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Marco: Hm?
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: D-Do you mind if we [color=#ffff00]fish[/color] some more...? I think I saw something else under the surface.
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: O-Of course! We can fish some more. Let me grab my net first...
|
||||
$overlay_color #000 0.5
|
||||
$reset_background
|
||||
$clear_sprites
|
||||
Bard: [color=#b2b7d2](I-I don't know what happened. But I should trust Marco's knowledge as a [/color][color=#ff00ff]soul ferrier[/color][color=#b2b7d2], and put that aside...)[/color]
|
||||
$overlay_color #00000000 0.0
|
||||
$start_music under_the_surface
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$set_background akhirah_back_stopped
|
||||
|
||||
# Fishing 3
|
||||
$escape fishing fishing_03_end 0.50 false {"name":"fishing_03_gold_case","sprite":"gold_case"} {"name":"fishing_03_grimoire","sprite":"grimoire"}
|
||||
$label fishing_03_gold_case
|
||||
$set_sprite fishing_item fishing_objects/gold_case reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: a gold-filled briefcase!
|
||||
$text_new_line A rather tacky representation of wealth. The real thing would be too heavy for someone to carry.
|
||||
$set_sprite bard bard/normal bounce
|
||||
Bard: Wow! This suitcase is chockfull of gold! I don't think I've ever seen so much of it at once before.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Actually, that's a briefcase.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Huh...? What's the difference?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: A suitcase is normally larger, and supposed to carry clothes. On the other hand, a briefcase normally holds documents and small objects.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: I don't really get it. And several bars of gold don't really qualify as "small".
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: But–
|
||||
$set_sprite marco marco_mask/confused
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: ...I guess the distinction doesn't really matter.
|
||||
$hide_textbox
|
||||
$clear_sprites
|
||||
$escape return_to_fishing
|
||||
$label fishing_03_grimoire
|
||||
$set_sprite fishing_item fishing_objects/grimoire reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: a magical grimoire!
|
||||
$text_new_line A thick, menacing book, filled with magical spells and large illustrations for padding.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: For a second there, I thought the eye on the cover was actually following me.
|
||||
$set_sprite fishing_item fishing_objects/grimoire_left
|
||||
Bard: ...
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: A-Ah! It IS actually following me...!
|
||||
$set_sprite fishing_item fishing_objects/grimoire_right
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: It's supposed to be a magical object, right? Maybe that's part of its charm, in the mind of whoever conjured it.
|
||||
$set_sprite marco marco_mask/confused
|
||||
$set_sprite fishing_item fishing_objects/grimoire_left
|
||||
Bard: I don't think it's charming at all. It's kinda creepy...
|
||||
$set_sprite fishing_item fishing_objects/grimoire_right
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Don't worry, Bard! Unconscious manifestations from the Carnal River can't really hurt you...
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: ...I think.
|
||||
$hide_textbox
|
||||
$clear_sprites
|
||||
$escape return_to_fishing
|
||||
$label fishing_03_end
|
||||
$stop_music
|
||||
$overlay_color #000 1.0
|
||||
$wait 2.0
|
||||
$load 05_flux
|
||||
445
scenes/visual_novels/05_flux.txt
Normal file
445
scenes/visual_novels/05_flux.txt
Normal file
|
|
@ -0,0 +1,445 @@
|
|||
$title Part 5: Flux
|
||||
$set_background sit_on_platform
|
||||
$wait 1.0
|
||||
$overlay_color #00000000 1.0
|
||||
$wait 1.5
|
||||
Bard: Hmm...
|
||||
Marco: Is something the matter?
|
||||
Bard: I was just expecting more...you know...sex stuff. Or kinky stuff. Not a book and a box.
|
||||
Marco: Well, the flows of the Carnal River can be really unpredictable! You can fixate on objects for reasons other than being horny.
|
||||
Marco: It could be something that brings back painful memories. Or something that leaves a strong impression on someone.
|
||||
Bard: ...So what you're saying is that they are pretty much random.
|
||||
Marco: Pretty much! After all, mortals are very complicated. What's trivial to one may be another's deepest fear.
|
||||
Bard: Y'know, Marco. It sounds like you know a lot about people. Is it all really just from listening to rambling [color=#00ffff]souls[/color] like me...?
|
||||
Marco: I wouldn't say "ramble"... Ah, and from [color=#ffff00]fishing[/color], too! It's like getting many unconnected glimpses into people's lives.
|
||||
Marco: But I wouldn't go so far as to say I know a lot... Honestly, with each day, it feels like I know less and less. But I still find it all fascinating.
|
||||
Bard: Is it really...?
|
||||
Marco: Yes! A certain soul told me that it sounded to them like putting together a large puzzle, trying to fit the pieces together...
|
||||
Marco: And then when you find a piece that doesn't fit anywhere, it turns out that the puzzle was much bigger than you imagined!
|
||||
Marco: ...
|
||||
Marco: I don't really get how puzzles work or why they would be fun, but I imagine that a fellow soul like you might appreciate the metaphor better than me.
|
||||
Bard: Yeah...it sounds about right. Life is pretty scary...
|
||||
Marco: But I've still learned so much! And who knows what else is there to discover...
|
||||
Marco: Such as vore! Until you explained it to me, I never could've even imagined that it was a real thing...
|
||||
Bard: Uhhhh... I-I still think that you're putting too much thought into that, Marco. It's not something I really care about.
|
||||
Marco: Are you sure? Maybe you still have to remember that you did care!
|
||||
Bard: Y-Yeah, well... My memory isn't really that good. Although, that thing we [color=#ffff00]fished[/color] reminds me–
|
||||
$start_music loose_thoughts
|
||||
$set_background cave_wall_2
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$set_sprite marco marco_mask/surprised bounce
|
||||
Marco: Oh! Does that mean you remembered something else? That's incredible, Bard!
|
||||
Marco: Would you mind telling me more about it?
|
||||
Bard: [color=#b2b7d2](Gee... Marco really finds this stuff fascinating, huh.)[/color]
|
||||
|
||||
# Fork 2
|
||||
$if route_b == 1 05_f2_prompt_b
|
||||
$if route_c == 1 05_f2_prompt_c
|
||||
Bard: I-I guess not...
|
||||
$prompt
|
||||
$option 05_f2_route_a Parent and career
|
||||
$option 05_f2_route_d Cousin and alien
|
||||
$label 05_f2_prompt_b
|
||||
Bard: I-I guess not...
|
||||
$prompt
|
||||
$option 05_f2_route_b Friend and theater
|
||||
$option 05_f2_route_d Cousin and alien
|
||||
$label 05_f2_prompt_c
|
||||
Bard: I-I guess not...
|
||||
$prompt
|
||||
$option 05_f2_route_c Guru and secret
|
||||
$option 05_f2_route_d Cousin and alien
|
||||
$label 05_f2_route_a
|
||||
$increment route_a
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Seeing all that gold in one place reminded me of my own money situation...
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Oh. Did you struggle with money?
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Hmm, not really. My parents weren't wealthy, but we had enough to get by.
|
||||
Bard: But my parent... They were really obsessed that I'd get an important job that paid a lot.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Hmm... Your religious parent, correct?
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Yeah, that one. They said that I was gifted, since I was always getting high grades in school. That I'd go on and get a diploma in one of the best colleges in the country.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: It sounds like you were a great student!
|
||||
$set_sprite marco marco_mask/playful
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Nah... Only when I actually liked the classes. In fact, there was this one time in high school where I couldn't care less about an exam that was coming up.
|
||||
Bard: Instead of studying, me and my cousin decided to hang out all night. Obviously, we both flunked it.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: Were you upset?
|
||||
Bard: Upset? W-Well, I would just study harder for the next exam to compensate... or something.
|
||||
Bard: But I still tried to hide the bad grade, because I knew that my parent would overreact.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Overreact...?
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Yeah. They actually found out later, and got upset.
|
||||
Bard: But instead of shouting at me, they thought that the teacher had made a mistake. That they had something against me.
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: At one point, they went over to the school and started a shitstorm! They kept fighting the school board over it, hoping that the teacher would give me a better grade.
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Heh. So you got away with it, in the end?
|
||||
Bard: Oh, no. As soon as my parent confronted me about it, I told them the truth. That I didn't study.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: But they didn't care, and kept fighting the school until they changed my grade.
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Marco: Oh wow! They kept fighting the school on your behalf, even though you admitted to it. That's quite the stubbornness!
|
||||
Bard: It was pretty crazy.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Aw... I think it's bittersweet that your parent decided to stand up for you, even if they were pretty misguided.
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Maybe. I felt pretty bad about it, though. If I had just studied for the exam, then none of this would have happened...
|
||||
$goto 05_f2_end
|
||||
$label 05_f2_route_b
|
||||
$increment route_b
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Th-The briefcase was what jogged my memory.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: The gold, you mean?
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: No, no. The briefcase itself. It reminded me of a play I saw once.
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: A play...?
|
||||
$set_sprite marco marco_mask/pensive
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Yeah, like in theater. With a stage and actors and such.
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: I don't remember what it was called. I just remember that there was this briefcase, and all of the characters wanted to get it for some reason or another.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Oh... Sounds like a complex plot. And what was inside of the briefcase?
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: That's the thing, nobody knew. Everyone thought it was something different. That was the whole joke.
|
||||
$set_sprite marco marco_mask/laugh
|
||||
Marco: They all had their reasons to seek it out... That sounds interesting!
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: ...Actually, I thought it was pretty bad. The ending was very abrupt and confusing.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: Oh.
|
||||
Bard: I only watched it because my friend dragged me. They were really into theater.
|
||||
$set_sprite marco marco_mask/surprised
|
||||
Marco: By friend, do you mean the one who you had a crush on?
|
||||
$set_sprite bard bard/blush
|
||||
$set_sprite marco marco_mask/playful
|
||||
Bard: Y-Yeah. They wanted to become an actor, so they dragged me along for all the plays that they could find around town.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Some of them were really weird or boring. I only remember the briefcase one because of all of the jokes that we made.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Jokes?
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: Yeah! It was so bad that we kept making jokes about it the whole week. I remember the jokes better than the plot of the play!
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
$set_sprite bard bard/blush
|
||||
Marco: Aw... I think that's bittersweet. Despite you not enjoying the play, you two still managed to find some joy in it!
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: P-Plus, you got to spend more time with the friend you had strong feelings for.
|
||||
$set_sprite marco marco_mask/playful
|
||||
$set_sprite bard bard/normal
|
||||
Bard: T-True... But I still think watching that bad play was a waste of time.
|
||||
$goto 05_f2_end
|
||||
$label 05_f2_route_c
|
||||
$increment route_c
|
||||
$set_sprite bard bard/normal
|
||||
Bard: It's not much, just this movie I saw a while ago. It was about a wizard who only l-learned a single spell–
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Oh! Did he have a book like the one we found?
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: No, he only had a magic wand. And the only spell it could cast was to...uh...shrink whoever used.
|
||||
$set_sprite bard bard/blush
|
||||
Bard: And the premise of the whole movie is that the wizard gets in all sorts of, uh, s-situations because of that spell... But he also uses it to get out of them.
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: That sounds like an intriguing movie. Did you like it?
|
||||
Bard: Y-Yeah...a bit too much. I-It kinda made me realize how much I wanted to be like him.
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: You mean, being a wizard who could shrink at will?
|
||||
Bard: ...
|
||||
Bard: I-It's a bit embarrassing to admit, but I realized that I had a...let's say, micro k-kink.
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Hmm... So being small is another fetish for you. Besides vore.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: That's okay! I'm not judging.
|
||||
...But I guess that one did become a reality, considering how small you are.
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Bard: ...!
|
||||
$set_sprite bard bard/blush
|
||||
Bard: Y-You're right. G-Gosh... Now I'm making this w-weird...!
|
||||
$set_sprite marco marco_mask/surprised
|
||||
Marco: Oh, oops. I didn't mean to make you even more flustered! Besides, I said I don't judge, and that's still true.
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Aaaanyway, you were saying...
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: ...A-After that movie, I was feeling kinda embarrassed. I thought about shrinking myself nonstop. I couldn't really talk to anyone about it...except my guru.
|
||||
Bard: I was really afraid that they'd laugh at me...! B-But they didn't, and I felt so relieved. I was just glad to get it off my chest.
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: Ah, you mentioned your guru earlier. The one that gave you private counseling sessions, right?
|
||||
Bard: Y-Yeah... I told them about my micro fetish, but th-there's no way I would tell them about my vore one...!
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Why not tell anyone else? Is it really that embarrassing?
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Aw... Well, I think that it's bittersweet that you still had someone that you could confide your secrets to.
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/normal
|
||||
Bard: I dunno... Maybe it would be better if my tastes weren't so weird in the first place.
|
||||
$goto 05_f2_end
|
||||
$label 05_f2_route_d
|
||||
$increment route_d
|
||||
$set_sprite bard bard/normal
|
||||
Bard: But it's not much. Just this cousin that came to visit every now and then.
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: Your cousin? How did [color=#ffff00]fishing[/color] remind you of them?
|
||||
Bard: I-It's a long story. My cousin was older than me, but they lived nearby, so they'd come visit every other day.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I don't think I told you, but... I was super kinda into space stuff. And it was definitely their fault.
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: So you two were pretty friendly?
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: Yeah! They were like a sibling to me. Or my best friend. I've been thinking a lot about them lately.
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: I'm glad that you're remembering more, Bard!
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: T-To answer your question...I guess I remembered them because of the creepy yellow eye on that book.
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: My cousin always had the coolest concepts for new alien species, and kept showing me their new doodles.
|
||||
Bard: There was this alien that they liked the most. It was just a purple blob. It didn't even have a skeleton...just a yellow eye floating inside of them.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: A purple blob with a–
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: ...Oh! That's similar to the cover of the grimoire.
|
||||
$set_sprite bard bard/normal bounce
|
||||
Bard: Mhm! So that's how I made the connection, I guess.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Bard: This alien had a whole tragic backstory, too. Because of her appearance, she was misunderstood by the other aliens, and treated like a monster...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...but in truth, she was a valiant hero, helping others through the galaxy without getting anything in return. Only more insults.
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: ...A book judged by its cover, as the mortal saying goes.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
$set_sprite bard bard/normal
|
||||
Marco: So this alien still took the effort to help others? Even though they all treated her poorly?
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Yeah. She believed that, deep down, anyone could be a hero. As long as they set their hearts to it.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: One time, she was hitching a ride in the engine room of a spaceship, hiding until they got to the next spaceport. Then...
|
||||
$set_sprite bard bard/sweat
|
||||
$set_sprite marco marco_mask/surprised
|
||||
Bard: BAM! The spaceship was attacked by bandits! It seemed like they wouldn't be able to survive the barrage of lasers, and the entire engine would fall off.
|
||||
Bard: But the alien managed to use her glue-like powers to hold the thrusters and the spaceship together, and thanks to her, they all managed to escape safe and sound.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: Wow! That's quite the action.
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/playful
|
||||
Bard: Yeah. She saved the day, and yet again, nobody even knew what she did.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Aw... I think that it's bittersweet that the alien still has her resolve to help others, even if she gets no credit in the end.
|
||||
$set_sprite marco marco_mask/laugh
|
||||
Marco: I guess the story about that alien must have resonated with you that you would remember it so dearly, Bard.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Nah. I was just thinking about my cousin, really...
|
||||
|
||||
$label 05_f2_end
|
||||
$stop_music
|
||||
$overlay_color #000 0.5
|
||||
$wait 0.3
|
||||
$set_background sit_on_platform
|
||||
$overlay_color #00000000 0.5
|
||||
Bard: ...
|
||||
$wait 2.0
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: I'm happy that you remembered more, and even decided to share it with me, Bard.
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: I'm sorry.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Hm? What for?
|
||||
$set_sprite marco marco_mask/confused
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: For souring the mood. I'm just rambling about some stupid stuff I remember.
|
||||
$set_sprite marco marco_mask/greet
|
||||
$continue_after_text
|
||||
Marco: Oh, it's not stupid at all. I think it's very interesting! I'm very fascinated by you–
|
||||
$set_sprite marco marco_mask/crossed_arms bounce
|
||||
$set_sprite bard bard/normal
|
||||
$wait 1.0
|
||||
Marco: –r experiences. Fascinated by your experiences in the mortal plane.
|
||||
Bard: [color=#b2b7d2](Hmm? What was that weird pause...?)[/color]
|
||||
Marco: ...Like I've told you, I've met many [color=#00ffff]souls[/color]. And they all told me their share of what it was like to be alive.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: And with each one – with each story –, I feel like I learn a little bit more about the world of the living.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Would you like to go there and see for yourself, one day?
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Go...where?
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Well, the [color=#00ffff]world of the living[/color], of course. Where I came from.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: But I can't simply abandon my job as a [color=#ff00ff]soul ferrier[/color].
|
||||
Marco: Therefore, my only contact with the mortal plane is hearing what [color=#00ffff]souls[/color] like you tell me... and [color=#ffff00]fishing[/color], of course.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Well... At least, it must be nice, not being a mortal. It means that you won't die, or go through the bad parts of life.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: By the way, I noticed that you already knew some of the stuff I was talking about.
|
||||
$set_sprite marco marco_mask/confused_speak bounce
|
||||
Marco: Hm? Like what?
|
||||
$set_sprite marco marco_mask/confused
|
||||
|
||||
$if route_a >= 2 05_marco_knew_a
|
||||
$if route_b >= 2 05_marco_knew_b
|
||||
$if route_c >= 2 05_marco_knew_c
|
||||
Bard: Like what spaceships are. Or what an alien even means.
|
||||
$goto 05_marco_knew_end
|
||||
$label 05_marco_knew_a
|
||||
Bard: Like what a school is. Or what grades even mean.
|
||||
$goto 05_marco_knew_end
|
||||
$label 05_marco_knew_b
|
||||
Bard: Like what actors are. Or what a play even means.
|
||||
$goto 05_marco_knew_end
|
||||
$label 05_marco_knew_c
|
||||
Bard: Like what movies are. Or what a fetish even means.
|
||||
|
||||
$label 05_marco_knew_end
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Yeah, I learned it before. A [color=#00ffff]soul[/color] like you taught me.
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: So you learned EVERYTHING just from listening to souls.
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: ...It was a lot of souls.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Whew. Th-That's kinda hard to believe.
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: But it's true! I have no reason to lie about that. I haven't been counting, but it must've been hundreds of thousands of–
|
||||
$set_sprite marco marco_mask/panic
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: HUNDREDS OF THOUSANDS?!
|
||||
$start_music afloat
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...Maybe just over a million.
|
||||
Bard: That's too many!! And you remember all of them?!
|
||||
$set_sprite marco marco_mask/laugh
|
||||
Marco: Heh, no. Of course not. Only the special ones.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Then you'll probably forget about me.
|
||||
# Marco is coy
|
||||
$set_sprite marco marco_mask/shy
|
||||
Marco: ...won't...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Hm? What did you say?
|
||||
Marco: Oh, um, it was nothing, Bard.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
Bard: You must think that the living world sucks.
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Marco: Why?
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Because you probably get a lot of dead people complaining about how the world isn't fair, and such.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Is that what you believe? That the world isn't fair?
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Yes...i-if my memory serves me right.
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Hmm... From what I've heard, I only agree in part. It can be an unjust place, but it seems to have equal parts hurt and beauty.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: B-But I only seem to remember the ugly parts.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: Ugly parts...? But all that you've told me is nice, isn't it? You certainly made them sound like fond memories.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Of course, each soul is unique. Some of them tell me good things, like you have! Others only focus on the bad parts.
|
||||
Marco: But regardless of optimism, all of them seem to regret not doing enough while they were alive, in one way or the other.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: ...D-Do you remember ferrying any remarkable soul?
|
||||
$set_sprite marco marco_mask/laugh
|
||||
Marco: Oh, there were so many. I don't think I could list them all!
|
||||
Bard: No, but I mean... Any one that sticks out to you in particular? Someone that you think about a lot?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Hmm... Oh! There was this lady who died of old age. Listening to her recount her own life was quite amazing.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Yeah? What did she do?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Nothing.
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Marco: ...
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: Nothing at all?
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: Well, of course she did a lot. She didn't do anything remarkable by YOUR standards, though.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: [color=#b2b7d2](...Ouch. Perhaps Marco is right, I'm being too judgmental.)[/color]
|
||||
$set_sprite bard bard/normal
|
||||
Bard: U-Umm... Can you tell me about her?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: Well, she grew up in her dad's farm, and worked the fields until she got married.
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Then she had children, then grandchildren, then great-grandchildren...and then, she passed away. In her sleep, she recalls.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: She remembers passing away in her sleep...?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Every soul remembers how they died... But you're the exception, of course.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: ...That's all? Nothing that sticks out?
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: T-To you, I mean. I just don't understand why you'd remember her out of a million other people...
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: Well, I wouldn't do her justice if I gave you the short version. You had to hear it straight from her soul!
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: Oh, but she had an astonishing memory, too! She kept diaries since she was young, and she wouldn't skip a single day. There wasn't a thing she didn't remember...!
|
||||
Marco: There were good and bad moments. But she really cherished them both, and seemed content with the life she'd led, and the example she'd set for her children.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Hmm... She sounds like the complete opposite of me.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I kinda wish that my life had been that simple... On the other hand, I dunno if I could handle a quiet life in a farm.
|
||||
Bard: So she died with no regrets?
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Oh, she still had regrets, like everyone. Her grandchildren moved to the big city, and they kept struggling with money.
|
||||
Marco: She wished that she could've helped them more with their financial situation.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: She also wished that she still had her hearing when her great-grandson was born, so she could've heard him cry for the first time.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Oh... Th-That's so sad.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Marco: It is. But I think she still enjoyed life to its fullest extent. She remarked that the good things and the bad things were important parts of who she grew up to be.
|
||||
$stop_music
|
||||
Bard: I-I wish that I could have–
|
||||
# Silence
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
Bard: No, never mind...
|
||||
Marco: ...?
|
||||
$overlay_color #000 1.0
|
||||
$set_background before_command_boat_to_move
|
||||
$clear_sprites
|
||||
$wait 1.0
|
||||
$overlay_color #00000000 1.0
|
||||
$wait 2.0
|
||||
Bard: M-Marco, do you think we can fish some more?
|
||||
Marco: Again, already...? But I don't see anything in the river.
|
||||
Marco: I can move Akhirah to a different spot and try our luck somewhere else.
|
||||
Marco: Plus, I could use a break from throwing the net around. My arms are a bit tired.
|
||||
Bard: Oh, okay...
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
# Marco raises his finger and Akhirah starts moving, before it fades to black
|
||||
$start_music ambiance_river 5.0
|
||||
$set_background command_boat_to_move
|
||||
$wait 2.5
|
||||
$overlay_color #000 1.0
|
||||
$reset_background
|
||||
$wait 0.5
|
||||
$load 06_decay
|
||||
457
scenes/visual_novels/06_decay.txt
Normal file
457
scenes/visual_novels/06_decay.txt
Normal file
|
|
@ -0,0 +1,457 @@
|
|||
$title Part 6: Decay
|
||||
$overlay_color #000 0.0
|
||||
$reset_background
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
$wait 2.0
|
||||
$overlay_color #00000000 1.5
|
||||
$show_textbox
|
||||
$expand_textbox
|
||||
Marco: ...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
Marco: You know, Bard.
|
||||
Bard: What?
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: I think I could probably do it.
|
||||
Bard: Do what?
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: Swallow you. For your vore fantasy, I mean.
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$set_sprite marco marco_mask/surprised
|
||||
$overlay_color #fff 0.0
|
||||
$overlay_color #ffffff00 0.5
|
||||
Bard: M-MARCO!! Are you still thinking about that?!
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Yes. That's why I'm telling you that I could do it! Probably.
|
||||
$set_sprite bard bard/blush bounce
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: W-W-Well, think of something else! Anything else...!
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Why? I thought you'd enjoy it...
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: ...B-But it's not even real. My fantasy, I mean.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: It could be real, now. And safe. With–
|
||||
$set_sprite bard bard/blush
|
||||
Bard: But wh-what if it's not actually safe? What if something goes wrong?!
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: I'd do my utmost to ensure that nothing would go wrong. I promise you, Bard.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/shy
|
||||
Marco: I would be careful that no harm would come to you when I swallow you... If you'd let me try.
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ......
|
||||
# Marco dejected again
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...Okay, I'm sorry. I just wanted to do something that we'd both enjoy. I won't bring it up again.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: [color=#b2b7d2](Did Marco just say that he would enjoy it, too...?!)[/color]
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: [color=#b2b7d2](...But no. A-As nice as it sounds, I still dunno if I can trust Marco with something so... significant.)[/color]
|
||||
$clear_sprites
|
||||
$hide_textbox
|
||||
$overlay_color #000 0.0
|
||||
$set_background akhirah_back_moving
|
||||
$overlay_color #00000000 1.0
|
||||
$wait 0.8
|
||||
Bard: ...
|
||||
Marco: ...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...I made things awkward again, huh?
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: No, not at all! I didn't mean to badger you, Bard.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Anyway, I'll make sure that Akhirah takes us to our destination.
|
||||
# Marco gets up
|
||||
$set_sprite bard bard/normal bounce
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Bard: ...What is it like?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Excuse me?
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: The [color=#ff00ff]Hereafter[/color]. That's where you're taking me, right?
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Yes. Right at the end of the Carnal River. It's where I've taken every single [color=#00ffff]soul[/color] I've ferried.
|
||||
Bard: Well, what is the [color=#ff00ff]Hereafter[/color] like?
|
||||
# Marco looks serious
|
||||
$set_sprite marco marco_mask/neutral
|
||||
$stop_music
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/sad
|
||||
$wait 0.5
|
||||
Marco: ...
|
||||
$wait 0.5
|
||||
Marco: I was afraid that you'd ask.
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: Wh-Why? Is it bad?
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: No. It's just that you'll think I'm lying.
|
||||
Bard: ...
|
||||
$start_music aboard_the_akhirah
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: ...[color=#ff00ff]I don't know[/color].
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: You...what?
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: I don't know anything that lies before the Carnal River... or anything that lies AFTER.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: I just know that I have to–
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: What do you mean, you don't know?! It's your entire job to take people there!
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: You're right, Bard. I have to bring [color=#00ffff]souls[/color] to the [color=#ff00ff]Hereafter[/color] without exception. But I don't know what happens to them afterwards.
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: However, it's more than my "job". It is...my [color=#ff00ff]purpose[/color].
|
||||
Bard: Your...purpose?
|
||||
Marco: Yes. And I was [color=#ff00ff]made[/color] for it.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...What are you hiding from me?
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: I-I'm not hiding anything, Bard! At least, nothing that would–
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...How could I have told you about the [color=#ff00ff]Hereafter[/color], if I don't know what happens to you there? THAT would be lying...
|
||||
Marco: And if I casually brought up that I didn't know, you would have been suspicious of me!
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...I-I am suspicious of you.
|
||||
$set_sprite marco marco_mask/surprised
|
||||
Marco: Exactly my point! I didn't mean to lie to you, Bard. Not even by omission. But how could I even bring up that subject in the first place...?
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
Bard: ...I think I had the right to know.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: I apologize. And you have every reason to be skeptical of me. I am responsible for every [color=#00ffff]soul[/color] that I ferry, after all.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Listen... Since there isn't anything in my [color=#ff00ff]Maker[/color]'s rules about keeping it a secret, I'll answer all questions you may have.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: G-Good, because I have a lot of them.
|
||||
Bard: First of all...what ARE you, really?
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: I'm a [color=#ff00ff]soul ferrier[/color]. And, like many other soul ferriers, I was made to bring the dead to the [color=#ff00ff]Hereafter[/color].
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: But I am not like you, Bard. You are a mortal: you're conceived by your parents, you attain a [color=#00ffff]soul[/color], and you live in the mortal world... until you die.
|
||||
Marco: Meanwhile, I am a [color=#ff00ff]spirit[/color]. I don't have parents; I have a [color=#ff00ff]Maker[/color]. And I don't die; I am... unmade.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: ...A Maker?
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Yes. [color=#ff00ff]Spirits[/color] like me are conceived by a [color=#ff00ff]Maker[/color]. And when a Maker has need of a new a spirit... Poof! Suddenly, it exists.
|
||||
Marco: The same happened for me. In a single moment, I was given a physical body, tools, and memories...
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: Th-That's how you were made?! You suddenly appeared out of thin air, one day?
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: That's right. And when I was made, I already knew what my purpose was. And with Akhirah ready for me, I was set off to commence my duty as a [color=#ff00ff]soul ferrier[/color].
|
||||
Bard: And who is your [color=#ff00ff]Maker[/color]?
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: ...You don't know, either?!
|
||||
$set_sprite marco marco_mask/clutch_chest
|
||||
Marco: I was only given the memories that my [color=#ff00ff]Maker[/color] chose to give me. The bare minimum in order to act as [color=#ff00ff]soul ferrier[/color].
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: I know that I have a [color=#ff00ff]Maker[/color]... But I wouldn't know who they are.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: But that memory was implanted in you. It could be that the memory of how you were made was implanted by someone other than your [color=#ff00ff]"Maker"[/color].
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Very astute, Bard. That's certainly a possibility.
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: ...Then it's fake. All of your memories–
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Not everything. I have my own personality. Plus, there's all that I've come to learn about the mortal world on my own terms.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: My clothes, too, are my own. I made them over the years with whatever materials I could forage near the Carnal River.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: I even used whatever objects that I [color=#ffff00]fished[/color] as a reference...!
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Ahem. But still, all that I know about Akhirah, the Carnal River, [color=#00ffff]souls[/color], even the existence of my own [color=#ff00ff]Maker[/color]...
|
||||
Marco: Everything which was necessary to perform my purpose was placed in my head when I was made.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Then what do you actually know about the nature of [color=#00ffff]souls[/color]? Wh-Whether it's an implanted memory or not. What can you tell me?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Hmm... I wouldn't know how they come to be, I simply know that they come from mortals. All of them have both a [color=#00ffff]soul[/color], and a vessel.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: A vessel?
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Yes. Your physical body. And when your body dies, your [color=#00ffff]soul[/color] is left only with a very small, ephemeral vessel instead.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: You mean, this blue blobby body that I have now.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: [color=#ff00ff]Spirits[/color] have vessels, too. It's what you're looking at right now. It was given to me by my [color=#ff00ff]Maker[/color]... supposedly.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: But you can't die, can you?
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Yes...and no.
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: What does that mean?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: My vessel can't age. However, it can be unmade.
|
||||
Bard: Right... You said earlier that you'd disappear if you fell in the river.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Or, for example, if my [color=#ff00ff]Maker[/color] chooses to unmake me.
|
||||
$set_sprite bard bard/sweat
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: W-Wait, that can happen? Why?
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Maybe when [color=#ff00ff]soul ferriers[/color] are no longer needed. Or maybe if I go too far.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: G-Go too far...?
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: Do you remember when you arrived in Akhirah? And you asked me about Charon?
|
||||
$set_sprite bard bard/normal
|
||||
Bard: I-I almost forgot about that.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: Charon was [color=#ff00ff]a soul ferrier[/color] like me. But he went to the world of the living, to commune with them and tell them all that he knew.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: And when his Maker learned about his carelessness, he was unmade.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
Marco: My memory of Charon, naturally, was also [color=#ff00ff]implanted[/color] in my mind when I was made. As a cautionary tale, I suppose.
|
||||
$set_sprite bard bard/sweat
|
||||
$stop_music
|
||||
Bard: B-But that's just cruel!
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Cruel?
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Yeah! H-How your [color=#ff00ff]Maker[/color] could erase you from existence as soon as they want, without any warning or a fair trial...!
|
||||
Bard: A-And how you are forced to be a [color=#ff00ff]soul ferrier[/color], never to leave your post!
|
||||
Marco: ...
|
||||
Bard: ...
|
||||
$start_music loose_thoughts
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: I disagree.
|
||||
$set_sprite bard bard/sweat
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: Huh?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: I guess it's simply a different way of thinking about it.
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: When mortals are born, they aren't destined for a single task.
|
||||
Marco: How their lives shape out depends on their circumstances, which are out of their control. It's just the way things are.
|
||||
Marco: Or, like you said before, how the world can be unfair.
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: Still, you mortals also have the power of choice. You can affect the material circumstances around you, and bring consequences to your lives and those of others.
|
||||
Marco: Which means you get some control in how you live your own lives.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: In that sense, my existence is very simple. I'm part of a greater cycle, like a cog in a machine. Made by my [color=#ff00ff]Maker's[/color] design, for a single purpose.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: A greater cycle...?
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: And fulfill that purpose I must. Until maybe, one day, for whichever reason, I will no longer want to fulfill it. Or there won't be any more need of me.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: And when that time comes... Poof! I'll be unmade and disappear, just as quickly as I was made.
|
||||
Marco: ...If my [color=#ff00ff]Maker[/color] decides to, of course.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: ...So you'll still die, one day?
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: Not die, be unmade. But yes, it's a possibility. One that approaches 100% over an infinite amount of time...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: But it's not fair that you should die! I-I mean, be [color=#ff00ff]unmade[/color]!
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: ...
|
||||
Marco: Do you think it was fair that I should have been [color=#ff00ff]made[/color] in the first place?
|
||||
Bard: W-Well–! ...Th-That question doesn't make any sense! You can't say it was fair or not that you happened to exist.
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Exactly. So why shouldn't the end – my end – be any different? Who's to say existence itself, or nonexistence, is fair?
|
||||
$set_sprite bard bard/sweat
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: ...M-Marco...
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: Don't worry, Bard. I promise you that my demise won't come before I bring you to the [color=#ff00ff]Hereafter[/color].
|
||||
$set_sprite bard bard/normal
|
||||
Bard: S-Still with your [color=#ff00ff]Hereafter[/color] business, huh...
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: I hope that I've made it abundantly clear why I insist on it.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: A-Abundantly... But how can you even say all of this with a straight face, and still want to continue your duty?!
|
||||
Bard: Isn't it pointless, if you'll just be unmade and replaced one day?
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I-Is there even [color=#ff00ff]a Hereafter for spirits[/color]...?
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: No. Once I'm unmade, that's it. I don't have a [color=#00ffff]soul[/color] to leave behind, and thus, my essence will be lost.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/confused
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: But that's exactly what bothers me.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Huh...?
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: I know that, one day, I'll be gone. I have been made at a whim, and I've always known that I could be unmade at another.
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Marco: But mortals, like you, know that you'll die. It's not a memory imparted onto you since you're born, but surely you all realize it at some point in your lives.
|
||||
Bard: Y-Yeah... I have.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: So it's roughly the same situation, right? Then there's something that I don't understand.
|
||||
Marco: Why do most mortals seem to reject so vehemently the idea that they'll die one day? Wouldn't that make the moments while they are alive more important?
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: ...
|
||||
Bard: I-I dunno, Marco. Maybe it's just easier not to think about it?
|
||||
$set_sprite marco marco_mask/neutral_speak
|
||||
Marco: Maybe. But I'm not sure if that's the main reason that leads someone to avoid the subject... Especially given its gravity.
|
||||
$stop_music
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...I told you all that I know, Bard. I didn't want to keep this all from you.
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: Most [color=#00ffff]souls[/color] that I've ferried don't ever ask anything about me. They normally just need a confidant as they recall their lives...and I'm happy to offer them that.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Not because it's my purpose, or because my memories force me to. It's because I really want to hear what they have to say.
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: C-Can I ask you something...?
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Of course.
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: ...H-How many [color=#00ffff]souls[/color] have asked you this much?
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Regarding the [color=#ff00ff]Hereafter[/color]? Only a handful. Maybe five or six. None of them believed me at first about it, either.
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: ...Do you believe me now, Bard?
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
Bard: Th-Thank you, Marco. For telling me the truth. I can see why you thought I wouldn't believe you...
|
||||
Bard: Just one more question.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Bard: ...
|
||||
Bard: You said that you don't understand why some people pretend that death doesn't exist. And how we don't really appreciate life because of it.
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: If...If I remembered that I was one of those people... W-Would you hate me?
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: That's not–
|
||||
...Of course not, Bard. I wouldn't hate anyone for that.
|
||||
$set_sprite marco marco_mask/shy
|
||||
Marco: Besides, I don't think I would ever hate YOU... You're special, after all.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...
|
||||
$set_sprite bard bard/blush
|
||||
$continue_after_text
|
||||
Bard: ...I–
|
||||
$wait 0.5
|
||||
$reset_background
|
||||
$set_sprite marco marco_mask/look_ahead_speak bounce
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Marco: ...Oh, look at that!
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/look_ahead
|
||||
Bard: H-Huh?
|
||||
$set_sprite marco marco_mask/look_ahead_speak
|
||||
Marco: I can see a few more reveries surfacing up. We could try [color=#ffff00]fishing[/color] some more, if you're up for it.
|
||||
$set_sprite marco marco_mask/look_ahead
|
||||
Bard: Oh. Are you sure? Weren't your arms tired?
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: They've had enough rest. Anyway, would you like to try catching them without Akhirah slowing down? It could be an extra challenge.
|
||||
Bard: An extra challenge?
|
||||
$set_sprite marco marco_mask/explain
|
||||
Marco: It's not much. It just means that, when you drop the net, it'll go [color=#ffff00]a bit further up[/color] before actually landing on the surface.
|
||||
$set_sprite marco marco_mask/greet
|
||||
Marco: What do you say?
|
||||
$prompt
|
||||
$option 06_fishing_04_hard Count me in!
|
||||
$option 06_fishing_04_easy No, it's hard enough as is.
|
||||
$label 06_fishing_04_easy
|
||||
$set fishing_04_easy 1
|
||||
$start_music under_the_surface
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: M-Maybe not. Better not to make your arms tired again with the extra throwing.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: I'm sure they'll be fine. But I appreciate the concern, Bard!
|
||||
$overlay_color #00000000 0.0
|
||||
$collapse_textbox
|
||||
$overlay_color #000 1.0
|
||||
$clear_sprites
|
||||
$hide_textbox
|
||||
$overlay_color #00000000 0.0
|
||||
$wait 0.5
|
||||
|
||||
# Fishing 4
|
||||
$escape fishing fishing_04_end 0.75 false {"name":"fishing_04_head_harness","sprite":"head_harness"} {"name":"fishing_04_toy_rocket","sprite":"toy_rocket"}
|
||||
$label 06_fishing_04_hard
|
||||
$start_music under_the_surface
|
||||
Bard: Sure. That sounds fun.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: Alright, then! Whenever you're ready.
|
||||
$overlay_color #00000000 0.0
|
||||
$collapse_textbox
|
||||
$overlay_color #000 1.0
|
||||
$clear_sprites
|
||||
$hide_textbox
|
||||
$overlay_color #00000000 0.0
|
||||
$wait 0.5
|
||||
$escape fishing fishing_04_end 0.75 true {"name":"fishing_04_head_harness","sprite":"head_harness"} {"name":"fishing_04_toy_rocket","sprite":"toy_rocket"}
|
||||
$label fishing_04_head_harness
|
||||
$set_sprite fishing_item fishing_objects/head_harness reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: a head harness!
|
||||
$text_new_line A kinky accessory for BDSM, complete with leather straps and a silicone gag ball for one's snout.
|
||||
$set_sprite bard bard/blush
|
||||
Bard: O-Oh! More k-kinky stuff...
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Is it? I can't really figure out what this one is about.
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: W-Well, you wear it around your head. Your snout goes b-back here, see.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Then the gag would go between your jaws, and you can breathe through these h-holes...
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/shy
|
||||
Marco: Would you like me to try it on?
|
||||
$set_sprite bard bard/blush bounce
|
||||
Bard: N-NO, M-Marco! I d-definitely wasn't thinking that...!
|
||||
$set_sprite marco marco_mask/hold_face
|
||||
Marco: G-Good...! I'd rather not remove my mask.
|
||||
$hide_textbox
|
||||
$clear_sprites
|
||||
$escape return_to_fishing
|
||||
$label fishing_04_toy_rocket
|
||||
$set_sprite fishing_item fishing_objects/toy_rocket reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: a toy rocket!
|
||||
$text_new_line A cheap plastic toy shaped like a starfaring aircraft. It looks old and has a few dents.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Ah, this...
|
||||
$set_sprite marco marco_mask/pensive_speak
|
||||
Marco: Hmm... This is a dildo, no?
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Bard: .........
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: It isn't...?
|
||||
$set_sprite bard bard/blush
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: M-Marco...it's a children's toy.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: Oh! But it's so bright and long, and even has a flared base!
|
||||
$set_sprite marco marco_mask/playful
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Because it's a toy rocket...! I'm sure that the cheap plastic would be too toxic for a sex toy.
|
||||
$remove_sprite marco
|
||||
Bard: ...
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: A-Actually, I'm sure that the cheap plastic WOULD be too toxic for a children's toy!
|
||||
$hide_textbox
|
||||
$clear_sprites
|
||||
$escape return_to_fishing
|
||||
$label fishing_04_end
|
||||
$stop_music
|
||||
$overlay_color #000 1.0
|
||||
$wait 2.0
|
||||
$load 07_tomb
|
||||
568
scenes/visual_novels/07_tomb.txt
Normal file
568
scenes/visual_novels/07_tomb.txt
Normal file
|
|
@ -0,0 +1,568 @@
|
|||
$title Part 7: Tomb
|
||||
$overlay_color #000 0.0
|
||||
$set_sprite marco marco_mask/look_ahead
|
||||
$wait 0.5
|
||||
$overlay_color #00000000 0.5
|
||||
$wait 2.5
|
||||
Marco: ...
|
||||
$set_sprite marco marco_mask/look_ahead_speak
|
||||
Marco: I think that's everything that we are able to [color=#ffff00]fish[/color] from the Carnal River for now.
|
||||
$if fishing_04_easy < 1 07_didnt_do_easy_fishing
|
||||
Marco: I've already ordered Akhirah to set sail.
|
||||
$label 07_didnt_do_easy_fishing
|
||||
$set_sprite marco marco_mask/look_ahead
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Is everything alright? ...Are you still mad about earlier?
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: Hm? O-Oh... Not really. I was thinking about the thing that we [color=#ffff00]fished[/color].
|
||||
$set_sprite marco marco_mask/reflect
|
||||
Marco: That BDSM harness...?
|
||||
Bard: No, the rocket. I remember having a toy just like that as a young kid. It was my favorite one...
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Marco: A plastic toy rocket?
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: Yeah, but it was a different model, with more details. It was some merch from a cartoon series I was very into.
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Bard: But I've always been fond of space stuff. When I was a kid, I liked to pretend that I was an astronaut.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Just exploring the vast expanse of the Universe, far away from Earth. Far away from every problem...
|
||||
$start_music scars
|
||||
Bard: And I wanted to escape so bad.
|
||||
|
||||
# Fork 3
|
||||
$if route_a >= 2 07_f3_definitely_not_route_d
|
||||
$if route_b >= 2 07_f3_definitely_not_route_d
|
||||
$if route_c >= 2 07_f3_definitely_not_route_d
|
||||
$goto 07_f3_route_d
|
||||
$label 07_f3_definitely_not_route_d
|
||||
Bard: Because in space, I wouldn't have to think about–
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: ...What's wrong?
|
||||
$set_sprite marco marco_mask/curious
|
||||
$if route_a >= 2 07_f3_route_a
|
||||
$if route_b >= 2 07_f3_route_b
|
||||
$if route_c >= 2 07_f3_route_c
|
||||
$escape print ERR_FORK_3
|
||||
|
||||
$label 07_f3_route_a
|
||||
Bard: B-But I could never be an astronaut. Up in space, the stakes are much higher...
|
||||
Bard: If an astronaut makes the wrong choice and fails, they can put their entire crew at risk. They could destroy everything.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: Bard...?
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...After I got that bad grade, my parent got stricter. They ordered me to show them every assignment, and every grade.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: It was humiliating...whenever I got a bad grade, they didn't even say anything. Th-They just gave me this terrifying look.
|
||||
Bard: They started assigning me private tutors. I no longer had any free time, not even for my best friend...
|
||||
Bard: I had just moved to a new high school, too, b-but I couldn't even socialize and make new friends. Th-Those years were a living hell.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: And I tried. I tried to reach the high standards that my parent set out for me. I tried...!
|
||||
Bard: B-But things only got worse. I was too tired to focus on my studies, and they pushed me to take more and more meds for my concentration.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: Bard...
|
||||
Bard: Th-Then it was the day of the entrance exam for college. All I wanted to do was strap myself to the next rocket to Alpha Centauri...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: B-Because it felt like if I failed that exam, I'd simply die.
|
||||
$set_sprite marco marco_mask/clutch_chest
|
||||
Marco: ...
|
||||
Bard: I-I still remember the smell of that room. I couldn't handle all of the pressure... I was staring at my exam, but all of the words were too blurry. I started hyperventilating.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: They...they t-took me to the infirmary in the middle of the exam. They said I was having ch-chest pains... but I can barely remember having a panic attack.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...
|
||||
Bard: I was relieved when I woke up the next day, and I wasn't actually dead. B-But then I realized how crushing it was to be such a failure.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...I-I'm sorry, Bard.
|
||||
Bard: Worst of all was the look on my parent's face. Ever since that exam, th-they never looked at me the same. Like they'd completely given up on me.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Th-The criticism only got worse. Anything I did in front of them was always wrong. No matter what, I'm just doomed to fail at everything...!
|
||||
$goto 07_f3_end
|
||||
$label 07_f3_route_b
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Y'know... Wh-When an astronaut floats away from their spaceship without a lifeline, i-it's over for them.
|
||||
Bard: There isn't any way to propel themselves back to their spaceship, in the vacuum of space.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: They can only watch the ship slowly float away from reach, until their oxygen tank runs out...
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: Bard...?
|
||||
Bard: You still remember me talking about my crush, don't you, Marco...?
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: Y-Yes, of course. Your friend who was into theater.
|
||||
$set_sprite marco marco_mask/curious
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...Back then, th-they were the only person I was allowed to hang out with.
|
||||
$set_sprite marco marco_mask/confused_speak
|
||||
Marco: Why?
|
||||
$set_sprite marco marco_mask/confused
|
||||
Bard: They said...they said that one of my friends hated them. A-And they told me, I had a choice to make. It was either stick with my other friend, or them.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Marco: ...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I-I was still in love with them, so I agreed. I g-guess they realized they could manipulate someone stupid like me.
|
||||
Bard: After that, they tricked me into ditching another friend...then another...then another...
|
||||
Bard: S-Soon, I wasn't allowed to speak to anyone else. A-And they kept treating me worse and worse when we were in private.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: I-It still took me a while to finally stop having feelings for them. To realize what a fool I was.
|
||||
Bard: I wanted to break up, in p-private. When I finally worked up the courage.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: B-B-But they threw a tantrum, and humiliated me in public.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...I-I'm sorry, Bard.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: None of my old friends sided with me. They were s-still angry with me...
|
||||
Bard: ...Plus, my c-crush had been telling everyone lies behind my back, to rally them against me in case we broke up.
|
||||
Bard: I-In a single moment, I was alone. My lifeline was gone... And I became a laughing stock.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: M-My crush made sure that if I didn't stay with them, I'd have no friends left... It was all or nothing.
|
||||
Bard: Th-The bullying got so tough, my parents h-had to move me to another high school...
|
||||
Bard: A fresh start, they said. The only friend I still had left after that was from my family, after all...
|
||||
Bard: But I p-promised myself that I'd never, ever fall in love again. How could I have been so stupid to let my own emotions be weaponized against me?!
|
||||
$goto 07_f3_end
|
||||
$label 07_f3_route_c
|
||||
Bard: B-But no, I wouldn't be an astronaut. Most likely, I'd be an alien...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: And y-you know what they would do if they found an alien, Marco...?
|
||||
Bard: They'd study it. F-Figure out why it's different. Dissect it... Kill it.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: Bard...?
|
||||
$set_sprite bard bard/face_away
|
||||
Marco: After I told my guru about my s-secrets, our sessions started getting worse and worse...
|
||||
Bard: Th-They started talking about their thoughts. Nasty thoughts...t-terrible thoughts...
|
||||
Bard: And they said I should be okay with it, b-because deep down, I was just a pervert.
|
||||
$set_sprite marco marco_mask/neutral
|
||||
Marco: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: I s-said that I was uncomfortable, but they kept going...every new session, they kept talking more about it...
|
||||
Bard: I told th-them, if they didn't stop...then I wouldn't come back. And they just looked at me with a ferocious look, and told me...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: ...What did they tell you?
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: Th-That if I left, they would tell everyone... EVERYONE... my s-secrets. Th-That no one would love a perv like me after the truth came out.
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: O-One day, things got worse. They kept making me uncomfortable again... And then they...they touched my leg–
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...I ran away immediately. Before it could get worse.
|
||||
Bard: Even though I knew what they would do next.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...I-I'm sorry, Bard.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Actually, I-I still don't know...if they told everyone or not. If they actually revealed my secrets. And I'm too afraid to find out.
|
||||
Bard: I only ever asked my cousin about it... They denied it, but maybe it was just a lie to hide the terrible truth...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Now it feels like everyone sees an alien where I'm standing... D-Do they all secretly know what a filthy degenerate I am?!
|
||||
$goto 07_f3_end
|
||||
$label 07_f3_route_d
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: I remember you talking about that earlier. How your cousin also enjoyed space stuff, and shared their characters with you.
|
||||
$set_sprite marco marco_mask/playful_speak
|
||||
Marco: They practically got you to like that sort of thing, right?
|
||||
$set_sprite marco marco_mask/playful
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/pensive
|
||||
Marco: ...
|
||||
Bard: Y-Yes. We were always pretending to go on different space adventures. Since we were little... but even as we grew up, we continued.
|
||||
Bard: People would say that we were too old to play pretend, but I didn't care. Our adventures were just for the both of us, and nobody else...
|
||||
Bard: ...We would...
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/sad
|
||||
Marco: ...Bard?
|
||||
Bard: W-We would both hide in the dark, moldy attic at home. That was the dark side of the Moon, y-you see...where all my old space toys were.
|
||||
Bard: There, nobody in the entire world could reach us. N-No one in the entire blue ball hidden behind the lunar surface...
|
||||
Bard: ...Just two a-a-astronauts...me and them...
|
||||
$set_sprite marco marco_mask/curious_speak
|
||||
Marco: What's wrong, Bard?
|
||||
$set_sprite marco marco_mask/curious
|
||||
Bard: I s-saw a lot of myself in my cousin. Sometimes, it felt like they were the only person who understood me. The only one...!
|
||||
Bard: Then, one day...
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...
|
||||
Bard: ...Then, one day...they stopped visiting.
|
||||
Bard: And I got a call.
|
||||
Bard: ...
|
||||
Bard: ...They were no longer with us.
|
||||
$set_sprite marco marco_mask/clutch_chest
|
||||
Marco: ...I-I'm sorry, Bard.
|
||||
Bard: ...
|
||||
Bard: I couldn't... I c-couldn't understand, Marco.
|
||||
Bard: I s-s-saw them a few days before.
|
||||
Bard: ...
|
||||
Bard: I became...angry.
|
||||
Bard: I went back to the attic.
|
||||
Bard: I d-destroyed every single one of my old toys. Even my rocket.
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: ...
|
||||
Bard: Why? Why...?
|
||||
Bard: Why why WHY?! Wh-Why would they do that...?
|
||||
Bard: Why would they be so selfish, and leave me all by myself?!
|
||||
|
||||
$label 07_f3_end
|
||||
$set_sprite marco marco_mask/clutch_chest
|
||||
$stop_music 3.0
|
||||
Marco: B-Bard... I think that's enough.
|
||||
$set_sprite bard bard/unwell bounce
|
||||
$set_sprite marco marco_mask/shocked
|
||||
Bard: A-Aaaagh...!!
|
||||
# Bard falls to the floor
|
||||
$set_sprite bard bard/unwell fall_down
|
||||
$wait 0.5
|
||||
$sound_effect wood_thud
|
||||
Marco: Bard? What's wrong?!
|
||||
$remove_sprite bard
|
||||
Bard: M-My....my head i-is...!
|
||||
$set_sprite marco marco_mask/panic_speak bounce
|
||||
Marco: B-Bard...! Stay with me!
|
||||
$set_sprite marco marco_mask/panic_speak fade_out
|
||||
$hide_textbox
|
||||
$overlay_color #000 0.0
|
||||
$clear_sprites
|
||||
$set_background remove_mask_1
|
||||
$wait 1.0
|
||||
$overlay_color #00000000 1.0
|
||||
$wait 2.0
|
||||
Bard: Hnnnggg...
|
||||
$set_sprite marco marco_mask/clutch_chest
|
||||
Marco: Y-Your vessel...it's getting weaker. If it continues like this, then your [color=#00ffff]soul[/color] will–!
|
||||
Bard: M-Marco...p-please...
|
||||
$set_sprite marco marco_mask/crossed_arms
|
||||
Marco: B-Bard, I won't let your soul be extinguished. I promised that I'd take you to the [color=#ff00ff]Hereafter[/color].
|
||||
Bard: ...
|
||||
$set_sprite marco marco_mask/crossed_arms fade_out
|
||||
$hide_textbox
|
||||
$set_background remove_mask_2
|
||||
$wait 3.0
|
||||
$set_sprite marco marco_mask/panic_speak bounce
|
||||
Marco: Vessel...I need a vessel...
|
||||
$set_sprite marco marco_mask/panic
|
||||
Bard: ...
|
||||
$wait 0.5
|
||||
# Marco puts his hand to his face
|
||||
$set_sprite marco marco_mask/hold_face
|
||||
Marco: ...
|
||||
$wait 0.5
|
||||
$overlay_color #fff 0.0
|
||||
$overlay_color #ffffff00 0.3
|
||||
$set_sprite marco marco_mask/hold_face bounce
|
||||
Marco: ...!
|
||||
Marco: Of course! My mask! The material should be compatible, but...
|
||||
$set_sprite marco marco_mask/hold_face fade_out
|
||||
$wait 1.0
|
||||
$clear_sprites
|
||||
Marco: ...
|
||||
Marco: ...Screw it.
|
||||
$hide_textbox
|
||||
$set_background remove_mask_3
|
||||
$wait 0.5
|
||||
$sound_effect remove_mask
|
||||
$wait 1.0
|
||||
$stop
|
||||
$set_background remove_mask_pause
|
||||
$wait 2.0
|
||||
# Marco slowly takes off his mask and lowers it to Bard, and it disappears.
|
||||
Marco: ...
|
||||
Marco: I-I really hope this works...
|
||||
$hide_textbox
|
||||
$wait 0.5
|
||||
$set_background remove_mask_4
|
||||
$wait 0.5
|
||||
$set_background remove_mask_5
|
||||
$wait 2.5
|
||||
$sound_effect glowing_soul
|
||||
$wait 1.0
|
||||
$set_background remove_mask_6
|
||||
$wait 2.0
|
||||
Bard: ...
|
||||
Marco: ...
|
||||
# Bard lights up and gets off the ground
|
||||
Bard: Wh-What happened...?
|
||||
$set_background cave_wall
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: ...Ah!
|
||||
Bard: M-Marco? Your face...
|
||||
$set_sprite marco marco_no_mask/neutral reveal_fishing_item
|
||||
$wait 1.2
|
||||
Marco: ...
|
||||
$wait 0.5
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: I'm sorry, Bard.
|
||||
$set_sprite marco marco_no_mask/explain
|
||||
Marco: I-I bought you some time by giving up my mask for your vessel. And it worked, thank goodness...
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Wh-What happened?
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: It's your soul, Bard. Your vessel was no longer holding up on its own.
|
||||
$set_sprite marco marco_no_mask/sad_speak
|
||||
Marco: I...I haven't been completely honest with you.
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_no_mask/sad
|
||||
Bard: ...
|
||||
$set_sprite marco marco_no_mask/confused_speak
|
||||
Marco: I've led Akhirah away from the [color=#ff00ff]Hereafter[/color]. I didn't want you to cross over yet.
|
||||
$set_sprite marco marco_no_mask/confused
|
||||
$set_sprite bard bard/normal
|
||||
Bard: What? B-But your purpose–
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: I know, I know. But you weren't ready... No. I wasn't ready.
|
||||
$set_sprite marco marco_no_mask/closed_eyes_speak
|
||||
Marco: I didn't want to say farewell just yet.
|
||||
$set_sprite marco marco_no_mask/closed_eyes
|
||||
Bard: ...
|
||||
$set_sprite marco marco_no_mask/pensive_speak
|
||||
Marco: Souls aren't supposed to last this long out in the open. And I knew that.
|
||||
Marco: It was selfish of me to let you stay, but I didn't want to alarm you.
|
||||
$set_sprite marco marco_no_mask/shy_speak
|
||||
Marco: The truth is... you're special to me, Bard. In a way I can't put into words.
|
||||
$set_sprite marco marco_no_mask/shy
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...B-But I'm not.
|
||||
$set_sprite marco marco_no_mask/shocked
|
||||
Marco: Huh?
|
||||
$set_sprite bard bard/normal bounce
|
||||
Bard: I-I'm not special. Y-You're lying to me...!
|
||||
$set_sprite marco marco_no_mask/wide_eyed_speak
|
||||
Marco: N-No, Bard. I really want to–
|
||||
$set_sprite marco marco_no_mask/wide_eyed
|
||||
$set_sprite bard bard/normal bounce
|
||||
Bard: I-I know! You're hiding something else! Y-You're trying to manipulate me!
|
||||
$set_sprite marco marco_no_mask/surprised
|
||||
Marco: That's not true.
|
||||
$set_sprite bard bard/face_away bounce
|
||||
Bard: S-Stay away! The only reason someone would want me would be if they want to use me, and then discard me. Like everyone else...!
|
||||
$set_sprite marco marco_no_mask/shocked
|
||||
Marco: Bard, I...I just want to help you.
|
||||
Bard: ...
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: ...Please.
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
$set_sprite bard bard/normal
|
||||
Bard: There is n-nothing you can do for me, Marco.
|
||||
Bard: I-I've been lying to you all of this time! Y-You don't know what I truly am... A despicable–!
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: A despicable burden. And I'll always be one.
|
||||
Bard: There, I said it. That's what I am.
|
||||
$set_sprite marco marco_no_mask/shocked
|
||||
Marco: Th-That's not true. You're not a burden!
|
||||
Bard: ...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I-I've already made up my mind.
|
||||
$set_sprite marco marco_no_mask/surprised bounce
|
||||
Marco: What...?
|
||||
Bard: I will stop w-wasting your time... G-Goodbye.
|
||||
$reset_background
|
||||
$clear_sprites
|
||||
Marco: Bard?
|
||||
Marco: ...?!
|
||||
Marco: Wait!! D-Don't–!
|
||||
# Panic song starts playing
|
||||
$wait 1.0
|
||||
: ...
|
||||
$wait 1.0
|
||||
$sound_effect water_splash
|
||||
: *splash*
|
||||
$wait 0.5
|
||||
$set_sprite marco marco_no_mask/panic_speak bounce
|
||||
$start_music eruption
|
||||
Marco: N-No... Bard jumped into the Carnal River!
|
||||
$set_sprite marco marco_no_mask/surprised
|
||||
Marco: This isn't good! They could vanish forever! I have to get Bard back onboard before it's too late...!
|
||||
$set_sprite marco marco_no_mask/reflect
|
||||
Marco: ...I know! I'll use my [color=#ffff00]fishing net[/color] to pull them out.
|
||||
$set_sprite marco marco_no_mask/pensive_speak
|
||||
Marco: This time, I'll need to keep Akhirah moving. I just have to remember that [color=#ffff00]the net will move a bit further up from where I drop it[/color]...
|
||||
# Akhirah starts moving and Marco looks around
|
||||
$set_sprite marco marco_no_mask/look_ahead
|
||||
$hide_textbox
|
||||
$stop
|
||||
$wait 1.0
|
||||
$continue_after_text
|
||||
Marco: ...
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_no_mask/look_ahead_speak
|
||||
Marco: There. I found Bard!
|
||||
# Marco is surprised
|
||||
$set_sprite marco marco_no_mask/wide_eyed_speak
|
||||
Marco: W-Wait... There's more than one [color=#00ffff]soul[/color] in the river?! But that's impossible–
|
||||
$set_sprite marco marco_no_mask/reflect
|
||||
Marco: ...No matter. Bard has to be one of these outlines. I have no choice but to fish them all!
|
||||
$collapse_textbox
|
||||
$clear_sprites
|
||||
|
||||
# Fishing 5
|
||||
$set fishing_05_progress 0
|
||||
$escape fishing fishing_05_end 1.00 true {"name":"fishing_05_any","sprite":"bard"} {"name":"fishing_05_any","sprite":"bard"} {"name":"fishing_05_any","sprite":"bard"}
|
||||
$label fishing_05_any
|
||||
$increment fishing_05_progress
|
||||
$if fishing_05_progress == 1 fishing_05_progress_01
|
||||
$if fishing_05_progress == 2 fishing_05_progress_02
|
||||
$goto fishing_05_progress_03
|
||||
$label fishing_05_progress_01
|
||||
$set_sprite fishing_item fishing_objects/bard_regret reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: the Regret.
|
||||
$text_new_line It's whispering something in an angry voice...
|
||||
$wait 1.0
|
||||
???: "I never manage to meet other people's expectations. Why am I like this? I must be broken, deep down..."
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_no_mask/shocked bounce
|
||||
Marco: Is this...Bard's voice? It looks like a soul, but it's definitely not one. I've never seen anything like it before...
|
||||
$set_sprite marco marco_no_mask/panic_speak
|
||||
Marco: That doesn't matter right now. I have to keep looking!
|
||||
$clear_sprites
|
||||
$wait 0.5
|
||||
$escape return_to_fishing
|
||||
$label fishing_05_progress_02
|
||||
$set_sprite fishing_item fishing_objects/bard_guilt reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: the Guilt.
|
||||
$text_new_line It's whispering something in a sad voice...
|
||||
$wait 1.0
|
||||
???: "If I wasn't an unwanted failure, the lives of everyone else would be better! I make them worse simply by existing..."
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_no_mask/curious_speak
|
||||
Marco: Another soul-shaped anomaly. Could it be that Bard's soul has fractured and–?!
|
||||
$set_sprite marco marco_no_mask/hold_face
|
||||
Marco: ...No. I know that Bard is intact. They have to be...!
|
||||
$clear_sprites
|
||||
$wait 0.5
|
||||
$escape return_to_fishing
|
||||
$label fishing_05_progress_03
|
||||
$set_sprite fishing_item fishing_objects/bard_solitude reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: the Solitude.
|
||||
$text_new_line It's whispering something in a tired voice...
|
||||
$wait 1.0
|
||||
???: "Distancing myself is the only way to stop hurting others. I'll vanish from everyone's lives, even when the loneliness becomes unbearable..."
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_no_mask/sad
|
||||
Marco: ...
|
||||
$set_sprite marco marco_no_mask/look_ahead_speak
|
||||
Marco: None of these were Bard. I have to keep looking...!
|
||||
$set_sprite marco marco_no_mask/look_ahead
|
||||
$remove_sprite fishing_item
|
||||
$hide_textbox
|
||||
$wait 2.0
|
||||
Marco: ...
|
||||
$set_sprite marco marco_no_mask/look_ahead_speak
|
||||
Marco: I don't see anything else near the surface...
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
$escape return_to_fishing
|
||||
$label fishing_05_end
|
||||
Marco: ...
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: Bard...
|
||||
$set_sprite marco marco_no_mask/confused_speak
|
||||
Marco: Wh-Why would you...
|
||||
$set_sprite marco marco_no_mask/confused bounce
|
||||
Marco: ...?
|
||||
$set_sprite marco marco_no_mask/surprised
|
||||
Marco: Wait. I think I see something else!
|
||||
$set_sprite marco marco_no_mask/panic_speak
|
||||
Marco: H-Hang on, Bard! I'm coming for you!
|
||||
$set_sprite marco marco_no_mask/panic_speak fade_out
|
||||
$hide_textbox
|
||||
$wait 0.3
|
||||
$clear_sprites
|
||||
|
||||
$escape fishing fishing_06_end 1.00 true {"name":"fishing_06_soul","sprite":"bard"}
|
||||
$label fishing_06_soul
|
||||
$set_sprite bard fishing_objects/bard_weird reveal_fishing_item
|
||||
$expand_textbox
|
||||
$wait 1.0
|
||||
: You found: Bard...?
|
||||
$text_new_line This soul's core is completely clouded with self-doubt. It is unresponsive.
|
||||
$stop_music
|
||||
$set_sprite marco marco_no_mask/reflect
|
||||
Marco: Th-This is definitely Bard's [color=#00ffff]soul[/color]! But...
|
||||
Marco: ...
|
||||
$set_sprite marco marco_no_mask/shocked bounce
|
||||
Marco: O-Oh, no. Its core... Is it too late?
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: Is Bard...?
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
$overlay_color #00000000 0.0
|
||||
$start_music ambiance_cave 5.0
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$overlay_color #000 2.0
|
||||
$remove_sprite marco
|
||||
$reset_background
|
||||
$escape return_to_fishing
|
||||
$label fishing_06_end
|
||||
$wait 3.0
|
||||
$overlay_color #00000000 1.0
|
||||
Marco: Come on... Wake up!
|
||||
$continue_after_text
|
||||
: ...
|
||||
$wait 2.5
|
||||
Marco: ...
|
||||
$wait 0.5
|
||||
Marco: I managed to find you, Bard. Y-You're safe now. Please... Wake up...
|
||||
$continue_after_text
|
||||
: ...
|
||||
$wait 2.5
|
||||
Marco: ...
|
||||
$wait 0.5
|
||||
Marco: It was all my fault. All because I couldn't do my job. All because...
|
||||
Marco: ...I started to have feelings for you.
|
||||
$continue_after_text
|
||||
: ...
|
||||
$wait 2.0
|
||||
Marco: It was so selfish of me. I should have given you a proper send off, like I would any other soul. It's my fault you won't be able to cross over anymore!
|
||||
$continue_after_text
|
||||
: ...
|
||||
$wait 1.0
|
||||
Marco: I-Is your vessel growing weak? But I already sacrificed my mask...
|
||||
Marco: Wait, my trench coat! I can also give it to you! Let me just...
|
||||
$set_sprite bard fishing_objects/bard_weird
|
||||
$stop_music 0.0
|
||||
: ...Don't...
|
||||
Marco: ...!
|
||||
$start_music ambiance_river 5.0
|
||||
$overlay_color #ffffff00 0.0
|
||||
$overlay_color #fff 1.0
|
||||
$wait 0.5
|
||||
$set_sprite bard fishing_objects/bard_normal
|
||||
$overlay_color #ffffff00 2.0
|
||||
# Bard's soul appears unclouded
|
||||
$continue_after_text
|
||||
Bard: ...
|
||||
Bard: Don't... take off your trench coat... I-It looks fine on you.
|
||||
$set_sprite marco marco_no_mask/shocked bounce
|
||||
Marco: Bard!
|
||||
$set_sprite marco marco_no_mask/happy
|
||||
$wait 0.5
|
||||
Marco: Bard...I...
|
||||
$set_sprite marco marco_no_mask/sad
|
||||
$wait 1.5
|
||||
$continue_after_text
|
||||
Marco: ...
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_no_mask/cry bounce
|
||||
# Marco is covering his teary eyes with his arm
|
||||
$overlay_color #00000000 0.0
|
||||
Marco: ......
|
||||
$hide_textbox
|
||||
$wait 1.0
|
||||
$overlay_color #000 2.0
|
||||
$clear_sprites
|
||||
$wait 1.0
|
||||
$load 08_judgement
|
||||
288
scenes/visual_novels/08_judgement.txt
Normal file
288
scenes/visual_novels/08_judgement.txt
Normal file
|
|
@ -0,0 +1,288 @@
|
|||
$title Part 8: Judgement
|
||||
$overlay_color #000 0.0
|
||||
$wait 1.0
|
||||
$set_background after_rescue
|
||||
$overlay_color #00000000 1.0
|
||||
$stop_music
|
||||
$wait 1.5
|
||||
Marco: ...As far as I can tell, your [color=#00ffff]soul[/color] is stable. The vessel is still weak, but it appears to have no lingering side effects from the Carnal River.
|
||||
Bard: Why?
|
||||
Marco: I don't know. Maybe the Carnal River–
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$set_sprite marco marco_no_mask/confused
|
||||
$start_music loose_thoughts
|
||||
Bard: N-No. I mean, why did you s-save me?
|
||||
$set_sprite marco marco_no_mask/clutch_chest
|
||||
Marco: Why wouldn't I?! The thought of losing you made my chest hurt, like it was twisting itself inside-out.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: B-Because it's your job to take me safely to the [color=#ff00ff]Hereafter[/color]...
|
||||
$set_sprite marco marco_no_mask/sad_speak
|
||||
Marco: No.
|
||||
Marco: I also didn't want to take you there, and be forced to say farewell to you.
|
||||
$set_sprite marco marco_no_mask/sad
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: I don't understand why I feel like this... and I was afraid of these emotions, because they go directly against my duty as [color=#ff00ff]soul ferrier[/color].
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
$set_sprite bard bard/blush
|
||||
Bard: M-Marco...
|
||||
$set_sprite marco marco_no_mask/explain
|
||||
Marco: But more than that, there was one thing that I was afraid of the most...
|
||||
Marco: That you wouldn't understand why I didn't want you to cross over. That you would misinterpret my intent, and do something reckless.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...A-And I did just that.
|
||||
$set_sprite marco marco_no_mask/closed_eyes_speak
|
||||
Marco: Still... I'm sorry that I lied and caused you so much pain.
|
||||
$set_sprite marco marco_no_mask/neutral
|
||||
$set_sprite bard bard/normal
|
||||
Bard: N-No, Marco! I'm the one who should be apologizing...!
|
||||
Bard: First of all, for throwing myself into the Carnal River, and causing you to panic when you tried to rescue me... But I–
|
||||
Bard: ...I'm so sorry, Marco. Gosh, that was so stupid in retrospect.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Besides, I understand why you'd lie about the [color=#ff00ff]Hereafter[/color]... M-Meanwhile, I've only had stupid reasons to lie to you, from the very start.
|
||||
$set_sprite marco marco_no_mask/pensive
|
||||
Marco: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: When we first met, I told you that there wasn't anything in my life to reflect on.
|
||||
Bard: And you thought I had amnesia, or something... but I really didn't. Still, I went along with it.
|
||||
Bard: It was just a tiny lie so you would stop asking me questions, b-but you only kept asking me more... And you even tried to help me remember!
|
||||
$set_sprite marco marco_no_mask/confused
|
||||
Marco: ...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I...I decided to play along. I pretended that I didn't have my memories.
|
||||
Bard: That's how I learned to deal with others while I was alive. Lie, and pretend that everything was alright... And that I didn't need help from anyone else.
|
||||
Bard: It was like wearing a mask for the sake of others, to hide the ugly world inside of my own head. And to keep others away so that they couldn't hurt me.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: When I said that there wasn't anything to reflect on... It's not that I'd forgotten everything.
|
||||
Bard: It's because my life, in the end, amounted to nothing.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: It was pointless. Meaningless. Not worth reflecting on.
|
||||
Bard: When I met you, I decided to wear this mask one more time, and lie. And, well...
|
||||
Bard: Heh. In the end, I guess this charade almost made my life sound interesting, didn't it...?
|
||||
$set_sprite bard bard/normal
|
||||
Bard: But the reality is that it's not...
|
||||
Bard: I'm sorry, Marco. For lying. For everything. I know now that I shouldn't have. You've been nothing but kind to me...
|
||||
$stop_music
|
||||
$wait 0.5
|
||||
$set_sprite marco marco_no_mask/curious
|
||||
Marco: ...
|
||||
$wait 0.5
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I understand if you hate me, now that you know the truth. I didn't want to toy with your emotions–
|
||||
$set_sprite marco marco_no_mask/curious_speak
|
||||
Marco: I always knew.
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: H-Huh?
|
||||
$set_sprite marco marco_no_mask/explain
|
||||
Marco: I mean, not with certainty. But I had a hunch. That you hadn't actually lost your memories.
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: H-How...?
|
||||
$set_sprite marco marco_no_mask/pensive_speak
|
||||
Marco: Well, just a few details you've let slip here or there. I wasn't certain until you admitted to it, though.
|
||||
$set_sprite marco marco_no_mask/pensive
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Th-Then... Why didn't you confront me about it?!
|
||||
$set_sprite marco marco_no_mask/playful_speak
|
||||
Marco: Because if I did, you would've likely stayed quiet. And you wouldn't have been able to reflect about your life, and realize how precious it was.
|
||||
$set_sprite marco marco_no_mask/playful
|
||||
$start_music stars
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...B-But I still don't think it was.
|
||||
$set_sprite marco marco_no_mask/neutral
|
||||
|
||||
# Fork 4
|
||||
$if route_a >= 2 08_f4_route_a
|
||||
$if route_b >= 2 08_f4_route_b
|
||||
$if route_c >= 2 08_f4_route_c
|
||||
$goto 08_f4_route_d
|
||||
$label 08_f4_route_a
|
||||
Bard: I couldn't ever do anything right... So I thought, why do anything at all? I was bound to fail, anyway.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: A-And even if I did anything, I'd get the same negative criticism. If the result I get is the same, it's better to save my energy and not do it in the first place, right?
|
||||
Bard: I could never accomplish anything good. There were days when I felt like just a waste of space. M-My entire existence felt like a net negative in the world...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: If heaven and hell really exist, then I'm doomed for hell, no matter what.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: Bard, you don't have to be perfect. Nobody CAN be perfect. That's why it's only an ideal.
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: No matter what your parent thought, failure is a part of doing things. It doesn't mean that putting in the effort is worthless, or that goals are not worth pursuing.
|
||||
$set_sprite marco marco_no_mask/happy
|
||||
Marco: And whether you have managed to achieve a lot in your life or not doesn't mean that you are or aren't deserving of love.
|
||||
$goto 08_f4_end
|
||||
$label 08_f4_route_b
|
||||
Bard: After my first crush...well, crushed my heart, I could never trust anyone with my feelings anymore... What if someone started using them against me again?
|
||||
Bard: N-No matter if it was a romantic or a platonic relationship, almost all of them felt hollow. Like we were just two people using each other...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Was I manipulating them into liking me, unconsciously lying about myself? I wanted something that was real, but...
|
||||
Bard: The romances that you see in movies and games... Are they all just fairy tales? Simply fake?
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: You know...even i-if I turn into a ghost, and roam the Earth for an eternity, I don't think I'll ever stumble upon another ghost who really likes me.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: Bard, I–
|
||||
$set_sprite marco marco_no_mask/shy
|
||||
Marco: ...
|
||||
$set_sprite marco marco_no_mask/shy_speak
|
||||
Marco: There's more to relationships than just mutual attraction. There are boundaries, affection, commitments, vulnerabilities... and much more.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
$set_sprite marco marco_no_mask/greet
|
||||
Marco: For some people, being in a relationship is extremely hard. Opening yourself to someone else is always a very brave thing to do.
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: I think that love is real, and you deserve to be loved. But that friend of yours wasn't going to offer you any real love.
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
$goto 08_f4_end
|
||||
$label 08_f4_route_c
|
||||
Bard: Most of my life, it felt like everyone else was hiding something from me. Something obvious. Something that everyone knew except for me.
|
||||
Bard: Maybe they all were pretending to like me, b-but they secretly hated me. I kept feeling like people were talking about me behind my back...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: It only made me feel like I had to hide myself even more. So other people could have as little reasons to hate me as possible.
|
||||
Bard: It feels that, if I reincarnate as a snail or something, the other snails will still be able to look through me and see how twisted my soul really is.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I'll just want to hide forever in my little snail shell... All alone in the next life, too.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: Bard, I don't think your soul is twisted. It's normal to have different preferences, and that doesn't make you better or worse than others.
|
||||
$set_sprite marco marco_no_mask/reflect
|
||||
Marco: It's also normal to have darker thoughts. And I think it's wrong that others would judge you harshly about your fetishistic desires if you aren't harming anyone.
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: I'd rather judge someone like your guru, who's actually doing harm to others.
|
||||
$set_sprite marco marco_no_mask/sad_speak
|
||||
Marco: The world at large may not change into a more accepting place... But I'm sure there is a community out there that would have accepted you.
|
||||
$set_sprite marco marco_no_mask/happy
|
||||
Marco: I wish you could go back to the living world, just to find these people who would truly love you for who you are.
|
||||
$goto 08_f4_end
|
||||
$label 08_f4_route_d
|
||||
$set route_d 1
|
||||
Bard: Unlike my c-cousin's... They always seemed so happy, I always remembered their face with a smile on it.
|
||||
Bard: Th-They were the only person who could understand me on a deep level. It was like a mirror into who I'd grow up to be.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: And maybe, if they could be happy, then I could, too...
|
||||
Bard: ...So it sounded like a lie, at first. When I heard that they had taken their own life.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: It...it wasn't fair. The only person I truly cherished... who I loved like my sibling... That they would come to such a terrible conclusion.
|
||||
Bard: A-And I kept asking myself... Was it maybe my fault, somehow? Maybe I didn't see the signs. Maybe I said something I shouldn't, or didn't say something I should have?
|
||||
Bard: A-And worst of all... Was it inevitable that I'd follow in their f-footsteps...?
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: Bard. What happened to your cousin was their choice. It wasn't your fault.
|
||||
$set_sprite marco marco_no_mask/pensive_speak
|
||||
Marco: I can't tell you why they did it. Maybe they were desperate, and couldn't keep their self-doubt in check. Maybe they thought the world didn't have a place for them.
|
||||
$set_sprite marco marco_no_mask/curious_speak
|
||||
Marco: But it wasn't your fault. It's clear that you loved them a lot, and they must've known that you did. They should have known how their death would affect you.
|
||||
$set_sprite marco marco_no_mask/crossed_arms_speak
|
||||
Marco: Unfortunately, we can't change the past. What's done is done.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: But I've met enough souls, and I don't think suicide is ever the answer. Not to them, or their loved ones, or anyone.
|
||||
Marco: No matter how much things may seem hopeless in the moment.
|
||||
$set_sprite marco marco_no_mask/clutch_chest
|
||||
Marco: When you're lost in your own self-destructive thoughts, it's easy to forget about all the love present in your life.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...
|
||||
Bard: ...You're n-not just talking about my cousin, are you?
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
Marco: ...
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Did...did you always know?
|
||||
$set_sprite marco marco_no_mask/sad_speak
|
||||
Marco: ...I had a hunch, too.
|
||||
$set_sprite marco marco_no_mask/sad
|
||||
|
||||
$label 08_f4_end
|
||||
Bard: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Y-You know... When you talk like that... It sounds like you know a lot more about life than anyone who actually lived.
|
||||
$set_sprite marco marco_no_mask/shy_speak
|
||||
Marco: Who, me? Not at all. There is still a lot I struggle to understand.
|
||||
$set_sprite marco marco_no_mask/shy
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ...Yeah, me too.
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Oh. I was thinking about something.
|
||||
$set_sprite marco marco_no_mask/curious_speak
|
||||
Marco: What is it?
|
||||
$set_sprite marco marco_no_mask/curious
|
||||
Bard: I still don't understand how I'm still... w-well, "alive" is not the right word. But how didn't my [color=#00ffff]soul[/color] disappear when I threw myself into the Carnal River?
|
||||
$set_sprite marco marco_no_mask/pensive
|
||||
Marco: Hmm...
|
||||
$set_sprite marco marco_no_mask/explain
|
||||
Marco: It could be that my implanted memories are wrong, or incomplete. Or...
|
||||
$set_sprite marco marco_no_mask/confused_speak
|
||||
Marco: ...Maybe your soul weighs heavy on a living person's mind, even as we speak.
|
||||
$set_sprite marco marco_no_mask/confused
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_no_mask/closed_eyes_speak
|
||||
Marco: Bard, please try not to take what I'm about to say the wrong way.
|
||||
$set_sprite marco marco_no_mask/playful_speak
|
||||
Marco: But maybe you're ACTUALLY forgetting something. Or rather, someones.
|
||||
$set_sprite marco marco_no_mask/playful
|
||||
$set_sprite bard bard/normal
|
||||
Bard: Someones...?
|
||||
$set_sprite marco marco_no_mask/sad_speak
|
||||
Marco: Yes. Other people who are still alive. Who you shared nice moments with, and who have fond memories of you. To whom you were very dear.
|
||||
$if route_d < 1 08_no_route_d_extra
|
||||
$set_sprite marco marco_no_mask/clutch_chest
|
||||
Marco: Like your cousin was to you.
|
||||
$label 08_no_route_d_extra
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite marco marco_no_mask/sad
|
||||
Bard: I...I think I remember at least one. But I'm not sure if they really cared about me...
|
||||
Bard: I never had the chance to talk to you about them, but–
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...
|
||||
Bard: I-I feel guilty about leaving them behind, Marco.
|
||||
$set_sprite marco marco_no_mask/pensive_speak
|
||||
Marco: I think that's normal, Bard. I haven't met a single [color=#00ffff]soul[/color] that doesn't feel regretful about something after they've passed away.
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_no_mask/pensive
|
||||
Bard: ...E-Even the farmer lady...
|
||||
$set_sprite marco marco_no_mask/closed_eyes_speak
|
||||
Marco: Even the farmer lady.
|
||||
$set_sprite marco marco_no_mask/closed_eyes
|
||||
$stop_music
|
||||
Bard: ...
|
||||
$overlay_color #00000000 0.0
|
||||
$overlay_color #000 2.0
|
||||
$reset_background
|
||||
$clear_sprites
|
||||
$overlay_color #00000000 1.0
|
||||
$set_sprite bard bard/sweat bounce
|
||||
$set_sprite marco marco_no_mask/surprised
|
||||
$overlay_color #fff 0.0
|
||||
$overlay_color #ffffff00 0.3
|
||||
Bard: IT'S NOT FAIR!!
|
||||
$set_sprite marco marco_no_mask/wide_eyed_speak
|
||||
Marco: Not fair...?
|
||||
$set_sprite marco marco_no_mask/wide_eyed
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: I-It's not fair... that only when I'm running out of time... that only after I DIED...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: It's not fair that I only found a purpose to live now, of all times...!
|
||||
$set_sprite marco marco_no_mask/shy
|
||||
Marco: ...
|
||||
$set_sprite marco marco_no_mask/shy_speak
|
||||
Marco: And...what is that purpose?
|
||||
$set_sprite marco marco_no_mask/shy
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ...
|
||||
$start_music afloat
|
||||
Bard: It's you, Marco.
|
||||
Bard: Being with you, after all I've been through... Somehow, it makes me feel special.
|
||||
$set_sprite marco marco_no_mask/crossed_arms
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...You make me feel special.
|
||||
$set_sprite marco marco_no_mask/clutch_chest
|
||||
Marco: O-Oh, Bard...
|
||||
$wait 0.5
|
||||
# Marco covers his face with his sleeve again
|
||||
$set_sprite marco marco_no_mask/cry
|
||||
$wait 0.5
|
||||
Marco: I'm so happy to hear you say that...!
|
||||
$hide_textbox
|
||||
$overlay_color #00000000 0.0
|
||||
$wait 1.0
|
||||
$overlay_color #000 5.0
|
||||
$clear_sprites
|
||||
$reset_background
|
||||
$wait 1.0
|
||||
# Fade to black
|
||||
$load 09_postmortem
|
||||
303
scenes/visual_novels/09_postmortem.txt
Normal file
303
scenes/visual_novels/09_postmortem.txt
Normal file
|
|
@ -0,0 +1,303 @@
|
|||
$title Final Part: Postmortem
|
||||
$overlay_color #000 0.0
|
||||
$set_background marco_piloting_with_bard_1
|
||||
# Fade back to Akhirah traveling at top speed, and Marco turns towards Bard
|
||||
$wait 2.0
|
||||
$overlay_color #00000000 3.0
|
||||
$wait 2.0
|
||||
$set_background marco_piloting_with_bard_2 true
|
||||
$set_background marco_piloting_with_bard_3
|
||||
$wait 2.0
|
||||
Marco: Akhirah will take us straight to the [color=#ff00ff]Hereafter[/color]. It shouldn't be long, and your vessel should hold until then.
|
||||
Bard: ...
|
||||
Bard: D-Do I really have to...?
|
||||
Marco: I won't force you to cross over. That's up to you. And what awaits you after is beyond me.
|
||||
Bard: ...So we can't even stay together.
|
||||
Marco: N-No, I'm afraid. Your vessel will only get weaker while it's exposed to the environment, in the same Manner as metal oxidizes.
|
||||
Bard: B-But I don't want to leave you behind and make you sad, Marco.
|
||||
Marco: It's fine, Bard. I will miss you, but things inevitably had to come to an end. I'll be sure to give you a proper send-off.
|
||||
# Marco seems down
|
||||
Marco: ...
|
||||
Bard: ...
|
||||
$set_background cave_wall_2
|
||||
$set_sprite bard bard/normal bounce
|
||||
$set_sprite marco marco_no_mask/sad
|
||||
Bard: But...what if th-there's another way...?
|
||||
$set_sprite marco marco_no_mask/sad_speak
|
||||
Marco: Hmm?
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ...N-No, nevermind. It was a bad idea.
|
||||
$set_sprite marco marco_no_mask/greet
|
||||
Marco: Whatever you have in mind, I'd love to hear it, Bard.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: Well, what if there was a way I could stay with you? In a place where my soul wouldn't stay exposed to the environment.
|
||||
$set_sprite bard bard/blush
|
||||
Bard: ...Inside of you.
|
||||
$set_sprite marco marco_no_mask/shocked
|
||||
Marco: Oh! You mean, that vore thing we were talking about earlier.
|
||||
$set_sprite marco marco_no_mask/clutch_chest
|
||||
Marco: But I promised you that I wouldn't bring it up again...
|
||||
$set_sprite bard bard/sweat bounce
|
||||
Bard: W-Well, I'm bringing it up now! It could work, right...?
|
||||
$set_sprite marco marco_no_mask/reflect
|
||||
Marco: I...I think so. But I'm afraid that I might hurt you, even if I'm completely careful.
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...Is THAT your worry? Not your duty as [color=#ff00ff]soul ferrier[/color]?
|
||||
$set_sprite marco marco_no_mask/confused_speak
|
||||
Marco: My duty... What about it?
|
||||
$set_sprite marco marco_no_mask/confused
|
||||
$set_sprite bard bard/sweat
|
||||
Bard: That's why I thought it was a bad idea. Because then it might be against your [color=#ff00ff]purpose[/color], and–
|
||||
$set_sprite marco marco_no_mask/playful_speak
|
||||
Marco: Oh, that? Bard... You're more important to me than that.
|
||||
$set_sprite bard bard/normal
|
||||
$set_sprite marco marco_no_mask/playful
|
||||
Bard: ...Really?
|
||||
$set_sprite marco marco_no_mask/shy_speak
|
||||
Marco: Really.
|
||||
$stop_music
|
||||
$set_sprite bard bard/face_away
|
||||
$set_sprite marco marco_no_mask/shy
|
||||
Bard: ...
|
||||
Bard: Then I've made up my mind.
|
||||
$set_sprite bard bard/blush
|
||||
Bard: I want you to swallow me.
|
||||
$set_sprite marco marco_no_mask/surprised
|
||||
Marco: Bard, are you sure? The last time I brought this up, you weren't happy about it.
|
||||
$set_sprite marco marco_no_mask/wide_eyed
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: N-No, I'm not sure. But I'm not sure about going to the [color=#ff00ff]Hereafter[/color], either.
|
||||
Bard: I can never be sure if I'm doing the right thing or not.
|
||||
$set_sprite marco marco_no_mask/closed_eyes
|
||||
Marco: ...
|
||||
$set_sprite bard bard/blush
|
||||
Bard: I trust you, Marco. Before, I didn't know if I wanted to risk being inside of someone I barely knew.
|
||||
Bard: But now, deep down in my soul, I know that this is what I want. To be close to you.
|
||||
$set_sprite marco marco_no_mask/hold_face
|
||||
$set_sprite bard bard/normal
|
||||
Marco: ...I'm also not sure, Bard.
|
||||
$set_sprite marco marco_no_mask/explain
|
||||
Marco: Excited as I was to try it, my implanted memories said nothing about vore. And even if they did, I wouldn't trust them necessarily.
|
||||
$set_sprite marco marco_no_mask/curious_speak
|
||||
Marco: In theory, your vessel should be safe inside of mine. You would be safe from the environment, and your soul should remain intact.
|
||||
Marco: Still, there are things that we cannot be certain about. Something bad could happen even if we are extremely careful.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: ...But my feelings also want me to figure it out, together with you.
|
||||
$set_sprite marco marco_no_mask/neutral
|
||||
$set_sprite bard bard/blush
|
||||
Bard: Y'now, I have a feeling that it will be alright. But...
|
||||
$set_sprite bard bard/normal
|
||||
Bard: I-I just don't want anything bad to happen to you for my sake.
|
||||
$set_sprite marco marco_no_mask/reflect
|
||||
Marco: But as I've told you, this is what I want. It's also for my sake. I've already made up my mind.
|
||||
$set_sprite marco marco_no_mask/sad_speak
|
||||
Marco: No matter what comes of it, concerning my [color=#ff00ff]Maker[/color] or not... I will deal with any consequences later.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: But I assure you that they won't be bad... And I assure that I won't ever abandon you.
|
||||
$set_sprite marco marco_no_mask/neutral
|
||||
$set_sprite bard bard/face_away
|
||||
Bard: ...O-Okay.
|
||||
$set_sprite marco marco_no_mask/neutral_speak
|
||||
Marco: Are you ready?
|
||||
$set_sprite marco marco_no_mask/neutral
|
||||
$set_sprite bard bard/normal
|
||||
Bard: ...Yes. Absolutely.
|
||||
$set_sprite marco marco_no_mask/happy
|
||||
Marco: I promise I'll be gentle, Bard. N-Now, please stay still...
|
||||
# Play animation
|
||||
$overlay_color #00000000 0.0
|
||||
$collapse_textbox
|
||||
$overlay_color #000 1.0
|
||||
$hide_textbox
|
||||
$reset_background
|
||||
$clear_sprites
|
||||
$wait 0.5
|
||||
$overlay_color #00000000 0.0
|
||||
$start_music entangled
|
||||
$play_video animation
|
||||
$stop_music 0.0
|
||||
$wait 2.0
|
||||
$show_textbox
|
||||
$expand_textbox
|
||||
: ...
|
||||
$wait 1.0
|
||||
Marco: ...Hic!
|
||||
$set_sprite marco marco_post_vore/confused reveal_fishing_item
|
||||
$wait 1.5
|
||||
Marco: O-Oh, that felt weird... It was harder than I thought it would be.
|
||||
: ...
|
||||
$set_sprite marco marco_post_vore/neutral_speak
|
||||
Marco: Bard, can you hear me?
|
||||
$set_sprite marco marco_post_vore/neutral
|
||||
: ...
|
||||
$set_sprite marco marco_post_vore/worried_speak
|
||||
Marco: I-Is everything alright in there–?
|
||||
$set_sprite marco marco_post_vore/worried bounce
|
||||
Bard: AAAAAAHHH!
|
||||
Marco: ...?!
|
||||
Bard: I-It's...it's amazing!!
|
||||
$set_sprite marco marco_post_vore/confused
|
||||
Marco: ...Being inside of me?
|
||||
Bard: Yes! M-Marco, that was better than anything I could've hoped for...
|
||||
$set_sprite marco marco_post_vore/worried_speak
|
||||
Marco: But I tossed you around in my mouth, and you felt so tight going down my throat! I didn't accidentally scrape your vessel with my tooth, did I? Or–
|
||||
$set_sprite marco marco_post_vore/worried
|
||||
Bard: Slow down, Marco...! I told you, it was perfect.
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: ...How does it feel?
|
||||
$set_sprite marco marco_post_vore/think
|
||||
Bard: It feels...warm. And bright. And safe. It's as if I can feel you all around me.
|
||||
$set_sprite marco marco_post_vore/grin
|
||||
Marco: Well, I am literally all around you...
|
||||
$set_sprite marco marco_post_vore/neutral
|
||||
Bard: I-It's simply wonderful. And perfect... I'm loving every moment of it...
|
||||
$set_sprite marco marco_post_vore/neutral_speak
|
||||
$start_music stars
|
||||
$overlay_color #00000000 0.0
|
||||
Marco: ...Me too.
|
||||
$set_sprite marco marco_post_vore/neutral fade_out
|
||||
$hide_textbox
|
||||
$wait 0.5
|
||||
$overlay_color #000 1.0
|
||||
$wait 1.0
|
||||
$set_background post_vore_1
|
||||
$overlay_color #00000000 1.0
|
||||
$wait 2.0
|
||||
Bard: ...Marco?
|
||||
$set_sprite marco marco_post_vore/confused
|
||||
Marco: Yes?
|
||||
Bard: I...I'm thinking about what you told me earlier.
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: Thinking about what, exactly?
|
||||
$set_sprite marco marco_post_vore/think
|
||||
Bard: Well... I guess all of it, really. Mainly the things you said about love, and my life...
|
||||
Bard: A part of me still thinks it's pointless to think about it, since I'm already dead. But it's still a big part of who I turned out to be.
|
||||
Bard: I dunno, there's still a lot I haven't talked about. The good moments I had. The harm that I caused to others.
|
||||
Bard: I regret not telling you all of it before you decided to swallow me. I'm worried that you only started to like me based on a lie...
|
||||
$set_sprite marco marco_post_vore/confused
|
||||
Marco: Well, I still like you for who you are! It's not like everything you told me was a lie.
|
||||
Marco: And I could still see through the glaring ones, and find the nugget of truth in your words.
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: And it's normal to feel regrets after anything. Especially when it comes to your entire life.
|
||||
Marco: Life is complicated... Figuring stuff out on your own is a tough ask of anyone. Still, no one knows what it's like to be you better than yourself.
|
||||
$set_sprite marco marco_post_vore/neutral_speak
|
||||
Marco: And besides, we didn't have time before. Now we'll have all the time for you to tell me those things... At your own pace.
|
||||
Marco: You, too, are a never-ending puzzle. And, if you'll let me, I'd love to figure out together how big it can get with each new piece!
|
||||
$set_sprite marco marco_post_vore/neutral
|
||||
Bard: ...You're too good, Marco.
|
||||
Bard: A-Also, I think I have the answer to your question.
|
||||
$set_sprite marco marco_post_vore/confused
|
||||
Marco: My...question?
|
||||
Bard: You were trying to figure out the meaning of life for us mortals, no? Why we think about our deaths differently from spirits like you.
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: ...Do you think you can answer that?
|
||||
$set_sprite marco marco_post_vore/think
|
||||
Bard: K-Kinda... But it's kinda scary to think about.
|
||||
Bard: I think that... There is no answer. There is no purpose to life.
|
||||
$set_sprite marco marco_post_vore/neutral
|
||||
Marco: ...
|
||||
Bard: Good things and bad things happen without a greater meaning behind them. I-I tried to make sense of the world, but there wasn't any sense to make out.
|
||||
Bard: Life and death will always exist, even if someone like me tries to pretend they don't. And that finality is what makes life worth living.
|
||||
$set_sprite marco marco_post_vore/think
|
||||
Marco: ...
|
||||
Bard: O-Of course, everything will end eventually, and the memories will no longer exist.
|
||||
Bard: But the things that you do will still impact the world around you. Maybe in ways I can't even imagine.
|
||||
Bard: We can ignore that every action has a reaction, or that anyone can do both good and bad things. But that's taking away the importance of our lives.
|
||||
Bard: And just because something is meaningless, it doesn't mean it's worthless. Like life itself.
|
||||
$set_sprite marco marco_post_vore/think
|
||||
Marco: ...
|
||||
Bard: So, I think that's my answer. I don't think there's any real meaning to life, but I think that its existence is still important.
|
||||
$stop_music
|
||||
$set_sprite marco marco_post_vore/confused
|
||||
Marco: ...Hmm.
|
||||
Bard: W-Well...?
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: I couldn't agree more with you, Bard.
|
||||
Marco: ...Except for one thing.
|
||||
$set_sprite marco marco_post_vore/think
|
||||
Bard: And that is...?
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: Well, all that you just told...
|
||||
# Marco grins
|
||||
$set_sprite marco marco_post_vore/grin bounce
|
||||
$wait 0.5
|
||||
$start_music fulminant
|
||||
Marco: That still doesn't answer my question.
|
||||
# A few objects appear in the Carnal River
|
||||
$set_sprite marco marco_post_vore/grin fade_out
|
||||
$hide_textbox
|
||||
$wait 1.0
|
||||
$set_background post_vore_2 true
|
||||
$overlay_color #ffffff00 0.0
|
||||
$wait 1.0
|
||||
$set_background post_vore_3
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_post_vore/grin
|
||||
Bard: A-Answer...? But my point is that there isn't a way to answer!
|
||||
$set_sprite marco marco_post_vore/confused
|
||||
Marco: Well, sure. I still haven't figured out how mortal lives work.
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: And while you've certainly given me an explanation... It's still only a single explanation.
|
||||
# More things appear, and things get brighter
|
||||
$set_sprite marco marco_post_vore/think fade_out
|
||||
$set_background post_vore_4
|
||||
$overlay_color #ffffff18 2.0
|
||||
$set_background post_vore_5
|
||||
$wait 1.0
|
||||
$set_sprite marco marco_post_vore/think
|
||||
Bard: A-A single explanation...?
|
||||
$set_sprite marco marco_post_vore/think_speak
|
||||
Marco: Yes. I figured out that there is more than one explanation to my question.
|
||||
Marco: I appreciate what you've just told me. But I'm still not satisfied.
|
||||
$set_sprite marco marco_post_vore/grin
|
||||
Marco: In fact, your words only makes me want to seek it out even more. I want to figure out what mortal life really is like. What it means... to me.
|
||||
$overlay_color #ffffff30 0.5
|
||||
Bard: Heh... S-So you're not giving up.
|
||||
$set_sprite marco marco_post_vore/neutral_speak
|
||||
Marco: I'm not.
|
||||
$set_sprite marco marco_post_vore/neutral
|
||||
Bard: Good... I just hope that I can stick with you as you figure things out.
|
||||
$set_sprite marco marco_post_vore/neutral_speak
|
||||
Marco: Of course, Bard.
|
||||
$set_sprite marco marco_post_vore/accomplished bounce
|
||||
$wait 0.5
|
||||
Marco: And... I'll be glad if you do. I wouldn't have it any other way.
|
||||
$wait 0.5
|
||||
$set_sprite marco marco_post_vore/accomplished fade_out
|
||||
$hide_textbox
|
||||
$stop_music 8.0
|
||||
# Things get impossibly bright, the entire river is white now. Fulminant fades out
|
||||
$set_background post_vore_6
|
||||
$overlay_color #ffffff7f 2.0
|
||||
$set_background post_vore_7
|
||||
$wait 1.0
|
||||
$clear_sprites
|
||||
Bard: Oh, and Marco?
|
||||
$wait 1.0
|
||||
Marco: Yes, Bard?
|
||||
$wait 1.0
|
||||
Bard: ...
|
||||
$wait 2.0
|
||||
Bard: ...Thank you.
|
||||
# It all fades completely to white
|
||||
$wait 2.0
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$wait 0.5
|
||||
$overlay_color #fff 4.0
|
||||
# Slowly fades to black
|
||||
$wait 2.0
|
||||
$set_background the_end
|
||||
$overlay_color #000 4.0
|
||||
# "The End" slowly fades in
|
||||
$wait 1.5
|
||||
$set game_completed 1
|
||||
$escape store_global game_completed $game_completed
|
||||
$set answer 42
|
||||
$escape store_global answer $answer
|
||||
$overlay_color #00000000 1.5
|
||||
$wait 5.0
|
||||
$stop
|
||||
$end
|
||||
10
scenes/visual_novels/bonus_animation.txt
Normal file
10
scenes/visual_novels/bonus_animation.txt
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
$title Animation Player
|
||||
$set disable_sfx 1
|
||||
$stop
|
||||
$wait 0.5
|
||||
$start_music entangled
|
||||
$play_video animation
|
||||
$stop_music 0.0
|
||||
$wait 1.0
|
||||
$stop
|
||||
$end
|
||||
198
scenes/visual_novels/bonus_fishing.txt
Normal file
198
scenes/visual_novels/bonus_fishing.txt
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
$title Fishing Minigame
|
||||
$start_music under_the_surface
|
||||
|
||||
$label prompt1
|
||||
: How many fishing targets?
|
||||
$prompt
|
||||
$option t1 One
|
||||
$option t2 Two
|
||||
$option t3 Three
|
||||
$label t1
|
||||
$set targets 1
|
||||
$goto prompt2
|
||||
$label t2
|
||||
$set targets 2
|
||||
$goto prompt2
|
||||
$label t3
|
||||
$set targets 3
|
||||
$goto prompt2
|
||||
|
||||
$label prompt2
|
||||
: Which difficulty?
|
||||
$prompt
|
||||
$option d0 0%
|
||||
$option d25 25%
|
||||
$option d50 50%
|
||||
$option d75 75%
|
||||
$option d100 100%
|
||||
$label d0
|
||||
$set difficulty 0
|
||||
$goto prompt3
|
||||
$label d25
|
||||
$set difficulty 25
|
||||
$goto prompt3
|
||||
$label d50
|
||||
$set difficulty 50
|
||||
$goto prompt3
|
||||
$label d75
|
||||
$set difficulty 75
|
||||
$goto prompt3
|
||||
$label d100
|
||||
$set difficulty 100
|
||||
$goto prompt3
|
||||
|
||||
$label prompt3
|
||||
: Should the boat keep moving?
|
||||
$prompt
|
||||
$option m1 Yes
|
||||
$option m0 No
|
||||
|
||||
|
||||
$label m0
|
||||
$hide_textbox
|
||||
$set_background akhirah_back_stopped
|
||||
$if difficulty >= 100 m0_d100
|
||||
$if difficulty >= 75 m0_d75
|
||||
$if difficulty >= 50 m0_d50
|
||||
$if difficulty >= 25 m0_d25
|
||||
$label m0_d0
|
||||
$if targets >= 3 m0_d0_t3
|
||||
$if targets >= 2 m0_d0_t2
|
||||
$goto m0_d0_t1
|
||||
$label m0_d25
|
||||
$if targets >= 3 m0_d25_t3
|
||||
$if targets >= 2 m0_d25_t2
|
||||
$goto m0_d25_t1
|
||||
$label m0_d50
|
||||
$if targets >= 3 m0_d50_t3
|
||||
$if targets >= 2 m0_d50_t2
|
||||
$goto m0_d50_t1
|
||||
$label m0_d75
|
||||
$if targets >= 3 m0_d75_t3
|
||||
$if targets >= 2 m0_d75_t2
|
||||
$goto m0_d75_t1
|
||||
$label m0_d100
|
||||
$if targets >= 3 m0_d100_t3
|
||||
$if targets >= 2 m0_d100_t2
|
||||
$goto m0_d100_t1
|
||||
|
||||
$label m1
|
||||
$hide_textbox
|
||||
$set_background akhirah_back_moving
|
||||
$if difficulty >= 100 m1_d100
|
||||
$if difficulty >= 75 m1_d75
|
||||
$if difficulty >= 50 m1_d50
|
||||
$if difficulty >= 25 m1_d25
|
||||
$label m1_d0
|
||||
$if targets >= 3 m1_d0_t3
|
||||
$if targets >= 2 m1_d0_t2
|
||||
$goto m1_d0_t1
|
||||
$label m1_d25
|
||||
$if targets >= 3 m1_d25_t3
|
||||
$if targets >= 2 m1_d25_t2
|
||||
$goto m1_d25_t1
|
||||
$label m1_d50
|
||||
$if targets >= 3 m1_d50_t3
|
||||
$if targets >= 2 m1_d50_t2
|
||||
$goto m1_d50_t1
|
||||
$label m1_d75
|
||||
$if targets >= 3 m1_d75_t3
|
||||
$if targets >= 2 m1_d75_t2
|
||||
$goto m1_d75_t1
|
||||
$label m1_d100
|
||||
$if targets >= 3 m1_d100_t3
|
||||
$if targets >= 2 m1_d100_t2
|
||||
$goto m1_d100_t1
|
||||
|
||||
|
||||
# Boat stopped, difficulty = 0%
|
||||
$label m0_d0_t1
|
||||
$escape fishing fishing_over_single 0.0 false {"name":"success","sprite":"default"}
|
||||
$label m0_d0_t2
|
||||
$escape fishing fishing_over 0.0 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m0_d0_t3
|
||||
$escape fishing fishing_over 0.0 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat stopped, difficulty = 25%
|
||||
$label m0_d25_t1
|
||||
$escape fishing fishing_over_single 0.25 false {"name":"success","sprite":"default"}
|
||||
$label m0_d25_t2
|
||||
$escape fishing fishing_over 0.25 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m0_d25_t3
|
||||
$escape fishing fishing_over 0.25 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat stopped, difficulty = 50%
|
||||
$label m0_d50_t1
|
||||
$escape fishing fishing_over_single 0.50 false {"name":"success","sprite":"default"}
|
||||
$label m0_d50_t2
|
||||
$escape fishing fishing_over 0.50 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m0_d50_t3
|
||||
$escape fishing fishing_over 0.50 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat stopped, difficulty = 75%
|
||||
$label m0_d75_t1
|
||||
$escape fishing fishing_over_single 0.75 false {"name":"success","sprite":"default"}
|
||||
$label m0_d75_t2
|
||||
$escape fishing fishing_over 0.75 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m0_d75_t3
|
||||
$escape fishing fishing_over 0.75 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat stopped, difficulty = 100%
|
||||
$label m0_d100_t1
|
||||
$escape fishing fishing_over_single 1.0 false {"name":"success","sprite":"default"}
|
||||
$label m0_d100_t2
|
||||
$escape fishing fishing_over 1.0 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m0_d100_t3
|
||||
$escape fishing fishing_over 1.0 false {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
|
||||
# Boat moving, difficulty = 0%
|
||||
$label m1_d0_t1
|
||||
$escape fishing fishing_over_single 0.0 true {"name":"success","sprite":"default"}
|
||||
$label m1_d0_t2
|
||||
$escape fishing fishing_over 0.0 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m1_d0_t3
|
||||
$escape fishing fishing_over 0.0 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat moving, difficulty = 25%
|
||||
$label m1_d25_t1
|
||||
$escape fishing fishing_over_single 0.25 true {"name":"success","sprite":"default"}
|
||||
$label m1_d25_t2
|
||||
$escape fishing fishing_over 0.25 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m1_d25_t3
|
||||
$escape fishing fishing_over 0.25 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat moving, difficulty = 50%
|
||||
$label m1_d50_t1
|
||||
$escape fishing fishing_over_single 0.50 true {"name":"success","sprite":"default"}
|
||||
$label m1_d50_t2
|
||||
$escape fishing fishing_over 0.50 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m1_d50_t3
|
||||
$escape fishing fishing_over 0.50 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat moving, difficulty = 75%
|
||||
$label m1_d75_t1
|
||||
$escape fishing fishing_over_single 0.75 true {"name":"success","sprite":"default"}
|
||||
$label m1_d75_t2
|
||||
$escape fishing fishing_over 0.75 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m1_d75_t3
|
||||
$escape fishing fishing_over 0.75 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
# Boat moving, difficulty = 100%
|
||||
$label m1_d100_t1
|
||||
$escape fishing fishing_over_single 1.0 true {"name":"success","sprite":"default"}
|
||||
$label m1_d100_t2
|
||||
$escape fishing fishing_over 1.0 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
$label m1_d100_t3
|
||||
$escape fishing fishing_over 1.0 true {"name":"success","sprite":"default"} {"name":"success","sprite":"default"} {"name":"success","sprite":"default"}
|
||||
|
||||
|
||||
$label success
|
||||
$wait 0.3
|
||||
$escape return_to_fishing
|
||||
$label fishing_over_single
|
||||
: You've fished the target!
|
||||
$quit
|
||||
$label fishing_over
|
||||
: You've fished all of the targets!
|
||||
$quit
|
||||
32
scenes/visual_novels/bonus_music.txt
Normal file
32
scenes/visual_novels/bonus_music.txt
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
$title Music Test
|
||||
$set disable_sfx 1
|
||||
$label test_music
|
||||
$start_music fulminant
|
||||
: Now playing: Fulminant
|
||||
$start_music aboard_the_akhirah
|
||||
: Now playing: Aboard the Akhirah
|
||||
$start_music loose_thoughts
|
||||
: Now playing: Loose Thoughts
|
||||
$start_music under_the_surface
|
||||
: Now playing: Under the Surface
|
||||
$start_music afloat
|
||||
: Now playing: Afloat
|
||||
$start_music scars
|
||||
: Now playing: Scars
|
||||
$start_music eruption
|
||||
: Now playing: Eruption
|
||||
$start_music stars
|
||||
: Now playing: Stars
|
||||
$start_music entangled
|
||||
: Now playing: Entangled
|
||||
# $start_music ambiance_cave
|
||||
# : Now playing: Ambiance (Cave)
|
||||
# $start_music ambiance_river
|
||||
# : Now playing: Ambiance (River)
|
||||
$stop_music 0.0
|
||||
: Return to main menu?
|
||||
$prompt
|
||||
$option test_music_end Yes
|
||||
$option test_music No
|
||||
$label test_music_end
|
||||
$end
|
||||
27
scenes/visual_novels/test_fishing.txt
Normal file
27
scenes/visual_novels/test_fishing.txt
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
$title Test fishing
|
||||
Bard: You can still save here...
|
||||
$overlay_color white 0.0
|
||||
$overlay_color fff0 0.3
|
||||
Bard: It's fishing time babyyyyy
|
||||
$escape fishing fishing_test_over 0.0 false {"name":"fishing_03","sprite":"butt_plug"}
|
||||
$label fishing_01
|
||||
: You found: A blah #1!
|
||||
Marco: btw, you shouldn't be able to save here
|
||||
$escape return_to_fishing
|
||||
$label fishing_02
|
||||
: You found: A blah #2!
|
||||
Marco: Lorem ipsum dolor sit amet, eu graeci denique sed. Eam eu nostrud nominati. Te pri probo epicuri voluptatum. Sit in tantas viderer accusam, pro volumus appellantur at.
|
||||
$escape return_to_fishing
|
||||
$label fishing_03
|
||||
: You found:
|
||||
$wait 1
|
||||
$set_sprite fished_item marco_no_mask/dab_poggers bounce
|
||||
: ...a guy!
|
||||
$remove_sprite fished_item
|
||||
: cool.
|
||||
$escape return_to_fishing
|
||||
$label fishing_test_over
|
||||
: Fishing is over, hooray!
|
||||
: Check if you can save here.
|
||||
: Now back to main menu...
|
||||
$quit
|
||||
60
scenes/visual_novels/test_vn.txt
Normal file
60
scenes/visual_novels/test_vn.txt
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
$title Testing my Visual Novel engine!!
|
||||
$start_music aboard_the_akhirah
|
||||
$prompt
|
||||
$option start Do the whole test
|
||||
$option take_me_here Jump to prompt
|
||||
$option opt2 Jump to [color=#b2b7d2]very end[/color]
|
||||
$label start
|
||||
$clear_sprites
|
||||
$stop
|
||||
$show_textbox
|
||||
$expand_textbox
|
||||
$set_sprite layer1 bard/sweat
|
||||
Bard: What the [color=#0f0]fuck?![/color]
|
||||
$if test_var < 900 skip_test_line
|
||||
Bard: I remember the CW stuff!
|
||||
$label skip_test_line
|
||||
$set_sprite layer1 bard/sweat bounce
|
||||
: I don't know, I am just writing a lot of text to make sure that it will take a long time to write all of this out.
|
||||
$collapse_textbox
|
||||
$stop
|
||||
$expand_textbox
|
||||
$stop
|
||||
$set_sprite two marco_no_mask/dab_poggers bounce
|
||||
Marco: l
|
||||
m
|
||||
f
|
||||
$text_new_line a
|
||||
o
|
||||
$clear_sprites
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$show_textbox
|
||||
$hide_textbox
|
||||
$stop
|
||||
# Some comment about the dialogue, maybe??
|
||||
$label take_me_here
|
||||
$set_sprite two marco_no_mask/greet
|
||||
Marco: What if I just print stuff without the usual animations?
|
||||
$set some_variable 9
|
||||
$label redo_prompt
|
||||
: Will you wait?
|
||||
$prompt
|
||||
$option opt1 Yes?
|
||||
$option opt2 No, I think I can skip...
|
||||
$label opt1
|
||||
$increment some_variable
|
||||
$remove_sprite layer1
|
||||
$continue_after_text
|
||||
:...
|
||||
$wait 2.0
|
||||
$set_sprite layer1 bard/blush bounce {"flip_h":true}
|
||||
Bard: I say this as long as you pick yes! But only a few times.
|
||||
$if some_variable <= 10 redo_prompt
|
||||
Bard: [color=#b2b7d2](Okay, that's enough...)[/color]
|
||||
$label opt2
|
||||
$clear_sprites
|
||||
Hehe... I'm actually a different textbox
|
||||
$collapse_textbox
|
||||
$hide_textbox
|
||||
$goto start
|
||||
Loading…
Add table
Add a link
Reference in a new issue