Ossa Sepia

June 30, 2019

Notes on Graphics for Eulora

Filed under: Coding,Eulora — Diana Coman @ 9:31 pm

Eulora’s client uses the CrystalSpace (CS) engine for all its graphics needs and CS in turn uses the Cal3D library for animated objects in the world 1. Some two years ago 2 I wrote this stop-gap glue-and-string script to supposedly help artists and all those eager to contribute but held back by a lack of direct way to experiment and see their “art” coming alive in CS. Well, I wrote it and until the beginning of this month, those scripts plus some basic notions from introductory computer graphics courses taken way back during my uni years were about as much as I could say I actually knew regarding computer graphics.

As it seems quite conceivable by now that I’ll end up having to get all the way to the bottom of the graphics pit too, I spent most of this month reading the graphics reference book 3 and in parallel trying to make sense in a very practical way of the whole way in which Eulora’s client handles all the graphics part from the Planeshift (PS) top layer down to CS and CAL3D. And while I don’t yet have a fully working new pipeline for actually loading on the fly all and any sorts of graphics into Eulora’s client, I have at least a hard-won better understanding of what goes on in there (despite the layers upon layers of obfuscation) as well as some bits and pieces that might conceivably even make it into such a pipeline in the end. So I’ll jot down here my findings so far and those yet-moving ideas about it all, as it helps for sure to structure and unload a bit in preparation for the next stage of work. And it might even help – says ever optimistic me – to start perhaps a discussion with anyone who knows this better than I do so if that’s you, kindly comment below and let me know your thoughts.

