Page 1 of 1

Feature lockdown for upcoming release

PostPosted: 16 Sep 2014, 01:27
by Lewin
Hi beta testers,
Release candidate 2 seems to be working well and I've reached the end of my todo lists. This release is already much later than we wanted, and unless we decide it's ready soon we could go on making minor changes for months without making much progress. I plan to create RC3 within the next week or so, and after that I don't want to add any more features, I just want to test for bugs, make minor fixes, update maps, and get the translations updated. So now is the last chance to get minor features/changes added to the upcoming release!

Are there any dynamic script commands which aren't implemented yet which you need for a map you have planned? We've added a lot of stuff recently including terrain modification. You can view a list of implemented, accepted (will probably be implemented one day), and suggested commands here:
https://code.google.com/p/castlesand/so ... ipting.txt
If there's a command you want implemented write about it here.

You can view a list of bugs fixed since RC2 here: (items marked with a +)
https://castlesand.googlecode.com/svn/t ... elease.txt

Any bugs or features I forgot about?

Re: Feature lockdown for upcoming release

PostPosted: 16 Sep 2014, 10:24
by Esthlos
If there's a command you want implemented write about it here.
Well... I didn't find a command to do this, so I'm posting it here: a way to change the passage permission of a tile from script would be nice.

About "Allow storing data between campaign missions somehow (without breaking replays)": the data stored could be saved in each replay too; this way, even if the "general" data changes, the replay would still have the original values of when it was created, which should let it play out like it should... would this work?

Re: Feature lockdown for upcoming release

PostPosted: 16 Sep 2014, 14:51
by Lewin
Well... I didn't find a command to do this, so I'm posting it here: a way to change the passage permission of a tile from script would be nice.
You can use the block object (61) like the red square in the map editor :) I updated the description for MapTileObjectSet to mention this.
About "Allow storing data between campaign missions somehow (without breaking replays)": the data stored could be saved in each replay too; this way, even if the "general" data changes, the replay would still have the original values of when it was created, which should let it play out like it should... would this work?
I'll see if I can get that implemented. Only if you promise to test it in RC3 :P

Re: Feature lockdown for upcoming release

PostPosted: 16 Sep 2014, 15:48
by Esthlos
You can use the block object (61) like the red square in the map editor :) I updated the description for MapTileObjectSet to mention this.
Thank you.
Another thing: could it be possible to check each player's camera position, zoom level, and maybe manipulate both?
(Let's say someone wants to know what area can the player see, or move the camera so that something else is seen)
If it isn't possible, would it be difficult or long to add?
I'll see if I can get that implemented. Only if you promise to test it in RC3 :P
That I should be able to do. :)

Re: Feature lockdown for upcoming release

PostPosted: 17 Sep 2014, 18:19
by RandomLyrics
Hmm for AI script i using a lot of ClosestEnemyUnit etc.
ClosesetEnemyUnit(aGroup, X, Y, Radius: integer); - returns cloesest enemy unit in radius for aPlayer or aGroup.
ClosestEnemyUnitGroupType(aGroup, aType, X, Y, Radius); group type = melee, ranged, mounted, antihorse
ClosesetEnemyUnitType; type from 0 to 27
ClosestEnemyHouse
ClosestEnemyHouseType
Its necessary to check position for every unit in group (player group and enemy group) for better precision, coz the distance between member=0 and member=20 cloud be very big.
If its not a big deal ill be very greatfull for that :>
Also i would change existing ClosestFunctions to ClosestFunctions with radius, it gives extra control, if i want entire map to be count just type radius=254 :) function will be more usefull.

Dont know if its easy to write, States.RoadConnected(fX, fY, tX, tY) - return true if these positions are connected.

Actions.GiveCarringWorker(type, ware, x, y, dir) - example: spawns serf with stone. It would be nice option to making caravans or some crazy traveling ideas.
or GiveWareToWorker - exmaple: changes "empty stonemason" to stonemason with stone ad forcing him to return to house (if not idle)

