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

  next oldest topic   next newest topic
» Synthetic Reality Forums » Android Games » synSpace: Drone Runners » synspace: Drone Runners 1.0.09 Release Notes (Page 2)

  This topic comprises 2 pages: 1  2   
Author Topic: synspace: Drone Runners 1.0.09 Release Notes
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 
It's been a surprisingly long time since I did an extended blabber.... other than on tape where my language skills appear to continue their decline.

I'm also a bit distracted with something happening in my eyeball at the moment. But I'll leave the TMI for another topic maybe.

Now that I have some terrain, I am back to working on the 'inverse kinematic' part of the skeletal animation system.

That consists of several parts.

* the 'pose' from the current frame of the current animation. This provides the XYZ locations for each joint of the skeleton. It's what the designer WANTED the skeleton to look like at that moment.

* POSE. The current joint positions are then compared with their 'pose' positions, and the difference is turned into a FORCE which points from the current location to the desired location of the joint.

* PHYSICS. These 'pose forces' are turned into accelerations (each joint has a mass, so a = F/m) which are then applied to the joints, updating their velocities and positions. More or less 'towards the pose position' but at some speed, i.e. laggy. And with some overshoot and ringing once they get to their target. That's supposed to add 'character' and 'semi-random-emergent-behaviour' to what is otherwise a mechanically repeating cycle.

* IK. At the end of the day, there is gravity holding your feet to the ground. The animator might have 'misplaced' a foot a little high or low... or you might be walking on uneven terrain. Lots of reasons why the foot does not appear to be really engaged with the ground. So to simulate that, each joint has a simple state machine which is tracking whether or not it is in contact with the ground (and now uses the real elevation data, which can be different for each joint).

The moment the foot hits the ground (currently triggered by PHYSICS hitting the ground, not POSE hitting the ground, which can happen at different moments), that ground contact point is remembered, and the joint is FORCED to remain at that point until it is clear it should lift.

That moment of lift is a bit squirrely at the moment, leading to humorous lower leg distortions.

