Search This Blog

Showing posts with label github. Show all posts
Showing posts with label github. Show all posts

Tuesday, October 22, 2019

This Week in GameGuru - 10/21/2019

GameGuru News


Some of the secret squirrel sleuths found this gem buried in GitHub - make of it what you will:
https://github.com/TheGameCreators/GameGuruRepo/pull/631/commits/c570fedd8cd8ccac8e5652f8bfd4b293a775d458



What's Good in The Store


There's a lot of good one off products this week:



Corrosion's Survival Scripts are in a pack.  https://www.tgcstore.net/pack/11155

Fredgames77 made some highly detailed zombie garden gnomes. https://www.tgcstore.net/pack/11154


Third Party Tools and Tutorials


<This space for rent>

Sorry guys, nothing new here :(


Random Acts of Creativity (WIPs)


Galaxy Hauler (By Honkeyboy) had a video put up that is fairly enticing:
https://www.youtube.com/watch?v=4-GaQHaQZ4A

Zelick's project "Neir" had some updates here: https://forum.game-guru.com/thread/220415?page=1#msg2622300

Naelurec by Old Flak has put up some more great screenshots:

I love seeing a project with custom modelling. This kind of thing is what this community needs - more homebrew stuff with consistent art direction and quality design.  It should really stand out once it's completed.

Robert Hindle (Bod) and AmenMoses's latest work on a flyable spitfire looks great, as one could reasonably expect! https://vimeo.com/367610915

Free Stuff


If you didn't get Granada's excellent free shotgun last week, get it this week! https://forum.game-guru.com/thread/221213

https://www.tgcstore.net/product/33551 AlexGCC made a free 'Russian Sign'!



In My Own Works

Life is still hectic with the basement remodel, work issues, new baby, etc.  However I've been slowly nicking away at getting minor things taken care of as well as outstanding issues.  I've recently begun making new skies for space settings again - but none of the newest batch has been up to par.  I'll probably release the failures as freebies once again.

Lastly, my Cyberpunk Noir weapons kit is FINALLY fixed and on the store.  If you are a book owner, ask me for a free key so you can get a copy of these for free.

Monday, September 16, 2019

This Week in GameGuru - 09/16/2019

This article represents solely the opinion of the author and does not reflect the opinions or views of r The Game Creators, it's employees, or subordinates.  It likewise does not reflect the views or opinions of www.tgcstore.net and it's staff.  The author receives no compensation for this work and it is done solely as a service for the GameGuru community at large.



GameGuru News


It's a big week in GameGuru with some huge moves in store for the engine.  Just take a look at some of the commits over at GitHub for an idea of what's going on:



Time to unpack this for the less technical.  This last week a beta update was released for closed beta testers.  The primary focus on this was the addition of Preben's draw call optimizer. 

Now draw calls, straight up, are sort of the end-all be-all for performance with respect to rendering. Sure, there's other variables but if your draw calls are too high, then your renderer is working too hard and it will cause bad performance. 

From my book An Introduction to GameGuru: Chapter 21 "Optimization" -
Draw calls represent at least one, possibly more, of every object being ‘drawn’ on the screen.  This is a highly important bit of info, likely the most important performance information statistic next to the raw FPS count.  Draw calls should be around 250 with a top end of around 500.  Once they go beyond those numbers, it will start to seriously drain performance on even top end systems.  The trick here is to run through your level and if you see a place where it spikes, try to determine which objects can either be replaced or removed to kill the performance bottleneck.  Please note that officially draw calls are actually each material of an object, so PBR objects significantly increase draw calls and can easily overwhelm a scene if you don’t take careful steps to optimize object quantities and positions.

What Preben has done is create a draw call batcher that groups together draw calls for similar entities to avoid calling the same thing many times.  This reduces the total number of draw calls considering that most entities are not only used one time in a level but a great many times. In fact, he even expands on my above explanation by detailing that every 'draw call' reported in GG is actually to be multiplied by 10.  This multiplicative effect means that the difference between 500 and 1000 is much more pronounced and can have a massive performance drain.

He explains it very well here in a video:
https://www.youtube.com/watch?v=2EDVD2I6OdY

Initially the beta had some serious issues that were rapidly remedied and so far the results have been excellent with often 30 FPS added to a single scene WITH NO OTHER OPTIMIZATIONS.

Moreover this now has trickled into a Public Preview (open beta) build which will help hammer out the next big release.  I'm really proud of how TGC and company have stepped up after nearly half a year of no updates - if the keep rolling on this we may yet see this engine become vastly more capable yet.

Also a reminder that the contest is still ongoing with a huge amount of prizes available.  I am still considering if I want to give a copy of the book away but I think I might, just to help kickstart this thing.  What do you all think?


What's Good in The Store



While not *TECHNICALLY* on the store it bears mentioning that a new pack was released by TGC. As usual, their quality is generally a cut above most store content and so it's a great value if you are looking to supplement the basic 'modern warfare' assets that come with GameGuru.


This is, in my opinion, a clear winner for TGC.  It supplements a model base that comes with every instance of GameGuru but gives it much more to work with.

On the store itself there's a huge amount of fantastic work available for great prices.

Notably this week:
Pasquill posted a beautiful Russian utility truck:

Gtox posted this great giant ant (ala 'it came from the desert'):
He also made a pretty wicked scorpion:
Teabone made a very detailed orange, focusing on his strong point of easy, simple set pieces:

There's this really cool retro music pack for sale: https://www.tgcstore.net/pack/11152

And Team Wolf posted an 'all my models (152 in total)' pack for 12 dollars!  This is a fantastic deal and I'm actually buying it after I finish writing this post up. 

This is a mere 10% of the high quality models you receive for $12
Really good quality stuff for a very reasonable price - I urge you to give it a look here: https://www.tgcstore.net/pack/11151

It also bears noting that there are two very superb artists putting up some great deals on their own works, notably BSP and Rolfy - definitely check out their store pages!


Free Stuff


This week a number of freebies went up.

SmallG apparently has gone from scripting to model design in an apparent departure and has gifted the community with a few new pieces to work with:
A low poly witch
A robot
and A simple low-poly car

Newcomer Fumar posted a gorgeous model of a Church: https://forum.game-guru.com/thread/221118

And belidos gifted us with a low-poly style tower: https://forum.game-guru.com/thread/218362#msg2620561

Thanks so much to all the creators who give to the community!

Third Party Tools and Tutorials


First of all is this really great FPE file editor with model viewer.  This is a pretty interesting tool I'd love to see integrated into the editor itself.

Apparently bored of the rings is still giving out his old tools via private message if you are interested.


Random Acts of Creativity (WIPs)

Cybernessence dropped in and gave a huge amount of info on his project here: https://forum.game-guru.com/thread/213870?page=7#msg2620877



Apparently he's been using the drawcall optimizer to great effect!


In My Own Works


Nothing I can discuss currently but more details to come so keep an eye on this space.
Once again, thank you to everyone who has purchased my book or helped with it's production. I really appreciate all the kind words and encouragement!

Wednesday, September 26, 2018

New Lua Commands since 5/12/2017


So recently I’ve found myself back in Game-Guru for more significant lengths of time than I’ve had in a while.  Up to this point I’ve mostly been relegated to occasionally dipping my toes in the water while things are updating at a furious pace due to github contributions. 
So I found myself troubleshooting some of my weather system functions and realized there was a significant body of added functions since the last major version (5.12.2017/DX9).
The DX9 edition was fairly stable, so a lot of people use it – however since then a large amount of updated Lua commands have been added with no real clear list of what’s been changed between now and then.  So without any further fanfare, here’s a simple list capturing most of the changes listed on github.  They were obtained by checking the history of changes on github so if I missed any, please let me know.
Most of this is documented in global.lua itself, albeit not as a straight ‘diff’ as this is intended to be.

ENTITY CONTROL

ScaleObject : ScaleObject( obj, x, y, z ) -- Scales object in all axis (Note: uses object id not entity!)
***** The following four functions return multiple values, if you do not need them all just replace
***** the ones you don't need with '_' for example : _, _, _, Ax, Ay, Az = GetEntityPosAng( e ) would
***** just give you last three of the 6 values returned
GetObjectPosAng : x, y, z, Ax, Ay, Az = GetObjectPosAng( obj ) -- returns position and Euler angles of object
GetEntityPosAng : x, y, z, Ax, Ay, Az = GetEntityPosAng( e )   -- returns position and Euler angles of entity
GetObjectColBox : xmin, ymin, zmin, xmax, ymax, zmax = GetObjectCollBox( obj ) -- returns collision cube of object
GetEntityColBox : xmin, ymin, zmin, xmax, ymax, zmax = GetEntityCollBox( e )   -- returns collision cube of entity
Collision box is defined by coordinates of two opposing corners, from these it is easy to calculate the size of the object
GetEntityWeight : weight = GetEntityWeight( e ) -- returns the Physics weight value of the entity
GetObjectScales : xs, ys, zs = GetObjectScales( obj ) -- returns scale values of object in all axis (Note: uses object id not entity!)
SetRotationYSlowly : SetRotationYSlowly(e,destangle,smoothvalue) -- where e is the entity and a smooth value of 100 is immediate, where 50 takes twice as long to rotate to destangle (Dest Angle)
RotateToPlayerWithOffset(e,angleoffset) – Rotates an entity to the player with a euler angle offset.
SetHoverFactor(e,v) – Sets E entity’s hover factor by V value. Presumably used for flying objects.
SetEntityHealthSilent(e,v) – Unsure of actual function but obviously it sets an entity’s health… silently?  Needs testing.


JOYSTICK/GAMEPAD/VR CONTROLS

NOTE: Joystick and VR function before was simply a placeholder.  So these commands were there before but didn’t actually work – now they do, hence their inclusion below.
JoystickX: JoystickX() -- returns a value between -1000 and +1000 representing X axis of controller
JoystickY: JoystickY() -- returns a value between -1000 and +1000 representing Y axis of controller
JoystickZ: JoystickZ() -- returns a value between -1000 and +1000 representing Trigger of controller
PromptLocalForVR(e,str,vrmode) – Unsure, bit it does have actual function now.
PromptLocal(e,str) – some kind of vr related function unfortunately poorly documented for now.
JoystickHatAngle: JoystickHatAngle() -- command used by the default player control mechanism
JoystickFireXL: JoystickFireXL() -- command used by the default player control mechanism
JoystickTwistX: JoystickTwistX() -- command used by the default player control mechanism
JoystickTwistY: JoystickTwistY() -- command used by the default player control mechanism
JoystickTwistZ: JoystickTwistZ() -- command used by the default player control mechanism
SetGamePlayerStatePlrZoomInChange: SetGamePlayerStatePlrZoomInChange() -- command used by the default player control mechanism
GetGamePlayerStatePlrZoomInChange: GetGamePlayerStatePlrZoomInChange() -- command used by the default player control mechanism
GetDynamicCharacterControllerDidJump: x=GetDynamicCharacterControllerDidJump() -- returns 1 if controller jumped

SOUND CONTROL

SetEntityString : SetEntityString ( e, slot, string ) -- where e is the entity number and slot (0-4) to write the string into.  I believe this probably allows you to change sounds or configure them programmatically.
GetEntityString : GetEntityString ( e, slot ) -- where e is the entity number and slot (0-4) is the sound slot index.  The above supposition is confirmed by this.
LoopNon3DSound(e,v) – entity/value.  Loops a slotted sound without 3d, so no distance modifiers just same volume at any distance.

WATER SHADER CONTROLS

**Water Shader Settings*** Look into the shader for informations about these values(open effectbank/reloaded/water_basic.fx with i.e. notepad)
SetWaterHeight(value) – Sets height of water plane.
SetWaterColor(red,green,blue) – Sets RGB of water plane.
SetWaterWaveIntensity(value) – Sets intensity of waves
SetWaterTransparancy(value) – Sets transparency of waves
SetWaterReflection(value) – Sets reflection value of water surface
SetWaterReflectionSparkleIntensity(value) – Specularity of water surface, I believe
SetWaterFlowDirection(x,y,speed) -- small tip: -1 =east/north; 1=west/south - speed is a multiplier of the flowdirection(higher => fast flow)
SetWaterDistortionWaves(value) --  Water noise level
SetRippleWaterSpeed(value) – how fast the ripples move
GetWaterHeight() – returns height of water
GetWaterWaveIntensity() – returns intensity of water
GetWaterShaderColorRed() – returns water plane R value
GetWaterShaderColorGreen() – returns water plane G value
GetWaterShaderColorBlue() --  returns water plane B value
GetWaterTransparancy() – returns water transparency value
GetWaterReflection() --  returns water reflection value
GetWaterReflectionSparkleIntensity() --  Returns ‘water reflection sparkle intensity’ value
GetWaterFlowDirectionX() – returns water flow direction X
GetWaterFlowDirectionY() – returns water flow direction Y
GetWaterFlowSpeed() – returns water flow speed
GetWaterDistortionWaves() – returns water distortion wave setting
GetRippleWaterSpeed() – returns water ripple speed

LIGHT AND SKY CONTROL

SetSkyTo(str) : str=foldername of the sky you want to change to (i.e. ChangeSkyTo("dark"))
GetEntityLightNumber( e ) --  Returns entity light number (HALLELUJAH!)
x, y, z = GetLightPosition( lightNum ) – Presumably returns light XYZ position into 3 separate variables, needs testing.
r, g, b = GetLightRGB( lightNum )  -- Presumably fills RGB values into 3 separate variables.  Needs testing.
GetLightRange( lightNum ) --  Returns light range.
GetLightAngle : xv, yv, zv = GetLightAngle( LightNum ) -- returns the angle vector of the dynamic light specified
SetLightAngle : SetLightAngle( lightNum, xv, yv, zv ) -- sets the angle vector of the specified light ( e.g. 0, 0, 1 would be 'North' or +Z axis )
SetLightPosition( lightNum, x, y, z ) – Lightnum=entity light number.  Sets physical position.
SetLightRGB( lightNum, r, g, b ) --  Lightnum=entity light number.  Sets RBG value of light.
SetLightRange( lightNum, range )   -- range is 1 .. 10000, values outside range are capped; configures output range of light.

FUNCTION FOR FUNCTIONS

SetPreExitValue: SetPreExitValue(e,value) -- where e is the entity and a value of 2 will exit preexit function.  This is invoked at runtime and allows a function to return a value if it exits before being allowed to return a code properly – I think.  Needs testing but most of you won’t be using this unless you took actual programming classes :P

PARTICLE CONTROLS (!)

ParticlesGetFreeEmitter:  iEmitterID = ParticlesGetFreeEmitter() -- returns the index of a free particle emitter object
ParticlesAddEmitter: ParticlesAddEmitter(animationSpeed,startsOffRandomAngle,offsetMinX,offsetMinY,offsetMinZ,offsetMaxX,offsetMaxY,offsetMaxZ,scaleStartMin,scaleStartMax,scaleEndMin,scaleEndMax,movementSpeedMinX,movementSpeedMinY,movementSpeedMinZ,movementSpeedMaxX,movementSpeedMaxY,movementSpeedMaxZ,rotateSpeedMinZ,rotateSpeedMaxZ,lifeMin,lifeMax,alphaStartMin,alphaStartMax,alphaEndMin,alphaEndMax,frequency) -- create a particle emitter under the index iEmitterID and specified parameters (yes, the command really is that long).
ParticleAddEmitterEx: (as above with additional parameters) e, limbindex, particle image ID, particle frame count -- where e is the entity to assign particle to
ParticlesDeleteEmitter: ParticlesDeleteEmitter ( iEmitterID ) -- delete a particle emitter under index iEmitterID
ParticleAddEmitterEx: (as above with additional parameters) e, limbindex, particle image ID, particle frame count -- where e is the entity to assign particle to



DECOMMED AI CONTROLS

Lastly, a large amount of OLD AI commands were decommissioned.  This means new ones are likely on the way with the updated AI changes in the pipeline.
CharacterControlManual(e) – decommed
CharacterControlLimbo(e) – decommed
CharacterControlUnarmed(e) – decommed
CharacterControlArmed(e) – decommed
CharacterControlFidget(e) – decommed
CharacterControlDucked(e) – decommed
CharacterControlStand(e) – decommed
SetCharacterToWalk(e) – decommed
SetCharacterToRun(e) – decommed
SetCharacterToStrafeLeft(e) – decommed
SetCharacterToStrafeRight(e) – decommed
SetCharacterVisionDelay(e,v) – decommed
LockCharacterPosition(e,v) – decommed
UnlockCharacterPosition(e,v) – decommed