The stand-alone mod S.T.A.L.K.E.R. Anomaly aims to be the most stable and customizable experience for fans of the S.T.A.L.K.E.R. games. It's powered by the Monolith 64-bit engine, a custom fork of the X-Ray engine.
Adds a new tier of craftable PDA and allows customization or progressive unlocking of what each tier can see: ally, neutral, or enemy squads, as well as bodies and their map icon.
This addon has three primary purposes:
Note that this will NOT change your existing settings if you already have MilPDA installed. These changes are just the defaults for new installations. I highly recommend you try them, however!
Designed by an unknown government or NGO for covert operations, the Milspec PDA incorporates all the features of the previous models--but also snoops cellular and network traffic in order to display an approximate location of hostile squads. Because zombified stalkers are still sometimes carrying PDAs or other geolocation devices, the Milspec PDA will even show their locations as well.
The catch? The cryptographic module is power-hungry, and consumes battery at twice the rate of any other PDA, even when you don't have it open. Additionally, this isn't exactly an off-the-shelf store brand you can buy or find lying around--you will have to build one yourself, and doing so requires some fairly sophisticated components, as well as a copy of PDA 3.1 to modify.
If you think it's imbalanced to be able to see special factions like Monolith, the custom blacklist has you covered. As for realism, consider that soldiers being located by their mobile phones, tablets, or other electronic devices is a real vulnerability in present-day battlefields. It's today's news, not tomorrow's tech.
But don't let the map icons become a replacement for situational awareness. They only show the location of squad leaders, not the guy flanking you--and mutants don't carry PDAs.
Don't think you should be able to see Monolith, Sin, or ISG with this? Enable the blacklist, and those three factions are excluded by default. You can also individually customize whether each faction shows up on the Milspec PDA--whether it's for game balance or lore reasons, to cut down on visual clutter, or even for special challenge rules like letting yourself gradually unlock different factions.

If you like Ishmaeel's Kill Tracker, that functionality is now fully integrated into the Milspec PDA. You don't have to use it, and you should download Ishmaeel's original mod to get their clever text descriptions--which are st_praise_chefskiss. But the feature is there if you want it, and a separate patch is no longer be required for Kill Tracker or GAMMA.

Body tracking is handled separately from body display, so you won't lose your map markers even if you lose PDA power, reload your game, change style, or toggle the option off and back on. Bodies cluttering up your map? You can now right-click on any body marker, see whose it was, and remove it.

Kill Tracker will now even track the kills of your companions and their squadmates, if you want it to--but you can always turn that off so that you only see your personal kills.
Choose from five styles of icon for bodies on the minimap: a white X (credit to AlphaLion), a slightly larger white skull, or small/medium/large blue dots.

All of these changes take effect as soon as you apply them in MCM, so you can immediately see whether you like a style without restarting the game.
If you want more, try the Personal Adjustable Waypoint addon. It allows you to use PAW's large icon library or faction badges for body icons.
Think PDA 1.0 should be able to see your own faction? Don't think any PDA should see enemies, but want all PDAs to mark bodies on the map? Customize each tier of PDA to your liking, individually toggling whether friendlies, neutrals, enemies, or bodies are shown, as well as whether that PDA obeys the faction blacklist.

