Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

Work in Progress / Et Sulium Sao Eterniae

Author
Message
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 21st Feb 2015 09:05 Edited at: 21st Feb 2015 09:07
So I've begun to harness the power of bitwise operators in an effort to further streamline the code and memory footprint of my ability data and character state machine.

This article by Chris Tate was very helpful:

http://www.binarymodular.com/main/articles.php?article_id=92

The relevant section starts about halfway down the page.

I was able to condense this:



down to just this:



and on the UDT side, 4 boolean fields are now compressed into a single int field.

edit: page

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 18th Mar 2015 04:58 Edited at: 18th Mar 2015 04:58
So I just realized that it's been nearly a month!? since my last update, and longer still since there has been anything meaty.

I've honestly sort of lost track of time this month, it feels like it flew by really fast. Things have been busy both with Sulium and otherwise. There has actually been a good deal of progress, and I'm putting together a substantial update within the next week or so.

I'll give a quick preview for now. What do we have here? NPCs! AI!, Combat! Math! Oh My!!

As you can see, I've dusted off Cloggy's d3d plugin for some awesome 3d line drawing to aid in visualization and debugging. It's an oldy but a goody.

It's currently showing AI Line of Sight, entity facing, attack zones, collision ranges, and things of that sort, it's been incredibly helpful to verify that things are working the way I expect them to be working (or not, and then they help me fix them)

These are only displayed while the debugging info panels are open and of course will not be part of actual gameplay.



Attachments

Login to view attachments
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 22nd Mar 2015 05:24 Edited at: 22nd Mar 2015 05:46
Okay folks, here it is, a new video presenting the first pass at melee combat and ai behaviors.

I'll go into more detail on each of these in upcoming design discussions, but for now, just a quick over view of what can be seen in the video.

The first thing you will notice is that I've added a spiffy new loading screen, then some new oak trees outside the window

Next, the first 2 minute segment shows a visualization of strike zones. Any targets within the arcs are eligible to be hit, abilities will currently hit 1 target then end, but I've left the option open for 'cleave' style attacks that continue to hit additional enemies, probably with a reduction of force for each.

Each the size, shape, and coverage of the strike zone changes by ability / attack used. attacks can progress left to right, or right to left, and I can define a range for each side independantly. The maximum range is the same for all abilities, but varies by equipped weapon size and character size.

Attack zones are displayed as the fan of white lines, these lines will turn red if an attack hits a target.

The character facing direction and maximum reach is displayed by the yellow line.

The green lines display the path and length of movement for abilities which move your character.

The blue-red gradient shows AI line of sight against the player.

Starting at about 2:30 in you will see the first enemy NPC encountered and this next segment will show the various AI behaviors currently in place.

At the top level, AI operate under general states such as 'whilePassive', 'whileCombat', 'whileTravelling' For each of these states, various behaviors can be defined and combined. whilePassive, for instance, has behaviors like watch, roam, patrol, guard, work, congregate, rest.

The AI can then further define more specific behaviors in response to events such as 'onDetect', 'onAttack', 'onAttacked' and more detailed by the subject of the event friend, foe, neutral, self.

For instance, while passive on detection of a hostile, an AI set to 'watch' will maintain it's position but turn to keep the target in sight. If the target takes a hostile action such as entering combat, the AI will respond by entering combat and switching to a whileCombat state.

The first NPC encountered is set as such. You will see that it does not respond to me entering combat while out of line of sight, but will move in to attack when it spots me in combat.

The second NPC encountered outside is set to attack on sight and will move in regardless of my state.

The third NPC is set to both follow and watch. It will move in but keep some distance away. like the first, it will enter combat if I take a hostile action.

The last NPC is set to flee. It will move away from me to keep a minimum distance.

AI have the ability to alter / regulate thier speed between combat / walk / run based on distance from thier target. They can drop in and out of combat to help close distances as needed.

Attacks have an 'apex' point near the middle of the animation at which all of the combat hit checks are performed. If you are hit by an enemy attack before you reach this apex, your attack is interrupted. This means that fast attacks can lock an opponent down, but the faster the attack, typically, the narrower its strike zone, making it harder to aim and easier to avoid. These are mostly the thrusting attacks. Swing attacks are slower, but have a much wider strike zone, making them both easier to hit a target with, but also easier to be interrupted or defended.

Ok that's nice and all but let's see some action right?!? Done. at around 9 minutes in I turn off the debugging hud, turn on the AI attack routines and just play with some combat. It's pretty tough at the moment, you can see me die several times. For one thing, I haven't hooked up stats and recovery times yet, so there is no delay between attacks, and every attack temporarily just does a flat 25 damage, this means anything will be killed in 5 hits at the moment. There is also no armor, no blocking, and no parry yet, nor teammates.

All in all, it is currently -very- action based and while it will always be active, there will eventually be more depth and tactics to come in to play.

Its recorded/uploaded at 1080p but youtube seems to be having a lot of buffering tonight and is defaulting lower, maybe its just on my end /shrug anyway, the high res is available just so you know.






Attachments

Login to view attachments
Wolf
11
Years of Service
User Offline
Joined: 8th Nov 2007
Location: Luxemburg
Posted: 22nd Mar 2015 16:16
This is all very impressive!!
Also check your PM!



-Wolf

"If the mods didn’t see it, I didn’t do it!" - Rick Bamber
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 22nd Mar 2015 18:26
Hey Wolf, glad you like it. PM replied thanks!

