restored some things to the original state
This commit is contained in:
parent
aeb74a2d43
commit
cde04c66ac
7
Dialogue.gd
Normal file
7
Dialogue.gd
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _on_Wol_line(line):
|
||||||
|
prints('got a line', line)
|
|
@ -1,8 +1,48 @@
|
||||||
[gd_scene format=2]
|
[gd_scene load_steps=4 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/Wol/Ostrich Sans Font.tres" type="DynamicFont" id=1]
|
||||||
|
[ext_resource path="res://addons/Wol/Wol.gd" type="Script" id=2]
|
||||||
|
[ext_resource path="res://Dialogue.gd" type="Script" id=7]
|
||||||
|
|
||||||
[node name="Dialogue" type="Control"]
|
[node name="Dialogue" type="Control"]
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
|
script = ExtResource( 7 )
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
"_edit_use_anchors_": false
|
"_edit_use_anchors_": false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[node name="Wol" type="Node" parent="."]
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
path = "res://dialogue.yarn"
|
||||||
|
auto_start = true
|
||||||
|
|
||||||
|
[node name="RichTextLabel" type="RichTextLabel" parent="."]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
margin_left = 16.0
|
||||||
|
margin_top = 16.0
|
||||||
|
margin_right = -16.0
|
||||||
|
margin_bottom = -256.0
|
||||||
|
custom_fonts/normal_font = ExtResource( 1 )
|
||||||
|
text = "Here is where the dialogue will go.
|
||||||
|
|
||||||
|
Run the scene in order to see how \"wol\" works."
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
margin_left = 16.0
|
||||||
|
margin_top = 344.0
|
||||||
|
margin_right = -16.0
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="ButtonTemplate" type="Button" parent="VBoxContainer"]
|
||||||
|
margin_right = 992.0
|
||||||
|
margin_bottom = 66.0
|
||||||
|
custom_fonts/font = ExtResource( 1 )
|
||||||
|
text = "This is a dialogue option"
|
||||||
|
|
||||||
|
[connection signal="line" from="Wol" to="." method="_on_Wol_line"]
|
||||||
|
|
11
addons/Wol/Ostrich Sans Font.tres
Normal file
11
addons/Wol/Ostrich Sans Font.tres
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
[gd_resource type="DynamicFont" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/Wol/OstrichSans-Heavy.otf" type="DynamicFontData" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
size = 64
|
||||||
|
use_mipmaps = true
|
||||||
|
use_filter = true
|
||||||
|
extra_spacing_top = 8
|
||||||
|
extra_spacing_bottom = 8
|
||||||
|
font_data = ExtResource( 1 )
|
97
addons/Wol/Ostrich Sans Heavy LICENSE OFL.txt
Normal file
97
addons/Wol/Ostrich Sans Heavy LICENSE OFL.txt
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
|
||||||
|
with Reserved Font Name <Reserved Font Name>.
|
||||||
|
Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
|
||||||
|
with Reserved Font Name <additional Reserved Font Name>.
|
||||||
|
Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
BIN
addons/Wol/OstrichSans-Heavy.otf
Normal file
BIN
addons/Wol/OstrichSans-Heavy.otf
Normal file
Binary file not shown.
|
@ -7,14 +7,14 @@ signal options(options)
|
||||||
signal command(command)
|
signal command(command)
|
||||||
signal node_completed(node)
|
signal node_completed(node)
|
||||||
|
|
||||||
signal running
|
signal started
|
||||||
signal finished
|
signal finished
|
||||||
|
|
||||||
const WolCompiler = preload("res://addons/Wol/core/compiler/compiler.gd")
|
const WolCompiler = preload('res://addons/Wol/core/compiler/compiler.gd')
|
||||||
const WolDialogue = preload("res://addons/Wol/core/dialogue.gd")
|
const WolDialogue = preload('res://addons/Wol/core/dialogue.gd')
|
||||||
|
|
||||||
export(String, FILE, "*.wol") var path setget set_path
|
export(String, FILE, '*.wol,*.yarn') var path setget set_path
|
||||||
export(String) var start_node = "Start"
|
export(String) var start_node = 'Start'
|
||||||
export(bool) var auto_start = false
|
export(bool) var auto_start = false
|
||||||
export(NodePath) var variable_storage_path
|
export(NodePath) var variable_storage_path
|
||||||
|
|
||||||
|
@ -50,12 +50,12 @@ func init_dialogue():
|
||||||
if existing_state:
|
if existing_state:
|
||||||
dialogue._visitedNodeCount = existing_state
|
dialogue._visitedNodeCount = existing_state
|
||||||
|
|
||||||
dialogue.get_vm().lineHandler = funcref(self, "_handle_line")
|
dialogue.get_vm().lineHandler = funcref(self, '_handle_line')
|
||||||
dialogue.get_vm().optionsHandler = funcref(self, "_handle_options")
|
dialogue.get_vm().optionsHandler = funcref(self, '_handle_options')
|
||||||
dialogue.get_vm().commandHandler = funcref(self, "_handle_command")
|
dialogue.get_vm().commandHandler = funcref(self, '_handle_command')
|
||||||
dialogue.get_vm().nodeCompleteHandler = funcref(self, "_handle_node_complete")
|
dialogue.get_vm().nodeCompleteHandler = funcref(self, '_handle_node_complete')
|
||||||
dialogue.get_vm().dialogueCompleteHandler = funcref(self, "_handle_dialogue_complete")
|
dialogue.get_vm().dialogueCompleteHandler = funcref(self, '_handle_dialogue_complete')
|
||||||
dialogue.get_vm().nodeStartHandler = funcref(self, "_handle_node_start")
|
dialogue.get_vm().nodeStartHandler = funcref(self, '_handle_node_start')
|
||||||
|
|
||||||
dialogue.set_program(program)
|
dialogue.set_program(program)
|
||||||
|
|
||||||
|
@ -73,10 +73,14 @@ func _handle_line(line):
|
||||||
|
|
||||||
func _handle_command(command):
|
func _handle_command(command):
|
||||||
call_deferred('emit_signal', 'command', command)
|
call_deferred('emit_signal', 'command', command)
|
||||||
|
|
||||||
|
if get_signal_connection_list('command').size() > 0:
|
||||||
return WolGlobals.HandlerState.PauseExecution
|
return WolGlobals.HandlerState.PauseExecution
|
||||||
|
else:
|
||||||
|
return WolGlobals.HandlerState.ContinueExecution
|
||||||
|
|
||||||
func _handle_options(options):
|
func _handle_options(options):
|
||||||
emit_signal('options', options)
|
call_deferred('emit_signal' ,'options', options)
|
||||||
return WolGlobals.HandlerState.PauseExecution
|
return WolGlobals.HandlerState.PauseExecution
|
||||||
|
|
||||||
func _handle_dialogue_complete():
|
func _handle_dialogue_complete():
|
||||||
|
@ -111,7 +115,7 @@ func start(node = start_node):
|
||||||
return
|
return
|
||||||
|
|
||||||
init_dialogue()
|
init_dialogue()
|
||||||
emit_signal('running')
|
emit_signal('started')
|
||||||
|
|
||||||
running = true
|
running = true
|
||||||
dialogue.set_node(node)
|
dialogue.set_node(node)
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
#VM Execution States
|
|
||||||
|
|
||||||
enum ExecutionState {
|
enum ExecutionState {
|
||||||
Stopped,
|
Stopped,
|
||||||
Running,
|
Running,
|
||||||
|
@ -152,7 +150,7 @@ enum ExpressionType {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
enum StatementTypes j{
|
enum StatementTypes {
|
||||||
CustomCommand,
|
CustomCommand,
|
||||||
ShortcutOptionGroup,
|
ShortcutOptionGroup,
|
||||||
Block,
|
Block,
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
extends Object
|
extends Object
|
||||||
|
|
||||||
const Lexer = preload("res://addons/Wol/core/compiler/lexer.gd")
|
const Lexer = preload("res://addons/Wol/core/compiler/lexer.gd")
|
||||||
const LineInfo = preload("res://addons/Wol/core/program/wol_line.gd")
|
const LineInfo = preload("res://addons/Wol/core/program/line.gd")
|
||||||
const WolNode = preload("res://addons/Wol/core/program/wol_node.gd")
|
const WolNode = preload("res://addons/Wol/core/program/node.gd")
|
||||||
const Instruction = preload("res://addons/Wol/core/program/instruction.gd")
|
const Instruction = preload("res://addons/Wol/core/program/instruction.gd")
|
||||||
const WolProgram = preload("res://addons/Wol/core/program/program.gd")
|
const WolProgram = preload("res://addons/Wol/core/program/program.gd")
|
||||||
const Operand = preload("res://addons/Wol/core/program/operand.gd")
|
const Operand = preload("res://addons/Wol/core/program/operand.gd")
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
extends Object
|
extends Object
|
||||||
|
|
||||||
const LineInfo = preload("res://addons/Wol/core/program/wol_line.gd")
|
|
||||||
|
|
||||||
var id : String
|
var id : String
|
||||||
var substitutions : Array = []#String
|
var substitutions : Array = []#String
|
||||||
var info : LineInfo
|
|
||||||
|
|
||||||
func _init(id: String, info: LineInfo):
|
func _init(id: String):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.info = info
|
|
||||||
|
|
|
@ -36,14 +36,13 @@ func _init(dialogue):
|
||||||
self._dialogue = dialogue
|
self._dialogue = dialogue
|
||||||
_state = VmState.new()
|
_state = VmState.new()
|
||||||
|
|
||||||
|
|
||||||
func set_program(program):
|
func set_program(program):
|
||||||
_program = program
|
_program = program
|
||||||
|
|
||||||
#set the node to run
|
#set the node to run
|
||||||
#return true if successeful false if no node
|
#return true if successeful false if no node
|
||||||
#of that name found
|
#of that name found
|
||||||
func set_node(name:String)->bool:
|
func set_node(name:String) -> bool:
|
||||||
if _program == null || _program.wolNodes.size() == 0:
|
if _program == null || _program.wolNodes.size() == 0:
|
||||||
printerr("Could not load %s : no nodes loaded" % name)
|
printerr("Could not load %s : no nodes loaded" % name)
|
||||||
return false
|
return false
|
||||||
|
@ -160,17 +159,18 @@ func find_label_instruction(label:String)->int:
|
||||||
func run_instruction(instruction)->bool:
|
func run_instruction(instruction)->bool:
|
||||||
match instruction.operation:
|
match instruction.operation:
|
||||||
WolGlobals.ByteCode.Label:
|
WolGlobals.ByteCode.Label:
|
||||||
#do nothing woooo!
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
WolGlobals.ByteCode.JumpTo:
|
WolGlobals.ByteCode.JumpTo:
|
||||||
#jump to named label
|
#jump to named label
|
||||||
_state .programCounter = find_label_instruction(instruction.operands[0].value)-1
|
_state .programCounter = find_label_instruction(instruction.operands[0].value)-1
|
||||||
|
|
||||||
WolGlobals.ByteCode.RunLine:
|
WolGlobals.ByteCode.RunLine:
|
||||||
#look up string from string table
|
#look up string from string table
|
||||||
#pass it to client as line
|
#pass it to client as line
|
||||||
var key = instruction.operands[0].value
|
var key = instruction.operands[0].value
|
||||||
|
|
||||||
var line = Line.new(key, _program.wolStrings[key])
|
var line = Line.new(key)
|
||||||
|
|
||||||
#the second operand is the expression count
|
#the second operand is the expression count
|
||||||
# of format function
|
# of format function
|
||||||
|
@ -183,7 +183,6 @@ func run_instruction(instruction)->bool:
|
||||||
if pause == WolGlobals.HandlerState.PauseExecution:
|
if pause == WolGlobals.HandlerState.PauseExecution:
|
||||||
executionState = WolGlobals.ExecutionState.Suspended
|
executionState = WolGlobals.ExecutionState.Suspended
|
||||||
|
|
||||||
|
|
||||||
WolGlobals.ByteCode.RunCommand:
|
WolGlobals.ByteCode.RunCommand:
|
||||||
var commandText : String = instruction.operands[0].value
|
var commandText : String = instruction.operands[0].value
|
||||||
|
|
||||||
|
@ -196,13 +195,14 @@ func run_instruction(instruction)->bool:
|
||||||
if pause == WolGlobals.HandlerState.PauseExecution:
|
if pause == WolGlobals.HandlerState.PauseExecution:
|
||||||
executionState = WolGlobals.ExecutionState.Suspended
|
executionState = WolGlobals.ExecutionState.Suspended
|
||||||
|
|
||||||
|
|
||||||
WolGlobals.ByteCode.PushString:
|
WolGlobals.ByteCode.PushString:
|
||||||
#push String var to stack
|
#push String var to stack
|
||||||
_state.push_value(instruction.operands[0].value)
|
_state.push_value(instruction.operands[0].value)
|
||||||
|
|
||||||
WolGlobals.ByteCode.PushNumber:
|
WolGlobals.ByteCode.PushNumber:
|
||||||
#push number to stack
|
#push number to stack
|
||||||
_state.push_value(instruction.operands[0].value)
|
_state.push_value(instruction.operands[0].value)
|
||||||
|
|
||||||
WolGlobals.ByteCode.PushBool:
|
WolGlobals.ByteCode.PushBool:
|
||||||
#push boolean to stack
|
#push boolean to stack
|
||||||
_state.push_value(instruction.operands[0].value)
|
_state.push_value(instruction.operands[0].value)
|
||||||
|
@ -220,9 +220,11 @@ func run_instruction(instruction)->bool:
|
||||||
#jump to label whose name is on the stack
|
#jump to label whose name is on the stack
|
||||||
var dest : String = _state.peek_value().as_string()
|
var dest : String = _state.peek_value().as_string()
|
||||||
_state.programCounter = find_label_instruction(dest)-1
|
_state.programCounter = find_label_instruction(dest)-1
|
||||||
|
|
||||||
WolGlobals.ByteCode.Pop:
|
WolGlobals.ByteCode.Pop:
|
||||||
#pop value from stack
|
#pop value from stack
|
||||||
_state.pop_value()
|
_state.pop_value()
|
||||||
|
|
||||||
WolGlobals.ByteCode.CallFunc:
|
WolGlobals.ByteCode.CallFunc:
|
||||||
#call function with params on stack
|
#call function with params on stack
|
||||||
#push any return value to stack
|
#push any return value to stack
|
||||||
|
@ -257,7 +259,6 @@ func run_instruction(instruction)->bool:
|
||||||
|
|
||||||
if function.returnsValue:
|
if function.returnsValue:
|
||||||
_state.push_value(result)
|
_state.push_value(result)
|
||||||
pass
|
|
||||||
|
|
||||||
WolGlobals.ByteCode.PushVariable:
|
WolGlobals.ByteCode.PushVariable:
|
||||||
#get content of variable and push to stack
|
#get content of variable and push to stack
|
||||||
|
@ -326,7 +327,6 @@ func run_instruction(instruction)->bool:
|
||||||
#when user makes selection
|
#when user makes selection
|
||||||
|
|
||||||
optionsHandler.call_func(choices)
|
optionsHandler.call_func(choices)
|
||||||
pass
|
|
||||||
_:
|
_:
|
||||||
#bytecode messed up woopsise
|
#bytecode messed up woopsise
|
||||||
executionState = WolGlobals.ExecutionState.Stopped
|
executionState = WolGlobals.ExecutionState.Stopped
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
title: Start
|
|
||||||
tags:
|
|
||||||
colorID: 3
|
|
||||||
position: 332,79
|
|
||||||
---
|
|
||||||
Oh well hello, what should we set number variable to?
|
|
||||||
<<set $visited = visit_count()>>
|
|
||||||
-> Set Number to 6
|
|
||||||
<<set $number to 6 >>
|
|
||||||
-> Set Number to 5
|
|
||||||
<<set $number to 5 >>
|
|
||||||
We will also set a cat boolean
|
|
||||||
-> to false
|
|
||||||
<<set $cat to false>>
|
|
||||||
-> to true
|
|
||||||
<<set $cat to true>>
|
|
||||||
[[SecondNode]]
|
|
||||||
===
|
|
||||||
title: SecondNode
|
|
||||||
tags:
|
|
||||||
position: 678.16,263.66
|
|
||||||
---
|
|
||||||
sweet - Now we are in the Second node
|
|
||||||
->this one only shows when Visit count of first node is 1 <<if $visited == 1>>
|
|
||||||
->This only options is showing because cat variable is true <<if $cat == true>>
|
|
||||||
ok then I guess cat is true
|
|
||||||
->Some other option with no requirement
|
|
||||||
this is some other option woooooohooo
|
|
||||||
->This shows when number greater than 5 <<if $number > 5 >>
|
|
||||||
Coool, yes the number was greater than 5 <<set $number to 1>>
|
|
||||||
But not anymore! ha
|
|
||||||
Now we are finished, GoodBye!
|
|
||||||
===
|
|
249
dialogue.yarn
249
dialogue.yarn
|
@ -1,103 +1,4 @@
|
||||||
title: Waking up
|
title: Start
|
||||||
tags:
|
|
||||||
colorID: 0
|
|
||||||
position: -1544,-923
|
|
||||||
---
|
|
||||||
<<fade_out>>
|
|
||||||
<<go_to_space Beginning Room>>
|
|
||||||
<<protagonist Kiwa>>
|
|
||||||
<<set $something to 1>>
|
|
||||||
|
|
||||||
>.<
|
|
||||||
>…<
|
|
||||||
>…<
|
|
||||||
>I woke up to a pulsating pain in my head.<
|
|
||||||
>It hurts.<
|
|
||||||
>It hurts a lot.<
|
|
||||||
>It was like someone was hammering an ice pick right into my head and chiselling my brain into multiple chunks at once.<
|
|
||||||
>I tried to reach my head in an attempt to cradle it, hoping I could just slump into a fetal position and wait for the pain to go away.<
|
|
||||||
>But I couldn’t move my arms.<
|
|
||||||
>Something was keeping them in place.<
|
|
||||||
>Something cold and really sturdy.<
|
|
||||||
>Then the implications of that set in.<
|
|
||||||
>And I shot my eyes wide open.<
|
|
||||||
>But all I could see was [p;pink].<
|
|
||||||
>So much [p;pink].<
|
|
||||||
>And a figure sitting in front of me.<
|
|
||||||
|
|
||||||
//<<opening_screen prologue>>
|
|
||||||
<<toggle_dialogue off>>
|
|
||||||
<<picture Prologue title>>
|
|
||||||
<<fade_in>>
|
|
||||||
<<wait 3>>
|
|
||||||
<<fade_out>>
|
|
||||||
<<picture Kiwa looking at mirror>>
|
|
||||||
<<fade_in>>
|
|
||||||
<<toggle_dialogue on>>
|
|
||||||
|
|
||||||
>Ah… that’s just me. Dang, I almost got startled by my own reflection.<
|
|
||||||
>Why is there a mirror in front of me anyway?<
|
|
||||||
>I looked down at my reflection’s hands.<
|
|
||||||
>Yeah, I was definitely tied up alright. Fun.<
|
|
||||||
>I tried to yank my arm out of the handcuffs in hopes of a poor job done by whoever had gotten me in this situation.<
|
|
||||||
>After a few pulling attempts all I got was a bruised wrist. It was a long shot anyways.<
|
|
||||||
>Okay… What can I do in this situation?<
|
|
||||||
>I looked around me.<
|
|
||||||
>This looks like a welcome party or something… Except for all those chairs straight from an old timey asylum.<
|
|
||||||
>The chairs looked pretty much like mine, meaning-<
|
|
||||||
???: Ugh…
|
|
||||||
>The sound came from behind me.<
|
|
||||||
>I tried to crane my neck to look at the source of the voice but a dull thud accompanied by the feeling of my helmet bouncing against something stopped me.<
|
|
||||||
???: Ow!
|
|
||||||
>A long string of surprisingly mild but creative curses echoed in the room.<
|
|
||||||
???: Was that really necessary?
|
|
||||||
>I couldn’t see much from the angle I was in but from the voice I figured a man around my age was sitting with his back against mine.<
|
|
||||||
>The mirror wasn’t much help either. All I could see was a little bit of dark auburn hair.<
|
|
||||||
>It seems like I didn’t learn from the first attempt and tried to turn my head again to see the source of the voice.<
|
|
||||||
???: OW! Christ! Please stop hitting your head against mine!
|
|
||||||
Kiwa: Oh, my bad?
|
|
||||||
???: Who wears a helmet inside?
|
|
||||||
Kiwa: Precautions?
|
|
||||||
Kiwa: I mean, my head doesn’t have a bump right now, so I guess that’s a testimony to it.
|
|
||||||
???: And mine was hurting enough as it was.
|
|
||||||
Kiwa: Uh?
|
|
||||||
|
|
||||||
<<hide_pictures>>
|
|
||||||
<<zoom to VentLid>>
|
|
||||||
|
|
||||||
???: What’s happening? I can’t see from this position.
|
|
||||||
Kiwa: A… a countdown?
|
|
||||||
Kiwa: What does this mean?
|
|
||||||
>I had a bad feeling. A feeling that solidified into a webbed dark lump inside my chest.<
|
|
||||||
>My mind was screaming at me to run away as the countdown neared zero.<
|
|
||||||
-PAIR 8, STARTING PREPARATIONS-
|
|
||||||
Kiwa: Starting... Wha-
|
|
||||||
-Click-
|
|
||||||
???: The restraints!
|
|
||||||
>We scrambled off the chairs as quickly as humanly possible.<
|
|
||||||
|
|
||||||
<<switch_to_camera PanningRoomCamera>>
|
|
||||||
|
|
||||||
???: ...
|
|
||||||
Kiwa: Wait, I’d be amazed if that door is open by any chance.
|
|
||||||
-Click Click-
|
|
||||||
???: It really is locked.
|
|
||||||
???: I figured I had nothing to lose by trying.
|
|
||||||
Kiwa: We’ll just have to wait then. What is this room anyway?
|
|
||||||
???: All I can say is this looks rather dubious.
|
|
||||||
Kiwa: Hmm.
|
|
||||||
-Welcome esteemed guests! The game you have been dying to participate in has begun!-
|
|
||||||
-But first, let us get you familiar with the control scheme-
|
|
||||||
-I know this can get quite tedious to a brilliant mind such as yours truly, but some of the controls and mechanics may vary from the original games.-
|
|
||||||
-By pressing [p;Shift], you can see circles around objects or characters that indicate there’s dialogue to be explored. [b;Blue circles] are optional dialogue while [y; yellow circles] will progress the plot.-
|
|
||||||
-If a scene has multiple [y;yellow circles], you need to exhaust all yellow dialogue options before you can progress with the plot.-
|
|
||||||
-[p;Ctrl] opens and closes the transcript in case you need to review previous dialogue.-
|
|
||||||
-Now then, explore your first area to your heart’s content, participant.-
|
|
||||||
|
|
||||||
<<switch_to_camera PanningRoomCamera>>
|
|
||||||
<<detective_mode>>
|
|
||||||
===
|
|
||||||
title: The Revolver
|
|
||||||
tags:
|
tags:
|
||||||
colorID: 0
|
colorID: 0
|
||||||
position: -1892,-1013
|
position: -1892,-1013
|
||||||
|
@ -168,152 +69,10 @@ Masami: Gina!
|
||||||
|
|
||||||
[[Waking up]]
|
[[Waking up]]
|
||||||
===
|
===
|
||||||
title: Screen
|
title: Waking up
|
||||||
tags:
|
tags:
|
||||||
colorID: 0
|
colorID: 0
|
||||||
position: -1170,-560
|
position: -1527,-881
|
||||||
---
|
---
|
||||||
<<zoom to Screen>>
|
You: *waking up noices*
|
||||||
???: Pair 8?
|
|
||||||
Kiwa: Us, probably.
|
|
||||||
???: What are they preparing us for exactly?
|
|
||||||
Kiwa: I don’t think I want to find out.
|
|
||||||
Kiwa: The countdown already made me nervous.
|
|
||||||
===
|
|
||||||
title: Chairs
|
|
||||||
tags:
|
|
||||||
colorID: 0
|
|
||||||
position: -874,-551
|
|
||||||
---
|
|
||||||
<<zoom to Chairs>>
|
|
||||||
Kiwa: That’s a lot of chairs.
|
|
||||||
???: 16 of them…
|
|
||||||
Kiwa: Were we the last to wake up?
|
|
||||||
???: My question is where are the other 14 people?
|
|
||||||
???: What happened to them?
|
|
||||||
===
|
|
||||||
title: Decorations
|
|
||||||
tags:
|
|
||||||
colorID: 0
|
|
||||||
position: -593,-554
|
|
||||||
---
|
|
||||||
<<zoom to Decorations>>
|
|
||||||
Kiwa: That’s… a lot of hearts.
|
|
||||||
???: My eyes hurt just from looking at all of this. It feels like a crime to have this many shades of pink together at once.
|
|
||||||
Kiwa: It’s definitely ugly.
|
|
||||||
===
|
|
||||||
title: Vent
|
|
||||||
tags:
|
|
||||||
colorID: 0
|
|
||||||
position: -338,-536
|
|
||||||
---
|
|
||||||
<<zoom to Vent>>
|
|
||||||
Kiwa: Do you think we could get out through that vent?
|
|
||||||
???: I don’t even know how we could reach it. Let alone open it.
|
|
||||||
Kiwa: Yeah, the chairs look like they have been bolted to the floor.
|
|
||||||
Kiwa: Also, what’s with this smell? It’s really sweet. Like someone dumped a bag of sugar into an air filter.
|
|
||||||
???: You are right. It’s quite overpowering. I hope it won’t make me sick.
|
|
||||||
===
|
|
||||||
title: Mirror
|
|
||||||
tags:
|
|
||||||
colorID: 0
|
|
||||||
position: -1438,-573
|
|
||||||
---
|
|
||||||
<<zoom to Mirror>>
|
|
||||||
>I look like I always look. A disheveled hobo skater who got severely dunked on recently.<
|
|
||||||
???: Admiring yourself in the mirror?
|
|
||||||
Kiwa: Not really.
|
|
||||||
???: I wonder why there are so many mirrors in this room. It feels like an interactive exhibit of a contemporary art gallery or something along those lines.
|
|
||||||
Kiwa: Or a fun house without those wobbly mirrors.
|
|
||||||
???: Or that...
|
|
||||||
===
|
|
||||||
title: Ending
|
|
||||||
tags:
|
|
||||||
colorID: 0
|
|
||||||
position: -139,-184
|
|
||||||
---
|
|
||||||
<<if !(visited("Mirror") and visited("Vent") and visited("Chairs") and visited("Decorations") and visited("Screen"))>>
|
|
||||||
<<if visit_count() is 2>>
|
|
||||||
-You are a hopeless cause.-
|
|
||||||
<<else>>
|
|
||||||
???: ...
|
|
||||||
Kiwa: He's looking around the room. Maybe I should do the same. Access my surroundings and all that...
|
|
||||||
- ...Hmm. Like I previously established, please take a look at your surroundings.-
|
|
||||||
-By pressing [p;Shift], you can see circles around objects or characters that indicate there’s dialogue to be explored. [b;Blue circles] are optional dialogue while [y; yellow circles] will progress the plot.-
|
|
||||||
-If a scene has multiple [y;yellow circles], you need to exhaust all yellow dialogue options before you can progress with the plot.-
|
|
||||||
-[p;Ctrl] opens and closes the transcript in case you need to review previous dialogue.-
|
|
||||||
-You can move around the room with the [p;A] and [p;D] keys.-
|
|
||||||
-Do not make me repeat myself again.-
|
|
||||||
<<endif>>
|
|
||||||
<<else>>
|
|
||||||
>Well, there isn’t much else to look at. Maybe I should try to talk to him more. He might know something.<
|
|
||||||
>I guess I’ll try to make light of the situation. That works with lowering stressful atmosphere, right?<
|
|
||||||
Kiwa: Uh, so… Do you come around here often?
|
|
||||||
???: Seriously? In this situation?
|
|
||||||
Kiwa: It was just a joke? I think?
|
|
||||||
???: You are taking this very nonchalantly.
|
|
||||||
???: And by this, I mean the obvious kidnapping for… for…
|
|
||||||
???: I don’t know. Hopefully just hostage money.
|
|
||||||
Kiwa: Maybe we’ll get sold for the black market.
|
|
||||||
???: Oh god. Hopefully not.
|
|
||||||
Kiwa: Anyway, what sort of torture chamber is covered in pink hearts?
|
|
||||||
???: I don’t even want to entertain the implications.
|
|
||||||
???: Let’s just say the uncomfortable kind.
|
|
||||||
>He suddenly perked up and started to pat down his pant pockets before his stature deflated again.<
|
|
||||||
???: Of course they would empty our pockets. What’s left of my belongings is some spare change and pocket lint.
|
|
||||||
Kiwa: Oh.
|
|
||||||
>I quickly checked my own pockets.<
|
|
||||||
Kiwa: You are right. No phone, or keys... or wallet.
|
|
||||||
Kiwa: They only left me with my lighter but no cigarettes. Why would they take those away but not the lighter?
|
|
||||||
???: So arson is fine but they draw the line at lung abuse?
|
|
||||||
Kiwa: This is going to be a problem… mainly for me.
|
|
||||||
Kiwa: Well, if it comes to it, I can at least set this room on fire.
|
|
||||||
???: Please don’t. I don’t want to get grouped in with your lawsuit.
|
|
||||||
>That’s the part you are worried about?<
|
|
||||||
???: Are you some sort of criminal?
|
|
||||||
Kiwa: Something along those lines, sure.
|
|
||||||
???: I’m assuming a petty one at that then.
|
|
||||||
Kiwa: Yeah.
|
|
||||||
Kiwa: Sorry, I guess introductions weren’t the first thing on my mind.
|
|
||||||
Kiwa: I’m Kiwa Fukuda, the former ultimate scapegoat.
|
|
||||||
???: What a title. And you were an ultimate to boot.
|
|
||||||
???: How come I have never heard of you?
|
|
||||||
Kiwa: I try to keep a low profile. That works best with what I do.
|
|
||||||
???: What exactly does a scapegoat do for a living?
|
|
||||||
Kiwa: I’m really good at pointing fingers at people.
|
|
||||||
???: Meaning?
|
|
||||||
Kiwa: If you have a problem and you don’t want to deal with it like a respectable member of society, you come to me. I will either make it look like I fucked up the whole situation or I make someone else who is more suited for the situation look like they were at fault.
|
|
||||||
???: How do you find out you have such a talent in the first place?
|
|
||||||
Kiwa: With a lot of stupid actions, a lot of accidents, and a lot of dumb luck.
|
|
||||||
Kiwa: It can get very messy sometimes but it pays my rent three times over.
|
|
||||||
Kiwa: There are a lot of people who would like to have my head for less than one yen, so I wouldn’t be surprised if this whole kidnapping thing was my fault.
|
|
||||||
Kiwa: Though I don’t get why you would be in the same situation then? I have never seen you in my life.
|
|
||||||
Kiwa: Who are you?
|
|
||||||
???: …Right.
|
|
||||||
Masami: My name is Masami Kiyokane, the former ultimate croupier.
|
|
||||||
Kiwa: A croupier?
|
|
||||||
Masami: Basically, I am a card dealer at a casino. The Valentine’s Hand Casino to be exact. You may have heard of it.
|
|
||||||
Kiwa: Ah, yeah. That one is really highly praised. One of the best in the country, right? Never been there myself. I don’t travel much.
|
|
||||||
Masami: Well, I work there nowadays.
|
|
||||||
Masami: My work includes taking bets, distributing cards to the players, and making sure those players don’t cheat among other things.
|
|
||||||
Kiwa: Cool. So, you are a former ultimate yourself?
|
|
||||||
Masami: That’s what that would imply, yes.
|
|
||||||
Kiwa: I really don’t remember you. What class were you in? I didn’t interact much with upper or underclassmen during my time in Hope’s Peak.
|
|
||||||
Masami: 72nd, Class A.
|
|
||||||
Kiwa: Ah, I’m from 71st B. I guess we both didn’t lose our titles that long ago.
|
|
||||||
Masami: Still, like you said. If we don’t even know each other, how are we in this situation?
|
|
||||||
Masami: To be honest, I thought the kidnapping was my fault at the start. But now that I have someone here who runs into legal problems constantly…
|
|
||||||
Kiwa: Why would you think this is your fault?
|
|
||||||
Masami: Well-
|
|
||||||
???: Good afternoon.
|
|
||||||
Masami: What... is that?
|
|
||||||
Kiwa: A bird?
|
|
||||||
???: You have successfully woken up. Good.
|
|
||||||
???: You are expected at the trial grounds. Follow me.
|
|
||||||
>The strange bird turned it’s back to us and started to leave through the open door.<
|
|
||||||
>Figuring out I didn’t exactly have anywhere else to go I started following it. Or tried to, at least.<
|
|
||||||
>A hand grabbed my wrist and forcefully yanked me to run into another direction.<
|
|
||||||
|
|
||||||
<<go_to_space Lobby>>
|
|
||||||
<<endif>>
|
|
||||||
===
|
===
|
||||||
|
|
Reference in a new issue