One difficulty with CS (and it seems to me with Computer Graphics in general really) is this persistent idea of accomodating all sorts of “alternative” ways of doing things that turn out in fact to be precisely the same thing only packaged differently so that nobody is left behind or something. So instead of having a clear structure of knowledge to acquire, one is supposedly left to be creative and find what “feels natural” or “comfortable” to them. Well, so much for actually learning anything there, welcome to lots of code that does the same thing, only it’s harder to tell that upfront without sinking hours in it, to follow it all from one end to the other. Nevertheless, after all the reading and poking it and changing it and having my way with it, my current basic structure of CS 4 notions of interest for client graphics is this (ordered from top down, as much as I could):

  1. Sectors – those are the highest-level containers of “graphics” of any sort. A sector simply stands for a “location” that is effectively defined by nothing more than a name 5 and two mixed characteristics: on one hand the visibility culler in use (so a computational matter) and on the other hand the ambient light (i.e. the light that affects everything in that sector in the same way at any position and as such a matter of aspect pure and simple).

    CS supports two visibility cullers, namely Frustum and Dynamic (dynavis) with the default for the game’s needs being the dynavis culler. So a first building block for the desired client pipeline is simply a “GetSector” function. Like all the rest of the “GetX” functions that I have in mind, this will retrieve any information it needs about the sector from EuCore / EuCache (via a CPP-to-Ada layer, as needed) and then either retrieves the required sector from the engine itself if it exists already or otherwise proceeds to creating it and loading it into the engine so that at the end of it, one way or another, the sector is known to exist. When information is missing/incomplete/unavailable, the GetSector method fails and lets the caller decide what to do (try again at later time, most likely). At this moment I have a prototype of this method as well as some similar prototypes for GetLight, GetTexture and GetMaterial – in other words, I can create from code without any xml and parametrised four main things: sectors, lights, textures and materials.

  2. Lights – those are sources of light in a sector beyond and in addition to any ambient light. They can be customised in all sorts of ways (e.g. intensity, colour, position, direction). Whether they are elements inside a sector or an environmental characteristic of a sector is unclear to me at this stage since they could easily be seen either way. From an implementation point of view however they are currently clearly elements inside a sector, NOT characteristics. This means among other things that one could in principle add/estinguish/modify lights as they please at any given time and I’d say this is how it should be, given that it’s not inconceivable to be able to turn on a candle or any other light in one’s own house for instance.
  3. Weather – the more general name for this would be environmental factors I suppose, but so far it’s really at most “weather” and in practice mainly… fog. Supposedly one could add here all sorts of *effects* really so from an implementation point of view I’d even call this part “environmental effects” i.e. whatever effects manifest themselves in the sector as a whole and are specific to it. The fog itself so far appears to be a rather simple matter as it’s essentially a limited modifier of ambiental light. I don’t really know if this is just a limitation of CS or a more general approach and for that matter I can’t for the life of me quite grasp yet exactly how do graphics-people decide whether some effect they want is rolled into “fog” or into “ambiental light” or into anything in there. This is an issue at all levels and so far it really looks like an individual preference than a choice, quite everywhere. In other words a matter of “am I more skilled in making it look just so by tinkering with this or by tinkering with that”?
  4. Meshes – those are any and all elements in a sector that have what CS calls “geometry”. This geometry concept is a bit fuzzy at times but as far as I managed to pin it down, it would seem to mean essentially that the object has a shape defined mainly as a set of “vertices” aka points in the 3D space that the object occupies. There are 3 main types of Meshes:

    1. Movement-capable entities
    2. Fixed entities
    3. Terrain

    Each of the above types of meshes has its own specific requirements and even ways of defining itself, including its geometry (hence part of the fuzziness…). At least in the current setup and as a very brief overview, movement-capable entities are effectively CAL3D models defined as hierarchical structures of meshes with attached action representations (e.g. run/move/jump/fight animations) and skeleton-based geometry; fixed entities are CS’s “generic mesh” with vertex and triangle-based geometry; terrain entities are CS’s “terrain2” mesh type with attached terraformer for generating the geometry based on a heightmap. The details of each are much gnarlier than this list might suggest and I’ll be teasing them out one by one as there is no way around that but at any rate, CS’s approach seems to have been to make different xmls for each of them and all sorts of “loaders” on top of loaders and on top of plugins, services, parsers and whatnots. Then PS added its own loader on top of CS’s pile of loaders. As you might imagine, this tends to rather obscure the precise way in which one can create those different meshes *without* xml.

  5. Factories – those are abstract concepts containing effectively the blueprint for creating identical meshes. The idea behind them – as far as I can tell – is that it’s worth loading in memory what is needed for a mesh only once and then reusing it every time a new specific instance of that precise mesh is required. In practice I’m not sure that this is really worth much for anything other than snowflakes or raindrops really, since otherwise pretty much each instance of a mesh seems to have its own factory anyway. There is however the argument that the factory should contain only truly common structure (i.e. all players of one race have the same structure) and then leave the customisations to each instance. So keeping this in mind, here they are in the list, factories for meshes (of all sorts, though indeed, each of the three different mesh types has its own specific factory type on top of a generic type).
  6. Materials – as far as I can tell so far, a “material” is essentially any specific combination of one shader + a whole set of values for the shader’s parameters (aka “shader variables” in CS terms). Note that the texture itself (or themselves as apparenlty one can use several although it’s not clear to me WHY is that any better), if there is one, is effectively an argument passed on to the shader.
  7. Textures – those are the pretty picture that is lovingly painted on some/any surface that an object in the world may show to the player at some time or another. Essentially each object is but a set of surfaces linked together and each of those surfaces may be covered with one or another texture fixed with some spit so that it goes exactly over that bump or starting from that point to end up just-so. In principle, one could provide instead the way to calculate the texture at any point but that seems to be less frequently used in practice (CS claims to support it though, although I can’t tell to what extent and with what results really).
  8. Shaders – this is where the fuziness increases to madness levels. On one hand, “shader” seems to really mean all sorts of things in different places, from yet another description of a surface to any code running on the GPU. There is obviously more reading that I need to do on this aspect but so far what I’ve got is that CS’s “shaders” are really just another layer of encapsulation meant to be for types of surfaces. So if one has types of meshes encapsulated in factories, one also has types of surfaces encapsulated in shaders and is able therefore to apply some “surface type” to any given texture so that the same picture will look “cloth-like” or “stone-like” depending on the nature of the surface on which it is applied. This is about as clear as I can get it now and I can’t say I like it much. On top of this, shaders in CS are yet another pile of layers and layers of xml with intricate dependencies on one another and on who-knows-what-else in the name of reusability 6.
  9. Render Loops – those are (in usual graphics style as far as I can tell) simultaneously in parallel and on top of the “shaders” above. They are yet another encapsulation, this time of types of rendering + lighting objects. To make the difference between shaders and render loop abundantly clear, default render loops are of course provided by CS, as files in the /data/shaders directory. Admitedly I totally lack the expertise to say at this stage just why are BOTH shaders and renderloops needed as separate entities and/or why not either do with only one of them or otherwise merge them together in a single thing at least but hopefully one of my more knowledgeable readers clarifies this for me. Failing such clarification, I’ll need to keep on reading and experimenting with it, of course, for as long as it takes, what else.

