ACSUtils Wiki

An ACS library for ZDoom-based ports

User Tools

Site Tools




  • Removed all uses of local arrays as they are not supported in Zandronum 3.0.
  • Added getNumDigits.
  • Removed broken bitlog2 that returned 0 for numbers greater than 15.
  • Added flag2index as a replacement for bitlog2.
  • Added GetActorVelocityXY alias for GetActorXYVelocity.
  • Added HudSetAlign* aliases for HudSetAlignment*.

Porting guide

Replace uses of bitlog2 with flag2index.


Fixed AngleDiff outputting wrong results for some angles.

Porting guide

No changes needed.


Porting guide

  • Change all RotateVector(x, y, angle) calls to RotateVector(x, y, -angle)
  • Change all RotateVectorSC(x, y, s, c) calls to RotateVectorCS(x, y, c, s)
  • Delete decorate/changeflag.txt and copy decorate.acsutils to your project.


  • Changed PackShorts format to fix SHORT_MIN getting turned into 0
  • Fixed trunc and itrunc returning X - 1 for integer Xs.
  • Renamed HUD Library TextOrigin property to Alignment.
  • Added RotateVectorSC
  • Added AnglesToVector
  • Added AngleDiff
  • Added randint
  • Removed length2d and length3d aliases
  • Errors are logged to serverside console even when acsutils_noerrors is 1.

Porting guide

  1. Replace length2d and length3d with VectorLength and VectorLength3D respectively.
  2. Replace HudSetTextOrigin with HudSetAlignment and HUD_TEXTORIGIN_* with HUD_ALIGN_*.
  3. If you store PackShorts output in database or cvars, copy broken UnpackShorts implementation from previous version of ACSUtils and implement backwards compatibility.


This is a hotfix release to fix broken 3D HudMessages in HUD Library.

Porting guide

No changes needed.


  • Added BCSUtils
  • Added FIXED_MIN and FIXED_MAX constants for BCSUtils.
  • Fixed misc. bugs in error messages.

Porting guide

No changes needed.


This release breaks backwards compatibility. Be sure to update your code accordingly.

  • Removed or renamed a number of functions. Read the porting guide for a complete equivalence table.
  • Removed Zandronum 2.1.2 compatibility.
  • Removed NewTid system.
  • Removed SwapActivator and RestoreActivator system.
  • Removed ACSUtils settings.
  • ACSUtils error handler is now for ACSUtils only. Display of errors can be toggled using acsutils_noerrors cvar. ACSUtilsErrorHandler is ignored.
  • Completely removed SendString as it was broken and was using the wrong approach.
  • All variables and constants not meant to be used by ACSUtils users are now prefixed to avoid namespace pollution.
  • Fixed StrRepeat having wrong argument type.
  • Fixed HasColorCodes and SkipColorCodeAt interpreting literal "\\c" as a colorcode beginning.
  • rad2deg and deg2rad should now be more accurate and faster.
  • IsAlive now checks that the activator is in game.
  • Added new functions:
    • Input:
      • KeyBound
      • KeyToggled
      • KeyToggledAny
      • PlayerKeyToggled
      • PlayerKeyToggledAny
    • Bit operations:
      • getbit
      • setbit
      • clrbit
      • tglbit
      • notflag
    • Math:
      • fract
      • bitlog2
      • condTrue
      • condFalse
    • Random:
      • randbool
      • randsign
      • RandomPick
    • Strings:
      • StrIEquals
      • Case-insensitive versions of all string functions
      • StrContains
      • LeftPad
      • RightPad
      • StrIsInt
      • StrIsFixed
    • Player:
      • SetActivatorToPlayer2
      • ConsolePlayerInGame
      • ConsolePlayerName
      • ConsolePlayerTeam
      • SetActivatorToConsolePlayer
    • Dead spectator support:
      • PlayerIsDeadSpectator
      • PickRandomDeadSpectator
      • DeadSpectatorCount
    • Teams:
      • GetPlayerTeam
      • PickRandomTeamPlayer
      • TeamPlayerCount
    • ZDoom:
      • GetUserCVarFixed
      • ToggleActorInventory
      • IsServerOnly
      • IsClientOnly
      • GetGravityG
      • SetGravityG
      • jumpz2height
      • height2jumpz
  • Added new constants:

