Shard 0.4/dev
Moderators: hoijui, Moderators
Re: Shard
It was tested here and I got no issues before release, and was retested again to make sure it ran with forebodings changes to evorts
Error message in the log suggests that the version naming containing a space is not allowed, although I have no idea why this does not cause issues here, Ill reupload in an hour or two, until then quick fix is to rename the folder so the 0.29 Spikey becomes 0.29_Spikey and then change the version tag in AIInfo.lua
Really though this should be changed as it's fugally to have to use underscores, and no lobby should have to do a search and replace, afterall what happens if I have to put in a valid _?
( reuploaded with renamed folder )
Error message in the log suggests that the version naming containing a space is not allowed, although I have no idea why this does not cause issues here, Ill reupload in an hour or two, until then quick fix is to rename the folder so the 0.29 Spikey becomes 0.29_Spikey and then change the version tag in AIInfo.lua
Really though this should be changed as it's fugally to have to use underscores, and no lobby should have to do a search and replace, afterall what happens if I have to put in a valid _?
( reuploaded with renamed folder )
- Forboding Angel
- Evolution RTS Developer
- Posts: 14673
- Joined: 17 Nov 2005, 02:43
Re: Shard
Ok, I'm finally able to test stuff again (had carpet layers here for the past several days).
I'm getting a lot of CPU spikes from spikey. I'm not sure why, but it is very often and it happens from the very start of the game.
The cpu spikes are causing what feels like lag in the game, and a definite stuttering.
I'm getting a lot of CPU spikes from spikey. I'm not sure why, but it is very often and it happens from the very start of the game.
The cpu spikes are causing what feels like lag in the game, and a definite stuttering.
Re: Shard
Its not that Spikey has gotten laggier, its that the average idle cpu usage has gone down, making the spikes more visible.
Think of it as a Mount Everest in a sea of mountain chains. What I've done is the equivalent of flattening the mountain chains, resulting in nice plains, but it makes the Mount Everest stick out
Think of it as a Mount Everest in a sea of mountain chains. What I've done is the equivalent of flattening the mountain chains, resulting in nice plains, but it makes the Mount Everest stick out
- Forboding Angel
- Evolution RTS Developer
- Posts: 14673
- Joined: 17 Nov 2005, 02:43
Re: Shard
AF, these spikes are hitting up in the 67% range. It's enough so that the game literally pauses/stutters for a moment. None of the past versions did that.
Re: Shard
No changes have been made that would cause larger spikes to occur, other than perhaps, larger numbers of units.
What you are seeing is likely a result of Shards configuration allowing for more builders, building more things, with more attack units, a natural consequence of an improved economy.
Otherwise I simply do not have enough information to do anything more than speculate.
What you are seeing is likely a result of Shards configuration allowing for more builders, building more things, with more attack units, a natural consequence of an improved economy.
Otherwise I simply do not have enough information to do anything more than speculate.
- Forboding Angel
- Evolution RTS Developer
- Posts: 14673
- Joined: 17 Nov 2005, 02:43
Re: Shard
I can't give you more information AF, It stutters, randomly and often, and it's really really bad. You could gain more information by playing it and testing it for yourself.AF wrote:Otherwise I simply do not have enough information to do anything more than speculate.
Perhaps you should play a 1v1 with spikey and experience it for yourself. I got genuinely pissed off tonight while trying to play. Missing clicks, extremely choppy game and this was just in a 1v1. What makes me even more pissed off is the fact that shard spikey plays evo better than it ever has, but these 1 second pauses are completely unbearable.
Re: Shard
I did mention it to you that in my own test plays I had experienced spikes but that they were no greater than existing spikes they were just more observable because all the overhead of a debug build was gone.
I just don't have time right now to write in timers and figure out what is the cause, so without any further information, I cant do much about it until my other responsibilities are done with and I can sit down and start a proper analysis.
Eitherway Shard is just as spikey as the previous working build, if not less, its just more obvious now.
I just don't have time right now to write in timers and figure out what is the cause, so without any further information, I cant do much about it until my other responsibilities are done with and I can sit down and start a proper analysis.
Eitherway Shard is just as spikey as the previous working build, if not less, its just more obvious now.
Re: Shard
I've started adding timers, not much yet, there's an AI option being added for them, when things take longer than a certain time it'll display the timings of main functions.
I need to do more work though to put in a proper benchmarking setup, I got other work to do
I need to do more work though to put in a proper benchmarking setup, I got other work to do
Re: Shard
Looked into source code. Looks like Shard does not support "unit given" and "unit captured" events. I was surprised that the hole game logic is moved into Lua scripts :) Also check your map "aliveUnits" in CppTestAI.cpp. It is always enlarging. You could remove items in "unit destroyed" event.
PS. I could not compile it. It requires external "swig" to be launched. Is it really required?
Also please update the first post with link to the source code and AI Wrapper. It is hard to find everything quickly.
PS. I could not compile it. It requires external "swig" to be launched. Is it really required?
Also please update the first post with link to the source code and AI Wrapper. It is hard to find everything quickly.
Re: Shard
Still optimistically trying to compile on Ubuntu; I'm getting
CMake Error at CMakeLists.txt:11 (ConfigureNativeSkirmishAI):
Unknown CMake command "ConfigureNativeSkirmishAI".
...
-- Configuring incomplete, errors occurred!
That's with both 0.29Spikey and the GitHub version from July 19th 1:30pm. Do I need some sort of dependency thing?
CMake Error at CMakeLists.txt:11 (ConfigureNativeSkirmishAI):
Unknown CMake command "ConfigureNativeSkirmishAI".
...
-- Configuring incomplete, errors occurred!
That's with both 0.29Spikey and the GitHub version from July 19th 1:30pm. Do I need some sort of dependency thing?
Re: Shard
There are some optimisations in github atm that should prove effective to anybody with the spikes being too much of an issue.
I also kept the map enlarging because I envisaged that you could keep a unit object after the units death as a record the unit existed at some point, something to refer to in hindsight, even if it was flagged as dead. I forgot about it though..
I also kept the map enlarging because I envisaged that you could keep a unit object after the units death as a record the unit existed at some point, something to refer to in hindsight, even if it was flagged as dead. I forgot about it though..
- Forboding Angel
- Evolution RTS Developer
- Posts: 14673
- Joined: 17 Nov 2005, 02:43
Re: Shard
Yeah, AF was watching evo games last night with me and others playing vs shard and it seems that AF got the spikes under control. There are still a few here and there, but from what I can tell, they are infrequent.
Re: Shard
As a note for new AI deva, building placement or closestbuildsite API calls are expensive, and totally unnecessary for factories.
Using the type variable in a unitef object, if it is equal to the string "factory", you can use the units position as the location of the build order rather than running fancy algorithms.
As well as this, I also introduced a basic load balancing heuristic for construction, in that inky one unit can progress to the next task each frame, although a unit will only wait 15 frames before giving up and doing it regardless, which helps smooth out things a little.
Those of you who know git, can get the lua files and copy them over your shard install to get the updates, although the factory optimization is in the C++ component, and will be available with v0.3
Using the type variable in a unitef object, if it is equal to the string "factory", you can use the units position as the location of the build order rather than running fancy algorithms.
As well as this, I also introduced a basic load balancing heuristic for construction, in that inky one unit can progress to the next task each frame, although a unit will only wait 15 frames before giving up and doing it regardless, which helps smooth out things a little.
Those of you who know git, can get the lua files and copy them over your shard install to get the updates, although the factory optimization is in the C++ component, and will be available with v0.3
Re: Shard
Making a basic new behaviour in Shard
Behaviours are assigned to units, and implement basic logic. For example, the Taskqueuebehaviour.lua file contains a behaviour that implements taskqueues, and the attackerbehaviour.lua file contains a behaviour called AttackerBehaviour that implements attacking, etc. Everything is named to be as obvious as possible.
To assign a behaviour to a unit, you use the behaviours.lua file. Here is the CA version of this file:
Breaking it down, we first include the files containing the behaviours, so that lua knows about them:
so taskqueues.lua and taskqueuebehaviour.lua etc get loaded
Then, we define the behaviours table. Shard uses this table to look up what behaviours to assign to what unit. Inside the table is a list of units, and each unit has a list of behaviours
So here, the arm commander ( internal engine name being armcom ), is given the taskqueuebehaviour.
If we had a behaviour called the RandomBannanaBehaviour, we could assign it to the armcom unit type, like this:
and we could assign it to corcom, like this:
If Shard cannot find an entry in the table, it will call the defaultBehaviours function to decide what behaviours ( if any) to give the unit. Here is the default implementation.
You may wish to rewrite or override this for your game.
Creating the new behaviour
Create a new file named HelloworldBehaviour.lua, and inside it, put this:
The first line says that there is a behaviour called HelloworldBehaviour. This means you also get a default implementation, so that you only write the bits you want to. We want to implement the Init method, so we can say hello world. You can see the other callouts that you can use in behaviour.lua or by seeing whats inside other behaviours.
And there we have a brand new behaviour! ^_^ To assign this behaviour to a unit, we need to make 2 modifications. So, to assign the helloworld behaviour to a peewee, we would change our tasklist as follows:
Here all we've done is add the line:
This is so that lua knows what we mean when we say HelloworldBehaviour, and then we assigned the behaviour to armpw, the internal name of the peewee.
Now, whenever a peewee is built, Shard will output the words "Hello World!" to the console!
Behaviours are assigned to units, and implement basic logic. For example, the Taskqueuebehaviour.lua file contains a behaviour that implements taskqueues, and the attackerbehaviour.lua file contains a behaviour called AttackerBehaviour that implements attacking, etc. Everything is named to be as obvious as possible.
To assign a behaviour to a unit, you use the behaviours.lua file. Here is the CA version of this file:
Code: Select all
require "taskqueues"
require "taskqueuebehaviour"
require "attackerbehaviour"
behaviours = {
armcom = {
TaskQueueBehaviour,
},
}
function defaultBehaviours(unit)
b = {}
u = unit:Internal()
if u:CanBuild() then
table.insert(b,TaskQueueBehaviour)
else
if IsAttacker(unit) then
table.insert(b,AttackerBehaviour)
end
end
return b
end
Code: Select all
require "taskqueues"
require "taskqueuebehaviour"
require "attackerbehaviour"
Then, we define the behaviours table. Shard uses this table to look up what behaviours to assign to what unit. Inside the table is a list of units, and each unit has a list of behaviours
Code: Select all
behaviours = {
armcom = {
TaskQueueBehaviour,
},
}
If we had a behaviour called the RandomBannanaBehaviour, we could assign it to the armcom unit type, like this:
Code: Select all
behaviours = {
armcom = {
TaskQueueBehaviour,
RandomBannanaBehaviour,
},
}
Code: Select all
behaviours = {
armcom = {
TaskQueueBehaviour,
RandomBannanaBehaviour,
},
corcom = {
RandomBannanaBehaviour,
},
}
Code: Select all
function defaultBehaviours(unit)
b = {}
u = unit:Internal()
if u:CanBuild() then
table.insert(b,TaskQueueBehaviour)
else
if IsAttacker(unit) then
table.insert(b,AttackerBehaviour)
end
end
return b
end
Creating the new behaviour
Create a new file named HelloworldBehaviour.lua, and inside it, put this:
Code: Select all
HelloworldBehaviour = class(Behaviour)
function HelloworldBehaviour:Init()
game:SendToConsole("Hello World!")
end
And there we have a brand new behaviour! ^_^ To assign this behaviour to a unit, we need to make 2 modifications. So, to assign the helloworld behaviour to a peewee, we would change our tasklist as follows:
Code: Select all
require "taskqueues"
require "taskqueuebehaviour"
require "attackerbehaviour"
require "HelloworldBehaviour"
behaviours = {
armcom = {
TaskQueueBehaviour,
},
armpw = {
HelloworldBehaviour,
},
}
function defaultBehaviours(unit)
b = {}
u = unit:Internal()
if u:CanBuild() then
table.insert(b,TaskQueueBehaviour)
else
if IsAttacker(unit) then
table.insert(b,AttackerBehaviour)
end
end
return b
end
Code: Select all
require "HelloworldBehaviour"
Code: Select all
armpw = {
HelloworldBehaviour,
},
- Forboding Angel
- Evolution RTS Developer
- Posts: 14673
- Joined: 17 Nov 2005, 02:43
Re: Shard
Need a new build of shard for the current spring release.
Re: Shard
Regarding Linux
Springs build system uses springs lua files with shards code, not shards lua files, the changes necessary require modifications to the cmake build files, and I haven't the knowledge in this field to fix this else I would have sorted it by now.
Springs build system uses springs lua files with shards code, not shards lua files, the changes necessary require modifications to the cmake build files, and I haven't the knowledge in this field to fix this else I would have sorted it by now.
Re: Shard
here is the Cpp AI Wrapper generated sources for spring 0.82.3.0.
Shard CMake is very simple. it does not use the engine Lua implementation, only headers from the engine. The file has 7 lines of "code", one of which is:
hard to guess what that means, hm?
for real, you just do not want to waste time on trying to get it running on linux (which would probably require you testing on linux). solution is, to clearly state that, and to always ask for help/cooperation when someone asks for Shard on linux. that means, not hoping on me doing it, but asking everyone for help, that might be tempted enough.
.. same goes for the herewith supplied generated sources, btw.
Shard CMake is very simple. it does not use the engine Lua implementation, only headers from the engine. The file has 7 lines of "code", one of which is:
Code: Select all
include_directories(BEFORE ${CMAKE_SOURCE_DIR}/rts/lib/lua/include)
for real, you just do not want to waste time on trying to get it running on linux (which would probably require you testing on linux). solution is, to clearly state that, and to always ask for help/cooperation when someone asks for Shard on linux. that means, not hoping on me doing it, but asking everyone for help, that might be tempted enough.
.. same goes for the herewith supplied generated sources, btw.
- Attachments
-
- spring_0.82.3.0_Cpp_AIWrapper_src_generated.zip
- (96.1 KiB) Downloaded 30 times