In addition to the list above, there would be also the easier part of interface “skin” aka the variious icons and decorations for windows, buttons, labels and whatnots. This part is also on the list to be made fully reliable on data received from EuCache but so far I haven’t touched it yet (other than keeping an eye out for what I could do about it, whenever other bits and pieces make me go close to that part of the code that has anything to do with it, of course).

For a fresh image, the TestChar at least moved out of its cubic box and into a rather faceted sphere, in his quest for the promised infinite landscape. Lights got a bit better, shader variables were sorted so as to neither block nor directly crash CS anymore. Next on the list is fully figuring out just how to properly feed “geometry” to CS as what it is, namely several sets of numbers (vertices, texels, normals, triangles) rather than all those + a ton of xml on top. This is a required step in order to have the GetFactory prototype too for static meshes at least. Once that is done, the next step is to move on to factories for terrain and then for animated meshes. Until then though, here’s Test-in-his-sphere:
test_char_in_spheric_world

  1. For completeness, I should mention that CS has also its own native support for animated objects via 2 different sort of objects even but neither of those is as flexible and overall useful as CAL3D is. Therefore, I simply consider that animated object = CAL3D from now on.[]
  2. Already two years passed! And to think that I’m picking it up precisely from where I left it all this time ago, kind of boggles the mind.[]
  3. Foley, J.D., van Dam, A., Feiner, S.K. and Hughes, J.F., “Computer Graphics: Principles and Practice”, 2nd ed., Addison-Wesley. Yes, I’m aware that there is a newer edition of this book, supposedly improved, better, shinier, more fashionable whatever have-you. I’m also aware that it’s full of what can only be called advertising for Microsoft while being way lighter on what I’m interested in, namely precisely principles of computer graphics. So I’ll stick with this edition, thank you.[]
  4. Note that there is no desire to make all Eulora somehow CS-dependent as such but at this stage, I have to at the very least support CS as it were so I’m aiming for using CS as a practical example of handling client graphics, not as a driver of standards or content.[]
  5. CS uses names aka text/strings as identifiers to the extent that it *requires* those for ~all the Find functions at all levels. It *does* have its own internal IDs and it even exposes them if one tries really, really hard to get to them but they are basically not very useful otherwise and moreover they can’t even be set to match an external set of IDs (i.e. one can’t create an item with a specified ID.) []
  6. “Reusability” seems to mean that the original author can skip writing a few lines of code at the cost of nobody else being able to understand afterwards at all how the thing works unless they spend at least double the time that it would take them to write it from scratch anyway.[]

#eulora Logs for 30 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2019/06/30/notes-on-graphics-for-eulora/ << Ossa Sepia — Notes on Graphics for Eulora [17:25]

June 24, 2019

#eulora Logs for 24 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: and now I found a way to segfault CS, lovely. [15:28]
mp_en_viaje: keks [17:14]

June 20, 2019

#eulora Logs for 20 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: from cs/ps depths where "genmesh" and "meshgen" turn out to be entirely different SORT of things! and the manual mentions only genmesh anyway, why bother; oh boy. For future ref: genmesh is a TYPE of mesh in CS; "meshgen" is a …mesh "generator" so a construct that can create meshes of all types (including, yes, "genmesh" type). [13:29]
diana_coman: how did they even come up with such a thing, sheesh. [13:29]
mircea_popescu: sheeshmesh ? [15:25]
diana_coman: me-sheeshmemesh, yes [16:58]
diana_coman: altfel zis, mismas [16:58]