Map editor - it will be nice if editor will have option to save map in "open" directory by F11. For exmaple i have map KamRemake/TEMPMAPS - here i open and save map ( later i can just move to MapsSP or MP)

Actions.MarketPlaceBlockWare(house, ware) - block trade for specific ware, but still can store this ware

States.StatWaresMultipleTypesCount - return current ware count for player (count wares in storehouse and houses) - we could remove Types and leave only MultipleTypes if i want just one type just exmple: [13]

And i think it will be great improvement to let map editor copy/paste from other maps, this could take more work but it will really pays off.

Re: Feature lockdown for upcoming release

PostPosted: 18 Sep 2014, 17:13
by RandomLyrics
topic refresh up ^^

Re: Feature lockdown for upcoming release

PostPosted: 19 Sep 2014, 14:47
by Lewin
Another thing: could it be possible to check each player's camera position, zoom level, and maybe manipulate both?
(Let's say someone wants to know what area can the player see, or move the camera so that something else is seen)
If it isn't possible, would it be difficult or long to add?
Moving the camera is possible with: Actions.Cinematic*. However, checking the camera position is not possible, that's complicated to implement because it would need to be synchronized for multiplayer (currently other clients don't know where other players are looking). I don't think it would be useful anyway, what did you plan to use it for?
Hmm for AI script i using a lot of ClosestEnemyUnit etc.
ClosesetEnemyUnit(aGroup, X, Y, Radius: integer); - returns cloesest enemy unit in radius for aPlayer or aGroup.
ClosestEnemyUnitGroupType(aGroup, aType, X, Y, Radius); group type = melee, ranged, mounted, antihorse
ClosesetEnemyUnitType; type from 0 to 27
ClosestEnemyHouse
ClosestEnemyHouseType
Its necessary to check position for every unit in group (player group and enemy group) for better precision, coz the distance between member=0 and member=20 cloud be very big.
If its not a big deal ill be very greatfull for that :>
Also i would change existing ClosestFunctions to ClosestFunctions with radius, it gives extra control, if i want entire map to be count just type radius=254 :) function will be more usefull.
There's hundreds of possibly combinations of Closest* that a scripter might want in their script. It's too much effort for us to implement all of them, when it's already possible for the scripter to implement them by using PlayerGetAllUnits and PlayerGetAllHouses. Performance will be worse in some cases but I doubt it will be a problem. Also, some of your suggestions are trivial to implement yourself in your script. For example to check within a radius, just use the existing ClosestUnit command, then check the distance to the returned unit. If it's bigger than the radius, ignore it. Otherwise accept it. That's only a few lines of code to write.
Dont know if its easy to write, States.RoadConnected(fX, fY, tX, tY) - return true if these positions are connected.
That's very easy for us to implement, we have a system in the game that does that already :) I'll implement:
ConnectedByRoad(X1, Y1, X2, Y2): Boolean
ConnectedByWalking(X1, Y1, X2, Y2): Boolean

It could be useful to check if a passage has been opened by mining stone :)
Actions.GiveCarringWorker(type, ware, x, y, dir) - example: spawns serf with stone. It would be nice option to making caravans or some crazy traveling ideas.
or GiveWareToWorker - exmaple: changes "empty stonemason" to stonemason with stone ad forcing him to return to house (if not idle)
It's hard to make a unit jump to the middle of a task like delivering or mining, so these probably won't be implemented.
Map editor - it will be nice if editor will have option to save map in "open" directory by F11. For exmaple i have map KamRemake/TEMPMAPS - here i open and save map ( later i can just move to MapsSP or MP)
I'm not sure many people would use that... If you are saving a map, why wouldn't you want it in those folders?
Actions.MarketPlaceBlockWare(house, ware) - block trade for specific ware, but still can store this ware
We already have SetTradeAllowed, and that does not stop the market storing the ware.
States.StatWaresMultipleTypesCount - return current ware count for player (count wares in storehouse and houses) - we could remove Types and leave only MultipleTypes if i want just one type just exmple: [13]
I don't think this would be very useful, you could count it with GetAllHouses and HouseResourceAmount anyway.
And i think it will be great improvement to let map editor copy/paste from other maps, this could take more work but it will really pays off.
That's already possible :) Run two copies of the map editor in windowed mode (the clipboard will be shared). Or you can run one copy and open a different map. The clipboard will still contain whatever you copied from the previous map.