Dimis
7
Years of Service
User Offline
Joined: 12th Jun 2011
Location: Athens, Hellas
Posted: 22nd Mar 2015 21:12
looking great!

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 30th May 2015 22:40 Edited at: 30th May 2015 22:47
Hey folks, I know I've let discussion on this slip quite a bit lately, I do apologize, but here is a bit of a progress report.

Most of my work and focus lately has been on overhauling some of the oldest portions of the internal framework design; applying better designs to basically accomplish the same results, but in a manner that is better able to continue forward with.

First, I made a significant change to the way in which debug info is written to logs. Previously, I could write to various channels like "main", "gui", "combat", "ability" and each channel was written to its own .txt file. This worked fine when I was working with and testing more isolated components, but as the system has grown larger and more complex, with the more advanced systems relying upon and integrating with multiple base systems, it started to become increasingly difficult to match up events occuring at the same time across multiple channels. It became increasingly difficult to sort through the debug spew to locate specific sections of interest.

So, instead of writing directly to channel files via: write string SYSTEM.log.main, "some debug text of interest" : write string SYSTEM.log.combat, "some other stuff"

I now pass all log requests through a function: system_log(1, "main", "some debug text of interest") : system_log(1, "combat", "some other stuff")

The parameters being volume, channel, and content. This now allows me to apply filters dynamically before and during runtime to control what and how much gets written as needed. Additionally, everything is now output to a single .csv file with timestamps, allowing me to make use of the sorting and filter controls provided by spreadsheet softwares when reviewing the log afterwards.

Of course, this change required that I update every line of code which wrote to a log file and believe me, there are A LOT of them in this project. This task was incredibly tedious and time-consuming, however it was also invaluable in working out the kinks between ai, combat, abilities, character controller, and animation systems which all have to work together smoothly in order for the overall combat mechanics to work properly.

Next up, for regular readers, you may remember that I have run into bugs several times due to updates not being processed in a necessary order. This is due to my original method of manually assigning a priority level when registering the updates with the framework and messing up the ordering. To resolve this, I have removed the priority method and have instead implemented a system which allows an update to specify other "required" updates. The system will now resolve and organize the update order automatically so that an update will only process after all of the required updates it depends on have finished. I no longer need to worry about managing what specific order everything processes in, I only need to know what updates any given update needs to have completed before it. This again required a bit of refactoring across the entire project.

Thirdly, I have completed an upgrade to the latest version of Advanced Lighting. I was still on the one 2 versions back, which lacked the more recent improvements to the cloud and terrain systems. This upgrade involved significant changes to the command set, shaders, and some textures. It was not just a simple drop in and I am still reworking some of my textures, but during its integration, I did discover a conflict between AL and the Matrix1 "call function name", "call function ptr" commands. I'm not really sure why these conflict but as soon as one of these commands is used, I get graphical errors in AL, particularly against empty sky/water or basically anywhere there is no solid object rendering. I've set up a workaround function: framework_executeCallback(functionName$, arguments$) which uses a select:case against the name to directly call the requested function in hard code. I'm not particularly happy with this, as you have to manually set up a case for any function you need to callback against which is no where near as clean and elegant as the M1 call function name, but it keeps the graphics working properly and the usage is equivalent. Somewhere along the way, whatever issue I was previously having with blur and depth of focus has also been resolved. These always worked in the demo, but did nothing when integrated into Sulium. No longer!

This upgrade also lead to my AdvLighting documentation project posted over on the dbpro board. http://forum.thegamecreators.com/?m=forum_view&t=214468&b=1

Phew, ok so lastly, I've begun to update my character skeleton and animation rig to support additional equipment bindings. Expect to see shields, blocking, and two-handed weapons in the near future, with probably archery after that

And of course, I'll leave you with a few random screenies:



Attachments

Login to view attachments
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 31st May 2015 13:35
Breathtaking screenshots; I especially like the depth of focus example, and the wood texture on the window.

How is the performance so far, high FPS or not quite optimal yet? AL has been known to slow down gaming performance, but has this been an issue in your game?

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 31st May 2015 20:25 Edited at: 31st May 2015 23:11
is actually remaining quite good. main primary PC averages 105 fps until I load a bunch of random trees. it is a lower side of average spec PC for gaming. i3 processor 4gb ram, amd hd6870 2gb card.

it maintains a solid 60-64 when I turn on CPU sleeping via nice sleep. my target goal remains 60, but it is very playable even in the low 20s when testing on my lower spec non-gaming laptop.

this is with most of the AL options turned on and/or set high. I will be adding settings and controls to customize graphics settings as needed/desired. I do not plan to offer an option to completely disable shaders as I feel this will take too much away from its intended appearance, but many of the high impact features such as realtime shadows and other personal preference options like bloom, lens flare, DoF, can be turned off or down.

the biggest hit to fps still seems to be high numbers of trees, but even that seems to be somewhat improved with this version of AL. I get a reasonable 50-55 even with something like 130 clumps of trees objects at 10 trees as limbs per each clump. so 1300 visible trees on screen, and more off screen outside those counts. it is quite dense. I feel like I remember it being in the 20s with this many trees on the previous version same PC, but don't have a hard record of it. Might do some tests later and post the results.

also keep in mind this is with no object optimization such as LOD or culling yet. and it is using what will be the highest LOD models

----------
Edit:

Hmm so here are some test results between the previous version and the current.

The triangle count reported by DBpro via statistic(1) does not seem to be accurate as evidenced by the actual model counts below, though the object count via perform checklist for onscreen objects 0 looks about right.

This is using object clone instead of object instance as I can't seem to adjust limb position independantly on instances and this is needed to fit the individual trees within a clump to the terrain.

