init
BIN
mods/tfquests/coinAndCups_256.jpeg
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
mods/tfquests/julizMeadwench_256.jpeg
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
mods/tfquests/maraHag_256.jpeg
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
mods/tfquests/odrirBlacksmith_256.jpeg
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
mods/tfquests/thrallGamble_256.jpeg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
public_scripts/assets/coinAndCups_1024.jpeg
Normal file
After Width: | Height: | Size: 169 KiB |
BIN
public_scripts/assets/coinAndCups_256.jpeg
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
public_scripts/assets/coinAndCups_512.jpeg
Normal file
After Width: | Height: | Size: 83 KiB |
144
public_scripts/bet_CoinAndCups.tf
Normal file
@ -0,0 +1,144 @@
|
||||
# TFQuests: Public: Coin and Cups
|
||||
# Testnet
|
||||
|
||||
# Files:
|
||||
# - mods/tfquests/coinAndCups_256.jpeg
|
||||
|
||||
# Rune text:
|
||||
#
|
||||
# <center><img src='mods/tfquests/coinAndCups_256.jpeg'></center><br>
|
||||
# <h2>In the dim corner of the room,</h2>
|
||||
# <h3>
|
||||
# a shady figure with a braided beard and piercing blue eyes challenges you to a game of coin and cups, his sly grin hinting at mischief.<br>
|
||||
# With a flick of his wrist, he deftly hides a coin beneath one of three weathered cups, declaring:
|
||||
# </h3>
|
||||
# - Choose wisely! Victory brings glory, but defeat will echo through these walls!
|
||||
# <br>
|
||||
# <h3>
|
||||
# The air crackles with anticipation as onlookers lean in, eager to see if you can outsmart this mysterious contender<br>
|
||||
# and claim your prize, or face their laughter.
|
||||
# </h3>
|
||||
|
||||
|
||||
script {
|
||||
name "TFQp: Coin and Cups - 0.36-1"
|
||||
description "Find the ball to win a prize"
|
||||
icon "@GameData/TB/cc/badges/dice-fire.svg"
|
||||
owner 18
|
||||
public
|
||||
# deployable
|
||||
|
||||
overrides {
|
||||
1 "<h2>I challenge thee to a test of wit and sight!</h2><h3>Guess where the coin lies, and claim your reward.</h3>"
|
||||
2 "By Odin's will, <strong>I accept!</strong>"
|
||||
3 "<h2>The cups are shuffled by the winds of fate, hiding the coin's true location.</h2><h3>Keep your eyes sharp, for only the keenest Viking will uncover it!</h3>"
|
||||
4 "Alas, I must <strong>decline</strong> the challenge this time."
|
||||
5 "<h2>Understood!</h2><h3>Until our paths cross again, may your journeys be prosperous!</h3>"
|
||||
6 "<h2>The moment of truth is upon us.</h2><h3>Choose your cup wisely and reveal the hidden coin!</h3>"
|
||||
7 "<h2>The cup is being lifted...</h2><h3>Has your choice uncovered the hidden coin?</h3>"
|
||||
8 "Perhaps we should gather our strength first."
|
||||
9 "The <strong>left</strong> cup. Let fortune smile upon my choice!"
|
||||
10 "The <strong>center</strong> cup. May the coin be where I seek!"
|
||||
11 "The <strong>right</strong> cup. Here’s hoping it holds the bounty!"
|
||||
12 "<center><img src='mods/tfquests/coinAndCups_256.jpeg'></center>"
|
||||
|
||||
local "pledge" 100000000
|
||||
local "award" 200000000
|
||||
}
|
||||
|
||||
precondition "Gold Reserve" gold >= local "pledge"
|
||||
|
||||
reserves { owner gold local "award" }
|
||||
|
||||
|
||||
procedure "play" {
|
||||
if (random 2 == local "chosen_cup") {
|
||||
award gold local "award"
|
||||
set local "gold_won" local "gold_won" + local "award"
|
||||
} else {
|
||||
pay gold local "pledge"
|
||||
set local "gold_lost" local "gold_lost" + local "pledge"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
${12}<br>${1}<br>
|
||||
...............................<br>
|
||||
Gold pledge: <strong>${gold:pledge}</strong><br>
|
||||
Chance of Win: <strong>1 in 3</strong><br>
|
||||
Prize: <strong>${gold:award}</strong><br>
|
||||
...............................<br>
|
||||
Gold Won: <strong>${gold:gold_won}</strong><br>
|
||||
Gold Lost: <strong>${gold:gold_lost}</strong><br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "${2}"
|
||||
reserves {
|
||||
player gold local "pledge"
|
||||
owner gold local "award"
|
||||
}
|
||||
selected text "${3}<br><br>"
|
||||
next state "play"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled gold >= local "pledge"
|
||||
text "${4}"
|
||||
selected text "
|
||||
${5}<br>...............................<br>
|
||||
Gold Won: <strong>${gold:gold_won}</strong><br>
|
||||
Gold Lost: <strong>${gold:gold_lost}</strong><br><br>
|
||||
"
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled gold < local "pledge"
|
||||
text "${8}"
|
||||
selected text "
|
||||
${5}<br>...............................<br>
|
||||
Gold Won: <strong>${gold:gold_won}</strong><br>
|
||||
Gold Lost: <strong>${gold:gold_lost}</strong><br><br>
|
||||
"
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "play" {
|
||||
text "${12}<br>${6}<br><br>"
|
||||
|
||||
choice {
|
||||
text "${9}"
|
||||
actions {
|
||||
set local "chosen_cup" 0
|
||||
call "play"
|
||||
}
|
||||
selected text "${7}<br><br>"
|
||||
next state "init"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "${10}"
|
||||
actions {
|
||||
set local "chosen_cup" 1
|
||||
call "play"
|
||||
}
|
||||
selected text "${7}<br><br>"
|
||||
next state "init"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "${11}"
|
||||
actions {
|
||||
set local "chosen_cup" 2
|
||||
call "play"
|
||||
}
|
||||
selected text "${7}<br><br>"
|
||||
next state "init"
|
||||
}
|
||||
}
|
||||
}
|
105
public_scripts/bet_runeRoll.tf
Normal file
@ -0,0 +1,105 @@
|
||||
# TFQuests: Public: Rune Roll
|
||||
# Testnet
|
||||
|
||||
# Files:
|
||||
# - mods/tfquests/thrallGamble_256.jpeg
|
||||
|
||||
# Rune text:
|
||||
#
|
||||
# <center><img src='mods/tfquests/thrallGamble_256.jpeg'></center><br>
|
||||
# <h2>A rugged Viking,</h2>
|
||||
# <h3>
|
||||
# his eyes gleaming with mischief, challenges the player to a high-stakes game of runes under flickering torchlight.<br>
|
||||
# He lays out intricately carved stones, each one promising fortune or folly, and taunts that only the boldest can conquer fate.<br>
|
||||
# As tension mounts, the player must navigate the mysteries of the runes and stake their honor against his relentless bravado, igniting a fierce rivalry...
|
||||
# </h3>
|
||||
|
||||
|
||||
script {
|
||||
name "TFQp: Rune Roll - 0.36-1"
|
||||
description "Roll a dice to multiply your pledge"
|
||||
icon "@GameData/TB/cc/badges/dice-fire.svg"
|
||||
owner 18
|
||||
public
|
||||
# deployable
|
||||
|
||||
overrides {
|
||||
1 "<h2>Ho there, %P! Fortune favor you this day?<br>Come, take a seat and let us cast the runes together!</h2>"
|
||||
2 "<h3>Throw the runes and let fate decide!</h3>"
|
||||
3 "<h2>Runes are rolling!</h2><h3>May the blessings of the Norns guide your fate<br>and Lady Luck smile upon you!</h3><br>"
|
||||
4 "Not today, my friend. Farewell"
|
||||
5 "<h2>May the gods watch over you, until we meet again.</h2>"
|
||||
6 "<h3>Perhaps we should rest ourselves</h3>"
|
||||
7 "<center><img src='mods/tfquests/thrallGamble_256.jpeg'></center>"
|
||||
|
||||
local "pledge" 100000000
|
||||
local "1_chance_in" 5
|
||||
local "award_multiplier" 2
|
||||
}
|
||||
|
||||
precondition "Pledge Reserve" gold >= local "pledge" * 2
|
||||
|
||||
reserves {
|
||||
player gold local "pledge"
|
||||
owner gold (local "pledge" * local "award_multiplier")
|
||||
}
|
||||
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
${7}<br>${1}<br>
|
||||
...............................<br>
|
||||
Gold pledge: <strong>${gold:pledge}</strong><br>
|
||||
Chance of Win: <strong>1 in ${1_chance_in}</strong><br>
|
||||
Award Multiplier: <strong>${award_multiplier}</strong><br>
|
||||
...............................<br>
|
||||
Gold Won: <strong>${gold:gold_won}</strong><br>
|
||||
Gold Lost: <strong>${gold:gold_lost}</strong><br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "${2}"
|
||||
reserves {
|
||||
owner gold (local "pledge" * local "award_multiplier")
|
||||
player gold local "pledge"
|
||||
}
|
||||
actions {
|
||||
if (random local "1_chance_in" - 1 == 0) {
|
||||
award gold (local "pledge" * local "award_multiplier")
|
||||
set local "win_counter" local "win_counter" + 1
|
||||
set local "gold_won" local "pledge" * local "award_multiplier" * local "win_counter"
|
||||
} else {
|
||||
pay gold local "pledge"
|
||||
set local "loss_counter" local "loss_counter" + 1
|
||||
set local "gold_lost" local "pledge" * local "loss_counter"
|
||||
}
|
||||
}
|
||||
selected text "${3}<br><br>"
|
||||
next state "init"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled gold >= local "pledge"
|
||||
text "${4}"
|
||||
selected text "
|
||||
${5}<br>
|
||||
...............................<br>
|
||||
Gold Won: <strong>${gold:gold_won}</strong><br>
|
||||
Gold Lost: <strong>${gold:gold_lost}</strong><br><br>
|
||||
"
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled gold < local "pledge"
|
||||
text "${6}"
|
||||
selected text "
|
||||
${5}<br>
|
||||
...............................<br>
|
||||
Gold Won: <strong>${gold:gold_won}</strong><br>
|
||||
Gold Lost: <strong>${gold:gold_lost}</strong><br><br>
|
||||
"
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
}
|
35
scripting_help/htmlCss_tags.txt
Normal file
@ -0,0 +1,35 @@
|
||||
# HTML
|
||||
|
||||
- <!-- Comment -->
|
||||
|
||||
- <p></p>
|
||||
|
||||
- <h0></h0>
|
||||
|
||||
- <br><br>
|
||||
|
||||
- <strong></strong>
|
||||
|
||||
- <em></em>
|
||||
|
||||
- <ul>
|
||||
<li></li>
|
||||
</ul>
|
||||
|
||||
- <dl>
|
||||
<dt></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
- <table>
|
||||
<tr>
|
||||
<td></td>
|
||||
<th></th>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
- <img src="TB/images/agate.png"/>
|
||||
|
||||
# CSS
|
||||
|
||||
- background-color: color
|
664
scripting_help/overview.txt
Normal file
@ -0,0 +1,664 @@
|
||||
* Overview
|
||||
|
||||
A script is a text file describing a state machine.
|
||||
States include text/images to be shown, and actions can be performed when changing state.
|
||||
The player uses the script by selecting which state transition to perform. These
|
||||
transitions may be enabled or disabled by script logic.
|
||||
|
||||
There are three variants of scripts:
|
||||
- building scripts: those are assigned to a runestone by the owner of the building the
|
||||
runestone is in, to be run by another player clicking on that runestone
|
||||
- storyline scripts: those are playable from the scripts screen, and will trigger a
|
||||
"script X is available" notification when a player meets the requirements to run it
|
||||
- technical scripts: those are playable from the scripts screen, and will NOT trigger
|
||||
the notification storyline scripts do, but are otherwise identical to storyline scripts.
|
||||
|
||||
Any player may run one script at the same time at most. This means that if you start
|
||||
a script, you must finish it before being able to start another. Scripts have an owner:
|
||||
building scripts are owned by the building's owner, and others by the game account.
|
||||
This allows script to perform actions that affect the player and/or the owner. For
|
||||
example, giving gold.
|
||||
|
||||
The top level construct with basic attributes is:
|
||||
|
||||
script {
|
||||
name "Title goes here"
|
||||
description "One liner telling players what the script is about"
|
||||
state "init" {
|
||||
}
|
||||
}
|
||||
|
||||
A running script is also associated to the city in which it was started. This allows
|
||||
things like predicating a script on a certain special event being currently on, or
|
||||
to restrict a script to a particular city.
|
||||
|
||||
* States:
|
||||
|
||||
A script is a state machine, where the player can effect state changes.
|
||||
The script will always start in the first state.
|
||||
A script may have any number of states, and any number of state transitions
|
||||
from a state to another. Transitions can be enabled or disabled based
|
||||
on conditions on the chain (player state, global state, local state).
|
||||
The player will play through the script by choosing one of the enabled
|
||||
transitions from the state they're currently in.
|
||||
A state with no state transition denotes the end of the script.
|
||||
|
||||
A state can include:
|
||||
- text to be shown (a subset of HTML/CSS is allowed)
|
||||
- an image to be shown next to the text
|
||||
- a set of actions to be executed upon entering that state
|
||||
- a set of choices controlling the state changes available to the player
|
||||
|
||||
Note that images should be kept small as they'll get embedded into the chain.
|
||||
Reusing images from script to script is encouraged as there is deduplication,
|
||||
so reusing an existing image is very cheap.
|
||||
|
||||
* Choices
|
||||
|
||||
A state may have any number of choices for the player to select.
|
||||
A state with no choice denotes the end of the script.
|
||||
Choices include:
|
||||
- a set of preconditions for this state to be enabled
|
||||
- a set of reserves needed for this state to be enabled
|
||||
- a text to be shown
|
||||
- a text to be shown upon selection
|
||||
- a state name to go to upon selection (if none, the script ends)
|
||||
- a set of actions to be executed on choice selection
|
||||
|
||||
The player may choose one of the choices that are enabled (ie, all
|
||||
its preconditions, if any, are true). Such a choice is a game command,
|
||||
which will be mined in a block to perform the state change, after which
|
||||
the player will see the next state's text/image/choices.
|
||||
|
||||
* Reserves
|
||||
|
||||
Reserves are conditions a player or script owner's inventory has to meet
|
||||
for a script or script choice to be enabled. Upon starting a script with
|
||||
reserves, or upon selecting a choice with reserves, the relevant gold and/or
|
||||
items are reserved (which means they can't be used by the inventory's owner
|
||||
in trade, auctions, etc until unreserved). Reserves may be used by script
|
||||
actions, but no other reason until unreserved. The intent of reserves is
|
||||
to prevent a script from being run or a choice being selected if the user
|
||||
or owner does not have the required gold or items, and to ensure this stays
|
||||
the case. For example, in a simple game script where, after some choices,
|
||||
the outcome is either for the player to win 2 gold from the script owner,
|
||||
or for the script owner to win 1 gold from the player, you'd want to set the
|
||||
reserves to 2 gold from the script owner, and 1 gold from the player. This
|
||||
ensures that both always have the amount needed to make good on their debts
|
||||
even if the actual script action transfering gold is executed later on
|
||||
(which, without reserves, would open an exploit vector or render a script
|
||||
unable to finish).
|
||||
Reserves in a choice are cumulative with any other reserves in this script.
|
||||
Reserves are unreserved automatically at the end of a script.
|
||||
|
||||
A special cases are fees reserves. These are to reserve some amount of
|
||||
gold to pay fees, which are paid to the town treasury, rather than to the
|
||||
counterparty (player to script owner, or script owner to player). Some
|
||||
actions a script can take (currently just creating more instances of an
|
||||
item with bonuses) requires fees to be paid as an anti abuse mechanism.
|
||||
|
||||
* Actions
|
||||
|
||||
Actions are changes to the game state. A set of actions can be executed
|
||||
upon entering a state and upon selecting a choice. Actions are executed
|
||||
sequentially in the order they appear.
|
||||
Actions include changing a variable, transfering gold and/or items between
|
||||
the player and script owner's reserves, awarding a badge, creating a new
|
||||
entry in news, etc.
|
||||
Actions can be conditional.
|
||||
|
||||
* Variables:
|
||||
|
||||
Scripts can read and write variables. They are integers only.
|
||||
There are three types of variables:
|
||||
- global variables are accessible by all scripts
|
||||
- player variables are duplicated for each player
|
||||
- local variables are duplicated for each running script instance
|
||||
|
||||
For a rough analogy with C++:
|
||||
- global variables are global variables in the global namespace
|
||||
- player variables are class member variables
|
||||
- local variables are function level local variables
|
||||
|
||||
So for example, if you want to allow a script to be run only ten times,
|
||||
you'd use a global variable to increment at each script run. If you want
|
||||
to allow every player to run a script only once, you'd use a player
|
||||
variable to set a flag. If you want a looping script to allow doing an
|
||||
action only twice every time it's run, you'd use a local variable.
|
||||
|
||||
In addition to variables, a script can access blockchain state, such
|
||||
as the gold balance for the player playing the script, the current date,
|
||||
the number of flags the player owns, etc. These are read only.
|
||||
|
||||
This means a local named "foo" will only be accessible from this
|
||||
instance of the script. It will not keep its value if the script is
|
||||
restarted, and will not be visible from another script. Player
|
||||
variables are persistent between scripts, but only seen by the player
|
||||
running those scripts. Global variables are visible by every script
|
||||
run by every player. This implies that variable names should be chosen
|
||||
with care to avoid collisions.
|
||||
|
||||
* Conditions:
|
||||
|
||||
Variables and state can be used to create conditions. Conditions can be
|
||||
used to enable/disable particular state transitions. Since scripts do
|
||||
not have loops, this can be used to create implicit loops by jumping
|
||||
through a state cycle.
|
||||
|
||||
For example, this state will only allow the player to switch to the "win"
|
||||
state if they have at least 5 points in their "luck" attribute.
|
||||
|
||||
state "init" {
|
||||
choice {
|
||||
{
|
||||
enabled attribute "luck" > 5
|
||||
next state "win"
|
||||
}
|
||||
choice {
|
||||
next state "init"
|
||||
}
|
||||
}
|
||||
|
||||
Note that a state can transition back to itself as above. The script
|
||||
above would never end until the player reaches 5 luck (which is done
|
||||
without script input, so this script is essentially a way to prevent
|
||||
the player from playing any other script till they reach 5 luck.
|
||||
Needless to say, not a good script.
|
||||
|
||||
* Substitutions
|
||||
|
||||
The text displayed to the player can be parameterized. Three types of
|
||||
substitutions are made on text:
|
||||
|
||||
- variables
|
||||
- % codes
|
||||
- gold/items
|
||||
- widget values
|
||||
|
||||
Variables are of the form:
|
||||
${[format:]name}
|
||||
The format is optional, and is a hint for how to display the value of the
|
||||
variable. By default, it's displayed as a raw unsigned integer.
|
||||
Valid formats are:
|
||||
- gold: displayed as a gold amount, so 7843 will be displayed as 0.00007843,
|
||||
and 1230000000 will be displayed as 12.3.
|
||||
- temperature: temperature in Townforge is measured in tenths of a degree,
|
||||
so 87 will be displayed as 8.7. This value is signed.
|
||||
- item: displayed as the name of them item with that id, eg 256 will show as "labour".
|
||||
|
||||
% codes are simple replacements:
|
||||
%P is replaced by the name of the player running the script
|
||||
%C is replaced by the name of the city the player started the script in
|
||||
|
||||
There are extra parameters for gold and items in the player's inventory.
|
||||
These are helpful when a script needs to refer to the current state of that
|
||||
inventory while in a script. While a state's init actions can set a local
|
||||
variable to gold and/or item amounts, this will be constant while the script
|
||||
is in this state, even if the gold or number of items change due to another
|
||||
action. For example, if a script allows an action only if the player has
|
||||
at least 1000 labour, that choice will typically be set with an "enabled"
|
||||
condition, and will be hidden if that condition is not met. However, it would
|
||||
be user friendly to include something like "you could do X if you have at
|
||||
least 1000 labour (you currently have Y labour)" in the state's text. Using
|
||||
a local variable initialized in the init actions for that state would not
|
||||
update that text if the player buys more labour after seeing this text.
|
||||
Using those extra formatting codes does, eg:
|
||||
"You have ${gold} gold"
|
||||
"You have ${item 256} labour.
|
||||
|
||||
Widget values are obsolete with the switch to HTML, but may come back later.
|
||||
|
||||
Example:
|
||||
|
||||
state {
|
||||
init { set local "gold-won" 1234500000 }
|
||||
choice { text "%P gets ${gold:gold-won} gold" }
|
||||
}
|
||||
-> Sigrid Sigrúnarsdóttir gets 12.345 gold
|
||||
|
||||
* Overrides
|
||||
|
||||
overrides are numerical initial values given to local variables from outside the script
|
||||
or string that will replace placeholders in text displayed by the script.
|
||||
|
||||
By default, all variables have a value of 0 before a value is assigned to
|
||||
them. Overrides allow setting configuration that can be overriden when a
|
||||
player assigns a script to a building runestone.
|
||||
Numerical overrides act on local variables, not global nor player variables.
|
||||
|
||||
String overrides are associated with a number.
|
||||
|
||||
Example:
|
||||
|
||||
overrides {
|
||||
4 "the cave"
|
||||
local "gold" 1800000000
|
||||
}
|
||||
state "init" {
|
||||
text "You found ${gold:gold} in $4"
|
||||
}
|
||||
|
||||
will display: "You found 18 gold in the cave".
|
||||
|
||||
|
||||
* Preconditions
|
||||
|
||||
A script can have preconditions that must be met before the script can be run.
|
||||
Preconditions can be specific to the player attempting to run the script
|
||||
(eg, player must have made at least one discovery) or general (the current
|
||||
year must be 960). A script can have any number of preconditions. They are
|
||||
similar to conditions used to control which states are enabled.
|
||||
|
||||
|
||||
* Procedures
|
||||
|
||||
Procedures are simple ordered sets of actions that can be called. This can be
|
||||
useful when you have to have the same set of actions in several places, so
|
||||
they can be factored in a single place. They do not return a value.
|
||||
|
||||
Example:
|
||||
|
||||
procedure "p1" {
|
||||
set local "x" local "x" + 1
|
||||
if (local "x" == 3) { set local "y" 1 }
|
||||
}
|
||||
state "foo" {
|
||||
choice "1" {
|
||||
...
|
||||
actions { call "p1" }
|
||||
}
|
||||
choice "2" {
|
||||
...
|
||||
actions { call "p1" }
|
||||
}
|
||||
}
|
||||
|
||||
* Action list
|
||||
|
||||
pick: will pick a random action with a weighted random roll. The following
|
||||
action awards 1 gold about 66% of the time.
|
||||
|
||||
pick {
|
||||
weight 1 none
|
||||
weight 2 award gold 1.0
|
||||
}
|
||||
|
||||
set: set a local, player, or global variable. The following adds 1 gold
|
||||
to a local variable.
|
||||
|
||||
set local "accumulated-gold" local "accumulated-gold" + 1.0
|
||||
|
||||
pay: transfer gold or items from the player to the script owner, eg:
|
||||
|
||||
pay gold 2.5
|
||||
pay item 256 5 # give 5 labour
|
||||
|
||||
award: transfer gold or items from the script owner to the player, eg:
|
||||
|
||||
award gold 2.5
|
||||
pay item 256 5
|
||||
|
||||
consume: destroys items from the player's inventory, eg:
|
||||
|
||||
consume item 256 80 # 80 labour disappears
|
||||
|
||||
percent: executes an action with a certain probability. The following
|
||||
will award 1.5 gold based on a probability stored in a local variable
|
||||
(which should be between 0 (never executed) and 100 (always executed)):
|
||||
|
||||
percent local "probability" award gold 1.5
|
||||
|
||||
storyline event: creates an event to display in the news. This includes
|
||||
a short-ish string that describes the event. This string may include
|
||||
printf style arguments:
|
||||
|
||||
storyline event "You see %u pirate ships on the horizon" local "num-ships"
|
||||
|
||||
log: similar to storyline event, but just logs to the node's log, used
|
||||
for debugging, and has no player visible effect:
|
||||
|
||||
log "Value of x: %u" local "x"
|
||||
|
||||
call: call a procedure by name:
|
||||
|
||||
procedure do_stuff { set global "stuff-done" 1 }
|
||||
call "do_stuff"
|
||||
|
||||
award badge: award a badge to a player. If they already have that badge,
|
||||
nothing happens. The following awards badge number 50 to the player. The
|
||||
level of the badge that is awarded is based on the second parameter, which
|
||||
is the score, which gets compared to the thresholds for that badge. If,
|
||||
for this example, the badge thresholds are 500, 1000, 5000, 10000, 50000,
|
||||
the the badge will be awarded at level 3, since 6800 is higher or equal
|
||||
to 5000 but not 10000:
|
||||
|
||||
award badge 50 6800
|
||||
|
||||
create item: creates new instances of an item. This item MUST be a
|
||||
custom item, and MUST have been setup allowing further instances to be
|
||||
created. It is not possible to create new, eg, labour, gemstones,
|
||||
materials, gold coins, etc, in this way. The following creates 10 new
|
||||
Coru cards (assuming "coru-card" global variable holds the item id
|
||||
of that card):
|
||||
|
||||
create item global "coru-card-10" 10
|
||||
|
||||
award title: award a new title to the player, who thereafter gets the
|
||||
option to display this title:
|
||||
|
||||
award title "Smiter of rats"
|
||||
|
||||
start special event: starts a special event in the script city. A special
|
||||
case for the fire special event allows selecting the building id where
|
||||
the fire starts:
|
||||
|
||||
start special event 4
|
||||
start special event 14 global "firestarter"
|
||||
|
||||
stop special event: stops the special event, if running. The following
|
||||
will stop a running fire:
|
||||
|
||||
stop special event 14
|
||||
|
||||
|
||||
* Expression list
|
||||
|
||||
Expressions are statements yieding a boolean value - true or false.
|
||||
They include most common operators (NOT, <, <=, ==, >=, >, !=),
|
||||
parenthesized expressions. Comparison operators compare operands.
|
||||
In addition, there are a few Townforge specific ones:
|
||||
|
||||
is item: checks whether the operand is a valid item:
|
||||
|
||||
is item local "item-id"
|
||||
|
||||
is gemstone: checks whether the operand is a gemstone:
|
||||
|
||||
is gemstone local "item-id"
|
||||
|
||||
is block: checks whether the operand is a block, which may be used
|
||||
to build 3D voxel models on the map:
|
||||
|
||||
is block local "item-id"
|
||||
|
||||
|
||||
is labour: checks whether the operand is the labour item:
|
||||
|
||||
is labour local "item-id"
|
||||
|
||||
|
||||
is coin: checks whether the operand is a valid collectible gold coin:
|
||||
|
||||
is coin item local "item-id"
|
||||
|
||||
|
||||
is food: checks whether the operand is a valid food item:
|
||||
|
||||
is food local "item-id"
|
||||
|
||||
|
||||
is custom item: checks whether the operand is a custom item (ie, an
|
||||
item created by a player, rather than a predefined item):
|
||||
|
||||
is custom item local "item-id"
|
||||
|
||||
|
||||
is restricted item: checks whether the operand is a restricted item:
|
||||
|
||||
is restricted item local "item-id"
|
||||
|
||||
|
||||
is patent: checks whether the operand is a patent:
|
||||
|
||||
is patent local "item-id"
|
||||
|
||||
|
||||
during special event: checks whether the town is currently affected
|
||||
by the special event given as operand:
|
||||
|
||||
during special event 4
|
||||
|
||||
|
||||
is mayor of city: checks whether the player is the mayor of the city
|
||||
|
||||
is mayor of city
|
||||
|
||||
|
||||
* Operand list
|
||||
|
||||
Operands yield a (signed) integer value. They can be used in expressions and/or
|
||||
other operands.
|
||||
Trivial operands are numbers (integers only, signed or unsinged).
|
||||
Floaing point numbers are also allowed, but they are internally converted to
|
||||
integer values after multiplication by 100000000: those floating point values
|
||||
are intended to represent gold values, where the floating point value is the
|
||||
human readable amount of gold, and the integer value scaled by 100000000 is
|
||||
the number of atomic units. Here, 0.05 is equivalent to 5000000.
|
||||
Similarly, optionally signed floating point numbers followed directly by the
|
||||
degree (⚬) sign are understood to be temperatures, and should have either one
|
||||
or zero digits after the decimal point, since temperatures are expressed in
|
||||
tenths of a degree, so -2.6⚬ is equivalent to the signed number -26.
|
||||
|
||||
Operands include the following simple mathematical functions:
|
||||
|
||||
add: addition:
|
||||
|
||||
global "baseline" + player "bonus"
|
||||
|
||||
sub: subtraction:
|
||||
|
||||
global "varname" - 4
|
||||
|
||||
mul: multiplication:
|
||||
|
||||
3 * 9
|
||||
|
||||
div: division (dividing by zero is an error, and the script action attempting
|
||||
this will be unable to be mined):
|
||||
|
||||
5 / 2
|
||||
|
||||
mod: modulo (modulo by zero is an error, and the script action attempting
|
||||
this will be unable to be mined):
|
||||
|
||||
8 % 6
|
||||
|
||||
min: minimum:
|
||||
|
||||
min(5+4, 19*4-local "surprise")
|
||||
|
||||
max: maximum:
|
||||
|
||||
max(0, 0)
|
||||
|
||||
|
||||
In addition, Townforge supports the following operands:
|
||||
|
||||
blockchain height: returns the current blockchain height
|
||||
|
||||
gold: returns the player's gold balance (in atomic units). The following
|
||||
calculates the player's gold balance plus two gold minus 0.00005 gold.
|
||||
|
||||
gold + 2.0 - 50000
|
||||
|
||||
player variable:
|
||||
|
||||
player "varname"
|
||||
|
||||
local variable:
|
||||
local "varname"
|
||||
|
||||
global variable:
|
||||
|
||||
global "namespace-varname"
|
||||
|
||||
badge: returns the level the player reached for that badge, 0 if no level:
|
||||
|
||||
badge 12
|
||||
|
||||
level: returns the player's level:
|
||||
|
||||
level
|
||||
|
||||
attribute: returns the score the player has in the given attribute (those
|
||||
are defined after the game start, and players can assign points to them
|
||||
when they gain levels):
|
||||
|
||||
attribute "strength"
|
||||
|
||||
player item: returns the number of such items in the player's inventory:
|
||||
|
||||
player item 256 # labour
|
||||
|
||||
owner item: returns the number of such items in the script owner's inventory:
|
||||
|
||||
owner item 256 # labour
|
||||
|
||||
flags: return the number of flags owned by the player:
|
||||
|
||||
flags
|
||||
|
||||
flags with role: returns the number of flags of the given role owned by
|
||||
the player:
|
||||
|
||||
flags with role 2
|
||||
|
||||
flag role: returns the role of the given flag:
|
||||
|
||||
flag local "flagid" role
|
||||
|
||||
discoveries: returns the number of discoveries made by the player:
|
||||
|
||||
discoveries
|
||||
|
||||
account age: returns the number of blocks since the player account
|
||||
was created:
|
||||
|
||||
account age
|
||||
|
||||
year: returns the current in game year
|
||||
|
||||
year
|
||||
|
||||
time of year: returns the 0 based number of the current day within
|
||||
the current year (there are 12 months of 30 days in the game year,
|
||||
so 360 days, numbered 0 to 359):
|
||||
|
||||
time of year
|
||||
|
||||
item supply: returns the number of items of the given type:
|
||||
|
||||
item 256 supply
|
||||
|
||||
city id: returns the id of the current city
|
||||
|
||||
city id
|
||||
|
||||
city level: returns the level of the current city
|
||||
|
||||
city level
|
||||
|
||||
city treasury: returns the amount of gold, in atomic units, of the
|
||||
current city's treasury:
|
||||
|
||||
city treasury
|
||||
|
||||
moose: returns the number of moose in the current city:
|
||||
|
||||
moose
|
||||
|
||||
bears: returns the number of bears in the current city:
|
||||
|
||||
bears
|
||||
|
||||
discoverer: returns the id of the player who made the given
|
||||
discovery (0 if the discovery was not made yet):
|
||||
|
||||
discoverer local "discovery-id"
|
||||
|
||||
discovery height: returns the block height at which a given
|
||||
discovery was made (0 if it was not made yet):
|
||||
|
||||
discovery local "discovery-id" height
|
||||
|
||||
player id: returns the id of the player:
|
||||
|
||||
player id
|
||||
|
||||
temperature: returns the current temperature in the current
|
||||
city (in tenths of a degree):
|
||||
|
||||
temperature
|
||||
|
||||
random: generate a pseudo random number between 0 and N-1:
|
||||
|
||||
random 100
|
||||
|
||||
sqrt: returns the integer square root of a number:
|
||||
|
||||
sqrt 18
|
||||
|
||||
epoch: returns the 0 based index of the current epoch:
|
||||
|
||||
epoch
|
||||
|
||||
player epoch: returns the 0 based index of the epoch the player's
|
||||
account was created in:
|
||||
|
||||
player epoch
|
||||
|
||||
owner epoch: returns the 0 based index of the epoch the script owner's
|
||||
account was created in:
|
||||
|
||||
owner epoch
|
||||
|
||||
flag epoch: returns the 0 based index of the epoch the flag
|
||||
was last modified:
|
||||
|
||||
flag 1234 epoch
|
||||
|
||||
player coru rating: returns the player's coru rating:
|
||||
|
||||
player coru rating
|
||||
|
||||
owner coru rating: returns the script owner's coru rating:
|
||||
|
||||
owner coru rating
|
||||
|
||||
player prestige: returns the player's prestige
|
||||
|
||||
player prestige
|
||||
|
||||
owner prestige: returns the script owner's prestige
|
||||
|
||||
owner prestige
|
||||
|
||||
gender: returns the player's gender (0 for female, 1 for male):
|
||||
|
||||
gender
|
||||
|
||||
self built flags: returns the number of flags owned by the player
|
||||
which were built by that player:
|
||||
|
||||
self built flags
|
||||
|
||||
times played this script: returns the number of times the player
|
||||
has already played this script to completion:
|
||||
|
||||
times played this script
|
||||
|
||||
times played script: returns the number of times the player has
|
||||
already played the given script to completion, the script can be
|
||||
given as a script id or by its exact name (capitalization matters):
|
||||
|
||||
times played script 10
|
||||
times played script "My most excellent script"
|
||||
|
||||
player occupation: returns the player's occupation:
|
||||
|
||||
player occupation
|
||||
|
||||
owner occupation: returns the script owner's occupation:
|
||||
|
||||
owner occupation
|
||||
|
59
scripting_help/proto.tf
Normal file
@ -0,0 +1,59 @@
|
||||
# foo
|
||||
|
||||
script {
|
||||
deployable
|
||||
name ""
|
||||
owner 1
|
||||
public
|
||||
description ""
|
||||
icon "@GameData/../file.svg"
|
||||
|
||||
precondition ""
|
||||
|
||||
procedure "" {}
|
||||
|
||||
overrides {}
|
||||
reserves {}
|
||||
|
||||
state "init" {
|
||||
init {}
|
||||
text ""
|
||||
choice {
|
||||
reserves {}
|
||||
enabled x AND y
|
||||
text ""
|
||||
selected text ""
|
||||
next state ""
|
||||
actions {}
|
||||
}
|
||||
choice {
|
||||
reserves {}
|
||||
enabled x AND y
|
||||
text ""
|
||||
selected text ""
|
||||
next state ""
|
||||
actions {}
|
||||
}
|
||||
}
|
||||
|
||||
state "" {
|
||||
init {}
|
||||
text ""
|
||||
choice {
|
||||
reserves {}
|
||||
enabled x AND y
|
||||
text ""
|
||||
selected text ""
|
||||
next state ""
|
||||
actions {}
|
||||
}
|
||||
choice {
|
||||
reserves {}
|
||||
enabled x AND y
|
||||
text ""
|
||||
selected text ""
|
||||
next state ""
|
||||
actions {}
|
||||
}
|
||||
}
|
||||
}
|
147
scripting_help/scriptExample.tf
Normal file
@ -0,0 +1,147 @@
|
||||
# foo
|
||||
script {
|
||||
deployable # if absent, can't be mined on mainnet
|
||||
name "Uses everything"
|
||||
owner 1 # set 0 for storyline scripts, non zero means it must be attached to a building to be used
|
||||
public # others (than the owner) may use it on their buildings (*not* to be used for standalone scripts)
|
||||
description "Free draw every 100 blocks"
|
||||
icon "@GameData/TB/cc/badges/gems.svg"
|
||||
precondition "Player has not played the lottery in 100 blocks" blockchain height >= player "lottery-height" + 100 # precondition can be named for player display
|
||||
precondition blockchain height >= 250
|
||||
precondition badge 2 >= 1 # need badge 2, any level
|
||||
precondition level != 10
|
||||
precondition attribute "sanity" > 1
|
||||
precondition player item 256 == 0 # if we have no labour in inventory
|
||||
precondition flags < 10 # only for people with fewer than 10 flags (irrespective of role, even empty)
|
||||
precondition discoveries > 10
|
||||
precondition account age < 10000 # only for noobs
|
||||
precondition year <= 999
|
||||
precondition time of year < 100 # early january 999 only
|
||||
precondition item 256 supply > 1000000 # once there are enough labour units in exisstence
|
||||
precondition during special event 2 or during special event 3 # good or bad harvest
|
||||
precondition is mayor of city # mayor of the city this script is started in
|
||||
precondition city id == 1 # only in second city (first is 0)
|
||||
precondition city level > 3 # if large enough
|
||||
precondition city treasury > 5000.0 # and rich enough
|
||||
precondition moose > 500 and moose < 1000
|
||||
precondition bears != 100
|
||||
precondition discoverer 10 == player id
|
||||
precondition discovery height 10 < 5000 # if the discovery was made early in the game
|
||||
precondition global "name" > 10 # global variable, accessible by all users
|
||||
precondition local "name" > 10 # local variable, only accessible within the script, does not live to another instance of the script
|
||||
precondition player "name" > 10 # player variable, accessible only by this player
|
||||
precondition max(10,1) == 10
|
||||
precondition min(10,1) == 1
|
||||
precondition 2*24 == 48
|
||||
precondition temperature > -1.5⚬
|
||||
precondition random 1 + 1 + 1 >= player item 4 + 2 + 1
|
||||
precondition not ( moose < 10)
|
||||
precondition is item local "some-var-name"
|
||||
precondition is item local "some-var-name"
|
||||
precondition is item local "some-var-name"
|
||||
precondition is custom item local "some-var-name"
|
||||
precondition is labour local "some-var-name"
|
||||
precondition is food local "some-var-name"
|
||||
precondition is coin local "some-var-name"
|
||||
precondition is block local "some-var-name"
|
||||
precondition is item local "some-var-name"
|
||||
precondition is gemstone local "some-var-name"
|
||||
precondition flags with role 5 > 2 # at least 2 residential buildings
|
||||
precondition flag 8 role == 1 # that particular flag exists and is an agricultural building
|
||||
precondition epoch >= 6
|
||||
precondition flag 8 epoch == flag 9 epoch
|
||||
precondition player epoch == 0
|
||||
precondition owner epoch == 0
|
||||
precondition player coru rating >= 800 and player coru rating <= 900
|
||||
precondition owner coru rating > 1000
|
||||
precondition player prestige >= 800 and player prestige <= 900
|
||||
precondition owner prestige > 1000
|
||||
precondition gender == 0 # female
|
||||
precondition gender == 1 # male - can be used to award different tiles, eg mothson/mothdaughter
|
||||
precondition self built flags >= 1 # player owns at least one flag they built themselves
|
||||
precondition times played this script == 0 # never played this script
|
||||
precondition times played script 42 == 2 # if played script 42 at least twice
|
||||
|
||||
procedure "p1" {
|
||||
set local "x2_1" 1
|
||||
set local "x2_2" 2
|
||||
set local "x2_3" 3
|
||||
if (local "x2_2" == 2) { set local "z" 1 } else { set local "z" 2 }
|
||||
}
|
||||
|
||||
overrides {
|
||||
1 "some text"
|
||||
2 "@raw:/path/to/some/file"
|
||||
3 "@hex:/path/to/another/file"
|
||||
local "some-var-name" 18
|
||||
}
|
||||
reserves {
|
||||
owner gold 1.0
|
||||
owner fees 0.1
|
||||
player item 1 10 # must have 10 stones (why not)
|
||||
}
|
||||
state "init" {
|
||||
init {
|
||||
pick {
|
||||
# 2 chances out of three to get the prize
|
||||
weight 1 none
|
||||
weight 2 award gold 1.0 # gold amounts are in human readable terms
|
||||
}
|
||||
set player "lottery-height" blockchain height
|
||||
set global "lottery-was-used" 1
|
||||
set local "played-this-time" 0
|
||||
set local "R1" random 100 # see below for R1 usage
|
||||
}
|
||||
text "%P plays the lottery..." # %P gets replaced by the player's name
|
||||
choice {
|
||||
reserves { player fees 0.02 }
|
||||
enabled blockchain height <= 1000
|
||||
enabled year >= 1000 # several enabled statements are an OR
|
||||
# enabled random 100 > 50 # NEVER use random in enabled, instead, do the following:
|
||||
enabled local "R1" > 50 # that allows random enablement without the issue above
|
||||
text "Play again"
|
||||
next state "init"
|
||||
actions {
|
||||
set local "played-this-time" local "played-this-time" + 1
|
||||
set global "max-played" max(global "max-played", local "played-this-time")
|
||||
pay gold 0.001
|
||||
award gold 0.001
|
||||
pay item 1 1
|
||||
award item 1 1
|
||||
consume item 1 (local "consume-a-lot" != 0 ? 2 : 1)
|
||||
if (random 3 == 0) { award gold 0.1 set local "multiple-statements-in-if" 1 }
|
||||
pick {
|
||||
weight 1 award gold 1.0 # 1 chance of of 111
|
||||
weight 10 award gold 0.1 # 10 chance of of 111
|
||||
weight 100 + attribute "sanity" award gold 0.01 # 100 chance of of 111
|
||||
}
|
||||
percent 10 + global "foo" award gold 0.2 # 10% of the time, extra award
|
||||
award gold (1.0 + random 10000000) # This is gold in atomic units, 0.1, so gives a value between 1.0 (inclusive) and 1.1 (exclusive)
|
||||
storyline event "This will be shown in the news with a %u number" 42
|
||||
storyline event "This will be shown in the news with a %u number, and has a title" 42
|
||||
log "this will go into the logs"
|
||||
log "this will go into the logs with an operand: %u " sqrt(64)
|
||||
call "p1"
|
||||
award badge global "badge-id-to-ward" local "score"
|
||||
create item global "item-to-create" random 3
|
||||
award title "Moondaughter"
|
||||
start special event 4
|
||||
start special event 14 local "starting-flag-id"
|
||||
stop special event local "event-to-stop"
|
||||
}
|
||||
}
|
||||
choice {
|
||||
text "Stop playing"
|
||||
selected text "I'll think about it" # flavour text, displayed when chosen
|
||||
#next state {
|
||||
# weight 10 + attribute "sanity" "init"
|
||||
# weight 10 "done"
|
||||
#}
|
||||
}
|
||||
}
|
||||
state "done" {
|
||||
text "Alright, stopping"
|
||||
+ " the script (with a multiline concatenated string)"
|
||||
# no choices in a state means the script ends
|
||||
}
|
||||
}
|
14
scripting_help/scripting_setup.md
Normal file
@ -0,0 +1,14 @@
|
||||
## Scripting Setup
|
||||
|
||||
### TestGame Mnemonics
|
||||
foyer mittens gaze vocal dwindling unnoticed pimple foolish sword stacking unveil fuming husband bodies exit mugged omnibus jump whale sanity loincloth menu bite cactus vocal
|
||||
|
||||
### Key generation
|
||||
./townforge-wallet-cli --restore-deterministic-wallet
|
||||
|
||||
## Starting daemon and game, offline, with faster blocks, for script testing
|
||||
CC_USE_TEST_GAME_KEY=1 ./townforged --offline --fixed-pow-difficulty 1
|
||||
CC_USE_TEST_GAME_KEY=1 ./townforge
|
||||
|
||||
- For block generation, either mine or use the the python console:
|
||||
daemon.generate_blocks(TF1TT6Tc6cNsFz35FfhRK7yysFT2yj97agkzPVFEt9tLVXRpMhshe1ppGFF7ngS1869Uc3gDXS5yX8xw6BsHposrqLyX1rnKzmgz8, 1)
|
BIN
storyline_scripts/assets/maraHag_1024.jpeg
Normal file
After Width: | Height: | Size: 218 KiB |
BIN
storyline_scripts/assets/maraHag_256.jpeg
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
storyline_scripts/assets/maraHag_512.jpeg
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
storyline_scripts/assets/thrallGamble_1024.jpeg
Normal file
After Width: | Height: | Size: 257 KiB |
BIN
storyline_scripts/assets/thrallGamble_256.jpeg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
storyline_scripts/assets/thrallGamble_512.jpeg
Normal file
After Width: | Height: | Size: 112 KiB |
891
storyline_scripts/mara_hag.tf
Normal file
@ -0,0 +1,891 @@
|
||||
# Townforge: Storyline: A visit from Mara Hag
|
||||
# Testnet
|
||||
|
||||
# Files:
|
||||
# - mods/tfquests/maraHag_256.jpeg
|
||||
|
||||
# Atributtes:
|
||||
# - Sizu
|
||||
# - Fate
|
||||
|
||||
# Player Variables:
|
||||
# - tfs_mara_hag_visited
|
||||
# - tfs_mara_hag_denied
|
||||
|
||||
# Items:
|
||||
# - Name: Raven feather | not fixed supply | group: Quest items | prestige: 1 | description: A feather from a raven. | secondary desc.: It is light, clean, and in very good condition, this could make a quill, perhaps?
|
||||
# - Name: Pack of Herbs | not fixed supply | group: Quest item | Prestige 2 | description: A small bundle of herbs, tied together with a grey lock of hair. | secondary desc.: They smell nice, though you can't recall seeing these growing around here.
|
||||
# - Name: Grandmother's Hairpin | not fixed supply | group: Quest item | Prestige 3 | description: Your grandmother's copper hairpin, worn but beloved. | secondary desc.: You are filled with memories, but can't help to wonder, how could this get here?
|
||||
|
||||
|
||||
## UPDATE ITEM IDs
|
||||
## 0 out and use override to obfuscate qX_answer
|
||||
|
||||
|
||||
script {
|
||||
name "A visit from Mara Hag - 0.36-1"
|
||||
description "A night time visit from an old spirit..."
|
||||
icon "@GameData/TB/cc/badges/backup.svg"
|
||||
owner 0
|
||||
# deployable
|
||||
|
||||
overrides {
|
||||
1 "<center><img src='mods/tfquests/maraHag_256.jpeg'></center>"
|
||||
|
||||
local "owner_fee" 500000000
|
||||
local "min_level" 0
|
||||
local "min_Sizu" 5
|
||||
local "min_Fate" 5
|
||||
local "bronze_award_feather" 100011 #
|
||||
local "silver_award_herbs" 100012 #
|
||||
local "gold_award_hairpin" 100013 #
|
||||
local "q1_answer" 3 #
|
||||
local "q2_answer" 2 #
|
||||
local "q3_answer" 1 #
|
||||
local "q4_answer" 4 #
|
||||
local "q5_answer" 4 #
|
||||
}
|
||||
|
||||
precondition "Not been visited" player "TFs_mara_hag_visited" == 0
|
||||
precondition "Level" level >= local "min_level"
|
||||
|
||||
reserves { owner fees local "owner_fee" }
|
||||
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
<h2>The night sleep is elusive.</h2>
|
||||
<h3>
|
||||
You spent several hours tossing and turning, uneasy as if something was to happen.<br>
|
||||
The moonlight cast its pale shadow in from the small window enclosures, as you found yourself aware of a mysterious presence.<br>
|
||||
Unable to move, you were afraid to open your eyes, but the ominous pressure on your ribcage suggested immediate presence of some strange entity...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
You <strong>opened your eyes</strong> with an uneasy feeling,<br>
|
||||
anticipating that it wouldn't just be the bleak moonlight you'd gaze upon...
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Your vision still blured, things slowly starts to take form...</h2>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "gaze"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
You <strong>kept your eyes closed</strong>.<br>
|
||||
Still asleep, exhausted from the day's work.<br>
|
||||
Tired, you fall back into an uneasy slumber.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Your dreams were filled with ghastly visions of otherworldly creatures,</h2>
|
||||
<h3>
|
||||
twisted memories of the past, and frightening visions of the future.<br>
|
||||
You wake up with a clawing head-ache, but as the daylight pours in, you start to feel normal again.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "gaze" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h2>Verily, upon opening your eyes revealed a terror that slivered through your body.</h2>
|
||||
<h3>
|
||||
Sitting on your chest was a mara, an old nightly hag roughly the size of a young lad or sizeable dog bent like a lumpy twig, with its light blue eyes fixed upon yours.<br>
|
||||
Its pale skin wrinkled, hair like grey seagrass and its bones sticking out from its skin full of lumps of like clay, you were unsettled by the sight of the thing.<br>
|
||||
The mara's mouth was beyond shadowed recognition, covered by the nightly dark that veiled its precise silhouette, but it was clearly about to address you.<br>
|
||||
You, unable to move a muscle, felt panic set in as you could not respond to this potentially malicious entity in your presence.<br>
|
||||
Still, you felt like if it had been there to harm you, it easily would've done so already, you had been asleep after all. All you could think of was...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
enabled attribute "Sizu" >= local "min_Sizu"
|
||||
|
||||
text "
|
||||
<strong>
|
||||
There is nothing in this world that an iron will and a metal sword could not tame.<br>
|
||||
Reveal thy intentions, beast!
|
||||
</strong>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Fully awake now, you are ready for anything!</h2>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { set local "score" local "score" + 1 }
|
||||
|
||||
next state "confront"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled attribute "Fate" >= local "min_Fate"
|
||||
|
||||
text "
|
||||
<strong>
|
||||
Surely a such a supernatural visitor was an omen of some great thing to come;<br>
|
||||
no ordinary person would be honored by the presence of such a spirit.
|
||||
</strong>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Fully awake now, you wonder what would come of this.</h2>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { set local "score" local "score" + 2 }
|
||||
|
||||
next state "confront"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
If such creature was here to harm you, and had caught you unguarded during the night, you were done for.<br>
|
||||
<strong>You guess it wasn't there to harm you. So why panic?</strong><br>
|
||||
You'd look into the eyes of the hag, confronting its gaze with your own.<br>
|
||||
Your stare so intense that it could dispel any otherworldly creature from the void.<br>
|
||||
<strong>Surely, it would have no other choice but to reveal its intentions?</strong>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Certain that you can handle anything,</h2>
|
||||
<h3>
|
||||
tho still a litle sleepy, you get up to confront your destiny.<br>
|
||||
Let us hope you are right...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "confront"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
When you were but a young lad, your own grandmother had once told you a tale of the mares of northern lands;<br>
|
||||
should one ever crawl upon you, you could close your eyes and whisper the name of your beloved grandmother,<br>
|
||||
and she'd reach down from the clutches of the great beyond, to <strong>unsummon whatever otherworldly creature had lurked to disturb your sleep.</strong><br>
|
||||
So you close your eyes, and quietly whispered the name of your grandmother...
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>What an eerie encounter.</h2>
|
||||
<h3>You feel uneasy, though it's unlikely this will happen again.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { set player "TFs_mara_hag_visited" 1 }
|
||||
actions { set player "TFs_mara_hag_denied" 1 }
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "confront" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h3>
|
||||
The creature slowly lifts its eyes up from you and inspects your facial features.<br>
|
||||
It slowly starts to hover, relieving the pressure ton your ribcage.<br>
|
||||
With a clicking voice the creature addresses you, and you feel a light cold breeze as its breath touches your face:<br><br>
|
||||
</h3>
|
||||
<br>
|
||||
- Young blood, not too many summers, and fewer a winters, real ones, new to the land, unknown to me or my sisters, know us, know the land, know yourself<br>
|
||||
and bearing gifts cometh the land and its silent unseen inhabitants play the role of an ignorant fool, and meet an untimely end<br>
|
||||
perhaps not you but other of your kin, for barren lands reward the wise and devour those that feast before the crops are harvested, answer question to each of a finger, and we foretell you destinies<br>
|
||||
of where you may head, or perhaps not, as land has a will of its own, beyond mine or thine will.<br>
|
||||
<br>
|
||||
<h3>
|
||||
The creature closes its eyes, blinks a few times, and expects an answer.<br>
|
||||
And that ghastly night you...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
Say what piece of knowledge or wisdom you may have, creature, for I am not afraid of you.<br>
|
||||
<strong>I will answer you questions</strong> to the count of my fingers indeed;<br>
|
||||
I will see if you do come bearing gifts, or if you're as twisted as a crooked tundra tree and wicked bearings you truly have...
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Hovering above you, the hag prepares his first question...</h2>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "question_1"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
When you were but a young lad, your own grandmother had once told you a tale of the mares of northern lands;<br>
|
||||
should one ever crawl upon you, you could close your eyes and whisper the name of your beloved grandmother,<br>
|
||||
and she'd reach down from the clutches of the great beyond, to <strong>unsummon whatever otherworldly creature had lurked to disturb your sleep.</strong><br>
|
||||
So you close your eyes, and quietly whispered the name of your grandmother...
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>What an eerie encounter.</h2>
|
||||
<h3>You feel uneasy, though it's unlikely this will happen again.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { set player "TFs_mara_hag_visited" 1 }
|
||||
actions { set player "TFs_mara_hag_denied" 1 }
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "question_1" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h3>The hag enquire:</h3>
|
||||
<br>
|
||||
- Eyes of an another world are fixed on you, young kin, their time unlike ours, yet so much like the time in your hourglass;<br>
|
||||
tell me young kin, for it to be a year in your time, <strong>how long these spirits of an other world age in their time?</strong>
|
||||
<br>
|
||||
<h3>
|
||||
That is easy.<br>
|
||||
You've heard that the runes of time foretold, that in strange tidings of time that otherworldly men go through, ...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "... <strong>an hour</strong> in their realm equals a full cycle of a year in my time in this strange land."
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q1_answer" == 1) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_2"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "... <strong>a day</strong> in their realm equals a full cycle of a year in my time in this strange land."
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q1_answer" == 2) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_2"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "... <strong>a week</strong> in their realm equals a full cycle of a year in my time in this strange land."
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q1_answer" == 3) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_2"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "... <strong>a month</strong> in their realm equals a full cycle of a year in my time in this strange land."
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q1_answer" == 4) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_2"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
That's <strong>enough</strong>, begone, creature!<br>
|
||||
I will answer your question <strong>no more</strong>!
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag gazes at you with cold disdain, her eyes glinting like steel.</h2>
|
||||
<h3>
|
||||
You ponder how it would react to your defiance—will it unleash its wrath or simply laugh at your audacity?<br>
|
||||
The ultimate tension hangs in the air, thick as fog.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
next state "bedstand"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "question_2" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h3>The hag enquire:</h3>
|
||||
<br>
|
||||
- An empty stomach aches like bitter frost, rumbling tummies of children are a mother's greatest fear, when the hunger strikes,<br>
|
||||
<strong>where will you find refuge to fill this thirst and hunger</strong>, oh being of flesh and bone ever craving?
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
My apple orchards are filled with the red and juiciest kinds, and my grapefruit vines are plenty,<br>
|
||||
nobody in <strong>my house will never suffer hunger</strong>, for even my back yard is bountiful.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q2_answer" == 1) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_3"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
<strong>With hard work</strong> of sowing and harvesting I will gather the fruits of my labour,<br>
|
||||
grain and vegetables of many kinds, these will satisfy the cravings of my children.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q2_answer" == 2) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_3"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
My arrow flies true and my eye is sharp like a crow's beak;<br>
|
||||
<strong>I will hunt</strong> great four-legged beasts of this land, by my campfire I will rejoice together with my hunting company,<br>
|
||||
for the fire is roasting a satisfying meat while I carve the skin to clothing and tooth and nails to necklaces.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q2_answer" == 2) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_3"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
The market halls and torgets of <strong>the city are always filled</strong> with such;<br>
|
||||
the endless supplies spared by able men will surely always have bread for the hungry and mead for the thirsty.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q2_answer" == 3) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_3"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
That's <strong>enough</strong>, begone, creature!<br>
|
||||
I will answer your question <strong>no more</strong>!
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag gazes at you with cold disdain, her eyes glinting like steel.</h2>
|
||||
<h3>
|
||||
You ponder how it would react to your defiance—will it unleash its wrath or simply laugh at your audacity?<br>
|
||||
The ultimate tension hangs in the air, thick as fog.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "question_3" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h3>The hag enquire:</h3>
|
||||
<br>
|
||||
- The taxes of the Karls are heavy, much like the Jarls let whip taste the backs of Thralls;<br>
|
||||
should you not pay your Karl whose city it is and upon whose land your house stands,<br>
|
||||
<strong>what would become of your house?</strong>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
I would become <strong>independent</strong>, and run free of the taxes and codes of the rulers.<br>
|
||||
I would not be bound by the laws of my peers.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q3_answer" == 2) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_4"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
My house would be <strong>in ruins</strong>, and the Karls would <strong>seize my property.</strong><br>
|
||||
Worse, it would be put to ground due to my insolence.<br>
|
||||
All must abide by the code that binds us.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q3_answer" == 1) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_4"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
I could ask my fellow peer for a <strong>loan</strong> to avoid ruin, as not to run out of coin immediately,<br>
|
||||
and offer my house as settlement, if they would not just take my word of honor.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q3_answer" == 1) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_4"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
I would <strong>leverage</strong> my coin just by word and will, and pay from nothing<br>
|
||||
like the cunning coin lender, I could promise more than I'd have in my possessions,<br>
|
||||
for the world does not count my coin."
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q3_answer" == 3) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_4"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
That's <strong>enough</strong>, begone, creature!<br>
|
||||
I will answer your question <strong>no more</strong>!
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag gazes at you with cold disdain, her eyes glinting like steel.</h2>
|
||||
<h3>
|
||||
You ponder how it would react to your defiance—will it unleash its wrath or simply laugh at your audacity?<br>
|
||||
The ultimate tension hangs in the air, thick as fog.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "question_4" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h3>The hag enquire:</h3>
|
||||
<br>
|
||||
- The cryptic little key that opens all the purses and coffers of your house, should you lose it,<br>
|
||||
<strong>how would you find</strong this little magical thing>, this mysterious thing that opens the strangest of locks?
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
I could kick and bash the door in, there is no such lock that could keep me out of my own house,<br>
|
||||
and I could just <strong>force my way in</strong> like a brute of the wild.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions {
|
||||
if (local "q4_answer" == 1) { set local "score" local "score" + 1 }
|
||||
else { set local "score" local "score" - 1 }
|
||||
}
|
||||
|
||||
next state "question_5"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
I would be a being of misery, bathe in ash and dust.<br>
|
||||
I would weep for all my wealth and possessions would be lost and left to drift forevermore to winds of change and chance.<br>
|
||||
But I could <strong>build the foundations of a new house</strong>, and so I could build the name of my family once again.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q4_answer" == 2) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "question_5"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
The lords of the game of life, possess such greater powers than the average being, that surely they could forge a key anew to me.<br>
|
||||
I would <strong>appeal to my makers and my lords</strong>, and have them restore me to my former glory,<br>
|
||||
should I be locked out of my own house and my own possessions.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions {
|
||||
if (local "q4_answer" == 3) { set local "score" local "score" + 1 }
|
||||
else { set local "score" local "score" - 1 }
|
||||
}
|
||||
|
||||
next state "question_5"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
I hid and kept care of a secret scroll of <strong>words of power</strong>, and I would speak aloud these seed words of restoration,<br>
|
||||
this would give me back my purse and my wealth, and so I would return to my house once again.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>one more time you will be challenged.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions {
|
||||
if (local "q4_answer" == 4) { set local "score" local "score" + 1 }
|
||||
else { set local "score" local "score" - 1 }
|
||||
}
|
||||
|
||||
next state "question_5"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
That's <strong>enough</strong>, begone, creature!<br>
|
||||
I will answer your question <strong>no more</strong>!
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag gazes at you with cold disdain, her eyes glinting like steel.</h2>
|
||||
<h3>
|
||||
You ponder how it would react to your defiance—will it unleash its wrath or simply laugh at your audacity?<br>
|
||||
The ultimate tension hangs in the air, thick as fog.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "question_5" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h3>The hag enquire:</h3>
|
||||
<br>
|
||||
- The history of the world, a chain of events leading to this moment,<br>
|
||||
where is this knowledge of things past and present held, and <strong>who decides the way the world can go on?</strong>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
<strong>The gods</strong> in heights hold all the power, and in their great archives are stone tablets of knowledge stored.<br>
|
||||
Only by their wisdom will the world toss and turn, and so will the sun again in the morning.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>all left is to await the hag response...</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions {
|
||||
if (local "q5_answer" == 1) { set local "score" local "score" + 1 }
|
||||
else { set local "score" local "score" - 1 }
|
||||
}
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
The world is in eternal chaos and turmoil, and <strong>everything is left to chance</strong>.<br>
|
||||
It does not matter how we got here, for presence unveils before my eyes without any knowledge of the past.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>all left is to await the hag response...</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q5_answer" == 2) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
I am branch of my own, and <strong>I will create my path</strong>.<br>
|
||||
There is no history, there is no presence, there is just my will and I will have others bend to my will!
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>all left is to await the hag response...</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q5_answer" == 3) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
We are all equal.<br>
|
||||
We each write and store this knowledge, and share this knowledge to each others as peers.<br>
|
||||
Only through such fellowship can the world stay whole, and through our <strong>mutual consensus</strong> may things change.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag weights your answer.</h2>
|
||||
<h3>all left is to await the hag response...</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { if (local "q5_answer" == 4) { set local "score" local "score" + 1 } }
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
That's <strong>enough</strong>, begone, creature!<br>
|
||||
I will answer your question <strong>no more</strong>!
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The hag gazes at you with cold disdain, her eyes glinting like steel.</h2>
|
||||
<h3>
|
||||
You ponder how it would react to your defiance—will it unleash its wrath or simply laugh at your audacity?<br>
|
||||
The ultimate tension hangs in the air, thick as fog.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "bedstand"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "bedstand" {
|
||||
init {
|
||||
set player "TFs_mara_hag_visited" 1
|
||||
|
||||
if (local "score" >= 2) { create item local "bronze_award_feather" 1 }
|
||||
if (local "score" >= 3) { create item local "silver_award_herbs" 1 }
|
||||
if (local "score" >= 4) { create item local "gold_award_hairpin" 1 }
|
||||
}
|
||||
|
||||
text "
|
||||
<h2>The creature cackles.</h2>
|
||||
<h3>
|
||||
It's gazing over you and snaps its fingers, and starts descending backwards in the room.<br>
|
||||
Its cold eyes slowly mix with the darkness as its murky appearance disappear into the shadows.<br>
|
||||
It's quiet, it is dark. You feel surreal and exhausted, as if gone through a trial.<br>
|
||||
So sleep overwhelms you.
|
||||
</h3>
|
||||
<h2>In the morning, by your bedstand is...</h2>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
enabled local "score" < 2
|
||||
|
||||
text "
|
||||
<h2>A slim pile of grey dust.</h2>
|
||||
<h3>
|
||||
You touch it and it evaporates.<br>
|
||||
Nothing remains.
|
||||
</h3>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>What an eerie encounter.</h2>
|
||||
<h3>
|
||||
You feel uneasy, though it's unlikely this will happen again.<br>
|
||||
Or so you hope at least...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled local "score" == 2
|
||||
|
||||
text "
|
||||
<h2>A feather from a raven.</h2>
|
||||
<h3>It is light, clean, and in very good condition, this could make a quill, perhaps?</h3>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>What an eerie encounter.</h2>
|
||||
<h3>
|
||||
You feel uneasy, though it's unlikely this will happen again.<br>
|
||||
Or so you hope at least...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { award item local "bronze_award_feather" 1 }
|
||||
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled local "score" == 3
|
||||
|
||||
text "
|
||||
<h2>A feather from a raven.</h2>
|
||||
<h3>It is light, clean, and in very good condition, this could make a quill, perhaps?</h3>
|
||||
...
|
||||
<h2>
|
||||
A small bundle of herbs,<br>
|
||||
tied together with a grey lock of hair.
|
||||
</h2>
|
||||
<h3>They smell nice, though you can't recall seeing these growing around here.</h3>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>What an eerie encounter.</h2>
|
||||
<h3>
|
||||
You feel uneasy, though it's unlikely this will happen again.<br>
|
||||
Or so you hope at least...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions {
|
||||
award item local "bronze_award_feather" 1
|
||||
award item local "silver_award_herbs" 1
|
||||
}
|
||||
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled local "score" >= 4
|
||||
|
||||
text "
|
||||
<h2>A feather from a raven.</h2>
|
||||
<h3>It is light, clean, and in very good condition, this could make a quill, perhaps?</h3>
|
||||
...
|
||||
<h2>
|
||||
A small bundle of herbs,<br>
|
||||
tied together with a grey lock of hair.
|
||||
</h2>
|
||||
<h3>They smell nice, though you can't recall seeing these growing around here.</h3>
|
||||
...
|
||||
<h2>
|
||||
Your grandmother's copper hairpin,<br>
|
||||
worn but beloved.
|
||||
</h2>
|
||||
<h3>You are filled with memories, but can't help to wonder, how could this get here?</h3>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>What an eerie encounter.</h2>
|
||||
<h3>
|
||||
You feel uneasy, though it's unlikely this will happen again.<br>
|
||||
Or so you hope at least...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions {
|
||||
award item local "bronze_award_feather" 1
|
||||
award item local "silver_award_herbs" 1
|
||||
award item local "gold_award_hairpin" 1
|
||||
}
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
}
|
193
storyline_scripts/thrall_gamble.tf
Normal file
@ -0,0 +1,193 @@
|
||||
# Townforge: Storyline: A thrall's gamble
|
||||
# Testnet
|
||||
|
||||
# Files:
|
||||
# - mods/tfquests/thrallGamble_256.jpeg
|
||||
|
||||
# Attributes:
|
||||
# - Fate
|
||||
|
||||
|
||||
script {
|
||||
name "A thrall's gamble - 0.36-1"
|
||||
description "A snake-eyed thrall is preying on strangers, hoping to win a wager. He is quick to spot you."
|
||||
icon "@GameData/TB/cc/badges/coin_flip.svg"
|
||||
owner 0
|
||||
# deployable
|
||||
|
||||
overrides {
|
||||
1 "<center><img src='mods/tfquests/thrallGamble_256.jpeg'></center>"
|
||||
|
||||
local "min_level" 0
|
||||
local "max_level" 100
|
||||
local "replay_limit" 10
|
||||
local "city_id" 0
|
||||
local "pledge" 100000000
|
||||
local "side_chance" 10
|
||||
local "min_Fate" 5
|
||||
}
|
||||
|
||||
precondition "Minimum Level" level >= local "min_level"
|
||||
precondition "Maximum Level" level <= local "max_level"
|
||||
precondition "Gamble Limit" times played this script < local "replay_limit"
|
||||
precondition "City" city id == local "city_id"
|
||||
|
||||
reserves {
|
||||
player gold local "pledge"
|
||||
owner gold local "pledge"
|
||||
}
|
||||
|
||||
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
${1}<br>
|
||||
<h2>A young thrall is lingering about.</h2>
|
||||
<h3>As soon as he spots you, he yells out:</h3>
|
||||
<br>
|
||||
- Ah! Feeling lucky today, <strong>%P</strong>? Let us a wager <strong>${gold:pledge}</strong> gold.<br>
|
||||
<br>
|
||||
- I will flip a coin, if it is the high Karl, your gold is mine;<br>
|
||||
if it is Jormungand, you'll get to have my gold.<br>
|
||||
<br>
|
||||
- Oh, and it can land on its <strong>side</strong> too, which is <strong>my win</strong>!
|
||||
<h3>He grins.</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
You choose to <strong>play!</strong><br>
|
||||
[ Wager is <strong>${gold:pledge}</strong> TFG ]
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The thrall flips the coin,</h2>
|
||||
<h3>and it flickers sunlight during the jump, landing on the thrall's hand...</h3>
|
||||
<br><br>
|
||||
"
|
||||
actions {
|
||||
set local "coin_flip" random 2
|
||||
set local "side_fall" random 100
|
||||
}
|
||||
|
||||
next state "flip"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
<strong>Not today.</strong><br>
|
||||
The stars don't feel like they'd align for you...
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Fair enough!</h2>
|
||||
<br>
|
||||
- May the stars align in your favor next time.<br>
|
||||
- Until then, may your journey be smooth and your spirits high.
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
state "flip" {
|
||||
text "${1}<br><h1>%P plays the gamble and...</h1><br><br>"
|
||||
|
||||
choice {
|
||||
enabled (local "coin_flip" == 1 AND local "side_fall" > local "side_chance")
|
||||
|
||||
text "
|
||||
<h2>Ah, it's the Jormungand! Excellent...</h2>
|
||||
<h3>
|
||||
The thrall is annoyed,<br>
|
||||
but nods and hands over you the gold.
|
||||
</h3>
|
||||
[ Won <strong>${gold:pledge}</strong> TFG ]
|
||||
<br><br>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Thor blessed you today,</h2>
|
||||
<h3>the win is yours!</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
|
||||
actions { award gold local "pledge" }
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled (local "coin_flip" == 0 AND local "side_fall" > local "side_chance")
|
||||
|
||||
text "
|
||||
<h2>The coin lands on the high Karl's silhouette.</h2>
|
||||
<h3>The thrall grins and grabs your gold.</h3>
|
||||
[ Lost <strong>${gold:pledge}</strong> TFG ]
|
||||
<br><br>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The gods turned their back on you today,</h2>
|
||||
<h3>take the loss!</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
|
||||
actions { pay gold local "pledge" }
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled (local "side_fall" <= local "side_chance" AND attribute "Fate" < local "min_Fate")
|
||||
|
||||
text "
|
||||
<h2>The coin lands sideways after the flip.</h2>
|
||||
<h3>The thrall laughs, and grabs your gold.</h3>
|
||||
[ Lost <strong>${gold:pledge}</strong> TFG ]
|
||||
<br><br>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>The gods turned their back on you today,</h2>
|
||||
<h3>take the loss!</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
|
||||
actions { pay gold local "pledge" }
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled (local "side_fall" <= local "side_chance" AND attribute "Fate" >= local "min_Fate")
|
||||
|
||||
text "
|
||||
<h2>The coin lands sideways after the flip...</h2>
|
||||
<h3>
|
||||
only to finally barely roll to its Jormungand side!<br>
|
||||
The thrall frowns, having already thought to have won the bet.<br>
|
||||
He grunts as he hands over your gold:
|
||||
</h3>
|
||||
<br>
|
||||
- Ah, you truly are born under smiling stars.<br>
|
||||
<br>
|
||||
[ Won <strong>${gold:pledge}</strong> TFG ]
|
||||
<br><br>
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Thor blessed you today,</h2>
|
||||
<h3>the win is yours!</h3>
|
||||
"
|
||||
|
||||
next state ""
|
||||
|
||||
actions { award gold local "pledge" }
|
||||
}
|
||||
}
|
||||
}
|
BIN
tfq_scripts/meadHall/assets/julizMeadwench_1024.jpeg
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
tfq_scripts/meadHall/assets/julizMeadwench_256.jpeg
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
tfq_scripts/meadHall/assets/julizMeadwench_512.jpeg
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
tfq_scripts/meadHall/assets/odrirBlacksmith_1024.jpeg
Normal file
After Width: | Height: | Size: 178 KiB |
BIN
tfq_scripts/meadHall/assets/odrirBlacksmith_256.jpeg
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
tfq_scripts/meadHall/assets/odrirBlacksmith_512.jpeg
Normal file
After Width: | Height: | Size: 91 KiB |
128
tfq_scripts/meadHall/juliz_meadwench.tf
Normal file
@ -0,0 +1,128 @@
|
||||
# TFQuests: Juliz Meadwench
|
||||
# Testnet
|
||||
|
||||
# Files:
|
||||
# - mods/tfquests/julizMeadwench_256.jpeg
|
||||
|
||||
# Items:
|
||||
# - Name: Horn of Mead | not fixed supply | group: TFQuests:Items | description: A horn filled with the finest mead.
|
||||
|
||||
|
||||
script {
|
||||
name "TFQ: Juliz, the meadwench - 0.36-1"
|
||||
description "Juliz, the meadwench"
|
||||
owner 6 #
|
||||
icon "@GameData/TB/cc/badges/jeweled-chalice.svg"
|
||||
# deployable
|
||||
|
||||
overrides {
|
||||
1 "<center><img src='mods/tfquests/julizMeadwench_256.jpeg'></center>"
|
||||
local "i_meadHorn" 100016 #
|
||||
local "meadHorn_cost" 10000
|
||||
local "ownerFees" 100000000
|
||||
}
|
||||
|
||||
precondition "TFQuests" global "tfq_isEnable" == 1
|
||||
|
||||
reserves { owner fees local "ownerFees" }
|
||||
|
||||
procedure "register" {
|
||||
set player "tfq_isDead" 0
|
||||
set player "tfq_wt_st" 0 # Winter Tower
|
||||
}
|
||||
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
${1}
|
||||
<center><h2>Juliz, the Meadwench</h2></center><br>
|
||||
<h3>Meet Juliz, the enchanting red-haired meadwench,<br>
|
||||
serving the finest brews from her balcony at the heart of the great meadhall.</h3>
|
||||
...............................<br>
|
||||
Player score: ${player 'tfq_score'}<br>
|
||||
Dead Champions: ${player 'tfq_deaths'}<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
enabled (player "tfq_isDead" == 1 AND gender == 1)
|
||||
text "
|
||||
Your champion has fallen in battle!<br>
|
||||
<strong>Register</strong> a new Viking to seek glory.
|
||||
"
|
||||
actions{ call "register" }
|
||||
selected text "<h2>Your new Viking sets forth to carve their legend.</h2><br>"
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled (player "tfq_isDead" == 1 AND gender == 0)
|
||||
text "
|
||||
Your champion has met her end!<br>
|
||||
<strong>Register</strong> a new Shieldmaiden to defend your honor.
|
||||
"
|
||||
actions{ call "register" }
|
||||
selected text "<h2>Your new Shieldmaiden embarks on a quest for valor.</h2><br>"
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled player "tfq_isDead" == 0
|
||||
text "
|
||||
Buy a <strong>Horn of Mead</strong><br>
|
||||
[ Cost: <strong>${gold:local 'meadHorn_cost'}</strong> TFG ]
|
||||
"
|
||||
actions { create item local "i_meadHorn" 1 }
|
||||
reserves { player gold local "meadHorn_cost" }
|
||||
selected text "
|
||||
<h2>With a cheerful nod, Juliz turns away,</h2>
|
||||
<h3>her red hair shimmering in the sunlight.</h3>
|
||||
- One moment, brave soul! I’ll fetch the finest mead for your horn!<br>
|
||||
<h3>She calls as she heads to the storeroom.</h3><br>
|
||||
"
|
||||
next state "bar"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "Farewell, kind soul..."
|
||||
selected text "<h2>You take your leave from the bustling balcony.</h2><br>"
|
||||
next state ""
|
||||
}
|
||||
|
||||
# W.I.P: Winter Tower: Ask about drawing
|
||||
}
|
||||
|
||||
|
||||
state "bar" {
|
||||
text "
|
||||
${1}
|
||||
<h2>Juliz returns with a gleaming horn,</h2>
|
||||
<h3>filled to the brim with rich, golden mead.</h3>
|
||||
- Here you go, brave one! Is there anything else I can fetch for you?<br>
|
||||
- Perhaps a hearty meal?<br><br>
|
||||
"
|
||||
|
||||
init {
|
||||
award item local "i_meadHorn" 1
|
||||
pay gold local "meadHorn_cost"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "You settle the payment with a nod, and get up to leave..."
|
||||
selected text "
|
||||
<h2>Juliz offers a cheerful grin.</h2>
|
||||
- May this mead bring you strength and courage!
|
||||
<h3>With that, you step away from the longhouse.</h3><br>
|
||||
"
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
text "Actually, I have one more request."
|
||||
selected text "
|
||||
<h2>She leans in,</h2>
|
||||
<h3>her expression playful and intrigued...</h3><br>
|
||||
"
|
||||
next state "init"
|
||||
}
|
||||
}
|
||||
}
|
95
tfq_scripts/meadHall/odrir_blacksmith.tf
Normal file
@ -0,0 +1,95 @@
|
||||
# TFQuests: Odrir Blacksmith
|
||||
# Testnet
|
||||
|
||||
# Files:
|
||||
# - mods/tfquests/odrirBlacksmith_256.jpeg
|
||||
|
||||
# Items:
|
||||
# - Name: Hunting Spear | not fixed supply | group: TFQuests:Items | description: A finely crafted hunting spear.
|
||||
|
||||
|
||||
script {
|
||||
name "TFQ: Odrir, the blacksmith - 0.36-1"
|
||||
description "Odrir, the blacksmith"
|
||||
owner 6 #
|
||||
icon "@GameData/TB/cc/badges/hammer-drop.svg"
|
||||
# deployable
|
||||
|
||||
overrides {
|
||||
1 "<center><img src='mods/tfquests/odrirBlacksmith_256.jpeg'></center>"
|
||||
local "i_spear" 100018 #
|
||||
local "spear_cost" 10000
|
||||
local "ownerFees" 100000000
|
||||
}
|
||||
|
||||
precondition "TFQuests" global "tfq_isEnable" == 1
|
||||
precondition "Alive" player "tfq_isDead" == 0
|
||||
|
||||
reserves { owner fees local "ownerFees" }
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
${1}
|
||||
<center><h2>Odrir, the Blacksmith</h2></center><br>
|
||||
<h3>Meet Odrir, the skilled old blacksmith,<br>
|
||||
his forge glowing brightly in the heart of the village.</h3><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
Buy a <strong>Hunting Spear</strong><br>
|
||||
[ Cost: <strong>${gold:local 'spear_cost'}</strong> TFG ]
|
||||
"
|
||||
actions { create item local "i_spear" 1 }
|
||||
reserves { player gold local "spear_cost" }
|
||||
selected text "
|
||||
<h2>With a hearty laugh, Odrir wipes his brow,</h2>
|
||||
<h3>his muscles flexing as he prepares the finest spear.</h3>
|
||||
- One moment, brave warrior! I’ll forge a hunting spear worthy of your skill!<br>
|
||||
<h3>He calls as he returns to the anvil.</h3><br>
|
||||
"
|
||||
next state "blacksmith"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "Farewell, wise Odrir..."
|
||||
selected text "<h2>You take your leave from the bustling forge.</h2><br>"
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state "blacksmith" {
|
||||
text "
|
||||
${1}
|
||||
<h2>Odrir returns with a gleaming hunting spear,</h2>
|
||||
<h3>its tip glinting in the forge's firelight.</h3>
|
||||
- Here you go, brave one! Is there anything else I can forge for you?<br>
|
||||
- Perhaps a sturdy shield?<br><br>
|
||||
"
|
||||
|
||||
init {
|
||||
award item local "i_spear" 1
|
||||
pay gold local "spear_cost"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "You settle the payment with a nod, and prepare to leave..."
|
||||
selected text "
|
||||
<h2>Odrir offers a hearty smile.</h2>
|
||||
- May this spear bring you glory in battle!
|
||||
<h3>With that, you step away from the blacksmith.</h3><br>
|
||||
"
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
text "Actually, I have one more request."
|
||||
selected text "
|
||||
<h2>He leans in,</h2>
|
||||
<h3>his eyes gleaming with interest...</h3><br>
|
||||
"
|
||||
next state "init"
|
||||
}
|
||||
}
|
||||
}
|
BIN
tfq_scripts/quests/winter_tower/assets/ChildrensDrawing.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
tfq_scripts/quests/winter_tower/assets/ChildrensDrawing.png
Normal file
After Width: | Height: | Size: 665 KiB |
30
tfq_scripts/quests/winter_tower/scripts/01_gossip.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Override:
|
||||
1 "South West"
|
||||
2 "Another City Name"
|
||||
3 "Hunting Spot Vista"
|
||||
|
||||
## Set as Winer
|
||||
"minSeason" 1
|
||||
"maxSeason" 999
|
||||
|
||||
## Set for scarse moose
|
||||
"mooseLimit" 1000
|
||||
|
||||
# Atributtes:
|
||||
- Wits
|
||||
|
||||
# Items
|
||||
- Beer
|
||||
- Hunting Spear
|
||||
|
||||
# Runestone
|
||||
<h2>The hour is late, and the mead hall is nearly deserted.</h2>
|
||||
<h3>
|
||||
Perhaps you should grab a horn of mead and settle into your favorite spot?
|
||||
From there, you can watch and hear all the whispered tales of the night.
|
||||
</h3>
|
||||
|
||||
# Note to Aquire the mead with nyara the meadwench
|
||||
|
||||
# Next Script
|
||||
- TFQ: Winter Tower: Hunting Spot - 0.36-1
|
221
tfq_scripts/quests/winter_tower/scripts/01_gossip.tf
Normal file
@ -0,0 +1,221 @@
|
||||
# TFQuests: Winter Tower : Gossip - 0.36-1
|
||||
# Testnet
|
||||
|
||||
# Attributes:
|
||||
# - Wits
|
||||
|
||||
# Items:
|
||||
# - Mug of Beer
|
||||
# - Huntin Spear
|
||||
|
||||
# TODO
|
||||
# - Set i_beer
|
||||
# - Set i_spear
|
||||
|
||||
|
||||
|
||||
script {
|
||||
name "TFQ: Winter Tower: Gossip - 0.36-1"
|
||||
description "Where are the moose?"
|
||||
owner 18
|
||||
# icon
|
||||
# deployable
|
||||
|
||||
overrides {
|
||||
1 "South West"
|
||||
2 "Another City Name"
|
||||
3 "Hunting Spot Vista"
|
||||
4 "Blacksmith Name"
|
||||
5 "Blacksmith Vista"
|
||||
|
||||
local "min_level" 1
|
||||
local "i_beer" 1
|
||||
local "i_beer_req" 1
|
||||
local "i_spear" 1
|
||||
local "diff_range" 10
|
||||
local "diff_roll" 6
|
||||
local "diff_min" 1
|
||||
local "moose_limit" 10000
|
||||
local "min_season" 1
|
||||
local "max_season" 999
|
||||
}
|
||||
|
||||
precondition "TFQuests" global "tfq_isEnable" == 1
|
||||
precondition "Alive" player "tfq_isDead" == 0
|
||||
precondition "Level" level >= local "min_level"
|
||||
precondition "Not Started" player "tfq_wt_st" == 0
|
||||
precondition "Moose" moose < local "moose_limit"
|
||||
precondition "Winter" (time of year > local "min_season" AND time of year < local "max_season")
|
||||
|
||||
reserves { player item local "i_beer" local "i_beer_req" }
|
||||
|
||||
procedures "score" { if (times played this script == 0) { set player "tfq_score" player "tfq_score" + 1 } }
|
||||
|
||||
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
<h2>
|
||||
In the mead hall, a forlorn hunter stares into his cup,<br>
|
||||
while another enters with a tray of frothy drinks.<br>
|
||||
</h2>
|
||||
<br>
|
||||
<h3>Man:</h3>
|
||||
- Tell me, brother, how fare thee in these dark times?<br>
|
||||
- Have you spotted any moose to hunt?<br>
|
||||
<br>
|
||||
<h3>Sad hunter:</h3>
|
||||
- It’s been hard, brother, very hard...<br>
|
||||
- Three generations of hunters in my blood, yet now, not a moose to be found.<br>
|
||||
<br>
|
||||
<h3>Man:</h3>
|
||||
- Worry not! I’ve heard tales that may lighten your heart; that's why I summoned you.<br>
|
||||
- A merchant friend of mine returned from ${2}, claiming he glimpsed moose tracks towards the ${1} mountain.<br>
|
||||
- There might still be some there!<br>
|
||||
<br>
|
||||
<h3>Sad hunter:</h3>
|
||||
- By that cursed tower? I’d rather starve than venture there...<br>
|
||||
- And don’t think I’ve forgotten how you sent my kin to that accursed place years ago.<br>
|
||||
<br>
|
||||
<h3>Man:</h3>
|
||||
- Oh, brother, spare me such thoughts...<br>
|
||||
- I had my doubts when my wife insisted on sending him there; the lad always had a knack for herbs, and she wished him to learn.<br>
|
||||
- Now, he’s the only reason we’ve got food on our tables.<br>
|
||||
<br>
|
||||
<h3>Sad Hunter:</h3>
|
||||
- ...<br>
|
||||
- Is that job still open?<br>
|
||||
<br>
|
||||
<h3>Man:</h3>
|
||||
- It is indeed! Winter is waning; we must ready ourselves for the sowing season.<br>
|
||||
- Let us set forth; tomorrow we rise with the sun.<br>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
init {
|
||||
pay item local "i_beer" 1
|
||||
set player "tfq_wt_st" 1
|
||||
call "score"
|
||||
if (random local "diff_range" > max(local "diff_roll" - attribute "Wits", local "diff_min")) {
|
||||
set local "lucky" 1
|
||||
call "score"
|
||||
}
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled local "lucky" == 1
|
||||
|
||||
text "
|
||||
<h2>They rise and exit the hall,</h2>
|
||||
<h3>but you overhear a whisper...</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { set player "tfq_score" player "tfq_score" + 1 }
|
||||
|
||||
selected text "
|
||||
<h2>Once they’ve gone, Nyara, the meadwench, leans closer...</h2>
|
||||
<br>
|
||||
<h3>Nyara whispers:</h3>
|
||||
- ... that old hermit by the tower is a bit mad, but he possesses rare <strong>treasures</strong> and strange <strong>magics</strong>.<br>
|
||||
- Anyway... he’s rather charming ^_^<br>
|
||||
<br>
|
||||
<h3>
|
||||
The night grows late; she turns to you, the last patron:<br>
|
||||
<br>
|
||||
Nyara:
|
||||
</h3>
|
||||
- Come, %P, you may find shelter in our longhouse if you wish...<br>
|
||||
- No need to brave the night’s chill alone at this hour.<br>
|
||||
<br>
|
||||
<h3>
|
||||
She gestures for you to follow as the meadhall’s fires dim.<br>
|
||||
Time to find some rest; tomorrow you shall chart your course.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "longhouse"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled local "lucky" == 0
|
||||
|
||||
text "<h2>They rise and depart.</h2><br><br>"
|
||||
|
||||
selected text "
|
||||
<h3>
|
||||
As the night deepens, Nyara, the meadwench, turns to you, the last patron:<br>
|
||||
<br>
|
||||
Nyara:
|
||||
</h3>
|
||||
- Come, %P, you may find shelter in our longhouse if you wish...<br>
|
||||
- No need to brave the night’s chill alone at this hour.<br>
|
||||
<br>
|
||||
<h3>
|
||||
She gestures for you to follow as the meadhall’s fires dim.<br>
|
||||
Time to find some rest; tomorrow you shall chart your course.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "longhouse"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
state "longhouse" {
|
||||
text "
|
||||
<h2>You awaken with a fierce hunger.</h2>
|
||||
<h3>
|
||||
Moose meat has grown rare since the last season’s hunt.<br>
|
||||
Those two men at the meadhall spoke of a pack roaming up the ${3} mountain.<br>
|
||||
It’s a long trek, but there’s no other way to fill your belly and your coin pouch.<br>
|
||||
If fortune favors you, you might sell the leather and meat at the market for a fair price.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" >= 1
|
||||
|
||||
text "You will <strong>pursue the moose</strong>, up the ${3} mountain."
|
||||
|
||||
actions { call "score" }
|
||||
|
||||
selected text "
|
||||
<h2>You rise and take hold of your ${item:nItem}.</h2>
|
||||
<h3>
|
||||
Time to set forth from the village toward the ${3} mountain and the hunting.<br>
|
||||
Just another day at %C; what could possibly go awry?
|
||||
</h3>
|
||||
<br>
|
||||
[ Hunting Spot Vista: ${3} ]<br>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" == 0
|
||||
|
||||
text "You will <strong>pursue the moose</strong>, up the ${3} mountain."
|
||||
|
||||
selected text "
|
||||
<h2>You rise, prepared to depart.</h2>
|
||||
<h3>
|
||||
But you cannot find your ${item:nItem}, and you cannot hunt without it.<br>
|
||||
Perhaps there’s a simple one to be had at the <strong>${4}</strong>?
|
||||
</h3>
|
||||
<br>
|
||||
[ ${4} Vista: ${5} ]<br>
|
||||
[ Hunting Spot Vista: ${3} ]<br>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
}
|
379
tfq_scripts/quests/winter_tower/scripts/02_hunting.tf
Normal file
@ -0,0 +1,379 @@
|
||||
# TFQuests: Winter Tower: Hunting Spot - 0.36-1
|
||||
# Testnet
|
||||
|
||||
# Items:
|
||||
# - Huntin Spear
|
||||
|
||||
# Collectable:
|
||||
# - Moose Trophy ??? Generate on demand ???
|
||||
|
||||
# Attributes:
|
||||
# - Wits ???
|
||||
|
||||
|
||||
|
||||
script {
|
||||
name "TFQ: Winter Tower: Hunting Spot - 0.36-1"
|
||||
description ""
|
||||
owner 18
|
||||
# icon
|
||||
# deployable
|
||||
|
||||
override {
|
||||
1 "Winter Tower Vista"
|
||||
2 "TFQuests Mead Hall"
|
||||
3 "TFQuests Mead Hall Vista"
|
||||
4 "TFQ: Champion Register - 0.36-1"
|
||||
|
||||
local "i_spear" 1
|
||||
local "c_moose" 1
|
||||
local "min_season" 1
|
||||
local "max_season" 999
|
||||
local "moose_limit" 10000
|
||||
local "diff_range" 10
|
||||
local "diff_roll" 8
|
||||
local "diff_min" 1
|
||||
local "death_chance" 2
|
||||
local "attr_max_bonus" 3
|
||||
}
|
||||
|
||||
precondition "TFQuests" global "tfq_isEnable" == 1
|
||||
precondition "Alive" player "tfq_isDead" == 0
|
||||
precondition "Level" level >= local "min_level"
|
||||
precondition "Winter Tower State" player "tfq_wt_st" == 1
|
||||
precondition "Moose" moose < local "moose_limit"
|
||||
precondition "Winter" (time of year > local "min_season" AND time of year < local "max_season")
|
||||
|
||||
reserves { owner item local "c_moose" 1 }
|
||||
|
||||
procedures "score" { if (times played this script == 0) { set player "tfq_score" player "tfq_score" + 1 } }
|
||||
|
||||
procedure "die" {
|
||||
set player "tfq_isDead" 1
|
||||
set player "tfq_deaths" player "tfq_deaths" + 1
|
||||
}
|
||||
|
||||
procedure "hunt" {
|
||||
if (random local "diff_range" > max(local "diff_roll" - min(attribute "Wits", local "attr_max_bonus") - local "bonus", local "diff_min")) { set local "hunt_test" 1 }
|
||||
if (random local "diff_range" > local "death_chance") { set local "died" 1 }
|
||||
}
|
||||
|
||||
|
||||
|
||||
state "init" {
|
||||
text "
|
||||
<h2>You tread carefully through the biting cold, the frost crunching beneath your boots.</h2>
|
||||
<h3>
|
||||
The path ahead is steep, flanked by towering pines burdened with snow.<br>
|
||||
Tales of moose grazing in these woods whisper through your mind. Will fortune smile upon you today?<br>
|
||||
<br>
|
||||
As you press forward, a dark shadow shifts in the distant white snow. Could it be a moose?
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
text "
|
||||
A moose?<br>
|
||||
You go <strong>investigate the shadow</strong>.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>You cautiously approach the shadow, heart racing.</h2>
|
||||
<h3>
|
||||
As you draw closer, you spot a massive moose standing under a tree.<br>
|
||||
It raises its head, sniffing the air, seemingly unaware of your presence.<br>
|
||||
This is your chance to strike!
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "sneak"
|
||||
}
|
||||
|
||||
choice {
|
||||
text "
|
||||
Just a snow mirage.<br>
|
||||
You <strong>continue your search</strong>.
|
||||
"
|
||||
|
||||
selected text "
|
||||
<h2>Hunger gnaws at your belly, perhaps it was merely a trick of the light...</h2>
|
||||
<h3>
|
||||
Driven by the promise of meat, you venture deeper, and soon the trees yield to an open glade.<br>
|
||||
Fresh tracks crisscross the snow!<br>
|
||||
This could lead you to your prize.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "tracks"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
state "tracks" {
|
||||
text "
|
||||
<h2>You arrive at the hunting grounds, heart racing with anticipation.</h2>
|
||||
<h3>
|
||||
The sun hangs low in the sky, casting a golden light on the snow.<br>
|
||||
You scan the area for signs of life. Then, you see it—a massive moose grazing in the distance!<br>
|
||||
You must act quickly before it notices you.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" >= 1
|
||||
|
||||
text "You <strong>launch your attack</strong> with the spear."
|
||||
|
||||
actions {
|
||||
set local "bonus" 3
|
||||
call "hunt"
|
||||
}
|
||||
|
||||
selected text "
|
||||
<h2>With a steady hand, you ready your spear.</h2>
|
||||
<h3>
|
||||
You focus your mind, taking a deep breath before launching your spear toward the moose.<br>
|
||||
Will your aim be true?
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "hunted"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" == 0
|
||||
|
||||
text "
|
||||
You left your <strong>${item:i_spear}.</strong><br>
|
||||
But a true Viking knows a knife can suffice.
|
||||
"
|
||||
|
||||
actions { call "hunt" }
|
||||
|
||||
selected text "
|
||||
<h2>With determination, you ready your knife.</h2>
|
||||
<h3>
|
||||
You focus your mind, taking a deep breath before approaching the moose stealthily.<br>
|
||||
Will your knife be enough to secure a meal?
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "hunted"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" == 0
|
||||
|
||||
text "You will <strong>retreat</strong> to find a weapon."
|
||||
|
||||
selected text "
|
||||
<h2>You decide it's best not to attempt a hunt without proper gear.</h2>
|
||||
<h3>
|
||||
You backtrack to the village, determined to find a spear before your next attempt.<br>
|
||||
The moose will still be there; patience is a hunter's virtue.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
state "sneak" {
|
||||
text "
|
||||
<h2>You stealthily approach the moose, anticipation tightening your grip.</h2>
|
||||
<h3>
|
||||
The sun sinks lower, casting elongated shadows across the snow.<br>
|
||||
The moose is relaxed, blissfully unaware of your presence.<br>
|
||||
You must act swiftly before it catches your scent.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
init { set local "bonus" 2}
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" >= 1
|
||||
|
||||
text "You will <strong>launch your attack</strong> with the spear."
|
||||
|
||||
actions {
|
||||
set local "bonus" 3
|
||||
call "hunt"
|
||||
}
|
||||
|
||||
selected text "
|
||||
<h2>With a steady hand, you prepare your spear.</h2>
|
||||
<h3>
|
||||
Taking a deep breath, you aim for the unsuspecting moose.<br>
|
||||
Will fortune favor your aim?
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "hunted"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" == 0
|
||||
|
||||
text "
|
||||
You left your <strong>${item:i_spear}.</strong><br>
|
||||
A true Viking knows how to adapt, a knife will have to do.
|
||||
"
|
||||
|
||||
actions { call "hunt" }
|
||||
|
||||
selected text "
|
||||
<h2>With resolve, you ready your knife.</h2>
|
||||
<h3>
|
||||
Taking a deep breath, you advance on the moose silently.<br>
|
||||
Will your blade prove effective?
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state "hunted"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled player item local "i_spear" == 0
|
||||
|
||||
text "You will <strong>retreat</strong> to find a weapon."
|
||||
|
||||
selected text "
|
||||
<h2>Realizing the folly, you decide against a hunt without proper gear.</h2>
|
||||
<h3>
|
||||
You turn back to the village, intent on securing a spear.<br>
|
||||
The moose will remain; a patient hunter is a successful one.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
state "hunted" {
|
||||
text "
|
||||
<h2>You launch your attack!</h2>
|
||||
<h3>
|
||||
With a surge of adrenaline, targeting the moose with fierce determination.<br>
|
||||
The world slows as you watch your weapon fly or your body rush forward.<br>
|
||||
Will it succeed...
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
choice {
|
||||
enabled local "hunt_test" == 1
|
||||
|
||||
text "
|
||||
<h2>Your aim is true!</h2>
|
||||
<h3>
|
||||
The strike finds its mark. The moose stumbles, then collapses, bringing you a rush of victory!<br>
|
||||
You’ve secured your meal, a true testament to your skills as a hunter.
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions {
|
||||
call "score"
|
||||
award "c_moose" 1
|
||||
set player "tfq_wt_st" 2
|
||||
}
|
||||
|
||||
selected text "
|
||||
<h2>As you extract the meat from the moose, a shadow looms over you.</h2>
|
||||
<h3>
|
||||
Following the shadow, you spot a massive tower,<br>
|
||||
cloaked in snow, resembling ice forged by the gods, rising high upon the mountain.<br>
|
||||
It seems to stretch towards the very heavens.<br>
|
||||
<br>
|
||||
The tower appears abandoned, buried beneath layers of frost,<br>
|
||||
perhaps the lair of an old hermit who has long since perished?<br>
|
||||
There could be treasures within its cold stone walls if that’s the case.
|
||||
</h3>
|
||||
<br>
|
||||
[ Winter Tower Vista: ${1} ]<br>
|
||||
<br><br>
|
||||
"
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled (local "hunt_test" != 1 AND local "died" != 1)
|
||||
|
||||
text "
|
||||
<h2>Your aim falters!</h2>
|
||||
<h3>
|
||||
The moose senses your presence too late. It bolts into the thicket, crashing through the underbrush.<br>
|
||||
In a panic, you stumble, slipping on the icy ground. You hear a snap, and pain shoots through your leg!<br>
|
||||
The hunt has turned against you!
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { set player "tfq_wt_st" 2 }
|
||||
|
||||
text "
|
||||
<h2>The moose strikes with fierce speed.</h2>
|
||||
<h3>
|
||||
You stumble, falling to the ground, injured but still alive.<br>
|
||||
You know you need a safe haven to tend to your wounds, or you won’t survive long.<br>
|
||||
A massive shadow looms above you; looking up, you see an enormous tower, the Winter Tower.<br>
|
||||
With no other choice, you must make your way there.
|
||||
</h3>
|
||||
<br>
|
||||
[ Winter Tower Vista: ${1} ]<br>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
|
||||
choice {
|
||||
enabled (local "hunt_test" != 1 AND local "died" == 1)
|
||||
|
||||
text "
|
||||
<h2>Your aim falters!</h2>
|
||||
<h3>
|
||||
The moose senses your presence too late. It bolts into the thicket, crashing through the underbrush.<br>
|
||||
In a panic, you stumble, slipping on the icy ground. You hear a snap, and pain shoots through your leg!<br>
|
||||
The hunt has turned against you!
|
||||
</h3>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
actions { call "die" }
|
||||
|
||||
selected text "
|
||||
<h2>Your bravery costs you dearly!</h2>
|
||||
<h3>
|
||||
The moose charges, and you fail to evade in time.<br>
|
||||
It strikes you with its massive antlers, sending you sprawling.<br>
|
||||
Pain surges through you as your world fades
|
||||
This warrior journey ends here.
|
||||
</h3>
|
||||
<br>
|
||||
Go to <strong>${2}</strong> and search for the <strong>${4}</strong> runestone.<br>
|
||||
There, you can register a new warrior to represent your house, and try again.<br>
|
||||
<br>
|
||||
[ TFQuests Mead Hall Vista: ${3} ]<br>
|
||||
<br><br>
|
||||
"
|
||||
|
||||
next state ""
|
||||
}
|
||||
}
|
||||
}
|
40
tfq_scripts/tfq_collectables.txt
Normal file
@ -0,0 +1,40 @@
|
||||
TFQuests: Collectables - 0.36-1
|
||||
|
||||
|
||||
|
||||
Name: Morning Sun - Collectable
|
||||
Group: TFQuests - The Path of the Adventurer
|
||||
Primary description (immutable):
|
||||
You walked the path of the Morning Sun.
|
||||
|
||||
Name: Evening Light - Collectable
|
||||
Group: TFQuests - The Path of the Adventurer
|
||||
Primary description (immutable):
|
||||
You walked the path of the Evening Light.
|
||||
|
||||
Name: Moonless Night - Collectable
|
||||
Group: TFQuests - The Path of the Adventurer
|
||||
Primary description (immutable):
|
||||
You walked the path of the Moonless Night.
|
||||
|
||||
Name: Aurora Spirit - Collectable
|
||||
Group: TFQuests - The Path of the Adventurer
|
||||
Primary description (immutable):
|
||||
You walked the path of the Aurora Spirit.
|
||||
|
||||
Name: Lateness - Collectable
|
||||
Group: TFQuests - The Path of the Adventurer
|
||||
Primary description (immutable):
|
||||
You were lucky, but late.
|
||||
|
||||
Name: Memento Mori - Collectable
|
||||
Group: TFQuests - The Path of the Adventurer
|
||||
Primary description (immutable):
|
||||
Latin for 'remember that you [have to] die'
|
||||
|
||||
|
||||
|
||||
Name: Moose Trophy - Collectable
|
||||
Group: TFQuests - Hunter Trophy
|
||||
Primary description (immutable):
|
||||
Prove of a hunt.
|
13
tfq_scripts/tfq_items.txt
Normal file
@ -0,0 +1,13 @@
|
||||
TFQuests: Items - 0.36-1
|
||||
|
||||
|
||||
|
||||
Name: Mug of Beer
|
||||
Group: TFQuests - General Purpose Items
|
||||
Primary description (immutable):
|
||||
A mug of beer.
|
||||
|
||||
Name: Hunting Spear
|
||||
Group: TFQuests - General Purpose Items
|
||||
Primary description (immutable):
|
||||
A simple but reliable Hunting Spear.
|
33
tfq_scripts/tfq_variables.txt
Normal file
@ -0,0 +1,33 @@
|
||||
TFQuests: Variables - 0.36-1
|
||||
|
||||
|
||||
|
||||
### Global ###
|
||||
|
||||
global tfq_isEnable # != 1 Disable All Quests
|
||||
global tfq_cMorning # Morning Sun Collectable Item
|
||||
global tfq_cEvening # Light of Evening Collectable Item
|
||||
global tfq_cNight # Moonless Night Collectable Item
|
||||
global tfq_cAurora # Aurora Spirit Collectable Item
|
||||
global tfq_cMemento # Dead Man Walking Collectable Item
|
||||
global tfq_cUnlucky # Unlucky Collectable Item
|
||||
|
||||
|
||||
|
||||
### Player ###
|
||||
|
||||
player tfq_<quest prefix>_timeout # Timeout between replays
|
||||
player tfq_<quest prefix>_status # Quest status
|
||||
|
||||
player tfq_deaths # Player death counter
|
||||
player tfq_isDead # != 0 Player is Dead
|
||||
player tfq_score # Score counter
|
||||
|
||||
|
||||
# Winter Tower (tfq_wt_)
|
||||
|
||||
player tfq_wt_st # Store State of Winter Tower
|
||||
|
||||
# Craftwork (tfq_craft_)
|
||||
|
||||
player tfq_craft_requested # Store requested item Hired for building
|