June 19, 2019

#eulora Logs for 19 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mircea_popescu: so it seems as far as I can see it, yes [02:16]
diana_coman: mircea_popescu: by the looks of it and how it's going I suspect I'll end up afterwards having to do the blender exporter too. [06:06]
mircea_popescu: conceivable. [06:06]
mircea_popescu: i dunno why they're so skittish, but… [06:06]
diana_coman: fear of committing because it's expensive and who knows, whatif [06:07]
diana_coman: or so it looks to me; but yes, no real idea why apparently intelligent people come in, seem to be interested and then just..fade away. [06:07]
diana_coman: not enough action, no "community", no idea [06:08]
mircea_popescu: whatevers. [06:17]
mircea_popescu: gotta "wait for republic to prove itself" while swallowing all empire idiocy whole right out of the gate, the strategy of the socialist winner. [06:18]
diana_coman: I guess so. [06:35]
diana_coman: that old idea of let them do the hard and risky part, we'll just swoop in to eat the cake when it's ready [06:36]
mircea_popescu: too bad that's not how it works / MIRCEA POPESCU IS AN ASSHOLE! [06:58]

June 18, 2019

Euloran Blu’s and Boos

Filed under: Coding,Open Sores — Diana Coman @ 9:24 am

The legacy code base on client side can best be described as a pile of tangled pointerisms and assorted CPP mess under the name of Planeshift (PS) on top of a smaller ball of ifdefism 1 and XMLade called CrystalSpace (CS), on top of a comparatively saner and at any rate smaller ball of CPP called Cal3d, the whole construction bursting with a lot of good intentions and precious little useful structuring or maintenance consideration. While sanity seems to quickly decrease from bottom (cal3d) up (to CS and then various parts of PS), what strikes one even more is that the whole thing if afflicted with a grave case of XML addiction that starts from CS and then simply comes to its ugly fruition in PS. It has been obviously written at the very top of the XML hype – everything and I do mean *everything* and everywhere is best described in XML! It could be argued that the authors simply wanted to have a lot of XML of their own but since they couldn’t do just that 2, they had to also do a graphics engine and a sort of game on the side, almost as a second consideration really. Come to think of it, why not call it then at least XMLSpace and XMLShift?

While CS itself has at least some clear initial design and therefore some structure (if a very clunky one at best of times mainly because the author really had too many good intentions), its main underlying assumptions are precisely the opposites of mine: besides the total focus on xml, there is also this obsession with event-driven (which makes it very hard to actually follow anything from one end to the other), the generic plugins (which again means that doing the simplest thing involves a huge scaffolding upfront) and the fact that the whole thing tries rather desperately to make itself “easy to use” by those who don’t understand (nor even look into) the code at the expense of course of those who do since there is no possible way to have one without the other. Leaving aside for a bit how one can never really do the work of others for themselves, the sad result is that tracking down anything in full becomes extremely difficult. The documentation helps here but only up to a point since it is not exactly up to date and more importantly, it doesn’t really focus on helping the reader understand the code – it focuses instead with all its good intentions on helping the reader use the library without really understanding it, as a sort of black or at best graying box. And moreover, pervasive everywhere, there is the wrong sort of “simplification”: while the weight of it all becomes obvious to the author too (it’s quite usual for various constructors to have at least 10 parameters and they are already several layers deep so they anyway call parent constructors with yet another set of parameters), he doesn’t see or choose a better abstraction that would help rather than hinder the effort. Instead, he arbitrarily fixes some bits and pieces: for instance, the terrain2 plugin simply expects the heightmap to be in a file called sectorName_heightmap in exactly the current path of the VFS 3. In other, fewer words, weaning the legacy code base off its unsavoury assumptions and xml-addiction so that it simply loads art as it becomes available is extremely frustrating and time-consuming, making the overall situation quite foggy blue with cornered cases and hardly anything useful in sight:
cube_eulora

