<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>Arx Libertatis Bug Tracker ~ Upcoming fixes</title>
		<link>https://bugs.arx-libertatis.org:443/</link>
		<description>Arx Libertatis Bug Tracker</description>
		<language>en-us</language>
		<image>
					<url>https://bugs.arx-libertatis.org:443/header.png</url>
					<title>Arx Libertatis Bug Tracker ~ Upcoming fixes</title>
			<link>https://bugs.arx-libertatis.org:443/</link>
		</image>
		
		<item>
			<title>#93 - Ratman backflip animation at the end of the intro fails sometimes</title>
						<description><![CDATA[http://www.youtube.com/watch?v=m6NgKPRFcuM

This bug is pretty old.

Correct animation: http://youtu.be/TterXWQhcmM?t=2m17s]]></description>
						<pubDate>Thu, 17 Jul 2025 14:51:02 GMT</pubDate>
			<link>https://bugs.arx-libertatis.org:443/arx/issues/93</link>
			<guid>https://bugs.arx-libertatis.org:443/arx/issues/93</guid>
		</item>
		
		<item>
			<title>#1618 - [D2EC84FA] arx.exe!ARX_CHANGELEVEL_Pop_IO() [changelevel.cpp:2127]</title>
						<description><![CDATA[Assertion Failed at ChangeLevel.cpp:2127: item->show == SHOW_FLAG_IN_INVENTORY

Unhandled exception

Exception code: BREAKPOINT


 Instruction address: 0x969f58
 Stack pointer: 0x82ebb0
 Frame pointer: 0x82efb8

Callstack:
 Warning: WoW64 process detected, stack may be corrupted!
 arx.exe!0x969f58
 arx.exe!0x96a425
 arx.exe!0x96b487
 arx.exe!0x9613b8
 arx.exe!0x86f8db
 arx.exe!0x86f15e
 arx.exe!0x880a33
 arx.exe!0x95a13a
 arx.exe!0x95a13a
 arx.exe!0xa8b601
 KERNEL32.DLL!BaseThreadInitThunk()
 ntdll.dll!RtlGetFullPathName_UEx()
 ntdll.dll!RtlGetFullPathName_UEx()
Symbols:
  1  arx.exe!ARX_CHANGELEVEL_Pop_IO [changelevel.cpp : 2127 + 0x19]
  2  arx.exe!ARX_CHANGELEVEL_PopAllIO [changelevel.cpp : 2242 + 0x1c]
  3  arx.exe!ARX_CHANGELEVEL_PopLevel [changelevel.cpp : 2414 + 0x16]
  4  arx.exe!ARX_CHANGELEVEL_Change(long,std::basic_string_view,float) [changelevel.cpp : 354 + 0x0]
  5  arx.exe!ArxGame::doFrame() [arxgame.cpp : 1158 + 0x32]
  6  arx.exe!ArxGame::run() [arxgame.cpp : 1077 + 0x0]
  7  arx.exe!utf8_main(int,char * * const) [startup.cpp : 165 + 0x7c]
  8  arx.exe!WinMain [windowsmaingui.cpp : 48 + 0xd]
  9  arx.exe!WinMain [windowsmaingui.cpp : 48 + 0xd]
 10  arx.exe!__scrt_common_main_seh [exe_common.inl : 288 + 0x1a]]]></description>
						<pubDate>Thu, 17 Jul 2025 14:20:11 GMT</pubDate>
			<link>https://bugs.arx-libertatis.org:443/arx/issues/1618</link>
			<guid>https://bugs.arx-libertatis.org:443/arx/issues/1618</guid>
		</item>
		
		<item>
			<title>#1622 - [91D20FAA] arx.exe!Entity::~Entity() [Entity.cpp:255]</title>
						<description><![CDATA[Illegal storage access

Exception code: ACCESS_VIOLATION


 Instruction address: 0x7ff6ad8cb3b2
 Memory accessed: 0xfffffffffffffff8
 Stack pointer: 0x3eb20fea10

Callstack:
 arx.exe!0x7ff6ad8cb3b2
 arx.exe!0x7ff6ad73d2f8
 arx.exe!0x7ff6ad73da81
 arx.exe!0x7ff6ad7539c6
 arx.exe!0x7ff6ad724610
 arx.exe!0x7ff6ad72118e
 arx.exe!0x7ff6ad7204ee
 arx.exe!0x7ff6ad72a760
 arx.exe!0x7ff6ad7369eb
 arx.exe!0x7ff6ad8347aa
 arx.exe!0x7ff6ad983a62
 KERNEL32.DLL!BaseThreadInitThunk()
 ntdll.dll!RtlUserThreadStart()
Symbols:
  0  arx.exe!std::basic_string::_Tidy_deallocate() [xstring : 4622 + 0xf]
  1  arx.exe!Entity::~Entity() [Entity.cpp : 255 + 0x5]
  2  arx.exe!Entity::destroy() [Entity.cpp : 330 + 0x26]
  3  arx.exe!ARX_PLAYER_Frame_Update() [Player.cpp : 1720 + 0x9a]
  4  arx.exe!ArxGame::render() [ArxGame.cpp : 1979 + 0x0]
  5  arx.exe!ArxGame::doFrame() [ArxGame.cpp : 1269 + 0x0]
  6  arx.exe!ArxGame::run() [ArxGame.cpp : 1133 + 0x0]
  7  arx.exe!runGame() [Core.cpp : 246 + 0x1f]
  8  arx.exe!utf8_main(int,char * * const) [Startup.cpp : 168 + 0x0]
  9  arx.exe!WinMain [WindowsMainGUI.cpp : 48 + 0xe]
 10  arx.exe!__scrt_common_main_seh [exe_common.inl : 288 + 0x21]]]></description>
						<pubDate>Thu, 17 Jul 2025 16:03:51 GMT</pubDate>
			<link>https://bugs.arx-libertatis.org:443/arx/issues/1622</link>
			<guid>https://bugs.arx-libertatis.org:443/arx/issues/1622</guid>
		</item>
		
		<item>
			<title>#1592 - [4463AC80] arx.exe!findSpotForDraggedEntity() [Dragging.cpp:106]</title>
						<description><![CDATA[Illegal storage access

Exception code: ACCESS_VIOLATION


 Instruction address: 0x7ff6972457ac
 Memory accessed: 0x48
 Stack pointer: 0xcce3beef50

Callstack:
 arx.exe!0x7ff6972457ac
 arx.exe!0x7ff6972469da
 arx.exe!0x7ff6972e6a29
 arx.exe!0x7ff6971a34b4
 arx.exe!0x7ff6971a4b21
 arx.exe!0x7ff6971a128e
 arx.exe!0x7ff6971a05ee
 arx.exe!0x7ff6971aa860
 arx.exe!0x7ff6971b6738
 arx.exe!0x7ff6972b470a
 arx.exe!0x7ff697404d82
 KERNEL32.DLL!BaseThreadInitThunk()
 ntdll.dll!RtlUserThreadStart()
Symbols:
  0  arx.exe!findSpotForDraggedEntity(glm::vec,glm::vec,Entity *,Sphere) [Dragging.cpp : 106 + 0x0]
  1  arx.exe!updateDraggedEntity() [Dragging.cpp : 257 + 0x31]
  2  arx.exe!ARX_SCENE_Update() [Scene.cpp : 1399 + 0x0]
  3  arx.exe!ArxGame::updateLevel() [ArxGame.cpp : 1794 + 0x0]
  4  arx.exe!ArxGame::render() [ArxGame.cpp : 2035 + 0x0]
  5  arx.exe!ArxGame::doFrame() [ArxGame.cpp : 1269 + 0x0]
  6  arx.exe!ArxGame::run() [ArxGame.cpp : 1133 + 0x0]
  7  arx.exe!runGame() [Core.cpp : 246 + 0x1f]
  8  arx.exe!utf8_main(int,char * * const) [Startup.cpp : 168 + 0x0]
  9  arx.exe!WinMain [WindowsMainGUI.cpp : 48 + 0xe]
 10  arx.exe!__scrt_common_main_seh [exe_common.inl : 288 + 0x21]]]></description>
						<pubDate>Thu, 17 Jul 2025 17:01:36 GMT</pubDate>
			<link>https://bugs.arx-libertatis.org:443/arx/issues/1592</link>
			<guid>https://bugs.arx-libertatis.org:443/arx/issues/1592</guid>
		</item>
		
		<item>
			<title>#1593 - Add script system variables to see if an entity can see or is seen by another entity</title>
						<description><![CDATA[Motivational example: [https://old.reddit.com/r/ArxFatalis/comments/r91cd8/what_is_the_behavior_of_npcinsight/ an enemy that only moves when the player is not looking at it].

For example `^cansee_` would return
* -2 if  is behind the calling entity
* -1 if  is outside the field of view of the entity but not strictly behind
* 0 if  is inside the field of view of the calling entity but definitely fully occluded (e.g. in another room)
* 1 if  is inside the field of view of the calling entity and possibly at least partially visible
* 2 if  is inside the field of view of the calling entity and is definitely at least partially visible (raycast hit from the head/view vertex of the calling entity to any group origin of ?)
* 3 if 's head is definitely visible from the calling entity (raycast hit from the head/view vertex of the calling entity to the head vertex of )

`^seenby_…` would have the same logic but the two entities reversed.

Should these variables check the distance at all? Maybe only check that the entity is within the draw distance (otherwise return -1/-2) and then the script can also check `^dist_` if it wants a lower limit.]]></description>
						<pubDate>Thu, 17 Jul 2025 14:31:07 GMT</pubDate>
			<link>https://bugs.arx-libertatis.org:443/arx/issues/1593</link>
			<guid>https://bugs.arx-libertatis.org:443/arx/issues/1593</guid>
		</item>
		
		<item>
			<title>#1599 - ON HIT event not specific enough when detecting spells</title>
						<description><![CDATA[== My goal: being able to detect when an entity gets hit by a lightningbolt. ==

When an entity gets hit by either a weapon or a spell it triggers the ON HIT event. The event has 2 parameters:
PARAM1 = some floating point number (probably damage or distance)
PARAM2 = source of damage

When it is a magic spell that hits the entity then PARAM2 is "spell", but there is no way of knowing what spell is causing it.

There is another event, which gives more info: ON SPELLCAST, where PARAM1 contains the name of the spell as a string. However the event only gets called once at the start of the spell. If a spell lasts for longer and the player moves around hitting entities then it will not get information on it.

I found these events on this wiki page: https://wiki.arx-libertatis.org/Script:Events

My solution is to keep track of the player's last spell in a variable that have been cast and whether it was lightningbolt or not. Then if the entity gets hit and PARAM2 is "spell" and my tracking variable is set, then I'm good to go. I'm also checking if the SENDER in the spellcast event is the player.

Limitations:

# will not detect if the player is casting multiple spells at once (having life drain and lightningbolt being triggered the same time). If I would to detect both of these events, then I would have to keep 2 tracking variables for the 2 spells, 3 variables for 3 spells, etc.
# would also require extra coding and variables for all enemy creatures (liches, snake women), who can also fight the player using lightningbolts and accidentally hit the target entity, which is because of my workaround implementation.

My workaround:


ON INIT {
  SET §lightningWasCast 0
  ACCEPT
}

ON SPELLCAST {
  IF (^SENDER != PLAYER) ACCEPT

  IF (^$PARAM1 == lightning_strike) {
    SET §lightningWasCast 1
  } ELSE {
    SET §lightningWasCast 0
  }

  ACCEPT
}

ON HIT {
  IF (^$PARAM2 == "spell") {
    IF (§lightningWasCast == 1) {
        HEROSAY "buzz!"
    }
  }
  ACCEPT
}


My ideal implementation:


ON HIT {
  IF (^$PARAM2 == "spell") {
    IF (^$PARAM3 == "lightning_bolt") {
        HEROSAY "buzz!"
    }
  }
  ACCEPT
}

]]></description>
						<pubDate>Thu, 17 Jul 2025 16:50:19 GMT</pubDate>
			<link>https://bugs.arx-libertatis.org:443/arx/issues/1599</link>
			<guid>https://bugs.arx-libertatis.org:443/arx/issues/1599</guid>
		</item>
	</channel>
</rss>