PhoenixSpeak

Intro

Legend goes that mythical Phoenixes can remember everything they ever knew, even through their fiery cycle of death and rebirth. Some say that the eldest can remember events from the creation of the world itself. When you shape your dreams into realities, it is possible to tap into the Memory of Fire, and make your very own Dreams remember what comes to pass, even through the vanishing and rebirth of the Dream itself! Let's learn then, the mystic ways of the Phoenix...

Overview

PhoenixSpeak is a way to store information about the players that play your games, activities, etc. in your Dream! You could use PS to store stats for an RPG, high scores for an action game, or anything else you can imagine! If you use PhoenixSpeak, when a player leaves your Dream and comes back, their stats will still be there. If your Dream shuts down, and you re-upload it a day later, or even up to a month - all the stats will still be there! It also lets you store things about the Dream itself, that don't have to do with any specific player. Group Package owners and Silver Sponsors have even more benefits!

The system is based on a few simple concepts. One is that your Dreams can memorize things. The stuff your Dream memorizes is referred to as info. Each piece of info stores a number, string, or a position on your map, just like how DragonSpeak works. You can give each info any name you want, like hitpoints or level or score.

Secondly, your Dreams can also remember a piece of info, and use it. You could have the Dream remember it 5 seconds later or 5 weeks later, whenever it's needed! Finally, because you have a limited amount of space for info, you can forget (delete) some info to free up room for more.

PhoenixSpeak consists of a set of special new DragonSpeak commands that memorize, remember, and forget PhoenixSpeak info, plus some advanced typed-in Dream owner commands for viewing and managing all your info. Dream owners can also assign access to other players to use these typed commands, if they wish.

The Limits

A piece of info can be about a particular player (like hit points or experience levels probably would be), and then each person that plays your game could have their own info assigned to their name.

Info can also be about the Dream itself, then that would be just one piece of info with that name.

You can use PS to store coordinates as well, but each entry will only store one coordinate. It takes two entries to first store the X coordinate, and then the Y.

Tutorial 1: Recording progress of a game

Let's say you want to make a game where everyone can explore a dungeon, and fight monsters. You want their progress to be recorded, so if they come back to play again another time, they'll still have all the benefits of having built up their character the last time! Let's say that a ferret named Joey has just come to your Dream. How could we get him started? Let's say you make your entry text tell him to type roll new character to start playing Super Quest Adventureland! We will want to use one of the three memorize DS lines to store some starting stats for him.

Those are:

(5:600) memorize that the PhoenixSpeak info {...} about the triggering furre will now be #.
(5:601) memorize that the PhoenixSpeak info {...} about the furre named {...} will now be #.
(5:602) memorize that the PhoenixSpeak info {...} about this dream will now be #.

That first one is the one we want. Joey will be the triggering furre when he types in that command, so we'll just need to fill in a name for each stat, and what number it should be. Here's how we could do that, including rolling some dice to give him a random starting hitpoint total!

(0:31) When a furre says {roll new character},
            (5:312) set variable %hitpoints to the total of rolling 2 dice with 6 sides plus 5.
            (5:600) memorize that the PhoenixSpeak info {level} about the triggering furre will now be 1.
            (5:600) memorize that the PhoenixSpeak info {experience points} about the triggering furre will now be 0.
            (5:600) memorize that the PhoenixSpeak info {maximum_hp} about the triggering furre will now be %hitpoints.
            (5:600) memorize that the PhoenixSpeak info {current_hp} about the triggering furre will now be %hitpoints.
            (5:200) emit message {Congratulations! You are now a level 1 Warrior with %hitpoints hit points!} to whoever set off the trigger.

It's as simple as that! You could generate the stats for your favorite RPG, be it Dungeons & Dragons, White Wolf, Furre, GURPS, or your own system you've made up just for your Dream. Every new player that comes in can type roll new character and they'll be stored in your Dream's permanent records, able to come back and play your game some more whenever they like.

Tutorial 2: Using memorized info for leveling up/hitpoints

When something happens in your Dream that has to do with the player's info, you will want your DragonSpeak to remember the info and use it.

Let's say Joey the ferret (or we should call him now, Joey the Warrior ferret) has just found the precious Scroll of Wisdom in your Dream. You've put this treasure deep in the dungeon, in a spot that's difficult and dangerous to get to, because reading it immediately makes you go up a level and gain 10 hit points as well!