Re: Feature lockdown for upcoming release

PostPosted: 19 Sep 2014, 15:39
by Esthlos
Moving the camera is possible with: Actions.Cinematic*.
Thank you!
However, checking the camera position is not possible, that's complicated to implement because it would need to be synchronized for multiplayer (currently other clients don't know where other players are looking).
Oh, ok then.
I don't think it would be useful anyway, what did you plan to use it for?
To check the camera's position. Image

(Ok, seriously: I was thinking about the possibility to temporarily limit a player's ability to scroll over a portion of the map, without hiding it... doesn't matter, this can be worked around, by for example hiding it).

Re: Feature lockdown for upcoming release

PostPosted: 19 Sep 2014, 21:28
by sado1
Map editor - it will be nice if editor will have option to save map in "open" directory by F11. For exmaple i have map KamRemake/TEMPMAPS - here i open and save map ( later i can just move to MapsSP or MP)
I'm not sure many people would use that... If you are saving a map, why wouldn't you want it in those folders?
I use SP maps list for work in progress versions of my maps. This way I can still have the unmodified version that most of the players have, so they dont have to download my unfinished update, and I am not threatened by overwriting my WIP map by an older, more 'official' version. But a save function would help indeed, cause when I finish working on an update, I have to move it manually to MP maps. And a bonus feature - I wouldn't have to clutter SP maps list (which I dont use anyway, to be honest, but somebody else might) if I can save to an external folder.

Re: Feature lockdown for upcoming release

PostPosted: 20 Sep 2014, 12:25
by sado1
Sorry for double post, but I guess editing a yesterday post won't give my post much exposure. I lost track of new scripting commands a bit, but I don't think we have peacetime detection, and that would actually be quite useful. So,

OnPeacetimeEnd: Boolean
States.PeacetimeLength: Integer

Re: Feature lockdown for upcoming release

PostPosted: 20 Sep 2014, 12:34
by Lewin
I have added:
- States.ConnectedByRoad and States.ConnectedByWalking
- Global campaign data to store information between missions (see description near the top of the wiki)
Sorry for double post, but I guess editing a yesterday post won't give my post much exposure. I lost track of new scripting commands a bit, but I don't think we have peacetime detection, and that would actually be quite useful. So,

OnPeacetimeEnd: Boolean
States.PeacetimeLength: Integer
We already have States.Peacetime, and you can check for peacetime ending by comparing it to States.GameTime in OnTick.

Re: Feature lockdown for upcoming release

PostPosted: 23 Sep 2014, 20:22
by Esthlos
I think that a function to know the map's height and width could prove useful... can it be added, please?

Also, a function to know a player's FPS and which one is the player that is using a particular instance of KaM Remake could in my opinion prove useful for improving a script's performance on older machines, but I fear they'd both send a multiplayer game out of sync if used this way... wouldn't they?

Re: Feature lockdown for upcoming release

PostPosted: 24 Sep 2014, 01:39
by Lewin
I think that a function to know the map's height and width could prove useful... can it be added, please?
Good idea, that useful for making scripts which work on multiple maps. I've added MapWidth and MapHeight.
Also, a function to know a player's FPS and which one is the player that is using a particular instance of KaM Remake could in my opinion prove useful for improving a script's performance on older machines, but I fear they'd both send a multiplayer game out of sync if used this way... wouldn't they?
FPS and ping are not synchronised with the gameplay. We could do that somehow but I don't think it's very useful.