hey guys
Hope you all had a good break. I finished rebuilding the inferno infrastructure and it is ready to be fill with objects. The dark woods still need some touch ups, but i should have that done at the end of the week. I am also working on purgatory right now and it should be done shortly.
-Todd
Tuesday, January 8, 2008
Wednesday, December 5, 2007
Menu Script
Here's my script for a menu where you can choose to receive a notecard or goto a webpage. Make sure when you put it in an object you place the notecard you want to dispense inside the object also. Thanks for the help ben
// when touched, present two menu choices to give notecard and load URL
// when touched, present two menu choices to give notecard and load URL
integer CHANNEL = 42; // dialog channel
list MENU_MAIN = ["Website", "Notecard"]; // the main menu
key id;
default {
state_entry() {
llListen(CHANNEL, "", NULL_KEY, ""); // listen for dialog answers (from multiple users)
}
touch_start(integer total_number)
{
id = llDetectedKey(0);
llDialog(id, "What do you want to do?", MENU_MAIN, CHANNEL); // present dialog on click
}
listen(integer channel, string name, key id, string message)
{
if (message == "Website")
llLoadURL(id, "", "http://si.ist.psu.edu/neodante"); //load webpage
else if (message == "Notecard")
llGiveInventory(id, "Info"); //give notecard
}
}
Tuesday, December 4, 2007
Friday, November 30, 2007
Fog Script
Dan - here is the fog script. Its a simple particle script, you can modify the color, if it bounces off the z-plane, effected by wind or have it follow different objects or avatars
// Particle Script
integer glow = TRUE; // Make the particles glow
integer bounce = TRUE; // Make particles bounce on Z plan of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = TRUE; // Go from start to end size
integer wind = FALSE; // Particles effected by wind
integer followSource = TRUE; // Particles follow the source
integer followVel = TRUE; // Particles turn to velocity direction
// Choose pattern:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;
// Select a target for particles to go towards
// "" for nothing, "owner" for creator, "self" for host object
key target = "self";
// Particle paramaters
float age = 8; // Life of each particle
float maxSpeed = 1; // Max speed each particle is spit out at
float minSpeed = 1; // Min speed each particle is spit out at
string texture; // Texture used for particles, default used if blank
float startAlpha = 0.2; // Start alpha (transparency) value
float endAlpha = 0.3; // End alpha (transparency) value
vector startColor = <7,25,34.45>; // Start color of particles
vector endColor = <1,252,34.4>; // End color of particles (if interpColor == TRUE)
vector startSize = <1.0,1.0,1.0>; // Start size of particles
vector endSize = <1.0,1.0,1.0>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,-1>; // Force pushed on particles
// System paramaters
float rate = .1; // How fast (rate) to emit particles
float radius = .9; // Radius to emit particles for BURST pattern
integer count = 500; // How many particles to emit per BURST
float outerAngle = 2.0; // Outer angle for all ANGLE patterns
float innerAngle = 2.0; // Inner angle for all ANGLE patterns
vector omega = <1,2,3>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particles
// Script variables
integer flags;
updateParticles()
{
if (target == "owner") target = llGetOwner();
if (target == "self") target = llGetKey();
if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
if (wind) flags = flags | PSYS_PART_WIND_MASK;
if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
if (target != "") flags = flags | PSYS_PART_TARGET_POS_MASK;
llParticleSystem([ PSYS_PART_MAX_AGE,age,
PSYS_PART_FLAGS,flags,
PSYS_PART_START_COLOR, startColor,
PSYS_PART_END_COLOR, endColor,
PSYS_PART_START_SCALE,startSize,
PSYS_PART_END_SCALE,endSize,
PSYS_SRC_PATTERN, pattern,
PSYS_SRC_BURST_RATE,rate,
PSYS_SRC_ACCEL, push,
PSYS_SRC_BURST_PART_COUNT,count,
PSYS_SRC_BURST_RADIUS,radius,
PSYS_SRC_BURST_SPEED_MIN,minSpeed,
PSYS_SRC_BURST_SPEED_MAX,maxSpeed,
PSYS_SRC_TARGET_KEY,target,
PSYS_SRC_INNERANGLE,innerAngle,
PSYS_SRC_OUTERANGLE,outerAngle,
PSYS_SRC_OMEGA, omega,
PSYS_SRC_MAX_AGE, life,
PSYS_SRC_TEXTURE, texture,
PSYS_PART_START_ALPHA, startAlpha,
PSYS_PART_END_ALPHA, endAlpha
]);
}
default
{
state_entry()
{
updateParticles();
}
}
// Particle Script
integer glow = TRUE; // Make the particles glow
integer bounce = TRUE; // Make particles bounce on Z plan of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = TRUE; // Go from start to end size
integer wind = FALSE; // Particles effected by wind
integer followSource = TRUE; // Particles follow the source
integer followVel = TRUE; // Particles turn to velocity direction
// Choose pattern:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;
// Select a target for particles to go towards
// "" for nothing, "owner" for creator, "self" for host object
key target = "self";
// Particle paramaters
float age = 8; // Life of each particle
float maxSpeed = 1; // Max speed each particle is spit out at
float minSpeed = 1; // Min speed each particle is spit out at
string texture; // Texture used for particles, default used if blank
float startAlpha = 0.2; // Start alpha (transparency) value
float endAlpha = 0.3; // End alpha (transparency) value
vector startColor = <7,25,34.45>; // Start color of particles
vector endColor = <1,252,34.4>; // End color of particles
vector startSize = <1.0,1.0,1.0>; // Start size of particles
vector endSize = <1.0,1.0,1.0>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,-1>; // Force pushed on particles
// System paramaters
float rate = .1; // How fast (rate) to emit particles
float radius = .9; // Radius to emit particles for BURST pattern
integer count = 500; // How many particles to emit per BURST
float outerAngle = 2.0; // Outer angle for all ANGLE patterns
float innerAngle = 2.0; // Inner angle for all ANGLE patterns
vector omega = <1,2,3>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particles
// Script variables
integer flags;
updateParticles()
{
if (target == "owner") target = llGetOwner();
if (target == "self") target = llGetKey();
if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
if (wind) flags = flags | PSYS_PART_WIND_MASK;
if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
if (target != "") flags = flags | PSYS_PART_TARGET_POS_MASK;
llParticleSystem([ PSYS_PART_MAX_AGE,age,
PSYS_PART_FLAGS,flags,
PSYS_PART_START_COLOR, startColor,
PSYS_PART_END_COLOR, endColor,
PSYS_PART_START_SCALE,startSize,
PSYS_PART_END_SCALE,endSize,
PSYS_SRC_PATTERN, pattern,
PSYS_SRC_BURST_RATE,rate,
PSYS_SRC_ACCEL, push,
PSYS_SRC_BURST_PART_COUNT,count,
PSYS_SRC_BURST_RADIUS,radius,
PSYS_SRC_BURST_SPEED_MIN,minSpeed,
PSYS_SRC_BURST_SPEED_MAX,maxSpeed,
PSYS_SRC_TARGET_KEY,target,
PSYS_SRC_INNERANGLE,innerAngle,
PSYS_SRC_OUTERANGLE,outerAngle,
PSYS_SRC_OMEGA, omega,
PSYS_SRC_MAX_AGE, life,
PSYS_SRC_TEXTURE, texture,
PSYS_PART_START_ALPHA, startAlpha,
PSYS_PART_END_ALPHA, endAlpha
]);
}
default
{
state_entry()
{
updateParticles();
}
}
Interesting script problem
Hi all,
Ben and I are trying to figure out a script problem that
could be indicitive of a deeper problem.
If you go to the reception room for Inferno, you will
see a picture of Sandro Boticelli. If you touch
the picture a loadURL message comes up and if you
select OK you get a web page with info on Botticelli.
So far so good. Here is the simple script:
Now - I copied my Botticelli picture, and put a copy in
the reception room of Purgatorio.
But now the script does not work! Same exact script!
I then create a new object - paste the script there -
it compiles successfully -- same problem (no message, no
web browser window, no nothing!)
So, again on the new object, I whittle down the
script to the following simplest possible script:
Still no work!
Thoughts? Both Ben and I worked on this but could not
find any solution.
- gerry
Ben and I are trying to figure out a script problem that
could be indicitive of a deeper problem.
If you go to the reception room for Inferno, you will
see a picture of Sandro Boticelli. If you touch
the picture a loadURL message comes up and if you
select OK you get a web page with info on Botticelli.
So far so good. Here is the simple script:
string SiteName = " " ;
//Change this to meet your needs.
string SiteURL = "http://si.ist.psu.edu/neodante/afterlife/inferno/sandro-botticelli-1444-1510/";
//Change this to meet your needs.
default
{
state_entry()
{
llSetText(SiteName,<0,1,1>,2);
}
touch_start(integer total_number)
{
llLoadURL(llDetectedKey(0), SiteName, SiteURL);
}
}
Now - I copied my Botticelli picture, and put a copy in
the reception room of Purgatorio.
But now the script does not work! Same exact script!
I then create a new object - paste the script there -
it compiles successfully -- same problem (no message, no
web browser window, no nothing!)
So, again on the new object, I whittle down the
script to the following simplest possible script:
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}
touch_start(integer total_number)
{
llLoadURL(llDetectedKey(0), "fred", "http://www.psu.edu");
}
}
Still no work!
Thoughts? Both Ben and I worked on this but could not
find any solution.
- gerry
Thursday, November 29, 2007
floating text script
string SiteName = "Blaw-Knox Steel Mill" ;
//Change this to meet your needs.
default
{
state_entry()
{
llSetText(SiteName,<0,1,1>,2);
}
}
open url script
string SiteName = " " ;
//Change this to meet your needs.
string SiteURL = "http://www.psu.edu.";
//Change this to meet your needs.
default
{
state_entry()
{
llSetText(SiteName,<0,1,1>,2);
}
touch_start(integer total_number)
{
llLoadURL(llDetectedKey(0), SiteName, SiteURL);
}
}
Tuesday, November 27, 2007
Inferno: Level Three
Inferno: Level Two
Monday, November 26, 2007
Let me impress you with my amazing Paint skillz

