Sign in

stridesgames

@stridesgames.bsky.social
347 followers 94 following 362 posts

Gamedev studio working on our dogfighter - Shattered Alliance. Custom engine. Custom tools. Happy to share other fellow indies' work upon request! Cheers!

PostsRepliesMedia
stridesgames @stridesgames.bsky.social · 13h
10/ The resource editor has the ability to refresh resources if you ever change the source - which is VERY common. All it takes is a click. During a refresh, It'll also warn u if the asset was last updated a long long time ago; meaning it could be a stale, outdated or incorrectly versioned asset.
000
stridesgames @stridesgames.bsky.social · 13h
9/ Back to textures - the full version of STAB will eventually have a texture previewer. Trust me, this previewer will be super exciting for core assets like sprites and particles. LOL
100
stridesgames @stridesgames.bsky.social · 13h
8/ Of course, that's under the assumption that ur mesh isn't poorly optimized. Ie, having unnecessary 'walls' within itself. No amount of early Z-culling can save u from a poorly optimized mesh because it's sent in as a whole.
100
stridesgames @stridesgames.bsky.social · 13h
7/ I find it a little hard to use mipmapping on font textures because it can cause aliasing if the renderer chooses to pick a lower res version to render. But otherwise, it can affect fill rate. Though, the pixel/fragment shader IS the deciding point.
100
stridesgames @stridesgames.bsky.social · 13h
6/ Texture size is calculated simply by multiplying width x height x bits per pixel. If the texture is compressed ie, DXT4, ur bpp can be 1 byte... but the loading times are gawd awfully slow. Please - don't use the medium file size as the gauge lol ... a jpg file size does NOT mean VRAM usage size.
100
stridesgames @stridesgames.bsky.social · 13h
5/ Ie, for textures, you can specify whether or not to load immediately under a thread or directly. Direct loads are not exactly faster but they are done so for splash screens. And of course u can specify the MIP Mapping levels. Do take note; once u use it - it's 2x texture size.
100
stridesgames @stridesgames.bsky.social · 13h
4/ The data object is then either streamed (serialized) or taken as a whole to be processed into textures, sound, models, shaders, etc. The process is done in the background - but the costs is still borne by the threads loading the actual asset. In STAB, there're options to determine HOW
100
stridesgames @stridesgames.bsky.social · 13h
3/ Stirring it meant that a file pointer runs through it - the purpose is to prep the cache - the data isn't at all loaded into memory or at least, not permanently. Only when u need it, the file pointer (like a needle) moves into position and reads the resource as a data object.
100
stridesgames @stridesgames.bsky.social · 13h
2/ The resource editor comes with the ability to do basic encryption which offers some protection against asset thefts but not foolproof. The purpose is to deter optimistic asset harvesters that's all. Resource packs while registered, isn't loaded into memory. Instead, it can be stirred.
100
stridesgames @stridesgames.bsky.social · 13h
1/ A resource pack can contain anything, but mostly used as assets packs. As stated, one of the major reasons for using packs is to fulfill a licensing requirement for certain ie, fonts - where the original or derived asset cannot be left out in the open as a file that can be read independently...
100
stridesgames @stridesgames.bsky.social · 13h
#screenshotsaturday resource packs are the backbone of games. Being stored in a pack helps reduce the possibility of being snooped but more importantly, fulfills the license agreement of some assets that it cannot be left out in the open. #indiedev #indiegame #indiegamedev #gamedev
1127
stridesgames @stridesgames.bsky.social · 03/10/2026
The tool can also create a patch db file based on whatever’s changed. This patch is then sent to the engine to be patched onto the current asset data. The game is then informed & updates accordingly - achieving to some degree - hot deployment. Not everything can be hot deployed though.
000
stridesgames @stridesgames.bsky.social · 03/10/2026
The only time i need to rebuild is when the assistant windows like the emitter basics carries the editing part that require a certain editing widget to help. Otherwise the user can just fill in the blanks n save.
100
stridesgames @stridesgames.bsky.social · 03/10/2026
The underlying data implementation uses the game db shared a few weeks ago. So if i need a new variable i dun need to rebuild the tool. I only need to add the variable in the specification db file n refresh. The new data if any will be saved when user input it. No migration required.
100
stridesgames @stridesgames.bsky.social · 03/10/2026
There’s one thing i had to rebuild from scratch though. The graphs. Used to be tee charts. They work but not with modern 64 bits. So the solution is that i buy a tee chart license then recompile the src under modern. I was like erm ok. Might as well i do my own.
010
stridesgames @stridesgames.bsky.social · 03/10/2026
The old forms work. But there r some quirks. Ie, styles - coz without data they assume defaults. Which removed all my coloring schemes. Lol thus some of the teething issues. Scaling is another thing to handle as well. U can see some of the widgets are slightly off as well.
010
stridesgames @stridesgames.bsky.social · 03/10/2026
Also, they do not reject command functions that are of incorrect signature lol what used to be CHAR now become WCHAR by default but since the method signature is off, it doesn’t get called. It doesn’t throw an error either Lol
010
stridesgames @stridesgames.bsky.social · 03/10/2026
Ur own code base must be wchar compatible. Otherwise it’ll be painful. Hehe
110
stridesgames @stridesgames.bsky.social · 03/10/2026
Used to be C++builder 4. Now with C++Builder 13 - but still got teething issues to get over with. :)
110
stridesgames @stridesgames.bsky.social · 03/10/2026
Lastly, we have the User Interface. This is a specification area where layouts can be designed for certain menus for certain aspect ratios or simply just placing certain widgets at certain places without the need to worry abt final x,y, width, height calculations.
100
stridesgames @stridesgames.bsky.social · 03/10/2026
case in point - this is where the LOD values are specified; where certain objects become a mere tens of triangles at a certain distance. But they need to be in Post Creation because all the required meshes might not be created in the right order (instead of enforcing it, causing it to be pain)
100
stridesgames @stridesgames.bsky.social · 03/10/2026
Post Creation is required where a mesh requires LODs since LODs are also meshes, we can't be sure if they're always created in order. Requiring that in order makes it unusually coupled; allowing mistakes to happen. Therefore, a post creation run is made to re-populate LOD with the proper the objects
100
stridesgames @stridesgames.bsky.social · 03/10/2026
Those script instructions that emit particles - will discern between an emitter vs a PEG. It'd prioritize PEGs over emitters; allowing a seamless transition between a single emitter and a group; u'll only need to pass in the right ID.
100
stridesgames @stridesgames.bsky.social · 03/10/2026
Combined Assets is when things get fun. The main highlight is PEGs - Particle Emitter Groups. It specifies a group of emitters that can be emitted at the same time; allowing complex effects without multiple code/script calls. All those "Emit XXX at YYY position" instructions etc ...
100
stridesgames @stridesgames.bsky.social · 03/10/2026
A particle emitter is a core feature on any game engine. It handles anything from star flakes, engine flares, gun muzzle flares, actual projectiles, attached smoke emitter etc. STAB gives u a huge range of settings u can use to customize ur emitter.
100
stridesgames @stridesgames.bsky.social · 03/10/2026
Once u hav core assets, we'll move 1 level up to Game Assets. 1) Sounds Banks - a collect of sounds (raw assets) 2) Sprite, Particle, Mesh Lists 3) Particle Emitters The lists can be used by particle emitters to randomly emit a particle tied to a core asset separately. Same thing as sound banks.
100
stridesgames @stridesgames.bsky.social · 03/10/2026
Core assets: 1) Sprites 2) Particles (3d textured quads) 3) Meshes A model here is defined as a starting point. A raw mesh file. A mesh here is defined as a mesh in the game. From loading to creating the vertex buffers - there are certain things that can be specified such as materials, shaders, etc
100
stridesgames @stridesgames.bsky.social · 03/10/2026
Therefore, u can load enough assets to kickstart a scene. Then let the asset loader do the rest via threads. The load is done automatically and in order. Raw Assets > Core Assets > Game Assets > Combined Assets > Post Creation and finally - User Interface. So what are core assets?
100
stridesgames @stridesgames.bsky.social · 03/10/2026
Some assets need to be loaded immediately - ie, your splash screen, mouse cursors, sounds, music that u want ur players to see first. For those, u'd want to load them immediately. However, for the rest, u can load them threaded. Which means they'll load on their own threads without interrupting
100
stridesgames @stridesgames.bsky.social · 03/10/2026
How STAB works depends on a workflow designed from ground up. Raw assets come from textures, models, sounds, collision units and music. These are sourced from actual asset files hence - linked to the resource pack it's taken from. Build your raw assets; when u wanna use them, how u wanna load them
100
stridesgames @stridesgames.bsky.social · 03/10/2026
#screenshotsaturday STAB - Strides Asset Builder. This tool is part of entire editor suite; works alongside the Script IDE but STAB is meant to work ONLY on assets. However, it's not fully completed yet; the full version will have a #wysiwyg component. #gamedev #indiegame #indiedev #indiegamedev
2122
stridesgames @stridesgames.bsky.social · 26/09/2026
#9 - OK FINALLY. The script engine has to pause too, but also, not everything has to pause. Only game scripts are paused and they're done at scope-level. Next week, we'll talk about STAB. The other half of the IDE that specifies assets.
000
stridesgames @stridesgames.bsky.social · 26/09/2026
#8 - Pause zones are defined as different layers of the game application being paused; a game pause doesn't mean the USER INTERFACE above the game is paused; hence the term Pause Zones. Rendering still occurs but frozen in factor of 0 - or whatever ur engine calls it.
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#7 - OKOK, what if the player presses ESC to access the game menu, causing the game to be paused midway??? u can do it script-side OR code-side. This handles the script-part of orchestration; the engine (or whatever u r using) will need to handle its own pause zones;
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#6 - so what happens IF a long death sequence is ongoing and the game ends; the scripts outlive the game session & continues to keep running? here's how; stop ALL scripts that is scoped under "Death Sequence" and viola. Easy. Can be done from the code side as well if desired.
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#5 - So in conclusion; script templates should be used in things that hav a consistent overall behavior; the variables within can be randomized, ie, wait time etc. They can be named or nameless. Our example here is nameless; so they can just execute without the need to be IDed.
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#4 - Script templates are also used for things like a shmup's firing sequence or pattern etc. With it, u can do a lot of things without the need to hardcode magic numbers and duplicate scripts endlessly. Also, it doesn't bloat the code duhz... coz no implicit inclusion or specialization etc.
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#3 - Naturally, performance MAY be an issue only if it's done in real-time frequency. Otherwise, giving a ship a good send-offs is one of the most satisfying things to see.
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#2 - This also can be triggered from the CODE side by passing in a list of $var and their respective replacements. A unique script is then created on the fly and executed. The idea is the same; without the need to remove unnecessary variables; since replacing $Ship alone is enough to cover most.
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#1 This is a script-side example of how a script template can be turned into an actual script with the right variables. Of course, the IDE does not assume;Using $Ship alone will lead to all uses of $Ship to appear. The idea here is to trim away those not needed. Replacing $Ship alone is sufficient.
100
stridesgames @stridesgames.bsky.social · 26/09/2026
#screenshotsaturday - Script templates. U use ur own variable convention. In our case, we just use $var as our convention. It could be @var too or #var. Replace $Ship with the actual ship ID & u'll get a proper running script! #indiedev #indiegame #indiegamedev #gamedev
1126
stridesgames @stridesgames.bsky.social · 19/09/2026
oh btw the "Auto-spec" button? that's AI. :P it'll auto-detect the keywords (actually just tokenization) then picks the value type based on a local mini-LLM (LOLz) ie, if it sees [vector], [pos], [vertex], [3dpos], [normal] it'll auto-pick Vector. this shit is AI-powered man!!! whahahahahahaha
000
stridesgames @stridesgames.bsky.social · 19/09/2026
Meanwhile, I could share some use cases for a script template. Ie, Death Sequences. A ship may have a certain way to die - ie, flip over, explode 20 times, blow something off, remove the ship when u r done etc. How is that achieved in Strides Octopus Script? - Script Templates that is.
000
stridesgames @stridesgames.bsky.social · 19/09/2026
Next week, we'll discuss script templates. They're classified into named and unnamed. (similar to functors and lambdas) A script template is like an "employement contract". Usually certain variables are left empty to be filled in (or replaced). U can introduce ur own convention to depict variables
100
stridesgames @stridesgames.bsky.social · 19/09/2026
Instructions are classified into 2 types: 1) Conditions 2) Actions Instruction Libraries are classified into 2 categories: 1) System library (common instructions) 2) Game libraries (game-specific instructions) Therefore, the next game isn't expected to inherit functors (or codes) from the previous
100
stridesgames @stridesgames.bsky.social · 19/09/2026
As such, we're able to optimize instructions to be as fast as a typical function call because retrievals are done early for objects that don't change. Is it foolproof? nope. ShipIDs that are recycled CAN cause an object impersonation issue MUCH later... leading to bugs that are inexplicable.
100
stridesgames @stridesgames.bsky.social · 19/09/2026
The functor can also log errors for emitters or ships that don't exists. For optimization, we could "compile" the instruction when loaded to: 1) Retrieve the functor early 2) Resolve statements early into direct key-value 3) Retrieve resources early (ie, the emitter) ...
100
stridesgames @stridesgames.bsky.social · 19/09/2026
With all these information, the functor - ie, EMIT_PARTICLE_RANDOMLY_ON_SHIP_WITH_OFFSET() will have the information necessary to make things happen. 1) Particle Emitter 2) ship 3) distance 4) offset vector The functor will calculate the final position, set the emitter position, then emit.
100
stridesgames @stridesgames.bsky.social · 19/09/2026
Lastly, [offsetVec] is a vector type that stores exactly 4 floats. Not literal string, but 4 floats (32-bits). When the code processes this part, it'll read 4 individual 32-bits as a float, then creates a vector4 object with it. Since it's also the bottleneck, it could also normalize the vector ..
100
stridesgames @stridesgames.bsky.social · 19/09/2026
[shipID] and [dist] in this case could be a variable which can meant one of the many things: 1) hardcoded value 2) $bind for binds 3) $global[myID] for key-value property map access This value is resolved during runtime. [dist] is always regarded as a float. ...
100