Porting guide

1. Remove ACSUTILS_HUDLIB_SAVEDSTATES and ACSUtilsErrorHandler from your project.

2. Replace any uses of removed functions according to the table:

Name Original Replacement
AngleDistCCW AngleDistCCW(a, b) abs(a - b)
AngleDistCW AngleDistCW(a, b) (1.0 - abs(a - b))
itof itof(x) (x << 16)
lang lang(s) StrParam(l:s)
byte2ang byte2ang(x) (x * 256)
ang2byte ang2byte(x) (x / 256)
GetCVarPercentage GetCVarPercentage(name) ((GetCVar(name)<<16) / 100)

3. Rename the following functions:

Original name New name
GetActorCurrentSpeed GetActorVelocity
GetActorCurrentSpeed2D GetActorXYVelocity
StrTimes StrRepeat
StrMidRange StrSlice
HasRoom HasRoomFor
StatusBarShown StatusBarVisible
TakeAllInventory TakeMaxInventory
TakeAllActorInventory TakeMaxActorInventory

4. Replace all uses of SwapActivator and RestoreActivator with ACS_NamedExecuteWithResult.

5. Recompile all script objects linked to ACSUtils to suppress warnings about renamed internal arrays.


This is a bugfix release. It now uses the MIT license.

  • Fixed GetCVarFixed crashing ZDoom when trying to access a nonexistent CVar. Now it returns 0.
  • Fixed an off-by-one error in mod.
  • Fixed some constants not using #libdefine.
  • Fixed additive blending not working in HUD Library when alpha is set to 1.0.
  • ChangeFlag now support short flag names (e.g. "NOAUTOFIRE" instead of "WEAPON.NOAUTOFIRE"). Update decorate/changeflag.txt to use this. (Thanks to The Zombie Killer.)
  • GetAspectRatio updated to a newer version.

Porting guide

  1. Update decorate/changeflag.txt.
  2. If you are using additive HudMessages in HUD Library, make sure that none of the non-additive messages in your mod became additive.



  • Added ACS_SendString() and ACS_NamedSendString() to send strings from server to client.
  • Added IsZandronum212()
  • GetAspectRatio() now triggers a ProgramError when used serverside.
  • Fixed ChangeFlag not working with INVENTORY.NOTELEPORTFREEZE.
  • All internal functions now use ACSUtils_ prefix.
  • Removed ScreenWidth(), ScreenHeight(), and AspectRatio().

Porting guide

  1. Replace all uses of ScreenWidth() and ScreenHeight() with ZDoom functions GetScreenWidth and GetScreenHeight.
  2. Replace all uses of AspectRatio() with IntDiv(GetScreenWidth(), GetScreenHeight()).


Widescreen support!

  • Mouse cursor now supports widescreen!
  • Added GetAspectRatio().
  • Added widescreen hud size functions (in widescreen module and HUD Library).

Porting guide

  • Make sure that your cursor code supports widescreen cursor coordinates.


ACSUtils is now distributed not as a collection of files, bu as a single file (generated using acsinclude).

  • Fixed warnings about mismatched array sizes on map scripts.
  • Added swap().
  • atoi() and atof() now return INT_MAX multiplied by sign instead of 0 on overflow.
  • Removed ftoi().

Porting guide

  1. Remove all ACSUtils files from your project, except acsutils.acs. acsutils.acs now contains the whole ACSUtils.
  2. Replace all uses of ftoi() with floor().
  3. Review all uses of atoi() and atof().


Fixed duplicate actor warnings in changeflag.txt

Porting guide

No changes needed.


ChangeFlag, IsGZDoom, and improved cursor API! Thanks to The Zombie Killer for allowing ACS-X technologies to be included into ACSUtils!

  • Added ChangeFlag! (implementation from ACS-X)
  • Fixed vertical cursor movement being too slow
  • Added CursorMotionX() and CursorMotionY() and changed CursorDeltaX() and CursorDeltaY() to return the actual delta.
  • Added EnableCursorWrapX() and EnableCursorWrapY().
  • Added GZDoom identification (implementation from ACS-X).
  • Zandronum identification does not require a database anymore (implementation from ACS-X).
  • IsOpenGL() now does not return true in ZDoom with vid_renderer 1.
  • Added ClearHudMessageBold().
  • Added constants for log2(e) and log2(10).

