Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
avatars:avatars [2024/04/03 21:05] – [Big Cat Avatar] kaahupahauavatars:avatars [2026/08/28 20:21] (current) – [Facial Expressions System] kaahupahau
Line 10: Line 10:
  
 Instead something useful for when you work with the Shork avatars or one day your own components:\\ Instead something useful for when you work with the Shork avatars or one day your own components:\\
-To import the meshes correctly into OpenSim / Second Life,  you need to select the following import settings:\\+To import the meshes correctly into OpenSim / Second Life,  you sometimes might have change the import settings. An example can be seen below:\\
 {{ :avatars:shork_import_settings.jpg?nolink| Mesh component import settings for OpenSim}} \\ {{ :avatars:shork_import_settings.jpg?nolink| Mesh component import settings for OpenSim}} \\
  
-Our models were made in the size of 28 mm scale (tabletop figurines). On average, we found that the "Scaling Factor" of 10 during import gives perfectly sized components for OpenSim / Second Life.\\ +Our first models was made in the size of 28 mm scale (tabletop figurines). On average, we found that the "Scaling Factor" of 10 during import gave perfectly sized components for OpenSim / Second Life.\\ 
-When you modify the scaling factor to a different value than 10 you'll get items outside the default avatars size. +By now, we try to prepare the packages more thoroughly. As result, you should always check an avatars pages instructionsIn case you're unsuretry importing the mesh parts in OpenSim, find out the perfect settings for your needs, and only then upload them in Second Life. \\ 
-For beginners we recommend to use the scaling factor 10, but when you know what you are doing and whyyou can change the import setting as to get the components directly in the desired size.\\+Scaling issues affect only the Avatars from Ironwood115 (Shark & Lion; Scaling factor x10) and from Silverim ( Dark Dragon and Light Dragon, scaling factor should be fixed ).
  
-So, as a summary in List form:\\ +Other steps typically include:\\ 
-  * Model Name: Give each component a meaningful name. Their internal names just aren't meaningful. +  * Model Name: Give each component a meaningful name. Their internal names just aren't meaningful. When it is a complete avatar pack, i.e. several components in one package, you have to rename the parts when you "Edit" => "Unlink" the parts
-  * Tab "Upload Options": Scale: Default Scaling factor is 10. For the head, this results in a "male" head. In the packaged versionsthe scaling factor for a female head, jaw and the right and left earfins was changed several times between 9.5 and 9.0.  In the end we adjusted the size inside OpenSim manually+  * Tab "Upload Options": Scale: Default Scaling factor is either given on the avatars pageor you can find out your optimum setting by trial-and-error in OpenSim.  
-  * Tab "Upload Options": Checkbox "Include textures": Per default, we marked the tickbox. Seriously, none of us knows what actually happens when we do not select it other than that we get white instead of black default meshes in the end. We got that one from a Youtube Video on how to import mesh into Second Life.+  * Tab "Upload Options": Checkbox "Include textures": Per default, we marked the tickbox. Seriously, none of us knows what actually happens when we do not select it other than that we get white instead of black default meshes in the end. We got that one from a Youtube Video on how to import mesh into Second Life. Some Avatar packs might try to include the textures, but we haven't found out yet how to make that automatic ourselves, so best to assume you'll have to upload the textures later on yourself and apply them.
  
  
Line 30: Line 30:
 {{ :avatars:eye_texture_settings.png?nolink |}}\\ {{ :avatars:eye_texture_settings.png?nolink |}}\\
 In the Texture tab of the Edit window,  "Horizontal Scale" should be equal 1 and "Vertical Scale" should be equal 2. In the Texture tab of the Edit window,  "Horizontal Scale" should be equal 1 and "Vertical Scale" should be equal 2.
-Again, it just works best this way. When you want a different effect or create your own eye textures, play with these values to find your desired effect.+Again, it just works best this way. When you want a different effect or create your own eye textures, play with these values to find your desired effect.\\ 
 +And yes, it is like this because we somehow made an error and gave up trying to fix it in March 2024. Rotating the image is easy enough and just works.
  
