Synthetic Reality Forums Post New Topic  Post A Reply
my profile | directory login | register | search | faq | forum home

  next oldest topic   next newest topic
» Synthetic Reality Forums » Android Games » synSpace: Drone Runners » Meet synSpace: Drone Runners (Page 4)

  This topic comprises 5 pages: 1  2  3  4  5   
Author Topic: Meet synSpace: Drone Runners
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
TWEAKS, TWEAK STRINGS, and MAP INSTANCE DATA

I get closer to implementing map instance data, with the goals

* starmap defines the data it needs
* all players start with that
* moderator copy updates game state and pushes instance data to all players as it changes
* any play can save the current instance data (for this map) in a local file on their device.
* any moderator can load a previously saved file (and distribute the new instance data to the other players)

This should allow

* resuming play later, though multiplayer data is then cast upon the current players. Instance data is mostly GAME state, not individual player state. Still, the red team base belongs to the red player, whoever they happen to be.

* saving a favorite scenario/problem at an interesting point (before others have 'ruined' it :-) private instances used as personal terrarium/screen savers.

But what IS instance data? As a rule, I declare it is mostly "small arrays of float values" and largely centered on the concept of 'the tweak'

The synSpace game engine is already littered with dozens of 'tweak' values. (but not an organized tweak system) Each value is compiled to a fixed value (the default value) and the idea is then for the starmap to be able to override the values it wants to control, and leave the others alone.

So I have been taking baby steps into how Lua would do that. And it looks like the winner is:

game.setTweaks( "tweak string" )

Where a tweak string looks like this:

"1=2.3,4.5,1323,9=2873764.3"

The simplest tweak string is:

"45=-9.8"

Which means "tweak number 45 has the value -9.8"

If you add additional values, they are assigned to the following tweak numbers, so

"10=1.0, 2.0, 3.0"

would set tweak 10 to 1.0, tweak 11 to 2.0, and tweak 3 to 3.0

My thought is to organize the tweak id numbers (which then must never change after being documented on the web site somewhere) so that all the tweaks for the terrain are 'in a row' and all those for climate 'are in another row'

Then finally, by adding an equal sign, you can switch rows in the middle:

"10=441,102,37, 40=17,32,63, "

sets tweaks 10,11, and 12, then tweaks 40, 41 and 42, leaving the intervening tweaks alone.

This way, a starmap can define a complete planet terrain/climate with just a couple tweak strings (which are also easy to edit in the starmap file, and I might ultimately provide an ingame editor for these as well)

A tweak string might be one pieve of instance data for the map, so the map has a section of named instance data, like

data.twkTerrain="tweak string"
data.twkClimate="tweak string"

Where twkTerrain and twkClimate are names defined by the starmap and have no meaning to the engine, but the engine can store these values and jam them back into the lua memory (and then back into the engine as needed)

Other instance data might be

data.numVillages="46"

some sort of 'score' data of interest only to lua, and then there is some specialty data like

data.face1="icon data"
data.patch1="patch data"
data.music1="music data"

etc. Where the data is the encoded 'asset data' for the many asset types supported by the engine.

Plus some new ones, like a list of floats to define the "aeros" used by the flight simulator.

ANYWAY, getting closer to being non-vaporware. Persistent Critter Personalities are only a stone's throw away...

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
So, nothing to report to speak of, but I did add minimal support for Stereo placement of music (I'm thinking the BAND panel will eventually have a UI for placing instruments/patches, but I just added the infrastructure support for sending stereo samples to the speakers.

And, as it turns out, I had apparently misunderstood the documentation for android AudioRecord and AudioTrack. I had always found the buffers a little mysterious, but, as usual, there is no mystery at all, and I was nervous about all sorts of phantoms.

Bottom line, however, is my buffers have always been the wrong size, and it's interesting how well it has adapted to that. Now that part is ship shape, and I fantasize the 'audio lag' is maybe a little less than before. Still present, however, to the degree I think you can't generally play 'triplets' as you normally might.

Probably broke a lot of stuff in the vocoder (which only processes in mono), but I think it's mostly stable after stereo-i-fication.

The reverb is also still mono, and once the infra is solid, I still have to add official reasons for stereo, but if nothing else, I can use the note pitch to select stereo position (higher notes on the right, like a piano)

But in theory, I could place a BAND in world and then walk around and hear the individual instruments in different mix levels based on where I am standing. That feels slightly novel. (as opposed to a complete piece of music all from one spot in space (announcements))

Anyway, I'm busy failing at work, so no time to fail at home :-)

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
VEGETATION THOUGHTS

i IMplemented a location system where I can have up to a million 'fractally-generated' flora/fauna/whatever objects placed by the starmap (on each planet the map knows about)

Of course, no such objects exist yet, but I know one class of them will be vegetation (trees, bushes, pebbles) etc. These act both as 'ground clutter' and also as potential materials for the starmap's crafting system, if any.

While this system doesn't increase the number of things I could render (only the closest trees will be rendered, for example), it helps organize my thoughts, and it keeps things persistent. If I walk away until a tree is out of sight, then turn around, the same tree should appear in the same location.

My existing primitives look like they might handle a variety of tree shapes, but I would love to have a 'radius function' that created 'gnarled tree stumps/trunks'

And just because I am who I am, and am subject to subliminal signals unintentionally sent by my smarter friends (lookin' at you, JW), I am starting Yet Another System to handle it.

I do NOT have a good name for this, but basically I 'grow' the object, like this:

1.) start with a triangle (see, my other stuff starts with a square). For now, this starts as a flat triangle on the ground, rotated to some compass heading

3.) call my new recursive function with that starting triangle and a pointer to a basket of object properties (like the overall desired height and width of the growth, and its position on the ground in world coords)

4.) roll a D6 (great video: https://www.youtube.com/watch?v=54VJWHL2K3I)

5.) if it comes up zero (well, ok, 1) then you're done, just render this triangle. That would be a boring tree.

6.) if it is non-zero, then create a fourth point, forming a tetrahedron (that's a "pyramid" with a triangle bottom instead of a square bottom). The placement of this fourth point is my new 'radius function' and basically, for a tree, I try to grow 'up and out' while staying inside my object width and height constraints.

7.) using that new point, form three new triangles (the sides of the new 'pyramid')

8) recurse into the same routine, for each of those triangles.

Then each of those decide to either stop (emit their triangle), or continue recursing.

---

I actually do this as part of the render (I grow the tree again every frame) since that seems like it could be cool, but it rquires a repeatabe random number stream common to all tetrahedrons of the tree. Right now I am just passing in an array of 1024 random bits which I then consume as part of the recursion. I also limit the recursion depth, but even so, I am likely to reuse some of the same random bits for a close tree.

ANYWAY, it seems like it should be able to make interesting forms of a roughly dendritic nature...

But, of course, this is an ALIEN tree on an ALIEN world, so.... the more unique the biodome can be on every planet the better.

Though I guess that's two different random streams. Something for 'the world' that is true for all trees, plus the unique per tree 'character' of the individual decisions.

the world stuff may just have to be the material/colors and the general aspect ratio and size. But the 'radius' function here is wide open and could have all sorts of specializations (classic tree branches being an important one)

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
This 'million entry table' has me a little excited. (And it can be smaller, as needed by the starmap)

To break up the text in what promises to be a long blabber, I will paste in random screenshots that don't relate in particular :-)

 -

In most ways it's just a pre-computed table of random values, but:

* it's synched for all players (by a seed value distributed via the starmap)

* It's evenly distributed over the entire game map

* I have 'some obvious' meta data (also largely determined randomly) for each 'object' in the table.

* the game engine only knows object's by their id numbers, and some properties set by the starmap, bound to each id.

* the properties determine what the engine should do for each id, with regards to interactions with it, can it be harvested?, what resource does it yield? Do you collide with it? Can you walk on it? Can it be moved? (temporary animation that returns to original location?) Does it stand in for a critter? Any sort of critter? Only one antagonistic one? And, what message to send the script when something happens? (took damage, was destroyed, etc).

damage (applied by engine, reported to lua, debited by lua, lua commands removal upon destruction, engine removes object until told to restore it)

lua decides when enough damage has occurred, or to recharge the hit points. maybe the engine never sees the hit points. Plan for a situation where the engine knows nothing about hit points, but knows what message to send to lua when object N of type ID has been interacted with by tool T at the command of player P.

lua then reminds itself what that ID is, and if it's a tree, then looks up the damage points from a lua table, applies it to a lua table of hitpoints (only for active objects that have hitpoints), and decides when the tree has been chopped.

 -


lua then sends messages as needed to inform anyone else that cares, that this object has been chopped, and everyone animates it falling into a pile of lumber, and then being collected into the player's inventory.

Or maybe it just lies on the ground until someone wants to pick it up. Maybe trees die a natural death sometimes, when no one is around (forest fires from lightning)

When you walk around, you are always inside of one terrain cell (and I can easily find adjacent cells) so I have easy access to the meta data for all nearby objects, without having to scan the million entry table from top to bottom.

So, the meta data tells me for each tree, whether it was chopped down and harvested. That informs what I render (nothing, pile, or tree), and if the tree is naturally reoccurring, a time stamp of when it was re-seeded.

Alternately, if I cast some tree seed about, I can scan for all 'dead tree slots' in the nearby object data and consider turning one into a seedling, that grows over time into a full tree (maybe can't be harvested until full grown)

For fauna, the starmap can tell me "object id 35 is a standin for a critter, referred to as critter C within this starmap, and a separate lua table knows the configuration data for each critter populated in this way.

These assets from lua, do need to pass into the engine at some point (and be distributed between players). In addition to the existing asset distribution system, I want to provide this support for 'not quite assets' that are defined in the starmap itself and might not have formal asset ids

(but the starmap itself DOES have an asset id, which is crc checked to ensure all players have the same starmap (well, highly encourage, and then I will eventually have to have tools that let you self select the people you're willing to play with. sigh. I just have to avoid incentivizing negative behaviour.

To that end, let's call this form 'data' and note we need an API for setting game engine data from strings provided from lua.

game.setData( dataId, configurationString )

The game engine could have some default data pre-installed (like the cessna overcoat), but the starmap could overwrite it with this api call, or define new ones.

The dataId would be managed by the starmap, and the engine would probably provide a limited range of number values.... data 1 to 1000, say. And the map would decide which ones were AEROs, FACEs, SHELLs, CRITTERS, etc. And that assignment could vary from map to map, though obviously I would try to build in some standard support for the most popular.. um.. paradigms?


 -

lua would define object properties via the setTweaks command, I think. Again, with a base number, say '200' defining a range of tweaks associated with 'objects' So

game.setTweaks(200=47, 201=prop1,prop2,prop3,...)

Where "200=47" selects object 47 (of 1 million) as the current object, that will be affected by subsequent tweaks.

"201=prop1" sets the first object property to the value you like (a number)

If you don't provide the "20x=" and just add commas, you can assign properties 'in order' from the last one you called out. I like that part.

So one line of text like that would be sent from the script to the game engine, at time of script load, for each 'object id' that was to exist. Possibly overwriting a few default ids set up by the game engine to support lazy scriptwriters (me)

obviously, I should support strings inside of tweak values, I just balk at having to handle missing quotes or other syntax flaws. But I guess if I just reject a poorly formed string, I don't have to auto-fix it, just draw the author's attention to it.

These objects need a 'probabiity' assigned to them.. either "there is a P percent change of any given object being one of these" or maybe "there are only P of these in world"

So, when the map loads, and I get the new terrain fractal seed (from lua) and build the island, and populate the million object table (million virtual objects), when it comes time to set the id value for each object (including the value 0 which should mean 'unused' but maybe it still causes a little ground texture at the location), it rolls a die of the number of sides set by P, as it were, and thus are objects populated

More script hints are needed for things like "the probability of one of these occurring is also contingent upon the altitude, temperature, wetness, and surrounding objects (I am in the shadow of a big tree?), and I guess those should be also set in the per-object setTweaks call.

Then, when you are walking around, it considers all the nearby object, um nodes, gets their ID and meta data and renders something. If it's a critter spawn point, I guess it could statically render a critter skeleton at that point (seen from a distance, but not an actual animated critter yet), but I remember which of these critter objects has been seen recently, and can decide to spawn an actual critter at that location (and maybe I rendered nothing before then, or a gopher hole or something)

That critter then keeps track of each time it is rendered, and if it ever goes more than a minute of not being rendered, it updates its own meta data for any memory it wants to retain, and then suicides (um, returns to dataspace after backing itself up)

But if I walk through the woods, and pick up a pack of critters along the way, that follow me, and remain visible, I could have a swarm of critters around me.

The starmap would have to provide some basic critter facts as well (in the metadata for the id) like 'predator or prey', 'pheremone info', 'fearfulness' 'rpg stats', etc.

And some of that is used knowingly by the game engine (the pheremones, for example) and some of it is just regurgitated later back to the script in some message to help the script remember what was being talked about.

Always with the goal of leaving the 'story' inside of Lua. Only lua needs to know that I picked up the Everlasting Gobstocker of Destiny, or that it is the only weapon capable of destroying the big boss, but the game knows (via metadata) to send the message 'gob' whenever that weapon is used by the player.

as needed, the message may be forwarded to the moderator who has final determination of move-legality (but local script should also check things)

For the gobstocker... I would have one or more of these in inventory, and one equipped,

I would be on planet, near some opponent, and I have 'clicked on them' to set them as my target and my 'gob' button is glowing in anticipation.

I tap 'gob' and the game engine knows to automatically dim it and start a recharge (recharge time from id metavalue) before I can use it again.

Meanwhile, the 'gob' message is sent to local script, which probably decides immediately what the outcome should be (maybe the game engine even suggests something as part of the message), but all players should get this message and start the 'gob' animation if they are close enough to care.

If it's a fail/miss/dud one copy of the game should decide this and send a message to all about it. (I'm thinking each critter has a 'host' player, which is known to all players, and anyone can send a message on behalf of a critter, but it is only obeyed by copies of the game that agree that message came from the host.) So the host player (possibly the moderator, but maybe the player that caused the critter to spawn) decides if the attack was successful or not, and what 'rpg changes' (hit points, experience) need to adjust as a result.

In theory, this allows lua to control each attack in a battle, with the game engine never deciding how many hit points or what buffs/debuffs are pending

and I know WoS world developers were always asking for more control over battle dynamics.


 -


So, if I 'gob on a critter', I send the gob message to all players, but only the host player responds with the results, all other players accept this because it is from the critter's host, known to all.

the response message is sent to all immediately (within a moment of you 'casting the spell') and contains info about whether it failed, or how much damage, etc.) and whether the critter was destroyed as a result (hit point counts known only to lua, and official only on the host machine)

players receiving the result message decode it and create several game api calls to run animations and emit text "Samsyn sends the throatwobbler back to its home planet on the gobstocker" without needing to understand why. The result message might also describe any loot drops, but there would still need to be a loot message sent from the winner to claim the loot (and make it disappear from all players) if it's that kind of loot.

but again, this could now vary with the starmap and not be a large system mandated by the engine, just limited by the things the engine knows how to do.

For what you see, I hope to provide some sort of 'fractal flora' generator that defines some number of base 3D shapes you can bind to your object properties (all object id 47s use THIS model, but can vary its size within THIS range randomly, and randomly pick from THIS color set)

But eventually I will support simple skins (technically I already do!) and probably use the setDATA api for the starmap to declare some number of skins right inside the map, to be used on objects as needed. With their being code numbers for any geometric primitives (cube, sphere, etc) I provide, as well as custom stuff like the 'fractal gnarled tree trunk' code)

But simple. really simple.


 -