The art 4 that you just admired above might not look like much but it’s a big achievement on Euloran soil: for the first time in Euloran history, a Testy character (still sadly xml-based himself) made it outside the pre-defined sphere of the XML-Island and into the great unknown of non-predefined, non-xml, fully code-loaded and discovered as you go world! It’s true that the world is for now only a cube with rather sharp and unyielding corners and no landscape at all, it’s true that the very three suns that gave reasonable light on the Island look foggishly blue in here and it’s sadly true that the character itself is still trapped in the XML bubble. But it’s a working start and moreover it’s a seed that has just caught roots within the hostile soil of the legacy code so that it can grow out of it, hopefully discarding as it grows more and more of the unhelpful mess!

  1. This is a term of art, the logs will help you.[]
  2. Why? Why can’t you do *just that*, whatever it is you actually want, did you ever ask yourself?[]
  3. Virtual File System inside CS….[]
  4. In computer graphics EVERYTHING is art, ok? There is no such thing as mere fitted drawings and clumsy, clunky approximations, no, no. All the games have nothing but art in them! Hell, they *are* nothing but art. Well, of snorts, yes.[]

#eulora Logs for 18 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2019/06/18/euloran-blus-and-boos/ << Ossa Sepia — Euloran Blu's and Boos [05:19]
diana_coman: hello brett-soric [15:08]
mircea_popescu: diana_coman so that mp3 fellow faded away basically, did he [22:13]

June 14, 2019

#eulora Logs for 14 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mircea_popescu: <mp3butcher> big work indeed (blender api keep changing all the time) << i don't intend to support that, really. for one it's not really TMSR tradition ; for the other there's that entire femfiasco. [03:16]
mircea_popescu: practically, it'll prolly work as a hostile fork. [03:16]
diana_coman: ftr the Blender version we are using and freezing is anyway older than the current mess; and it uses python 2.7. [03:18]
mircea_popescu: yeah. [03:18]
diana_coman: will be back later [03:18]
mircea_popescu: <mp3butcher> i've worked with SVN,CVS, git so versioning system does not worry me << V is… somewhat different. diana_coman i'm guessing the intro resource is still vulpes' http://cascadianhacker.com/07_v-tronics-101-a-gentle-introduction-to-the-most-serene-republic-of-bitcoins-cryptographically-backed-version-control-system ? [03:27]
mircea_popescu: <mp3butcher> directX << hey, remember a decade ago, back when os movement finally managed to wrest the gfx stack away from microshit ? [03:28]
mircea_popescu: then a buncha quislings managed TO FUCKING GIVE IT BACK ? [03:28]
mircea_popescu: <diana_coman> there is a lot new around here and it may take a while to get some of it << "new", understatement of the year [03:46]
mircea_popescu: "mindblowing" moar like it. [03:46]
mircea_popescu: o look, he quit lol. lucky there's a log. [03:47]
mircea_popescu: diana_coman, wtf was the logger here ? [03:47]
diana_coman: logs.minigame.biz [04:14]
diana_coman: mircea_popescu: ^ [04:15]
mircea_popescu: ty [04:15]
mircea_popescu: lobbes ftw [04:16]
diana_coman: re V indeed, vulpes' is the intro resource but I think the actual btcbase graph gives a better initial big picture [04:17]
mircea_popescu: fair enough [04:17]
diana_coman: welcome back mp3butcher ; you might want to check the log for yesterday's discussion after you left, it's at logs.minigame.biz [08:30]
feedbot: http://thewhet.net/2019/06/duplex/ << The Whet — Duplex [16:57]

June 13, 2019