-==== Facial Expressions System ====+ 
 +====== Shork Industries Scripts ====== 
 + 
 +These scripts are the most up-to-date versions of the scripts we actively use: 
 + 
 +===== EarFlick Script - Left ===== 
 +<code> 
 +// Earflick / Sliding Door Script (with Euler-degree default rotation) 
 +// Author: Nebadon Izumi (modified 2026 for Earflick function by Yavannah Halostar @ OSGrid & @ Kitely) 
 +// Purpose: Accept object-editor Euler rotation in degrees and restore it on startup. 
 +// Notes: 
 +// - Provide the default rotation as an Euler vector in degrees exactly as shown 
 +//   in the object editor (format: <pitch, yaw, roll>). 
 +// - The script converts that Euler-degree vector to an LSL quaternion rotation 
 +//   using llEuler2Rot and applies it at state_entry so the object always 
 +//   returns to the configured default rotation when the script initializes. 
 + 
 +// --------------------------- CONFIGURATION --------------------------- 
 + 
 +// Rotation to apply when "open" (degrees and axis). 
 +// For right Ear, use these values: 
 +float RotationAngle = 45.0; // degrees to rotate 
 +vector RotationAxis = <-1, 0, 1>; // rotation axis 
 + 
 +// For left Ear, comment the above and uncomment these two lines instead: 
 +// float RotationAngle = 45.0; // degrees to rotate 
 +// vector RotationAxis = <0, -1, 1>; // rotation axis for left ear 
 + 
 +float Timer = 1.0; // how long the ear stays "open" before closing (seconds) 
 + 
 +// Sound settings (leave empty string "" to disable) 
 +string OpenSound = ""; // opening sound 
 +float OpenVol = 1.0; // opening volume 
 +string CloseSound = ""; // closing sound 
 +float CloseVol = 1.0; // closing volume 
 + 
 +// --------------------- DEFAULT ROTATION OPTIONS ---------------------- 
 +// Provide the default rotation as Euler angles in degrees exactly as shown 
 +// in the object editor. Example: <0.0, 0.0, 90.0> 
 +// 
 +// Set UseHardcodedDefault = TRUE to use DefaultEulerDeg below. 
 +// Set UseHardcodedDefault = FALSE to auto-detect the current rotation at startup. 
 +integer UseHardcodedDefault = TRUE; // TRUE = use DefaultEulerDeg; FALSE = auto-detect 
 + 
 +// Paste the editor Euler vector here (pitch, yaw, roll in degrees). 
 +// Example for 90 degrees around Z axis as shown in the editor: <0.0, 0.0, 90.0> 
 +vector DefaultEulerDeg = <0.0, 0.0, 90.0>; 
 + 
 +// --------------------------- INTERNALS ------------------------------- 
 +rotation StartRot;         // the rotation considered "closed" / default 
 +rotation RotationOffset;   // rotation to apply when "open" 
 +integer Open = 0;          // 0 = closed, 1 = open 
 + 
 +// Helper: degrees to radians 
 +float DEG2RAD = 3.14159265359 / 180.0; 
 + 
 +default 
 +
 +    state_entry() 
 +    { 
 +        // Determine StartRot from either the hardcoded Euler degrees or the current rotation 
 +        if (UseHardcodedDefault) 
 +        { 
 +            // Convert the editor-style Euler degrees to radians and then to a quaternion 
 +            // llEuler2Rot expects a vector of radians in the order <pitch, yaw, roll>. 
 +            StartRot = llEuler2Rot(DefaultEulerDeg * DEG2RAD); 
 +        } 
 +        else 
 +        { 
 +            // Auto-detect the current local rotation and treat it as the default 
 +            StartRot = llGetLocalRot(); 
 +            // Keep DefaultEulerDeg consistent for debugging; convert StartRot back to Euler 
 +            // Note: llRot2Euler returns radians; convert to degrees for DefaultEulerDeg 
 +            DefaultEulerDeg = llRot2Euler(StartRot) / DEG2RAD; 
 +        } 
 + 
 +        // Immediately set the object's rotation to the default rotation. 
 +        // This ensures that if the script was interrupted mid-rotation, 
 +        // the object will be restored to its intended default on initialization. 
 +        llSetLocalRot(StartRot); 
 + 
 +        // Pre-calc the rotation offset to apply when opening. 
 +        RotationOffset = llAxisAngle2Rot(RotationAxis, RotationAngle * DEG2RAD); 
 + 
 +        // Ensure the "open" flag is consistent with the closed StartRot. 
 +        Open = 0; 
 +    } 
 + 
 +    // Touch toggles the ear open/closed 
 +    touch_start(integer num) 
 +    { 
 +        Open = !Open; // toggle state 
 + 
 +        if (Open) 
 +        { 
 +            if (OpenSound != "") llTriggerSound(OpenSound, OpenVol); 
 +            // Apply the offset relative to the stored StartRot (default). 
 +            llSetLocalRot(StartRot * RotationOffset); 
 +            llSetTimerEvent(Timer); 
 +        } 
 +        else 
 +        { 
 +            if (CloseSound != "") llTriggerSound(CloseSound, CloseVol); 
 +            // Return to the stored StartRot (default). 
 +            llSetLocalRot(StartRot); 
 +            llSetTimerEvent(0); 
 +        } 
 +    } 
 + 
 +    // Collision also toggles the ear open/closed 
 +    collision_start(integer num) 
 +    { 
 +        Open = !Open; 
 + 
 +        if (Open) 
 +        { 
 +            if (OpenSound != "") llTriggerSound(OpenSound, OpenVol); 
 +            llSetLocalRot(StartRot * RotationOffset); 
 +            llSetTimerEvent(Timer); 
 +        } 
 +        else 
 +        { 
 +            if (CloseSound != "") llTriggerSound(CloseSound, CloseVol); 
 +            llSetLocalRot(StartRot); 
 +            llSetTimerEvent(0); 
 +        } 
 +    } 
 + 
 +    // When rezzed, reset the script so state_entry runs and the object 
 +    // is restored to the default rotation. 
 +    on_rez(integer param) 
 +    { 
 +        llResetScript(); 
 +    } 
 + 
 +    // Timer closes the ear after Timer seconds 
 +    timer() 
 +    { 
 +        if (CloseSound != "") llTriggerSound(CloseSound, CloseVol); 
 +        llSetLocalRot(StartRot); 
 +        llSetTimerEvent(0); 
 +        Open = 0; 
 +    } 
 +
 + 
 +</code> 
 + 
 +===== EarFlick Script - Right ===== 
 +<code> 
 +// Earflick / Sliding Door Script (with Euler-degree default rotation) 
 +// Author: Nebadon Izumi (modified 2026 for Earflick function by Yavannah Halostar @ OSGrid & @ Kitely) 
 +// Purpose: Accept object-editor Euler rotation in degrees and restore it on startup. 
 +// Notes: 
 +// - Provide the default rotation as an Euler vector in degrees exactly as shown 
 +//   in the object editor (format: <pitch, yaw, roll>). 
 +// - The script converts that Euler-degree vector to an LSL quaternion rotation 
 +//   using llEuler2Rot and applies it at state_entry so the object always 
 +//   returns to the configured default rotation when the script initializes. 
 + 
 +// --------------------------- CONFIGURATION --------------------------- 
 + 
 +// Rotation to apply when "open" (degrees and axis). 
 +// For right Ear, use these values: 
 +float RotationAngle = 45.0; // degrees to rotate 
 +vector RotationAxis = <1, 0, -1>; // rotation axis 
 + 
 +// For left Ear, comment the above and uncomment these two lines instead: 
 +// float RotationAngle = 45.0; // degrees to rotate 
 +// vector RotationAxis = <0, -1, 1>; // rotation axis for left ear 
 + 
 +float Timer = 1.0; // how long the ear stays "open" before closing (seconds) 
 + 
 +// Sound settings (leave empty string "" to disable) 
 +string OpenSound = ""; // opening sound 
 +float OpenVol = 1.0; // opening volume 
 +string CloseSound = ""; // closing sound 
 +float CloseVol = 1.0; // closing volume 
 + 
 +// --------------------- DEFAULT ROTATION OPTIONS ---------------------- 
 +// Provide the default rotation as Euler angles in degrees exactly as shown 
 +// in the object editor. Example: <0.0, 0.0, 90.0> 
 +// 
 +// Set UseHardcodedDefault = TRUE to use DefaultEulerDeg below. 
 +// Set UseHardcodedDefault = FALSE to auto-detect the current rotation at startup. 
 +integer UseHardcodedDefault = TRUE; // TRUE = use DefaultEulerDeg; FALSE = auto-detect 
 + 
 +// Paste the editor Euler vector here (pitch, yaw, roll in degrees). 
 +// Example for 90 degrees around Z axis as shown in the editor: <0.0, 0.0, 90.0> 
 +vector DefaultEulerDeg = <0.0, 0.0, 90.0>; 
 + 
 +// --------------------------- INTERNALS ------------------------------- 
 +rotation StartRot;         // the rotation considered "closed" / default 
 +rotation RotationOffset;   // rotation to apply when "open" 
 +integer Open = 0;          // 0 = closed, 1 = open 
 + 
 +// Helper: degrees to radians 
 +float DEG2RAD = 3.14159265359 / 180.0; 
 + 
 +default 
 +
 +    state_entry() 
 +    { 
 +        // Determine StartRot from either the hardcoded Euler degrees or the current rotation 
 +        if (UseHardcodedDefault) 
 +        { 
 +            // Convert the editor-style Euler degrees to radians and then to a quaternion 
 +            // llEuler2Rot expects a vector of radians in the order <pitch, yaw, roll>. 
 +            StartRot = llEuler2Rot(DefaultEulerDeg * DEG2RAD); 
 +        } 
 +        else 
 +        { 
 +            // Auto-detect the current local rotation and treat it as the default 
 +            StartRot = llGetLocalRot(); 
 +            // Keep DefaultEulerDeg consistent for debugging; convert StartRot back to Euler 
 +            // Note: llRot2Euler returns radians; convert to degrees for DefaultEulerDeg 
 +            DefaultEulerDeg = llRot2Euler(StartRot) / DEG2RAD; 
 +        } 
 + 
 +        // Immediately set the object's rotation to the default rotation. 
 +        // This ensures that if the script was interrupted mid-rotation, 
 +        // the object will be restored to its intended default on initialization. 
 +        llSetLocalRot(StartRot); 
 + 
 +        // Pre-calc the rotation offset to apply when opening. 
 +        RotationOffset = llAxisAngle2Rot(RotationAxis, RotationAngle * DEG2RAD); 
 + 
 +        // Ensure the "open" flag is consistent with the closed StartRot. 
 +        Open = 0; 
 +    } 
 + 
 +    // Touch toggles the ear open/closed 
 +    touch_start(integer num) 
 +    { 
 +        Open = !Open; // toggle state 
 + 
 +        if (Open) 
 +        { 
 +            if (OpenSound != "") llTriggerSound(OpenSound, OpenVol); 
 +            // Apply the offset relative to the stored StartRot (default). 
 +            llSetLocalRot(StartRot * RotationOffset); 
 +            llSetTimerEvent(Timer); 
 +        } 
 +        else 
 +        { 
 +            if (CloseSound != "") llTriggerSound(CloseSound, CloseVol); 
 +            // Return to the stored StartRot (default). 
 +            llSetLocalRot(StartRot); 
 +            llSetTimerEvent(0); 
 +        } 
 +    } 
 + 
 +    // Collision also toggles the ear open/closed 
 +    collision_start(integer num) 
 +    { 
 +        Open = !Open; 
 + 
 +        if (Open) 
 +        { 
 +            if (OpenSound != "") llTriggerSound(OpenSound, OpenVol); 
 +            llSetLocalRot(StartRot * RotationOffset); 
 +            llSetTimerEvent(Timer); 
 +        } 
 +        else 
 +        { 
 +            if (CloseSound != "") llTriggerSound(CloseSound, CloseVol); 
 +            llSetLocalRot(StartRot); 
 +            llSetTimerEvent(0); 
 +        } 
 +    } 
 + 
 +    // When rezzed, reset the script so state_entry runs and the object 
 +    // is restored to the default rotation. 
 +    on_rez(integer param) 
 +    { 
 +        llResetScript(); 
 +    } 
 + 
 +    // Timer closes the ear after Timer seconds 
 +    timer() 
 +    { 
 +        if (CloseSound != "") llTriggerSound(CloseSound, CloseVol); 
 +        llSetLocalRot(StartRot); 
 +        llSetTimerEvent(0); 
 +        Open = 0; 
 +    } 
 +
 +</code> 
 + 
 + 
 +===== Tailwiggle Bunny ===== 
 + 
 +<code> 
 +// Tail Wiggle Script for OpenSimulator 
 +// Default rotation: <0,0,90> 
 +// Random wiggles every 30...120 seconds 
 +// Touch = interrupt and excited wagging 
 + 
 +rotation gBaseRot; 
 + 
 +integer gBusy = FALSE; 
 +integer gTouched = FALSE; 
 + 
 +float DEG2RAD = PI / 180.0; 
 + 
 +//--------------------------------------------------------- 
 + 
 +rotation RotOffset(float x, float y, float z) 
 +
 +    return llEuler2Rot(<x,y,z> * DEG2RAD); 
 +
 + 
 +//--------------------------------------------------------- 
 + 
 +ResetTimer() 
 +
 +    llSetTimerEvent(10.0 + llFrand(50.0)); 
 +
 + 
 +//--------------------------------------------------------- 
 + 
 +SetBaseRotation() 
 +
 +    llSetRot(gBaseRot); 
 +
 + 
 +//--------------------------------------------------------- 
 + 
 +RotateRelative(float x, float y, float z) 
 +
 +    llSetRot(gBaseRot * RotOffset(x,y,z)); 
 +
 + 
 +//--------------------------------------------------------- 
 + 
 +DoNormalSequence() 
 +
 +    integer horizontal = (llFrand(2.0) < 1.0); 
 + 
 +    integer angle; 
 + 
 +    if (llFrand(2.0) < 1.0) 
 +        angle = 15; 
 +    else 
 +        angle = 30; 
 + 
 +    if (horizontal) 
 +    { 
 +        integer i; 
 + 
 +        for(i=0;i<3;i++) 
 +        { 
 +            if(gTouched) return; 
 + 
 +            RotateRelative(0,0, angle); 
 +            llSleep(0.18); 
 + 
 +            if(gTouched) return; 
 + 
 +            RotateRelative(0,0,-angle); 
 +            llSleep(0.18); 
 +        } 
 +    } 
 +    else 
 +    { 
 +        integer i; 
 + 
 +        for(i=0;i<2;i++) 
 +        { 
 +            if(gTouched) return; 
 + 
 +            RotateRelative(angle,0,0); 
 +            llSleep(0.22); 
 + 
 +            if(gTouched) return; 
 + 
 +            RotateRelative(-angle,0,0); 
 +            llSleep(0.22); 
 +        } 
 +    } 
 + 
 +    SetBaseRotation(); 
 +
 + 
 +//--------------------------------------------------------- 
 + 
 +DoTouchSequence() 
 +
 +    integer i; 
 + 
 +    for(i=0;i<5;i++) 
 +    { 
 +        RotateRelative(0,0,30); 
 +        llSleep(0.12); 
 + 
 +        RotateRelative(0,0,-30); 
 +        llSleep(0.12); 
 +    } 
 + 
 +    SetBaseRotation(); 
 +
 + 
 +//--------------------------------------------------------- 
 + 
 +default 
 +
 +    state_entry() 
 +    { 
 +        gBaseRot = llEuler2Rot(<0.0,70.0,0.0> * DEG2RAD); 
 + 
 +        SetBaseRotation(); 
 + 
 +        ResetTimer(); 
 +    } 
 + 
 +    on_rez(integer n) 
 +    { 
 +        llResetScript(); 
 +    } 
 + 
 +    timer() 
 +    { 
 +        if(gBusy) 
 +            return; 
 + 
 +        gBusy = TRUE; 
 +        gTouched = FALSE; 
 + 
 +        DoNormalSequence(); 
 + 
 +        gTouched = FALSE; 
 +        gBusy = FALSE; 
 + 
 +        ResetTimer(); 
 +    } 
 + 
 +    touch_start(integer total_number) 
 +    { 
 +        gTouched = TRUE; 
 + 
 +        SetBaseRotation(); 
 + 
 +        gBusy = TRUE; 
 + 
 +        DoTouchSequence(); 
 + 
 +        gTouched = FALSE; 
 +        gBusy = FALSE; 
 + 
 +        ResetTimer(); 
 +    } 
 +
 +</code> 
 +====== Facial Expressions System ======
  
 Facial expressions are provided by a scripted component, named "Eyecontroll (linkset)", we got from one of our supporters in OpenSim:\\  Facial expressions are provided by a scripted component, named "Eyecontroll (linkset)", we got from one of our supporters in OpenSim:\\ 