Originally I used the POSE start/stop timing, but the visible foot might still be in the air and that seemed a bit abrupt (actually, it's sort of neat, like the critter is slapping their foot down suddenly with every step.) But it's too chaotic, especially at higher speeds.

So I switched to using the PHYSICS position to be the final arbiter of start of contact, since that makes the most sense to the viewer

It also does this thing that if the heel hits first, it gets glued, but the toe is not glued yet and ends up shooting forward until the foot is x times longer than it should be, and then hits the ground and gets glued, so the bad length is cast in stone until the end of that step.

And when the foot length varies, your brain interprets it as 'no, it can't change length. feet don't change length, it must have just twisted so that now it is facing me' and that illusion is so strong from all camera angles except for straight-on, that it took me a long time to realize the foot was NOT oscillating left/right at all. (well, maybe in some cases where the mass of heel and toe are super different)

I just saw 'untitled goose game' for the first time. It is, of course, a good example of what critter was intended for, except, of course, it's already a zillion times better :-)

But in "synSpace: Drone Runners Critter Arena and Dance Party, for android", you can roll your own goose.

Which reminds me, I need a standard animation for 'honk' (the critter's signature thing that it does when you push the honk button. Like your horse rears up like the Lone Ranger's stallion.) The super standard animations now are: (with an attempt to order them). (note: you can have additional animations, but these are sort of expected, so I want to assign slots for them, even if you don't provide them.)

STAND (mandatory: at least pose 0)

A couple pose animation of the character standing comfortably and breathing. Ideally with a handful of extreme poses (legs crossed, hands on hips) that it switches to occasional, plus independent control of hands and head to look at things, point at things, aim at things, grab things, use things, mount things.

WALK/RUN (mandatory)

4 or so poses showing a complete walk cycle. (for a human, that's after both feet have moved forward and your pose is back to the start). In theory, I measure the actual stride of each 'foot' (any joint that hits the ground is a foot in this context), and then modulate the period of the walk cycle as needed to match (so that even without IK gluing, the foot still seems mostly connected to the ground and not 'ice-skating').

I think running might be more of a gait change, and using the most extreme position of the poses (which otherwise the physics never quite reaches). But super fast running has to switch to something ballistic, with longer and longer airborne periods and quick hopping motions on joint contact.

HONK (your chance to shine, but optional)

You'll always have a honk button, to do your signature thing. You ought to have one. But you can also trigger any extreme pose you like, given a suitable button and context.

RIDE (optional, I guess, but why not?)

FOr driving a vehicle, or riding a mount. I'm thinking a ridable item will indicate the foot and hand nodes it needs, and your skeleton pose should allow you to 'snap into position' if you are close enough to the right shape (think biological molecules 'fitting' each other). So this is at least a two frame animation of you 'breathing while on the vehicle', but also should include some extreme poses for maybe 'strong G forces left or right'

It's possible this should be two different things categorized by rough pose needed (sitting in a chair, straddling a horse, hanging from a hangglider) but I'd like it to just naturally follow from 'mount says your feet go here and your butt goes there'

FALLING/RISING (mandatory for a fighting char)

Something to handle getting knocked down, getting knocked out, falling asleep on the ground. Might include 'seated on ground/object'

Probably includes 'dying' but I'd like to minimize that in favor of 'returned to their home planet' or that "they were bots all along and it's still ok to 'kill' bots"


ATTACK 1 and 2 (probable for a fight char)

A primary and secondary attack (biting, clawing, hitting, stabbing, shooting, slicing, casting, invoking, commanding a minion, etc). What you can do in a fight. Maybe more than 2, but at least 1 for most critters

DEFENSE 1 (probably for a fight char)

Some sort of possible 'parry' to an expected attack. These might be triggered extreme poses while inside a generic mid-fight animation ('breathing during a fight')

But during a fight (or a dance party) you should have puppeteer buttons of some form that trigger the extreme poses for your current animation mode. Something maybe that follows the arc of you hand, again trying to bring 'music' into it (play the pose keyboard and see the critter move into saturday night fever pose until you release back to the generic 'breathing' for the current mode.)

RECHARGING (probably for a fight char)

For a horse, this would be periodic semi-random grazing, possibly only in the presence of a resource (grass, oats, boots, barn doors,..)

For a biped, maybe they eat a sandwich or cast a little spell.

So about 8 stock animations with maybe a minimum of 20 or so poses. (and once I add formal 'joint tagging' I could provide a starting animation for each of them based on 'how legs work') so hopefully you could get a boring set of stock animations 'for free' and then just worry about tweaking them to make them unique.

Then again, that might incent all the critters to use their defaults, and hence have no explicit reason to exist. Maybe better to have super static defaults ('stand pose 0' for anything unassigned).. yeah.. I think that leads to better/fewer critters

----
Right this second, the state machine is only handing STAND and WALK, going between them as the autonomous critters wander aimlessly. The goal at this stage is to make those transitions as nice (and interesting) as possible, including some sort of foot fiddling when 'turning in place' (though maybe I just don't do that and turning requires forward motion usually) (tanks notwithstanding)

Oh, right, wheels. I need to add an optional 'roll' rotation at the end of each bone. Where 'wheel' would be the joint type. then the joint radius would be the wheel radius and it could autocalculate how much it should roll for the current speed.

And then a 'suspension' formed by the 'axle bone' that did IK (keeping the tire on the ground) by beding the axle a bit.

Oh, I wonder.. I should probably include the joint radius when testing for ground contact. At least for wheels.

Mini Goals

* finish feet IK
* add ability to mount something
* axle IK/wheel auto-roll
* game-like buttons for arena
* extreme pose trigger marionette buttons
* screen clutter removal
* simple skinning (parappa the rapper style from player-provided t-pose photograph)
* map-driven multiplayer critter sharing in arena
* map-driven mini-games with critters
* critter plants
* critter buildings
* critter weapons
* critter props
* critter particles
* critter spells
* critter diseases/buffs/debuffs

And about that point you might ask 'why aren't you moving this to rune runners yet?'

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

Posts: 10878 | 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 is a 'design blabber' where I try to convince myself to implement something. In this case, I need to confront what 'an attack' really is and where all my various promises fit it.

.... we pick up in mid blabber

I also neglected to handle 'reversed' animations (time running backwards) and missed more opportunities to treat the animation like a synthesized waveform. So I need to rewrite the core of the animator(the part that actually assembles the before and after poses to lerp between)

Plus I need to be able to treat multiple animations as separate streams, running at the same time (but possibly at different rates), and then something akin to 'multi bone weighting' to drive some joints from blends of those animation streams.

But a cat attacking, then might use the following fragments in a sequence which is above an animation.. a queued series of overlapping animations:

* normal walking (then stops)
* crouching (starts as walking ends)
* butt in the air and wagging back and forth in an increasing sinusoidal rhythm telegraphing the attack
This is maybe the same animation of a single wiggle, repeated with varying 'modulation' (deeper modulation means either that the joint travels closer to the extreme position of the pose, or the XYZ range of the animation is limited/expanded.
* spring forward animation and running animation with goal of delivering mouth to a specific target joint of the current enemy. (knee?)(neck?)
* lamprey animation as mouth is held on target, in spite of target's movements (could presumably be shaken off)
* eventually, mouth releases (gush of blood particles :-), and the critter returns to what it was doing before the attack.

So an 'attack' is a larger thing than an animation, and includes both animation (of you, target, weapon, shield) peforming certain instant actions, then otherwise is blended to the necessary foot movemet to deliver your weapon in range and trigger the final 'attack'

So, I guess, think about a martial arts attack in some movie you like. I don't want to make a 90 minute animation of 30 poses per second. I want to break the attack down by... um...

What are the feet doing? Identify moments where they are 'just walking' (at some speed). Cut the attack up into pieces separated by these 'walking spots'

The 'action' is probably running some statemachine that knows 'right now, I am in state 1, where I approach the target at speed S, and get my weapon to position XYZ relative to me and my target. So it runs towards some spot where its rifle is both in range, and roughly aimed at the target (and the target is a specific joint + offset + orientation of the target critter)

it stays in that state, running the walk animation, and steering. At least, that's what the legs do. The arms are probably holding a weapon, and it knows how it wants to be held relative to the target (maybe even when out of range), so it should be IKing the elbows down to achieve that goal.

So, maybe for each state, a 'what are the feet doing', and 'what are the arms/torso doing?' with some special stuff for hands and mouth.

And sometimes feet are not just walking (kicking)

And once it senses it is at its goal location, it changes state to one where the critter stands its ground for a moment, and maybe swings a sword or throws a punch. So a classic, one second, animation. The swing of the sword should be IKed to hit the target (perhaps even programmed misses), which should be simple since the swing doesn't trigger until we're in the action kick location.

I have already used 'action'... this is maybe what I think I called a 'behaviour' before. Especially since it could last a really long time (like maybe it's all one behaviour to wander, looking for trouble, eating what you find along the way, biting things you don't like, and falling asleep when you're tired. You just have a series of short animations, interspersed with walking at various speeds, all of which is tiring and requres food and rest. Ideally food is spawned somewhere.

You have senses for food and foes and tiredness and pain and the exultation of victory! (free recharge on victory)

You can hear a friend in trouble and come to their aid, attacking the critter that is attacking them, or another near by, using a VQ brain to pick the best one (closest? weakest? strongest? fastest?)

starmap sets up NPC critters and their respawn style (dead until dungeon restart? restore after 5 minites?) and patrol routes.

how ghoulish would it be to maintain a per joint pain percentage which basically weakened that join'ts 'muscles' so when that joint is part of the change passing ground contact up to the root, it is a little bendier and saggier than when it is undamaged. And, in theory, I could just lop something off for the rest of the battle.. (you'd get it back!) "none shall pass!"

And, if I get the physics right, it should automatically start walking 'on the stumps' (forgive me!) and recalculating its 'stride' length, resulting in a change in the animation period to move at the same speed along the ground.

So for that last bit I think I just need a one-bit value per joint (severed) (it's still there in the data structure in every way, so miracle cure just requires clearing that bit)

But for the 'bendy behavour while tired/injured', I would need something more like a percentage with at least.. oh, at LEAST 3 levels, but probably more like 10. roughly tracking remaining hit points, I imagine.

so, watching two critters autonomously fight. You should be able to see them straining to get their mouths in the attack position. which maybe moves as the target is trying to do the same thing, so some uncertainty as to who will attack first. The target should be informed of your attack and given the opportunity to defend somehow (turn, maybe, taking the target point beyond the IK limit of the behaviour), and try to have 'misses' look like misses, even if they were caused randomly by battle algorithm, in which case I guess the attacking critter should intentionally miss.

And yet, making all that 'simple and natural' and coded 'all over the place in small chunks' let the weapon be the only one that needs to know how the weapon works, no matter what is using it. Let the critter know how its legs work.

So, the challenge: a lua table that describes a somplex behavior for a single critter. As a state machine where certain senses, while in certain states, trigger transitions to other states.

let's say state 0 is always 'just standing around with no particular agenda'

STATE 0 waiting (pose shifts weight now and then)
leg animation: stand
arms animation: balancing, carrying (some mass)
eyes: looking for a target, enjoying the view
mouth: drooling if hungry
Available Decisions: patrol, fight, eat, sleep

STATE 1 patrolling
leg: walking (waypoint descriptions)
arms: balancing, carrying (some weapon)
eyes: looking for enemy (within vision range)
mouth: grim determination
Available Descisions: patrol, fight, eat, sleep

STATE 2.1 fight - approach enemy
leg: walking (to get target at official offset)
arms: balancing, aiming weapon at enemy
(raising sword at the end?)
eyes: looking at enemy
mouth: maximum frown
Decisions: fight, run away, change target

STATE 2.2 fight - bite enemy
leg and arms: hard core animation of strike
eyes: (maintain eye contact with foe?)
mouth: possibly biting...
Decisions: lamprey hang, release hold, release and bite again.
this includes a 'strike node' inside the pose used for the keyframe of contact. So for a sword, that might be in a middle pose of a swish animation, but in the pose where the sword is most likely in contact with the enemy, you should place a target node (in contact with the sword, I guess). That would be a special node, maybe one of several, that is what informs the stalking target location. But I see now that walking to the 'swing' position is not the same as the 'stalking' position (which is more of a patrol destination: waypoint or enemy)

Plus I need an explicit form of 'stand' where you have the wide stance and shifting weight one assumes with an RPG character about to go into battle. I guess that's where the wagging cat butt comes in.


STATE 2.3 fight - release and withdraw
leg and arms: animation of withdraw (back to patrol?)


------------
something along those lines. A set of states, each with a name and a description of how it handles each of the individual sub-actions which can be happening simultaneously while in that state.

sense handlers might look like:

if ( foeSeen ) then
ifState( Patrol1, Patrol2 ) goState ApproachFoe
else goState MeanderAway
if ( weaponLockedOnFoe ) then
ifState( ApproachFoe ) goState AttackFoe
else ifState( EatingRations ) goState MeanderAway

Something that boils down to a set of 'senses' that the game engine provides, a set of 'states' that the starmap designed provides the names of (and which can show in some mental state tell-tale on a critter), and a set of rules that describe the state transitions based on current state and sense event.

For each state, the critter will do something universally default (stand, walk) unless you override that action (for that state). Your options are mostly to do some form of auto-walk (legs) and auto-aim (arms), or play some canned short animations and hold some pose afterwards in a breathing sort of way.

But your state machine controls all the sequencing (and I guess your critter announces its state changes automatically to the other players, again through the starmap, so not all maps have critter data flying around).

----

I might use the word 'loop' to mean a a looping animation as I already have (some number of keyframes repeated in order), but then to not just roll forward. Some 'loops' are still loops, but there is some action that causes them to slosh back and forth. For example a dance loop between several poses, then you slosh back and forth, seldom reaching the ends, but able to loop all the way around if needed since it is still a loop at the end of the day.

or maybe aiming a weapon is a loop that varies from aiming 'far left' to aiming 'far right' and the slosh (lerp percentage) value then automatically moves your arms to point properly. And you are running that loop on your right arm, while a different loop on your legs.

---
AND, I should record my thoughts on gaits.

Generally speaking, a 2 or 4 footed animals cycles through its feet at roughly a constant and even rate, dividing the 'clock' of a single walkcycle between the number of feet. So for a biped, one foot is on the ground from noon to midnight, and the other foot is on the ground from midnight to noon. The foot that isn't on the ground is furiously rushing to get to the forward position it needs to be in when its shift begins at midnight.

during the time you are on one foot, you are dippin towards the ground and needing to supply muscle energy into digging your new contact foot firmly against the ground and push back up against gravity. By the time your foot has completed its ground cycle and is pushing off again, it has given you a little ballistic nudge, which controls how much time you have to get your other foot up front before gravity pulls you down again.

Again, while walking, your feet share the load with evenly spaced timing. clop clop clop clop. for a horse. a 'walk' (and sorry I don't remember the real gaits: canter, gallop, ...)

But as you need to go faster, your feet have to move faster and you have less and less time to complete 'the clock' befoew your foot has to be out front again. You quickly look comical with your feet rotating so fast. Instead what has to happen is you need to push off with more energy, getting more ballistic, staying airborne while you leisurely move your foot forward, and then clop clop as your feet hit the ground and take off again. clop clop ..... clop clop..... Now a biped COULD keep an even rhyhtm clop ... clop ... clop ... clop... but then the ballistic launch would be entirely from a single leg each time. the clopclop... clopclop pattern allows the lges to both 'be springy' at the same time (and both rest during a single long ballistic hop insted of two shorter ones in rapid succession)

ANYWAY, so I was thinking of trying to sort of decouple each leg in the animation and be able to play each leg with its own 'phase offset' from the loop. Same pose angles, just at a different moment in time. And then, I thought, as the desired speed increases, I would both speed up the walk clock, as well as bringing the left/right pairs closer into alignment (instead of 180 degrees out of phase) and boosting the ballistic to make the timing work and the ground contacts to make sense. (and making you even more tired, I guess)

But it would be nice to be able to go seamlessly from slow walk to hyper run without looking too horrible along the way.

---

But yeah, the goal right now is autonomous critters that select their own behaviours based on as few settings as possible in a simple starmap table.

Though I guess a lot of the vbehaviour should be stored in the critter object... like.. the starmap composes the data and then shoves it into the critter (via the engine) and then the engine sort of compiles the definition into what it needs for runtime, and sends sense events to the starmap, which then sends state change commands to the engine, whcih passes them along to the critter. So all the behavioural rules are calculated by the lua script in the starmap

three more blabbers and I'm ready to actually do something.

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

Posts: 10878 | 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 
My vision is still messed up, and without being able to read, it's hard to code. I can read huge fonts, but I need to see a certain amount of info 'at the same time' to code efficiently, and I'm struggling there.

As it is, I've introduced instabilities (program no longer runs on my pixel3 since changing the target SDK to 28, which seems odd, but I need better vision to use the debugger effectively, so I am stuck with a broken program until then.

And I still haven't done tractor beams, which I promised would be in 1.08, though a lot of my skeleton work is actually the same as tractor beam work, so there has been a little progress.

I want to shift the critter focus to lua for awhile, and make a demo starmap or two to demo how to use critters (and establish the API).

I was idly thinking about a 'wrestling simulator' where you'd define an actin that was a 'move' of several componets: move feet until hands can grab opponent at specific bone positions. Once both hands are in pace, it applies physical force (for a fist user, same thing for the moment of 'punch') which can actually lift the target and 'throw them into a matching pose' Some sort of down position.

I'm not into wrestling, so my heart wouldn't be into it. But I am curious if the animation system could handle something like that.

I'm more interested in 'Dance Party' (aka Marionette Stage) where a simple UI triggers extreme poses in time to music. Pretty sure that demands the ability to animate sub-skeletons independently, which I haven't done yet. That and the per-limb animation phase timing thing.

But a basic, 'wander this jungle and fight any critters you like' mode is what I intended for 'the arena'. Since then I've drifter into Rocket Club and now maybe the Arena is your personal jungle to decorate with critters and buildings and terrain and such, and people can visit it (by you being the host of the server instance, probably)

At which point, I would probably want to save the arena to a file so I could host one of several, and at that point, that file is probably a star map. So the same starmap that sets the normal 2.5D space game should also control the 3D arena, and implement anything it likes, with the arena itself just being an obliging portion of the game engine.

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

Posts: 10878 | 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, a while back the app stopped running on my phone (pixel 3XL), but still ran on Kindle. I finally got around to debugging that and it turns out to be a combination of my phone upgrading to android 10, as well as my code now targeting sdk 28 (as now required by google play store for submission)

That triggered one problem due to a deprecation of the 'clipRect(5 args)' method on canvas (throws an exception on Pixel, but not Kindle Fire). Tha required a zillion changes which took multiple tries to get working again afterwards (and I imagine there are some subtle clipping issues waitinf to be discovered, but it mostly appears to work)

Except it could also no longer do multiplayer!

This turns out to be Google hating on http and requiring https without a little extra code juice of the unfathomable sort. But after some XML diddling, I think that's working again (well, it is, but again, don't know if there is some other spot affected by this)

ANYWAY, fixing those issues brought my phone back o like (but buttons are too small, and touch interface seems untrustworthy near the edge of the screen)

=====

I also added a new thing 'shipMode' which declares your region of activity. a value of 0 (the default) means 'out in space, like normal synSpace). All ships start in that mode.

But other modes include (not fully implemented)

* an 'on planet' render (critter fractal terrain, with critters) (space grid is only seen in night sky)

* an 'on water' render (similar, and not done, but I want to do ships and submarines eventually, as a play mode

* high in the air. My thought is that on a suitably enabled starmap, you could graze a planet (gravity object) and change modes to this, where the stars are gone and you are zooming over the critter terrain, but you are still 'in your ship' (not landed) and are basically dog-fighting with any other ships which have entered the same planet atmosphgere. People out in space no longer see you but are maybeaware that you are engaged with a planet (like a WoS campfire, conceptually). From here you could bomb the critters, shoot other ships in the air, land, or return to space.

This might be where some starmaps implement a sort of 'wave after wave of npc ship' sort of game

So I added the declaration of the modes, some getters and setters, and the initial rendering switchyard (render is multi layer with diff combo of layers for these other shipModes)

But this is how I plan to do stuff like a vector render battlezone ish thing, and general Rocket Club stuff.

Each mode, I think, will use the same two joysticks (trigger and nav), but the nav will provbably vary with each mode, and the trigger might use XY to turn a turret or something.

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

Posts: 10878 | 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 
The Critter terrain subsystem now includes slightly nicer water, more particle types, and a simple climate system which generates 'multiplayer synchronized wind' suitable for use in a sailboat simulator

Here's an almost interesting youtube on the current state of the climate system (which I blabbered about in a different topic)

Hmm, youtube changed the upload process... smaller fonts :-) It doesn't look like they give me the url until its done uploading, so I can't type it in in advance as I typically do.

But I think it will be here:

https://youtu.be/mvNFqwPM5Kk


.

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

Posts: 10878 | 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 
Since the above, I completed the consolidation of the '3d' render into a single call to canvas.drawvertices(), and a single (large) bitmap into which I pre-set all the small images I might need for texturing purposes.

Currently I use a 1024x2048 image. I think of it as two 1024x1024 bitmaps. One contains the terrain color textures (raw texture, or tiled textures), then the dynamic section (also 1024x1024) is divided into a zillion tiny suqares of varying sizes (one pixel each for a section that just lets me define pure colors, larger sections for more interesting material textures)

I also added more support for vertex colors, so in addition to some default terrain coloring, I use VC to add some terrain shading based on local surface normals.

And last night I added antialiasing back in (which took the frame rate back down from about 18 to 12, so I might not be able to keep it) Also, the antialiasing of the water led to some interesting effects in my 'one pixel blue' color.

 -

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

Posts: 10878 | 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 
It's video time!

https://youtu.be/UMoO-w2j00c

It probably won't be fully up for a few hours. It's huge! Just over 2 hours. And as riveting as always!

I just took every single progress video this year and told myself 'if I just take the first 5 minutes of each of them, it's probably the best part' and then I ended up watching the whole thing anyway and editing it manually, as usual. But it's mostly just the beginning bits (and I am usually at my closest to focused right at the start of each snapshot, then I meander off into 'maybe do this' land again.)

But I learned how to change playback speed in Premiere, so I sped up a lot of sequences where I just wanted to show cloud formation over time.

But that left them silent, so I also learned how to add music tracks (not very hard, but I first made OGG files, then failed to make MP3 files, and finally converted it all to WAV, and that worked.)

Mostly its 'original compositions' (i.e. 'crap'), but there are a couple vocoding-inspired real songs which I think are not copyright violations. Anyway, just there to fill the silence, but I like the second to last one at the end. I call it "March of the Glass Kittens" and it was very much inspired by Kamira, but she does not appear in the film... only the scars on my hands.

Overall, this film is about the development of the climate simulation engine. But it touches as well on the 'lunar lander' work I am adding to the tutorial starmap, as I try to get the terrain in shape to be game-useful. Frame rate is fairly reliably above 10 fps now, which is still pretty lame, but survivable (unlike 5 fps). I often get 18 fps. (meanwhile, up in grid space, I get up to 45 fps on my fastest tablet (a 2019 10" Fire HD -- the one with USB-c)

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

Posts: 10878 | 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 
At the risk of being repetitive, I took another screen shot, which looks a lot like the previous one

http://synthetic-reality.com/drone/pond.png (too large to politely embed)

These pictures appeal to me because:

* they are kind of pretty and artistic
* I didn't draw them, or manually position any elements, they are just 'naturally occurring outcomes' of a web of simple individual rules, leading to 'emergent behaviour' (and screen shots).

Kinda like the million monkeys at the typewriter (what's a typewriter?)

ooops, it fooled me. I reduced the capture size, but didn't realize the editor was still zoomed out.

Oh, and I just remembered I was in the middle of editing a video when the power went out the other day (yesterday? the day before? both? what day is it?)

[ 04-29-2020, 06:36 PM: Message edited by: samsyn ]

Posts: 10878 | 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 
Begin Blabber

Spent some more time improving the 'tesselation' (or maybe its 'triangularization'?) of the terrain and am getting pretty fond of it.

I can sub-sample terrain squares now and make higher rez terrain triangles 'on the fly', which should improve visual quality (and allow a certain amoount of terrain animation -- quakes, surface of a drum, ideally with loosely coupled tree shakes)

Added first attempt at 'exhaust' from the landing engines (in lunar lander mode after entering the atmosphere of a planet). The 'fire' behaves a bit more like 'lava' so that was an unexpected benefit that I plan to keep. More simple rules

the landing engine drops hot lava as a form of pollution

it falls to the ground and then slowly creeps downhill (like lava)

it heats the ground it contacts

plants and critters know the temp of the ground beneath them

hot ground can ignite plants, and burn critters

hot ground spreads to nearby hot ground (fire spreads)

lava eventually cools (faster in the rain, or under the ocean), leaving behind triangles of 'metal'

So, it's just another source of resources for whatever crafting/tech tree the starmap wants to set up.

burnt plants can turn into carbon

animal critters eat (their favorite color) reeds, and excrete various useful products (milk, chemicals, gases),

particular critters emit particular things, so planning your 'farm' leads to the crafting sources you desire.

a starmap would need to define all these resources (and whatever metaphor they like for 'radioactive spider milk') and you would create units (breed critters?) that generated or collected what you need.

My wife points out that it should be the human player's job to do most of the collecting, but I still want to have a good old RTS 'harvester' unit that wanders around looking for stuff to bring back to base

(where it shows up in inventory on the build-o-matic, which comes with 3 recipes and the ability to learn as many as the starmap is willing to teach.

The terrain subsampling gives me hope for 'high resolution, potentialy smooth, roads' on top of the low resolution map. Just in time subsampling and dynamic 'model making' to render a smooth road (and provide smooth road collisions, for sleek ground vehicles (5 triangles each))

And I mustn't forget to move the cool 'tide' code to the new water system.. and running out of water should literally make the oceans disappear.

And some fractal parameters for map making. Like do you want tiling dirt with a few lakes? tiling ocean with one or more islands? Shallow oceans, or deep fjords? texture choices, time of day shading choices, atmosphere thickness and color. Hurricane circles, sun brightness and color, and speed.

Try and make the terrain editor easy/fun, make good use of random seeds (and hope a six digit number can be enough for sufficient variety), and store all the parms in a compact string for publication via starmap.

As usual, I am torn between 'make one personal planet to share with other players when they visit you' and 'maintain a library of millions of planets, every one you ever tried out or edited, and make them available to share with players visiting you.)

And by 'visiting' I just mean 'on the same server as you, when you are the moderator' and these personal planets would presumably be different from the starmap designer's planet on this starmap

unless you think of a personal planet as being a personal starmap that you continue to work on, but periodically clone versions for posterity.. So you would have to start a starmap to start designing a personal planet... make changes, clone it, start again with that clone or another...

maintain a formal asset class for PLANET.

Yeah. Not today, but that's the proper direction: PLANET assets that hold all the planet/climate/resource definition and basic rule sets (and lets you name everything, since it's all in the name, right?)

Then let a starmap include as many planets as you like (but probably just a handful).

When YOU enter the atmosphere of a planet, it sends notice to the moderator, who then sends you the PLANET asset (if you don't already have it, or it isn't baked into the starmap) and you start simulating the planet. You then only interact with other players who are also engaged with that planet.

The planet can then change over time, and the moderator (their copy of the game) must periodically announce changes to all players, who then update their simulations as needed.

But I am leaning towards loosely-coupled resources. For example, a ship flying overhead rains down lava upon you on the ground, and that lava eventually cools into metal, which you can safely collect.

Another player standing near by, sees the ship fly over, and lava falls from the sky, but it's not exactly the same lava, just similar.

And when I harvest MY cold lava, it doesn't necessarily affect YOUR cold lava, which sits there until you pick it up.

Same for example, for trees that need to be cut down. I try to give us each the same 'starting forest', but I don't want to advertise each individual tree getting chopped down (maybe some special ones though)

Now, if I SEE you swing your chopping axe near my tree, I guess my copy could also get 'chopped down' (since you definitely have to tell me when you swung your axe, and where you are standing).. so maybe trees aren't the right example. SOME stuff will be hard-synched, but as little as possible, maybe.

ANYWAY, different critters eat different things, make different things, and have babies with minor mutations. Simple rules for procreation, but I love state machines, so something like

* develop a bond between critters (they hang together)

* critters hanging together magically lead to pregnancy based on current starmap/critter gender rules and roles.

* pregnant critters have a probability of giving birth later, assuming proper nutrition etc

* baby critters look like parents, but smaller (and if I do my 'triangle eyes' they would be full size :-)

* all critters have an internal digestion/gestation system that might have secondary effects (I feel gassy... I feel depressed... I want pickles)

* critters thrive where their favorite food is plentiful and they aren't being burned alive by lava

ANYWAY, again this is all leading to a 'terrarium' world where you salt it with some critters and see what happens (does your 'natural ecosystem' burn out or thrive? or does it cycle through natural resources and create a bunch of high text weapons to attack other critters with?)

Will your critters like you? Will they defend you? Collect resources for you? How much time do you need to spend walking around and petting/feeding them?

And that would be on 'every starmap with critters', but specific starmaps could have canned adventures/scripts that told unfolding stories (of genetic research gone horribly wrong, or terrifically well. Giga Utopia)

The takeaway:

* planets make resources via climate
* critters consume resources
* critters create new resources
* critters create new critters

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

Posts: 10878 | 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 
More screenshots. These are supposed to look a little like my first Rocket Club fractal sheet (uses the same mars texture I have loved for years)

 -

and the other side of the 'lake', including the new mini-map, which I think maybe I will center on 'you' in the future

 -

And I think that's the 'editor mode' for the minimap, with it shrinking in game mode to just the map and the three buttons below it (acting something like a multi function display selector) and I still have no idea what to do with the Thumbs in critter mode.

Possibly remove them (only show you and your target's thumbs), but I still need a thumb to tap-select you at the moment (until I switch 'tap your actual critter' I guess). Still, it's a change ffrom 'access to everyone' but no other RPG does thumbs that I know of, and having some sort of popup for 'group' details seems... acceptable.

Or maybe I can just make the thumbs microscopic.

dunno.

[ 05-01-2020, 02:35 AM: Message edited by: samsyn ]

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

Posts: 10878 | 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 
New video showing changes to the music sequencer

https://youtu.be/5k-MnaajWSQ

And it's a SHORT VIDEO! Yay! Short for me, at least.

LOOPs can now be of pretty much any length (not just 16 steps), and at the end you can control if they loop back, or chain to another loop, or just stop, or both.

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

Posts: 10878 | 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 
New video for the new FlightSim module

https://youtu.be/a9qAmCydsus

It's about 90 minutes, but I tried to at least have more content. Still probably mostly boring.

But this one appeals to me. It documents the full process from idle speculation, to working prototype. About 2 weekends of actual coding, then 4 weekends of video editing :-)

The flight physics are about where I expected them to be (well, possibly a little better than I expected), but still room for improvement (lots of room).

This class SHOULD handle all forms of aircraft, plus boats (and sailboats) and submarines, and vehicles that do all regimes (Thunderbirds are Go!)

And I think submarine stuff might turn out to be cooler that I'd hoped. Especially with dark lighting schemes. Subs move relatively slowly, which is an advantage here.

----
and someone apparently owns the individual notes my synth can play. (music complaint is blocking the upload) I guess it's a compliment that they think my synth sounds musical.

Since I don't monetize, I think they will eventually publish it (and apparently take all the sweet sweet ad income from all three views my video is likely to receive :-))

I admit I perceive this as being 'a pain,' and something that lessens the joy of youtubing.

[ 08-25-2020, 01:59 PM: Message edited by: samsyn ]

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

Posts: 10878 | 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 
My Aerodynamics Blabber (while I wait for the video to process)

You (starmap author) define a vehicle out of components, where each component is defined as a group of numbers.

I call these components "aero"s, and currently they come in three flavors:

* wing-ish
* elevator-ish
* rudder-ish

Their ish-ness basically determines how I wiggle them (if at all) when the pilot moves the joystick.

Each Aero also has a shape and position (four point quadrilateral/rhombus) relative to the origin of the plane (which is also its center of mass at the moment).

Right now you would design on graph paper and then work out the units in meters.

Critters already have velocities and positions (normally just for on-foot activities), so the FlightSim class directly manipulates those, but also factors in the wind direction, angle of attack on each of the aeros, and then computes lift and drag forces for the plane overall, and then torque forces that lead to rotations (yaw, pitch roll)

Of course I don't render a nicely modelled and skinned vehicle. Shame on you for even thinking that! But I have a nice skeleton-friendly visualization of the surfaces, showing all the force vectors as colored lines.

MATH BLABBER

Don't learn aeronautics from me. I'm basically self-taught and mostly it's wish fulfillment.

But imagine your plane as a real 3D object. It has some center point. From that center point you can draw a line out 'the nose' into the forward direction, and another line out the right wing to get a vector pointing 'right', and finally a vector pointing straight up.

These three vectors, each at right angles to the other two, each unit-length (1 meter long in my visualization), are your 'vector basis' (linear algebra is your friend. relax and enjoy it.. let it wash over you.)

When you're sitting in the airplane, you're in its vector space. If the plane suddenly pitches down, you see 'the world' rotate before you.

An observer outside the plane (in the vector space of 'the world') sees your plane dip down. He sees your 'forward vector' dip down.

You see your forward vector hold still. You are well strapped in to your seat.

If there is some other object in the world, say a flag, and the man standing in the world says it is at point XYZ in world space, he is just giving the normal cartesian coordinates of the point as everyone knows how to do.

But you, strapped into the plane, seeing the same flag, your inclination is to measure it in terms of your own local vector space. where the X value is how far the point is along your RIGHT axis. The Y value is how far along your FORWARD axis, and the Z value is how far along your UP axis.

Now, you might be thinking... If I were in a plane, I would just look out the window and gauge things by the normal world coordinate system. What do I need this local vector space for anyway? It's nothing different. There are a zillion arbitrary axes I could choose to use to describe the location of any point in the universe.

Yes, that's true. And hopefully that will turn out to be the point. There are a thousand ways to describe the position of a cat, and a three vector basis for each of them.

And a real mathematician would now try to excite you about all the really screwy transformations, but I restrict myself to 'easy' ones where the three vectors are unit vectors (no odd scaling) and at right angles to each other (which turns out to mean they are completely independent of each other)

To complete the story, you are sitting inside this vector space, with your three vectors and directly in front of you is a big TV screen. And your goal is to draw stuff on the TV screen, as it would appear to someone on board the plane loooking out the window.

Because you're not REALLY on the plane. You're comfortably safe at home watching a flight SIMULATOR, which renders stuff on your flat 2 dimensional screen (2D, no 'Z')

And it turns out, linear algebra gives a fantastic way to project any 3D point, given the orientation of the plane, onto that 2D TV screen.

The orientation of the plane is just those three vectors (your vector space) organized as a 3 x 3 matrix

code:
  right.x    right.y    right.z
forward.x forward.y forward.z
up.x up.y up.z

And those are all normal 'world space' coordinates. Imagine what that 'world observer' saw when you pitched the nose of your plane down. He saw your forward vector bend down.

Which means he saw the 'z' component of that vector, get smaller. (and some other changes if we don't want the nose to stretch)

BEFORE the pitch, the nose was level and sticking 'due north' (let's say) and the FORWARD unit vector then looked like this:

( 0, 1, 0 ) // all in Y, 'forward'

i.e. no X or Z component, just a value of '1' in the Y.

AFTER the pitch, assuming we didn't deviate from our northern heading, and it was a smallish amount of pitch, then the new forward vector (as seen by the world observer) would be something like

( 0, 0.9, -0.1 ) Z dipped down a littl

the whole thing needs to be unit length

1 = x*x + y*y + z*z

so pretend .9 and .1 work (they don't really)

As the nose dipped, the z component went negative (where 0 is horizontal), and the y component got a little shorter to account for this being a rotation of a fixed length thing (the unit vector)

Anyway, so after the pitch, the 3x3 matrix describing the plane's orientation would be

code:
   1   0   0    RIGHT    (pitch axis)
0 .9 -.1 FORWARD (roll axis)
0 .1 .9 UP (yaw axis)

Note that the pitch affected both the forward and up vectors, but not the RIGHT vector. (in fact, the RIGHT vector IS the axis of rotation about which a PITCH rotates).

My point so far is that it is super easy to make this array. You just need the XYZ components of each of your three basis vectors. Using world space coordinates which are the easy ones, universally available at all times, and un-moving.

So, big deal, nine easy to get numbers plugged into a 3x3 array, what does THAT buy me?

Well, only the best ice cream at the fair! If you multiply this 3x3 matrix, times any 3d point value

( x y z ) --- arbitrary point in world (easy) space

It rotates the point, the same as your plane is rotated, at which point the xyz of the result are directly related to that TV screen

Just to walk through the steps manually

Let P be your plane's position in (world) space
Let XYZ be some other position in (world) space

Your goal is to figure out where to draw XYZ on your TV screen, so it all 'makes sense' as the plane zooms around.

Get a vector from the plane to the point

(XYZ.x - P.x, XYZ.y - P.y, XYZ.z - P.z )

Note this is likely not a unit vector, but that;s ok. It's the offset you would have to add to my current position to have me land on top of XYZ

And that's the vector we multiply by our 3x3 orientation matrix (call it M)

And the result of that will actually be similar to what we saw when we pitched our matrix, but the output is a single 3D point, called, um, XYZ'

XYZ' = XYZ * M (matrix multiplication)

XYZ-prime, the 'rotated' version of XYZ

I know it's a bit dry at this point, but the fact that this 'complicated rotation array' is 'just the xyz values of our basis vectors' just blows my mind whenever I think of it. I think I am jaded enough now to 'understand why' more or less, but it still feels magical.

So, that original point, XYZ that we wanted to draw on our TV screen is at XYZ' relative to the plane's vector space, so if you think of XZY'.z as being 'into the screen' and XYZ'.xy as being the 2D screen coordinates, you just have to do one more little bit of math to find the 2D coordinates
on the tv screen

cx = XYZ'.x * zoom / XYZ'.z
cy = XYZ'.y * zoom / XYZ'.z

In most cases you would also have to invert cy since the screen probably sets 0 at the top of the screen.

The zoom factor is how you scale for the pixel size of your TV screen, but increasing it just lets you zoom in on the center of the display (losing stuff off the edges)

Note: you can multiply (rotate) ANY point with this matrix, and the XYZ' will be completely valid. However, XYZ' may not be visible on your TV screen (a negative value of XYZ'.z might be 'behind you' and not visible -- unless you look out of a different window of the plane)

OK, fine, mister show off smarty pants. You remember ONE TRICK from college.

No, I remember TWO TRICKS!

We're getting up to the point of the story (other than my just showing you the secret of the universe)

As part of my flight sim module, I needed to be able to do the opposite rotation from one I had. I mean, have a 3x3 matrix, that IS some rotation, but I need the OPPOSITE rotation.

This turns out to mean I need the INVERSE of the matrix.

In general, matrix inversion, for me, is either tedious or scary. But I know that *sometimes* the inverse is just the TRANSPOSE of the matrix (just flip the numbers across the diagonal).

So that's really easy, so I reeeeeallly want my matrix to be the kind where this works, but I didn't remember how to know that, and I just tried it and it seemed to work, so I could have just moved on, but I wanted to actually feel like this wasn't going to explode in my face later (oh, doesn't work for negative numbers, or something like that)

So I crafted a matrix, on paper, with clearly labelled fields. Then I wrote down the same matrix a second time, but transposed. My hypothetical inverse matrix.

Then I manually multiplied the matrices carefully keeping all the terms properly named (used a big sheet of paper).

It should have come as no surprise that the terms all looked like 'sums of dot products' since when you multiply two matrices, that IS what you're doing. Taking the dot product between each row and each column of the matrices

But of course, that was all lengthy and math-y looking until I noted that the terms looked like this

x' = x*(A dot B) + y*(B dot C) + z*(A dot C)

Where A B and C are rows and colums of the matrices) and when you check into it, in each case, only one of the dot products returns 1, and the others return 0

Because our basis vectors are at right angles to each other, their dot products are the cosine of 90 degrees (zero), but the dot product of any one of them with itself gives the cosine of 0 degrees (one!)

So if (x,y,z) is the original point, and (x', y', z') is the result of multiplying (x,y,z,) by both matrices (M and M-inverse) then the result boiled down to

code:
  x' = x*1 + y*0 + z*0
y' = x*0 + y*1 + z*0
z' = x*0 + y*0 + z*1

ergo (x,y,z) equals (x',y',z') for all xyz and the compound matrix is the identity matrix and thus the transpose of M really is the inverse of M

QED even! It's like I bleepin' PROVED it.

And that made me happy

And THAT made me a smarty pants know-it-all!

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

Posts: 10878 | 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 think I have my torques under control now. Turning (wing tilting) no longer feels like a rocket ship firing RCS thrusters, and behaves similarly to the cessna 172 in MSFS 2020.

I was able to pick a design point (100 ktas level flight at 75% throttle and no trim) and then jigger things in ways that didn't feel to cheat-y, and now my cessna has a cruise speed, and a climb rate (at 100%) that roughly matches a real cessna 172

But then I had a problem at about 150 ktas with the plane suddenly shaking violently. I watched the video of that and you can see it's just that the amount of lift generated on the elevators in level flight at very high speed, rises very quickly with any deviation at all from 'flat'

So when a normal correction is required, the moment the elevator tilts out of the flow center, a huge corrective force slams the tail in the opposite direction. Then it spins until the elevator is being hit from the opposite side, and bang, another giant hit, so the plane just jerks back and forth between two orientations (and would dfeinitely come apart in the real world)

If my frame rate were faster, however, or I did a little digital integration to get some more frames in, it probably would be better. But that's not completely under my control.

Instead, I approached it from the perspective of "are my roll rates similar to a cessna" and decided that my torques (even at normal speeds) were more powerful than in a 'real' simulator, so I just weakened them until they 'felt right' (again, compared to MSFS 2020)

After that, I still encounter the 'shakes' at high speed, but not until 300 ktas, and at that speed it feels the cessna SHOULD tear itself apart :-)

I also added some 'mach' support (my simple lift equations are not technically accurate when hypersonic. While not feeling like making that super realistic, I do want it to 'work'. I figure any supersonic vehicle is going to have a huge engine and will naturally behave m,ore like a rocket, so flying is more about 'pointing the nose where you want to go' than 'surfing the angle of attack to get enough lift to stay in the air'

oooh, surfing. I hadn't thought about that one... I did consider that 'ski-ing' might be a fligthSim task (as are all wheeled vehicles, especially when they go airborne)

Though ironically, wheels are nigh impossible... maybe triangular wheels? Actually that sounds kind of perfect.

then I can wave my hand and claim someday to have that infinite increase in triangle desnity the closer you get, thing. Car tires would probably be a good test case for that, since you could just have 'the equation of a tube' and dynamically tesselate (and emit extra tiny triangles) when very close up to the camera. You could probably get a very detailed model of such a symmetric object.

So a skeleton stick-figure car with high resolution tires... (and a high resolution face 'mask' on the critter)

Oh, but it might be impossible to barrel-roll, which I assume would mean my math sucks at least a little. I can roll about 270 degrees before it feels like it's pitching incorrectly.

I take it back, I *can* barrel roll! Actually, I can even fly inverted and the controls 'make sense' (wewt).. the 'angle of incidence' works against you in that case, but a little elevator trim would let it be stable without constant joy stick pressure.

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

Posts: 10878 | 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 
heh, so it started off all super jerky, and now it is all butter smooth, which makes it feel arcad-ey, even though it has fancy math!

So I just added turbulence! (and updrafts/downdrafts, though they are currently random and not 'informed by' the climate and terrain as they should be (since I have those!)

For turbulence, I don't "shake the plane", I "shake the wind" that is driving the whole thing.

For the actual turbulence, I compute a completely random direction vector (less random when I want up or down draft), and multiply that by a scale factor (tweakPercentTurbulence) to get a meters per second 'deviation' I add to the real wind vector (which is picking up wind from the climate system, in theory)

That takes effect instantly and changes the current angle of attack on the aero surfaces, causing them to recompute lift and drag, which then can cause some rotations or even altitude changes.

But now I think I should add a little random time period, so that the direction of turbulence only changes every upmpteem time units. So THIS little puff of air lasted only 150ms, but this NEXT one (in a completely different direction) lasts 450ms (supposedly because I am flying through disturbed air, which I hope someday I really do track (when a plane flies through the air, it should leave behind some turbulence for chase planes to encounter)

I *think* it feels more realistic with the drafts lasting for somewhat longer than an instant (but a random duration for each draft)

Yeah, this feels about right, but maybe a little shorter drafts.

---

took 120 seconds at 100 ktas to travel about 8km... does that make sense, google?

1 knot = 1.852 km per hour
100 knots = 185 km per hour
so it should take 8/185 hours
or (8*60)/185 minutes

2.59 minutes

close enough! (I didn't use a clock anyway)

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

Posts: 10878 | 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 
pretty good weekend, fixed a lot of little glitches that had been building up (like the minimap still receiving clicks even when covered by larger windows, and the throttle having a weird aberration at the moment the 'long press' sensor goes off.

I put in some formal support for 'mach' and for super fast vehicles, I think I will just force you into arcade mode for the control surfaces. Those vehicles are really just rockets and I think that feels 'more fun'

Next, I'm either going to look into 'runways' (foundations? roads? buildings? fractal cities? (see Rocket Club videos), or 'wheels' (landing gear, suspensions)

or something else. that's the point, I guess :-)

dog fighting... now that it can fly...

[ 08-31-2020, 02:06 PM: Message edited by: samsyn ]

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

Posts: 10878 | 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 
It's blabberin time!

I've been thinking about inventory again, and how I might do something very simple, but a fairly popular style:

* there is an inventory button down near the options button. Tapping it toggles the inventory/crafting panel.

* That panel has two tabs at the top "INVENTORY" and "RECIPES". Whichever you select, the screen below is carved into an 8x8 array of cells (64 total slots)

* The RECIPE panel shows all the recipes defined on the starmap (is 64 acceptable? I want a limit -- and each starmap can have its own mix of items, defined in a lua table that requires: ID Number, Short Name, Long description, and recipe.

* recipes are just counts of item ids (4 of these, 3 of those). You have a little robot buddy called 'nano factory' that can make anything you have a recipe for, if you have the raw materials in inventory. This is then true for all starmaps, only the actual items change

* the INVENTORY panel has the same 64 slots, but each slot is a stack (unlimited stack dpethss.. at least to a billion), so a given item always fits in a single stack, so there are as many item slots as there are recipe slots.

* the recipe slots are organized by the starmap author (who composes the lua table of items, which includes recipes).

* the inventory slots(stacks) are organized by the player who can group things as desired. the bottom row of 8 slots are the 8 'action buttons' that are usually along the bottom of the screen.

* the inventory panel can be used to operate an item (say, a mount) by openinf th panel, then tapping on any item (is the same as tapping it when it is mapped to an action button)

* most items are just resources you have collected in world or in grid space.

* You have to 'learn' a recipe before you can tell your nano factory to make one. the starmap should control what you learn.

* If you know the recipe, and select it, it shows you what you're missing, but if you have enough of the ingredients, it gets busy making it. This activity consumes charge or something and is not instantaneous, but at the end of it you have one more 'cessna overcoat' in your cessna overcoat stack.

Eventually some extra buttons should appear for TRADE and BUY/SELL sort of actions with other players and NPCs.

I can see a map being a series of quests where someone teaches you a recipe, then you have to collect resources and make N of the item and deliver them to a destinatino tha appears on your airplane compass...

then the giuy that that location says thanks and sends you off to make something else.

---

I want to be able to make a 'text adventure game' but using critter world locations and characters to drive the 'plot'

I'm not sure how I want to pick up resources (which are just colored triangles lying around on the ground). I kinda like the 'magnet' when there are a lot of things to pick up (just run close and they get sucked into you), and with unlimited stacks, why not?

But that couold be based on something like a tractor beam that can reach some distance from you and pull things into your pocket. (also workig in grid space to collect powerups)

Pretty sure I don't want to have to click on each thing to pick it up. Just get close. Maybe some things (treasure chest) need a click. but bouncing triangles jumping into her pocket.

Each item is represented by a FACE icon, and in a pinch, I can just punt to the existing method for embedding a FACE in a starmap (see my DOTA map for an example).

But what I WANT to do, is something like 'map assets' I keep noodling around. In the super fun pak there is the official starmap editor and I thought it could:

* start with the existing FACE editor
* instead of CLONING it (which you could still do), there is some sort of 'add to map' button, where you give it a symbolic name that means something to you, and it gets added to a big list of similar assets.

At any given time, you have one such big blob of map assets (loaded from the starmap initially, then you use the starmap editor to change the bindings from the symbolic names to the actual asset you want to use (this let's you re-jigger an existing map to use different assets).

Then when/if you CLONE the currrent map, all your current map assets are baked into it, and anyone who loads that map will have those assets available inside the map (the 64 item pictures, for example)

But I want to sort of remember YOUR map assets (added by you to an existing map) separately from 'the starmaps map assets' (came with the map), so without a lot of thinking you don't have to worry about losing things

And for that I think it would be some sort of manual SAVE button that let you save the current assets to a file on your device (that you named yourself)... It could get all complicated, but maybe it can just be a simple list. But you could always save and thereafter reload, and you could move assets between maps by loading the source map, selecting the asset, editing it and cloning it, then open the second map, open the cloned asset and ADD TO MAP to give it a symbolic name on the new map.

something like that.

Visually, each of the 64 squares would just have its image, its stack depth if on INV screen and you would have to tap on it to select it and see details. (hmmm, then how do I tap it to use it in battle?) do I need a third tab?

RECIPE - tap to select current recipe
INVENTORY - tap to select current item stack
ACTION - tap to 'use' the item

No, on the inventory screen, you tap the item slot to select the stack, then on the right, additional buttons appear (along with the details on the item), and one of those buttons is USE which then actus as if the item were on the 8 slot action bar and was tapped there.

Or maybe tapping an item which is already selected does that. I think I can do it with 2 tabs.

or maybe tapping an item selects that entire row to rplace your ac tion buttons, so you can orgnize your rows for fighting, farming, etc.

maybe. So the engine would have the 64 item limit and would have a native understanding about how stacks work and how to move them around and use them, and craft to make new things.

doesn't sound TOO hard, and inventory is just a necessary evil, and 8 slots is not enough.

64 is also not a huge number (if you wanted 8 character classes and unique equipment per class, that's only 8 items... But maybe everyone wears the same stuff, but at 8 different levels.)

I guess each item needs a 'type' code and each type needs additional data

weapon types include all the existing stuff about reload time, energy cost, explosive force, etc

plot types are just an id and a name. "Red Algae", "Lost Child", etc. Any item can be an ingredient "3 lost children, one dog, and a gallon of broccoli, makes 3 school desks"

Mount types need to include a reference to a flight asset (containing the aero definitions as a string of numbers)

Now, some resources (rain, lightning, crops) have to be on all maps.. that is to say, rain comes from the climate system, which is used on all maps. Probably have to dedicate maybe 8 slots (one row) to 'standard climate resources' (they still need IDs and compete for the 64 slots, but the starmap gets to rename them. So "hydrochloric acid' instead of 'water')

I'd probably do that thing where the starmap author allocates ids from one end of the range (0 upwards) and the stock resources are predefined by the system starting wth 63 and working downwards.

and hope 64 is not too limiting.... maybe some hybrid like 64 of the 'fancy' stuff like weapons and mounts that have actual data and behaviour, and a more unlimited number of 'junk' items (pure plot items) that just have names and recipes for creation.

[ 09-05-2020, 04:09 AM: Message edited by: samsyn ]

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

Posts: 10878 | 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 
Remind me to add things to spend Galactic Credits on. I'm thinking

1.) a pre-launch 'ship pod store' where you can buy pods you otherwise would have to hunt around for. This is a change from 'all launched ships start equal', but that always had the problem if 'but latecomers are at a disadvantage' and this makes it more of a 'newbies are at a disadvantage' which was true in the other case as well.

Plus, if there ever were in-game purchases, it would motivate them, while not requiring them, since credits are freely available in game, just by playing.

2.) purchasing 'rows of inventory slots'. Like you start with just the 8 slots you always had (the button bar along the bottom), but can buy one row at a time up to 8 rows (64 slots). for now.

3.) and I guess I could allow 'purchasing missing ingredients' for some recipe you know and would like to craft

------

As to inventory, I still need some basic operators like PickUp, Drop, Ride, Dismount

PROBABLY, I will just have you walk over something and it auto picks up when you are 'close enough' but what if you wanted to leave it for later?

MAYBE, I will put some sort of clickable label on nearby objects which exposes a menu (a la Rocket Club), but I want to avoid popup windows in general (any more, I mean!)

But I think I like the Rocket Club metaphor that you aren't picking something up, you are 'de-materializing it' into pure data (stored in lightweight crystals, so you can carry an obscene amount of stuff.)

In which case, the PickUp operator becomes 'Scan', which the backstory would explain actually destroys the object (and the animation should sell this in a perfect world), but then you can recreate it later. Sort of the teleport/replicator sort of moral dilemma... is it the same thing you scanned?

In game terms, scanning the object also teaches you the recipe to make that object. (assuming you find the ingredients and supply enough energy to your 'nano-factory' buddy) You know, he's probably also the guy with the inventory slots. Which would explain why you didn't have these slots before you were issued one... Hmmm, would there be a desire for 'nano=0' where the starmap explicitly says 'no nano factory' and suppresses the whole inventory/crafting panel?

----

I did pursue runways a little, but broke them into two parts:

CLEARINGS

After generating the fractal surface, a planet's definition data can call out several 'clearings' by XYZ position and radius. The world is then 'flattened' around the point XYZ making a flat building area which is roughly circular and as flat as you'd like it (a variable controls how flat). You can call out the desired Z (elevation) value, or let it just use the natural fractal altitude at that point.

Clearings are baked into the actual elevation data, so they affect ground collisions are do not require any extra triangles at render time (they are rendered as terrain). You can have underwater clearings.

If you set the XYZ to below the natural fractal, you get a sort of crater-like thing with possibly some sharp cliffs. Or above the natural fractal gives you stuff like ..um... close encounters' Devil's Peak? Cauldrun? that .. um.. volcanic core thing.

Anyway, it's good for both cliffs and flat places. (but needs more wiring to be useful to starmap authors)

RUNWAYS

Then, in addition to adding clearings, you can add 'runways' (also needs more work so it can be done from lua). I think I will eventually let you define a runway with a few values like 'center XYZ, length, width, materialId, and heading', those all boil down to four points (forming the rectangle) and a material ID.

So right now I just have one runway baked in, on top of one clearing baked in.

Basically, the runway rectangle gets broken into one or more 'squares', where each square is rendered by 2 triangles, and the UV coordinates map the square to the full 'material' texture (each material has a 32x32 pixel (at present) image)

But, and this is the part I am proud of, if the camera gets CLOSE to this runway, the squares get subdivided, so more triangles are used to render it, with the UV coordinates automatically zooming in as needed.

So it's a recursive, auto-geometry 'textured quad' renderer... Exactly what you need for semi-interesting flat panels, such as used on buildings for walls and roofs. Or roads.

In theory, it should be able to follow a gentle enough 'twist' in the original four points, so you could make a 'mobius road' if you had a mind to.

But this is intended for flat surfaces (and currently does NOT provide collisions, so you can walk right through walls)

[ 09-10-2020, 04:51 PM: Message edited by: samsyn ]

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

Posts: 10878 | 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 tried to add a quick version of flaps, along with control (four flap settings: 0, 10, 20, 30)

But they really don't feel right at all, and pretty much immediately get me into a flight mode I don't like, where the plane feels like it is trying to hurtle at a thousand miles and hour and being shaken to pieces by the control surfaces whipping between alternating high force lifts.

All when I am just trying to 'do level flight at a low speed, with flaps and a little elevator pitch'

It might be that I have to really model flaps as a separate surface, in addition to the wing itself (I am tryng to do flaps just as a number which affects the AoA calculation, and shape of the Coefficient of Lift curve

I think I WANT (as flaps increase)

* lift to start sooner (hit >0 AoA sooner during takeoff)

* lift to be stronger (level flight needs to match lift and gravity, so can be level at lower speed)

* drag to be stronger (wing is 'more at an angle to the wind, so more drag), leading to slower speed from same throttle setting.

I am struggling a little with the stall speed. You should be able to stall at a lower speed (i.e. not stall at 60 knots, but do stall at 40 knots), but are you actually stalling at a higher AoA, or the same '20 ish degrees' that you stalled at before?

I might just have it backwards... it might be that in tradeoff for 'more lift at lower speeds', you also require a 'higher angle of incidence' to take off (like you have to pull back and pitch up, to take advantage of a low speed lift off, just hlding the elevator level won't take off until you're going really fast.) I need to do some research in MSFS 2020 to calibrate my 'feelings'

---

I still have my occasional 'booted back into space in my cessna' events, where after a crash and tumble, something about the tumbling leads to hyper acceleration even with engines turned off.

The display is so chaotic, that while it's clear there are some strong forces, pointing in suspicious directions, the plane is rotating more than 90 degrees per frame so it's impossible to follow it, and I have so far not felt like stepping through it in the debugger and validating all the numbers in each frame.

But I had possibly a clear view of the followin

* plane is flying foward normally at 100 knots
* hits the ground, or stalls and spins
* manages to be pointing directly backwards (still moving 100 knots, but now facing opposite to direction of flight

This generates strong drag forces, but it looked like I was applying them in the opposite direction to that intended. It held this orientation for many seconds and it looked like it is thinking that an AoA of 180 degrees is the same as an AoA of 0 degrees (probably lost a sign in a cosine somwhere)

So instead of slowing the plane down, strong drag was pulling it 'forward' (backwards) and as drag goes up with square of speed, that increased drag, which then increased acceleration, and in just a few seconds I was hurtling at 2000 knots, backwards. When that ends up happening more 'veritcally', I get shot back out into space.

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

Posts: 10878 | 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 
FLIGHT RELATED ANECDOTE

That time I almost set a tree (and likely, my dorm) on fire.

 -

One afternoon, my two room-mates and I were idly throwing paper airplanes out our third floor window, when I had a terrific idea!

We had some of those cheap firecrackets (the tiny ones) and my experience with them in the past (I used to make bottle rockets) I knew that you could make one into 'a dud' by pulling the fuse out, and then shoving it back in (with tweezers)

A 'dud', instead of exploding with a small bang, would shoot forth a few sparks and.. I reasoned.. act like a small rocket engine!

A rocket powered paper airplane thrown from the third floor would be epic, right?

So, I manufactured the pyrotechnic, taped it to the back of a suitable balanced plane, and then gently threw it out the window (for legal reasons, this story is FICTIONAL, ok?)

At first it headed towards a nice landing on the 'safe' asphalt roadway I aimed at, but then suddenly it veered to the left, and headed straight for the tree.

Even worse, the pyrotechnic hadn't lit, but the fuse HAD set the back of the plane on fire, so there was now a gently floating fireball, headed right for the tree.

And, did I mention the 'tinderbox summer conditions'? yes, this was a VERY foolish activity.

But at JUST THE RIGHT MOMENT FOR MAXIMUM JOY, the firecracker was NOT a dud and it exploded with a satisfying 'pop' and tore enough of the plane up that it lost all lift and fell straight down, landing on cement.

We were not expelled, and went on to do several more foolish things.

--

This memory is brought to you by Microsoft Flight Simulator 2020, that still has my room and tree...

[ 09-12-2020, 05:29 PM: Message edited by: samsyn ]

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

Posts: 10878 | 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, my big accomplishment for this weekend is I can now formally remove my 'cessna overcoat' (or any fliightsim power-up) by long-pressing the stop button (which makes it a peer action to relinquishing your ship color)

Now I just need a button to put it on in the first place. Which I think is just the normal action button. And maybe I won't let you switch directly from one vehicle to another, without passing through 'no vehicle' (i.e. first STOP, then select new one)

pratically, I think that means "action button sends message to lua which indicates the index number of the vehicle they want to put on. Lua then calls into the engine "setVehicleType()" with another message (assuming no game rule prevents it), and then the flightsim object is created an initialized with that vehicle's particulars

The starmap declares up front a table of all supported vehicles, and calls some api to load them into memory in the engine ahead of time (like when the map loads), so the map and engine know all the vehicle details (and the map is in control),

And if the map doesn't do that, then you get the default list of vehicles that the engine starts with.

which currently is just the cessna overcoat :-)

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

Posts: 10878 | 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've made a relatively short video documenting my 'recursive tesselation of geometric primitives mapped from cubical textures'

Which should eventually appear here:

https://youtu.be/0IGmnofWnrI

It's just a means to place building-like objects on a planet's surface (critter space), and then have their level-of-detail (roughly: number of triangles used to render them) adjust automatically so that no triangle (seen on screen) is too large (gets subdivided) or too small (gets culled)

I only do 'flat quad', 'cube' sphere' and 'dome' at the moment, but it would be pretty easy to do 'cone, cylinder, rectangular prism, and a few others'

IN THEORY, you could have an arbitrary radius function that described a sort of radius 'field' that could result in wildly odd shapes, or arbitrarily detailed ones (whose details don't appear unless you get close enough to see their triangles)

Basically, for any point I come up with from the recursive tesselation, I compute a line segment from the 'center' (a control point) to this new point, and then 'make that line however long the radius function tells me it needs to be' (for a sphere, that is always just the actual radius. For a cylinder/cone, the returned value has to increase with vertical distance within the solid. (for a vertical cone/cylinder).

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

Posts: 10878 | 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 'radius functions' for cube, sphere, dome, cylinder, and cone. Then I started something to let starmaps create 'scenes out of objects' and place them anywhere they like on a planet. Lots of work remaining for that.

But I reached a point where I wanted to think about vegetation. Obviously I want 'fractal biodome' as it were, with appropriate things found in locations with specific altitudes, humidity, temp, etc (or under the sea). All interpreted as triangles of various colors.

And, for whatever reason, I want the biome to be synchronized between the players, so I ended up implementing my 'location' system.

When creating a planet, after the fractalization to get the height map (and some gunk like surface normals), I add ONE MILLION random locations

That still seems huge to me, of course, and that would be way too many if I had to render them all at the same time.

They are evenly distributed over my 256x256 array of terrain cells (spanning 8Km x 8Km, or 64 square kilometers of gaming area. Small for a planet, but pretty huge for a playground, I think/hope.).

So I have 65,536 total cells, and 16 locations per cell.

Once pre-computed, I can describe a location by its index 0 to a million (1024K), so in a packet, for example, I can say 'new monster at location 43' and not have to send long floating point values for accurate placement).

Of course, I mainly speak of stationary objects, like trees, bushes, little rocks and such, but I think it should also handle simple fauna hints.

Much like the WoS "monster circles" where a location might be used to say "this is the center of a region with a lot of green slime monsters".

Then, when you were standing around, it's easy for me to work out which cell you are in, then look at the 16 locations in that cell and see if any of them might like to spawn a monster.

So there is no monster until you approach, so no overhead simulating monsters that no one is interacting with). Is the idea.

But, to start, it's just random locations with a handful of metadata (XYZ, heading, id, material, height/width, ..) And when the planet is created I fill it up with random stuff.

Eventually, the random rules should come from the starmap "10% of all locations should be trees of id 15" and then id 15 is described elsewhere as to how it is rendered.

I made some test values to place my primitives here and there in a tree/bushlike pattern. And it's pretty successful. Not ahuge hit on frame rate (I only render 25 cells worth of trees total, and the Level of Detail stuff culls the less important ones, or reduces them to single triangles)

Here's an example -- the whole planet it covered with this stuff (which is, of course, boring in its lack of variety, so hopefully I can improve on that)

 -

My plan (since I can't render all one million potential objects) is to convey the more distant vegetation through the use of dynamically computed 'forest canopies' (Basically wide low domes with foliage colors in a semi transparent texture)
---

Hmm, "Stick Figure Theatre" as part of "Byte-Sized Adventures"

I guess I could at least get some more domain names!

---

ANYWAY, circumstances conspire against my making much progress on this, but I was pleased to have done the location stuff, and it sort of unlocked some other issues (for example, resource collection for the starmap-driven crafting system)

--
Oh, I did have one other achievement: Fixed yet another hang when importing files (it's been hard to make something work with all versions of android, but since google is killing off all the old ones, it has simplified things a little).

--
This enabled me to get back into story writing and I updated my new starMap to reflect my current thoughts on the storyline. I'm being pretty mechanical about it:

* I make an outline in 'comments'

* it boils down to a linear story that is basically a set of quests

* I create a lua co-routine for each quest

* I just type those into the main script in the order I demand they be completed

(parallelism is not too hard, but it's easier for me to do linearly and worry about that later, if ever)

* I have an implementation for each quest, even if it does nothing at all.

* Then I can rework the story, adding/deleting these quests, and refining my comments to myself, and maybe sometime in this process, inspiration hits and a cool idea emerges that needs to be introduced earlier, and changes a character, and makes me happy.

* Then I can run the script at any time, and while it may do absolutely nothing, it doesn't crash. The code always executes (I mean, that's my mandate, never leave the code broken)

* THEN, when I feel like it, I can flesh out the individual quest implementations, and what I am doing right now is just adding dialog boxes of the characters saying what they need to say for that quest.

But not the code that would actually check if the player had achieved anything, just the text popups for "please kill the dragon" and "thank you for killing the dragon"

Then, when I run the map, it just spits out the entire storyline's dialog, one box after another. This turns out to make it easy to detect particularly boring and/or repetitive stuff, and so long as the editor is nearby, it doesn't take a lot of effort to make a change here or there in real time.

Then, I tell myself, After I have read through the story a zillion times and think it's OK and about the right length 'for a starmap', I go back and implement any missing infrastructure to support the challenges I want to place in front of the player.

For example, the logical thing for me to do next would be to send a message from the engine to the script at the moment the player's shell ship enters the atmosphere of the planet.

This would then give the starmap the chance to tell the engine all the 'tweak' values for this planet (fractal seed values for elevation and flora, for example) and any relevant instance data from the moderator.

And in reaction to that, the engine builds the world, clears the display, and you're on the planet, driving a critter.

Meanwhile, lua also gets to set a flag: "player is on the planet" and that first quest ("Get to the planet!") can check if the flag is set, and continue on to the next quest.

The structure of each quest is something like

code:
function = getToThePlanet( scene )
while flagOnThePlanet == 0 do
hints( "There is a cool planet",
"The cool planet is around here",
"Cool people land on it",
"Have you forgotten about the cool planet?" )
wait 1 -- pause one beat
end
obiwan:says( "Hey, I see you made it on planet!")
end

So, most of the time, the 'quest coroutine' is looping in that hints() function which periodically spits out those texts.

Taken together, those texts should nag the player until they meet the goal of the quest.

I generally like message handlers to set flags, and then let the coroutines just react to the flags, rather than have the coroutines try to find the data on their own.

One limitation of the system (since I run lua on its own thread) is that lua can't just ask a simple question like "what is the state of ship 3" and get a result in the return from that call.

Instead, it has to send a message with that question in it, then later handle an incoming message (which may never come) and remember the result (set a flag, maintain a table, ...)

ANYWAY, I haven't done that bit yet

But I can now pepper the landscape with a cubist forest.

I can believe a lucky texture accident could make it look sort of nice. My sort of role model is the digital trees/bushes at the opening credits of the move 'You've got mail"

The half dome actually makes a pretty good 'round' tree, and the cone makes a perfect 'xmas tree', And the low res modeling leads to lots of extra chaotic angles,

But without the 'canopy' concept, there is excessive popping of trees into existence (I might try fading them in with alpha, and I definitely need to rework the LoD (level of detail) system for this to be more efficient.

But definitely shows me the same trees if I leave and come back later, so mission accomplished!

end of blabber

[ 12-18-2020, 09:20 AM: Message edited by: samsyn ]

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

Posts: 10878 | 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, it turns out v1.08 (in stores now) has stopped working on Samsung and Droid phones! So I need to do a bugfix release, which hijacks 1.09

But here are the last fixes sneaking in before that. I hope to release 1.09 'this weekend' )(without a new starmap, though you might run into me testing that, it will still require another release (v1.10) before that map can be released.

---

* I added a "On Planet 3D Resolution" option to the nerd options, with the values: Low, lower, and lowest. (I have to run my older Droid 2 phone at 'lowest' to get > 5 fps while on planet) Hopefully I can improve that performance, but if not, there are additional computations I can throttle when necessary.

the flight sim stuff is unstable below 10 fps or so, however.

Grid space appears to have no problem maintaining > 30 fps on same device.

* cleaned up the 'spy on' feature so it more gracefully handles orbital state transitions (you can only spy on someone in the same general space as you. grid space, or on the same planet, basically)

* disabled the incomplete tractor beam implementation. I'll get one eventually, but now all the work is doubled, since now I want the same devices to (where possible) work both in grid space and onPlanet3D

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

Posts: 10878 | 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!

Here's a video version of the 1.09 release notes

https://youtu.be/IfWzW3_dlLU

Again, I am only releasing this now because v1.08 has been completely broken by underlying android changes.

This release would make more sense if it included a new starmap, but I can't wait for that, so those plans are now deferred to release 1.10, which hopefully is not 2 years away.

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

Posts: 10878 | From: California | Registered: Dec 1998  |  IP: Logged
  This topic comprises 2 pages: 1  2   

Post New Topic  
Topic Closed  Topic Closed
Open 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