Let's say you've patched item 1305 to be your scroll. Now you need to remember what Joey's stats are, so that you can add more to them. (You'd also want to remember Joey's hitpoints if he got wounded by a monster, but then you'd be subtracting, not adding!) The remember DS lines look like this:

(5:610) remember the PhoenixSpeak info {...} about the triggering furre, and put it in variable #.
(5:611) remember the PhoenixSpeak info {...} about the furre named {...}, and put it in variable #.
(5:612) remember the PhoenixSpeak info {...} about this dream, and put it in variable #.
(5:603) memorize that the PhoenixSpeak info {...} about the triggering furre will now be {...}.
(5:604) memorize that the PhoenixSpeak info {...} about the furre named {...} will now be {...}.
(5:605) memorize that the PhoenixSpeak info {...} about this dream will now be {...}.
(5:613) remember the PhoenixSpeak info {...} about the triggering furre, and put it in message $.
(5:614) remember the PhoenixSpeak info {...} about the furre named {...}, and put it in message $.
(5:615) remember the PhoenixSpeak info {...} about this dream, and put it in message $.
(5:880) forget all PhoenixSpeak info about furres that haven't been used in # days # hours # minutes # seconds.

Again, the first one is the one we want right now to further Joey's intrepid quest. (We use variables in this tutorial, which you can read more about on the Intro to Variables page if you're curious!) To make the scroll work, we could do something like this:

(0:19) When somebody uses item type 1305,
            (5:610) remember the PhoenixSpeak info {level} about the triggering furre, and put it in variable %level.
            (5:302) take variable %level and add 1 to it.
            (5:600) memorize that the info {level} about the triggering furre will now be %level.
            (5:610) remember the PhoenixSpeak info {maximum_hp} about the triggering furre, and put it in variable %hitpoints.
            (5:302) take variable %hitpoints and add 10 to it.
            (5:600) memorize that the info {maximum_hp} about the triggering furre will now be %hitpoints.
            (5:600) memorize that the info {current_hp} about the triggering furre will now be %hitpoints.
            (5:200) emit message {The scroll fills you with mystic knowledge, and you gain a level!  Your wounds magically heal!} to whoever set off the trigger.
            (5:200) emit message {You are now level %level with %hitpoints hit points!} to whoever set off the trigger.
            (5:76) place item type 0 in the triggering furre's paws.
            (5:200) emit message {The scroll vanishes in a puff of magic smoke!} to whoever set off the trigger.

Tutorial 3: Using PS to verify a player's level

We can check PhoenixSpeak info when deciding what should happen next, with DS lines like these:

(1:602) and the PhoenixSpeak info {...} about the triggering furre is greater than #,
(1:603) and the PhoenixSpeak info {...} about the triggering furre is less than #,

Let's say Joey (and everyone else, for that matter) isn't allowed to cross the Bridge of Ultimate Doom until they've built their character up to level 5. The monsters on the other side are way too tough for a low level character anyway, so it's really for his own good! So let's say you put a suit of armor by the side of the bridge to represent the Ancient Guardian, and when a furre tries to move onto the bridge, you could do something like this:

(0:7) When somebody moves into position (37,46),
   (1:603) and the PhoenixSpeak info {level} about the triggering furre is less than 5,
            (5:200) emit message {The suit of armor comes to life, and raises its sword to bar your way.} to whoever set off the trigger.
            (5:200) emit message {In an echoing voice, it says "You are not yet mighty enough to face the perils that lie beyond."} to whoever set off the trigger.
            (5:18) move the triggering furre back where they came from.

...and of course, when Joey has leveled up enough, you'll need this:

(0:7) When somebody moves into position (37,46),
   (1:602) and the PhoenixSpeak info {level} about the triggering furre is greater than 4,
            (5:200) emit message {The suit of armor comes to life, and says, "Now you are truly ready!"} to whoever set off the trigger.
            (5:200) emit message {"Beware the frumious bandersnatch!" it warns, then goes motionless again.} to whoever set off the trigger.
            (5:8) play sound 64 to the triggering furre.

Here are all of the additional condition DS lines you can use for doing tests like these in your Dream.