=======================================================
Carliet body: 9213 triangles, 1 object
Carliet hair: 999 triangles, 1 object
Dagger: 1068 triangles, 1 object
--------------------------
Character Total: 11280 triangles, 3 objects
--------------------------

Tree clump Trunks: 6804 triangles, 1 objects (9 trees)
Tree clump Leaves: 2936 trianlges, 1 objects (8 trees)
---------------------------
Tree clump Total: 9740 triangles, 2 objects (9 trees)

=======================================================

on the first shot, 2015-03-25 version of AL:



129 objects - 3 character objects = 126 tree objects
126 tree objects / 2 (1 trunk, 1 leave per tree clump) = 63 tree clump objects
63 * 9740 = 613620 triangles
613620 + 11280 character = 624900 triangles.

on the second shot, 2014-07-21 version of AL:



189 objects - 3 = 186 / 2 = 93 tree clump objects
93 * 9740 = 905820 triangles + 11280 character = 917100 triangles

Then add in terrain, clouds, water etc and the actual counts are likely even higher.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 6th Jul 2015 07:32 Edited at: 6th Jul 2015 07:41
Quick little update here, a new weapon is in. This required some new animation to handle the sheath held in hand. It also required some work in my object management to better handle equipping and unequipping items, particularly when an item change requires a change to the base character and accessory animation sets.





With the added reach and mass over the dagger, the jump in combat power with this rapier is tangible and significant.

I will be spending some time this coming week on implementing the ability to block and parry.

edit* I know that the UVs are a bit wonky on the sheath, it's on my todo list

Attachments

Login to view attachments
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 6th Jul 2015 18:53
I like it; it has an attractive looking hand guard. As far as I know you do all of your modelling yourself; not that outsourcing is a bad idea; how did you make the handle if you do not mind me asking? By mesh extrusion, path extrusion, a bit of both?

I look forward to seeing more.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 7th Jul 2015 04:28
thanks man, yes, so far I've modelled everything in game myself. Wolf graciously contributed some interior furnishings, but I haven't gotten them loaded in yet, as it is kind of a pain to scale and position things until I get around to building a proper editor.

in general I often use a mix of mesh extrusion and nurbs surfaces which get converted to mesh for creating base models, hard surface then gets bevels, subdivisions, smoothing groups and the like while soft surface cloth and organics go into sculpting. the high polies then get retopologized and baked down into game ready assets.

the rapier guard here was done by extruding a cylinder.

Dimis
7
Years of Service
User Offline
Joined: 12th Jun 2011
Location: Athens, Hellas
Posted: 7th Jul 2015 08:56
I like that sword man. I can imagine that fight scene at that beach with some sand particles lifted from the ground when they walk or fall.

From your previous posts, i also have noticed that the statistic(1) isn't accurate. I think in my case it doesn't count the polygons of the bone animated objects.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 7th Jul 2015 20:39
hmm interesting, my trees are all bone animated so that would make sense if they are not getting counted.

Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 7th Jul 2015 21:52
Will the statistic include instanced objects?

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 15th Jul 2015 07:30
Block and Parry detection/handling is in and working, I'm still working on some supporting animation for them, and then will hopefully have a new video up this weekend.

So, let's discuss the state of the project for a moment.

As things continue to get checked off my feature list, I've been thinking more about scope lately, and a certain disconnect that I've noticed between what is seen here in this testing area, and what is intended for the game and talked about in lore.

The problem stems from this area that's been seen so far was only intended to be a developmental test zone, and was not ever intended to be part of the actual game, or really have any sort of gameplay beyond systems and mechanics testing.

Being the first character model completed, Carliet has become the main focus here, but while she is ultimately an important and major character, she is not intended to be the primary protagonist in the main game.

Stories kind of have a way of taking root and growing on their own though, and the more I flesh the area out, the more it and its inhabitants take on their own life and there is now a fully outlined mini-story in which Carliet is featured as the primary player character set here, which can act as a sort of prologue to the main story.

Back to the issue of scope, there is a story here now that is worth telling, which doesn't require the full feature set of the main game. Don't get me wrong, there is still a considerable amount of work to do even for a bare-bones prototype of a reduced set of core functionality, but splitting the development into smaller, more tightly defined stages will hopefully make the scope more manageable. Playable and engaging content can also help build the interest of a fan base well in advance of a full release. That being said, it should not be considered or presented as a marketing demo of a full game, but rather as a focused, testable prototype which can provide exposure and valuable feedback on the initial systems and concepts.

The key to meaningful, episodic prototypes is of course that each stage needs to be a *full experience* in its own right, building directly on top of the previous stage, and contributing towards the main game which remains the ultimate goal.

So what exactly does this mean for the project?

I'll be releasing a set of (probably) 4 incremental prototypes as episodic prologues, each featuring a different major character from the main game, introducing them and their back-stories to the player as well as building and introducing the game's major mechanics.

Each prologue will be intended to have about an hour's worth of content, and by the time all of the prototypes are complete, the engine will have all of the mechanics and functionality needed for the full game. The only thing left to do at that point should be content/environment/asset creation.

I've begun looking at the planned systems and determining which are essential for an initial prototype, which can be left partially implemented, and which can be deferred. The plan at this point will be to focus solely on the essentials, and rapidly white-box the environment models in low poly without textures to begin getting level layout and design blocked in. better art and texturing can be added during later polishing sweeps.

Now that combat basics are wrapping up (the core anyway, so much more is planned), looming large at the top of the list of essentials are a basic level editor, character dialogues, and event triggers/scripting. A proper editor will make work on the other items vastly easier, so yes, the next major focus will be on the dreaded bog of level editing.

----------------------