I made a rough diagram for the first level of Inferno. I have levels two and three drawn out by hand, but I still need to reorganize them in Paint -- I just thought I'd throw this one out there so I can get started building as soon as possible. Let me know what you think!
I've also been attending some classes run by the New Citizens Institute (formally New Citizens Incorporated) that have been really helpful in understanding building and scripting.
Tuesday, November 6, 2007
Blank Avatars & Doors

I finished the blank avatars, The minimum amount of prims i could use for them is 20. Which how many are in the two hooded avatars on top of inferno. With hair there are around 30 or 40 prims for each avatar.

I also placed the wooden doors inside purgatory. I implemented scripts so the doors open automatically when you walk into them or if you click them.
Gerry - They're only on the first two floors for now because i wanted you to check them out and make sure they are what you wanted before i placed them on all the floors. Let me know
- Todd
Friday, October 12, 2007
Divine Comedy Translation
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
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
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
Wednesday, September 26, 2007
Meeting Friday morning
Hi all,
I'd like to have a meeting this Friday morning to look at progress so far and to start detailing the levels. I'll also give out the pw's for the buildbots and we can discuss a way to schedule them.
Lets meet in the IST Atrium (3'rd floor) at 9:30. I'll buy coffee and donuts for any sleepy or hungry people.
A few things we should discuss:
- specific level designs leading to placement of info objects - my thought is that this should follow a process where a level is first explored (so you understand the layout) then after reading the UT info on that level (and perhaps some of the Canto translations and commentary on that level) develop a plan for which objects (pictures and 3D objects) would be placed there and what info they would link to
- starting on the accompanying Plone site -- I'd like to give this to one of the team members so we can start designing the info to be placed there and start putting it together in conjunction with the info objects in the towers
- I've been playing more with video development in SL. I downloaded the paid version of FRAPS and think it has some promise. There is a free version which limits you to 30-second clips - doable if you have a stopwatch - then you string the bits together.
- training seminars - do we need any and what topics? We can put these together for this semester (I'll find teachers) and we would have them for the team and other students as room permits.
- lastly: an update on progress on the previous assigmnents.
cheers - gerry
ps - let me know if you are unable to be there - I'll post meeting notes here
I'd like to have a meeting this Friday morning to look at progress so far and to start detailing the levels. I'll also give out the pw's for the buildbots and we can discuss a way to schedule them.
Lets meet in the IST Atrium (3'rd floor) at 9:30. I'll buy coffee and donuts for any sleepy or hungry people.
A few things we should discuss:
- specific level designs leading to placement of info objects - my thought is that this should follow a process where a level is first explored (so you understand the layout) then after reading the UT info on that level (and perhaps some of the Canto translations and commentary on that level) develop a plan for which objects (pictures and 3D objects) would be placed there and what info they would link to
- starting on the accompanying Plone site -- I'd like to give this to one of the team members so we can start designing the info to be placed there and start putting it together in conjunction with the info objects in the towers
- I've been playing more with video development in SL. I downloaded the paid version of FRAPS and think it has some promise. There is a free version which limits you to 30-second clips - doable if you have a stopwatch - then you string the bits together.
- training seminars - do we need any and what topics? We can put these together for this semester (I'll find teachers) and we would have them for the team and other students as room permits.
- lastly: an update on progress on the previous assigmnents.
cheers - gerry
ps - let me know if you are unable to be there - I'll post meeting notes here
Subscribe to:
Posts (Atom)