(1:600) and the PhoenixSpeak info {...} about the triggering furre is equal to #,
(1:601) and the PhoenixSpeak info {...} about the triggering furre is not equal to #,
(1:602) and the PhoenixSpeak info {...} about the triggering furre is greater than #,
(1:603) and the PhoenixSpeak info {...} about the triggering furre is less than #,
(1:610) and the PhoenixSpeak info {...} about the furre named {...} is equal to #,
(1:611) and the PhoenixSpeak info {...} about the furre named {...} is not equal to #,
(1:612) and the PhoenixSpeak info {...} about the furre named {...} is greater than #,
(1:613) and the PhoenixSpeak info {...} about the furre named {...} is less than #,
(1:620) and the PhoenixSpeak info {...} about this dream is equal to #,
(1:621) and the PhoenixSpeak info {...} about this dream is not equal to #,
(1:622) and the PhoenixSpeak info {...} about this dream is greater than #,
(1:623) and the PhoenixSpeak info {...} about this dream is less than #,

Tutorial 4: Using PS to remember the season in a Dream

All the examples so far have been about a player. Here's one idea how you could get some use out of storing info about the Dream.

Let's say you want some variety in your setting, and you've decided to add seasons. Maybe certain monsters only come out in the spring. You might change the artwork in your Dream to snowy shapes in the winter, and have a river that freezes over so you can walk across it and get to an area that's unreachable the rest of the year. There are all sorts of possibilities!

Here's just the beginning of an example of how you could control the seasons, and have your Dream act differently in each one. First, we let the Dream owner change the seasons with a spoken command:

(0:31) When a furre says {set winter},
   (1:10) and the triggering furre is the dream owner,
            (5:602) memorize that the PhoenixSpeak info {season} about this dream will now be 1.
            (5:200) emit message {Season set to Winter.} to whoever set off the trigger.
(0:31) When a furre says {set spring},
   (1:10) and the triggering furre is the dream owner,
            (5:602) memorize that the PhoenixSpeak info {season} about this dream will now be 2.
            (5:200) emit message {Season set to Spring.} to whoever set off the trigger.
(0:31) When a furre says {set summer},
   (1:10) and the triggering furre is the dream owner,
            (5:602) memorize that the PhoenixSpeak info {season} about this dream will now be 3.
            (5:200) emit message {Season set to Summer.} to whoever set off the trigger.
(0:31) When a furre says {set fall},
   (1:10) and the triggering furre is the dream owner,
            (5:602) memorize that the PhoenixSpeak info {season} about this dream will now be 4.
            (5:200) emit message {Season set to Fall.} to whoever set off the trigger.

Now here's how you could give people an idea how things are right when they enter your Dream:

(0:9) When a furre arrives in the dream,
   (1:620) and the PhoenixSpeak info {season} about this dream is equal to 1,
            (5:200) emit message {Welcome to Questville! You see several children having a snowball fight, while some others are ice-skating on the frozen pond.}