--
But right now, I am just trying to learn what feels appealing in a size/distribution sense. A tradeoff between too sparse (one tree every square mile) and too dense (can't see your opponent for all the trees in the way),

with some solutions being 'clearings' (applied by fractal lumberjacks during the world creation), and 'canopies' (still vaporware, but some form of auto-generated geometry to imply lush forests in the distance, informed by the actual million object table, but just once at world creation).

Maybe a high rez image for each terrain square, which are then composited in real time into an amalgam that covers multiple terrain squares in a single triangle. Again, still vaporware.

I think I also need to lean towards 'wide things are below and above eye height, but only skinny things predominate at eye height. maybe. so trees with wide bases and full canopies, but skinny trunks once you get to eye level (typical camera) and probably some 'make this object invisible when close to camera, or between camera and target'

but I hate that sort of coding (adds player restrictions, is usually CPU expensive, and provides little pleasure, even when it works correctly)

Well that's a lot of blabber!

[ 01-02-2021, 07:37 PM: Message edited by: samsyn ]

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Now that I blabber everywhere, it's even harder to remember what I have already blabbered about.

v1.08 no longer works on most phones, so I need to push 1.09 asap to have a working version in the store(s).

So I had to relearn how to make a signed release build (it's been over a year, and the process has changed ever so little that I have to completely re-learn how)

And now I am just trying to fix the biggest 1.09 bugs so as not to release something actually buggier than the previous version (which isn't buggy at all, per se, but needs to get on board with the new android permissions scheme)

Plus we had an earthquake (4.2 with epicenter about 10 miles from here). I assume that was somehoe related to aftershocks in Indonesia

So the first big bug I fixed was the 'often, when looking straight down, the screen turns black'

I knew roughly what was happening. Somewhere a 'divide by zero' was leaving some values set to "NaN" (not a number), and then if you don't check for that (and there is no exception for it since it is 'ok' in floats). And once you have a NaN, if you multiply or add it with any other number, the result is also a NaN, so I call it the "NaN Virus" which rapidly corrupts all your computations and eventually affects something that draws your attention.

In my case, that's the black screen.

Add to that the fact that the debugger often won't even hit break points, let alone do any profiling, but I have put together a handful of superstitions and now at least I get breakpoints half of the time.

ANYWAY, so working backwards from the 'first NaN seen' I was ultimately able to point the finger at

Matrix.setLookAt()

Yay, not my code! not my code! I do NOT check for a NaN result, as rule, but I DO check for zero before dividing, so I didn't want this to be my fault.

But it's still my fault. setLookAt builds a 4x4 view/projection matrix for you (the transform that defines your '3D camera' which allows you to view your simulated 3D world.).

It builds this matrix based on numbers you provide. You give: the XYZ of where the camera is, the XYZ of a point the camera is looking at (center of the screen), and a vector pointing 'up' which basically sets the camera 'ROLL' value (and in my case, I never let the camera roll)

So, I was lazy and just gave (0,0,1) (z axis is straight up in my world) and that worked fine.

Unless, you looked straight down. At that point, the FORWARD vector is straight down, and the UP vector is still straight up, so they are in line with each other (colinear) and setLookup gets a zero at some point of computing a couple cross products and doesn't throw any exceptions or return a boolean, it just sets some values in the array to NaN, and if you don't check all 16 entries for that, you might be screwed.

But we're not mindless children! We know exactly what circumstances will lead to this problem and w can easily avoid it.

In fact, since it is going to derive the full vector basis anyway, we only need an approximation of UP, but it should be 'camera UP' not 'world UP'

If you aim your camera straight down, then 'UP' is no longer to the sky, it is 'in front of you if you weren't bent over looking down at your camera'

Since in synSpace, the only waY that can happen is via the player-controlled 'camera pitch', I can know exactly when this happens, and could just snap to a 'more horizontal' UP when pitch was > 45 degrees.

To get that horizontal up, however, I could need the sine and cosine of the camera 'heading' (itself a bit of an unknown when pointing straight down). But in my case, heading and pitch are known exactly, and forced into a restricted range even, so 'horizontal up' is just

(X,Y,Z) = (sin(hdg), cos(hdg), 0)

And that would be good enough since setLookAt will do a cross product to get the real up vector.

but since I already had the pitch and heading sines and cosines, I can get a 'correct' up from

(X,Y,Z) = ( sin(hdg)*cos(pitch),
cos(hdg)*cos(pitch),
sin(pitch) );

again, I wouldn't do that if I had to Math.sin() every time!

I just update the values when the player actually steers the camera. (or the camera changes). Though sin() and cos() are not as slow as they used to be.

ANYWAY, once I gave it a horizontal-friendly up vector, the symptom immediately disappeared and I can look down all I like.

--

so then I could release it, right?

Well, no, then I noticed the 'belt inventory' buttons were flashing oddly, and not playing their four stage animation.

Looking into that found something dumb which I might have done elsewhere in my life. Starting with a 64 bit unsigned long measuring 'milliseconds since 1970 or so', I divide it by 250, to get a number that changes every quarter of a second. Then I modulus that number with 4 because that's how many frames of animation I have, and that should leave me with 0,1,2, or 3, which I can then use an as image number.

And that has worked for literally years (not new code), but now it was broken. I assumed by some change I made, but ultimately I was able to rule that out, and I had just done something stupid

int imageIndex = ((int)(msec/250))%4;

when I meant to do

int imageIndex = (int)((msec/250)%4);

and the value of 'msec' just gets bigger every millisecond and apparently has only recently increased to a value large enough that msec/250 is larger than can be held in an int, and I end up doing the modulus on a negative value, and the code has no image for a negative image index. ooops!

So I'm glad I caught that, and looked for other instances, but that seemed to be the only place (powerup images)

--

so THEN I could ship it, right?

Well, I have learned from past experience that if you push a release with known bugs, people will find those bugs and report them and then not report any other bugs, so you have to reply with "yeah, I already knew about that one, and even wrote about it in the release notes" but that is such a lame answer and you end up spending much more time documenting the bug than fixing it. Better to fix it.

So now I am just sanding off the roughest edges and wondering if maybe I will add just a little code to the tutorial map, just so you get a particular synchronized planet. Should you experimentally try to land.

And while I am at it, why would I push a version with the oldest bug in the world (animation system glues feet to ground and they can stretch for miles behind you as you walk).

And why does the cessna overcoat drift uphill, into the wind sometimes?

And shouldn't I try to make at least a couple official flora object 'models'?

And why isn't rain happening? Isn't the planet overheating? And why aren't the climate tweaks available to lua yet?

I literally have 30 pages of one-line 'things that need to be done' for what I envisioned as 1.09, and now I guess that's my vision for 1.10 and I need a quick vision for 1.09 other than 'bugfix'

And I would LIKE to have a working 'harvest mechanic' for harvesting flora objects, and a working inventory system to hold your spoils, and working map-storage to remember your inventory (for that specific map, all instances thereof)

so that won't happen, but it would be good to have specific objects for tree, bush, grass, rock, hut, factory, castle, etc.

OK, so, say I just had these primitives (cube, sphere, dome, vcylinder, and cone), but there was to create a 'set' made of these primitives placed nearby each other. So a box with four corner cylinders might be 'a castle'... with a 'stone' texture.

And some way up in lua to build these strings of numbers to describe each 'setpiece' and then other numbers to define 'sets' and then drop/pickup entire sets as needed. blow sets up... restore to default, etc.

or build the sets in world graphically, and then export the numbers to map instance data.

Well, none of that will happen for 1.09 either.

though having said "map data" and "map instance data" near each other, maybe those are good names.

"map data" represents what you have done on that map, from all the instances you have played it. So this would include most RPG elements like your max hit points, your character level (on this map), etc. This would include your wallet (local map currency), and inventory (the 256 stacks of things available on this starmap)

"map instance data" represents stuff about a particular instance of this starmap (including the starting instance data from the starmap itself, then modified by instance data for 'changes to that, since the instance started, up until the moment you saved the instance data to a file' It includes 'what buildings have been built, what trees have been cut, since this instance started. It does NOT include inventory or wallet.

I think each starmap has its own currency (with its own name) and can thus have complete control over that economy and can give/take that currency with abandon.

But the global currency (galactic credits) is earned at soem rate which is not controlled by the starmap, and cannot be taken from you by the starmap, but the starmap CAN offer things for sale in GC, and the player can decide whether or not that's worth doing.

"player storage" also exists, that transcends all starmaps. So it doesn't have any RPG in it per se, but it does have your GC balance and your grid-space stats (like #winsLosses)

The 'quest tokens' however, are 'map data' (not 'map instance data') so returning to the map in a new instance let's you resume your RPG stats where you left off.

So when I join a running instance, I get:

* my GC balance from 'player storage'
* my quest tokens from 'map data'
* my map currency from 'map data'
* my map inventory from 'map data'
* my RPG stats from 'map data'
* the starting map instance data from the starmap
* the list of world changes from 'map instance data' (via the moderator)

'map data' and 'player data' get stored automatically, but 'map instance data' (from the moderator, in general) can be manually saved to a local file, by any player, at any time, so they can resume this map in a new instance with these world changes, but with the 'current' map and player data (so credits spent in an instance are gone when you start a new instance, but credits NOT spent are still there.)

Yes, I think that's the clearest explanation of that yet.

I think the 'map data' (incl RPG values) hs to come FROM lua. so lua needs to maintain a full understanding of each player's RPG stats (and lus should share that as needed with other players, without the game engine needing to know about it)

Some things the engine will need to be told, and it will be Lua's responsibility to inform it. But as little as possible.

For example, if I want to cast a spell on another critter:

* via the UI I select my target critter, and click the appropriate attack button

* that tells lua "player casts SPELL on critter N"

* local lua then sanity checks the request, fetching detals about player, spell, and critter

* local lua decides if the spell will fail or not (maybe) and sends a fizzle or a casting message back to the engine (telling the engine which critter animates to play for a failed spell, or to start waving its hands for a spell that will work)

* maybe each request has to go to the moderator for approval, but probably not, individual fight actions can probably just be announced globally (local lua forwards original messaghe 'player cast spell on critter' and adds 'and it worked') so they can all start animating stuff as well, if it is visible to them.

* either local lua or moderator decides what the final result is and sends a message to all so they can animate the result, and update their copy of game state (critter now has 23 HP left)

* each critter has a 'host' and it is the host's job to decide when a critter has been destroyed. And then to announce that to all players and hand out loot.

probably not in 1.09 either :-)

--

The thing I was trying to get to was 'performance on Samsung is particularly sucky' and it would be great to do something about that.

I finally got the profiler to work (by reducing the size of my million entry table!) and was able to see that yes, Math.random() is horribly slow on the Samsung, as was Canvas.drawRect()

I think this also relates to device screen resolution. I limit the resolution of the 3D world (even added a NERD option for that), but grid-space is done at the full resolution of the device and there was a starting full screen drawRect (with alpha) that was burning about 50ms on the samsung. So I just got rid of it. grid space bleeds through a bit more than I'd like (like through the ocean....) but I can worry about that later.

Just doing that brought me from 6 fps to 10 fps, sort of. I've replaced ALL the calls to Math.random() with ThreadLocalRandom.current() which is much faster and works for me. Then I wrote a separate RNG for sequences I needed to be repeatable.

still very slow. maybe because of a high rez screen. maybe because of paranoid thread locking. But with profiler working, I can at least approach it deterministically!

ANYWAY, no excuse to hold on to 1.09 longer than One More Weekend.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Note To Myself:

code:
* INSTANCE DATA MODEL

Player Data (all maps, all instances)
saved only on player machine
GC balance
win/loss
chess rating

Map Data (per map, all instances )
quest tokens
map item inventory

Instance Data (per map, per instance)
game rules and state
baked in assets (FACEs CRITTERs..)
world modifications since instance start
can be saved by CLONING starmap 'with current instance data'

So, this removes the concept of 'saving instance data to a file' with 'clone the current starmap, but include the current instance data as the starting data for the map.

So rather than creating a new kind of asset file, iot would just inject some lines into the lua source... assignments like:

code:
  instanceData.thing1 = "actual data"
instanceData.thing2 = "actual data"
instanceData.thing3 = "actual data"

Then, if you started a new server session with that modified (cloned) starmap, it would start with THAT instance data instead (or some blend of the two maybe, like load all the original, and then load all the overrides)

I think that would make it slightly simpler to parse, and also be more securely stored in a database instead of a zillion files you have to micromanage.

Also, it's probably how you would develop the starmap in the first place (decorate 'in game' and then clone for publication)

Note that I would still need a button somewhere for 'save the current starmap to an actual file' for people who want to edit the actual script, and maybe even a way to import a starmap without disturbing your current instance data. (to pick up script changes without altering current assets baked into the map)

--

Getting closer.. it's just a big win to have simple names for these. Player and Map data are already covered, so I just need to clean up the details on instance data, which I think boil down to 'numbered strings' of 'engine-opaque' data, that only lua really knows what it is.

I need to, at map load time, inject the appropriate set of instance data strings, and then distribute them (moderator control) as they change during the game. Only Lua knows what each string is for, but the data payload is probably in a form the engine can at least partially decode. (the engine wants to keep a copy of the strings that it can access at 'clone' time, and which just remember the last setting that came from lua, or any manual editors involved)

So, I am thinking, the starmap designer thinks "Ok, let string 1 define the current planet, and let string 2 define a critter skeleton"

Then whenever the planet changed (new fractal, say) lua would craft a new 'string' (which would probably just be a 'setTweaks' command) and store it in its master copy of the table (in lua memory) and then call into the engine

game.setInstanceString(1, "the string")

so the engine would have a copy, and then send it to other players (from moderator to other players, I mean)

game.sendMessage(all, instance, 1, "the string" )

Each player receiving such a message would then

* validate it (from the mod, legal)
* store it in its own copy (lua table of strings)
* pass it to its own engine (engine copy of strings)
* "effectuate the change"

That last bit requires lua to know what string 1 was all about (setTweaks for planet), and then to invoke the specific game engine commands to apply that instance data (usually just a setTweaks command that takes the data text straight in)

But other than effectuate, I think lua can pretty much just have a single handler to distribute and cache these instance strings. And the engine is kept up to date so if can do a sensible CLONE WITH DATA command.

[ 01-23-2021, 07:47 PM: Message edited by: samsyn ]

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Well, still not released, sorry. I made some progress over the weekend, but found a few more bugs that would taint the release (the stick figure animator is broken at the moment)

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Well, I suspect I have removed enough bugs, but now I am left with a hollow feeling that there is no fun added.

It would pay the biggest dividends if I fleshed out the tweak values available to lua to set. Then 'fun' could be added via script. As it stands, if I do make a nice script, I will also have to release a new app that supports it, though I guess that's probably inevitable for awhile.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
whew, all released and working on all my devices, so fingers crossed. it's not clear if it updates itself or if you have to re-visit the store and select UPDATE.

And let's see if I can channel my blabbering correctly. in 'meet synspace', it is 'free blabber', but in 'v x.y release notes' it should mostly document specific developments, if any :-)

---

So, random free blabber about the 'game' on this new starmap. (Currently called "Utopia" and the bottom line is there is a planet, you can land on it, your goal is to terraform it in some ways, so as to make it pleasant for a particular set of critters.

But you clearly don't know what you're doing, and make many (instructive tutorially) mistakes along the way. My thought is that since you are comfortably at home on earth, holding the remote control which has connected you to a bio-synthetic critter on some planet out in our galaxy...

that perhaps you have somehow stepped into someone else's connection, and so everyone on the planet thinks you are this expert multiplanetary terraforming wizard contractor, and are paying you to do this.

but really, ... I don't know if another backstory makes me happy or not, but it seems to be what I generate the most of :-)

But more specifically, I know I want you to be able to tweak the atmosphere, and that critters will have specific atmosphere needs.

And that a large claim dome will manufacture the right kind of atmosphere, and 'leak' it out into the existing atmosphere, and change it.

And that the change is a color-mixing game (you know I love those) where the three primary colors (RGB) map to three gasses that sound reasonable, like oxygen (for mammals), co2 (for plants), and methane (for alien stuff)

blue has to be 'oxygen' (or whatever the mammal friendly gas is, might be Hydrogen?)

green feels more stinky to me (methane), but it's also the color of chlorophyl. I guess the client who has ordered the dome could call it chlorophyl, but it would still just be the green one' from the engine's point of view. Anyway, star map defines the three fun gas names, as needed.

But the engine (climate system) tracks changes in a set of counters (tweak values that are initially set by the starmap instance data, and hence changes persist with the instance)

Right now I just have a subset of these, but I think I am heading towards

code:
float molesRedGas;     // Carbon Dioxide
float molesGreenGas; // Methane
float molesBlueGas; // oxygen
float molesInertGas; // nitrogen

The starmap then sets these initially to whatever. I'm not sure if I need an inert gas or not, but I think it's convenient if 'pressure' is a function of just the inert gas, and that the colored gasses are always in much smaller amounts, but are biologically important all the same. So the amount of inert gas is a measure of how much atmo there is over all. So if the planet is a rocky asteroid, it should start with zero, and the sky should just be the black of space.

The starmap recomputes the sky color, based on changes to the gas amounts.

The starmap has a list of all the claim bubbles (instance data) out and about, and their current production rates. It runs a simulation (once a second or two) that works out the new RGB values and sets a tweak or two in the engine that actually controls how the sky renders (factoring in the current time of day and sun position)

I guess there should be devices you can obtain/craft to remove specific gasses as well. Though CO2 should be removed by helping the botanicals on the planet (maybe by improving hydration somehow... fertilizing.)

Or right, critter poop! Doesn't have to be graphic. I already have the engine spawn blades of grass wherever critters walk (still thinking about pathfinding and 'animal trails' and 'dirt paths' and 'paved roads' stuff. Some sort of spline-y thing driven from control points and automatically returning modified terrain elevation values and materials so nearby road is tesselated to small triangles and each triangle is then rendered entirely from either the ground texture or the road texture (but sadly, not a blend of both).

So yes, I should be formally tracking the 'nitrogen content' of each terrain cell and plants and animals interact with the dirt, and then let that influence crop production, and that then influences atmosphere gas distributions.

Big floral bloom burns all the CO2 and releases a bunch of O2 (and C in inventory from the harvested flora), and then all the plants die from lack of CO2, leaving more carbon around.

Eventually someone lights a match and the carbon and oxygen get back together, the CO2 skyrockets again, and the plants bloom again.

Only each time, the flora and fauna grow back a little differently. A little more tolerantly, maybe.

If the flora and fauna exhibit actual behaviors, then the cycle might reward some behaviours over others, leading to population dominance (game score)

Plus, you can always breed better critters, and hunt the less desirable ones. Everything is a bio synthetic, and is backed up in dataspace, so nothing really ever dies. This is also my explanation for the art flaw that the skeleton critters are always drawn on a layer above the 3D render, so they can never go 'behind' walls, trees, mountains, etc. But the REASON for that is that a bio-synthetic is BIO (has bones), but they are SYNTHETIC (and have a plasma glow that your display always shows, no matter what mass is between you.)

So if someday, some parts of the critter get an actual skin (like maybe a cylindrical head, with your current FACE icon rendered 'on the front'), then the triangles of that head WOULD disappear 'behind walls', but the skeleton bones would still be visible. It would be a game thing. "Look, this is the game with the glowing x-ray bones!"

and then I can say I did it on purpose. Actually, I *have* several half-baked solutions for the glowing bones, if I absolutely have to behave like a real object. I just assume they are more expensive than the lines, and actually 'less expressive' And if the lines are thick enough, whose to say they aren't thick 3D bones? (that are just glowy). Who is to say? It is impossible to know.

ANYWAY, each critter will have a 'perfect gas formula' for what it likes, and any differences from that lead to some discomfort and inefficiency in the critter's BIO values (some RPG stuff) ultimately affecting agility etc.

I think each critter remembers where it was born and assumes the air is good there, and will try to return to home if they can't get what they need from the atmo.

the claim dome should then also be a biosynth cloning factory where you have a cool genetic control panel and 'craft' critters with specific characteristics (maybe you are given one critter as a template and use the genetics machine to 'breed' it with local fauna, until you find a combination that thrives. That sounds game ish

Also, this would explain the lack of sex, since you just scan the living creatures and then use the computer to sequence something out of raw materials you have assembled.

But maybe you would implant in a real critter, so they could have babies in world. But mainly the babies would be something the starmap script would be simulating (game score)

At some point, I suppose a skeleton could be derived algorithmically, melding from the parents in some satisfyig way that you can somewhat predict (other than mutations.. have to have mutations)..

OK, so clearly I need to think up a fun control panel for the genetics mini-game. Then maybe you fly around and implant a bunch of local critters, using some sort of critter radar tuned to their pheremone signature.

* should show two critter genomes at once
* let you see where they line up
* let you slid things around until they line up better
* they might never line up (can't have a baby)
* they might line up in an imperfect way, but then the next generation can be lined up better (maybe)
* You can 'save' any experimental genome you like
* You can inject any genome into a captured host critter, and then track it in the field until it is born.....

no, the ones you make are born in a claim dome.

the starmap then tracks 'total critters of genome X' and just assumes they will breed in captivity inside the dome (OK, some sort of sex glyph to let you know conceptions are happening) a "+1" floating up into the air...

But just because you have caused the creation of a new species that now has millions of individuals, doesn't mean you actually see a million critters around. The million is just a number the starmap shares as your score.

But it is associated with the claim dome (which is also making food, which is also spreading outwards from the dome in some way, converting local flora to this new flora.

I think these are actually engine components (spread of atmosphere and food) with the starmap converting a small number of engine values into a fun text description of what's going on.

But the pheremones need to blend with this system, and BE the genome, determine predator vs prey, animal vs vegetable, organic vs mineral, preferredAtmoColor, poisonColor, foodColor, bodyShape, bodyScale

And I am determined that it all be shoved into a single unsigned 64 bit long, and that I call it a pheremone, no matter what it really is.

Some number of bits are reserved for the individual, but most bits are common to all critters of the same species.

THEN, I want a VQ brain (one per species, I think) that 'learns' from pheremones left behind. So if a wolf eats a bunny (so to speak), that sends out a signal in the form of a pheremone, which I probably something like "the pheremone of the wolf, the pheremone of the bunny, some bits that indicate what happened --- though I am tempted to say 'some bits of the pheremone can only be 'smelled' if the critter has been 'opened' (so to speak), so if I can smell the bunny's inside pheremones, then I know it was an unhappy ending for the bunny, and either that makes me hungry for a bunny, or afraid of a wolf, depending on what kind of pheremones I am made of. (I am also a predator that enjoys the smell of blood)(I am also a prey that enjoys the smell of hay)

(the flora objects would then also have their own sorts of pheremones, and their own BIO simulations that also affect the atmo (and this is again computed periodically by the starmap, based on its understanding of the plant health and distribution. Probably the engine sends a periodic flora updatw "there are 1234 trees" so the starmap doesn't have to know the state of each individual tree

I get pulled back and forth on that. There ARE things being simulated that are in the thousands, and those have to be done by the engine to make sense (they get rendered).

And the starmap has to know the simulation values to do its score computations and game over detection and such. But hopefully it doesnt have to know all the details, just info about the event that just happened. Let the engine provde its value, believe it or not based on game state, and advance the score engine appropriately (involving the moderator where needed, and dstributing the fin result (new sky color)

In specific, I walk up to a tree and decide to chop it down:

* the starmap provided hints that resulted in this tree being here, and that it supports the 'choppable' property (this was computed once at map load)

* the engine sees me get close to a choppable object, and presents a CHOP button, and the message that button should send, when pressed

* I press the CHOP button when I feel like it. U just send the message I was asked to send. But I append to that some details about the object I am chopping (floraId, height, color, etc), and I start an animation which triggers some sound effects and chopping begins.

* local script catches the message, grabs the details and has another chance to consider whether this should be allowed, but assuming it is, it just sends a message back to the engine "tree X has been chopped by player Y resulting in resource Z being added to inventory"

* maybe this is forwarded to all players, if they are sharing this resource (so they all see that tree disappear, but otherwise could still have their own copy of the tree, waiting for THEM to chop it down)

* engine receives the message, and changes the animations and such to the successful chopping and updates local inventory. tree disappears in a shower of wood and leave (brown and green triangles)

* button stays in cooldown until recharged (and also disappears if no nearby choppable objects remain)

Now, does the script have to know my inventory? I mean, the script defines all possible invenoty items (itemId) and I have a inventory stack for each of those, and the engine has to know how many I own (as a number in that stack slot)

The script needs to know, if it wants to check if it is legal for me to do something "you need 32 more sugar crystals to make that bottle of wine"

But if the script pre-registers all crafting recipes with the engine, then the engine could pre-check (based on numeric itemId, since the engine doesnt KNOW what an item is)

Then, the button that means "make me a cessna overcoat" just sends a message to the script that appends my inventory counts, just for the ingredients mentioned in the recipe for a cessna overcoat.

And if the script feels those counts are good enough, it sends a message back to the engine "Make that overcoat!" and the engine decrements the local inventory (which WILL be saved in the persistent map data for this map -- not the instance data), and starts whatever timer is needed, and places the construction request in the manufacturing queue.

Probably each building (claim dome to start with) has its own manufacturing queue (and maybe this is where reciples are stored... I mean, maybe the script predefines all possible 'units' and those which can make stuff have their recipes declared at that time. Then each instance of that unit has a manfacturing queue that can make a certain set of items at a particular rate.

for a realtime strategy game (Command and Conquer, Empyrion!)

But to start with, let my portable nano factory do all the manufacturing. Which means, at the time I tell "Ping" ("Nano"? "Pin"?) to make something, I need to also indicate 'where it should go' (so a building would just grow up at that spot, and the spot would have to be prevalidated to obey rules of overlapping and suitable foundation terrain...)

But yeah, I walk to where I want the building, I dial up the recipe on Ping, he says it needs a spot so and so big and highlights where he would place it. If I walk around, that highlight walks around with me, until I push the button, then the above message exchange takes place and the building eventually appears.

Yeah, something like that. I guess it would be easy enough to just render the building 'as if it were there' to fully preview it, and use free camera. Have to worry about 'drop to ground' 'float' or 'explicitly set altitude/heading/tilt'

Same mechanism in "super fun time power show" to let you pre-decorate a planet and get it into the map instance data.

OK, enough blabber for now, thank you!

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Hmm, if I have one VQ brain per species (instead of per critter), i think that makes the data manageable and results in critters with similar behaviours, which is probably useful if they are to become the 'battle units'

But then I don't have to be subtle about the pheremones. If a wolf eats a bunny, that very bunny can add one more engram to the collective brain on its way out, thus immediately informing all bunnies everywhere to avoid wolf pheremones.

Then, I can still use lingering pheremoones registered to terrain cells, so that other bunnies, fearing that pheremone, can avoid it if they sense it in a nearby terrain cell (and can go the other direction). So the immediate engram teaches the new fear of 'what', but doesn't tell you 'where', and that's left up to lingering smells left behind when any critter passes through a terrain cell.

So that could get fancy (list of the N most recent smells, that fade over time), or just simple (pheremone of the most recent critter in the cell)

So a 'learning event' (defined as adding an engram to the VQ) can just be applied by the engine for specific cases when they happen: "got hurt, got fed,.." so it knows which VQ table to add it to (the scary list, the friendly list, the delicious list, etc.) since a VQ brain is actually several brains, each answering one question (like: should I approach or flee or ignore this pheremone)

And I guess the delicious table would have to start empty and each species would test eat what it finds, and update the hive mind when poisoned or sated. (and plants also have pheremones in this system). Once it had some experience, it could play safe, or still be willing to try new things, while avoiding known-to-have-killed-others things.

I bet you could have a pretty interesting set of interactions with very few rules.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
okay, bringing that back to critter poop.

* critter eats some plant, his BIO remembers it
* as he walks around, he periodically drops an invisible little poop/seed combo that immediately starts growing.
* it is the seed of the last thing the critter ate
* if he lives a long time, he might drop more of these than if the first one kills him)

Hence, overtime, the plant population is converted from 'iincludes poison' to 'all the poison has been eaten and very little has been replanted, so most remaining plants are now safe'

very simple rule, indeed!

And, to be clear, the pheremone of the plant includes its major ingredients, and the pheremone of the critter includes its allergies/poisons, as well as its nutritious elements.

So the starmap populates the planet with 'red grass' which has a lot of Arsenic in its pheremone, and 'green grass' which is full of something nutritious (to this critter).

So there is no list of 'these foods are for this critter' and each critter can just match up the ingredients with its own peculiarities and we know if it is food or poison for this critter.

the first bunny has no food engrams in its hive mind, and eats the first thing it finds (red grass), starts pooping red grass seeds, but dies before doing that much. Another rabbit eats green grass and poops green seeds for an hour. And at this point the bunny hive brain has two engrams, so all bunnies can avoid red grass, and seek out green grass, but still eat yellow grass at least once.

And the way the engrams work, they will still poison themselves with red grass now and then, but the engrams will get strengthened as a result and eventually all bunnies will run from red grass. (or leave it alone).

Plus there will be evidence of bunny 'game trails' in the regions now seeded with green grass. (which is why I have critters plant seeds as they walk in the first place. In fact, the seed is dropped at the very poiint of their footstep and is a diagnostic for the walk animation :-)

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
getting close to implementnig the 'rpg battle system' which I hope will be a little more flexible than what I did in WoS, and give the starmap more control over everything.

To that end, the starmap must provide all names (like the name of currency, spell categories, etc) and the game engine has to know how to use 'standard attributes' no matter what they are named

So the engine will maintain my normal RPG values (level, maxHP, maxMP, STRength, WISdom, Stamina, Dexterity, AGIlity) plus some new ones like "foodColor" and "poisonColor" and "atmoColor" and "waterColor"

Then I have a new system called BIO which is more or less what was happening inside WoS Pokegatchis. Only now it is inside the critters themselves and is the main way they heal/recharge.

Food, air, and water are each made of ratios of three components (always red/green/blue) and your 'foodColor' is the 'perfect ratio of what the critter needs nutritionally. But food comes in its own colors and if you eat something with a mix of RGB, I keep track of 'total R eaten, total G eaten, etc) and 'digest it' over time, recharging your hit points

If you eat your perfect food mix, it recharges quickly, if you eat your perfect poison mix, it discharges rapidly (for the duration of the digestion, so if you eat a lot of poison, you will pass away) food and poison still work when the color is just 'close' but the further apart the colros are, the less effective.

Likewise you're trying to tune the atmosphere (or breed critters with different atmo needs) RGB and the ocean RGB as part of your terraforming goals.

ANYWAY, so RPG items are like your level-earned maximum values, while BIO items are more transient (energy in your blood, food in your belly), and change in real time and are affected by your exercise in battle since you can be 'fit' (or not).

So the starmap does the rock/paper/scissors math to set up an interesting combination of available critters ('rolling their character' as it were) for balanced gameplay, and provides names for all the critters and their starting RPG values (and only the starmap adjusts RPG values, while only the engine adjusts BIO values (I think that's a goal)).

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
And that means I should add a class "Bio" with a suitable api to provide info to the battle engine when needed. (I think the npc RPG values are just set in the same lua table that declared what 'monsters' are on this map. like

code:
monsters[1] = {name="dire wolf", level=17}
monsters[2] = {name="red clawfish", level=1}

Oooh, 'clawfish' good name. Like 'crawfish' but, with a claw! Let's check google. Hmm, mostly just mis-spellings, but some people have said it on purpose as well, so I only give myself 91% originality on that.

When I was a kid, we 'fished' for 'crawdads' which were simultaneously disgusting and delicious (though the taste was probably mainly butter).

You know, is it unusual that these alien-looking creatures are spread all over? In WarPath I am always pushing the theme that the astrological symbols represent aline civilzations that have visited from those constellations, and they left behind members of their planet who have 'devolved' (or evolved, as the case may be) from the more 'humanoid' version (apex critter of their planet) we met in the past. Though maybe they came to visit while we were still apes or dinosaurs, so to speak. But crabs we eat, are ultimately from genetic material brought here sometime in the past by creatures from a star in the constellation 'Cancer'

That sort of thing.

Lately, I also am leaning towards 'pan-spermia' as a system by which one advanced society could micro-engineer molecules that can react to local conditions and express themselves as 'components of life' where conditions allow.

Then you make giant balls of these molecules and fire them off in random directions through the galaxy.

Billions of years later, some of them land on earth (and everywhere else) and find what they need to kick off an initial bit of dna, that then just struggles against current conditions and evolves into whatever can succeed, with most failing sometime along the way, thanks to the galaxy mostly being unfriendly to life (radiation mostly -- too much or too little)

Which I guess is to say, I find it PLAUSIBLE that humans could do that someday (make a molecule that turns into amino acids when in contact with salt water, say) and then design this kickass DNA string that tries all sorts of things "can I be carbon based here? No? Well, can I be silicon based? OK? can I have a nervous system here? No?, well, that sucks! bye!

I think that's how cell specialization works (my theory, don't learn science from me): each cell, starting with a more or less identical DNS sequence, 'starts from the left' and tries to be the first thing on the list. That can be suppressed if the body (local area of the body where this cell was born) already has too much of that (I fantasize that the output of one cell, is conveyed by 'the goop between cells' to nearby cells and can either stimulate or suppress the 'reading' of the dna. "too much liver poop in the area, you can't be a thumbnail cell, try something else, maybe a liver cell?"

This allows each cell to just be a machine (stuff in + energy --> stuff out) and to be in it for itself, with no external organization (no supervisor monitoring the overall construction of the body), just a bunch of cells duking it out to become various body parts, and a DNA sequence that defines all the possible parts that could be enabled or suppressed.

And communicating via 'goo' with their 'poo'

So each of your cells feels it is afloat in your ocean of goo, but molecules move fairly slowly through the viscous goo, and have to pass by all the neighboring cells along the way, so they rub up againt a lot of receptor areas and might 'fall into' a cell whose membrane is permeable to them, or bounce off of a cell that is not permeable to them (and of course, if you don't rub against the receptor, or get close enough to it, you don't get snapped to alignment by the charges on your molecule, so just because a cell would accept you, doesn't mean it will manage to eat you. This is a syetem based on zillions of molecules slidiong over things and depending on statistics to ensure enough of everthing happens to make a difference. And like any society, the cells are probably not all pulling in the same direction (be a fish! no, be a flea!) and there is some uncertainty as to how it will all pan out.

Well, I was GOING to say, that the Bio class is where I model the stomach turning food/poison into energy/hit points, and the lungs turning atmo gas into energy as well. (and mana is a flavor of energy? Or do magical creatures have a 'mana' organ that digests some pergect color (manaColor) (would be cool if having a spell cast on you 'fed' your mana organ maybe)

Well, this is what blabbering is for. So for any number (like manapoints) BIO can have a simple simulation of an 'organ' (you never see this, though I should give you a bio scanner so you can watch it in action (not gross)) that adjusts (recharges) those points.

And then have an organ for each basic RPG stat (WIS/STR/STA/DEX/AGI)

STOMACH basic energy - hit points
MANA SPLEEN magical energy - mana points
MUSCLES strength stuff
HEART stamina stuff
BRAIN wisdom stuff
SKIN dexterity stuff

For example MUSCLES, perhaps, would be 'fed' by exercise, turning energy into strength, but also tracking muscle use and becoming 'tired', so the BIO simulation is tracking this and boiling it down into a couple numbers that battle can use (like your overall 'vigor' at the moment, which scales your attacks and defenses)

So I think that means that the game starts with your current stats ("my wisdom is 45 points") and then 'modifies' them with your BIO condition ('my brain organ is currently providing +10 wisdom points')

and then your brain organ is the part of you which is affected by a 'sleepiness' spell (or potion, or aspect of some food you find) and is then 'de-buffed' "You are sleepy for 30 seconds" and starts providing -20 wisdom points instead, until it wears off or you eat some potion with instant-action for brain organs.

So that can be (the BIO class) where I store the knowledge of what temporary buffs are affecting you. (and have them affect your RPG stats, which it provides on demand.) So maybe the engine stores the RPG stats in the same class, so I can just ask questions like:

wisdomPoints = critter.bio.WIS( time );

And that would take care of all possible modifications to your current RPG Wisdom points.

And wisdom points then are passed to the lua script engine. Say, I hit you with my axe (sorry, I'm so clumsy!). The game engine just knows "player X used tool Y on player Z" where x, y, and Z are the indices into the player table and tool table, which are generally set up by lua when the map first loaded, and declared all the tools available on this map, all the critters and their starting RPG values, etc.

So when I tap the button, it sends that message to lua, and lua might just turn it into a message "Dan casts Necrolean Sap Fire on Fredo", but more likely it validates that Dan has the right to do that, looks up what Necrolean Sap Fire is good against (rock paper scissors), and sends a result message to all who care "Player X attack with Y on Z is successful" and then each player knows (via script) what the result is.

Oh, and I meant to say there, that the message to lua "X hit Y with Z" also includes all the current numbers from the BIO. so the script may not have access to the BIO data directly, and the engine just works it out at the moment the button is pushed and includes it with the message

So lua can then think about it "gee, his WIS is kinda low at the moment -- maybe I don't know why, but I won't let him cast this spell right now."

So you're stuck with the concept that there IS a 'wisdom point' value, BUT: your starmap doesn't have to factor it into the battle results, and you don't HAVE to call it wisdom, but if you don't, you will have to call some api that changes the name from the default "WIS, wisdom, The ability to think, of great value to magical classes" (a code, a name, and a description, seems nice)

ANYWAY, that's not what I meant to do this weekend, and now I have burned half the weekend and done my usual nothing but blabber.

But blabbers help me. It's my... process.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
So, I took the first steps towards unifying BIO and RPG.

BIO
* tracks when you are hungry, thirsty, or gaspy
* (you then eat/drink/breathe, when you can, and when it is a priority)
* digestion gives you 'pep' points, which accumulate in some invisible pep bladder.
* when you have a lot of pep, you have a spring in your step (literally, I hope), and perform nominally/supernominally.
* your body burns pep as you walk around, fight, etc. And it also burns a small amount of pep while you are asleep (but very little)
* if your pep ever gets low wnough (10% ish), you get sluggish first, and then you fall asleep (enter the sleeping state and starting the sleeping animation)

RPG:
* while asleep, your RPG Hit Points (HP) charge at some rate (also influenced by your current pep, I think, but not yet). Other than 'healing' spells and consumables, sleep is the only way to recharge HP. (script can, of course, grant HP at any time)
* once your HP hits your current maximum (set by script, probably changing with level), HP stops charging.
* but you can't wake up until your pep is back to 50% or so, so I need your pep to also recharge, but if you're starving, I need you to well, become edible.

The way I implemented that so far is not feeling quite right, and I think the key would be:

"even while asleep, I depend on my body making a little pep (always has the goal of getting to at least 50% pep) And I guess that would be a specific rate. pepBurnedWhileAsleepForOneSecond.

* and it would be mandatory to burn that much pep, and if you didn't have enough pep, it would burn HP to get some back (at a poor exchange rate). I guess that's a little like reabsorbing your muscle mass, so maybe the 'pep bladder' is 'your muscles' That's probably a good metaphor.

ANYWAY, I just mean that BIO should slosh back and forth between HP and pep, with 'new' pep coming only from food, and some sort of 'pep from HP' when desperate.

But pep is transactional and based on points and rates of point changes per second.

ANYWAY, so now I have a herd of critters walking around, eating, and getting sleepy when I starve them. :-) Soon that will make them testy and aggressive :-)

I'm going to need some DNA soon. And I think DNA is a subset of pheremone. A pheremone 'tells a story' which might include some of DNA from two or more critters (winner and loser) plus a location code (bioLocation id), so the pheremone can drift in the air, but remember its original terrain cell. Maybe scatter N copies, and let them migrate to nearby cells, following local wind.

Then, critter DNA would just be a list of 'genes', each of which controlled some critter aspect or behaviour (personal space radius, for example)

The game engine defines the available genes, since each of those implies some game mechanic the engine is responsible for implmenting, but the DNA author (starMap? player using genetic manipulatin machine? Control panel on a Hive to modify what it is stamping out?)

I also need the concept of 'aggro'

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
One more change:

* HP behaves ' as in an RPG' and your character stops being useful when HP hits 0. That would be the definition of 'death'

* HP=0 can be resurrected by spell (in theory)

* HP < x is cured by 'sleeping'

* Pep is generated via food digestion

* if pep < 10% you fall asleep until it returns to > 50%

* while asleep, HP recharges first, pep recharges second (to 50%, then you wake up)

So you wake up with 100%HP and 50% pep (after falling asleep with 10% pep)

food digestion can then boost you to about 150% pep (super human performance)

So, sleep is all you need to recharge (and spells and potions can do the same thing at the command of the starmap).

I might try to stick something in to make you a little more tired at bed time, so you sleep through the night, as it were, but maybe not.

Today's sticky wicket is: If you get beaten down to, say 10% HP, and 10% pep, and you fall asleep (in mid battle!),,, then you start recharging HP right away, but it isn't instantaneous, and if your opponent is still beating on you, you run the risk of HP=0 at which point he gets to start eating you, if so it's a teensy bit like being 'eaten alive', which is possible a bit creepy (even for stick figures)

but no eating yet, that comes next :-)

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
I keep forgetting that 'tweak strings' can easily support string values as well as floating point numbers.

So I can use a normal tweak string to add, say, items to a table of 'all available items on this starmap, as defined by this starmap author'

like, if tweaks starting with "200" were 'item tweaks' then a tweak string to definr 'item #19" might look like:

code:
setTweak( "200=19,           -< select slot 19
201='Starshine Megahammer', <- name
202=3, <-- item type (say 'tool')
203= some other attribute of items

So an item could have, with this system, up to 99 attributes that describe what interactions it supports, what resources it provides, its normal cost, weight, whatever. And probably the 'magic qword' sent to the script when one is invoked.


The item table (this is not your inventory, this is a list of all available items in this star system, whether you own any or not. Ideally, additional items could be added over the life of an instance, but assume not.

The engine starts up with an empty items table, with every field filled with some inoffensive default value.

Then the script, upon being loaded, gets to add/overwrite entries as needed, providing only the fields they want that differ from the defaults.

the slot number is the unique item id, and is used elsewhere, such as the inventory. Inventory is a series of small stacks of items. I posit no limits on stack size. Though I suppose I should leave that up to the starmap (item field #3 might be 'max you can own', for eacmple)

Anyway, so your starmap has a function that just initialized the entire items table, before anything else happens.

Your inventory, on the other hand, is persistent and reloaded when you picked the map/loaded the map (you have a different inventory on each starmap, other than galactic credits, which are universal)

For each bag slot, I only need to record:

itemId
HowManyYouOwn
timeYouCanUseAnotherOne

Pretty much that should be it, though 'which slot is it' adds the possibility of drag and drop between inventory slots.

So, if I get some gumption, and some visual clarity, I should set a weekend goal like "ability to own a cessna overcoat and invoke it from inventory on demand, and take it off later. (item field 5 might be 'what happens when you take it off, does it go back in inventory, or just evaporate?)

That would require implementing the Inventory Panel, which today does not exist. And it's been a gumption trap since I didn't want to step on the starmaps toes and do too much in the engine, but I think I am already decided that 'There is an inventory system in the engine, but the items shown are all defines by the starmap, and the engine just sends a script message when an item is invoked (you tap its button) and the script then implements what happens. (by asking the engine to perform some number of game mechanics that it knows how to do)

I have also broken my rule to have all the RPG math be done 'in the script'... While this also remains to be implemented, I now think that 'the engine offers a set of RPG equations, which are based on a series of field values with names like HP, MP, Wisdom,... and there is some baked in math (the BIO system food digestion and sleep, recover HP, for example)

So it's going to look pretty hard wired to the WoS RPG elements, but I hope its really just "you get this many numbers to remember per character, and whenever I send a message to the script, I include all the numbers.

So a battle might include:

* critter 1 pickes critter 2 as target
* critter 1 pickes item 34 as weapon
* critter 1 decides to hit critter 2 with item 34
sneds packet to all, announcing that fact

That packet, also includes all the numbers known (for example, the critter 1 numbers), but the critter 2 numbers are maybe not sent, bt even if they are, they might not match the numbers seen on player 2' screen... a problem to solve.. i digress

Anyway you tap on 'use item 34' and a packet goes just to your copy of the script. It decides the legality of the move and then announces it to all, but adds on the outcome "and the effect will be to damage their shield, and reduce dexterity by 10 percent for 40 seconds"

And that all happens instantly, so now all copies of the game know this move is starting, and how it will end. They then all independently animate it for a second or two, and then apply the results on their copies of the critters.

However, someone out there is the host for any given critter, and when they get the packet announcing the result, they are the only ones that can announce a binding result for 'critter was destroyed'. Everyone else just sees the critter last a long time with just a sliver of energy remaining.

So, in this case, if they agree they have been conquered, they send a packet to the local script "engine says I died" and the script just forwards that along to all players "critter N hosted by player 3 declares itself dead by spell S of critter Z and provides this much XP and treasure"

(of course the actual packets are more terse)

And then the moderator script would probably score some points on the master score sheet, and move the vanquished player back to some spawn slot.

Just filling this out..

so when I receive a 'critter says its dead' message, check the source (each player controls a unique range of critter id, say 0-99 for player 0, 100-199 for player 1, etc. Maybe 128 critters per player. (and that player would be the HOST for any of those critters that are instantiated at any given time)

In fact, when I spawn a critter (because, say, I am standing near a hive), I send a packet to the local script "I just spawned a critter, index 35, at flora location 12345, and it has an empty stomach

The local script works out any legality issues, then forwards to all players, who again check the source, and only accept actual updates from the critter's host player.

One field included is 'what planet is the new critter on' (in the case of a starmap with more than one planet), and if I am another player, and I am not visiting that planet, then I just rememver the last update I received for each critter slot and when I later land on that planet, I can choose to instantiate all that I know about that are still there, if they seem close enough to know about.

Hence... I, on planet 3, can be walking around, and get into a fight with a critter I am hosting. You, somewhere else, get told that critter index N now has a critter defined by a pretty short string ",,," (since the critter details themselves are set separately in the critters table, initialized tbye the starmap, pre-declaring all the RPG values for all known critter species on that star map.

And then you come and visit my planet, and you notice you were never told that critter died, and as you approach my position, you get close enough and spawn yout own copy (which you do NOT publically announce, since you are not the host and just have 'a copy')

But you see the critter I am interacting with.

sort of. It's likely the update packets won't have ALL the info about the critter, nor are they sent often, so the critters will walk around with their own AI and might be in completely different locations.

But you are the host, so when your copy of the critter makes a decision to do something, you announce that and I update my copy of the critter to want to do the same thing, and if the thing involves a destination, they both start waling to the same destination, and hence are briefly in the same place.

During an RPG battle, there should be packets every couple seconds, so the position error shouldn't be too irritating.

After the battle, the survivors will wander off as is their way, and position error will increase until you start a new interaction.

and if a critter wanders far enough away, then any player can despawn their copy. (but no one but the host of that critter slot could spawn something new in that slot).

So I think the table ot 'last known update' should be pretty permanent, and persist even after you despawn you copy of the critter. (and you should be able to respawn it later as the same critter)

But if the host no longer needs that critter, and despanws its copy, then it can spawn anythig it wants in that same slot, sending another 'spqwn' message to all players, who just obey it, so if they were looking at a critter in front of them, it might suddenly disappear (becoming a different critter at some other location).

But since you're not hosting that critter, you don't have the authority to have it make decisions, so if you needed the feeling that that same critter suddenly attacks you, you might react to a 'host is terminating this critter slot' message by making a copy of the critter and hosting it in one of your own slots (and announcing that), so it would actually be a different critter. re-host it, basically.

I guess I could interact with an orphaned (host moved on) critter with the engine just running the AI, but without the ability to every mark it 'vanquished' since that determination must come from the host.

But yeah, in the extrem case where a host player leaves the game, it might be nice if the orphaned critters just used their critter AI to mill about until that player returned. Or someone else picked 'the blue thumb' in my absence, in which case probably the moderator player would have to send them all the latest update packets... hmm.. from all players, I guess, but specifically from moderator copies of orphans.

Or, orphans could all disappear the moment their host left.

Hmmmm

Well, that's enough babbling.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Hey, my dad has a wikipedia page!

https://en.wikipedia.org/wiki/Don_Samuel

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
time flies.

so.... the dust is still settling on the flora collision system, including the method by which the starmap creates floraIds.

There are 1024 available floraIds (per map/starmap), shared by all planets on the map (if there is ever a multiplanet map)

to be a 'flora' you pretty much just have to be 'mostly stationary' and most of the imagery comes from the name you give it, so these are all 'flora'

"pile of leaves"
"oak tree"
"copper vein"
"mosquito pool"
"bird swarm epicenter"
"bugs" (that crawl around a fixed area)
"hives" (that can emit new critters -- which are NOT flora)

critters are thoughtful and choose their own motion. They are not flora, even though they are manufactured by flora. That will take a bit of backstory to justify someday :-)

but, in general, each floraId needs its own visual expression in the world (i.e. some form of '3D' model'). I have some experimental tree trunk code, and some ideas for leaf masses. My grasses bend in the wind (a bit clumsily since I am too cheap to do a square root to preserve their lengths when bending), and I have ideas for how I want to do minerals (involving a tool called a 'ore magnet' which pulls ore triangles out of the ground when you are standing over a vein outcropping) (straight into inventory as 'dust' of various kinds (gold dust, copper dust, bauxite dust, etc. Whatever your starmap needs for a low level material)

I'm still torn on whether I have to use a tool (axe) to chop down a tree, or if I just bash it with my vehicle. Probably both, with damage points accruing in both the tree and the vehicle until final destruction of either.

And.. right, I have a means to repair things, since the inventory panel is a connection to "Ping" (my personal autonomous nano-factory), and he will notice and offer to repair my stuff any time I like. He might even communicate proactive notifications via the inventory button (which I think should feature his face, the the emotion of alarm appropriate to your current disaster)

Anyway, I guess this is a virtuous cycle that will just have to spin a few more times before all the bits and pieces are plumbed.

Oh, right, itemIds. So, it's another Tweak type, and let's pretend it's the range 300-399 (since I forget and will likely renumber them before releasing v1.10)

so, set tweak 300 to the floraId you want to change/define (1-1023), then set tweaks 301-399 to configure individual properties of that floraId. All of which should be doable from a single tweakString, so it should be script-friendly.

The individual properties are things like:

code:
floraId:  47
name: "Oak Tree"
min/maxheight in meters (when spawning a new one)
mass in kgrams
type: tree (vs rock, hive, etc) controls harvest
loot: &lt;loot string&gt;
hitPoints: decrements with damage to 0 for destruction
state (growing, maturing, exploding, etc.)
flags (miscellaneous 1 bit properties)

It's mainly the 'type' that controls what interactions you can have, and then the mass (relative to the mass of you and your vehicle) that controls ther severity of the outcome.

I might need more 'rpg elements' if you want a lot of variety in how you harvest stuff, and probably some sort of a 'menu string' the optionally gives you some popup menu commands when selecting one of that floraType.

Like maybe a PICK FLOWER button when selecting a flora of 'type=flower'

The loot string has to convey WHAT you get (an itemId in most/all? cases) and HOW OFTEN you get it (probability of success). Currently I do that like this:

loot = "25=50,30=50,1022=50"

In each pair, the first number is the itemId (not the same as a floraId) which is what you will receive (will be placed in your inventory), and the second number is the probablity you will get one (just one.. if you want the possibility of two, then you have to call them out as two pairs in the list)

And your probabilities don't have to add up to 100, I will total them and then use that total to scale the individual components appropriately, so that 70 happens twice as often as 35, no matter what the total is.

That being said, I think I want to take a detour into the AERO code and flesh out VEHICLE TWEAKS (let's call that 500-599) where

500 - select one of N vehicle slots )
501-599 set various properties of that vehicle

but within those properties is something like

- vehicle name
- vehicle type (land, sea, air, space,...)
- total aeros

And then something like

510 = index of the aero you want to define
511-526 = individual 16 floats defining one aero

So a vehicle like the cessna overcoat requires five aeros, so that's like 60 values, organized as 5 lists of 16 floats each.

Other vehicle types will require that I add more aero types, and many vehicles will require many more than 5 aeros (especially if I make a 'quad' aero that lets you build a 3D model out of textured rectangles)

But now that I have an inventory system, I should have more than one thing to store in it, right?

Plus, I need to make an Ore Magnet (tool) and that opens the can of worms for "connecting a tool to the current pose of the critter's hand, plus a little inverse kinematic so it stays plausibly aimed in the direction of the current target)

And THAT takes me back into the stick figure animator code to add the 'end node declarations' *this is a FOOT (that gets IKed to the ground), this is a FACE (that is looking in a particular direction), this is a HAND (that can hold tools), this is a BUTT (that can sit on things).

I think I will just add one more 'joint' to the end of the current limbs, which is never rendered, but acts as a final direction pointer. At render time, I will calculare its on-screen position (even though not rendered) and use that (and other nodes) to place the tool (while also keeping the pitch level whenever the hand pitch is relatively horizontal, but following the pose for acute angles).

that probably didn't make any sense, but I think I know what I meant.

[ 06-30-2021, 08:55 PM: Message edited by: samsyn ]

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
babbling commences

Remind me to ask for suggestions for 'pew-pew' weapons in grid space, where my goal is to maintain 30 fps, but within that I wouldn't mind if it had satisfying particles to look at.

It looks like it will be hard to maintain 15-20 fps in critter world, though.

But this should be the weekend of 'vehicle tweaks' with at least one new stock vehicle added (and supporting engine infrastructure)

Darth Crow is back. I wonder if he might be a Raven somehow. He's pretty huge and has a sort of darth vader helmet head shape (feathers sticking out around neck line).

We also have a sad baby crow (except he's been sounding like this for over a year). He just sounds so sad, and squawks all day from a nearby tree -- though you can hear when he flies from tree to tree, never getting very far away.

But it's the plaintive whiny tone of a hungry child wondering why mommy never returned. It's kind of heartbreaking. And yet, time goes by and it's still alive, so it must have survived somehow.

I have never seen it, that I know of (yes, would be cool if this were darth crow, but seems unlikely. There are tons of crows around, though it seems like a fairly small set visits our backyard (usually to use our bird bath(s) to wash off whatever garbage/scavenged gunk they are eating that day (if we're lucky, it's just a Eggo waffle, and not some mystery organic).

This is of course, highly entertaining for kitty, who watches the window TV and 'window hunts' most of the day, getting extremely excited over birds and squirrels, but oddly cool around the huge crows and occasional falcon like thing.

But this sad crow just doesn't sound like the other crows at all (and I'm not sure what a Raven sounds like when it isn't quoting Edgar Allen Poe in a stentorian english voice)

It took me a long time to settle on 'sad crow' over 'sad squirrels' (the squirrels can make some very un-squirrely noises, but I have been pretty fluent in squirrel since college... plus the sad crow vocalizations can clearly fly, and while a squirrel could sort of tarzan its way from tree to tree, it seems more reasonable that this is a crow/bird

I guess I can tell from the sound that it is a crow-sized bird. (not a teensy little bird, which we also have plenty of -- and who occasionally fall into the house by accident for some close up interactions) such precious little clockworks they are. (ok, I was just 'being a writer' there, and that's probably not how I would normally phrase that.. but I *have* been struck by how impossibly delicate they feel when trying to rescue them out of the house. Side effect of needing to stay light enough to fly. But totally at risk of cat-assisted avicide, being crunched in a helping ham hand.

pro tip: capture them (against a window they are trying to fly though, that you can't open) with a little tin foil 'box', and then gently collapse that around them as needed, and carry them outside with minimal squishing.

but it finally hit me that what sad crow's moans actually sounded most like were duck calls. (classic wooden duck calls as seen on TV and in movies) only modulated with sadness instead of a sharp blast.

So now I wonder if baby crow, lost its mom right away, and fell in with a family of ducks, and was raised by them (you know, two tarzan references in the same babble!) and now just speaks crow with a duck accent.

I know this is POSSIBLE because I know a little bit about how the local ducks operate. There are large ponds of water for them to do their ducky stuff in, but at night they find a bush and hunker down.

And for them a 'nearby bush' might be several blocks away (they can fly), and on at least one occasion, it was OUR bush.

And sometimes eggs get laid, ducklings get born, and inevitably they need to follow mom (on foot) to the nice food source.

I wouldn't put it past them (ducks) to have actually scouted the situation out and to know in advance which fences have holes in them large enough to fit the family through, and where no cats have been seen. Still, I'm sure there is a horrible duck tragedy every day, just beyond my sight.

Still, the horror aside, it is so amazing to watch a family of ducks pour forth from your bush and waddle out the fence on more or less a bee-line to the big pond. Maybe they even get air support from other ducks, though I have never seen the mom fly off and leave the kids alone while on this trip.

Changing the subject, but keeping it on a theme of animal behaviour and fun aspects which could be in synSpace someday, I saw that report on Wolf behaviour. The one that basically claimed "everything we knew was wrong" and that the whole "alpha wolf" thing was a mis-interpretation based on the data having been collected in a zoo with an artificially selected wolf 'pack'

Apparently, accorting to this NEW science, which is presumably even more science-y (though no one blames the original report which was apparently great, but just based on "what happens when a bunch of woldf strangers are thrown together"

Anyway, in the wild, they say, it's just a momma and poppa wolf (and he's always the alpha no matter how old or frail he gets) taking care of their babies and the occasional second-generation, living with their parents (though young ones often/always split from their families (and then I guess sort of marry into a new wold family, which would help prevent genetic inbreeding to a dangerous extent)

I'm not sure if momma gets to be an alpha or if there is sexism there as well, but it sounds like the general consensus is that wolves are loyal and loving family members and the parents will spare no effort to spoil their children in any way they can.

Which is more in line with what I see in dogs, so it 'makes sense'

Of course, reporting on this study mainly focuses on "so you 'alpha male' types should stop calling yourselves that. hah! you're just a loving parent!"

Of course, that's not meant to white-wash wolf-on-wolf violence. Which is probably based largely on fighting over resources and, um, reproduction rights.

And I'm sure you feel differently about any animal if its food source is something you love to pet.

Hopefully there is enough land for wolves to be wolves somewhere, and for us to insist they be more dog-like when within civilized society.

hmm, ok, according to the Internet, wolves and dogs can inter-breed, and hence they will when territorial conflict beceoms inescapable (as we encroach their historic areas and bring dogs with us), so the system will be dynamic and all parts can evolve towards a symbiotic relationship. (in the long run).

When interbreeding is NOT possible, it's probably a bad outcome for the non-human. Hmmm, I know what I MEANT there, but I guess that might raise some other questions.

I just meant the wolves would lose, and not end up being happy members of our society, eating from the same garbage cans we dive daily.

But now I'm happy, since I know the wolves can eventually join us, once we've reached their level.

Moving aloong those lines, I watch a lot of youtube animal videos (cute ones mainly) and watching young mammals play, you see them basically doing the same things, and then you realise: dang, that's not a mammal, but i plays just like one, and I think that kind of takes you to 'has a level 3 brain' and that play is just a result of a certain level of neural network (self training),

Now, do ants play? I'm sure they probably repeat actions which generate appealing pheremones in response. They have really good dexterity, and something that works like an opposable thumb (some sort of sticky spot on their 'hand'), I wouldn't put it past them to play, but I don't think I have seen it. I guess life is pretty serious when you're small.

enough babbling for now.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
i should write these things down with dates somewhere... I just replaced my second Pixel 3XL (both failed in the same way, with a swollen battery splitting the case open)

Being on Google Fi, I do have some restrictions on my choices, but even so, I didn't HAVE to get another Pixel, but I did anyway. Still, I didn't want to give them a thousand bucks again, so I ended up getting a Pixel 4a

So, yay, got my phono jack back! I can wear it in my pocket 'right side up' with the camera peaking out, which still feels like something fun could be done with that.

But now I have a slightly small screen. But no phone screen can ever be big enough at this point. I can barely read medium fonts on a 10" tablet, phones are now completely invisible to me (without a magnifying glass)

Having said that, pixel 4a running synSpace 9.0 is Much Faster than it was on my pixl 3XLs. I imagine that's partially due to having fewer pixels to render, but it feels like something got optimized in my favor. I mean, I *think* the 4a has a weaker cpu/gpu than the 3XL, but maybe that's wrong-think.

Anyway, I've been pretty happy with the 4a. Lacking in chic, maybe, with a PLASTIC case (i.e. like everything else I own), but about 1/3rd the price

Apparently this isn't gorilla glass either, so we'll see how that works out.
--

In other news, I moved my wifi repeater (without which there is no wifi upstairs, which has become unacceptable). It's been very unreliable (during the hot humid days we've been having a lot more of recently). I feel like the humidity is shorting out what was already a weak signal. Anyway, moved it to a new position to see if that works better, and so far it does, but time will tell. Of course, it's now in the maximally inconvenient spot (robbing me of my favorite outlet to charge batteries)
--
next coding opportunity, I think maybe I will polish the Flora Collisions a little, get some basic state machine flowing so the trees grow, get damaged by impact, eventually burst into pieces or flames, burn down, provide resources to inventory, and grow back.

Just enough 'game' so I can leave a vehicle crashing across the terrain and destroying flora as it goes, leaving lots of stuff in inventory.

---
Did I mention I am evolving the name of your Personal Autonomous Nanofactory (your inventory bot/tool that moves physical objects you have collected or crafted, in and out of 'dataspace')

I liked "Ping" a lot, but didn't fit the acronym well (PANF), and "Panf" is not so great of a name, so now I have settled on "Pan"

And I like the peter pan sort of imagery... maybe more of a tinker bell critter that floats around you and carries out your orders, plus offers sage advice to the new player.

But also, I'd love it if this map gave me the opportunity to spout off about panspermia and designed molecules that can take root on any adequate planet and start the evolutionary ball rolling.

Then "Pan" can turn out to be some element of the panspermic process that seeded our own galaxy, and hence a gateway to 'the old ones' or something, something for a follow on starmap to explore. Or something. Maybe he can be a 'robot medium' who can 'channel the electronic spirits' of dead robots (and another starmap could talk about robot heaven, though that's a Simpsons IP violation waiting to happen)

WarPath for android got delisted for awhile because one of the things you could buy for your ship was a "Simpson's Chaos Field Generator" (named after its discoverer, and I thought I picked the name 'at random' but maybe they're right and I was channeling the show." Anyway, they took the game down until I changed the name (because they thought it might mislead someone into thinking they would see bart simpson in my game)

I think the full sentence included "the" so their pattern matcher saw "the Simpson's" in the middle of the description and that matched the show title pretty exactly, which doesn't make the script seem all that intelligent, but still, a solid match.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
today's blabber is about the Crafting system, where a star map can define up to 1000 items and then provide recipes for each of them (how to make them out of other items on the list)

At the very base of it are raw resources (animal, vegetable, and mineral resources), everything else is just built upon something lower level than itself (middleware) with the desirable cool items being several levels above raw resources, for the most part. At the control of the starmap bla bla bla.

So, let's say I want a submarine and I know its recipe (Well, my Personal Autonomous Nano-Factory, "Pan" knows it). I tell him to make me a submarine.

He looks through the list of ingredients, and if I have what I need (in inventory, in stacks of infinite depth, one stack per item name), he just starts making it, which consumes time and some generic thing which I am currently calling HEAT.

HEAT is something that charges up inside of Pan over time, and presumably that rate can be improved over time and Pan can make bigger things in less time, etc.

But if any ingredients are missing, Pan leaves this work order in the factory queue where it is, and pushes a new work order JUST AHEAD OF IT in the queue. And as he does this, he says one of N clever quips to convey "Drat, this submarine needs 14 Steel plates!"

And then on the NEXT update he processes a steel plate instead of the submarine

Pan: my golly, this submarine needs MORE steel plates.

Pan: I need 4 Iron Dust for each Steel Plate!

Pan: I have set your Ore Magnet to locate Iron Dust. Please check the minimap and compass for navigation hints

You then walk/fly along until you see something, approach it (it's sparkling or something), and mine it, at which point it goes in into inventory and Pan notices on the next update and goes back to working on the submarine

So basically, once you tap on the BUILD button for the end product you desire, Pan takes that as an order to build every single bit of middleware required (that is missing) and blabber about it as he does it (with some spam filtering).

The inventory screen should clearly show what Pan needs YOU to do (locate/collect resources)

And maybe this is a special add-on feature not present in your initial Pan. He gets over the galaxy updates, of course.

---

Hmm, I can see implementing a 'count quest' as a recipe. Where the thing manufactured is the quest reward, and the resources required come from both collecting and battling/looting.

"Pan: I need five coyote teeth!"

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
This weekend I made a tiny bit of progress on the Flora state machine (individual flora objects can move through several stages: invisible, static, seedling, fruiting, withering, lootable

Any given tree will go through that lifecycle even if you never interact with it. But certain interactions (chopping, shooting, burning, etc) can cause an early state transition.

And Flora includes animal, vegetable, and mineral aspects, so you have the same basic states for minerals, etc.

I could have flora nodes that start out static or invisible until you visit them and, say, water them, kicking them into 'seedling' for some period of time, during which they grow to full size and enter the fruiting state. Fruiting lasts as long as needed to grow one fruit (perhaps modulated by local water, etc, but probably not :-)

At the end of that, a 'fruit loot' is spawned. This is a triangle placed somewhere within the tree (or maybe falls to the ground beneath the tree). Loot triangles come in various colors and are each bound to an itemId. When you collect the loot triangle, that itemId goes into your inventory.

Each tree is born with a (randomly selected) capacity for fruiting, so if it can fruit again it goes back to the start of the fruiting state.

so you might end up with several fruit loots in the tree before it switches to the withering state.

While withering, the tree becomes less verdant and grows no additional fruit. Existing fruit should definitely have fallen to the ground by the end of this state.

After withering is basically death, which can be associated with a formal loot reward that results in a small shower of loot. (wood loot, nuts, sap, whatever) Each triangle is only one item, so a big tree might shower into a large number of loot triangles.

loot triangles know to whom they belong. Or they are unassigned. If unassigned, they just sit on the ground until a player approaches close enough, at which point they are magnetically drawn to the player (and go into inventory). Pan is probably the agency for this.

If loot is assigned, it behaves the same way, but is willing to look for its owner at a considerable distance, so I would like this loot to chase you around the map until it finally catches up.

I'm not sure what I think should happen if someone gets between you and your loot as it approaches you. Will it be collected whoever gets close enough first? I kind of like that, from the physics perspective (also, cursed/poisoned loot!) but I can see it incenting 'ninja' behaviour that creates drama/friction.

loot hangs around as long as it can, but all triangles are eventually re-used, at which point it becomes too late to collect it.

Loot triangles should probably have a common look, maybe sparkly, maybe visible in the dark. But they don't have to be solid colors, in theory I can make an official loot material (or 3 - animal, vegetable, mineral)

---

I also added collision testing to 'projectile' triangles, so I can now shoot flora objects (or damage them, in general). Each flora object is born with a semi-random max hitpoints. These damage points (from chopping, running into with a vehicle, the ravages of time) eventually wear it down (triggering the end of the withering state, no matter where it was in the life cycle to begin with)

The action itself (chopping, zapping) probably also threw a shower of sparks, so the flora object doesn't need to do that, though a cooler flora object might have some sort of cool 'collapse' animation. If a tree could break into a pile of sticks...

For fires, I need to add a sort of 'fuel' particle that just simmers on the ground for awhile before turning into full flame and jumping into the air to become smoke. Then I can launch a whole bunch of them at the moment of impact, at they can pop off one by one and eventually all be used up and float away.

or I could probably do the same thing by launching a smaller number of particles which have some random chance of retriggering at the end of their cycle.

Perhaps retriggering might even be more economical than launching a new particle.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
and some immediate revision ism...

Loot is mostly 'local'. We don't necessarily see the same loot triangles. While we both might see the same tree, we probably each see it in a different stage of life, with a different amount of fruit.

And when I collect 'my' loot, it probably leaves yours on the ground.

I could do that on purpose, but instead I could also have YOUR loot see me walk bby and chase me and disappear when it gets close to me, and hence be stolen from YOU, but I would never even know I did it. Hmmm, I think that fits right in.

Other than it incenting people to stay away from each other, lest they steal loot unintentionally.

Well, maybe only after the loot has gone unclaimed by its owner.

---

That being said, super special loot could be placed by the starmap (maybe it gets a 10 triangle 'treasure chest with working lid' for its render), and that loot would be seen by everyone at the same time nd in the same place, and could either be 'one for everyone' or 'first come first served' (or even some complicated scripted gambling game-let to vie for it. How about "I would give 3 defense points for this!" and give up actual hard-won stats (that you could earn back with enough grinding).

----
That reminds me, I like that WoS had those ability point items you could consume to get N points in either a fixed ability or back to the 'roll your character' panel.

As opposed to "you just have a level, and everyone at your level has the exact same ability points" (which is easier - less to store per player).

----
OK, here's a weird thought.. synSpace only supports a single character (though you can change your name and appearance at any time, pretty much, but you can't have a druid *and* a necromancer.

That's not great for an RPG starmap.

I could probably do a sort of 'memory slot' approach. And give you N slots with non-overlapping storage. (that's N slots per starMap)

I dunno. I specifically chose to not worry about this. For what its worth, I think it's best if a play session can be fun for 15 minutes to an hour, and not require 40 hour sessions. That doesn't mean your character shouldn't be able to do some levelling from one instance to another, but in some cases it probably means exactly that (15 minute play session should start with equable resources for each player).

hmmm

Well, my plan is to continue to just add game mechanics with enough automation for the script to trigger them, and then put off the creation of an actually enjoyable 'game' until I have a large enough set of mechanics which are interesting without being too irritating.

I still have to get to the point that an inventory item can be a weapon on your button bar. I think I already mentioned that will probably be done by an EQUIP button you can toggle on and off on the inventory page for the item in question. All the equipped ones appear 'on the button bar' (up to 8 currently)

---

Oh, here's a thought. Let's say you had a stack of 10 "Cessna Overcoats". What if it worked like this

* you decide to fly
* you open the inventory panel for cessna overcoat
* you click the EQUIP button
* if there is room, it is added to your button bar
* AND IT IS REMOVED FROM INVENTORY (now you only have nine in inventory)
* some protection against double equipping

Anyway, the IDEA might be "Once you equip it, you can use it repeatedly so long as it remains on your button bar, BUT IF YOU REPLACE IT (unequip it), it is just gone. You then have 'used it up' and need a new one before you can fly again.

While equipped, it can also take damage, so it can be destroyed even if you don't unequip it.

Oooh, and only equipped items can be repaired.

Hmmm, I think I like this...

[ 08-11-2021, 03:36 AM: Message edited by: samsyn ]

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
so, this doesn;'t hurt them, I promise, but critters have hit points and now your weapons can remove those hot points.

Whenever a critter is injured, a hit point meter appears above its head and shows the remaining life (actually, I have the meter at their feet at the moment and its interesting...I mean, it's not like it's covering up the mona lisa

When the hit points hit zero, the critter falls asleep (the same state that occurs if it goes un fed or watered for long enough)

Once asleep, they slowly recover and eventually caan return to action (I don't really have a plan here.. But I imagine that putting a critter to sleep in this way will involve it being sent to a hospital to recover (fades from view) and then re-entering the world at a later time.

And, generally speaking, I see Hives as the portal by which new critters enter the world (are born).

And, on my current starmap, I think I state that hives belong to the 8 player teams, and that each hive can only make a single species (at a time), but you can change it to a different species... Might need some scientific jargon there. maybe.

(this makes hives not unlike an RTS factory that spits out a single kind of unit)

But, the point I am trying to get to is: Each birth is counted and kept track of (by each hive, and by lua in the aggregate)

And in the simplest case, the population is your score, the end. First to a million critters.... Keep a million critters alive for 20 minutes... etc.

I then want to also keep a count of the total deaths (per hive, per species, per player, etc) and then compute:

current population = total births - total deaths

Which would be a virtual population. There would be no table with an entry for each member of the population. It is just a count, and determined not by enumerating elements in a list, just keeping track of the comings and goings

THEN, when I walk away from a hive, all the critter instances that hive had previously launched, are put to sleep back in cold storage, along with a 'statistical description' of the hive's critters. (this hive has 1000 critters,
200 of which are ill) (or something like that)

Then when I visit the hive later, as I approach, it instantly fills the otherwise empty hills with just the right number of critters, of the right sorts, in the right places, with a few NPCs to hand out quests. (to accurately reflect the statistical description when you left, plus any additional births/deaths since then.

The individuals you would see, would be the ones that the script called out manually (Charley the Quest hub goes HERE, no matter what local fauna is spun up to fill the place in)

Anyway, I think I finally have all the pieces in place to do this, and it should allow for the illusion of vast herds of critters (fantasy of flying my cessna overcoat low over the plains and watching the critters scatter, but maybe still flock, as it were.

----
for sea level (there is only the sea, no highland lakes), I ended up with a two triangle approach. For every terrain triangle, there is a matching water triangle, which is always at sea level.

If the terrain is above sea level, then the water triangle goes unused, otherwise it is rendered as a layer above the terrain layer, and I think it looks nice in a minimalist sense. Though I still want to pursue making it 'wavey' which will make it all busy and fuzzy and not the pure flat that I find so serene :-) Maybe when the wind dies down...

ANYWAY, it suddenly hit me that my sea level was just a number (and one that I was already fiddling for tides) and that for a given terrain triangle, I could easily just render its water triangle for a high mountain lake.

And I already have a hydration value for each terrain square, so for any above sea level terrain cell, I can use the hydration value to decide 'how deep a lake should be at this point' and then render the water triangle about that high. (but then I would compare with adjacent triangles and try to have them sort of even out when they are touching (low ones pull the high ones down)

THEN, my existing rain particles can roll down hill and collect in a natural depression (which happens already), and as long as they hang there, the hydration value of those terrain cells goes up and up (this already happens), so I just need to suddenly decide to start showing the water triangles (and the neighbor averaging)

Likewise, if the rain stops, the existing hydration will diffuse to adjacent terrain, be consumed by flora, and evaporate back into the atmosphere as clouds. And as hydration levels fall, at some point it stops rendering the water triangle for that spot.

And in addition to rainfall, it occurred to me I could have an actual 'well' object that just magically sprayed some fluid into the air and it then would bounce downhill from there. And so maybe you could make your own lakes

especially if you could apply a world action that actually modified the terrain elevations. Maybe just a big bomb that makes a spherical depression in the terrain at some point, then a fountain object uphill from that to fill it up, then do recreational boating in the mountains.

In theory, synchronizing such a world would just need the original random seed values (come with the starmap) and a list of the bombs that had been set off so far, in order. Late arriving spectator could watch them all take place again as part of their world sync.....

Maybe the scene camera could zoom to feature each event, like it was telling the story so far. Craters made, fountains placed, buildings built, buildings destroyed. An instant replay of creation and destruction until you were synched with the current map.

---

Mostly, I see a starmap author as including some number of species 'with the map' (plus whatever stock species are shipped with the game, then one just uses a species index number to identify the one (on this map) you are talking about.

But what if I want to visit your starmap, and drop a completely new critter into it? Also, I should be able to fully design the critter that represents "me" for the most part, and that would then be unique and need to be passed around to other players. (like my ship shell). I currently have the means to do this for YOUR personal critter (your avacritter), but not for anything else. My only reservation is the opportunity to spam packets, but I am intentionally not worrying about that ahead of time. The spam filter will choke the spammer, so the real issue is false positives caused by cool intricate critter designs.

Anyway, I was thinking maybe an arena sort of thing where I land on your planet, go to the arena and push the upload critter button, and select one of my 8 development critter slots (or just one of the critters in my clone collection)

That causes an upload to the server/to the session host, who assigns it a 'critter within this map' index number and announces it to all players (and they can then ask for a copy if they feel they need it) (and peer to peer magic gets the job done)

If I leav the server, I no longer have that critter, but if I re-renter, I end up fetching a new copy. And maybe I can clone it. (and thus have that copy forever) but maybe I can't... I think it would be more fun if I could, so long as I clone it before leaving the server.

ANYWAY, I want to pop in, drop off my meanest critter, then come back later and see who is still standing. Maybe the arena has critter dispensers which get filled with some combo of critters and then an automatic battle plays out and the result is some statistics about who'd win in a fight.

And then I drop my Black Wrath into the melee and just watch the mayhem.

----
I laid out a strategy for defining a textured mesh using my tweak system. it's pretty obvious. And There is no guarantee I would ever use it, but what I have set out would be able to do low poly models with simple texturing and lighting.

Basically the first section of tweaks would set the mesh number (the mesh you were defining) and the number of vertices, and number of triangles used in that mesh.

The next section would let you define vertices, so there would start with a 'current vertex' where you selected the index into your virtual array of vertices, and then that range of tweaks would set all the individual (float) values for
x,y,z,bone number and weighting

then the third section would be for triangles, and could use indices into the vertex table, rather than having to call out XYZ values, instead it would call out
v1, v2, v3, c1, c2, c3, uv1. uv2, uv3, materialId

So I wave my heand with 3 bone weighting, and faceted meshes (no smoothing allowed).

That is to say, I can't guarantee what will happen if all three vertex colors are not the same (for a given triangle) It might blend well. It might be a huge frame rate hit. might just be atrocious to look at.

And there ARE antialiasing features I can turn on as a whole for the buffer, but last time I tried them they were horribly slow. And I couldn't get a playable frame rate.

Anyway, it's fun getting official loot now.

but inventory is still volatile (you're a pauper again the next time you play.) I'll do data storage later, for sure.

end of babble

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Whenever I sit down to 'do something from my big list of things to do,' I end up adding several pages of more things to do, and then do nothing.

Things pulling at me at the moment: hydrofoil sail boats, RPG critter battles, critter AI, loot plumbing, and 'conversation tree'

So now I want to ramble about conversations and scenes.

In WoS, a player interacts with a map object and drops into a scene, with that player hosting the scene. The host then orchestrates the RPG battle and any scripted cut-scene stuff. Others may join the scene (clicking on the campfire left behind)

I want to do something similar here, but not drop into a different display style for the scene. Instead, I want to just switch to a different camera, one placed by the starmap (that defines the scene location). As in WoS, the script would have commands to place actors around on the ground somewhere and then set the camera to look at those guys as they exposited to each other.

But those actors would really be there, for the duration of the scene at least, so another player walking up to that point should see them.

But should they hear them? Should they be able to engage in battle with them? Are THEIR copies of NPCs going to conflict with MY copies.. will I have to wait and take turns to finish my quest?

An what does it mean to hear an NPC? In world chat bubbles (as in WoS and, frankly, most games. In this case, I am leaning towards a Monkey Island sort of presentation (text on top of the scene, one voice at a time usually, roughly adjacent to the character doing the talking (and in this case I can have the 'scene camera' cut to a closeup on the speaker while they have something to say. And I will probably use the text to speech stuff to read the bubbles aloud if you like.

maybe shoot for creepy 'moving lips' on the speaking critter.

---

So, as I believe I stated elsewhere, I'm leaning towards some sort of chat bubble (probably a rectangle if any actual bubble is required), but that might be more of a glyph than actual chat (requiring that you tap on it to see what's up). Like the ? and ! on top of WoW quest dispensers.

If an NPC has something to say (of a lua-scripted quest dialog sort), the glyph appears, and when you click on it, some sort of window appears (on top of the world, blocking the view at least partially, so what to do if you get attacked, etc.) with an interactive chat inside of it.

The general purpose of this chat is to funnel quest exposition "There is a dragon, click here to read more" and let you relish in small stories, or just skip to the 'how many do I have to kill'?

And if I implement that part as a text-only popup sxperience, I could sort of say "THIS panel full of text is under pretty direct control (via tweaks) by the lua script, so can do pretty much whatever it likes, and if someday I can support HTML5 text from the lua script, maybe it could be pretty powerful visually, eventually (especially if it were allowed to connect to servers in the cloud.. say with WebGL interfaces), but for now it would just be lines of text.

But if I make it depend on chat bubbles instead, then I insert a whole layer of engine stuff between lua and what the player sees. And probably the text itself gets hard to read on smaller devices.

So the EASIER, LESS RISKY, and potentially more reusable solution is the text only overlay.

And maybe I can make it nicer by always having the scene camera support what is happening (cut to close up on current speaker, still visible through alpha of text overlay). Take the text overlay away when not directly engaged... and I guess the nature of the display is different if an answer is requested.

But if an answer IS requested (even if it is just 'tell me more'), I would LIKE it if the user had the chance to either type in an actual answer (tha t can be seen by everyone in the scene), or pick one from a list of pre-fabricated and/or random answers (that are supposed to be witty)

But maybe that;s too fiddly, again, for a small screen. the safer bet is to carve the full screen into rectangles for a prompt and up to four answers to fit without scrolling.

And maybe putting the answers in the lower half, and letting the prompts sort of be placed in tandeom with the scene camera to like prompt to speaker visually.

So, I guess, replace pretty much the entire bottom third of the screen (where all the controls live) with just the list of response sentences, and the upper 2/3rds would be mostly transparent on top of scene camera, with text wherever the engine thought it would look nice (engine knows where all the critter mouths are on the screen)

The goal would be for lua to be able to easily set up a little comversational state machine.. I am thinking like a slide project, where each slide is nnmbered, shows a prompt and suggested answers. Each answer then just links to a new slide number.

Then, like laying out a little map of rooms connected by NSEW, you lay out prompts, connected by responses.

And you design a little 'maze' of twisty tunnels that get you past some psychological hurdle with this critter, or you piss him off, and have to fight him, or start over.

But if you 'win' the conversation maze, then you have completed this step of the quest and move on to the next (which is probably another conversation tree with another NPC)

And at that point the 'i have something to say' glyph disappears on the critter in world. (and appears on the new guy, should you encounter them). The quest dispenser NPC critters peek into your soul and know what quests you have accepted and whether they have anything to contribte to your current phase of the quest (as determined by which quest 'tokens' your character has already earned).

I *know* I just typed most of this same thing yesterday, somewhere, hope it wasn't just right here.

end of babble

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
speaking of hydrofoil sailboats...

I would really like to try to make one of these (virtually) by just adding a couple new 'aero' styles for use in water.

First I need to finish the 'base' aero which defines really basic stuff for the vehicle overall, like 'can it fly, can it swim, etc) A boat might sit useless if you try to use it on land (or it might embrace its inner automobile and roll along anyway)

So, start with the cessna overcoat, mark it as a boat, for water use, keep the throttle (for when there is no wind, or during development)

keep the rudder controls, but rudders gets water leverage instead of air

add a passive keel force to attentuate sideways motion

no intentional 'pitch' control. Not sure about 'mainsail sheet length', but as I type this I realize that should be the flaps control (I mean the repurposing thereof)

Some sort of 'auto-jib' deal so you can have that if you like it, but with minimal detail control.

And, the 'foil' (in this case, underwater elevator-like wings attached to the keep)

The math on the foils would be wing-like lift, but with water instead of air (more force) And possibly a fixed camber. The faster the boat goes, relative to the water, the more lift from the foils, which magically raises the entire boat.

As the boat is initially displacing a lot of water, which is also pushing it upwards (based on buoyancy of boat), its fairly easy to lift the boat at first, but more force is required (hence more speed is required) to lift it up out of the water completely

Abut also as the boat lifts, drag goes way down and the boat goes insanely fast, generating all the left it needs to basically skate right on the surface (or with the foil just below the surface)

Plus all the sail math for when you're not zooming around with the throttle

--

but I am mainly interested in that foil that lifts us when we go fast. Of course, my minimalist render won't really capture the magnificence of that, but hopefully I can manage a 'billowy' sail, and luckily these amazing America's Cup boats were mostly flat and rectangular to begin with.

And the idea is that the aero 'type' also implies which on-screen control it is wired to follow, and only those controls should appear that the current vehicle actually needs/uses.

The rudder is only effective after you have some force (throttle or wind) to get some motion going). My rudder might always just work (but be sluggish in the absence of motion), depending on how uncomfortable I am willing to be,

My keel will just be very good, no matter what its shape is (maybe area will matter) and my counterbalancing mass will just always be spot on to what is needed.

I will 'roll; as needed by side wind forces (but camera never rolls, so you are not 'in' the boat in that case)

OMG, I just realized how easy it would be to have a first person view that just took the same transform I apply to the vehicle (which includes roll) to the camera transform itelf, duh. Super easy... barely an inconvenience!

seasick view. But definitely something to remember for the stick figure VR version.

---
My secret wish: there is a blending mode concept in 'real' 3D where you have two source images (say, the new one you are drawing thie frame, and the old one you have already drawn), and you blend them together to determine a final output pixel (generally to allow translucent objects like windows to pass background pixels, but add a little dirt/distortion as needed)

I need a blending mode that takes 2 or 3 bitmaps as the source, and generates an output where all the red pixels come from one bitmap, and all the blue.green pixels come from another(s).

For current red/blue glasses, blue is actually the blue and green channels together.

I can do this with direct pixel manipulation, but that would be at the Java level and this is something that should be done at as low a level as possible since it quickly adds up to millions of pixels to be processed every frame.

Ideally a canvas drawBitmap call directly. So something as simple as a mask applied just as each pixel is being written, so the bitmap I am drawing to the screen effectively is alpha transparent for the colors I want to suppress. In my gut, I know this mask exists in there, and I just need a way to set it for the duration of the drawBitmap call.

But it *is* a blend, it can't just wipe the filtered bits to zer0, it has to preserve their existing value.

ANYWAY, then I can do my red/blue VR trick (that I use with the stick figures) to all solid surfaces (at the expense of seeing their true colors) With maybe only a 30 percent reduction in frame rate...


There's a high likelihood that is just a bad idea overall, and I should at the very least defer it until I am in an OpenGL (or other 3D) environment.

but 'should' has never been the operative word for this project, so we'll see.

---

but this weekend, I hope it's all about the hydrofoil. How hard can it be? It's not like I am going to demand it balance itself (I'm going t o pretend that ground effect of the aire compressed benetwath the flat boat bottom lets it ride on a cushion that autoaically keeps the boat mostly level, aside from side rolling, and I think I might PRETEND you have those side foil 'finger' foils which look like they magically prevent the boat from rolling over (long lever arm, I guess)

But hey, just a cessna with buoyancy, that sinks until it displaces enough water, then rises if foil provides force, which stops if the foil ever leaves the water (equivallent of an AoA 'stall') and thus loses lift suddenly (causing it to sink from gravity, causing an increase in drag and a slowing of the vehicle and lowering of lift and a cascade of problems until forward thrust is achieved and we start going faster again. All of which is some number of seconds during which you're losing the race.

---

I did a 'road' experiment the other day (lua sets a point list and it adds textured rectangles along that path, but doesn't alter any geometry, nor does it auto bank or change collisions). It might actually work ok for 'game trails' with the right texture.

in which case, the animals might actually leave behind trails they frequenly use, automatically. Though probably that would just expose the simplicity of their brains

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
I made a little progress towards my hydrofoil sailboat. Drew lots of pictures and worked out my math compromises (sufficiently realistic to be interesting, but not an actual hardcore simulation)

Made some initial inventory items for various kinds of boats. Trying to keep things like hydrofoils as an option that can be added to any sort of boat.

But step one is buoyancy, and I opted for a value that would work with a flaps-like control, where you set your overall buoyancy (neutral, sink, or float), and then, like a four wheel drive shift lever, you can switch from boat to submarine to thing that crawls along the bottom. But that would be a special gearshift not present in all boats (but technically feasible for all).

I do run out of available controls, however, causing some incompatibilities.... like I think maybe sailboat controls conflict with submarine controls to a degree I can't entertain a wind driven submarine option.

ANYWAY, so there is now a 'root' aero with a bunch of globals for the whole vehicle, including the 'displace-able water volume' and the 0-1 buoyancy setting.

Then at any given time, I calculate about how much of that volume is currently underwater, and add a buoyancy force equal to the weight of however much 'water' that displaces. (and I am flexible with my 'water' density (there's a tweak for that))

if the buoyancy value is set to 0 (sink faster than a stone, 0 buoyancy), the vehicle can still fly like an airplane, while underwater (i.e. what has been available up until now with the cessna overcoat). But once you get a non-zero buoyancy value (your vehicle gets the setting), you are in real 'water' and things are different as you might imagine.

The cessna can now land on top of the ocean surface, for example, but if you hard crash into the ocean, you can pile down pretty deep and then buoyancy raises you to the surface and flings you (high into the air maybe) and you then ballistically fall back down, sink a little less, then bounce up and down a few times, before coming to rest on the surface.

A submarine would definitely get the buoyancy lever, and switch to neutral when it wanted to submerge and 'fly' in the 'water'

A cool battle tank might like to crawl along the bottom, or float up to fire its cannon maybe.

With my current settings (pretty large volume estimate) the cessna can really get accelerated by the buoyancy. I suppose I need to add some drag there to be realistic, but I like being able to pop out of the ocean with enough velocity that I can capture laminar flow and be flying almost instantly.

I guess I could add mass as an item attribute so, for example, you could equip 'boots' (in the RPG sense, invisible on screen) that added to your mass, such that now you sink to the bottom, where without them maybe you float (or with other boots you can walk on the surface) In that caase, does the gear shift appear because of your boots?

Maybe I wave my hands and say "items can have properties, which can be adjusted via the inventory panel" so I can turn the mass off in my boots with a checkbox on the item detail panel. Yeah, maybe something like that. (as opposed to an in your face screen control)

Anyway, buoyancy is mostly working, so next I have to implement "sometimes you steer with aerlerons, and sometimes you steer with the rudder/wheels" since boats are all steer by rudder (and require forward motion through the water for the rudder to work, but I will probably always have an engine to help with that). Point is, I can zoom along in a straight line (need to add 'turbulence' so as to get some random hops), but there are no ailerons, so I can't really turn. Also, contact with the surface needs to start a rotation into a level attitude and right now I pick up an odd roll now and then which can't be dampened unless I can smack into some actual dirt.

still, it feels like power boats might end up being a fun vehicle format, especially with hydrofoils. I guess you would want a button to turn the hydrofoil on and off, even if it was otherwise automatic in adjusting its camber and such. I guess that's what the hydrofoil AoA meter equivalent can do.

Then make sure these power hydros get depth charges and then have a battle between hydros and minisubs (torpedoes).

And my wife confirms that if I have submarines, I have to have a periscope, even if my super camera makes that un-needed. But as an aiming device for torpedoes, it sounds kinda fun.

I guess the periscope woult be an item (so you could get one later) and you would EQUIP it and it would appear on the button bar (but might not work with all vehicles)

Then you would TAP it to raise/lower the periscope, which would take over the center of the screen with something circular and gridd-ish and expose ....well, I guess it would just switch the display to a scene camera focussed on the target, with some last moment alignment from you (setting a lead angle, maybe), then either a periscope-only fire button, or the normal buttons are still available. But if it is a torpedo, maybe the scene cam could switch to a torpedo's eye view for a bit.

Technically, I guess I have the ability to render a second copy of the world, with a different camera and an inset display rectangle (rear view mirror sort of thing), but I haven't tried that and would probably mess up some 'visibility caches.

If I ever wanted to do something Portal=like, I would have to address this, but for now I don't mind using a scene camera for a few seconds on each torpedo launch. Maybe start with a closeup on your vehicle, face on, as the torpedo is launched, then have the camera 'dragged behind the torpedo' for awhile (or until contact)(I guess scene cameras should always snap back to normal camera when you hit a button,,, like it snaps back from 'spy on')

Anyway, I think I want to focus on power boat with fun boaty steering, some turbulence and whatever will pass for waves, and get rooster tails working.

Then add a turn-on-able hydrofoil that just lifts the boat up out of the water and increases its top speed (lowers the drag)

Then add sails as an alternative to the engine thrust. Which requires final control assignments. And I am still going in circles with MainSheet, SailsUpDown, rudder, rudder trim,

I am still leaning towards elevator trim for either mainsheet or sailUpDown, but live elevator might need to be 'trolling motor fwd/reverse' or something like that, and I don''t want to stray too far from 'pitch' which is needed both for aircraft and submarines. It feels too twitchy to use elevator control for mainsheet, but that AoA control replacement could probably be full of surprises.

end of babble

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Carbon Sequestration

How about something like "a chlorophyll-related additive to jetfuel"

Some magical molecule that is easy to make and you release it at high altitude (as needed), and it is activated by the jet heat and becomes some sort of plant-like pseudo cell capable of photosynthesis (or at least the Calvin cycle part, if I understand that), using sunlight and local water molecules.

Each cell, while falling to the ground (it's small, so takes awhile to fall), processes some number of CO2 molecules, creating 'sugars' which then sink to the ground/ocean, where they feed some critter who then is the sequestor of the CO2, until ultimately his poop is set on fire someday.

But hopefully thick layers of CO2 sediment in the ocean won't just immediately dissolve back into CO2. How is this related to warming permafrost releasing CO2. (Decomposition?) Yes, apparently the thawed plant material just continues its decay, but if you keep it cold, you defer that. So don't let things burn, and keep them chilled.


Because it's MAGIC.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
this weekend I hope to make a little more progress on my hyperfoil sailboat. hydrofoil... electrofoil...


I have a 'working' foil at the moment (regular 'elevator' math) but it doesn't really do what I want, and this isn't completely 'fun', so I think I might simplify that even further and just make it affect ONLY the vertical direction, and be just a lifting force for the boat as a whole that increases with the boat's speed. So as you go faster, it rises up (and reduces drag, and goes faster),

So I really only need more of an on/off switch and maybe a dramatic scene camera during the transitions as you rise up and zoom. (rooster tail should follow speed)

I'm throwing four particle streams from the boat: normal smoke trail from vehicle, rooster tail, unshielded atomic lava bits, mud bits if you hit the sea bottom, and something I hope will someday look a little like the expanding 'V' of a powerboat wake.

maybe that's five streams. Anyway, it's a bit too much and chaotic, and most of the particles are ivisible at night, so it's sort of a wasted effort.

I want a nice wake for when I am zooming along at medium zoom, and chasing another boat. (water is another 2D surface that constrains the boat motion making it easier to interact with other boats (unlike the 3D freedom of flight where it is much harder to chase another plane).

For the water itself, I am thinking of trying something like this:

* each terrain cell has its own idea of how deep the water is 'above it' (i.e. is it underwater, and by how much)

* the render of the terrain cell, adds a second triangle of water, where appropriate

* contrary to what I just said, these water triangles are all at the same elevation. (in real water, they would bounce up and down, but that would leave me with another panel-gap nightmare)

* but, I propose to maintain a 'cosine' value for each terrain cell, and do a little inter-cell interaction to modulate those so that they sort of represent the tilt of the ocean at that point.

* then, while leaving the triangle itself completely flat (and adjacent to neighboring triangles without gaps or tears), I just factor this cosine into the lighting equation, so even though the triangle doesn't move, the lighting acts as though it is sloshing around to different angles.

Which will probably just look like randomly changing triangle colors, which might not look very wav-ish at all.

And while I render thos triangles flat, I can remember the tilt when it comes to influeing the orientation of the boat, so maybe the boat rocking and the light shifting might work together to imply a real motion, without the real motion (and maybe you won't get motion sick).

maybe.

I also drew a picture re-doing the layout of the Inventory panel. Main goal is to have the PAN button remain on screen after you tap it (the rest of the screen turns into the inventory panel, but the PAN button is still in the same place and can be immediately tapped to toggle the panel back off, instead of looking for the CLOSE X in the corner. Small irritant :-)

But this will encourage me to consolidate the inventory 'buttons' along the bottom, with Pan just being one of them, but he can then optionally have a chat bubble which then spills into the area above the buttons.

Where he can say various sorts of things

"Hi, I'm Pan, your Personal Autonomous Nano-factory. I hold your stuff for you!"

"If you can provide the raw materials, I know how to make a few things for you"

"Let me know if you discover any new recipes for useful items."

"I've hacked into this claim dome and found a recipe for Grandma's Oat Cookies, which look like something your Red Llama Pods might like to eat"

etc.

Some tutorial stuff, some quest stuff, some storyline stuff, whatever words the script wants to put in his mouth. Hopefully with ironic 'gags' about device notifications.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
So far this weekend, I have felt particularly blind, and use that as my excuse for little progress. I went through my 20 or so vehicle type ideas and reduced them to 10 ro 12 that made my 'heart sing' when I thought about them.

I made inventory items and quick aero prototypes for each, but need to develop a couple special controls (like the buoyancy gear shift with 5 potential levels of buoyancy: sink to the bottom, water neutral, float to the surface, air neutral, and float to space.) If you're neutral, I just mean the buoyant force exactly cancels gravity.

Buoyancy is, in fact, antigravity.

Collective effect of gazillions of particles -- just like gravity.

should be something useful in that.

---
Just to babble about the vaporware vehicle types:

LANDER - lunar lander style platform, with single engine you can only pulse for a short time with available fuel. Is sink to ground, but once there I'd like it to be a vehicle of some sort. Either wheeled or a 'walker'

CESSNA OVERCOAT - not vaporware.

SPEEDBOAT - basic boat with throttle providing power forward, rudder for steering, is 'float to surface', but can leap from the water a little and then dive down a little and then return automatically to the surface... dolphin-ish.

Includes an optional hydrofoil which just lofts the boat out of the water (less drag) as it goes faster (virtuous cycle until the foil is on tip toes just grazing the surface)


SAILBOAT. Similar to speedboat, but throttle now raises/lowers a mainsail. Some sort of new SHEET control sets limits of BOOM motion, which (in the context of relative wind). Some sort of automatic KEEL, and 'interesting physics' on the SAIL to provide a driving force, which is coerced into forward motion by the keel, but excess energy turns into a rotation towards capsizing.''

MINI-SUB. similar to speedboat, but includes buoyancy gear shift, and can switch between float to surface, water neutral, and sink to bottom. Should probably prevent it leaving the water, but I sort of see everything capable of crawling out onto the land and being some sort of tank. But boats should just drive downhill until they hit water, then once in the water, they should collide with 'banks' and remain in the water. And jostle in the waves and follow currents, etc.

Minsubs, of course, fire torpedoes, and are at risk from depth charges, and can make a ping noise.

Maybe they have to ping within 10 seconds of launching a torpedo.

.. I mean.. sending a loud sonar ping that everyone can track, starts a 10 second timer during which the torpedo can be launched (and at the end of which the torpedo becomes armed). So you want to be on a new course asap since everyone saw your ping, and not still be near the torpedo when it becomes active. But probably need to hold your course awhile just to aim things properly, so perhaps it is pressure-filled fun.

TANK. You know, massive tank armies. Clip-on special stuff.

PARAGLIDER. I put all my 'parachute' related ideas into this basket. Basically, the SAIL math on its side with a steerable 'wing' parachute. Basically a cessna with a broken engine, and my goto vehicle for gliding in general. Hopefully with a fun ripply render. Optionally has a paramotor of some sort (electic? COPV?) to provide at least some initial thrust to get into the air.

AIRSHIP. This is an example of air-neutral, with a gear shift from 'floats to surface' to 'floats to space' so it is gravity free while in the air, with no special 'flying' required. Needs to make a nice explode-y target for the other vecicles to shoot at.

Floats to space would be a special option if you wanted some elevator-like vehicle to get you back to 'orbit' (where I thikn there probably needs to be some sort of Space Station (The USS Exposition) as place to sort of give you your first couple quests, meet Pan, etc.

I'm thinking one day Pan will be upgraded so much he has access to his memories from before he was factory reset (on the day I meet him).

And, of course, he used to belong to 'Steve' the mythical hermit trillionaire who invented bio-synth technology and then disappeared, presumed dead (but of course, to be found in some cave on this planet.

Bitter, maybe, and plotting revenge, but after seeing Pan again, and seeing how Pan has developed while becoming our friend, that his faith is restored and Steve designs us something cool and gives the recipe to Pan, which is the maguffin for the follow on starmap" "Pandora's Pandemic!" where Pan is KIDNAPPED and we have to rescue him with the help of ...)

But Pan is our bot now. I want us to take him in to Mos Eisley in the morning and have his memory wiped (again).

I don't really. I teared up a little just typing that.

----

JET BOMBER. I felt I should have something faster than the cessna, but otherwise like an airplane, but basically an arcade-mode jet where gravity doesn't amount to much given the insane overpowered engines. You basically roll until what you want is 'overhead' and then pull-up until it's "dead ahead".

But super fast is only fun for solo missions, not dogfights. So by callig it a JET BOMBER it can be an arcade mode jet (easy to fly), has an excuse to be huge and kinda slow (for a jet). Might end up more like an airship (but 'fast as a cessna')

my map is only 8 km from side to side. At 100Km/hr that should take about 8% of an hour, um 8% of 3600 seconds... so.. 288 is seconds.. 4.x minutes. That feels 'gee, a lot of terrain'. But if I go 1000 Km/h, it's jeepers, still 30 seconds. I guess that's not too awful.

I forget what my orbital velocity is, but suddenly I would like it to be around 10,000 Km/hr (4 seconds per orbit). I guess I mean that would be my escape velocity (return to grid space)

Back to the vehicle list...

SKIS

Think stick figure skis. Probably a control to 'deploy' them on/off (while keeping them equipped, but just snapping them to your back for awhile or something). While deployed, any slope > X degrees steep becomes frictionless, and you just slide downhill like a raindrop. LEFT/RIGHT on nav stick shifts your balance, I guess, to turn you, but you are also 'steered by the dirt'

I have zero experience with downhill ski-ing and only one cross country trip, which was pretty much the adventure of a lifetime, and possibly the last truly outdoorsy thing I will have ever done.

ROCKET BOOTS. These don't sing to me (not like skis), but they feel kind of obligatory. Basically the same as the LANDER in terms of flight.

EXOWALKER. An Exoskeleton walking giant robot sort of idea (Chicks dig giant robots) Probably implemented as just another critter skeleton, with maybe a few quads of texture dabbed here and there. With or without a tiny little 'you' nestled inside somwhere.

But Logically, it should just be a different critter you are controlling, since 'you' are never anywhere near any of this action anyway. You are COMPLETELY SAFE. It's your bio-synth critter which is at peril.

Anyway, I think that's enough, and I will then include these as stock vehicles and then the starmap can add more or overwrite these by using the Vehicle Tweaks.

Note these are vehicles, not inventory items. Inventory items set the player-facing name, the description of what it does and how it works, and then a handful of properties. One of which is the 'vehicle index' (which of the predefined vehicles) or -1 if it is not a vehicle.

I anticipate some vehicle-specific properties (like the option of including the hydrofoil), so there might be only one speedboat 'aero' definition (which includes the hydro foil), but then the starmap can include several different items with different names, some of which enable the hydrofoil, and some that disable it. So the same 'vehicle' is used for speedboat, rowboat, and probably surfboard, with just different properties (like top speed, and which controls are present).

But right now the only property like that is the vehicleId. While I only provide a dozen ish stock vehicles, I think the Vehicle Tweaks support a much large array, if a starmap designer is into that sort of thing.

Anyway, I didn't get much sleep, the cat needed me at 5am and now it's 10am and all I want to do is go back to bed. So I probably won't be doing "sails" tonight.

End of babble


---

I was pleased to finally decide on using the throttle control to raise/lower the sail. Though I don't know what I am going to use as my emergency trolling motor control now.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Somehow I got side tracked into making wheels and tank treads, and I have reached the point of new aero types for wheels and tank treads, but I have to think about if I want to include a 'suspension' with that, and how I will handle steering.

I think I might need as many as three aero types:

Wheels that turn with steering
wheels that always point forward
treads that always point forward (but can spin in opposite directions while turning)

But I will try for a single aero that takes a property or two

I had to plumb 'lit' 'flipSides' and 'twoSided' booleans all the way down my triangle stack, but now those are all working everywhere, so that's nice.

Right now I have just added a permanently spinning wheel to the rudder of the cessna overcoat. Not needed there, but easier to develop on.

---- later -----

so now it picks up its radius from the 'aero control quad' height, and then divides that into the width. If they are approximately equal, you get a round wheel. If they are wider than 2:1 r so, it switches to 'tank tread' and the wheel is cut in half (vertically) and horizonal plates are inserted along the top and bottom to widen the thing, but only in exact 'plate widths'

To give the illusion of tread plates moving at the right speed I basically only 'animate' the motion of a single plate width, after which I can loop to the beginning and do it again, and since all the plates look alike, you get the illusion of the whole track going in a circle, when really it is just moving forward one plate and then snapping back.

I haven't really tested it yet, but it can definitely generate wheels and tank treads of useful sizes that roll at what appears to be a proper rate.

I am frustrated by my old 'never stops' bug which I still haven't gotten to the bottom of, so I can never actually stop and hold still while in a vehicle.

The sad thing is that I have looked for that more than once without luck, showing that part of the code is clearly a pile of spaghetti that needs to be re-written (I have multiple different physics systems for different environments and vehicles, and I am pretty sure one of them is leaking into another and providing an unexpected acceleration

It might well be that the code that determines the slope of the land you are standing on (and then rolls you downhill from that perspective) is perhaps using the wrong normal. For example, using the normal of a nearby triangle by mistake.

But honestly, that code looks pretty perfect, as it's been through the ringer of suspicion many times and has had most of the stupid beaten out of it.

I think I finally added enough logging that I can monitor it in real time, but the sea of data that results is not much fun to look through, so I have never had the energy to follow it all the way to success, though as with coding in general, the longer you hunt for bug #1, the more 'other bugs' you find and hopefully fix along the way.

[ 09-23-2021, 06:24 PM: Message edited by: samsyn ]

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
I did my usual almost nothing over the weekend, tried to get the debugger working, to find the 'cessna creep' problem (my gut feeling is somehow my drag equations are generating a positive force instead of just counteracting forward motion. But when I turn that math off, the problem remains, so I dunno.

The debugger never worked for me until I used the voodoo of

1) disconnect all but one USB device
2.) reboot it and rejigger the cables
3.) make sure you're starting from a complete stop
4.) use the fastest tablet you've got

And then it can hit breakpoints. Otherwise, it runs pig slow and no breakpoints ever hit.

But by the time I worked that out, and paid attention to the cat, it was late sunday ight and I was tired.

So all I managed to do was dink with the 'aero' definitions of my vehicle set. I made something that can render 'tank tread' with rotation matched to distance moved... and that includes 'wheel' (very short tank tread). Also, I added a 'sail' aero which is controlled by a 'mainsheet' and generates lift, which then billows the sail, in theory (currently, the billow is quite odd)

I added an aero type called GLOBALS where I stick some physics context for the vehicle as a whole (what kind of engine, if any, whathorspower, etc.)

And that includes a primary and secondart animation id, so you can make your critter sit in an appropriate posture when traveling with that vehicle.

If you don't call it out, it will default to anim3 'piloting'

and animId1 would generally be a normal seated posture for this sort of vehicle. But animId2 is an optional override that only takes effect when the vehicle is 'on the ground'

Basically, this lets you look like you are seated while in the air, and then switch to a Fred Flintstone running animation as the plane rolls along the ground.

Or so I tell myself.

----

I was watching the Las Palmas Volcano at a particularely active moment (huge lava river pouring down the newly minted mountain)

And while my heart goes out to the 500+ homes that have already been destroyed, all I could think of was 'I could do that in synSpace ant it could look cool'

But man, this livestream is actuallt scary. Like a very very wide river of lava slowly (not THAT slowly) rolling towards you, with huge globs of molten lava falling from the sky and splattering all around you. Probably tons of heavy burning hot melty metal, and would feel very unpleasant as it crushed and fried you. And there is nothing you can do to stop it. Plus, it's like a zillion diesel cars cheating their smog checks all at once. How can we compete.

---
Speaking of which, we just got our smog checks (our cars are both > 30 years old, so we have to do special (extra $$) tests, but we both passed.

But the writing is on the wall that we should cycle into something newer before the next smog check (2 years). If the EV credit comes through, maybe we can join the club. I suspect I no longer need a car, and could use uber or robotaxi (or even a OneWheel) to get to the places I need to go to.

But it's hard not to feel some sense of personal diminishment to say goodbye to such an iconic possession.

So, we'll see. Probably boils down to economics and whether Tesla really makes a $25K car. (with $12K EV credit). That would fit my needs perfectly.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
yay, the cessna (and all vehicles) can now stop completely when you turn off the engine (unless you park on a hill, and then it will roll downhill)

And since it took me so long to find this, I am going to describe it here in all its boring math glory.

So, the issue was in my flightSim code, which integrates a lot of separate forces and accelerations and ultimately causes 'torque rolls' and velocity/altitude changes. That stuff all works perfectly.

But when you land on the ground, you become 'a car' and I have a lot of math to make that steer in an enoyable fashion (the forward motion of the 'car' being influenced by gravity against the slope of the terrain where the car is)

At the end of that math, I have a new velocity for the vehicle (3D velocity: vx vy and vz)

and again, that math is perfect.

However, for arcane reasons I convert the velocity into a heading angle and a speed value, and that's what is actually distributed and stored.

I get the new heading angle with an arc tangent (aren't I special!) like this:

headingRadians = Math.atan2( vy, vx)

That's one of my favorite functions and always works very well, though I worry about its speed, so I try to minimize the use.

Anyway this also works, giving me my '2D (X and Y only) heading.

But then I have to compute the speed, and, of course, that's just:

speed = Math.sqrt( vx*vx + vy*vy + vz*vz )

And that would be fine usually, but when you STOP, you set vx and vy to 0, but vz continues to be non-zero because gravity is constantly pulling straight down on the car, until it hits the ground, at which point I have it bounce (straight up) a little (on flat surfaces, on angled surfaces the bounce can be at an angle, but assume here we are on a flat surface)

And that ends up meaning that vz is much larger than vx or vy (even though it is small, but they are zero, coz you're "stopped")

So when I take the length of the full 3D vector, it includes that gravity velocity, but since the heading is just the 2D heading, that ends up turning the down acceleration into a forward velocity, making the cessna incapable of stopping, especially when the ground is tilted.

--

ANYWAY, so the fix was just to simplify

speed = Math.sqrt(vx*vx + vy*vy)

ie. the '2d' speed, matching the '2d' heading.

And voila, the vehicles can now roll to a complete stop.

Then I ran into another bug. Once I sucessfully stop, I could not get going again. That turned to be an optimization I added a zillion years ago where the propeller math requires that I divide the engine power by the current velocity, and when that velocity approaches 0 (or is exactly zero), there is a risk of the propeller providing an infinite pulse of energy when the plane is just getting started.

So I put in a hack to not do the division if the velocity is too small.. but then it turns out I didn't set the propeller power to anything at all, so I effectively had no engine at that point. ooops. Old bug, but never showed up because the cessna could never stop :-)

Anyway, finally I can put this bug behind me, and get back to sailboats.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
another weekend without progress, though fixing that bug still deserves some celebration.

I did change a couple of lines of code though.. I created a new aeroType called 'Panel' which is similar to a normal aero, but provides no lift or drag. It's just a cosmetic quad, which can be 'textured' to give the illusion of some structure you want to appear 'in triangle space' (otherwise, vehicles are only rendered in 'line space' (skeletons))

My thought was to use -1 to indicate 'my team flag/color' and a handful of uv mapping choices (as opposed to a full uv definition), so each vehicle could have a strongly visible team affiliation (red wings, with your FACE icon in the middle, for example)

Sort of a baby step into 'skinning'

And I doodled in my book a lot. I can write OK, I just can't read it back :-)

I will probably create a 'tweak' class for "meshes" where the script can define up to N meshes and tweaks are then used to set up a vertex list, a triangle list, and material/flags.

Then, without TOO many numbers, a script should be able to define the shape of simple buildings and structures, if nothing else. Then refer to them by their 'N' value in some other tweak (like 'change the mesh of flora object 75 from 'bush' (N=45) to 'airport' (N=132)

And maybe someday the same mesh can be glued to a critter skeleton, then with multibone weighting, and welcome to 1995! My life is passing before my fingertips :-)

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
I fixed tank treads (they weren't VERY broken, just kept becoming wheels).

---

I think I have all the pieces in place now to support some actual 'game' behaviour. So I need to wire the script in:

* script sets 'species tweaks' which defines a handful of critters, names them and provides their RPG stats. (or accepts the engine default)

* engine starts with randomly placed (non-functioning) HIVE objects, throughout the world. Each is configured to create a particular species of critter. (though you can change that setting)

* moderator has a button to clear old game and start new one, which let's say lasts for 15 minutes.

* players then head to the planet's surface and wander around (or use tools) to explore and locate 'unclaimed hive' (broken or working).

* players then use claim bomb technology to claim the unclaimed hives as fast as possible. Once claimed, the births of that hive are credited to that player's team.

* Hives have that 'stamping' motion which I now feel connotes they are '3D printing' new critters. But not every stamp yields a new critter. There is some form of 'mana' (probably same as Pan's "heat" currency) that has to build up first, then the next stamp makes a critter.

And maybe every stamp does emit a puff of gas (intended to be good for its critters)

Some hives are working and just need to be claimed. Otherwise might benefit from being switched to a different species. Some might be broken in some way requiring crafting to repair.

Bottom line, you want as many hives as possible, stamping out critters rapidly, and for those critters to thrive (increasing available 'heat')

And in this c oncept, the species doesn't matter (just your skill in selecting which of the available species would thrive in this location of the planet). All critters belonging to you would be tinted your team color, no matter their species.

The moderator script would accept updates from the player scripts to keep the official score counts (and distribute them when needed, and declare the final winner at game over.

Ideally with a bunch of stats.

The goal could be just to have the biggest population. But critters could have natural enmities, so fighting could be an element. You might feel the need to cull undesirable wolves, preying on your sheep, as it were.

You might slip on the wolf's clothing yourself from time to time and visit opponent's shires..

But basically, the engine just reports discrete events (species 3 gave birth at hive 9 owned by player 7, while 4 members of species 7 died in the previous 10 seconds)

The script is then also in an opinon to pad the numbers and make up other things (overpopulation has led to a 10% loss of all species 11 members) which it pretty much just has to announce.

Which it does by setting 'score tweaks' which the enegine doesn't know the meaning of, but knows to render the values in a specific format somewhere. probably a SCORE mfd panel.

so a script makes up the actual points earned and passes that to the engine who then either just displays the values given, or uses certain well defined values in its own computations.

ANYWAY, the above is basically "WarPath in Critter Clothing"

One special value would be "virtual population of species 7 near hive 12" where over time, the script may feel a thousand critters have been born (and only 300 have died, so the current pop must be 700, virtually, but since no one is visiting the area near that hive, NO actual critters have been spawned.

But I KNOW the area around hive 12 is, say 1000 square meters, so I have an average of 700/1000 or 0.7 critters per square meter (on average).

So, if I can see a total of 100 square meters near me, I would expect, on average to see 70 critters around me at varying distances.

Which is still a bit high, pretend the nnumbers worked out to '7'

Anyway, those are the critters I actually spawn around you, giving you the illusion of a densely packed environment (when the pop count is high) without actually ever rendering more than a couple dozen critters.

Is the idea.

So in that case, the script provides the wild values '700', the engine works out the area per hive, and that determines the virtual critters per square meter which determins the flood of spanwing/despawning as you move nearer to and further from the hives.

And the 700 might need to be broken into several values (that add up to 700). Like 150 babies, 200 children, 500 adults, 27 aged, and then the script can use simple math to move critters through those categories and be able to apply selective disasters and the like.

Still, I need a more specific instance memory if I ever need to preserve a specific critter's RPG stats. This just preserves the 'mix' on average (which maybe should be level based, come to think of it.. level 1 = baby, etc.).

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
OK, another weekend dawns!

I changed the 'aero' API, so now each aero can optionally call out a texture and be rendered in triangle space (instead of line-space skeletons)

I made a simple sailboat model with a reasonably attractive sail textured with your 'team flag' (player color and FACE)

Most of the physics is already real since it comes with the aeros, but I still need to add controls for things like the sail being up/down, and the SHEET setting (max limit on BOOM deflection)

After that, I'm sure there will be other issues: like keeping boats in the water (I think I will just give them 'shallow water collisions' so they 'bounce off of' any coastline the bump into.) instead of letting them float up on land and go cross country (which I do want some vehicles to be able to do, but not sailboats)

The 'smoke' and 'rooster tail' triangles actually look pretty promising as they end up at ocean level (as described above), so by animating them up and down a little I should be able to connote a sea surface that is always in motion (hopefully not make anyone seasick)

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
so far just watching youtube, waiting for my eyes to warm up, but here's something worth watching.

https://www.youtube.com/watch?v=cJIe5oFPZEw

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
virtual sea surface is coming along. just flat triangles floating on waves that aren't there.

most camera angles are high enough that you can't tell the triangles are all above the actual (flat) ocean surface. And I can still posit other effects via the lighting

I need better colors though, something that is high contrast up close and more vague in the distance. I think I am going for the 'glints' on the wave tops.

But when things work out, it's a pretty nice illusion with nearby boats showing considerable up and down movement relative to you. The camera is locked on you, with no 'roll', so I am hoping it can't make you seasick, but I imagine I'll need a way to turn it off.

Lots of tweak opportunities for the script to say how wild the waves are.

THE MATH

It's pretty simple, I have N 'wave emitters' that are each generating a sine wave with some wavelength (10-100 meters ish) and amplitude

I place them around the map (they don't even have to be in the water)

So, if you were looking right at the emitter point itself, you would see that 'wake triangle' go up and down the full amplitude of that emitter.

But if you were looking at a different wake triangle, that was far away from the emitter, it would also go up and down, but it would be 'delayed' (by travel time of the wave to reach this point) and 'decayed' (over time, waves lose energy and amplitude)

Then, I generate dozens/hundred of these wake triangles (they live 60 seconds each, and are spawned by each boat, so each boat is surrounded by them) and each goes up and down with its appropriate exact delay, so you can see the wave fronts move through the wake particles like people doing the 'wave' at a sporting event.

And, of course, each wake particle is moved by each emitter. I have 5 right now (one in the center, and 4 at the corners of the map, though I think if you want to have variety you probably should clump the emitters in the 'noisy' region and let the calm places be far away so decay works in your favor.

I still need to make the climate system trigger weather events (like snow and rain), but trigger excess waves would be something else that could be done.

The math is a bit more expensive than I'd like, but I think I don't need as many particles as I currently have (though picking the perfect colors will probably make a big difference in that regard),

but I'm not optimizing anything, so I do five square roots per wake particle update, and I am budgeting something under 200 particles for world wide wake needs. So that's like a 1000 square roots, and you really need an accurate measure of the time delay based on distance.

Though that mainly benefits short wavelengths... but you... well... I'm not sure. But it feels like the smooth swells you want require precise timing. And once again, the symmetry with the synthesizer math... why can't an oboe be the source of the wave emitters? (slowed way down)

By having a variety of wavelengths, at relatively prime values, you get nicely chaotic motion that occasionally shoots high in the air, as it were.

And these wake particles are instantly pushed UP, but when the time comes to fall, they are only pulled down by gravity, so a sudden rise in the sea actually 'throws' a few particles in a way that looks a bit like foam thrown from the surf (if you're being generous :-)

Also, when you are near the shore, some of these particles spawn on land (I could test, but I'm too lazy at this point) and in that context they arent floating on the ocean, so the rules let them flow downhill, which generally means back into the ocean, at which point they become wake particles again and lose their lateral motion.

Which means it SHOULD look a little like foam splashing onto the land, then slideing back to the sea, and then sort of staying at the shoreline, and MAYBE lookig a little bit like surf crashing on the shore.

I guess I should let them keep lateral motion back into a deeper area of the sea so as to connote the surf riptide ish ness.

Well, if you use your imagination. I just hope it doesn't make anyone seasick. When it's a little further along I'll post a youtube.

But first I have a new major bug to fix.

no matter what vehicle you are in, or on foot, what actually gets distributed to the other players is: 1) your position, 2) your velocity, 3) your heading.

This is so your heading (nose of ship pointed) can be different from your 'direction' (the heading of your velocity vector -- 2D heading using just the X and Y of the velocity)

Internally, with the new flightSim module, the actual orientation of the vehicle is defined by a 4x4 rotation matrix which is maintained by the 'aero' math.

So, when I see YOUR vehicle, I need my copy of that matrix to match (roughly) your copy, and the way I chose to do that was not very good (great for grid space, but not for critter space).

Basically I just need to received your self-assesment of your HEADING (ship nose) and then Jam that into my matrix, or 'lerp it in' over several frames to make it look smooth.

But it's kind of a production in 3D:

* start with current FWD vector (from center to nose) and desired FWD vector (based on the HEADING you told me you had)

* do a dot product of those, but one that ignores the Z values, so it just returns the cosine of the angle between them (the error between what exists and what should be)

* if the error is large enough, do a cross product of those same two vectors (did I mention they were unit vectors?) to get a third vector at right angles to them both.

* then apply a 'rotate about axis' rotation to the matrix using the third vector as the axis and some portion of the error angle (1/10th, for example, would take 10 frames to catch up)

In my world, I am lucky and get to skip the normalizations and cross product since a simple UP vector is good enough for the axis of rotation in this case. And on my flat earth, up is always (0,0,1)

Still, I need to do a fix like this, or my view of your vehicle has a crazy heading. If its an airplane, it sort of fixes itself because lift on the tail aero straightens the plane into the direction of wind. But for the battle tank, no amount of lift is going to change its heading, so it just looks like it is sliding sideways across the countryside.

Now, while it's a pain to have to digress into this old distribution code, it IS an opportunity to do it a little better. Like I am not distributting bank angle at all, and am just depending on the aeros to make it seem reasonable. But it would be more immersive if I actually passed at least a turn/bank indicator, or maybe a simulated control surface movement derived algorithmically. "Hmm, his heading has changed from 90 to 88 degrees, he thus has turned 2 degrees in the last 500 msec, so his turn rate is X, so until I see that has changed, I will feed that into the flightSim as his turn rate, with the understanding that he is not allowed to turn further than his actual predicted heading.

So then it's only the aero math that ever actually turns the plane. And while my view of your bank angle is not the same as your view, both should make sense from the perspective of the vehicle's flight characteristics and appear smoothly animated.

Which is not true today, where each incoming position packet leads to a jerk in my view of your vehicle.

So, ironically, if you lose your connection and I stop receiving update packets, THEN your (zombie) boat floats on the waves beautifully :-)

Happy Columbus/Indigenous Peoples day!

Hey, it was very windy today, and I remember a s kid in Oregon one Columbus Day it was super unusual wind (blew a bunch of trees down). I guess it's always windy on columbus day. No other explanation is possible.

----

That WAS a neat day. I unzipped my coat and held it out like a delta wing and I could fly briefly (probably more than briefly if I wasn't careful!)

You could totally 'air surf' in wind like that. do people do that?

Mom got us inside, but then there was this huge fir tree (trunk was at least 3 feet in diameter) and the trunk was right outside a plate glass window in the living room, and as the wind blew the tree (100 ft tall? big tree, dwarfed the house)

Anyway as the tree rocked back and forth, the dirt at the base rose and fell (much like my wake particles!) and cracks developed where you could see the tendrils of roots in the dirt, getting stretched surely to the point of breaking, so then we moved elsewhere lest it throw dirt right through the window into us.

Of course, if that tree had fallen towards us, it would have gone right through the house, all the way to the basement, where we huddled in fear :-)

end of babble

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
oh, sorry, that tree did NOT fall down (it's there to this day, in fact).

But several others did (on our property, which was just a couple acres so that was a lot)

Just snapped a handful of oak trees (1 foot diameter), and pushed over the second most giant fir tree (in the front yard, and fell away fron the house, but I think it might have broken the septic tank.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
samsyn
Administrator
Member # 162

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Well, that was refreshing! Something simple. that works great and is truly useful.

You can now set tweak strings via the text chat, by starting your text with a forward slash followed by the tweak string, for example:

/100=0,123,456,99,310=45,19

Which all the tweakers know means:

set tweak 100 to '0' (selecting planet 0)
set tweak 101 to '123' (fractal seed)
set tweak 102 to '456' (flora seed)
set tweak 103 to '99' (star seed)
set tweak 310 to 45 (whatever)
set tweak 311 to 19

The star seed is what determines stars that appear in the sky when on this planet (critter space). Not very important really, but it appeals to me that everyone sees the same sky from this planet.

Actual tweak id numbers and legal values will presumably be documented someday on the synSpace starmap developer site.

After I release v1.10 though.

--------------------
He knows when you are sleeping.

Posts: 11014 | From: California | Registered: Dec 1998  |  IP: Logged
  This topic comprises 5 pages: 1  2  3  4  5   

Quick Reply
Message:

HTML is not enabled.
UBB Code™ is enabled.

Instant Graemlins
   


Post New Topic  Post A Reply Close Topic   Unfeature Topic   Move Topic   Delete Topic next oldest topic   next newest topic
 - Printer-friendly view of this topic
Hop To:


Contact Us | Synthetic Reality

Copyright 2003 (c) Synthetic Reality Co.

Powered by UBB.classic™ 6.7.3