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

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

  This topic comprises 2 pages: 1  2   
Author Topic: synspace: Drone Runners 1.0.10 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 
CRITTER ANGER MANAGEMENT

I decided how I wanted to handle 'inter-alliance affiliations' in a world with 8 players, 1000 Hives and zillions of critters.

This is basically the 'aggro' levels used by critters to decide whether they want to fight with you or not.

I made it hive-centric, so you are trying to earn the love of as many Hives as possible. (like WarPath planets). There will be points.

Each Hive maintains its own set of 8 'love/hate meters' which are incremented or decremented based on interactions with the up-to 8 human players. A strongly positive value means they love you, strongly negative is hate, and in the middle is varying amounts of neutral.

When a new critter is 'born' (3D printed by its parent Hive), it gets a copy of the Hive's love meters, so it feels exactly the same as its Hive

But subsequent interactions can make the critter drift from the parent attitudes (so you should be able to befriend critters of 'enemy' Hives), and, in battle, it is the critter's personal set of love meters that controls its behaviour.

Observant readers will note this would appear to be replacing a VQ brain used for this purpose, but I think it does not. The VQ brain still decides 'when to change goals', but it does that from inputs and now it can use the love meters as some of that input.

So, as part of the approach/avoidance system, this 'love/hate' value is included in the computations of critter goal selection, which now includes 'attack1'