I'll go ahead and start a sort of roadmap list, but fully expect to add, move, and modify items as things progress.

Prototype 1 - Prologue: Carliet

Feature Set:



Will breaking things up into smaller bites help get more completed? It's hard to say, on one hand, it does require additional content and media not originally planned, but on the other hand it more fully develops the world and story, and each chunk can be completed and released much sooner than going all or nothing on the final full game.

Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 15th Jul 2015 21:23
My what a lot of fun tasks you have in your list I look forward to seeing more of your modelling skills in action.

It is nice priotise as you are because not everything matters to the player, or the developer; there are plenty of players happily playing through prototype games.

Dimis
7
Years of Service
User Offline
Joined: 12th Jun 2011
Location: Athens, Hellas
Posted: 16th Jul 2015 00:10
I wanted to ask if you have thought of using enhanced animations? I forget if you have mentioned how you load your animations. Are they saved within the model? I recall that once you save your model with it's animations together, the model's loading times are increasing a lot, but of course this might depend on other things also. Enh. Anims. pluggin loads animation files ridiculously fast. Unless you are not planning to use a big range of animation data. Just curious.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 16th Jul 2015 02:26
I haven't really given it much thought, I tend to avoid paid plugins as I don't have a lot of spare cash to put towards this project, but I may need to give it a look. cutting load times and blending between animations would be nice.

I currently save animation to the model .x as key frames only, dbpro creates interpolated frames automatically between the keyframes.

the project does use quite a large range of animations, which will only increase as more abilities are added as most of them use a unique animation sequence, with additional variations by class and gender.

it currently takes longer to export the character to .x from blender than it takes for the game to compile :/

Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 16th Jul 2015 23:05
Blender .x animations can also get large in size; I have been playing around with moving the bones using hard coded commands instead. Hopefully after more testing I can get it to work and share it.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 16th Jul 2015 23:12
yeah, after 2.66,the exporter dropped the option to export keyframes only, they will write data for every frame and this can make very large files. I continue to export in the 2.66 version to keep the keyframes only which reduces the file sizes considerably and has no adverse effect on the animation in dbpro that I have found.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 30th Aug 2015 22:01 Edited at: 1st Sep 2015 08:13
Quote: "Block and Parry detection/handling is in and working, I'm still working on some supporting animation for them, and then will hopefully have a new video up this weekend."


err... yeah, it's hard to believe it's already been a month and a half since I posted that. I've utterly failed at keeping this conversation going sorry guys. I will admit I have gotten a bit side tracked with other things, BUT! here is the video as promised:

https://www.youtube.com/watch?feature=player_embedded&v=CfPhV2KDX4w



So, a couple of things. I have simplified the parry mechanic from my original intent where you would have to direct the coverage arc right or left, and sweep it to cover the center. Now, it works more similarly to block in that it just covers a flat frontal arc, though it is much narrower than the blocking arc. Secondly, while block remains continously ready as long as you hold the guard stance, parry drops you back into balanced stance, which means there is a small recovery window as you transition back from balanced to guard in order to parry again.

This window leaves you vulnerable to multiple attackers even within the coverage arc, and to multiple fast attacks from the same attacker if they are quick enough.

Lastly, parry can still be over-powered as originally presented based on the force of the incoming attack compared to various stats of the defender and defending weapon.

Balancing against these shortcomings compared to blocking, parrying does not suffer condition damage. While block is more garunteed and constant, your shield will eventually break from repeated blocks.

So, as mentioned in the previous update, my next focus will turn to building a level editor and other developmental tools. Fun stuff ahead!

-------------

For those interested in what I've been working on other than Sulium, aside from being an avid tester and member of the community for the upcoming MMO Camelot Unchained, I've also been an active modder creating both unofficial custom UI mods and addons, and contibuting code to the open source official UI which is hosted on github.

Their UI is built on web languages/technologies using embedded Chromium. Myself and some other volunteers within the community are currently working with the studio to rebuild the official default UI originally built on jQuery, refactoring it to use React.js

UI development aside, it's a great game and a great community. It is a cool mix of old school pen and paper RPG, minecraft-like building, and some crazy new concepts gluing it all together. I highly recommend checking it out.

Aside from the main site, the official wiki which I also helped launch and contribute to, is a good source of quick info on the game as well.

-----------

Until next time! Later folks.



Edit: Wow, oops! While updating the first post, I just realized that we have just passed the 1 year mark since I started this thread.

Happy birthday Sulium, you've come a long way

Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 31st Aug 2015 13:40
Nice to see an update on this game. The graphics as always are a highlight.

It is good to work on industry titles in your spare time, you learn alot from that. You are the only one involved in some other popular game title; I contribute towards the CSGO gaming community and have a number of maps and weapon skins in the making. Keep it up because thats where you get valuable experience dealing with and developing for real players.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 31st Aug 2015 17:11
agreed, i do development of web based business applications in my real world job, mostly using Angular these days, and i have considerable experience with javascript and the web in general, but I've still learned a great deal in working with these guys. beside that, meeting people and networking is always a good thing.

back to Sulium, progress is starting off well on an editor. i am building it off a branch of the current game rather than trying to build a separate application, this has advantages of giving direct access to working with game mechanics and processes as well add easy synchronization and 'drop-in' testing.

using version control, if any changes are made to the core engine that need to be shared between editor or game, these can be easily merged and managed.

the first order of business was separating out 'play mode' from 'edit mode' essentially pausing all game play processes and enabling the dev tools. the first of these tools are various camera modes. free flight is done and next i will be working on a Blender style 3d cursor and camera operation.

Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 9th Oct 2015 18:33 Edited at: 9th Oct 2015 18:45
So things have gotten quite interesting lately. where to begin...

