I know we got permission to use the one version of the Longfellow translation, however I found a cleaner, easier to use version:
http://en.wikisource.org/wiki/The_Divine_Comedy
It has specific links for each book, and then each canto, so rather than have people looking at the canto on the current place we can use, where the canto starts somewhere in the middle of the page sometimes, this would be just the specific canto.
This new version IS the Longfellow translation.
Let me know what you think (Gerry).
Ben
Friday, October 12, 2007
Tuesday, October 9, 2007
Useful (i hope) Scripts
The scripts I've attached are utilized in the book object, however I commented them so they can be used for whatever you need them for.
The scripts:
NestedMenuScript
Scripts:
// ========== Nested Menu Script
// ========== Written by Doodle Fadoodle
// ===================================
// ==
// == Feel free to edit this script and use
// == for whatever purpose you need
// ==
// ===================================
// ===================================
// Create lists for menu buttons
// Make one list per dialog screen
list MAIN_MENU = ["Description", "See Cantos"];
list CANTOS = ["Canto I", "Canto II", "Canto III", "Canto IV", "Canto V", "Canto VI", "Canto VII", "Canto VIII", "more...", "...back"];
list CANTOS_MORE = ["button1", "button2"];
// Create a key to remember who is using the menus
key avatar;
// Begin script
default
{
state_entry()
{
// When object is first placed out of inventory, start listening on specific channel
// Use a negative channel to avoid confusion
// llListen syntax: llListen(channel, "object name", key, "message");
// channel is the talk channel to begin listening on (an integer value)
// "object name" is the name of an object sending a message (a string value)
// key can be the owner of the object's key, a specific avatar, or other key (a key value)
// "message" is a specific message an avatar or other object will say on a given channel (a string value)
llListen(-199392, "", NULL_KEY, "");
llSay(0, "Book cover placed - position above book."); // Not needed - just directions for object placement
}
// Actions to perform when the object is touched:
touch_start(integer total_number)
{
// Assign the key of the avatar touching the object to the key "avatar"
avatar = llDetectedKey(0);
// Create first dialog menu, the "main" menu
// llDialog syntax: llDialog(key, "text directions for the user to read explaining options available", [list_of_buttons], channel);
llDialog(avatar, "This menu allows you to gain information pertaining to this level.\nYour options include:", MAIN_MENU, -199392);
}
// Action to perform when a button is pressed. (Used through the listen function)
// This is used for ALL button options, regardless of which list the buttons are in
// All "if" or "else if" statements should be (message = "button_text") where "button_text" is what the button's are labeled as
listen(integer channel, string name, key id, string message)
{
if(message == "Description")
{
// Give a notecard through the llGiveInventory function
// llGiveInventory syntax: llGiveInventory(key, "item_in_inventory_name");
// The key is what you set from the avatar touching the object and the item (notecard in this case) must be in the object's inventory
llGiveInventory(avatar, "ParCantoI");
}
else if(message == "See Cantos")
{
// Opens another dialog menu; now we have nested menus!
llDialog(avatar, "The following Cantos refer to this level:", CANTOS, -199392);
}
else if(message == "Canto I")
{
// Ask the avatar to open a website in the user's default web browser; using llLoadURL function
// llLoadURL syntax: llLoadURL(key, "text for user to know what the website is", "website_URL");
llLoadURL(avatar, "Paradiso Canto I Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=261");
}
else if(message == "Canto II")
{
llLoadURL(avatar, "Paradiso Canto II Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=265");
}
else if(message == "Canto III")
{
llLoadURL(avatar, "Paradiso Canto III Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=269");
}
else if(message == "Canto IV")
{
llLoadURL(avatar, "Paradiso Canto IV Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=272");
}
else if(message == "Canto V")
{
llLoadURL(avatar, "Paradiso Canto V Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=276");
}
else if(message == "Canto VI")
{
llLoadURL(avatar, "Paradiso Canto VI Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=279");
}
else if(message == "Canto VII")
{
llLoadURL(avatar, "Paradiso Canto VII Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=283");
}
else if(message == "Canto VIII")
{
llLoadURL(avatar, "Paradiso Canto VII Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=287");
}
else if(message == "...back")
{
// This will open a new dialog menu which happens to be the original "main" menu!
llDialog(avatar, "This menu allows you to gain information pertaining to this level.\nYour options include:", MAIN_MENU, -199392);
}
else if(message == "more...")
{
// This is another dialog menu; still nesting our menus!
llDialog(avatar, "The following Cantos also refer to this level:", CANTOS_MORE, -199392);
}
else if(message == "button1")
{
llSay(0, "This was just an example!");
}
else if(message == "button2")
{
llSay(0, "This was a test!");
}
// This is just so a message will show up if for some reason you have not
// put an "if"/"else if" statement for a button in the list you made
else
{
llSay(0, "Um, doesn't work?");
}
}
}
// End of Script
// =========================================================================
// ========== Rotation Script
// ========== Written by Doodle Fadoodle
// ===================================
// ==
// == Feel free to edit this script and use
// == for whatever purpose you need
// ==
// ===================================
// ===================================
// Create rotation variables to store rotations
rotation original_rot;
rotation open_rot;
// Create a float variable to store the delay time for a timed event
float delay = 3.0;
// Begin script
default
{
state_entry()
{
// There is no action to perform when the object is first placed out of inventory
}
// Action to perform when the object is touched:
touch_start(integer total_number)
{
// Move to the "open" state
state open;
}
}
// Define the states
state closed
{
state_entry()
{
// When the "closed" state is entered, set the rotation of the object to the "original" rotation
// "original" rotation is defined in the "open" state
llSetRot(original_rot);
}
// Action to perform when the object is touched while in the "closed" state
touch_start(integer total_number)
{
// Move to the "open" state
state open;
}
}
state open
{
state_entry()
{
// Actions performed when the object enters the "open" state
// Set the "original" rotation variable (original_rot) to the object's current rotation
original_rot = llGetRot();
// Create and set a rotation variable to rotate the object on the object's local negative y-axis
rotation y_neg145 = llEuler2Rot(<0,-145*deg_to_rad,0>);
// Set the "new" rotation variable (open_rot) to the rotation we want
open_rot = y_neg145 * original_rot;
// Give our object the "new" rotation values
llSetRot(open_rot);
// Start our timer event after a set value of time (delay)
llSetTimerEvent(delay);
}
// Our timer event
timer()
{
// Move to the "closed" state
state closed;
}
}
// End of Script
// ====================================================================
The scripts:
NestedMenuScript
- provides nested dialog windows
- provides method of going back through menus
- provides a notecard (the notecard must be added to the object's inventory - NOT INCLUDED)
- provides a method for rotation an object on its local y-axis
- play with the value of the rotation to get the desired rotation you want
- provides a time delayed action of resetting the object so the object will return to its original rotation after being rotated
Scripts:
// ========== Nested Menu Script
// ========== Written by Doodle Fadoodle
// ===================================
// ==
// == Feel free to edit this script and use
// == for whatever purpose you need
// ==
// ===================================
// ===================================
// Create lists for menu buttons
// Make one list per dialog screen
list MAIN_MENU = ["Description", "See Cantos"];
list CANTOS = ["Canto I", "Canto II", "Canto III", "Canto IV", "Canto V", "Canto VI", "Canto VII", "Canto VIII", "more...", "...back"];
list CANTOS_MORE = ["button1", "button2"];
// Create a key to remember who is using the menus
key avatar;
// Begin script
default
{
state_entry()
{
// When object is first placed out of inventory, start listening on specific channel
// Use a negative channel to avoid confusion
// llListen syntax: llListen(channel, "object name", key, "message");
// channel is the talk channel to begin listening on (an integer value)
// "object name" is the name of an object sending a message (a string value)
// key can be the owner of the object's key, a specific avatar, or other key (a key value)
// "message" is a specific message an avatar or other object will say on a given channel (a string value)
llListen(-199392, "", NULL_KEY, "");
llSay(0, "Book cover placed - position above book."); // Not needed - just directions for object placement
}
// Actions to perform when the object is touched:
touch_start(integer total_number)
{
// Assign the key of the avatar touching the object to the key "avatar"
avatar = llDetectedKey(0);
// Create first dialog menu, the "main" menu
// llDialog syntax: llDialog(key, "text directions for the user to read explaining options available", [list_of_buttons], channel);
llDialog(avatar, "This menu allows you to gain information pertaining to this level.\nYour options include:", MAIN_MENU, -199392);
}
// Action to perform when a button is pressed. (Used through the listen function)
// This is used for ALL button options, regardless of which list the buttons are in
// All "if" or "else if" statements should be (message = "button_text") where "button_text" is what the button's are labeled as
listen(integer channel, string name, key id, string message)
{
if(message == "Description")
{
// Give a notecard through the llGiveInventory function
// llGiveInventory syntax: llGiveInventory(key, "item_in_inventory_name");
// The key is what you set from the avatar touching the object and the item (notecard in this case) must be in the object's inventory
llGiveInventory(avatar, "ParCantoI");
}
else if(message == "See Cantos")
{
// Opens another dialog menu; now we have nested menus!
llDialog(avatar, "The following Cantos refer to this level:", CANTOS, -199392);
}
else if(message == "Canto I")
{
// Ask the avatar to open a website in the user's default web browser; using llLoadURL function
// llLoadURL syntax: llLoadURL(key, "text for user to know what the website is", "website_URL");
llLoadURL(avatar, "Paradiso Canto I Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=261");
}
else if(message == "Canto II")
{
llLoadURL(avatar, "Paradiso Canto II Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=265");
}
else if(message == "Canto III")
{
llLoadURL(avatar, "Paradiso Canto III Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=269");
}
else if(message == "Canto IV")
{
llLoadURL(avatar, "Paradiso Canto IV Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=272");
}
else if(message == "Canto V")
{
llLoadURL(avatar, "Paradiso Canto V Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=276");
}
else if(message == "Canto VI")
{
llLoadURL(avatar, "Paradiso Canto VI Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=279");
}
else if(message == "Canto VII")
{
llLoadURL(avatar, "Paradiso Canto VII Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=283");
}
else if(message == "Canto VIII")
{
llLoadURL(avatar, "Paradiso Canto VII Online", "http://www.gutenberg.org/catalog/world/readfile?fk_files=36790&pageno=287");
}
else if(message == "...back")
{
// This will open a new dialog menu which happens to be the original "main" menu!
llDialog(avatar, "This menu allows you to gain information pertaining to this level.\nYour options include:", MAIN_MENU, -199392);
}
else if(message == "more...")
{
// This is another dialog menu; still nesting our menus!
llDialog(avatar, "The following Cantos also refer to this level:", CANTOS_MORE, -199392);
}
else if(message == "button1")
{
llSay(0, "This was just an example!");
}
else if(message == "button2")
{
llSay(0, "This was a test!");
}
// This is just so a message will show up if for some reason you have not
// put an "if"/"else if" statement for a button in the list you made
else
{
llSay(0, "Um, doesn't work?");
}
}
}
// End of Script
// =========================================================================
// ========== Rotation Script
// ========== Written by Doodle Fadoodle
// ===================================
// ==
// == Feel free to edit this script and use
// == for whatever purpose you need
// ==
// ===================================
// ===================================
// Create rotation variables to store rotations
rotation original_rot;
rotation open_rot;
// Create a float variable to store the delay time for a timed event
float delay = 3.0;
// Begin script
default
{
state_entry()
{
// There is no action to perform when the object is first placed out of inventory
}
// Action to perform when the object is touched:
touch_start(integer total_number)
{
// Move to the "open" state
state open;
}
}
// Define the states
state closed
{
state_entry()
{
// When the "closed" state is entered, set the rotation of the object to the "original" rotation
// "original" rotation is defined in the "open" state
llSetRot(original_rot);
}
// Action to perform when the object is touched while in the "closed" state
touch_start(integer total_number)
{
// Move to the "open" state
state open;
}
}
state open
{
state_entry()
{
// Actions performed when the object enters the "open" state
// Set the "original" rotation variable (original_rot) to the object's current rotation
original_rot = llGetRot();
// Create and set a rotation variable to rotate the object on the object's local negative y-axis
rotation y_neg145 = llEuler2Rot(<0,-145*deg_to_rad,0>);
// Set the "new" rotation variable (open_rot) to the rotation we want
open_rot = y_neg145 * original_rot;
// Give our object the "new" rotation values
llSetRot(open_rot);
// Start our timer event after a set value of time (delay)
llSetTimerEvent(delay);
}
// Our timer event
timer()
{
// Move to the "closed" state
state closed;
}
}
// End of Script
// ====================================================================
Monday, October 8, 2007
New Movie Online
Hi all,
I posted a new movie about the Neo-Dante project. This can be goiod
for showing someone (esp. at a distance) what we are doing.
http://www.youtube.com/watch?v=kjlt6dqGBag
- gerry
I posted a new movie about the Neo-Dante project. This can be goiod
for showing someone (esp. at a distance) what we are doing.
http://www.youtube.com/watch?v=kjlt6dqGBag
- gerry
Need to trim prims
Hi all,
This is mainly for Todd and Dan ...
We need to try to reduce the number of prims we are using as
we are getting dangerously close to the 13000 prim limit
for the island. According to Bart we are using about 7000
prims already. I figure we will need another 1000 or so
for the content objects.
I am hoping that there are a lot of little, or hidden, items that
could be used to reduce the prim count?
Worse comes to worse, I offered to lose the stadium
to free up room for a networking research project that
has been committed for the island. We won't actually
lose it - it can be put into inventory and used later if
needed. It was a great idea but there may not be any other way
around it.
My preference then is to take the prims from places
where they won't be missed so we have them available for our info
objects.
- gerry
- gerry
This is mainly for Todd and Dan ...
We need to try to reduce the number of prims we are using as
we are getting dangerously close to the 13000 prim limit
for the island. According to Bart we are using about 7000
prims already. I figure we will need another 1000 or so
for the content objects.
I am hoping that there are a lot of little, or hidden, items that
could be used to reduce the prim count?
Worse comes to worse, I offered to lose the stadium
to free up room for a networking research project that
has been committed for the island. We won't actually
lose it - it can be put into inventory and used later if
needed. It was a great idea but there may not be any other way
around it.
My preference then is to take the prims from places
where they won't be missed so we have them available for our info
objects.
- gerry
- gerry
Sunday, October 7, 2007
Friday, October 5, 2007
Thursday, October 4, 2007
Subscribe to:
Posts (Atom)