Just unzip the file directly into your Anomaly folder or install using a mod organizer, now with proper fomod support. You can manually move them over if you're more comfortable doing that, but there are a number of files in different places, and an organizer like MO2 is recommended.
A new game is not required, and removing the mod will not affect a game in progess--however, you must get rid of the PDA item first, as the existence of any item that is no longer in the config files can cause crashes.
The "uninstall" option will delete any copies of the item in the player's inventory to avoid crashes. Do the following:
If you don't have MCM, then:
It is then safe to uninstall this addon using MO2. I cannot assist with manual uninstallation.
The default icon for this item is based on the style of icons in the Cr3pis pack. If you prefer the look of the vanilla anomaly PDA icons, I have included a version you can use. To to so:
![]()
The MPDA will now use an alternate inventory icon based on vanilla Anomaly.
There is also a third icon option, made to look like the Milspec PDA in the addon's logo image. If you want to use it, change inv_grid_x to 2.
The default styles include the four chevrons in the lower right to denote a tier 4 item. If you don't like these indicators, you can turn them off in this same file. Change inv_grid_y from 1 (has tier indicators) to 0 (no indicators).
GAMMA uses Cr3pis icons, but with a different style of rank pip. If you want this style, change inv_grid_y to 2.
Finally, there is now a Maid-style icon, which has an X-value of 3, and the same Y-value options of 0-2 for the rank pips.
This mod uses the monkeypatch script workshop_autoinject.script to inject a new crafting recipe, a tool which is also used by various other mods. I am only using the basic unaltered functionality of adding or removing a recipe, so if you already have this file from another mod, it shouldn't matter whose you use.
If you have GAMMA or Ishmaeel's Kill Tracker installed, please load this after Kill Tracker.
If you are using vanilla, unmodified exes, and have therefore installed the option that replaces map_spots_relations.xml, this mod will conflict with any other that modifies the same file.
However, this conflict is extremely easy to resolve, and instructions are included in the file. It should be fairly simple, but all of this is provided "as-is", and I cannot support the legacy version or assist with troubleshooting merge issues.
The file zzz_sim_squad_scripted_milpda.script is a monkeypatch for sim_squad_scripted.script that overrides sim_squad_scripted.show in order to take over handling of squad mapspot visibility. It is unlikely to conflict with anything that does not modify that specific function, but I do not play or test in Warfare Mode and cannot provide support for issues in that mode.
Everything else should get along fine; the scripting and assets are all self-contained.
Localizations are only complete for English and Russian, and the RUS localization may have errors.
Several users have very kindly provided partial Ukrainian and Spanish localizations, which are now some versions behind. As usual, I'm happy to add translations if anyone provides them.
1.11.1: Minor patch to fix squadmate killspots not appearing.
1.11: Now using DXML--if supported--to load mapspots instead of replacing map_spots_relations. Added options for when to show or hide victim and killer names on body mapspots. Added progression gain multipliers for all supported PDAs. Adjusted progression defaults across the board for balance.
1.10: Re-structured install folders so that the DLTX Crafting option is on by default, and zzz_ui_pda_npc_tab_milpda.script is only included in the DLTX-PDASpawns optional install. It was previously included in the main install, which was the cause of most crashes from the previous version. Fix for Progressive mode's Gain on Read option not granting progress. Fix for duplicate crafting recipes being added. Added MCM option to only gain progress from decrypted PDAs, on by default. Added option to only gain progress if you disassemble the PDA, which ignores decryption. Added MCM option to control verbose logging. Fixed missing localization strings in MCM.
1.9.7: Fix for nil value crash when right-clicking on empty map space with modded binaries.
1.9.6: Various fixes for Progressive Squad Visibility. MCM values should now load properly, and a DLTX patch is included that will allow Sin, ISG, and Renegade stalkers to drop PDAs. Also included is a fix for a vanilla bug with NPC PDAs disappearing in 2D PDA mode.
1.9.5: Fix for unintended display of progression notification messages when Progressive Squad Visibility is disabled. This was purely cosmetic, and had no functional effect on the feature.
1.9.4: Fixed a rare crash with Sin storyline scripted squads. Added faction validation to all entry points; it should now be virtually impossible for a crash to occur from an invalid faction. Refactored blacklist code, should be invisible to users.
1.9.3: In my haste to get the crash fix posted, I somehow swapped the order of two lines in the script, causing it to fail. This has been corrected. Sorry!
1.9.2: Further checks for nil values when something calls this script with an invalid faction. Added logging to make similar issues easier to catch. Updated UKR localization for latest strings.
1.9.1: Added checks for some nil values that should never be possible, but which can cause a crash if they happen. Updated RUS localization to 1.9.1.
1.9: Added (and fixed) Temporary Network Access, allowing factions to revoke access to their GPS data after a configurable delay. Added automatic clearing of decayed/looted mutant corpses.
1.8.2: Fixed NPC PDAs being counted more than once for progress on game load. Accidentally shipped pre-release versions of Temp Network Access and the mutant corpse fix.
1.8.1: Hotfix for crash when looting a PDA with missing metadadta. Only ish_kill_tracker.script has changed. Also updated RUS localization with all current strings thanks to leeviathan.
1.8: Added Progressive Squad Visibility, which provides a system for gradually unlocking access to each faction's GPS data separately by looting their PDAs, with MCM support. Some refactoring and other minor internal changes.
1.7.4: Fixed possible crashes and body marker removal issues. Separated icon settings for player and non-player kills. New PDA icon rank pip style. Now monkeypatching sim_squad_scripted rather than replacing sim_squad_warfare.
1.7.3: Added integration with Personal Adjustable Waypoint, enabling you to use PAW's icon library to control body markers.
1.7.2: Fixed the autoclear on loot not working under certain circumstances. Added RUS localization from leeviathan.
1.7.1: Added a check that should prevent crashes when checking bodies that were killed by the environment (e.g. an anomaly) rather than a living thing.
1.7: Added option to show all bodies on the map, not just kills from you or your companions. Added new icon option with pips showing device tier. Added option for markers to not auto-clear on interact. Added marker expiration after an hour, many internal changes.
1.6: Fixed possible crash when equipping looted NPC PDAs, as well as a few other edge cases. Fixed body markers not being cleared on interact--you can still always right-click on them to get the option to remove them manually. Kill Tracker will now optionally track and display the kills of your companions as well. Added proper fomod installer support.
v1.5: Fixed crashes when using unknown PDAs from other addons, and added instructions to the script for how to support those third-party devices. Fixed crash when killing mutants. Body tracking now persists across saves and loads. You can now right-click on any body and click on the option there to remove its marker.
v1.4: Fixed Kill Tracker toggle not always working as expected. Kill tracking options can now be toggled on the fly; bodies will appear and disappear or change icon immediately after you apply MCM changes. New icon styles added for bodies on minimap.
v1.3: Fixed inability to swap batteries or use PDA hotkey. Added granular customization of what mapspots each tier of PDA can see, both in MCM and with easily-edited values in the script. Fully integrated Ishmaeel's Kill Tracker. Debug logging is now off by default, and controllable in MCM. Added optional third icon style based on the Milspec PDA logo.
v1.2: Added faction blacklist. Fixed issue that could cause duplicate crafting recipes to be added.
Average
9.585 votes submitted.
Version 1.9.2 has been posted with further checks for nil values and updated UKR localization. This should resolve any remaining crashes from bad faction data.
Dear Author!
Installed version 1.9.2, but still crash!
FATAL ERROR
[error]Expression : <no expression>
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : C:\anomaly_src\xray-monolith\src\xrServerEntities\script_engine.cpp
[error]Line : 206
[error]Description : fatal error
[error]Arguments : LUA error: .....\gamedata\scripts\zzz_sim_squad_scripted_milpda.script:144: attempt to index global 'item_milpda' (a nil value)
stack trace:
Here is a link to the log file:
Drive.google.com
Thank you very much in advance!
My apologies, there was an error in packing 1.9.2, two lines in a script were transposed. Version 1.9.3 is up now with a fix for this.
Oh, I've got the assembly running!
Everything seems to be fine!
Thank you!
getting fatal error zzz_sim_squad_scripted_milpda.script: 144: attempt to index global 'item_milpda' (a nil value)
stack trace:
Any ideas? i have placed it under Ishmaeel's Kill Tracker
There's an issue with the archive, I think the wrong script version got included. I'm sorting it out now. Sorry.
It looks like the order of two lines in the script somehow got swapped after the final playtest. Annoying, but this is an easy fix. Sorry about that.
I've posted version 1.9.3 with a hotfix for the fatal error in 1.9.2. The TL;DR is that in my haste to get the crash fix out, I somehow swapped the order of two lines in the script AFTER the playtesting. This has been corrected, and this time I did a final launch test immediately prior to zipping everything up.
My apologies for the hassle! 1.9.3 should resolve all of the stability issues to this point.
awesome man! THank you.
Dear Author!
Installed version 1.9.2, but still crash!
FATAL ERROR
[error]Expression : <no expression>
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : C:\anomaly_src\xray-monolith\src\xrServerEntities\script_engine.cpp
[error]Line : 206
[error]Description : fatal error
[error]Arguments : LUA error: .....\gamedata\scripts\zzz_sim_squad_scripted_milpda.script:144: attempt to index global 'item_milpda' (a nil value)
stack trace:
Here is a link to the log file:
Drive.google.com
Thank you very much in advance!
The mod works, thanks to the author for the quick fixes!
Hi. I'm currently using 1.9.3 and I keep crashing when I try to start the Sin storyline. Something to do with the blacklist.
FATAL ERROR
[error]Expression : <no expression>
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : C:\anomaly_src\xray-monolith\src\xrServerEntities\script_engine.cpp
[error]Line : 206
[error]Description : fatal error
[error]Arguments : LUA error: ...talker anomoly 1.5.2\gamedata\scripts\item_milpda.script:337: attempt to index local 'fdc' (a nil value)
stack trace:
Edit: So I played with some settings and got it to work. May have been the custom mapspot setting or custom blacklist setting.
It's the custom blacklist. Seems to crash if that Sin squad is there.
Thanks, I'll take a look. I just fixed another issue with Sin squads, and I suspect I know what's going on--for whatever reason, Anomaly uses a different faction (greh_npc or some such) for certain scripted story squads. Very annoying, but shouldn't be a tough fix. Edit: it's up now.
I just posted version 1.9.4 with what should be a fix for a rare crash with Sin storyline scripted squads. This was done by adding validation to all points where Anomaly can possibly pass an empty or invalid faction value, so it should hopefully prevent any other invalid-faction crashes as well.
Also in this patch are some adjustments to blacklist code and additional debug logging, but these should be invisible to players.
Thank you to everyone for your patience. Implementing a complex new feature like progression always carries the risk of introducing bugs that aren't caught in testing--but if any remain, they'll get sorted out.
Hello.
Thank you so much for always listening to our problems and questions and trying to correct errors so quickly!
Hello!
- I turn off "Progressive Squad Visibility" but i still get a message when looting pda from dead.
- pls make it possible to switch the visibility of monster corpses. I don't like that monster corpses are visible on the map.
Thank you, it's supposed to suppress that message when the setting is off, should be an easy fix. If you want, you can edit item_milpda.script yourself.
Just find the line that says:
function notify_visibility(comm,onoff)
And insert this line directly after it:
if not progressive_vis then return end
We'll see about monster corpses. They aren't tracked separately, but they could be. I'll have to see how much work it ends up being.
function notify_visibility(comm,onoff)
if not progressive_vis then return end
dl("Notifying player of access change for %s (%s)",comm,onoff)
local facname = gts(comm)
local tiptxt = string.format(gts("st_mapspot_access_lost"),facname,facname)
if onoff then
tiptxt = string.format(gts("st_mapspot_access_unlock"),facname,facname)
end
dotip(tiptxt,5000,nil,true,"ui_icon_news_trx_common")
end
like this?
Exactly, all you are doing is inserting that one line. Everything else stays the same.
progressive_vis is the flag that tells whether the feature is enabled, and that line just tells the function to abort out and do nothing else if it isn't.
Thank you!
UPD
doesn't work((
UPD? I'm confused--do you mean the Universal Power Device that was removed from vanilla Anomaly? Or is this an addon I'm not familiar with?
no sorry
UPD = update
I made the changes you told me, but they don't work.
In that case, there's only one other function that plays a tip. I think I see what the issue might be. Find this line:
local function actor_on_item_take(obj)
The next line after is this:
if not obj and progressive_vis then return end
Change it to this:
if not (obj and progressive_vis) then return end
Let me know if that fixes it for you.
it works now))
Thanks, just a simple logic error. Fix will be in the next patch, for now anyone else should be able to do the same if they wish.
Very cool. like a dream )
I wonder how one can unlock access to ISG, Sin or Renegade network considering the fact that no PDA is spawned on the bodies of these factions' members. Apart of that, access unlock is a very nice idea.
That's a very good point--I've had that modded in my own personal list for so long that I forgot they're commented out in vanilla.
It's an easy fix, though. Thanks for the reminder.
Could you please tell me how to fix it? It's not that easy, at least for me :) When I uncomment those factions in ui_pda_npc_tab.script, I get CTD on looting - at least ISG - telling something about that faction base variable is nil or something like that.
I'm simplifying for brevity; it's not just a matter of uncommenting one or two lines. There's a config file that needs to be edited, I'll incorporate that into the next version as an option.
Автор, я давно пользуюсь вашим аддоном, но после последнего обновления я получаю сбой
<MPDA> [V] validated_faction called for valid faction ecolog, returning [5]
<MPDA> [V] comm ecolog | comm ecolog | could_see true | progressive_vis true | has_faction_network_data false | fd[comm].req 25
<MPDA> [V] validated_faction called for valid faction ecolog, returning
stack trace:
[error][ 126] : Не найден указанный модуль.
at address 0x000000014027870F
помогите разобраться в чем может быть проблема. Это часть лога, я могу скинуть полный файл, если нужно. Вылеты происходят при нажатие правой клавиши мыши по карте или когда я пытаюсь быстро переместится на другую локацию через ПДА
Hello,
I have never encountered this error, and there is nothing going on in this part of the script that should cause a stack trace like this. In order to understand what is happening, I would need to look at the full debug log.
Привет,
Я никогда не сталкивался с этой ошибкой, и в этой части скрипта не происходит ничего, что могло бы вызвать такую трассировку стека. Для того чтобы понять, что происходит, мне нужно посмотреть полный журнал отладки.
К сожалению пока я ждал что вы мне ответите, я откатил версию вашего аддона на предыдущею, и пока все работает нормально, но ошибки какие то странные были что то с kill treker связанно, пробывал новую игру и все тоже самое, в итоге вернул старую версию и все работает нормально! Я еще проведу тесты попробую сам поискать из за чего это происходит, если что я скину вам лог позже, если такое произойдет снова
Извините за незнание английского
У меня также версия 1.9.6 вылетает. Только вылетает при лутании трупов, в которых кпк заспавнился.
На 1.9.5 полёт нормальный)
great addon! but.. when you try to view a captured PDA, it disappears..
This is a vanilla Anomaly bug, one which MilPDA actually is supposed to fix (zzzzz_ui_pda_npc_tab_wpnhidefix.script). It only occurs when viewing an NPC PDA in 2D PDA mode when you have a weapon out. You can easily reproduce this for yourself with no mods loaded.
Expression : <no expression>
Function : CScriptEngine::lua_pcall_failed
File : D:\a\xray-monolith\xray-monolith\src\xrServerEntities\script_engine.cpp
Line : 257
Description : fatal error
Arguments :
1 : [Lua] ...ly modpack/game\gamedata\scripts\ish_kill_tracker.script(498) : func_or_userdata
LUA error: ...ly modpack/game\gamedata\scripts\ish_kill_tracker.script:498: attempt to compare number with nil
Check log for details
stack trace:
After updating to new Modded Exes, and trying to place marker on map in freely space on right click from Personal Adjustable Waypoints.
I think I know what's going on here. Find this bit starting on line 498 in ish_kill_tracker.script:
local function map_spot_menu_property_clicked(property_ui,id,level_name,prop)
local se_obj = alife_object(id)
if not ((id > 0) and se_obj) then return end
Change it like so:
local function map_spot_menu_property_clicked(property_ui,id,level_name,prop)
if not (id and (id > 0)) then return end
local se_obj = alife_object(id)
For what it's worth--any addon which responds to a click on the map context menu is going to have to handle this same condition when a user clicks on empty space, no matter what addons are loaded. It is because map_spot_menu_property_clicked passes the id of the object the player clicked on, but empty map space has no id.
Автор, можно вас попросить сделать это с этим скриптом, если у вас будет время, просто я не разбираюсь в скриптах и боюсь что сломаю игру, но тем не менее я попробую
Awesome mod! I am seeing two PDAs now in game, one unlocked upfront and one requiring a purchase of a recipe, is this a bug? And also just to confirm, is it intended that this new PDA is within the level-1 artifact recipe?
Another question on PAW, referring to this "If you have Personal Adjustable Waypoint, install it using the MilPDA patch and load it AFTER MilPDA. Strange crashes or other issues can happen if you load them the other way around.". PAW installation only lets you pick the Milspec PDA patch or Kill Tracker patch, is there a way to get both which I assume we need them all?
Duplicate recipes is a bug. If you uncheck the MCM option and only install the DLTX option, it should go away, but if not it will need to be fixed.
MilPDA replaces the functionality of Kill Tracker. If you have both, install PAW using the MilPDA option, and load PAW last.
Duplicate recipe happens only when you use dltx mod_craft_milpda.ltx, and you turn "Add Recipe" in MCM. So if you turn off this function, or delete this file in plugins. Double recipe is removed.
FATAL ERROR
[error]Expression : <no expression>
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : C:\anomaly_src\xray-monolith\src\xrServerEntities\script_engine.cpp
[error]Line : 206
[error]Description : fatal error
[error]Arguments : LUA error: d:/anomaly-1.5.2\gamedata\scripts\ui_pda_npc_tab.script:312: bad argument #1 to 'pairs' (table expected, got nil)
FATAL ERROR
[error]Expression : <no expression>
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : C:\anomaly_src\xray-monolith\src\xrServerEntities\script_engine.cpp
[error]Line : 206
[error]Description : fatal error
[error]Arguments : LUA error: d:/anomaly-1.5.2\gamedata\scripts\ui_pda_npc_tab.script:312: bad argument #1 to 'pairs' (table expected, got nil)
occurs when trying to loot a corpse from the pda. If you disable and remove the mod, everything works fine. Google translator
I must've killed dozens of stalkers and disassembled their suits - where do you find K199 plates with carbon fibre inserts?
There's about eight or ten outfits in the game that have them. The ones you'll probably have the best chance of finding or buying outright are the Nomad stalker suit, Sentinel of Freedom, Duty PS5-M, and Duty PS6-V. I believe the Military exos and nosorogs have them also.
Спасибо за обновление Автор, я ценю ваш аддон!
Hello. I play GAMMA modpack, but I immensly enjoy your mod, but I happened to run into a problem. After 9.1 gamma has PAW integrated and it somehow collided with Milspec when I first installed it. Now I get constant crashes with "ui_pda_get_enemy" codeline. Would you mind checking it out or let me contact you and send you a log file to let you isolate and eliminate the problem?
Make sure you are loading PAW after MPDA (or anything else that modifies map_spots_relations.xml), and that you reinstall PAW with the Milspec PDA patch option.
If you're still having issues, drop by the Milspec PDA discussion channel on the GAMMA Discord and post a debug log of the crash.
This comment is currently awaiting admin approval, join now to view.
After update started new game, found a pda on dead bandit, tried to read it, but it disappeared without opening. When I got to technician in a few minutes there was an option to unlock the pda (?) but it was not in inventory and not equipped in any visible slot. Before the update it never happened, what could cause this?
Investigating, now for sure can say that this issue was not present in 1.9.5, just tested it out with that version and 1.9.7 side by side. I'll look into code and post my findings here.