I may no longer be writing code in DBpro.

( No wait, read on! really )



As mentioned previously, I've begun to work on an editor for the game. This is built on the game itself as a copy of the project with added developmental features and editing tools.

Keeping the two projects in sync with each other, while at the same time restricting what funcitonality the production version is allowed to include becomes quite an effort (and error prone) in itself. Add in that I will eventually want to seperate out all the debugging and logging code from the production version into debug and release builds and I'm essentially looking at managing 3 project versions. not good.

Now, I've recently been using Gulp with Typescript and React quite a lot for web-developent, and using my experience with these, I began to think about how to bring a build system into DBpro.

Initially, the intent was merely to manage environment scoping so that I only had to maintain a single version of the project source and could indicate to the build system via scope tags what to include into which build (editor, debug, release).

Something like this:


In which anything wrapped into <! !> tags would be included only the in the editor build files. <? ?> would be included in editor and debug builds, and anything outside of scope tags will be included in all builds.

This would require writting a relatively simple preprocesor that would take a source file as input and create several new source files as output, one for each environment.

Then I thought, well shoot. If I am running a preprocessor over everything anyways, why not expand it some. We can standardize the syntax of DBpro commands:

Instead of space cased commands, in which only commands that return values use parenthesis () we can make all of them camelCased() and enclosed. We can fix the ambiguity between arrays and functions by making arrays use []. These can be handled with simple regex replacements.

array insert at top SomeArray()
myCount = array count(SomeArray())

Becomes:

@arrayInsertAtTop(SomeArray[])
myCount = @arrayCount(SomeArray[])

(and of course you can still just write raw dbpro 'array insert at top SomeArray()' and it will get transpiled over 1:1)



So now the excitement is building and possibilities are spinning through my mind. OK, why not add some common array methods as shorthand?

SomeArray[].$push("something")

can easily transpile into:

array insert at bottom SomeArray()
SomeArray() = "something"



But wait! Why not implement some OOP!

If you will from a previous post in this thread, my framework and coding practices in DBpro already make use of some some OOP fundamentals *by convention*, if we are now going to programmatically re-write and generate dbpro code anyways, let's just go all the way!

So, I've started creating a sort of 'Dark Basic Enhanced' language which uses a .dbx file.

I've created a transpiler which will convert the .dbx source to .dba source (you still need to compile the final .dba source with the dbpro compiler as normal to get an .exe, but the build system handles this as well)

I've created a build system which will manage the scoping of environments, abstracts the use of the transpiler, and will eventually handle optimization of media (.x to .dbo, .png to .dds etc)

Lastly, I've created a project setup tool which will setup new projects based on templates and which is designed so that users can easily define their own project templates.

Of course the DBpro IDE's aren't compatible with .dbx, but then I mostly only use the IDE to compile anyways with the occasional syntax lookup on a keyword. For a long time now all of my coding has been done in notepad++, but I've recently begun to use Sublime Text 3 and I *highly* recommend it. I can now execute a compile via the build system and so I no longer use the DBpro IDE at all.



This system makes use of several different applications written in C# and DBpro. I'm tentatively calling it 'Obsidian' (from OBS: [O]bject oriented [B]uild [S]ystem) I like the sound and it gives a nod to the 'dark' naming theme of DarkBasic related things.

It is still fairly fragile and in a very early stage of developement, but so far , it has transpiled this dbx:





into this programatically generated dba:




which compiles and runs as expected

You can paste the dba code above into an empty project and run it to have a look (requires Matrix1)


There may be some unavoidable tradeoff between having OOP oraganization and structure versus the performance cost of implementing that in a proceedural language. It obviously has to do more lookups to access data references, so I will be interested to see how Sulium's performance compares when using this system to its previous.

As to compile times, well you still compile regular .dba with the regular dbpro compiler, no change there. But you do add the added step of preprocessing and transpiling. (The above file transpiles in ~50ms) As this is done in C#, it does make use of multithreading to process multiple files simultaneously, and I have plans to implement checks so that it only processes files that have actually changed for added optimization. But as talked about previously one of the best things you can do for compile times is to abstract and load as much in from external sources as possible. reduce hard coded content so that you can change values without having to recompile. This should be done anyway.

Well, I think I will split further discussion of Obsidian itself to its own thread, and address it here only as it relates to developing Sulium using it. The abstract modular framework that Sulium is built on will be wrapped into Obsidian as part of the default project template.
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 9th Oct 2015 19:06
A very nice idea. There is a lot of useful features you could add to the system which will reduce coding time even more. There has been alot of thinking outside of the box amongst DBP developers recently, with Sam's precompiler reducing compile times by appending changes. I have not used it but it looks quite useful.

I got fed up of using Array Insert At Bottom and Array Count quite quickly and used my own shortcut. Your system will provide shortcuts for much much more.

I am sure the programming of Sulium will be much more pleasant than was the case before.
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 9th Oct 2015 19:41
the possibilities are pretty exciting. i think with dbpro stagnant for so long, but still with a lot of user fondness and interest in it, people are having to get creative to continue to advance it in absence of official development on the language.

i looked over Sam's precompiled function stuff and it is a great idea. i do have some issues using the matrix1 call function ptr commands with the version of AdvLighting that i am using though, not sure why they would conflict but it messes with the rendering as soon as the command is called. there was no issue on previous versions, and it may get fixed in future ones, but it will be interesting to see how the language develops, particularly with everything mentioned in the dbpro out in the open thread Lee posted. (not to mention the dx11 plugin)

