Jump to content


  • Content Count

  • Joined

  • Last visited

Everything posted by animats

  1. Movement in world consists of moving and rotating the "root" point of the avatar around. Everything else is an animation. To the system which runs Second Life, an avatar is a "capsule", a cylinder with rounded end caps. How do teleports work? Each region of SL is run by a program in a computer in a data center in Arizona. There are thousands of computers there doing this, for the tens of thousands of regions. When you're moving within a region, the program for that region handles the avatar, and sends messages over the Internet to the viewer such as "Avatar, move to <124,354,45>". The viewer then does the graphics work to make that appear on screen. In the other direction, your arrow keys and mouse clicks are sent to the server so it knows what you're asking. When you do a teleport, the program for the region you are in sends all the info about your avatar to another computer in the data center, the one handling the region you are going to. The sending region computer tells your viewer to start talking to the server for the new region. The viewer makes that connection, and then you see your avatar in the new region. It's sort of like going to a new web page, although not really that similar.
  2. Triangles. Lots and lots of triangles. Triangles. This is what an avatar looks like underneath the textures. Underneath that, there's a "skeleton", with a set of "bones" and joints. The vertices, which are the points where the edges of the triangles meet, are connected to the skeleton so that they follow the movements of the bones. The bones move as the joints rotate. The joints rotate to follow animation files, which contain lists of times and positions to move the skeleton through "walk", "run", "sit", etc.
  3. New Babbage has grown, and added another sim! Progress marches on! I look forward to seeing what will be built there. Right now, it's bare ground.
  4. Many coastal houses in Bellesaria have both. I had to build a track and cradle arrangement to allow me to launch a boat from the shore, though; no docking space. The Bellesaria houseboats have dockage but no road connection. You can certainly find both on mainland, although such property tends to be expensive.
  5. I just rediscovered that problem. I'd expect it in mountainous terrain, but it showed up in a flat part of a cow pasture in Newt. Ground level tester 0.1 whispers: Hit #0: <193.00000, 126.60840, 58.60645> Ground (Walkable) Ground level tester 0.1 whispers: Closest point on navmesh: <193.003600, 126.555200, 58.091970> Ground level tester 0.1 whispers: Z error: 0.514477 It's a headache for llGetStaticPath, because that will insist it can't find the navmesh if the starting point is more than about 0.3m away from the navmesh. So you run llGetStaticPath from a ground level point and it won't work. Probably have to use llGetClosestNavPoint when llGetStaticPath returns a PU_FAILURE_INVALID_START status. Yet another obscure thing you need to know if implementing NPCs.
  6. The SL GO approach is reasonable, but not free to use. A Second Life viewer is running on a server somewhere, and the video output is streamed to the user. The tablet is just showing a video stream and passing keyboard and touch events to the server. Somebody has to pay for that server. Each client needs a server with a good GPU. So this gets expensive. There are commercial services which offer game streaming. They're not free. Such services have been offered for SL in the past, but they had a substantial cost per hour. However, server instances with GPUs are getting cheaper, so it may be worth looking at this again.
  7. Dawn run in Magdeburg Neustadt One of my animesh NPCs, running in a park at dawn. Magdeburg Neustadt has a large park winding through the town. I gave Cindi here a few waypoints, far apart, and she runs between them, avoiding obstacles. Fast. As usual, this isn't posed; it's a snapshot during testing.
  8. Do you have both parts set to the same alpha mode? Try "Alpha Blend" for both.
  9. New Babbage has an official winter season, and residents there are expected to provide snow. In spring, the Clockwinder announces the end of winter, and you have a week to make your snow go away. The look is quite nice, because it's consistent. Do any of the big private landlords have a similar seasonal theme? Bellesaria, though, doesn't have seasons that organized. A compromise might be some snow on the roof and some piles of shoveled snow around the property. Heavy snow right up to the property line, though, does look a little off. Now if you could talk a whole block into going in for a snow theme...
  10. The cloth physics there is good. The transitions between the moves in SFV are as bad as they were in the original. That must be a stylistic decision; it doesn't have to be that bad any more. It's much easier to have elaborate graphics in a game with only two hero characters always in the foreground. You know what the worst case graphics load is. SL's big problem with avatar rendering is that avatars are almost always in hero mode, even when they're far away. Avatars do have levels of detail, but the lower levels are usually awful and the viewer doesn't push them down to lower LODs much. Also, all parts of an avatar are normally at the same LOD, so that elaborate jewelry with filigree and engraving doesn't drop to a lower LOD when you're not looking at it in super close up. If SL could drop 20,000 triangle shoes to 200 triangles at 5 meters range, that would help a lot. Looking forward to progress from Project Arctan in this area.
  11. That looks incorrect. The list for keyframed motion is "relative position, relative rotation, time delay" by default. If you want position only, you have to provide KFM_DATA, KFM_TRANSLATION in the modes. And the PRIM_PHYSICS_SHAPE_TYPE info is obsolete; that was for pre-mesh viewers. It stops at the end for 3 seconds because you told it to stop at the end for 3 seconds. Change that last time to 0.100 second. KFM_LOOP is kind of interesting. It doesn't just do all the steps again. It instantaneously moves the object back to the starting position and runs the steps again. This has its uses; I use it in my escalators.
  12. Does that have a "finalize" feature which, when the build is complete, deletes all the scripts? Some of the other block systems do, and you want that, to get rid of scripts that will never run again.
  13. You can set up a parcel so that you have to pay to enter. That's a standard SL land feature, very rarely used.
  14. This looks like it was a fairly routine network outage at a data center. Big data centers are usually tied to several of the backbone Internet providers, and can switch if they have to, but apparently SL does not do this automatically. Routing changes can take a while to propagate as all the players come into agreement on the new routing. For a web site, that just means a few retries and a slow page load. LL has to be more cautious than web site operators - 30 seconds of connectivity loss and everyone is kicked out of the world. No, Linden Lab people coded and maintain Second Life. If you go to Server User Group, Viewer User Group, or Creator User Group, you can talk to the people who maintain it.
  15. With enough 64K programs... The end result uses about 3x as much memory as one big program, took about 4x as long to write and debug, and is slower. About a quarter of each program consists of the code to communicate with the other programs. I'd really like to be able to get more script memory, even if it cost some land impact. Doing it this way is just too hard.
  16. Or, notes on doing a large problem in too many little scripts. I've been coding an NPC system to replace SL pathfinding. It's mostly working at this point. Some things I've learned. Measuring memory Filling the 64K memory space for a script produces a "stack-heap collision" error. So it's useful to know how much you have left. llGetFreeMemory() is helpful but will be an underestimate until after a garbage collection. So the following snippet of code may be useful: // // needmem -- need at least this much free memory. Return TRUE if tight on memory. // integer needmem(integer minfree) { integer freemem = llGetFreeMemory(); // free memory left if (freemem < minfree) // tight, but a GC might help. { integer memlimit = llGetMemoryLimit(); // how much are we allowed? llSetMemoryLimit(memlimit-1); // reduce by 1 to force GC llSetMemoryLimit(memlimit); // set it back freemem = llGetFreeMemory(); // get free memory left after GC, hopefully larger. } if (freemem < minfree) // if still too little memory { return(TRUE); } return(FALSE); // no problem } This will reliably tell you if you're running low on memory, without forcing too many unneeded garbage collections. Keeping about 3000-4000 bytes free at the place where the program uses the most memory is a good idea. Remember that you always need enough free space for the biggest link message anyone can send you. Link messages Link messages are how multiple scripts talk to each other. They go into the event queue with other events for the script, and there's a limit of 64 events on the event queue. More than that, and events are "silently dropped". So scripts can't be busy for too long, or their event queue will fill up. Big jobs may have to be divided into incremental steps run from a timer event. This would be much easier if LSL had objects. Again, you get the link messages from everything in your prim, whether you want them or not. Remember that lists are copied when passed as a function parameter, so discard the irrelevant ones in the link message event before doubling their size with a function call. Packaging up data as JSON is useful. LSL has built in JSON marshaling, so you don't have to parse anything character by character. llMessageLinked(LINK_THIS, PATHPLANPREPPED, llList2Json(JSON_OBJECT, ["target",gPathprepTarget,"points", llList2Json(JSON_ARRAY,pts)]),""); The llList2Json function does all the type conversions for you, and handles all escape characters needed. Note that the array of vectors, pts, is automatically converted to a JSON array. link_message(integer status, integer num, string jsonstr, key id) { if (num == PATHPLANPREPPED) // if request for a planning job { key target = (key)llJsonGetValue(jsonstr,["target"]); // get target if pursue list points = llJson2List(llJsonGetValue(jsonstr,["points"])); // the preprocessed static path points integer len = llGetListLength(points); integer i; list gpts; // points as a list of vectors for (i=0; i<len; i++) { gPts += (vector)llList2String(points,i);} // convert to list of vectors ... Here's the receive side. llJsonGetValue will extract one value from the JSON string. That value comes in as a string, and has to be cast to the desired type. JSON arrays come out as a list of strings, and each value has to be converted to the desired type. That's what the FOR loop is doing. This is kind of clunky, but at least you're not parsing strings in LSL.
  17. Thanks. Power back on, internet connection back on, out of hotel. Three of my RL friends in rural areas are still running on generators, but none of them had to evacuate this year. Fixed Salli's problem The NPCs are now working well enough that it takes a day or two of testing to find the next bug.
  18. I wonder if this is related to the bug in llRotBetween. The math there is slightly off for rotations close to 180 degrees. This is documented on the wiki. I've run into this; the error is big enough to put an object at the high-coordinate end of a sim out of position by as much as 0.020m. It's not just roundoff error; that's only about one part in a million, or about 0.0003m. (24-bit floating point, remember. Also, it gets worse for large Z values.) If something internal is using the same code...
  19. The swim problem is kind of sad. A few weeks ago I was in Bay City, and a one-day old couple were trying to use a kayak in the Bay City canals. That's a nice way to go around SL. They were having a terrible time with control, though, and kept hitting the walls. The kayak had them doing a paddle animation, but with no paddles, probably because they didn't know how to attach them. Then one of the couple gave up, and stood. She then sank to the bottom of the canal and couldn't get out. I watched her struggle for a while, and then I IM'd "push PAGE UP". So she did, flew upward, hit the underside of a bridge, and couldn't maneuver out of there because she was now trapped by the bridge girders. Finally she got out, but not gracefully. This is when you realize that the SL defaults for new users could be better. Maybe the default AO should include swimming. And the Bay City canals should have stairs or a walkway along the sides, like real urban canals usually do. There really is no realistic way to get out of that situation, and that's bad game design.
  20. I feel like that today. I live in Silicon Valley and we lost power, probably for a week. I'm OK, but in a hotel with limited Internet access on a low end subnotebook. So I can't go in world. My NPCs have to go on without me. You can check on how they're doing at the Animats workshop in Vallone.. My NPCs IM me for major problems, and Kathi phoned home to report a bug. She should be in the obstacle course with three other NPCs. If someone would post a picture from there, I'd appreciate it
  21. I've backed off to Firestorm 6.2.4, but that's because FS broke the "Stop" feature for region crossings. I tried driving around the dirt roads of Bellesaria with a big truck with FS 6.3.2. The roads are not flat, and you roll some. Then, at a region crossing, you roll so bad you think you're going to roll over and try to steer out of it. Then you overcorrect. This is not fun.
  22. animats


    Now there's a bridge at Wilderness Point. (Still under construction; it needs a support prim at the region crossing; you fall through.) That connection hasn't been made yet. SSPE281 is still vacant. Paved road to dirt road connection, SSPE194. There are connections between the paved road and dirt road systems in enough places to allow driving around. The dirt roads are quite driveable. Drove this around for about fifteen minutes without problems. This is about as big a vehicle as can be driven comfortably there, because of the sharp turns. Motorcycles were easy. A dirt bike, a Jeep, or a short-bed pickup should work fine. Enjoy.
  23. animats


    There goes the neighborhood. Looking northeast from above my house on the west coast of Bellesaria.
  • Create New...