#eulora Logs for 13 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: hi mp3butcher [12:26]
mircea_popescu: o hey [12:41]
diana_coman: from the unintentionally entertaining cs: there is an enum re light "dynamic type" that can apparently be …dynamic or static, dully named e.g. CS_LIGHT_DYNAMICTYPE_STATIC [15:21]
diana_coman: basically all lights are of "dynamic type" only some are only pseudo-dynamic and others are static [15:25]
diana_coman: in fairness, there are also some dynamic-dynamic [15:26]
mircea_popescu: lmao [16:23]
mp3butcher: hi diana_coman [16:56]
diana_coman: oh hey mp3butcher [17:00]
diana_coman: 1 sec [17:00]
mp3butcher: hi all [17:02]
diana_coman: mircea_popescu: mp3butcher is afaik the author of the exporter I used to get Blender stuff out into Cal3d format [17:03]
diana_coman: mp3butcher: I saw you maintain the Cal3d site + codebase currently? [17:03]
mp3butcher: maintain is a big word [17:04]
diana_coman: heh; so what's the status /situation there? [17:04]
mp3butcher: i fixed stuff with morphtarget [17:04]
mp3butcher: and include the blender exporter [17:05]
mp3butcher: after that i migrated to github as gna shutdown [17:06]
diana_coman: I don't know if you had a look at eulora and minigame but basically we're building a LOT from ground-up simply because we want it properly done. [17:06]
mp3butcher: i admit i didn't know about eulora [17:07]
diana_coman: myeah, and then when github shutsdown… [17:07]
diana_coman: it's ok, it's a deep rabbit hole :) [17:07]
mp3butcher: cal3d is pretty mature…so there's no real code maintenance [17:08]
mp3butcher: actually i maintained osgAnimation after that [17:09]
mp3butcher: not the same beast [17:09]
diana_coman: mp3butcher: minigame's plan is to make a proper market for artists [17:11]
diana_coman: in the sense that players select what art they want (and where/which bits) and then artists get paid based on the use of what they made [17:11]
mp3butcher: interesting economic model [17:12]
diana_coman: part of this means that the client will be able to download from server ANY new piece of art as/when it becomes available [17:13]
diana_coman: (and this part is currently precisely in the works) [17:13]
diana_coman: furthermore, we need to rather automate the export process from blender [17:15]
mp3butcher: big work indeed (blender api keep changing all the time) [17:16]
diana_coman: ahhh, THAT part is easy really: we fix the version and that's that [17:17]
mp3butcher: …pertinent… [17:18]
diana_coman: around those parts, there is no tolerance for "improvements" that are more bloat and mess than anything else (also known as verschlimbesserung if you have any inkling of German) [17:18]
diana_coman: if you don't mind me asking: what are you doing other than maintaining cal3d, osganimation and the like? [17:19]
diana_coman: I suppose you might find interesting also the V versioning system for that matter. [17:20]
mp3butcher: research on real time fluid mechanism (post thesis), crowd simulation, contributing on OpenSceneGrpah ecosystem (core osg, osgBullet, osgCal, osgAudio)…all kind of GPGPU stuff [17:22]
mp3butcher: i've worked with SVN,CVS, git so versioning system does not worry me [17:24]
diana_coman: heh, V is…one of a kind; let me fish some refs for you [17:24]
diana_coman: mp3butcher: but at any rate: what *does* worry you? [17:25]
mp3butcher: directX [17:26]
mp3butcher: :) [17:26]
mp3butcher: hlsl [17:26]
diana_coman: at least cal3d and blender are not on the list :D [17:26]
diana_coman: mp3butcher: here's a nice picture re V, perhaps a gentler entry point to it than anything else I can think of: http://btcbase.org/patches [17:28]
mp3butcher: the new Eevee python api worries me, cause would involve plugin maintenance [17:28]
diana_coman: you can select a project and see its tree of patches; each patch will be signed by its author and/or anyone else who is ready to publicly state they trust it [17:28]
mp3butcher: i've never heard about this versionning system [17:29]
diana_coman: heh, re new python I can further dispel your worries: we fixed Python version too, quite some time ago (basically < 3.) [17:30]
diana_coman: to ref waaaay back in 2016: http://logs.minigame.biz/2016-11-28.log.html#t14:27:47 [17:33]
lobbesbot: Logged on 2016-11-28 14:27:47: <mircea_popescu> i'm not terribly sure python 3 has any sort of future. it seems altogether unable to muster specific support in tmsr, and the open sores movement is running out of steam. [17:33]
diana_coman: mp3butcher: are there others actively working on Cal3d ? or how did you end up inheriting the maintenance? [17:35]
mp3butcher: i inherit the maintenance because of a bug in morphtarget [17:37]
mp3butcher: when i contacted Loic Zachary he let my the key to the house as he was to busy with openstack [17:37]
diana_coman: aha [17:38]
diana_coman: mp3butcher: as a starting point for Eulora you might find this interesting http://trilema.com/2015/ok-so-what-is-eulora-disrupting/ [17:40]
diana_coman: back then I was just a new player of Eulora too! [17:40]
diana_coman: mp3butcher: maybe make a GPG key and register it with deedbot so that next time you connect we can tell that it's really you aka the same person? [17:51]
diana_coman: there is a lot new around here and it may take a while to get some of it [17:52]
diana_coman: but at any rate, you might want to talk to mircea_popescu too when he gets online as he's the ceo of minigame (Eulora's producer) [17:53]
diana_coman: I'll go offline in ~15 minutes but I'll be back tomorrow and the channel is logged so I'll be able to follow-up tomorrow [17:57]
diana_coman: mp3butcher: in any case, would you be interested in making the blender->cal3d automation part? (as previously stated, with fixed versions of everything so once done well it's forever, no eternal breaking because the api changed under you). [18:00]
mp3butcher: it would be interesting.. let me think about it …see you tomorrow [18:07]
diana_coman: mp3butcher: take your time, no hurry at all. [18:07]

June 11, 2019

Eulora Client Hierarchy of Data Draft

Filed under: Eulora — Diana Coman @ 10:29 pm

This is a very first draft to help with the current work on enabling Eulora’s GUI client to make use of new information as it becomes available from the server rather than expecting everything to be fully known upfront (as it currently does, laugh you not!).

Eulora’s data is one big hierarchy with 3 main types of information: structure, description, representation.

  • 1. Structure (i.e. what entities are inside what other entities)
    Structure is always a tree of entities where each entity is given through ID (unsigned 32 bits) + Position (x,y,z,rx,ry,rz):

    The Root of the world will ALWAYS contain:

    • an *abstract object* with meta-info:
      • ID of “self” (SelfID)
      • ID of current location (aka “sector” or room or world or whatever else it is) (LocID)
      • List of Skills: list of (skillID, skillName, skillCategory, skillRank, skillXP, skillKnowledge) (?)
      • Game Date and Time (?) — is this a meta-matter or is it a location-property?
    • the *top-most ID* (aka topmost entity); NB: this is not always the same as LocID since character may move into a location inside another location, presumably.
    • from top-most ID down, EACH node will have zero or more contained entities (hence, child nodes given through their unique ID and concrete position within their parent).
    • NB: each node can also have in addition to its structure-children (hence entities), any relevant number of description-children (see 2 below) or representation-children (see 3 below).

    • 2. Description of what entities themselves “are” through their relevant properties

      ANY structure-node may further have, alongside its children, one or several of the following properties (given as a tuple property,value):

      • name
      • description (??)
      • (- equipment slots (list of (slotID, entityID) ?) — are those any different from “contained”? I can’t see a truly significant difference.)
      • stack count
      • quality
      • HP (hitpoints)
      • BP (bloodpoints)
      • SP (stamina points)
      • MP (mana points)
      • SpP (spirit points)
      • MSP (mana spirit points)
      • weight
      • bulk
      • weight limit (max weight)
      • bulk limit (max bulk)
    • 3. Available representation of entities (graphics, sounds, effects, maps etc)

      NB: in principle there can easily be a structure + properties split at this level too since a graphical representation may have its own structure (e.g. map defined as a hierarchy of contained terrain + geometry meshes that have in turn different submeshes with corresponding textures/materials). This seems rather unseemly though and it’s unclear if there really is a need for a hierarchy of graphical detail that is anything OTHER than hierarchy of world entities to start with. So perhaps this can be flattened so that representation of entities means just that: a list of relevant graphical characteristics of ONE entity.

      ANY structure node may further have, alongside its entity-children and its properties, one or several of the following representations:

      • Mod2D (aka 2D model; at its most basic, the filename of icon to show for this; tbd)
      • Mod3D (aka 3D model; at its most basic, spec for mesh including material/texture and sockets if any; tbd) ; NB: sockets allow graphical representation of contained (specifically “equipped” or “component”) entities and therefore they should probably be identified by “position” so that the entity “child” on that position will then give the actual representation shown to the user (?).
      • ModAnimations tbd
      • ModMap (aka map for this entity; at its most basic heightmap + size (or is this fixed?); possibly also a list of materials to use + corresponding density)
      • ModWeather (unclear yet if this is any different from sounds+effects really)
      • ModSounds tbd
      • ModEffects tbd (unclear yet if this is substantially different from animations+sounds)
      • ModSkin tbd (stuff like window borders and button colours)

      ANYWAY: GUI may request whatever it wants from local cache, regardless of cache’s own internal representation (just as cache may store data in any form, regardless of smg’s own description of hierarchy).

    TO DO: flesh out in more detail each possible representation, for GUI to ask & work with + get it to actually work outside of/inside the intricate mess of ps paws, widgets, managers and whatnots maggots.

#eulora Logs for 11 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2019/06/11/eulora-client-hierarchy-of-data-draft/ << Ossa Sepia — Eulora Client Hierarchy of Data Draft [18:24]

June 9, 2019

#eulora Logs for 09 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: B#1048 O=154mn LB=75mn E=2019-06-09 12:19:30.974170 (12h19) >>> 500 WFF, WU esta bien [07:52]
auctionbot: B#1049 O=400mn LB=390mn E=2019-06-09 12:19:43.167056 (12h19) >>> 2835 WFF, Wire Only [07:52]
auctionbot: — end of auction list, 465mn total bids — [07:52]

June 8, 2019

#eulora Logs for 08 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: B#1048 O=154mn LB=80mn E=2019-06-09 12:19:30.974170 (36h19) >>> 500 WFF, WU esta bien [07:52]
auctionbot: B#1049 O=400mn LB=390mn E=2019-06-09 12:19:43.167056 (36h19) >>> 2835 WFF, Wire Only [07:52]
auctionbot: — end of auction list, 470mn total bids — [07:52]
feedbot: http://thewhet.net/2019/06/a-thermo-rental-odyssey/ << The Whet — A Thermo-Rental Odyssey [16:50]
billymg: BingoBoingo: http://qntra.net/2019/06/charges-dropped-against-members-of-us-dissident-group-that-refused-to-plea-out/ << s/Rise Against Movemment/Rise Above Movement and s/attenance/attendance [17:01]
BingoBoingo: ty, fxd [17:02]
billymg: np [17:04]
billymg: oops, didn't notice this wasn't #trilema [17:04]

June 7, 2019

#eulora Logs for 07 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: B#1048 O=154mn LB=80mn E=2019-06-09 12:19:30.974170 (60h19) >>> 500 WFF, WU esta bien [07:52]
auctionbot: B#1049 O=400mn LB=390mn E=2019-06-09 12:19:43.167056 (60h19) >>> 2835 WFF, Wire Only [07:52]
auctionbot: — end of auction list, 470mn total bids — [07:52]

June 6, 2019

#eulora Logs for 06 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: B#1048 O=154mn LB=80mn E=2019-06-09 12:19:30.974170 (84h19) >>> 500 WFF, WU esta bien [07:52]
auctionbot: B#1049 O=400mn LB=None E=2019-06-09 12:19:43.167056 (84h19) >>> 2835 WFF, Wire Only [07:52]
auctionbot: — end of auction list, 80mn total bids — [07:52]

June 5, 2019

#eulora Logs for 05 Jun 2019

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: B#1048 O=154mn LB=154mn E=2019-06-09 12:19:30.974170 (108h19) >>> 500 WFF, WU esta bien [07:52]
auctionbot: B#1049 O=400mn LB=None E=2019-06-09 12:19:43.167056 (108h19) >>> 2835 WFF, Wire Only [07:52]
auctionbot: — end of auction list, 154mn total bids — [07:52]

Work on what matters, so you matter too.