





🌟 Special thanks to our amazing supporters:
✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Benedikt][David Martínez Martí]
Hey Folks! This is quite a big build to get out before Christmas, but there's a lot to enjoy over the holidays! There's heaps of quality of life changes - check out the full changelog for all of them, but some highlights include:
Full Changelog:
Misc:
[added] New hover messages
[modified] trampoline logic: configurable cooldown limit + less drastic safety protocol + simplified cooldown timer check (thanks makmoud98)
[modified] holiday script; improved efficiency by only syncing when necessary (thanks makmoud98)
[fixed] removed chance for string hash collisions to cause problems with command ids
[modified] string hash function for something a little less likely to involve collisions
[added] kag_clap emote sprite (not implemented ingame)
[added] "g_locale_warnings" variable to log missing translations (thanks asu)
[added] Grain plants can be 'cut' by arrows when shot at the block below (thanks epsilon)
[fixed] emote menu disappears when you die (thanks epsilon)
[modified] Arrows pass through migrants (thanks epsilon)
[added] raycast check for vehicle seats (thanks epsilon)
[added] Normal arrows are ignited when passing through flames (thanks epsilon)
[fixed] unique player can only report another unique player once per round (thanks vik)
[added] Instantly return flags that fall into the void (thanks epsilon)
[fixed] bug where dead player isn't detached from quarters when sleeping (thanks epsilon)
[added] fireplace improvements for tdm - lights arrows, cooks fish, can be extinguished (thanks epsilon)
[added] archers don't auto-switch to special arrows (prevents accidentally wasting them) (thanks epsilon)
[added] !allmats, !stonewood, !woodstone commands (thanks blubahub)
[added] better crouch code (thanks epsilon)
[added] sponge handling tweaks
[added] placeholder support tier info + new extra.dat file for storing it
[added] better saw collision filter (thanks epsilon)
[fixed] emitsound for spectators (thanks monkey_feats for the report)
[added] flip and change class buttons on enemy siege engines (thanks epsilon)
[added] extra criteria for gold auto-pickup (less inventory clutter unless you are already collecting gold) (thanks epsilon)
Localisation:
[removed] guidelines from steam_content_ru file
[renamed] store_content_en.txt -> steam_content_en.txt
[added] Missing flags from the fotw steampage list (both eng/ru) (thanks biurza)
Accolades:
[added] moderation accolade support
[added] shield accolade badge
[modified] accolades_data.cfg with OKSA/Forum/Discord staff + more tournaments (thanks bunnie, paralogia)
Modding:
[fixed] bad condition in script Render::SetTransform error check
[added] new render transform functions
[added] copy operator for Random objects (thanks ShadowBlitz16 for the report)
[added] script-visible string::getHash() function
[added] join processing hooks
if present, should return -1 for "don't care", 1 for "force-join", 0 for "force-kick"
first meaningful result is used (ie, script order matters)
`int onProcessPreJoin(CRules@ this, const string &in username)`
called after token auth and banflags, before anything else is checked (even slots)
`int onProcessFullJoin(CRules@ this, const string &in username)`
called if the server's slots are full, allows bypassing the slot restriction
`int onProcessJoin(CRules@ this, const string &in username)`
called if all other checks passed, can be used to deny entry at that stage
(including to override onProcessPreJoin result)
note: the CPlayer is NOT created at this stage - you only have the username to work from
the user's token _is_ authorised, so "they are who they say they are"
[added] Matrix script namespace for generating/manipulating matrix contents into float arrays
void Matrix::Multiply(const array &in a, const array &in b, array &inout into)
void Matrix::MultiplyImmediate(const array &inout a, const array &in b)
void Matrix::SetScale(const array &inout a, float x, float y, float z)
void Matrix::SetTranslation(const array &inout a, float x, float y, float z)
void Matrix::SetRotationRadians(const array &inout a, float x, float y, float z)
void Matrix::SetRotationDegrees(const array &inout a, float x, float y, float z)
void Matrix::MakeIdentity(const array &inout a)
void Matrix::MakeOrtho(const array &inout a, f32 w, f32 h, f32 d)
void Matrix::MakePerspective(const array &inout a, f32 fov_rad, f32 aspect, f32 znear, f32 zfar)
[added] Render::ClearZ
[added] extra comments for scriptrenderexample
[added] 3d example to ScriptRenderExample
[modified] vertex normals exposed to script (Vertex nx, ny, nz properties)
[ 6080 ]
[ 1481 ]
[ 2067 ]