my main hope for Sulium with Obsidian is much much better maintainability, which is vital in a large complex project.

i did have a regex question for you Chris. I've got an alternate solution working, but a good regex method would be better.

given the following string:

"this word should not be matched" but this word should. dont match a sword though! "and dont match a word here either "

the regex should match only the individual whole word 'word' outside of quotes.

i haven't been able to quite get it worked out despite much adventuring across the googles.
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 10th Oct 2015 11:02
It is difficult to memorize; I wrote a lot of tutorials in my thread a while back, so should be able to recall the solution. One moment.
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 10th Oct 2015 12:19 Edited at: 10th Oct 2015 12:33
\bword\b(?=(?:_[^"]*"[^"]*")*[^"]*$)


Ok, this took some Googling and playing around. Note also the non capturing symbols (eg:? have a _ between them because of the emoticons. Remove all underscores

Unfortunately you have a bit more work to do in C#, because microsoft's Regex expression functions differ. Some of the characters may need to replaced with Microsoft's syntax.

I think it is always good to explain what a regex expression is doing even though you probably understand it anyway.

So first lets pick the word by using the term as its expected: \b(word)\b

You can use OR expressions like so: (\bWord\b)|(\bword\b)

The \b word boundaries will make sure it is a word, so that prevents words like sword being returned. Now about the quote marks

next is the difficult part; counting the number of adjacent quotes. I had to look up a solution for this one which brings to this:

\bword\b(?=(?:_[^"]*"[^"]*")*[^"]*$)

Everything in blue is as mentioned before. Followed by a positive lookahead, the red part within the look ahead matches everything that is inside of the first found set of quote marks; which is negated by the ^ signs. The square brackets are what select the text between the quotes, and the quotes following each * matches the boundaries of the quotation.

The remainder matches the part we want without returning it as part of the search result, and applies the rule until the end of the string/line ($). I can't say I understand why all of the quotation mark symbols are needed, but it works.

You will need to extend the expression using brackets if required to match single quotes.

\bword\b(?=(?:_[^"']*["'][^"']*["'])*[^"']*$)


If you need to use escape characters; adding the following expression negates the quote marks preceeded by an escape character \.

(["'])(?:_(?=(\\?))\2.)*?\

In this case the \1 represents (["']) and would replace all occurrences of the quotes we want to match. The second parenthesis negates the first one if the quote is escaped.
Fallout3fan
9
Years of Service
User Offline
Joined: 9th May 2009
Location:
Posted: 28th Nov 2015 10:51
(Hopefully the mods won't get on me for doing this all over peoples WIP. It wouldn't even harm a pixel you guys.)

Anyway, I'm willing to help you out in terms of acting if you need any.
Willing to be hired as a voice actor for work and to put on a resume.
James H
11
Years of Service
User Offline
Joined: 21st Apr 2007
Location: St Helens
Posted: 9th Feb 2016 23:29
Great project(as I mentioned in someone else's thread at some point!), just curious as to how it's progressing?
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 10th Feb 2016 19:04 Edited at: 11th Feb 2016 01:08
Hey thanks man!

Progress hasn't been the same since taking a new job a few months ago, but it does continue even if there it's not much visibly new to show.

My focus has been more on Obsidian in order to build the supporting tech which I hope will help move forward more easily on Sulium.

As I port more of Sulium's code base from dba to dbx, I find more that needs to be added or changed in the transpiler to handle what I throw at it, I'm wrapping up a fulll refactoring of the transpiler making many improvements over its original process and have most of the core generic framework that Sulium is built on converted over.

I do admit though, I am itching to get back to work on the editor. Once the design tool set is functioning, visible development of the game itself will really take off.
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 11th Feb 2016 19:13
Quote: "Progress hasn't been the same since taking a new job a few months ago"


I know the feeling; good luck with finding spare time. I had to quit my job last year to spend a decent amount of time studying and developing. It is not just time, but energy and concentration which can be consumed if the job is not as helpful as it ought to be. Hopefully you will not have to make that decision.

Quote: "As I port more of Sulium's code base from dba to dbx"


That DBX concept should become a great time saver
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 15th Feb 2016 23:32
So, I've got enough of the project ported over to get a reasonable idea on how performance compares, and the results are disappointing. While the OOP implementation within a procedural language works, even after months of optimization the additional over head of resolving object references and member scopes is just too much for a large and already performance demanding project. Data processing is taking nearly 4 times longer than the equivalent in flat dba I have ideas for some additional optimizations, but I just can't see it ever bringing the overhead down to an acceptable level.

I may come back to the idea of Obsidian as an object oriented transpiler again later, but for now I have spent enough time away from Sulium. I will be scaling back on the function of the build tool to the original idea of a way to automate and manage build scope (editor, debug, & production versions of a single codebase) through a simpler preprocessor version of the build tool.

I'll also keep the array [] bracket syntax handling and some of the shorthand methods and the like.

Regardless of the result, Ive learned a good bit and have a deeper appreciation for what goes into the creation of languages.

in the end, after working with dbx syntax for some time, now going back to flat dba, there is just something undeniably comfortable, welcoming, and enjoyable about good old dbpro
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 16th Feb 2016 14:56
Well I am sure your decision is for the best, things will only improve with experience gained
Van B
Moderator
16
Years of Service
User Offline
Joined: 8th Oct 2002
Location: Sunnyvale
Posted: 19th Jul 2016 13:43
Unlocking...
The code is dark and full of errors
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 19th Jul 2016 14:44 Edited at: 19th Jul 2016 14:45
Thanks VanB

Well after setting this aside for a few months due to a lack of time to work on it, I have been back at it this week and have been making good progress on the editor, so it's time for a long delayed update!

I've recently finished a new PC build which includes a card capable of Shadowplay which I have to say I am really enjoying. It is pretty great for desktop and game recording. small files with great quality and virtually no noticeable impact on performance. It can also stream directly to Twitch so I am thinking about starting to do some livestream game dev in the future. Anyways, I took an hour and a half worth of building out the terrain editing mode in my editor broken into random 10 minute blocks. It gives a nice look at my workflow, build system, editor etc. I've also put together more of a standard demo of the current state of the editor in general.

So, while I was converting the codebase to the dbx, I was forced into better organization practices and some significant optimizations in the handling of arrays and the gui. Though I've dropped the Obsidian project, I am carrying what I've learned back into standard dba and have once again been working to refactor the whole codebase. While this has taken a good bit of time simply rebuilding what I'd already done (again, and several modules have not been redone yet) it has yeilded an increase of about 15 fps in the array optimizations alone, with another 20 or so when all the debugging code is stripped out of the release build through my scoping system, so it has been well worth the efforts.

Let's take a look at my proposed Prototype 1 feature set (holy hell, posted right about 1 year ago where has the time gone?):



Now while it doesn't *seem* like much progress has been made based on the number of new completes, much time and work had to go into underlying foundations to begin building upon. Many of the other items use much of the same code and should be able to be implemented much more quickly. Collision meshes, lights, interactables etc for instance get loaded and placed the same as standard objects, they only need a few additional settings fields that can be managed in the UI.

Also keep in mind that one little word 'place' actually drags a whole bunch of different necessary functionality along with it: translations, rotations in both world and local space, scaling, entity selection by clicking or picking from a list, multiple entity selections for applying transformations to a group of things, managing the 3d cursor, object and limb gravity to auto-fit things to the environment and so on.

Anyway, here are the videos, You will want to watch them on at least 720p HD quality for readability. Enjoy and let me know what you think about the editor, the code, the workflow, the video itself, whatever!:

Are you guys interested in more nitty gritty coding sessions like 01 - 09, or do people more prefer just the polished results in action like 10?

------

10 - Editor demo - no code here, just the current state of what it can do. (3 bugs can be seen in this, bonus points to spot them )



------

01 - Building a game editor - Adding object transformation inputs.



02 - Building a game editor - Begin adding a terrain editing mode.



03 - Building a game editor - Adding terrain editing tool and brush control UI elements.



04 - Building a game editor - Make terrain tool and brush elements functional and linked to underlying editor data.



05 - Building a game editor - Troubleshooting and fixing tool selection indictors.



06 - Building a game editor - Integrating Evolved's Advanced Lighting terrain brush module.



07 - Building a game editor - Adding brush mode toggle and brush input controls.



08 - Building a game editor - Troubleshooting and fixing brush mode and input issues.



09 - Building a game editor - Troubleshooting and fixing brush strength issues.

wattywatts
9
Years of Service
User Offline
Joined: 25th May 2009
Location: Michigan
Posted: 19th Jul 2016 17:35
Nice job on the editor! Looking forward to seeing some new gameplay videos too!
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 10th Aug 2016 20:15
Looking forward to seeing this progress. This thread was updated quite some time ago, but I have only just seen your latest work today. It is always really interesting to see how other developers operate; it was nice to read about some game development which is based on DBP for a change.
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 10th Aug 2016 21:13
Looking forward to seeing this progress. This thread was updated quite some time ago, but I have only just seen your latest work today. It is always really interesting to see how other developers operate; it was nice to read about some game development which is based on DBP for a change.
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 10th Aug 2016 23:04
Hey guys, thanks!

I've been working on getting the character module converted over to the new code which will then let me hook it up to the editor so that I can assign classes, stats, abilities, equipment, ai behaviors and all that good stuff. I've been trying to simply the inventory system a bit overall while I'm at it.


A single player RPG featuring a branching, player driven storyline of meaningful choices and multiple endings alongside challenging active combat and intelligent AI.
The Slayer
Forum Vice President
9
Years of Service
User Offline
Joined: 9th Nov 2009
Playing: (Hide and) Seek and Destroy on my guitar!
Posted: 11th Aug 2016 13:47
Pretty cool stuff, Ortu! Really liking the game editor vids! Brings back some good memories about DBPro.

Shows what DBPro (and Evolveds shaders) is capable of in talented hands.

The character looks good! Done in blender? Perhaps add more details in the texturing? Also, the animations look a bit stiff. I know it's not easy to make good animations, though.

All in all, great work, man! Keep it up!
Quote: \"Close those quotes before they start to spread!...too late! Aaaaaagh!!!
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 12th Aug 2016 05:28
Hey Slayer, thanks man.

Yes, character was done in blender. The texture is mostly just a block out, I intend to finish it up with more detail but need to fix some issues in the UV layout first.

I know what you mean about the animation, it is one of my weakest skills, the sprint in particular is pretty awkward. I will keep working on them, but lately I've been more focused on tech and functionality, I'm worried what skill I had managed to build in modeling and animation is staying to grow stale. Use it or lose it


A single player RPG featuring a branching, player driven storyline of meaningful choices and multiple endings alongside challenging active combat and intelligent AI.
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 28th Sep 2016 16:26 Edited at: 28th Sep 2016 16:35
Morning all! Time for a quick update and some freebies

So, first up, code wise I have completed moving the basic character controller over to the new coding standard, and have linked up more character stats to affect things like health and stamina regen rates, movement speed and jump ability. This leaves only the inventory, AI, and combat modules left to be refactored before I am back to where I was in terms of gameplay.

I have also been playing around with a bit of a different design concept in which the core game engine (logic, data, UI etc) could be moved into a C# backend application which would free up the frontend dbpro application to run full tilt on graphics and rendering. I whipped up a proof of concept which uses matrix1 UDP sockets for communication between the two applications over localhost. While the idea is neat conceptually and lays a solid foundation for multiplayer, it would again require an extensive rewrite for ultimately questionable performance gains and so I will not be proceeding beyond the proof of concept with it at this time. I learned a bit more about sockets in both dbpro and in .Net though, so time well spent.

On the art side, I've given Carliet's texture maps another pass adding some material detail and definition, and I've done some more work on her walk and run animations. These are still far from finished, but it is a bit better I think.

I've also gone back updated my human female base mesh based on everything I've learned from creating and animating her, providing myself with better topology for both sculpting and animation going forward. I've also finally taken the time to build out a human male base mesh and I'm looking forward to adding some new characters and more generic villagers/townsfolk/enemies type NPCs. I've begun gathering references and concepts in preparation of starting on Carliet's father and brother who will each play key roles in this prologue adventure.

Ok, free stuff? sure! Here are my new base meshes, under the following basic terms: you are free to use and modify them in your own works, but you cannot claim or sell them as your own or as part of a 'media pack'.

As they are 'base' meshes, they are rather generic and unfinished as characters. They will need detailing in order to turn them into something distinct and invdividual. They are not skinned, rigged, mapped, or textured, but they are a solid base to start from in terms of proportion, deformation, and basic anatomy.

The .fbx files can be imported into most anything and include only the base level of detail, the basic topology.

The .blend file (Blender) includes multires versions up to 3 subdivisions with the major forms and landmarks sculpted out. This is about as far as they can go before losing their generic base, from here, additional details will begin to individualize them into characters. There are a few 'pinch' points in the subdivided topology, but nothing that dynamic mesh / dynamesh can't smooth over, which you will want to use for finer detail anyway.

a quick note on the .blend file, the lights are setup as a 3 point system and should maintain their positions relative to the camera. As such, the lights and cameras are all bound to the 'Anchor Scene' object, if you want to rotate the cameras and lighting around, you will mostly want to use the anchor instead of the lights/cameras directly.

I'd be interested to see what people do with them, so if you use them, feel free to post up some pics!

.zip download here








A single player RPG featuring a branching, player driven storyline of meaningful choices and multiple endings alongside challenging active combat and intelligent AI.
Alan Brito
4
Years of Service
User Offline
Joined: 5th Nov 2014
Location:
Posted: 30th Sep 2016 19:53
Nice work, keep going

if you need to improve your animation you should try with Microsoft Kinect and some motion capture app like this.
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 11th Oct 2016 11:06
Nice tidy looking meshes. How has your .x exportation into your game been so far?
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 12th Oct 2016 01:58
Thanks man, good to see you back.

have had no major issues with .x from blender. A few things you have to be mindful of regarding bone and vertex weight limits, I had to tweak the exporter a bit to get collision working properly with Sparkys.

If you haven't seen it yet, you may want to check out the Rudolpho's DBpro 9Ex thread on the dbpro board. Fast compiles, bug and compatibility fixes, good stuff.


A single player RPG featuring a branching, player driven storyline of meaningful choices and multiple endings alongside challenging active combat and intelligent AI.
punkyb
2
Years of Service
User Offline
Joined: 8th Sep 2016
Playing: PC and Android Games
Posted: 14th Oct 2016 02:30
This project is looking great Ortu!

Some questions if you don't mind me asking:

How did you manage to get AdvancedLighting Terrain to run? Are you running it in 1024x768 resolution?

I have seen the project index and some example code that you have posted which looks nice btw! I'm curious and wondering if you have a complete barebone system that I could try, eventually and maybe I can help out add some stuff once I figured how it works.

Thanks.
Ortu
DBPro Master
11
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 14th Oct 2016 17:23
Thanks man, appreciate it!

I test the project in a variety of common resolutions anywhere from a minimum of 1024 x 768 up to 1920 x 1200 which is the largest monitor I have access to. I haven't had any issues with the terrain out of the box as configured in the terrain demo that comes with AL.

I've got access through work to a variety of different machines, graphics cards, Windows versions etc which helps a ton in compatibility testing

I do have a couple of template projects included with my build manager, and one of them is built around advanced lighting. As I mentioned in one of the other threads, I'm happy to post this up after I do a bit of clean up and write up the details.


A single player RPG featuring a branching, player driven storyline of meaningful choices and multiple endings alongside challenging active combat and intelligent AI.
punkyb
2
Years of Service
User Offline
Joined: 8th Sep 2016
Playing: PC and Android Games
Posted: 15th Oct 2016 17:48
Wow that was weird. I'm sure you probably have seen those AdvanceTerrain issues reported in Evolve's forum and here.

Maybe you can share some info on specs and what version are you using? Do you have any idea why and will it run on specific graphics card. All examples seems to work except AL. I can only run it in 1024x768 or below.

- Does it have something to do with a specific DBP version? (you mentioned 2.0 works for you, but I can't find any links)
- Maybe graphics card related? I tried it on a GT440 i5 system, Win10 and it crashes/exits. My main hardware GTX650 i5 and it only works on 1024x768 max, higher than that I get a black screen but runs.
- or a specific AdvanceLighting version, are you using the latest?

Thanks and looking forward to some tips on this AL issue and templates for reference.

Login to post a reply

Server time is: 2018-12-18 19:57:15
Your offset time is: 2018-12-18 19:57:15