What. The. Hell. Is. That, OOF
Oh I just make the game-ready low poly model first, then subdivide it in ZBrush to sculpt in details to ultimately bake those details into the lower poly model that I made earlier, as the proportions are still mostly the same.
That is terrifying yet impressive!
Time for another famous tyridge horror game?!
haha I’m not sure if the TTS is good enough to use in a game, I was originally going to but was too disappointed with the clarity of results. Would still be fun to hook up to a neural network of some sort though lol
This week I finished my work duties early and had the rest of the week off to work on my own project for once, took me a day to realize I didn’t have any so I decided to go learn GOAP (Goal Ordinated Action Planner), which is a system used for making smarter AIs, you feed the planner some goals and a list of actions, the planner will then sort through all actions to form a plan with the least amount of actions to achieve the desired goal. Sounds like fun right? No… not really, I tried to write it from scratch, failed. Ended up spending about 16 hours over the course of 1.5 days watching various videos about GOAP and reading about GOAP, before finally deciding to take a look at a working example in C#. Took 3 days to translate C# into Lua, and some help from @UristMcSparks for finding a flaw in one of my actions and I now have a working GOAP AI. ^w^
You can see the place here, which won’t look like a whole lot as its all back-end coding, but I’ll kind of explain whats going on, take a look at the image below:
So, the place has 2 entities, a Logger,who’s sole purpose is to chop trees down into logs and return them to the supply pad. And the other entity is a WoodCutter, who’s sole purpose is to cut logs into firewood. Each entity is a subclass of Labourer (yes im aware this is a typo), which stores all of the import functions and propertiesfor its subclasses. Subclasses can overwrite the functions and properties of the Labourer if needed. The Labourer, is a modified GoapAgent, which essentially is where the AI starts to shape up. The GoapAgent is where the GOAP’s FSM (Finite State Machine) is stored and updated, inside of the GoapAgent is IGoap, the “interface” that allows the Planner to interact with the GoapAgent, which is how the AI moves around and preforms actions. And lastly the GoapPlanner, is what we refer to as the Planner, the Planner is responsible for creating a plan (if one is available) by being the desired goals you wish the AI to achieve, the world state of the environment around the AI and lastly the actions that AI can preform. The Planner will then sort through all possible actions and combination of actions until a plan has been formed. Should the Planner fail to return a plan, the AI will be pushed into its Idle state, but if the Planner has successfully returned a plan then the AI will begin to enact the plan until it is completed, or something goes wrong and the AI needs a new plan.
And small other tidy-bit of cool stuff for me, I re-made Furry Framework last week as well, it now properly protects Server code before replicating the framework to the Client, where as before everything (server code included) was stored in ReplicatedStorage, which we all know is open for exploiters to steal. >w< And Tuesday (or was it Monday? dunno) I added a new function to my framework for retrieving assets/scripts located in its Asset folder, best of all I don’t have to write:
Instance:WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name):WaitForChild(Name)
To find a script or asset, I just got to write:
Furry:LoadScript("Assets/(Server, Client or Shared)/Folder/Folder/ScriptName", AutomaticallyRequireScript)
Furry:GetAsset("Assets/(Server, Client or Shared)/Folder/Model")
Which is soooo much faster then the old way, in terms of typing, maybe not C-sided wise but I’m willing to accept that because I dooo noooot like typing out huge confusing lines, besides Furry stores references to objects every time you use :LoadScript(), :GetAsset(), :CreateRemote() and :GetRemote(), and those references are just like writing out the :WaitForChild() spam, only prettier and Array’s don’t have a limitation on indexes (or well a very easily achievable limit). But ye, finally getting around to learning GOAP since last November! And on top of that, I ended up learning parts of another language.
tl:dr
Me right now:
Created this graph of how many players are in each range of KDR for Phantom Forces based on the data I have.
- It only includes users that played within the last 2 weeks.
- Does not account for users banned or not.
Cool, but what could this data be used for? o:
Finishing up a huge project.
for showing how many people fall into kdr range
…for match making?
How do you make them… I keep on trying to figure it out but I hit a wall every time
no, just to show data
…hopes and dreams of playing against better players are crushed
this scared the crap out of me
maybe because i had volume at 75 lol
Got two games in development, this and a more secretive project (for the time being). Really upping the scale and budget of my projects lately. Can’t wait to share more!
(Would’ve taken more gameplay shots, Mac Screenshot system meant that I died before I could ahah)
@third448 Ayyyyeeee! You’re still kicking! Lovely cars as usual <3.
Zombies!? Zombies. I see zombies. How smart are they? what is their logic like?
They’re about as smart as a rabid donkey.
They’re smarter than zombies in previous games of this style from my observation, but at the end of the day there’s only a certain level of ‘intelligence’ a deceased reanimated body can have
I mean like, can they climb? Pathfind decently? xd
sorri i just hoping one day someone will have rather “smart” zombies. xd