Line 49: Line 502:
   * [[https://pixabay.com| Pixabay]] for the wonderful royalty free content library.   * [[https://pixabay.com| Pixabay]] for the wonderful royalty free content library.
  
 +Note: The Expression system is currently only available in OpenSim.
  
 ---- ----
  
-Here is the list of the available and planned avatars from Shork Industries for OpenSim. +For the already deployed avatars, check the pages listed on he left beginning with "Avatar_" or "Avatars_".\\ 
-Some may be available in Second Lifetoo. +You may laugh, but we forgot to define exactly how our concurrent documentation processes should actually name the pages, so, as a result we had two people working on it - and two different naming conventions as a result.\\ 
- +Learn from it for your own projects.
- +
-==== Shark Avatar ==== +
-[[:avatars:avatars_shark|Detail page Shark avatars]] \\ +
-Also called "Shork Shark" or various other names, various species.\\ +
-Status: 100% (deployed to Wright Plaza on 2023-10 and on Shork Island). Also deployed to Second Life at Region Davros in "Japan Hiroba" and "Tabidachi Mall"; NCI Kuula in Kuula and at the Freebie Mall at the GNC Strandclub in "New Berlin GNC".\\ +
-Version 2.0 was deployed on 2024-01-28 and is considered feature complete. Additional / updated textures will be rolled out here or as separate update packages inside OpenSim.\\   +
-Primary Creator(s):  Ironwood115 @ Discord  / [[https://x.com/ironwood115?t=DlIoq_XKfac7kwAdFbJNkQ&s=09|X-formerly-known-as-Twitter]] \\ +
-Commissioning party: aries_quitex @ Discord \\ +
-Features: Full Perm, UV Maps, easy to mod;  moving eyes, blinking eyes (OpenSim Only!), different sets of fins and tail\\ +
-Desired, but missing features: Tail animation,  ear animation\\+
  
 +Below is the list of the still outstanding, but already planned avatars from Shork Industries for Open Simulator.
 +Some may be available in Second Life, too.
  
 +**Birds:**
 +  * Eagle
 +  * Owl
 +  * Blue-footed Boobie
  
-==== Enhanced Shark Avatar ==== +**Vulpines:** 
-StatusUnknown / Cancelled until further note\\ +  * Redfox 
-Creator(s): Juancho Renfold (SL)\\ +  * Arctic Fox 
-Commissioning party: kaahupahau Resident @ SL / Kaahupahau Sharpfang @ OS\\ +  * Fennec
-Features: Blinking eyes, swishing tail, talking jaw\\+
  
-==== Big Cat Avatar ==== +**Canines:** 
-[[:avatars:avatars_big_cat|Detail page Big Cat avatars]] \\ +  * Dalmatian 
-Status: 100% comlete and deploying\\ +  * Golden Retriever 
-Primary Creator(s):  Ironwood115 @ Discord  / [[https://x.com/ironwood115?t=DlIoq_XKfac7kwAdFbJNkQ&s=09|X-formerly-known-as-Twitter]] \\ +  * Husky/Malamute 
-Secondary Creator(s): \\ +  * German Sheperd 
-Commissioning party: aries_quitex @ Discord, Yavannah Halostar @ OpenSim, Kaahupahau Sharpfang @ OpenSim\\ +  * Border Collie
-Features: Full Perm, UV Maps, easy to mod; moving eyes, different sets of tails for different poses. TalkJaw script, Blinking eyes  \\ +
-Desired, but missing features: tail animation,  ear animation\\+
  
 +**Lupine:**
 +  * Jackal
 +  * Coyote
 +  * North American Wolf
 +  * Timber Wolf
  
-==== Dragon Avatar ==== +**Big Cats:** 
-[[:avatars:avatars_dragon|Detail page Dragon avatars]] \\ +  * Lynx 
-Status: Finalizing\\ +  * Cheetah
-Primary Creator(s): [[https://www.furaffinity.net/user/silverim/|Silverim @ FA]] \\ +
-Commissioning party: Aries @ FA ; Nichelle Valois @ OSGrid ; Ralgar Snowflake @ Kik \\ +
-Features: Full Perm, UV Maps, easy to mod; moving eyes: jawTalk, blinking eyes, white & black skin sets\\+
  
-==== Crocodile Avatar ==== +**Equine:** 
-[[:avatars:avatars_crocodile|Detail page Crocodile avatars]] \\ +  * Palomino Texture, Brown Texture, White Texture 
-Status: \\ +  * "Anthro MLP" style equine Pink, Yellow, Blue, Black, White, Violet, Green )
-Primary Creator(s):\\ +
-Commissioning party:\\ +
-Features:\\+
  
 +**Lapine:**
 +  * Alternative Bunny Textures: Grey, Black, White, Mixed
 +  * Angora Bunny ( Floofy Bunny )
  
-==== Canine Avatar ==== +**Reptiles:** 
-[[:avatars:avatar_canine|Detail page Canine avatars]] \\ +  * Gecko Various colors 
-Status: \\ +  * Giant girdled lizard 
-Primary Creator(s):\\ +  * Comodo Dragon 
-Commissioning party:\\ +  * Sand Goanna
-Features: Husky / Malamute, German Shepherd, Golden Retriever, Dalmatian, Border Collie, Wolves (Timberwolf, ...) \\+
  
-==== Fox Avatar ==== +**Amphibians:** 
-[[:avatars:avatar_fox|Detail page Fox avatars]] \\ +  * Frog Various Species
-Status: \\ +  * Salamander 
-Primary Creator(s):\\ +  * Axolotl
-Commissioning party:\\ +
-Features: Arctic Fox, Fennec Fox, Red Fox, Black Fox\\+
  
-==== Bunny Avatar ==== 
-[[:avatars:avatar_bunny|Detail page Bunny avatars]] \\ 
-Status: \\ 
-Primary Creator(s):\\ 
-Commissioning party:\\ 
-Features:\\ 
  
Last modified: le 2024/04/03 21:05