The only way to earn aggro today is to trigger the 'personal space violation' response (stand very close to a critter until it feels the need to walk away, This earns negative 0.1 love points, and my hate trigger is set to 1.0, so after I get in your face 10 times, you officially 'hate' me, and the next time the critter computes its current goal, and it sees me (vision distance is a species tweak), it will choose one of its available/appropriate attacks (and I only have 'attack1' at the moment) and then tries to effectuate that goal.

which behaves like all the other goals really... first you navigate to some target, then you play some stick figure animation, sound effects, particles as apprpriate, update RPG and BIO stats, award points, and pick your next goal.

I have pencilled in a set of stick figure animations (attack1, attack2, defense, flee, pain, die, etc.). Note that you don't HAVE to have a working animation for the other steps to take place. It will just be that much less interesting to watch :-)

The idea being that all these numbers are tweak values that the script can set. So maybe the battle system is flexible (we'll see) and not doomed to only do what this one starmap does.

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

Posts: 11017 | 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 
Random screen shot

 -

One thing about fractal terrain is that if you don't record the random seed number, it might be a long time before you stumble upon that same world again.

So I just wanted to immortalize this world before it evaporates.

While I don't think this image catches it, there is a nice slope down to an inland sea, with a mountainous island jutting up dramatically.

It's a pleasant walk, with lots of open area for large battlefields, if that's the goal.

Plus, you can see how a ballistics game might enjoy aiming at the distant shores. Or ski-ing even, if I had slippery feet.

There is a Hive down the slope from me (the red stick figure in screen center), and some critters spawned by the Hive.

This Hive is not attuned to me (doesn't have my FACE on the side, or my Player Thumb Color), so I don't know for sure what will happen when I approach.

But likely it has no opinion about me, and if I stand close to it for long enough, it will eventually attune itself to me.

Though now I just realized I have to re-write that code to use the new 'love/hate meters', and then the hive can formally like several people at once, and not have to hate everyone it doesn't love.

I wonder.... if a critter hates you enough to start pounding on you, should it actually hate you a little less after each attack? Like it is working off some of its anger?

I need to be sure to have a tweak for each such 'behaviour' and then the starmap can just go with the default, or specify how many love/hate points should be earned for each attack (giving and receiving).

And if you don't want that particular behavior, you set the points to zero when the map loads. (via a numbered tweak)

----

BATTLE THOUGHTS

Similar to WoS, there are tables of numbers. Though in this case the starmap sets them via numbered tweak values (floats and strings).

Much of the API between the starmap and the game engine is organized around tweak categories that each manage the contents of one sort of table (possible inventory items, vehicle definitions, critter species info, individual critter details, etc)

So the new table I think I will add is the table of 'battle setups' (I'm sure there's a great name for this somewhere). But the idea is that a starmap would pre-define these with a handful of battle setups, for example:

"one king wolf, three red wolfs, and 20 baby wolves, in this XYZ formation, where the baby wolves are all in 'patrol' mode, and the whole group is defending the King wolf, who moves around and spouts invective until you whittle away all the red wolves, and then take him out. Plus this should happen inside a dark cave, with creepy music."

Only conveyed by numbered tweaks. And then a separate description for some plot-driven battles needed for questing.

Then, in the map instance data (smewhere), you set up which battles happen where, and then either go to fixed locations with specific battles (to make your own dungeon/raid) or just have popup battles that spawn near you, probably upon approaching a Hive, for example.

The thing about a battle setup, is that once it (or a copy of it) is running, then all the critters it spawns (the actors) are synched to the other players (while the hive-spawned critters are not, the hive syncs only its general demographics and not the per critter stuff)

So each player is the host of its own battle instances and sends packets on behalf of those critters when they change in some way.

I guess this maps pretty strongly to the WoS 'scene' concept, so maybe that will be the word after all. Except I felt I already crossed that line when I left your shell ship in orbit (out in grid space) as sort of the WoS campfire for the time you were on planet. And now, while already on planet, I want to stick you inside of yet another framework. I'm so recursive.

[ 05-01-2022, 04:35 PM: Message edited by: samsyn ]

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

Posts: 11017 | 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 
CONVERSATION API (Tweaks)

I implemented a simple version of conversation trees. I'm not sure what they are properly called, but this sort of thing:

"So, Jimmy, what brings you to Utopia? It's been quite a while since we've seen a stranger!"

* Really, Bob? I couldn't wait to get back home!

* Who are you again?

* What do you mean "Utopia," Isn't this Vegas?

You then tap the answer you feel is 'correct' and it switches to a new prompt, with new replies (or maybe the same replies again, I guess)

And eventually you run out of things to say, or you offend the NPC or you make it to one of the magic loot bombs hidden somewhere (reward for 'winning' the conversation)

Anyway, that sort of thing. Tedious, if not adequately charming.

I organize it as numbered "Pages" (Page has one prompt, and up to N replies). Currently N=4

Each page is defined by a tweak in the 13xx range.

For example, here we define page 0:

code:
set tweak 1300 = "What is your name?[DAVE=1][DAN=15]"

Each reply is in [square brackets] and that example would only show two possible replies.

The number after the equal sign is the page to switch to, if they tap that reply.

So, for this example to make sense, you would define pages 1 and 15 as well.

If you don't need to go to another page, set it to -1 and the dialog will close when that reply is selected.

Your starmap script would first define all possible pages of a conversation. This is currently limited to about 80 pages.
If you are conversing with NPCs, they could share the same 80 pages (with non-overlapping links) if it all fit, but otherwise you would need to swap in just the pages you need for the selected NPC. Probably at the time you clicked on them.

To open the conversation window, with a particular page selected, use tweak 1399

set tweak 1399=15

would open the dialog, and display page 15. You can close the window (if open) by setting 1399 to -1.

So remind me to send a message to the script when you click on a critter.

But the CONVERSATION can send a script message any time you like, by adding 'a hashtag' after the 'to' page number

code:
set tweak 1344= "Great, you're done![THANKS,BYE!=-1#finished]"

So that's page '44' and has only one reply (in square brackets) which is set to take you to page -1 (close the popup window or whatever is displaying it)

But immediately following the "-1" is "#finished", which is the message it will send to the script when the user taps that reply.

Your script, probably at the same time it defined all the pages, also defined handlers for each message you create, like

code:
-- starmap Lua script
...
counter = 0 -- we have seen no messages yet
handlers['#finished'] = function() counter++ end

So any time that message comes in, you just increment a counter. (one counter per message you want to track, for example)

Then you can encapsulate an entire NPC conversation into a function like this:

code:
chatWithCharley( bot, scene )
-- define all my charley pages
setTweak(1300< "Hi, I am charley![Go on, sir!=-1#finished]"
. . .
-- clear the counter
counter = 0
-- open to the starting page
setTweak 1399 = 0 -- probably 0, but anything you like

-- wait for the #finished message to arrive
while( counter < 1 )
-- do whatever you like, maybe emit hints
-- but probably this is quest modal
-- maybe an inactivity tmeout
wait(1) -- for efficient coroutines
end

-- continue your quest
bot.say("OK, see ya, and here's a secret hint!")
bot.give( BookOfSecretsItemId )
end

note I just made up "#finished" for this example. your script should use whatever message 'commands' you think suit your purposes.

The script is mostly focused on one quest at a time (in the sense hat two simultaneous NPC conversations would require a significant UI to keep straight. (and maybe tiny untappable replies)

But this is in a lua coroutine, so each time it calls wait() it gives all the other coroutines a chance to advance their own goals.

I have talked about this elsewhere, but this is the official API

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

Posts: 11017 | 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 reworked the minimap a little to make it a little more usable (for me)

* Now has 'four configurations

0 - closed (1x1)(a single small button in the upper right. Tapping that button opens the HUD to full size (whatever that is)

1 - game mode (4x4) with 9 of the buttons grouped in a 3x3 square (where the actual minimap is rendered) with a column of three buttons to the right, and a row of 4 function buttons along the bottom.

2 - edit mode (4x6) grid game mode, but with an extra column of information between the 3x3 and the vertical column of buttons. More or less only used when experimenting with game features.

3 - minigame mode (3x4) (just the 3x3 and three buttons to the right of it. This is the normal gameplay mode, using as little screen space as possible, with full functionality available.

--

So the three buttons to the right of the 3x3 are always these (top to bottom)

* MFD SELECTOR (replaces [X] close button)

Tap this once to re-open the hud to its last known state. Once the hud is open, tap again to start the MFD selector (the 3x3 area becomes nine buttons letting you select nine different display modes)

* BUTTON CONFIG. Tap this to cycle between the dfferent button layouts above (3x4, 4x4, 4x6)

* BACK (not yet implemented, but if I need a BACK button, I plan for it to go here)

---

Inside the 3x3 when it is in MFD selection mode, you see nine (3x3) buttons, each of which selects a different kinf of HUD information. The buttons are numbered like this:

0 1 2
3 4 5
6 7 8

And the button labels are

MAP BIO X
WTX SCO RES
TMP HIV ...

(subject to change) With the uses:

MAP - the default minimap. Shows the region around the player (player centered on minimap) Tap on the left or right to zoom in and out on the map. Also shows player positions on the map

BIO - sort of a life scanner, showing you BIO details for the currently selected critter. Probably need to break this into BIO and RPG

X - (close HUD) the new way to close the hud. (reduce it back to 1x1)

WTX - (weather) displays terrain and 'weather' particles (clouds and raindrops)

SCO - (score) displays the current score.

RES - (resources) shows terrain and 'loot' particles (ore, food, fruit, and monster loot)

TMP - (temperature) shows terrain and ground temp (and sun position)

HIV - (Hives) shows terrain and nearby HIVE status

"..." (more) let's you step through additional 'pages' of nine buttons each.

So, in theory, I can have unlimited buttons on this panel. I have created a second page that does nothing yet, but I will think about a 'second tier' of info, though it might make sense to divide things into functional groups.

ANYWAY, this 'feels better' to me, with fewer taps required to see the stuff I find interesting to look at. Plus I debugged some of the display math (like why zoom messed up the particle positions)

I think I will have some navigation related displays (like maybe a list of airports that lets you select which one your ILS system is taking you to.)

Plus some tweak values to let the script maybe add a page or two of its own buttons.

Maybe you craft some device that gives you the ability to find some rare material. Once you equip the device, you get a new button in the HUD to show the display screen of that device (or HIVE, critter, tree, etc) Perhaps it is just an arrow pointing to the thing you're looking for.

I am using three letter 'words' for the individual buttons as an homage to 2001 A Space Odyssey.

Please note that I can spell "odyssey" (but only because that's what we drive :-)

Posts: 11017 | 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 had a surprisingly productive weekend on synSpace, fixing many antique bugs (still plenty left) and polishing features I broke when adding new features that I then also broke.

So clouds are finally working as I originally 'envisioned' them, and the climate in general is behaving in a way I like (virtual terrarium mode).

And I added a bunch more automation via 'tweaks' so scripted adventures can do more interesting things.

First real use of the conversation tree is now a sort of adventure finder in the options/starmap panel, where this new starmap (Utopia, to be released in version 10) offers a handful of small adventures. (script-driven user interface)

I added support for default patch sets (i.e. the game will finally ship with a selection of instrument patches, so you don't have to make all of your own instruments from scratch).

I added a system for using the synthesizer for soud effects in world. So, by tweaks, I can mount up to 10 custom instruments and then play/modulate individual notes in real time (maybe with a little 3D positioning of the audio, though maybe not).

I plan to use this for: engine sounds, explosions, animal sounds, wind, and esthetic effects. For example, I want to play a sort of wind chime sound whenever a stalk of grass breaks off and floats away (which is what happens when a critter consumes one).

And, of course, as usual, I wave my hands in the direction of each world having a key signature, and for these sound effects to only use 'in key' notes, and to drive the intervals between notes to follow either a major-or-minor third sequence based on if your character is in a dangerous place or not.

And for the Hives to add a sort of bass line as they stamp out new critters.

Anyway, it was after adding thie automation that I realized it was sort of pointless without default instrument sets, hence I finally got around to doing that, probablty 4 years after I added the synthesizer.

Oh, then I had to add a tweak that would create an archive file contrainint every instrument patch loaded on that copy of the game, so I can harvest all the instrumens I have created on dozens of tables and look for likeliy candidates for inclusion in release .10

---------------------
Here's my real world idea for a useful invention. It's mostly based on things I have heard that work, so I hope someone is working on the combination.

Basically, a simple blood glucose meter that requires no pricking, no patches, only takes a second or two and is easy to carry with you.

The mechanical design is something like a clip on ear piece (or maybe even a pierced earlobe pin, or a bluetooth earbud shape). Something comfortable

Basically it has a set of LEDs of specially designed colors. Thos shine on one side of the earlobe, and the oppostie side has basically a little TV camera (they're cheap) with as broad a spectrum as possible.

Then to take a reading, the LEDs are pulsed in some order, and the camera signal then drives a neural network whose output is your current blood sugar level (and maybe your heartbeat and blood pressure as well)

If a single pre-trained network doesnt give good results, then add an option to calibrate it with a separate continuous fglucose monitor. So you wear one of those for a week, and it talks in real time to the earlobe device, talling it what your actual suage lavela arwe, and it can tweak the network to exactly match you.

After which you no longer need the CGM and can use the lobe any time you like, or not at all

Posts: 11017 | 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 
again, apologies for all the typos. My vision is still pretty blurred out, but I am adapting.

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

Posts: 11017 | 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 haven't really done much with regards to battling in critter world (on planet, I mean). The critters have an approach/avoidance ai, driven by a simulated biological state (hungry, cold, etc), but while they can get mad at you, and want to fight you, they never actually bite you or throw a punch, a banana, or a bazooka.

Also, while 'flora' objects are my primary means of placinf structures in world, only hives could actually do anything interesting. Remind me to ramble about recent ideas in 'instance data'

Anyway, in addition to giving birth to new critters, a hive can now defend itself with something like a missile or artillery.

Of course, this meant re-implementing a bunch of stuff I already had in grid space, and I am just not sure how melded together I will make that. Also, I have not integrated critter weapons into the actual button bar, though at least there I have sort of a plan.

in critter world, I have this thing called World Triangle Particles (WTP) which are extremely lightweight objects (so I can have a lot of them) with enough physics state (position, velocity, accelerations) that their movement can be set up as needed for a variety of 'weapons' (like claim bombs).

At render time, I can directly emit a single triangle for each. Which works pretty well for clusters like smoke with lots of particles overlapping, but is less convincing up close if the projectile is supposed to look like a falcon 9.

So... emitting all the WTP triangles has to be done in a single operation (WTP is designed exactly for efficient mass render of lots of small triangles)

But, as I shove each triangle into the 3D output stream, I ask it if it has a 3D model it would like me to render instead. And if it does, then I can maybe skip the single triangle render (I might be stuck with it), and instead add a line to a list of models I need to render, recording the position and orientation of the particle.

then after queuing all the WTP triangles, go over the model list and emit all of their triangles (to the queue)

then the queue gets culled and sorted for the 'best' triangles (for game purposes), and finally sent off to be rendered as a single 'display list' using android canvas.drawVertices()

at the time the WTP particle is rendered, I know its distance from the camera (and the camera zoom), so I come up with a number which is the 'pixelsPerMeter' for that object. So if the object is 10 meters wide, and pixelsPerMeter for its current distance is '47', then the whole thing would be 470 pixels wide on screen. And maybe the screen is 1024 pixels wide in total, so it is about 47% the width of the screen, and hence the player is getting a pretty closeup view, and that model should be rendered with the highest level of detail available.

but if another object at the same distance is only 1 meter wide, it would have the same pixelsPerMeter and only use 47 pixels of screen width and hence be so small that it isn't worth rendering a high res model, so use a lower resolution (fewer facets), or just all the way down to the original WTP single triangle.

Anyway, point being, that when the list of models to be rendered is built, I already know the level of detail needed. For high importance assets, I could have hand made models for multiple levels, but that's not my style (that's actual work), so I will continue to play with my 'infinitely recursive tesselation' stuff.

On that point, I added a 'tube generator' which .. or right, it's a 'tube extruder'

You give me (via tweaks) a set of control points defining a sort of top down view with +X being 'right' and +Y being 'forward'

Plus a 'radius' at that point. At render time you also provide a 'polygonSize' (like 8 for an octagon, or 3 for a triangle)

It then walks through your control points and emits triangles to form a series of 'rings' (think SpaceX Starship design) which then connect from one radius to the next (starts with radius 0 for a pointy nose, several rings to get to full width, then taper down to the tail.

It does this as part of render, so no 'model' is left behind. So far that's not a performance issue.

since the X value can change, the tube can curve to the right or left. And in theory if I gave you four control points you could also curve up and down, but these curves, in aggregate, are probably limited to 90 degrees total... but... well.. it would be cool to spiral. and leave behine collisions... water slide twisty.

Anyway, I made a huge 'blimp' parked over the center island in Starmap Utopia, and I suspect I will use that for some scripted adventures... like it is ominously approachine, dripping some sort of devestation on the lands it passes over. Maybe passively blown in the wind, so it's not an personal attack, and you have some time before it gets to the important stuff. And you have to repeatedly land, reload, take off, rendevous, and shoot at it, as it lumbers slowly towards the target.

Getting back to the reason for the post, so as of this moment, all the hives (about a thousand on planet, along with a thousand critters, and about a million flora) *NOT ALL CAN BE SEEN AT ONCE*

Anyway, all the hives are equipped with anti-critter protection. They scan for all nearby critters, check the 'team/owner' of the critter and compare it to that of the hive, and if they do not match, then the Hive fires a 'missile' directly at the critter

This makes a WTP_Projectile style WTP triangle, which has a little payload describing it's motion control (powered, ballistic, seeker, straight line) and currently I have no model, so I just see the triangle.

So, right now, the planet is very unsafe since all the Hives start out belonging to Watte (not me), so as soon as I get within 20 meters of them, they start firing one shot a second straight at me, and they are very good shots. At least when I am standing still.

Anyway, now I have to trick it up to support more complex 'teams' and specific weapon types

And I guess the nice thing here is I don't need a UI immediately since I can bake in some weapon types and just refer to them as weapon number 4, etc. For example, I want to be able to confgure a hive to do something different for air attacks vs ground attacks, critter with or without vehicle, etc.

Maybe a new critter, born of a specific genome, has a primary attack set by the genome (common to all siblings), and a secondary attack which is more of a 'personal super power'. Which is randomly/genetically assigned, but you don't know until the critter is born, and you need to collect usful combinations.

So, a super power might be 'primary attack has x% chance of kicking victim critter out of their vehicle.'

Well, that's not really a secondary attack.. maybe that's a static 'trait' and I just let the script define up to, say, 8 'traits' and then each critter would have an array of 8 numbers indicating the probability for each trait happening each primary attack. With most being 0 (will never happen) and some sort of balancing 'roll your traits' for fairness. (all probabilities add to.. 50%) Or to N% where N is set by training/levelling... that sort of thing.

so you COULD have a high level character that had a 100% chance of inflicting all 8 traits (traits are behaviours like knock-back, which is different from 'buffs' (another array of 8 things defined by the script) where a critter can be infected by stacks of buffs (IN THEORY) and each buff has a timeout and/or a cure. While in effect, a buff modifies some RPG attribute (like WISdom/STRength/STAmina/DEXterity/AGIlilty)

Again, the starmap configures the N traits and buffs and weapons and probably armor eventually, selecting from lists of engine-supported mechanics (like kick-back). Once they are defined, the engine rolls a die on each attack and triggers appropriate traits and buffs, and while in effect, automatically modifies RPG stats.

I'm still on the fence over letting the script micro manage blow by blow, since it exposes/causes lag talking between the game and script threads. So I prefer the script define all the numbers up front and let the engine just obey those rules, rather than (for example) ask the script for how many hit points of damage this particular projectile caused in this particular time it was used. AND YET, there are special weapons (like Claim Bombs) where they may or may not generate some HP damage, but they DO send a message to the script upon collision, and then the script decides any game logic (like 'oh, the claim bomb landed close enough to the place I told him to put it, so I will congratulate him and move his task to the next on the list')

Anyway, lots of violent things to add, but also friendly things.

Oh, the punch line is that the Hive 'missiles' kill me in two shots (2 seconds), so I can no longer do anything useful before I am taken out, and while normal critters respawn, player-critters apparently don't (yet), so I am left just in an unplayable state. And, I imagine, the Hive probably doesn't stop shooting just because I'm dead.

I guess I should try 'speeding by' and see if it needs to fire a leading shot. Or maybe I should slow down the projectile in the 'local critter' case.

Well, this is really just the 'trigger' I still have the whole RPG math experience to deal with, and..

Or crap, instance data. I want some instance data, so I can return to a starmap I built something on in the past and find it still there.

Or to predecorate my map, then invite you to join and you see my decorations.

Of course, as a StarMap Developer, one can just start the world with the stuff you want, and no instance data is needed.

Instance data (in my 'vision') is "changes made to the world since its original creation"

So the world gets created from a random fractal seed, and that sets up terrain, water, hives, flora, critters, etc. Everyone runs the same math so they all start with the same world without having to send any data other than the random seed(s)

But then after that, I might 'do things'
* DROP a BARN/CABIN/UNIT/ETC at XYZ
* FLATTEN an area (suitable for building)
* CRATER an area (permanent terrain alteration)
* DESTROY a BARN/CABIN/ETC (remove something)
Each of those actions will described in a short text string (probably looks a little 'tweaky')
Each string is numbered, and the 8 players each get N numbers (say 100), so in theory, 800 barns might be dropped by 8 players with indices 100-199 belonging to player 1, etc. (for example).

So I could 'build a base' of up to 100 buildings, selected from the predeclared list of buildings available on that starmap (each building having the option of an anti-aircraft missle system, as you see fit)

Anyway, so each player is the source of truth for their 100 lines of instance data.

Each player has a SAVE button somewhere that saves the current instance data (all 800? just their 100?). And when loading a starmap, the moderator has a LOAD button that loads (all 800? just their 100 but with possibly a new thumb color?)

When I drop in later, first I build the world from fractal seeds, then the moderator sends me the current instance data... or. each player sends me their personal instance data. (and moderator maybe can choose to allow players to load in mid game)

SAVING instance data should stay bound to the starmap in question (can't use instance from map A on map B), but maybe you can have multiple instances for a given map, and they are named, or at least dated.) Yeah, I think it's just your personal 100 and it goes with you to your new selected thumb color as needed.

There is also MAP data, which basically is your inventory on that starmap (and your quest tokens - achievemtns on map), which is shared by all instances of that map (if you use something up today, it is missing from inventory tomorrow when you come back to the map, whether you SAVE
instance or not).

OK, that's enough babbling, just having a rare moment of productivity.

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

Posts: 11017 | 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 babbling

Android now requires that I formally enable file sharing, repeatedly, requiring that I shut down my app, unplug the USB cable, plug it back in, reauthorize file access, find the device in Windows, open it in a new winddow, rememer to save my work, then drag the work map to the device (generally on top of the previous build), then I have to relaunch the game, navigate to the option to import a starmap, import it, check if there were syntax errors, and if not, I generally like to clone it right away and save it under a name, and then exit the game to be sure that is my default map next time I run (to save myself time next run, should there be one)

And then I can run it again, find myself already in the new map and test away, at which point it is fun again.

But tonight I had *still have* a bug in lua which required multiple repetitions of the above, at the same time my blood sugar was dwindling. I was not polite. But I took a break, watched a movie, and I will give it one more go before bed.

I tend to make certain mistakes in lua, and here are the ones I made today:

code:
function = whatever( scene, args )
if( args.critterIndex == 0 ) then
-- do somethiing special for critter 0
end
end

The problem there is that args.critterIndex might well be "0" (i.e. a string value, representing the number 0)

to ensure it compares it numerically, I usually do something like this

local critterIndex = 0 + args.critterIndex
if( critterIndex == 0 ) then ...

Since a literal numeric value is seen at the start of the expression, it casts all other arguments to a matching format

I suspect there is a more official way of handling that. And the local variable is not needed, I just find it easier to read/type/document if it doesn't seem to be a performance issue.

Also, the logical AND operator is NOT "&&" and I make that mistake everytime. I am using an editor that supposedly knows lua and it could actually draw that to my attention probably.

Use 'and' and 'or' instead

if( (a == 1) and (b == 9 ) then

Also, don't use "!=" for 'not equal'. Lua uses "~="

But with all that, this still fails:

code:
['onDEAD'] = function( scene, args )        
local shipIndex = 0 + args.ship
local gridSpace = 0 + args.gridSpace

log( 1, "onDEAD ship " .. shipIndex
.. " gridSpace: " .. gridSpace
.. " myShip: " .. myShipIndex )

-- did my critter 'die'
if( ( shipIndex == myShipIndex) and (gridSpace == 0) ) then
log( 1, "onDEAD setting weDied = 1" )
-- we are inside a message handler,
-- so just set a flag for the main loop
scene.weDied = 1
end
end,

and the symptom is that it never sets the flag (or any code inside that conditional.. hence that conditional is managing to come up false in spite of my logging all values and confirming they are correct and the conditional SHOULD be true.

where 'myShipIndex' is a known 'integer' value. Though logically, the only remaining thing that could be making this fail is if that is become a string by the time I use it here.

Yeah, it's got to be myShipIndex. Maybe that's not as global as I thought it was.

And, yep, that was the problem, all fixed.

--

on another subject, so with all these projectiles whizzing around and hives sensing approaching critters, there is a lot of checking if a particular critter is close to a particular thing. And there are up to a 1000 critters to check against. So before that becomes a performance issue in itself, I implemented a 'system'

1.) I break the map up into a 16x16 cell grid (each cell is 512x512 meters)
2.) each critter, as part of its frame update, records the cell it is currently inside of.
3.) if it sees it has moved to a different cell, it updates the 'critters in cell' list for that cell (removes itself from the old cell's list, and adds itself to the new cell's list)

so I have a 'directory' of exaactly which critters are in which cells (and I limit that, so there are some edge cases if one cell gets full)

then, in all the places I need to see nearby critters, I:

1.) periodically invole 'get list of nearby critters' (gving a position and radius). It then looks in all the cells near that position, at all the critters in each cell's list (which usually is just a handful, not 1000). and caches that list for a second or two before refreshing it. (like each hive does that)

2.) then, at its leisure, the hive invokes a "I am ready to shoot someone if someone is availabl; function, which finds a taregt if one is available (and none is already selected) and fires one shot at it.

For test purposes, the detector has a long distance, so I can be shot at by maybe 10 hives at once, from all directions, so it's a real battle field of triangles coming at you, but in a straight line, and kinda slowly, so it takes seconds for a projectile to get to you, and you see it coming, so just staying on your toes you can walk slowly through the battle. but if you hold still, after a few seconds all the projectiles are headed straight towards you.

it's actually kind of thrilling in its way.

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

Posts: 11017 | 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 it's the cold weather. Historically I have had a productive period leading up to xmas.

I wired in all the RPG stuff and added an RPG MFD (multi function display) panel so you can see a critters stats (level, xp, xp needed, hp, hp max, mp mpp max, str, wisdom, stamina, agility, and dexterity

I added an 'eat' function so selected inventory items are edible. Though in retrospect I realize I could probably have just used 'use' but now I have 'use' and 'eat' which do mostly the same thing

any inventory item that IS edible (like 'green leaf paste' can be assigned (optionally) a "BIO Effect String" which is text that looks like this:

"hp=100,mp=-5,item=112,xp=47"

you only include the things you want to have happen when this thing is eaten (but is also applied if it is 'used' or if this item is a wepon the change is applied when the weapon hits you.

hp=-20 would apply 20 units of hp damage.
hp=73 would grant 73 hit points (healing)

so eating an apple could even give you experience, or even several full level ups. I mean, if the starmap designer thought that was a good idea. And you get to call things out by name instead of number (yay!)

lowercase though, be sure to use lowercase. Actually I guess I coerce it, but don't assume I will. the proper names are lower case

here's the full list for now

"hp", "mp", "xp", "str", "wis", "sta", "dex", "agi", "level",
"item"

This is not to be confused with the similar 'loot string' which is mostly items. Maybe this should replace the loot string though... we'll see.

I thought about buffs/debuffs, and they shall work like this

1.) starmap designer defines up to.. 16? 64? different buffs, where each buff has
name: "Snake Panic"
desc: "lasts 30 seconds, during which you are afraid of invisible snakes"
code: the actual runtime mechanic is expressed as one of N available numeric values (things the engine knows how to do, whatever you want to call them).

2.) then an item or weapon, via sme nnamed process 'gives you buff points' so to speak. Where, I think, one buff point means one second of that buff

so, if an attack or item gives you "plague=45" then it is giving you 45 seconds of the plague buff.

If another attack gives you the same buff before the previous one has expired, it doesn't 'stack' but it does 'add' the new seconds to whatever was already pending. So if three people case 30 seconds of buff X on you, then you only have the normal buff X effect, but it lasts for a total of 90 seconds.

likewise, if I cast something that gives you "plague=-10" then it removes 10 seconds of plague (as needed)

buff mechanics are generally temporary changes to stats like WIS, STR, STA, AGI, and DEX (plus or minus, or combinations)

Then I have to extend the critter BIO table to include some number of rows for 'active buffs' where for each of those I need

buffIndex (or name, I guess)
clockTime when buff expires

then I just add and subtract to clockTime as new buffs come in.

and I was thinking of a max amount of buffs on me at once, though maybe it has to be the same as the total number of defined buffs. otherwise, what do I do if you cast a fifth buff on me. ignore it? replace a weaker buff of the same time?

interesting strategy to cast 4 'gentle' buffs on yourself to blcok receopt of nastier ones.

whate else did I do this afternoon? bunches of good stuff.

* I digressed into my red/blue stereo 3D code and made it work 'in critter world' (sort of) by alternating renders netween eyes, so it's very flickery, and it has touble on colored objects (i.e. evething) as this technology really wants a grayscale world, so the only use of color is the red/blue 3D stuff.

Still, it more or less works (dpending on how bad your frame rate is.

* Hives no longer shoot at dead critters. I need to add 'aggro' (actually, I think that will be the love points I added to hives awhile back. hive should only shooot critters it doesn't love

* right now, I can walk up to a critter with 50 red babies (I am yellow, say) and then comvince the hive to bond with me, at which point it then clamly begins murderine all its red babies (and starts making yellow babies)

that wasn't supposed to sound racial, I just wanted to stress how mean it was. definitely smething worth doing in a little adventure (stop the hive from murdering its babies). Of course, critters cannot die

* Oh, I have my form of 'seath on planet' now. If your critter hits zero HP, it is 'destroyed' but since no critter ever dies, Pan shows up and resurrects (repairs) you (or just gives you a new critter to pilot) and you end up back in orbit, as if you just swooped in from grid space (except the quests do not restart, and you just have to travel back to where you were to resume the quest. I will probably add a map beacon to help you do that (including an autopilot)

I had a scare when my app ran out of memory. It turns out it is not unlimited :-)

I had a bunch of wasteful storage (on purpose for this very reason) which I have cleared out, and I realize I need to restrcutre my critter class as I have stuff in critter that really should be in genome/species instead (then shared with all critters born of that genome). For example the animations are currently stored in the invidual critters, which is cool and all, but a little crazy. It's ok if 'all giraffes have the same animations'

That will save a ton of memory (1024 critter instances, but only a dozen or so genomes per starmap.)

I feel a little stupid I didn't do that fromk the getgo, as it will be a hassle to break that apart now. And I probably won't do it until I run out of memory again

But a GENOME (preferred name for species now) should have the skeleton, poses, and animations in it, and a 'name' (giraffe) and some basic RPG stats common to all giraffes (but the actual RPG table is a per critter thing, and each critter has its own unique RPG values)

So the GENOME editor is where you edit those animations, and other properties you want to be set for the genome for all member critters. So I could make a 'Red Wolf' genome with a bunch of stuff, and then make a 'Green World' by cloning a red wolf, and then making some changes to it, but at the end of the day I will have collected a bunch of GENOMEs, from which I can spin up any number of critters, or clone to make new critters needed for my starmap.

I like actually doing things, but I'm afraid I uses up my eyes for now. Maybe some more fun tomorrow, but I have loads of work work to do as well.

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

Posts: 11017 | 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 
On second thought, class 'critter' is just fine. I just need a class 'critterInstance' that takes about 20% out of critter. Class Critter would still be the 'collectible' that you edit and share with others.

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

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

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Well, I was overwhelmed by all the bugs I had allowed to aggregate, so I made an effort (mild, took 4 months) to 'suffer no bug to live' and break off whatever I was doing to fix any bug than manifested (and hope the interruption of what I was doing doesn't add worse bugs)

And, even with that, I continued to add unnecessary extra, unpolished, new features.

I finally got around to dealing with 'gender' (it seems important in what is essentially a game of genetic engineering). In game there is no effect yet (and I wave my hand at 'the starmap should control what, if any, effect this has'). But each critter now has a randomly assigned gender (demographically patterned on the USA numbers I could work out with mild googling -- but definitely controlled by the starmap)

The gender is a single letter from the 'gender rainbow', which in this case is FMLGBTQ* mapping to the colors ROYGBIV<black>

I added FM to the front since F (cis-female, I think is the official concept there) is the largest demographic (in USA). and LGBTQ seemed to already be sorted by population counts. It just feels like FM and LGBTQ deserve to all be on the same scale.

Honestly, I couldn't really grok Q, so I treat it as 'other' for all intents and purposes. I ignore '+' because I really want a 7 letter system (to match the rainbow -- and I didn't see an existing mapping, which I bet probably does exist and I have probably messed it up, but I like the sorted by population thought, so, sorry '+', nothing personal)

Then I went ahead and added an eighth letter '*' which in my system means 'opt out'. The critter doesn't want to take part in any of these reindeer games. If this were my religion rainbow, this would be 'agnostic' I think.

I wasn't actually planning for a religion rainbow. But now it's in my head as something else a starmap could choose to have. But probably just fantasy religions.. maybe based on actual game NPC gods that you encounter in world. Probably at the 'faction' level.

I acknowledge I have too much stuff, and not enough content. I still can't do a complete 'scene' (fight or otherwise), and my BIO and RPG modules are in conflict.

OK, maybe not. BIO digests FOOD your critter has EATEN (wild, or item) to recover PEP, which is what facilitates automatic HP recharge.

RPG can directly modify HP up (heal) or down (hit) in reaction to formal MOVEs within a FIGHT SCENE.

but does not generally heal HP over time (leave that to BIO, I am saying?). But can drain HP over time in the case of poison/curse.

While on planet, critter HP should replace Shell Ship ENERGY which is what I display right now. ENERGY has a larger range than HPMAX, I think, which might complicate things ( would still want individual 'fingers' of red to peel off the meter when you get damaged)

But it's like changing to a different vehicle, that comes with different controls on the panel. CHARGE/ENERGY need to become MP/HP while driving a critter.


Without getting too political about it, the concept is this is what the critter itself feels that it 'is' gender-wise, amongst the available choices (and correlates to 'external visible characteristics' and 'internal network perceptions').

In the case of trans, I think I mean 'post surgery' (so to speak) and not 'unrequited' as it were. My model doesn't include those additional stresses.

For purposes of animal husbrandy (mating, I mean) my model has an affinity matrix that tries to capture 'average lust for' each color by every color.

So, for the row 'M' (cis-male, my own pronoun, as it were), I have 8 values for how interested the average member of that set (cis-male) is in each of the letters. For 'M', the most interesting is 'F', but, for example, since that decision is made by the M before they know your pronoun, they are mainly triggered by your observable characteristics. For example, L shares physical characteristics with F, so both are desirable to M upon first contact. (on average). I then translate that into a row of numbers that look something like:

0, .75, .25, 0, 0, 0, 0

So the average M is at least 75% interested in F and wiling to be 25% interested in L (which factors in the ultimate rejection of his advances). Building this table (which can be overridden by starmap, he adds) was a little challenging and exposes my own relative ignorance.

Plus this is easily better modeled with multiple tables exploring all the combinations of properties, but I mainly wanted story value and fun bio-physics.

And the affinity matrix is for averages. When it comes to an individual critter courtship, the critters involved have their own personal variation from average (in theory, the dating app aspect of it is still vaporware).

So, in the game, I think I want to also support 'pair bonding' where if a pair of critters really like each other, they will basically get married and hang with each other all the time thereafter. Which would be reflected in my approach/avoid algorithm.

And the process by which a pair bond came into existence would offer automatic story generation for unrequited love, soul mates, etc. But A finds B attractive and shows an interest, and B reacts with their opinion of A, and their 'needle' moves to one side or the other. When both sides have their needls swung towards each other more than towards any other critter they have met, then they bond.

Something like that. Plus story lines for failed bonds. And logically that should lead to babies and genetic modification. (and stick figure animation possibilities :-), but I am still leaning towards cold scientific cloning using bio-synthetic gene manipulation through some technology.

But maybe the mechanical hive cloning is secretly something more biological than we've been told!

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

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

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
Well, mainly been fixing bugs for awhile now, though a few new features inevitably leak in.

I redid the UI for 'ufo mode' (that's when you enter a planet's orbit and are high above its surface just sort of floating (thanks to your gravity dampers) until you choose to descend.

Now, it's a stip closer to just 'drag where yo want to go', and a ufo can accelerate very fast (so you can get from one side of the map to another in just a couple seconds). But it no longer coasts at high speed. Once you lift your finger from the NAV control, it slows down to a top. Pulling down on NAV now puts you into reverse (at a more or less fixed speed).

In fact, it is now identical to walking around on the ground, only the max speeds are higher in ufo mode.

This is feeling pretty good to me, though I still find myself craving an auto-walk. But I tell myself that is what vehicles are for, and any vehicle with a throttle can maintain its velocity without any ongoing touch from the player.

I reworked the 'gravity weapon path predictor' code that draws a sort of dashed yellow line showing the expectd path of a 'bomb' (anything that just falls with gravity) down to the ground.

It was very flat before and I couldn't really see it while inside the vehicle (loking at knife edge), so I added some kinks making it sort of fold back and forth, to give it some volume.

I also added some small folds to the cessna wings for the same reason. Looks kind of cool.

I fixed the curved horizon bugs and normalized the render between full resolution and redced reosolution views.

fixed an old bug that could render aero components 'one frame behind the avatar'

you can now set the flaps of a vehicle with tweak 429. That's not exactle NEW, but now it works (and the value is the final degrees of flap desired -- not the 0 1 2 3 on the flaps control)

selected targets now appear on the flight compass and minimap. Lots of improvements to the minimap/multi function display, and many new panels

You can now drag the mini map so as to not be centered on your critter. It snaps back if you zoom out all the way.

Autopilot can now officially 'chase' another critter (presumably also in the air, but really anywhere). Still need some work on maintaining altitude rduring a turn, and should add some rudder to it as well.

ah, but I broke the distribution of position packets between players. I think when I changed the walk UI to stop when I lift my finger. I think it now no longer sends updates while you are in a vehicle, but snaps to when you get out. I'm sure it's something stupid, but I haven't had the energy to hunt it down yet.

I had some ideas for a quest system, which is currently called JOBS (controlled by the JOB mfd)

The idea is that the map designer creates a handful of JOB templates (collection or crafting of specific inventory items, air/land/sea battles, etc.), and for each template provides a handful of text substituions for variety.

Then, when a new JOB is needed, it starts with a template and then plays madlib on the descipriont, requirements, and rewards, to make it a novel looking quest with little addtional data needed from the designer.

Then when an NPC hands you a job offer, it spins up a randomized job description and offers it to you. If you accept the offer, it is added to your current job list, which can track your progress on all jobs listed. Completed jobs are eventually removed from the list.

You can quit a job to remove it from the list without finishing it first. I think you will retain any progress you made, so if you accept the job later it uses your current inventory for required collections. But some things will have to count 'only new instances since you accepted the job' when playing competitively with humans

each job can provide an inventory reward, but also gives a redefined number of 'points' and you develop a 'score' from the sum of these points, and competitive JOB mode gives the players N minites to reach some number of points, with the winner being the one who gets the points first.

Which means someone (moderator) needs to 'start' the battle (and reset job points), so there is some handwaving there, but again, this is a mobile game and not really suited to multi hour game sessions (battery won't last that long). So some balance between 'start with nothing and 'start with what you had when youi left off.

The constant balance between 'I want it to remember 'my world' and all thechanges I have made to it over the years' versus, 'I want us all to start out equal, or only with the stuff the moderator specifies'

But I think I need some good 15 minutes experiences.

Posts: 11017 | 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 have been running into memory issues (in game, I mean) where the memory footprint rapidly swells to 200 MB or so, after which the game can crash if it suddenly needs to allocate a large object.

I 'planned' for this by leaving huge wasteful array declarations in place, so I would have something to remove to recover space.

Anyway, so I have now removed a bunch of that waste, so I am good for another few releases :-)

I believe I mentioned that I have been closing the loop on inventory items becoming 'equipped' tools and weapons (i.e. show up on the action buttons along the bottom of the screen). So now, via Numbered Tweaks, the starmap script can

* create a new 'weapon' ('a bomb') with a bunch of properties (things the game engine knows how to do)

* create a new 'power up' that packages some number of that weapon ('a box of bombs'), These can be dropped in grid space (powerup pyramids), and when you 'pick one up', its contents are added to your action buttons.

* create a new 'inventory item' that appears in a stack on your inventory screen (and can be crafted to make more)

* bind the inventory item to the powerup. And any inventory item that is a powerup, is considered 'equipment', and on the item's page (when selected in inventory), is an EQUIP button

* when you press the EQUIP button, it sends a message to the script ("onEQUIP") which could in theory do anything your script wanted, but the "Utopia" starmap just 'attaches the contents of the powerup to your critter' (i.e. the same thing that happens when you pick up a powerup in grid space. It is consumed from inventory, and your 'bomb' action button is incremented to show the new number of equipped bombs.

And then you can finally select 'bomb' from the action buttons, and then press the trigger to fire one 'bomb'

Which I couldn't do before (could only add grid space equipment and not critter space), so now I don't have to open the inventory panel to 'use' equipment.

So hopefully I will have atmosphere tuning bombs soon (so as to optimize the planet for a particular critter's needs)

----

But as I take each baby step in the above, I distract myself by adding new features I may not have needed. And this time it was 'tiny cities', or...

CONIC CITIES

This is along the lines of random building generation that I have explored before, repeatedly, and once again I start from scratch and reinvent my various wheels.

The basic idea this time is that a starmap should end up having cities of buildings that can be blown up basically. Overall, I am thinking of the city as being a sort of plant that starts humble and grows into something fantastic only after a bunch of work, and some time.

I want cities to have a planet-wide look and feel, and also a per-city individual flavor. I need them to be low-poly and to aggressively use level-of-detail to reduce their triangle counts, and yet still be visible from great distances for fun flying objectives.

Buildings are generally larger than plants, so this gives me renderable objects 'at distance'

And a city might have multiple buildings (that being the point) and each building has its own 'level' so to speak, and that can move up and down in response to growth and destruction.

Weapons need a rock/paper/scissors sort of specialization so that only type X are good against buildings. And the buildings themselves should be able to defend themselves.

I am seeing a sort of tank battle 'artillery' game against buildings. I don't know what made me think of that.

Here's what I have so far:

* when a new fractal world is built (by the starmap setting a random seed that defines the whole world), It makes the terrain, and then covers it with up to a million 'flora' objects.

* then it picks N of those flora objects, and promotes them to being 'Hives' (things that make critters)

* then it picks N2 of those hives and gives them cities (with a Hive in the center of each city)

* then it randomly creates each city individually, starting with the XYZ of the city center, and the radius of the city (all buildings must fit within the radius)

* then it determines how many buildings the most evolved form of this city will support, and randomly generates for each: XYZ position, building radius (they cannot overlap), number of sides to the building, number of floors in the building, the slope of the building's walls, the allowed materials for building walls, floors, and roofs. This data is all saved in a simple array of floats, so this computation is done only once

* when a city needs to be rendered, the engine first tests the distance from the camera to the city, adds the current camera zoom, and determines if the building is too small to bother rendering in full detail. It can cull the building completely from the render, or it can simplify the building by reducing the number of floors or walls (reducing triangle count)

* but the full detail rendering works like this:

Each building has a center point and radius. The corners of the building foundation are points along a circle of that radius. If the number of degrees between foundation points is 90, then there will be 4 foundation points on the circle, and they will form a 4 walled square. If 60 degrees, you get six walls (hexagon). So each building has a 'degrees per wall' value, and a 'heading degrees' value (so you can rotate the building itself)

code:
for each bldg
angle = bldgHeading // starting wall corner
for each foundation corner
make a line from previous corner to new one
for each floor of building
find the points directly above those
move those points a little for 'slope'
form 4 points into a 'quad' (one wall of one floor of building)
slice that diagonally to make 2 triangles
render triangles with appropriate material
next floor
optionally add one more 'bent' tri for roof
next corner
next bldg

So it renders one full side of the building, all floors, bottom to top, and it's portion of the roof (a triangular slice per side), and then moves on to the next side, until it has done all sides of that building.

But if level of detail is low, then I just lie and tell it there is only one floor, but it is 10 stories tall (for example) so only a single pair of triangles is needed for the entire side of the building.

And if the building is far away, and normally has 8 sides (for example), I can dial that down to 4, or 3, or maybe 2 even, without really compromising the appearance (this is all super low poly to begin with)

And that all pretty much works. I paid $5 and for "110 material textures" (intended for use in minecraft, I believe, adjusted to 32x32 pixels for my needs.). I added a page 7 to the 'icon browser' (long press any inventory icon on the Inventory Panel to open the icon browser, which shows the code numbers for each image (store bought art! support your local artist).

You need these id numbers when adding new inventory items, powerups, etc. Though these material textures are only used for my '3d models' in world, For example, vehicles based on the game's "aero" technology can use these materials on their wings and such.

And I guess I should add some screen shots. Though this isn't about LOOKING great, right? Ultimately I just need these structures to serve game purposes, like needing to be built and destroyed.

The properties which define the buildings will probably be one of my first bits of 'instance data', once I support 'dropping a new city center', or 'adding a new bldg to an existing city' (with properties set by human instead of random)

But for now, the map comes with 10 cities which the script will eventually tell you to visit or attack or something.

The story idea is that as a Hive evolves better critters, the critters themselves start to build cities (huts then farms then towns then cities then futurplexes -- a little synCity action)

And I'm thinking maybe it's around that time that the Hive shows self-aware behaviour (and can talk to you, and has picked a name for itself).

So I will need a random city name generator!

[ 04-15-2023, 02:30 PM: Message edited by: samsyn ]

Posts: 11017 | 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 
Also, I divided the buildings into floorsso as to provide potential material variety, but also with the naive thought that maybe someday a 'building' could home a 'dungeon'

Basically, each floor is a 'maze of walls' when you are inside the building, with some means of travel between floors.

And some sort of pre-placed monsters and treasures you can run into. I.e. the original 'rogue' game from which all else descends.

However, right now, that is just opening another can of worms, and my worm fridge is full and I need to leave some cans on the shelf for now.

But that's why I have floors.

Also, right now, the buildings can be 'owned' by a player/team (generally whoever owns the Hive that built the city.), and I indicate that by tinting the building roof color to the player/team color (otherwise it is a grayscale material) Vertex colors for the win!

Roofs can be flat, pointy, or sunken, by the way. I hope I at least support roof collisions so you can land on them.

I should probably block you from entering them until they really have something inside, as things look at the worst up close and inside out.

[ 04-15-2023, 03:31 PM: Message edited by: samsyn ]

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

Posts: 11017 | 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 
Cities get placed randomly, and some are under water, completely or partially. Let's call this one "Aqua City"

 -

Each city has a Hive in its center. The Hive made the critters that built the city

 -

This city is half under water, which looks sort of interesting, story-wise.

 -

Here is what its central Hive looks like, before we won its love.

 -

And here the Hive has been attuned to us, the RED team player. Changes the Hive appearance(to the team 'Face')

 -

And to advertise long distance, all the roofs are now tinted red as well.

 -

[ 04-15-2023, 08:51 PM: Message edited by: samsyn ]

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

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

Member Rated:
4
Icon 1 posted      Profile for samsyn   Author's Homepage   Email samsyn   Send New Private Message       Edit/Delete Post 
So, I spiffed up tiny towns a bit, and implemented the concept of 'interior'

WHen your critter enters the building (not when the camera does), that building is then rendered with inverted 'back-acing', so the nearby walls disappear and you see interior walls instead.

If there is a scripted critter there, you could have an NPC experience with the building interior as a nice backdrop. A shop, for example.

Kind of like a WoS scene background, but 3D, but super low resolution.

Anyway, while inside the building (and your critter is in no more than one such building), there are intended to be multiple floors, and I need the concept of 'ground elevation' to follow the bottom of the rectangular prism of space you are within.

For the local player critter, it checks every update (N frames per second) if it is still in the same building, and which level it is 'on' and then works out the world z coordinate of that floor height.

Then I save that in the critter's personal data as a "personal ground height" and when that critter asks "how high is the ground below me" it gets told that, rather than working it out from the fractal terrain data. And since it is pre-computed, it is even faster to check.

So fast that maybe I can afford to have all critters do this, and not just player critters.

Plus this 'I know where I am, so don't bother with your gravity stuff' could be useful. For, say, setting a frame of reference, so while on the deck of a large ship you can walk around, but it is relative to the ship, which can sail along with you.

ANYWAY, so each floor of each building will have a collision plane that you can stand on (but not a ceiling plane, so you can hop up to the next floor)

For wall collisions, I want to play homage to Rogue/DOOM and let the starmap supply 'dungeon maps' which are small (16x16) grids of ASCII art showing where the walls are, and where powerups are, and where monsters and NPCs are. I will provide a few mechanics bound to these symbols.

So each floor of the building can be a small maze, with links (teleports) to other floors, leading you past monsters and treasures to an ultmiate boss battle and big Prize.

Letters in the grid refer to monsters, which spawn the moment the player's critter 'could' see them. (closing your eyes doesn't help)

I am going to do this in two steps... The dungeon map is exactly 256 characters (16 rows of 16 columns). A lot of sqares are ROCK (#) and AIR(.) defining where you can walk. Then some of the AIR square are also powerup squares, where there is some goodie lying on the floor. And some squares are monster squares, with a letter A-Z, a-z (52 choices)(oh god, same as deck of cards... will THAT be the mini-est game?)

Anyway, the Monster Squares Aa-Zz will be linked to actual monster numbers, in a different table. So the starmap defines a single large table of monsters and NPCs. Everything needed on that starmap. Those monster can then appear as The critters walking around hives, or as placed and trigged monsters on a dungeon map on floor 3 of saome building in Daisy Dew Corners, of the Grand Plateau geographical region, on planet Utopia. In this starmap's system.

Anyway, that list might have a limit more like 1,024 since the amount of data is very small. Mostly a cool name, and a level, but also enough RPG numbers to make it interesting. But mostly a cool name.

Then for the dungeon map, I think a key like:

A=23,14,88
B=12,
...

So when the dungeon map needs to spawn a monster "A", it actually picks randomly between 3 options (monster numbers from the big list of monsters)

Or maybe it can also spawn a small group of monsters from a single Letter. like

A=[12,3,3],14,32

Where you would have a 33% chance of getting just monster 32, just monster 14, or just a group containing monster 12, and two monster 3s.

So the lettera As-Zz might be considered to be 'monster groups' and not 'monsters' and then on the dungeon maps, you only place monster GROUPs (and where needed, a group contains only a single monster).

Probably more flexible than I need, but add to that using * for 'pick a monster number at random for me, maybe limited to a range of levels around the player's level.

And that's probably the default monster group.

And that's pretty much the mini game I intend to complete. Yo uwalk around, things spawn, you ppick some up. Monsters spawn, you gfight them.

If you lose, then... I guess you are kicked out of the dungeon and don't get the big Prize. And maybe your inventory (action buttons) change back to how they were before you went in. Or maybe you just have to deal with it.

I think the spawned monsters (which are critters) just 'know' (remember in their personal state) that they belong to this dungeon level. Maybe enough to not wander outside of it. Though they may not obey walls, other than they should not spawn until you are close enough to be able to see them.

Once spawned, they wander around with varying levels of aggros until one of you wins.

When a critter loses this sort of fight, it needs to check in with whoever cares. And I guess that's more of a roster (players and critters added to the roster when they join the fight, and marked as inactive when they lose. And each time someone is marked inactive, maybe that very person's copy of the game announces game over to everyone else. (certainly it announces the loss, so everyone should know who, if anyone, has not yet lost)

The 256 character dungeon level starts with letters for where the monsters are. I make a copy of this data to control what's happening. The moment I spawn a monster (or a player picks up a powerup), I remove that monster or powerup from the copy of the data. And then I save that new, reduced, data in a cache (for each dungeon level)

Then I can lazily remember them as long as is covenient, and if reenter later, it resets the dungeon from the cached copy, which no longer has a spawn letter for anything you already dealth with, so those monsters do not respawn. Kind of like persistent.

but not really since the next time you start the game they won't be there. But you could, in a single gaming session, go back and forth between several dungeons and have a pretty continuous experience.

And hey, once I implement instance data, this seems lieka pretty prime candidate. You leave your device running with this starmap showing a sort of terrarium ("Terrorium!") of your critters walking around, doing their critter stuff (ant farm screen saver), but then you enter one my my uildings and start painting Rogue patterns on the floor, causing a new dungeon design to spring into life around you, then press 'play' and give it a try. Press pause and change it up. Press reset and clear the cached versions and go back to scripted default.

That sort of thing, but it will take several steps to get there, plus ancillary MFD HUDs

----

ELEMENT CIRCLES

I don't have character classes per se, but I would like characters to have certain affinities, and for that, I propose Element Circles, for example:

Earth -> Air -> Fire -> Water -> (back to Earth)

or

Rock -> Paper -> Scissors-> back to rock

So you can see how it works in 3 and 4 node modes, but I claim it will work in arbitrary lists and it boils down to an NxN matrix (for N elements) where each value is a hitpoint multiplier that applies when, say EARTH hits WATER

that cell of the array is 0.5, since earh is weak against water (water is strong against earth, since water erodes earth)

But the cell representing WATER hitting EARTH has a value of '2' so it hits with double the force it would in the absence of elemental concetns

Right now, for circles > 3, I am just using a factor of '1' for any relationships with are not direct neighbors, so in thie 6 node

A > B > C > D > E > F > back to A

A hitting B gets 2x
B hitting A gets 1/2x
A hitting C, D, E, or F, gets 1x

If you draw the circle, you can imagine working out '2 hop neighbors, and 3 hop negoghbors and having special factors for them. Maybe even some oddities like the way a ROOk moves in chess. (this element has an unusually large effect on elements 3 hops away)

And the 2 vs 1/2 is sort of starter thinking, but is controlled ultimately by this array, which you set up by tweaks. You then also provide the N element names.

So a full RPG battle uses the RPG stats of the players, their equipment and buffs, to determine a number of hitpoints that would be delivered by the blow. If the blow doesn't miss, then those hitpoints are multiplied by the 'x factor' from the element relartionship. So 2x means simplly double the points of what your equipment would have caused 'normally'

I think that should simplify the math, plus if I had something like a Pokedex with a list of all the monsters in the starmap (another MFD HUD), I could show your 'X Factor with this monster.

It could be cool!

Also maybe a dating game :-)

---

Oh, and I was thinking of rejiggering my RPG sttuff. Trying to have as few numbers as possible

There is YOU
* your level (earned with XP)
* your max HP (controls HP inflicted as a scalar)
* Your Wisdom Points (powers Spells)
* Your Strength Points (powers Weapons)
* Your Stamina Points (shields against Weapons)
* Your Element (determines your X Factor)

There is what you are Wearing
Have their own level and element and enchantment?

* WEAPON "Cutlass of Barbarians"
* SHIELD "Butter"
* RING "Band of Wisdom"

These map to Dungeon drops

There are your Buffs

* You are enraged! (STR +10)
* You are saddened (WIS -5%)
* You are levitated

There is your X Factor

As described above.

In a dungeon, when you pick up 'a Shield' you mgit get some random name "Shield of Argyle" and it might just be the same thing you had before, but with a new name, and with its level incremented by 1 or 2 (i.e. it always bumps up your current sheild level, but might give the illusion of switching to a different thing.

Mayve what actually spawns is an NPC and when you touch them they say "I have upgraded your shield, it is now level 4!"

whatever is peppy and fun and has you reading humourous names and not worrying too much about accidentally downgrading your equipment.

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

Posts: 11017 | 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 finally got it to accept my ASCII art as a dungeon design. Took me 9 builds to understand why the design was always an empty string by the time it arrived in the engine.

It turns out the # character is forbidden in that channel (I pass through a url, and # is a special symbol there, so I would have to escape it, and I am too lazy to do that, so I switched it to "+" (for solid wall) and that finally started working. Except in urls, + is a replacement for SPACE characters, so the wall locations seem the least wally.

I mean, I will change the characters a few more times probably.

But I now have a pretty good 16x16 test dungeon level to fiddle with and flesh out.

I was thinking of doing the horizontal wall collisions next. In this case, since we are inside of a building, each 4mx4xm cell has its own street address, and I already have my character check its new street address each time it moves.

So if I move into the street address of a solid block (very light math), I just snap back, or bounce off. For almopst zero additional computation from what I already had to do.

For performace, I am going to have to kill most other rendering once I enter a dungeon level.

But after a few optimizations to try to deal with THAT, I found I could get 20fps in my cessna on my slower tablet (not my slowest tablet).

(and that's great. I would love to end up with 20 fps)

---
After wall collisions, I have to render walls (currently I render just floor tiles of different textures.)

For this I am going to use 2D low-resolution ray-tracing to find all cells which have an occluded line from me to them.

I think will just be:
1) clear 16x16 'hit' array (everything is visible
2) project a ray from camera (or player) (and do this something like 64 times in small changes in arc
3.) for each ray, start at character and step a little further away upon that line.
4) detect when it crosses into the next cell. Each cell it steps through which does NOT have a BLOCK in it, gets marked as 'invisible' and renders ultimately as floor tile only.
5.) after stepping all the rays, use the complete visibility array to render the sides of visible blocks
6.) the render system will still sort them, so our only goal is to pre-cull any that would be invisible.
7.) this process should also give us which cells have visible floor tiles as well, since many of those will be blocked by walls as well.

At that point, I will have to tune the 'bounce' (and add sound effects and particles)

And those particles can be told the floor height and not have to do any elevation sensing on their own.

the bounce should carry you in the intended direction and just re-center you in the hallway.

Since the dungeon buildings (and hence the dungeon levels( are all North-aligned, the actual collision angles are easy to compute when needed for bouncing.

It took me forever to debug the # problem. And I am shocked it hadn't already come up.

The debug build frame rate is frustratingly low (I guess I could use a faster tablet)

If I don't allow the camera to go above the wall height, I don't have to worry about the 'top' of each BLOCK.

And I only have to recompute the 16x16 block visibility array when you move.

And it just hit me that all these cells are squares and they all have the exact same 4 horizontal normals (NSEW)

So I can just do it the 'right way' and dot product normals with a unit vector pointing from block center to the camera.

Once i identify a block as being 'visible' then I just ceck the four normals against my biwe and if the cosine is positive, it's visible.So at most I will render 2 sides, and the floor of about 10 cells, the rest being invisible and not rendered at all.

about 60-100 triangles. That would be fine. Right now I am rendering 512 (plus the rest of the outside world)

Someday I want to still have a hundred triangles left in my budget for rendering character skin. Something charmingly primitive.

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

Posts: 11017 | 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 
O, the spec

Th actual characters are not set in stone, but a dungeon level configuration string (such as you might write in notepad, in your starmap) looks like this: (this is all one string, no linfeeds until after the map

code:
myDungeonLevel = 
"++++++++++++++++"..
"+..............+"..
"+.......A......+"..
"+..............+"..
<snip, 16 rows total>
"+..............+"..
"+..............+"..
"+..............+"..
"++++++++++++++++"..
--Map Key
A = Giant Gila Monster, level +2, Element2, attack1
z = Zombie In Training, level -3m Element3
-- Attacks
Attack1="Swings their blade and strikes (name)",
Attack2="Casts Insomnia on (name)",buff=3

The idea is that a single small bit of test declares the level layout, and declares all the monsters, items, and attacks available in the dungeon (each dungeon can have its own monster list!)

Though I should probably packet all levels in a single file, and let them share a map key.

And now that it looks like an indoor activity, it makes more sense for the actual dungeon levels to drill downwards.

Maybe above ground, we just call it an open floor office plan.

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

Posts: 11017 | 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 
Implemented an Emitter system, so that I can have lava on volcano peaks, but it also supports things like bombs that hit the ground and then turn into particle emitters.

I have three such bombs defined in the Utopia starmap:

WATER (basically makes it rain, hydrates the soil, good for plants and critters)

LAVA (dehydrate the soil, sets forest fires, makes carbon)

SPICE sends spice crystals flowing in all directions. Any Hives or critters that get touched are inclined to like me more.

Basically, what I needed to have a WarPath-like activity.

[ 06-25-2023, 12:26 PM: Message edited by: samsyn ]

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

Posts: 11017 | 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 re-jiggered my terrain tesselator again. I have to be careful about that, as I was comfortable with the simplistic, but 'clean edge' look.

I added a check (for each terrain square rendered) to see if the four corners had a mix of above water and below water corners. If so, then I know that cell is transitional (i.e. is on the coastline), so I nudge it up one step in resolution.

The result is a pretty satisfying (but slight) increase in 'coastline fidelity viewed from a distance'

But the downside is increated risk of terrain 'tears' (where the high resolution square has elevation data along the edge that the adjacent low res square does not, so they can disagree on that and end up leaving a slim triangle of terrain which is not painted at all, letting you see the background c olor (sea blue or sky blue most of the time)

Anyway, and that makes the sharper-looking coastlines also look chunky and 'messy'

And since the whole design tends to messiness with the least provocation, I feel I need to worry about it.

The reason I touched it in the first place is that I still had a bug where increasing ZOOM level would start rendering a zillion high res cells somewhere offscreen, so I changed my algorithm to one that is more fundamentally correct.

Given a terrain cell (square) I need to render, I want to know "is it at least partially on screen" and "should I break it down into four subsquares, or draw it like it is"

To answer the first, I make a couple unit vectors (camera direction, and fromCameraToCell) and their dot product gives me the cosine of the angle between them. So items right in front of the camera view (center of view) have a cosine of '1' and as that cosine gets smaller (or negative), then that cell is increasingly further from the center of vision.

And I can basically ignore any cell which is more than 45 degrees from the center of vision. Though I have to be careful. If the cell is large (and close), the center might be offscreen, but the edge of the cell might be on screen. In that case I want to subdivide to find the parts that can be rendered.

But other than that, the decision to subdivide is entirely based on 'cell size on screen'. I don't want an individual terrain cell to use more than about 1/16th of the width of the screen. So if it is bigger than that, I subdivide it until it isn't.

And that's much simpler than what I had before, which tracked special locations (near the camera, near the camera target, in between) and a byzantine decision tree that decided how much to subdivide so the stuff 'you wanted to see' looked its best.

I think it looks better now, though I haven't experienced it much yet.

ANYWAY, changing to the 'actual size test' (which is more expensive, with a couple square roots involved) improved frame rate overall, since most of the time is spent 'filling triangles' and this results iin fewer large triangles to be filled.

If I hadn't increased the number of triangles because of the coastline trick, it would have been a significant boost, but as it is, it is maybe only 10% faster overall.

We'll see if I adequately love coastlines

-----

I also rewrote the 'PTS' (points) 'hud' (MFD - multifunctional display). My simplified point system now has about 25 counters. Each time you do something, like 'convince a Hive to follow your Path', one of the counters ticks up.

I know all info about you, the local player, and most of the counters are only about you. And those counters are not necessarily distributed between the players, so while I might know the total number of bombs I dropped, I won't know that same value for you.

But YOU know it (if you exist), so you end up being the source of truth for a lot of that, and your copy of the game broadcasts/updates a small set of values which then *are* known to every player.

totalPoints
totalHives
totalCritters
totalSpice

totalHives and totalCritters come from your local copies of those objects, and your copies are likely not synchronized, so the owner of the object is the source of truth. And if I see 30 hives, then I broadcast 30 to all, and everyone writes that down, and just accepts that I have 30 hives. I don't (with this) tell you WHICH hives are mine.

But instance data for the game instance is responsible for distributing that as needed.

Likewise, the computation of points is basically just the sum of the counters, multiplied by a 'points per count' value (set by tweak, so map can zero out the things it thinks should not give points, and change the weights to achieve fun)

I calculate my points, given all the high precision counter data I have about myself. And you do you, and we trade notes and we agree with each other, even though you could totally just hack it and no server would step in and correct you. So that will have to eventually be addressed.

And the moderator will have the opportunity to pick a rule set, available before you join 'the activity'

The rule set includes the game over and who won, criteria, which is likely:

GAME OVER
- only one player has any Hives left
- max instance play time exceeded (5min, 15min, 30min)
- never (resume from instance data)

WINNER IS
- the player with most Points/Hives/Critters/Spice at game-over time

----
And then I think I will put up the PTS hud to sort of a full screen window for a few seconds at GAME OVER, and the very top of the (scrollable) counters list is a recap of the game.. something like

code:
            G A M E      O V E R

The Battle of Kelvin Reach in 15 minutes

Samsyn, of the Red Path, wins!
~~~~~~~~~~~~~~~~
PLAYER #Hives, #Critters, #Spice #Points
Samsyn 87 12,345 32M 116.23K

(one line per player, in color of player path
(before game over, this same panel is PTS hud
and notes game in progress and current leader)
(somewhere I hope I will have access to charts
of the previous 10 minutes or so of these
value changes

Followed by the actual counters, each with a label
followed by as many as 8 values (one per Path/Player)

Num Bombs Dropped on Paths:
43(red), 15(blue)....

Just the numbers, btut in the color of the path in question (in this case, which Paths have I bombed the most?) The point calculator might give me 10 points for each enemy path bombed, and -100 points for every friendly path bombed.

Hmm, maybe I should include a point estimate per counter, or at least show the current non-zero pointPerCount value, so you know if that counter is important in this rule set.

[ 07-03-2023, 06:05 PM: Message edited by: samsyn ]

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

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

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

I think quite a bit has changed since my last babble here (I have been babbling on discord more frequently).

Fractal worlds now come with a Volcano or two, if you want them. Basically it automatically finds a 'peak', adds a 'hole', and then starts two emitters (smoke and lava) which cause ballistic lava blobs, that land and slowly ooze downhill, cooling and slowing.

Lava particles (all particles) now have a temperature. (Water particles use this to know when they are frozen). As lava touches the ground, it heats it up. The HOT hud (mfd) shows hot terrain.

If the terrain gets hot enough, it can set fire to flora which is upon it (hence lava indirectly leads to fires). Burning fires further heat the terrain, which sheds heat to nearby terrain squares.

buildings can also catch fire, though they are more likely to ignite via direct bomb attack. (Lava bombs travel ballistically to contact, and then leave an emitter that generates lava blobs 'for awhile')

There are also water bombs. Ballistic to a point, then start an emitter launching lots of water particles. Water particles cool terrain and put out fires.

While buildings are on fire, they periodically 'lose a floor'. Losing the ground floor is the end of the building. Up until then, there is a chance to save it with a water bomb. Though once the fire is out, it might no longer be as tall as it was before.

But a healthy building will grow, like a plant, as long as the city's Hive is doing well. You can help it grow faster with a Spice bomb. Spice particles restore HP to bio-synthetics, as well as curry favor with the Hives.

[ 01-22-2024, 11:25 PM: Message edited by: samsyn ]

Posts: 11017 | 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 
MEET THE NEW PATH, SAME AS THE OLD PATH

I'm not sure if I have covered this here or not. Apologies for redundancy. The game has always supported eight players, with each player choosing one of the eight colored 'thumbs' (first come first serve)

But now I have decided that the colors actually represent philosophical "Paths" (stolen completely from my WarPath games). So you are picking one of the 8 Paths to follow. (and currently a limit of one human player per Path)

Whether or not there are any differences between Paths, is up to the starmap. The new map that comes with release 10 is "Gods of Utopia" (I made the name slightly more pretentious, but I have a plan!)

On Utopia, there are 'Hives' left over by 'the Old Ones' (an unencountered alien race not that different from the one in Forbidden Planet, that left behind machines that could make anything you'd like, given raw materials, and the Plans.)

But the Old Ones left the planet millions of years ago, and the only evidence of their existence is the technology we have stumbled across. Hives and Gravity Dampers, most importantly.

Anyway, the eight Paths apparently meant something to the Old Ones, and the Hives take it pretty seriously, so it's best to respect the system.

Right now, all the Hives are starting out completely neutral, and bind with the Path selected by the first player to be nice to them. (Mainly by giving them, or their critter children, Spice)

And yes, I can't help but call it Spice. It's just the perfect word, and.. and..

ANYWAY, The game now supports "WarPath Activities" (in the middle of your drop-in RPG session, you can get together with a sub group of players and do a timed group activity, that ends after a few minutes and the high score wins. I could probably call it a raid, or a dungeon. But I think I am saving 'dungeon' for the 'ascii rogue' stuff, which I sitll haven't finished)

ANYWAY, at the start of an activity, I can initialize the Hives any way I like. Maybe appoprtion them between the players (same number of hives each). Or just give each player a Home Hive.

Each Hive has its own set of 8 numbers, which basically is the number of spice particles they have received from each of the eight paths.

Whichever Path gives the most spice, will be the Path that Hive follows (until a different Path gives even more spice)

Hive love points are also affected (negatively) by warfare. Against the hive, or one of its children.

So, I can start each Hive with a different random set of Love points, and thus set up hatreds and alliances between the Paths themselves.

If desired.

Also, I think I am adding 'peer pressure'. A critter also has its very own set of 8 numbers, which it inherits from its Hive at the time of birth.

But it's Hive might change over time (as might the critter), and peer pressure is used to slowly bring them back into alignment (after warfare mostly).

I want Hives to feel peer pressure from nearby other Hives.

Then I want to periodically calculate the official 'inter-Path affinity matrix' (8x8 floats). For example, I poll all Hives following the Red Path, and work out how they feel about the other Paths 'on average' and then remember that as the official 'how red feels about the others'

And do the same for all eight paths.

And that then is the source of the hive peer pressure. So if time is allowed to pass with no spice being thrown around, the system should find a stable equilibrium, well, maybe not stable :-)

But I would be happy if at the start of the activity, many hives were actively at war with each other, and the final Path distribution isn't known until that is sorted out, with or without help of human players. It's 'backdrop drama'

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

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

Quick Reply
Message:

HTML is not enabled.
UBB Code™ is enabled.

Instant Graemlins
   


Post New Topic  Post A Reply Close Topic   Unfeature Topic   Move Topic   Delete Topic next oldest topic   next newest topic
 - Printer-friendly view of this topic
Hop To:


Contact Us | Synthetic Reality

Copyright 2003 (c) Synthetic Reality Co.

Powered by UBB.classic™ 6.7.3