mirror of
https://github.com/RuthAndRoth/Ruth.git
synced 2026-08-14 09:02:20 +00:00
Merge branch 'master' of https://github.com/Outworldz/Ruth
This commit is contained in:
+14
-3
@@ -1,5 +1,7 @@
|
||||
License terms for this project vary by part type. Copyrights are by the original Authors. Please do not delete any credits or license files that are included in this project.
|
||||
|
||||
**Avatar Mesh**
|
||||
|
||||
Built with Blender 2.79 with Avastar 2 RC12.
|
||||
|
||||
Ruth 2.0 Copyright 2018 AGPL by Shin Ingen, who can be found at https://plus.google.com/+ShinIngen.
|
||||
@@ -29,9 +31,11 @@ Sundance Haiku
|
||||
The mesh head is CC-BY Linden Lab.
|
||||
The UV map is CC-BY Linden Lab.
|
||||
|
||||
Skin templates by Chip Midnight: http://forums-archive.secondlife.com/109/72/40762/1.html
|
||||
Ruth 2.0 Logo and photos are AGPL by Shin Ingen
|
||||
|
||||
Elf Ears are AGPL by Fred K. Beckhusen.
|
||||
**Skins**
|
||||
|
||||
Skin templates by Chip Midnight: http://forums-archive.secondlife.com/109/72/40762/1.html
|
||||
|
||||
CMFF Templates are Licensed as CC-BY 3.0 by Chip Midnight
|
||||
|
||||
@@ -43,4 +47,11 @@ StarLight Skin, Strawberry Mods by Eloh Eliot is MIT License--this covers both s
|
||||
|
||||
Ghana Skin is CC-BY Ina Centaur
|
||||
|
||||
Ruth 2.0 Logo and photos are AGPL by Shin Ingen
|
||||
**Attachments**
|
||||
|
||||
Elf Ears are AGPL by Fred K. Beckhusen.
|
||||
|
||||
**Apparel**
|
||||
|
||||
...
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 740 KiB After Width: | Height: | Size: 740 KiB |
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
|
After Width: | Height: | Size: 286 KiB |
+1544
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 116 KiB |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 286 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 393 KiB |
@@ -0,0 +1,227 @@
|
||||
// :NAME: Hand Pose HUD Script
|
||||
// :CATEGORY: Ruth 2.0 Scripts
|
||||
// :AUTHOR: Sundance Haiku (https://plus.google.com/u/0/114880810031398834985)
|
||||
// :AUTHOR: Chimera Firecaster (https://plus.google.com/115549296923155647217 & https://chimerafire.wordpress.com/)
|
||||
// :VERSION: 1.0
|
||||
// :DESCRIPTION:
|
||||
// This script is intended to be placed inside a HUD to animate the hands into different poses
|
||||
// Complete instructions on how to assemble the HUD and use this script are found on the Ruth Github site (below)
|
||||
// :MORE INFORMATION:
|
||||
// Ruth Discussion Forum: https://plus.google.com/communities/103360253120662433219
|
||||
// Ruth GitHub Site: https://github.com/Outworldz/Ruth
|
||||
// :COPYRIGHT: AGPL - When used, please credit the authors and include author web links
|
||||
//
|
||||
// Note: this is a FREE script. It is given generously to the virtual community without
|
||||
// the expectation of anything in return. It may be distributed as long as you credit the
|
||||
// authors and include their web links. But please do not charge for it. That's bad form.
|
||||
// Besides dishonoring the kindness of others, it will most certainly bring you bad karma.
|
||||
//
|
||||
//-----Do Not Remove Above Header
|
||||
|
||||
//Global declarations
|
||||
string gcAnimation = ""; //the currently selected animation from the HUD inventory
|
||||
string gcPrevRtAnim = ""; //the previously selected animation on the right side
|
||||
string gcPrevLfAnim = ""; //the previously selected animation on the left side
|
||||
string gcWhichSide = ""; //Whether the currently selected animation is a right or left hand
|
||||
integer gnButtonNo = 0; //The number of the button pressed by the user
|
||||
integer gnPrimNo; //The prim which contains the button pressed
|
||||
integer gnPrimFace; //The face of the prim containing the button pressed
|
||||
integer gnButtonStart; //The starting number of a group of buttons
|
||||
vector gvONColor = <0.224, 0.800, 0.800>; //Teal color to indicate the button has been pressed
|
||||
vector gvOFFColor = <1.0, 1.0, 1.0>; //white color to indicate the button has not been pressed
|
||||
integer glStopAll =FALSE;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//User defined functions
|
||||
|
||||
//The following function is used to show that a button has been clicked by coloring it. It determines
|
||||
//whether the button is a right or left hand pose. When a right hand button is colored, it removes the
|
||||
//coloring from the previously select right hand button - and does the same for left buttons.
|
||||
|
||||
ColorButton()
|
||||
{
|
||||
gcWhichSide =""; //initialize
|
||||
if(gnPrimFace & 0x01) //check to see whether it is odd (all "right" buttons) - faces start at 0 so all odd numbers are right buttons
|
||||
{
|
||||
gcWhichSide = "RIGHT" ; // odd number
|
||||
}
|
||||
else //or even (all "left" buttons
|
||||
{
|
||||
gcWhichSide = "LEFT"; // even number
|
||||
}
|
||||
integer nPrimCount = 1; //the first button group prim will be 2 (since the backboard is the first prim), When the loop starts 1 is incremented to 2
|
||||
integer nFaceCount = -1; //the first face of a button group will be 0. When the loop starts -1 is incremented to 0.
|
||||
do //cycle through each prim (each button group)
|
||||
{
|
||||
nPrimCount=nPrimCount + 1;
|
||||
do //cycle through each face (contained on each prim)
|
||||
{
|
||||
nFaceCount=nFaceCount+1;
|
||||
if((nPrimCount==gnPrimNo) && (nFaceCount==gnPrimFace)) //if this is the button being pressed
|
||||
{
|
||||
llSetLinkPrimitiveParamsFast(gnPrimNo, [PRIM_COLOR, gnPrimFace, gvONColor, 1.0]); //color the button
|
||||
}
|
||||
else
|
||||
{
|
||||
if(gcWhichSide=="RIGHT")
|
||||
{
|
||||
if(nFaceCount & 0x01)//If it's odd it's a "right" button - remove the color from right buttons, but not left buttons
|
||||
{
|
||||
llSetLinkPrimitiveParamsFast(nPrimCount, [PRIM_COLOR, nFaceCount, gvOFFColor, 1.0]); //remove color from the button
|
||||
}
|
||||
}
|
||||
else //lLeftButtons
|
||||
{
|
||||
if(!(nFaceCount & 0x01)) //if it's a "left" button, remove the color from all left buttons but don't do that for right buttons
|
||||
{
|
||||
llSetLinkPrimitiveParamsFast(nPrimCount, [PRIM_COLOR, nFaceCount, gvOFFColor, 1.0]); //remove color from the button
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while(nFaceCount < 6); //6 faces for each prim
|
||||
nFaceCount=-1; //reset nFaceCount for each new prim
|
||||
}
|
||||
while(nPrimCount < 5); //4 prims
|
||||
}
|
||||
|
||||
|
||||
//The stop all function removes all animations from the avatar. In our testing, we found that on some occassions,
|
||||
//the avatar may have existing hand animations with a higher priority. In that case, the user would not be able
|
||||
//to use the HUD's hand poses. This takes care of that problem. Thanks to Fred Kinsei & Outworldz lsl file depository
|
||||
//for the first part of this snippet AND to RJ Source of Green Sky Labs who posted on SL Forums about a problem
|
||||
//with removing all anims and suggesting the "stand" solution.
|
||||
StopAll()
|
||||
{
|
||||
if(llGetPermissions() & PERMISSION_TRIGGER_ANIMATION)
|
||||
{
|
||||
list anims = llGetAnimationList(llGetPermissionsKey());
|
||||
integer len = llGetListLength(anims);
|
||||
integer i;
|
||||
for (i = 0; i < len; ++i) llStopAnimation(llList2Key(anims, i));
|
||||
llStartAnimation("stand"); //removing all anims can create problems - this sorts things out
|
||||
llOwnerSay("All finished: " + (string)len + llGetSubString(" animations",0,-1 - (len == 1))+" stopped.");
|
||||
llOwnerSay(" ");
|
||||
//llOwnerSay("All animations have been stopped.");
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
default
|
||||
{
|
||||
touch_start(integer detected)
|
||||
{
|
||||
//llOwnerSay("START *************");
|
||||
if (llDetectedKey(0) == llGetOwner())
|
||||
{
|
||||
integer i; //1 is always the rootprim of a linkset
|
||||
integer x = llGetNumberOfPrims() + 1; //number of iterations
|
||||
gnPrimNo = llDetectedLinkNumber(0);
|
||||
gnPrimFace = llDetectedTouchFace(0); //note that first face in a prim is 0 not 1
|
||||
list linkParamList = llGetLinkPrimitiveParams(gnPrimNo,[PRIM_NAME, PRIM_DESC, PRIM_TEXTURE,-1]);
|
||||
string cPrimName = llList2String(linkParamList,0); //returns the prim name of the set of buttons touched
|
||||
gnButtonStart = (integer)cPrimName; //cPrimName contains the starting number for that set of buttons
|
||||
gnButtonNo = gnButtonStart + gnPrimFace;
|
||||
|
||||
if ((gnPrimNo!=1) && (gnPrimFace < 6)) //Prim 1 is the root prim (backboard & we skip it). Also can't have any faces greater than 5 on the button prims
|
||||
{
|
||||
llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gnPrimFace==1)
|
||||
{
|
||||
glStopAll = TRUE;
|
||||
llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);
|
||||
}
|
||||
else
|
||||
{
|
||||
//llOwnerSay("Backboard touched");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
run_time_permissions(integer perm)
|
||||
{
|
||||
if (perm & PERMISSION_TRIGGER_ANIMATION)
|
||||
|
||||
if (glStopAll) //User pressed the Stop All Animations button
|
||||
{
|
||||
glStopAll=FALSE;
|
||||
StopAll(); //call the Stop all animations function
|
||||
}
|
||||
else //User pressed one of the buttons
|
||||
{
|
||||
list InventoryList;
|
||||
integer nCounter = -1;
|
||||
integer lFlag = FALSE;
|
||||
integer nTotCount = llGetInventoryNumber(INVENTORY_ANIMATION); // Count of all animations in prim's contents
|
||||
integer nItemNo;
|
||||
gcAnimation="";
|
||||
do //loop through the inventory - (Using a DO-WHILE loop since SL docs say that it is faster than WHILE or FOR)
|
||||
{
|
||||
nCounter++;
|
||||
gcAnimation = llGetInventoryName(INVENTORY_ANIMATION, nCounter); //note that first animation on list is 0 not 1
|
||||
nItemNo = (integer)gcAnimation; //Each animation has a number, ie: 02_HandRelaxed1
|
||||
if (nItemNo == gnButtonNo) //When the Animation number matches the button number
|
||||
{
|
||||
if(gcAnimation != "")
|
||||
{
|
||||
ColorButton(); //this runs the user defined function which turns the buttons on & off
|
||||
//it also returns a value for gcWhichSide
|
||||
|
||||
if(gcWhichSide=="RIGHT") //stop the previous animation on the same side as the new one
|
||||
{
|
||||
if(gcPrevRtAnim != "")
|
||||
{
|
||||
llStopAnimation(gcPrevRtAnim);
|
||||
}
|
||||
gcPrevRtAnim = gcAnimation;
|
||||
}
|
||||
else if (gcWhichSide == "LEFT")
|
||||
{
|
||||
if(gcPrevLfAnim != "")
|
||||
{
|
||||
llStopAnimation(gcPrevLfAnim);
|
||||
}
|
||||
gcPrevLfAnim = gcAnimation;
|
||||
}
|
||||
llStartAnimation(gcAnimation); //start the user's selected animation
|
||||
//llOwnerSay("We started: "+gcAnimation+" gcPrevLfAnim is: "+gcPrevLfAnim+" " + "gcPrevRtAnim is: "+gcPrevRtAnim);
|
||||
nCounter = nTotCount + 2; //by setting nCounter high, we exit the do-while loop
|
||||
lFlag = TRUE; //We found the animation
|
||||
}
|
||||
}
|
||||
}
|
||||
while(nCounter < nTotCount);
|
||||
|
||||
if (!(gnButtonStart==1 | gnButtonStart==7 | gnButtonStart == 13 | gnButtonStart ==19)) //error trapping
|
||||
{
|
||||
nItemNo = 100; //temporarily set this to 100 to trigger the proper error message
|
||||
lFlag = FALSE;
|
||||
}
|
||||
|
||||
if(! lFlag) //Error messages - explanations of common problems a user might have if they assemble the HUD or add their own animations
|
||||
{
|
||||
if(nItemNo == 0)
|
||||
{
|
||||
llOwnerSay("There's a problem. First check to make sure you've loaded all of the hand animations in the HUD inventory. There should be 24 of them. If that's not the problem, you may have used an incorrect name for one of the prims making up the HUD. Finally, double check to make sure that the backboard of the HUD is the last prim you linked (the root prim).");
|
||||
llOwnerSay(" ");
|
||||
}
|
||||
else if (nItemNo == 100)
|
||||
{
|
||||
llOwnerSay("Error. One or more of the button prims haven't been numbered correctly. They should be named: 01_, 07_, 13_, and 19_. Make sure you used zeros (0) and not O's.");
|
||||
llOwnerSay(" ");
|
||||
}
|
||||
else
|
||||
{
|
||||
llOwnerSay("Animation # "+(string)nItemNo + " was not found. Check the animations in the inventory of the HUD. When numbering the animations, you may have left this number out.");
|
||||
llOwnerSay(" ");
|
||||
}
|
||||
}
|
||||
|
||||
} //End of if(glStopAll)
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,22 @@
|
||||
Here's a summary of what's in this directory (Hand Pose Library and HUD) from Chimera Firecaster . . .
|
||||
|
||||
I’ve finished creating a series of Bento hand poses. There are 14 different poses, but the number of animation files resulting from the poses actually totals 42. The higher number is the result of creating 3 animation files for each pose: right, left and dual-hand versions. They have all been built from scratch, especially for Ruth in Blender.
|
||||
|
||||
The poses have been placed in two different sub-folders in GitHub. One folder contains all 42 of the animation files. The other folder is named “Script Ready Hand Pose Package” and it includes 24 animations (one right and one left) that are ready to be dropped in the Hand Pose HUD.
|
||||
|
||||
Among the files in GitHub, you will find a Blender file which contains the Ruth hand pose library. You can import the library to a Blender file and add your own animations or tweak the existing ones. They also provide a starting point for creating moving animations.
|
||||
|
||||
I did all of the animation and texture work, but I enlisted the help of Sundance to do most of the coding for the HUD which animates the hands in-world. (Why should I have all fun? Big grin.) Sundance was also kind enough to prepare two instructional PDF documents. (I owe him big time. Even bigger grin!) One document explains how to assemble the HUD and the other explains how to use the hand pose library and create your own poses.
|
||||
|
||||
To keep everything together, Sundance has uploaded everything in GetHub into one folder: Mesh / Sundance / Hand Pose Library & HUD
|
||||
|
||||
We’d appreciate it if you would test the HUD. We have the Hand Pose HUD set-up and ready to go at Ruth’s Second Life sandbox (http://maps.secondlife.com/secondlife/Gamma/21/76/1401). But we also need to have it tested in OpenSim as well. OpenSim testers will need to assemble it first, but with the instructions, it’s pretty easy to put together.
|
||||
|
||||
I expect in the future, for the sake of efficiency, the functions of the hand pose HUD will be combined with other Ruth functions, i.e. fingernails, etc. The design and layout of the HUD can be changed as needed, but this provides a solid starting point.
|
||||
|
||||
I would like to improve the clarity of the individual hand pose illustrations. (The current ones are screen saves from within Blender.) If any of you with an artistic bent have an alternative way of presenting them, I’d love to see your ideas.
|
||||
|
||||
One last thing. All of our testing in SL is showing that the Bento poses work fine. The Bento animation files are dual purpose and also include hand morphs for system hands. The morphs, however, are not working. I’m not sure if it’s a procedural problem on my part, or if it’s some sort of bug in Avastar. The procedure that I followed is included in the documentation (there’s even a picture!). If you have a chance, I’d appreciate if you would take a look and see if you might have a solution. Altho
|
||||
ugh the HUD is primarily for Bento hands, but I’d like to include the system hand morphs if possible.
|
||||
|
||||
Okay testers, have at it!
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user