Porting guide

  • If you were using CusrorDeltaX/Y and need them to return non-zero values at the edges of the screen, replace their uses with CursorMotionX/Y.

Fixed a very dumb bug in fixed-point logarithms that I made when adding them to ACSUtils.


New logarithm functions and proper IntDiv by TechnoDoomed1. Thank you!

  • Added logarithm functions.
  • IntDiv now handles any numbers whose ratio is less than 32768.
  • Added SyncSpeed().
  • Added ACSUtilsVersion().

Porting guide

No changes needed.


This is a bugfix release.

  • Renamed GetCVarFixed to a_GetCVarFixed for GDCC compatibility.
  • HudSetCameraAngles no longer inverts the pitch.
  • Fixed StrIsAscii storing an integer in a str variable.

Porting guide

  1. Replace all uses of GetCVarFixed with a_GetCVarFixed.
  2. Invert the second argument to HudSetCameraAngles.


New features!

  • Added full software renderer support to 3D HudMessages.
  • Added mouse cursor API (acscursor).
  • IsOpenGL() now emits a ProgramError when used serverside.
  • IsOpenGL() is now very slightly more accurate.
  • Hudlib saved state stack size can now be configured in ACSUtils settings.
  • Fixed IsServer() killing the calling script in ZDoom.
  • Added actor property shorthands with bandwidth optimization.
  • Added ACSUtils version information constants.
  • Added npo2().
  • Added mod().
  • Added cond().
  • Renamed sign() to sgn() to reduce name clashes.

Porting guide

  1. Add #define ACSUTILS_HUDLIB_SAVEDSTATES 16 ACSUtils settings before #include “acsutils.acs”. You can change the amount of saved states if needed.
  2. Replace all uses of sign() with sgn().
  3. Review all uses of IsOpenGL().
  4. If you require hudlib to use true 3d projection in software, use HudSetProjectionMode(HUD_PROJECTION_YSHEARING).
  5. If you are using 3D hudmessages serverside, use HudSetProjectionMode(HUD_PROJECTION_3D) to fix the ProgramError about using IsOpenGL() serverside.


This is a maintenance release that enables ACSUtils to be used in AOW-scale projects.

  • All global (map) variables of ACSUtils have been put into an array due to ZDoom's 128 map variable limit. Now ACSUtils uses just 11 map variables and can be used in big projects.
  • Fixed IsServer() returning false in singleplayer.

Porting guide

  1. Review all uses of IsServer().


This is a bugfix release.

  • Added IsServer() function.
  • Added StrAddInt(), StrAddFixed(), and StrAddChar() functions.
  • IsOpenGL() now takes gl_nogl into account.
  • Renamed ActorName() to GetActorName() to reduce name clashes.
  • Fixed ParseFixed() returning an error on integers.
  • Fixed empty strings parsing as 0.

Porting guide

  1. Replace all uses of ActorName() with GetActorName().
  2. Review all code that relies on number parsing to see whether it's affected by the bug fixes.


This is a release that overcomes the 256 functions per compiled file limitation.

  • Added #nocompact to fix ZDoom crashes when there are more than 256 functions in a compiled file.
  • Fixed BCC compatibility.

Porting guide

No changes needed.


  • Error handler is now a function, not a script.
  • Made public constants use #libdefine instead of #define, making them usable in map scripts.
  • Added GiveMaxInventory, GiveMaxActorInventory, TakeAllInventory, TakeAllActorInventory.
  • Added IntDiv
  • Added lang
  • Fixed ceil and iceil incorrectly adding 1 to already round numbers (ceil(1.0) == 2.0)
  • Optimized SetInventory and SetActorInventory for multiplayer.

Porting guide

  1. Replace your error handling script with a function and remove ACSUTILS_ERROR_HANDLER.
  2. Review any uses of ceil.
new/changelog.txt · Last modified: 2018/02/27 22:05 by korshun