(0:9) When a furre arrives in the dream,
   (1:620) and the PhoenixSpeak info {season} about this dream is equal to 2,
            (5:200) emit message {Questville is in bloom! The weather's warmed up at last, and it seems like flowers are everywhere.}
(0:9) When a furre arrives in the dream,
   (1:620) and the PhoenixSpeak info {season} about this dream is equal to 3,
            (5:200) emit message {It's a hot day in Questville.  Several furres are swimming in the pond, and a young otter is running a lemonade stand.}
(0:9) When a furre arrives in the dream,
   (1:620) and the PhoenixSpeak info {season} about this dream is equal to 4,
            (5:200) emit message {The trees are a riot of yellow, red, and orange.  A lone badger struggles to keep the ground raked as more leaves flutter down.}

From there on, you could add the DS yourself to make your Dream visually match with the season system you built!

How much can I store?

You have enough room for 50 players in your PS and 10 kb of space to use. Silver Sponsors and certain Group Package owners have a lot more space to work with.

If you don't use it for a month (that is, if you don't upload your Dream for a month) the database will be cleared. However, as long as your character has a Silver Sponsorship or a certain Group Package, your PS will not expire.

Maintenance Commands

Finally, there are a bunch of commands you can use by just typing them into the Furcadia chat window while in your Dream. They are available to the Dream owner automatically, and you can also set access levels of other players so they can use them too. Just like the memories of the Phoenix, the access levels you give to players will be remembered forever, so you only need to grant them access once.

Here's a list of all the commands you can use. You don't need these to get started, but they can be helpful for examining what you have stored, figuring out or fixing problems, or freeing up space if your Dream gets too full.

ps active_db
Access: dream owner, anyone with access level >= 10000

Displays which PhoenixSpeak database is currently active : 'live' or 'test'

ps clear 
Argument: <table> or  <table: query_field_list> or <table[unique_name]> or <table[unique_name]: query_field_list>
Access: dream owner, anyone with access level >= 1200

Removes data from a table to free up space for more. Examples: ps clear character Removes all entries from 'character' table. ps clear character[ 'sanctimonious' ]: xp, level Removes fields 'xp' and 'level' from the row 'sanctimonious' in 'character' table. ps clear character[ 'sanctimonious' ] Removes all data from the row 'sanctimonious' in 'character' table, and then removes the row itself.

ps get 
Argument: <table> or  <table: query_field_list> or <table[unique_name]> or <table[unique_name]: query_field_list>
Access: dream owner, anyone with access level >= 1000

Displays queried data from PhoenixSpeak database. The query can be limited to a specific row in the table ("* 'sanctimonious' +") and specific fields on a row (": xp, coins, level"). If the specified field does not exist, an error message will be displayed.

Examples:

ps get character
	Displays all fields from table 'character'.

	ps get character[ 'sanctimonious' ]: * 
	Displays all fields from the row 'sanctimonious' of the table 'character'.

	ps get character[ 'sanctimonious' ]: xp, coins, level
	Displays fields 'xp', 'coins', and 'level' from the row 'sanctimonious' of the 'character' table.

	ps get character[ 'san*' ]
	Displays all fields from table 'character' that begin with 'san'. 
ps db 
Argument: <active_database = test|live>
Access: dream owner, anyone with access level >= 10000

Loads PhoenixSpeak database. It should be noted that 'test' database is loaded automatically when the Dream is uploaded.
'test': Database meant for testing new features and fields in a private or semi-private
testing Dream, while the 'live' database is being used in the public Dream.
'live': Database meant for active use in the public Dream.

ps list_access 
Access: dream owner, anyone with access level >= 1500 

Lists the shortname and access level of every player who currently has PhoenixSpeak access.

ps memory 
Access: dream owner, anyone with access level >= 1000

Displays the amount of space currently used up by PhoenixSpeak and the maximum amount of space the Dream can use.

ps rm_access 
Argument: <character_name> Access: dream owner, anyone with access level >= 1500 Removes PhoenixSpeak access from player character_name. If the command is run by someone else than the dream owner, the access will not be removed, if the player's access level is higher or equal to the access level of the command giver. 
ps set 
Argument: <table> or  <table: query_field_list> or <table[unique_name]> or <table[unique_name]: query_field_list>
Access: dream owner, anyone with access level >= 1200

Stores data in the PhoenixSpeak database.

Examples:

	ps set character[ 'sanctimonious' ]
	Creates row 'sanctimonious' in 'character' table, if it does not exist.

	ps set character[ 'sanctimonious' ]: flag, flag2
	Creates row 'sanctimonious' in 'character' table, if it does not exist. Then fields 'flag' and 'flag2' are created in the row 'sanctimonious', if they do not exist. 

	ps set character[ 'sanctimonious' ]: xp=1380, species='fox'
	Creates row 'sanctimonious' in 'character' table, if it does not exist. Then field 'xp' is set to 1380 and field 'species' Is set to 'fox' on row 'sanctimonious'. 
ps set_access 
Arguments: <character_name> <access_level>
Access: dream owner, anyone with access level >= 1500

Set PhoenixSpeak access level of player character_name to access_level. Note that no more than 150 players can have a set access level. If the command is run by someone other than the Dream owner, he or she will not be able to set the access level higher than their own access level. They will also not be able to set the access level of any player whose access level is higher or equal to theirs. Note: All access entries are stored on the server. Re-uploading the Dream will not reset the access list.

ps verbosity 
Argument: <verbosity_level = 0-5>
Access: dream owner, anyone with access_level >= 2000

Sets the verbosity level of PhoenixSpeak commands:

Level Type
0 As few messages are displayed as possible.
1 Errors are displayed.
2 Warnings are displayed.
3 Notifications are displayed.
4 Debug messages are displayed.
5 DragonSpeak Debug messages are displayed

One final note, for proxy and bot authors who want to make advanced features that interact with PhoenixSpeak. You can put a number from 1 to 65535 in front of any of these ps commands, and the results outputted back to you will have that same number in front of them. Happy Dreaming!

Account E-Mail

Password