arkparser 0.1.2__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. {arkparser-0.1.2 → arkparser-0.1.4}/PKG-INFO +55 -40
  2. {arkparser-0.1.2 → arkparser-0.1.4}/README.md +54 -39
  3. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/__init__.py +4 -3
  4. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/binary_reader.py +14 -10
  5. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/map_config.py +23 -4
  6. arkparser-0.1.4/arkparser/common/normalization.py +45 -0
  7. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/version_detection.py +2 -2
  8. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/data_models.py +23 -18
  9. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/export.py +231 -78
  10. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/__init__.py +1 -1
  11. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/cloud_inventory.py +6 -5
  12. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/profile.py +65 -10
  13. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/tribe.py +19 -11
  14. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/world_save.py +55 -134
  15. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/container.py +10 -1
  16. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/game_object.py +134 -23
  17. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/character.py +13 -10
  18. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/creature.py +72 -111
  19. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/player.py +4 -0
  20. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/tribe.py +5 -1
  21. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/byte_property.py +3 -2
  22. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/compound.py +55 -29
  23. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/primitives.py +2 -3
  24. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/registry.py +7 -0
  25. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/property_list.py +26 -21
  26. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/registry.py +18 -1
  27. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/PKG-INFO +55 -40
  28. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/SOURCES.txt +5 -1
  29. {arkparser-0.1.2 → arkparser-0.1.4}/pyproject.toml +1 -1
  30. arkparser-0.1.4/tests/test_binary_reader.py +25 -0
  31. {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_cloud_inventory.py +16 -0
  32. arkparser-0.1.4/tests/test_data_models.py +21 -0
  33. arkparser-0.1.4/tests/test_export.py +120 -0
  34. arkparser-0.1.4/tests/test_game_objects.py +43 -0
  35. {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_models.py +47 -1
  36. {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_profile.py +32 -1
  37. {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_tribe.py +9 -1
  38. {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_version_detection.py +24 -8
  39. arkparser-0.1.4/tests/test_world_save.py +840 -0
  40. arkparser-0.1.2/arkparser/py.typed +0 -0
  41. arkparser-0.1.2/tests/test_world_save.py +0 -252
  42. {arkparser-0.1.2 → arkparser-0.1.4}/LICENSE +0 -0
  43. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/__init__.py +0 -0
  44. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/exceptions.py +0 -0
  45. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/types.py +0 -0
  46. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/base.py +0 -0
  47. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/__init__.py +0 -0
  48. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/location.py +0 -0
  49. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/__init__.py +0 -0
  50. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/item.py +0 -0
  51. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/stats.py +0 -0
  52. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/structure.py +0 -0
  53. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/__init__.py +0 -0
  54. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/base.py +0 -0
  55. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/__init__.py +0 -0
  56. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/base.py +0 -0
  57. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/colors.py +0 -0
  58. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/misc.py +0 -0
  59. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/vectors.py +0 -0
  60. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/dependency_links.txt +0 -0
  61. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/requires.txt +0 -0
  62. {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/top_level.txt +0 -0
  63. {arkparser-0.1.2 → arkparser-0.1.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arkparser
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Pure Python parser for ARK: Survival Evolved and ARK: Survival Ascended save files
5
5
  Author: Vertyco
6
6
  License-Expression: MIT
@@ -97,13 +97,13 @@ A pure-Python library for parsing ARK: Survival Evolved (ASE) and ARK: Survival
97
97
 
98
98
  ## Features
99
99
 
100
- - **Player Profiles** (`.arkprofile`) character name, level, stats, engrams
101
- - **Tribe Data** (`.arktribe`) members, ranks, logs, alliances
102
- - **Cloud Inventory / Obelisk** uploaded creatures, items, cryopod contents
103
- - **World Saves** (`.ark`) full map state: creatures, structures, items, players
104
- - **Dual Format** automatic ASE (v5-6) / ASA (v7+, SQLite) detection
105
- - **Export** ASV-compatible JSON export with GPS coordinate conversion
106
- - **Typed** full type annotations, `py.typed` marker
100
+ - **Player Profiles** (`.arkprofile`): platform gamertag, character name, level, stats, engrams
101
+ - **Tribe Data** (`.arktribe`): members, ranks, logs, alliances
102
+ - **Cloud Inventory / Obelisk**: uploaded creatures, items, cryopod contents
103
+ - **World Saves** (`.ark`): full map state, including creatures, structures, items, and players
104
+ - **Dual Format**: automatic ASE (v5-6) / ASA (v7+, SQLite) detection
105
+ - **Export**: native JSON export with optional ASV-compatible naming and GPS coordinate conversion
106
+ - **Typed**: full type annotations, `py.typed` marker
107
107
 
108
108
  ## Installation
109
109
 
@@ -122,7 +122,8 @@ from arkparser import Profile
122
122
 
123
123
  profile = Profile.load("path/to/player.arkprofile") # auto-detects ASE/ASA
124
124
 
125
- print(profile.player_name) # "SomePlayer"
125
+ print(profile.player_name) # Platform gamertag / display name
126
+ print(profile.character_name) # In-game character name
126
127
  print(profile.level) # 105
127
128
  print(profile.tribe_id) # 1729028872
128
129
  print(profile.engram_blueprints) # ["EngramEntry_Campfire_C", ...]
@@ -171,7 +172,7 @@ for item in inv.uploaded_items:
171
172
  ```python
172
173
  from arkparser import WorldSave
173
174
 
174
- # Works with both ASE (binary) and ASA (SQLite) auto-detected
175
+ # Works with both ASE (binary) and ASA (SQLite); auto-detected
175
176
  save = WorldSave.load("path/to/Extinction.ark") # ASE
176
177
  save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
177
178
 
@@ -197,7 +198,7 @@ for obj in save.objects:
197
198
  print(f"{tamed.name} Lv{tamed.level}")
198
199
  ```
199
200
 
200
- ### JSON Export (ASV-compatible)
201
+ ### JSON Export
201
202
 
202
203
  ```python
203
204
  from arkparser import export_all
@@ -205,7 +206,7 @@ from arkparser.common import get_map_config
205
206
 
206
207
  map_config = get_map_config("extinction.ark")
207
208
  data = export_all(save, map_config)
208
- # Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
209
+ # Returns: {"tamed": [...], "wild": [...], "players": [...], ...}
209
210
  ```
210
211
 
211
212
  Or export to files:
@@ -214,6 +215,18 @@ Or export to files:
214
215
  from arkparser import export_to_files
215
216
 
216
217
  export_to_files(save, "output/", map_config)
218
+ # Creates: tamed.json, wild.json, players.json, etc.
219
+ ```
220
+
221
+ For compatibility with the original [ASV (Ark Save Visualizer)](https://github.com/miragedmuk/ASV) export naming:
222
+
223
+ ```python
224
+ from arkparser import export_all, export_to_files
225
+
226
+ data = export_all(save, map_config, naming="asv")
227
+ # Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
228
+
229
+ export_to_files(save, "output/", map_config, naming="asv")
217
230
  # Creates: ASV_Tamed.json, ASV_Wild.json, ASV_Players.json, etc.
218
231
  ```
219
232
 
@@ -242,15 +255,17 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
242
255
 
243
256
  #### Profile
244
257
 
245
- `arkparser.files.profile.Profile` Parser for `.arkprofile` player profile files.
258
+ `arkparser.files.profile.Profile`: Parser for `.arkprofile` player profile files.
246
259
 
247
260
  | Property | Type | Description |
248
261
  |---|---|---|
249
- | `player_name` | `str \| None` | Character name |
262
+ | `player_name` | `str \| None` | Platform gamertag / display name |
263
+ | `character_name` | `str \| None` | In-game character name, falling back to `player_name` when absent |
250
264
  | `player_id` | `int \| None` | Unique player ID |
251
265
  | `unique_id` | `str \| None` | Platform ID (Steam/Xbox numeric ID) |
252
266
  | `tribe_id` | `int \| None` | Tribe ID (handles ASE `TribeId` / ASA `TribeID`) |
253
- | `tribe_name` | `str \| None` | Always `None` tribe name is not stored in profiles |
267
+ | `tribe_name` | `str \| None` | Always `None`; tribe name is not stored in profiles |
268
+ | `is_female` | `bool \| None` | Parsed gender flag (`True` = female, `False` = male, `None` = absent) |
254
269
  | `level` | `int` | Current level (`ExtraCharacterLevel + 1`) |
255
270
  | `experience` | `float` | Total XP |
256
271
  | `total_engram_points` | `int` | Engram points spent |
@@ -268,7 +283,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
268
283
 
269
284
  #### Tribe (File Parser)
270
285
 
271
- `arkparser.files.tribe.Tribe` Parser for `.arktribe` tribe data files.
286
+ `arkparser.files.tribe.Tribe`: Parser for `.arktribe` tribe data files.
272
287
 
273
288
  | Property | Type | Description |
274
289
  |---|---|---|
@@ -292,7 +307,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
292
307
 
293
308
  #### CloudInventory
294
309
 
295
- `arkparser.files.cloud_inventory.CloudInventory` Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
310
+ `arkparser.files.cloud_inventory.CloudInventory`: Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
296
311
 
297
312
  | Property | Type | Description |
298
313
  |---|---|---|
@@ -312,7 +327,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
312
327
 
313
328
  #### WorldSave
314
329
 
315
- `arkparser.files.world_save.WorldSave` Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
330
+ `arkparser.files.world_save.WorldSave`: Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
316
331
 
317
332
  | Property | Type | Description |
318
333
  |---|---|---|
@@ -354,7 +369,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
354
369
 
355
370
  #### GameObject
356
371
 
357
- `arkparser.game_objects.game_object.GameObject` The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
372
+ `arkparser.game_objects.game_object.GameObject`: The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
358
373
 
359
374
  | Field | Type | Description |
360
375
  |---|---|---|
@@ -380,7 +395,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
380
395
 
381
396
  #### GameObjectContainer
382
397
 
383
- `arkparser.game_objects.container.GameObjectContainer` Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
398
+ `arkparser.game_objects.container.GameObjectContainer`: Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
384
399
 
385
400
  | Method | Returns | Description |
386
401
  |---|---|---|
@@ -403,7 +418,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
403
418
 
404
419
  #### LocationData
405
420
 
406
- `arkparser.game_objects.location.LocationData` 3D position and rotation.
421
+ `arkparser.game_objects.location.LocationData`: 3D position and rotation.
407
422
 
408
423
  | Field | Type | Description |
409
424
  |---|---|---|
@@ -428,7 +443,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
428
443
 
429
444
  #### TamedCreature
430
445
 
431
- `arkparser.models.creature.TamedCreature` Tamed creature with full stats, breeding, and ownership data.
446
+ `arkparser.models.creature.TamedCreature`: Tamed creature with full stats, breeding, and ownership data.
432
447
 
433
448
  | Property | Type | Description |
434
449
  |---|---|---|
@@ -470,7 +485,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
470
485
 
471
486
  #### WildCreature
472
487
 
473
- `arkparser.models.creature.WildCreature` Wild creature with level and stats.
488
+ `arkparser.models.creature.WildCreature`: Wild creature with level and stats.
474
489
 
475
490
  | Property | Type | Description |
476
491
  |---|---|---|
@@ -490,7 +505,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
490
505
 
491
506
  #### Player
492
507
 
493
- `arkparser.models.player.Player` In-world player entity built from profile data.
508
+ `arkparser.models.player.Player`: In-world player entity built from profile data.
494
509
 
495
510
  | Property | Type | Description |
496
511
  |---|---|---|
@@ -515,7 +530,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
515
530
 
516
531
  #### Character
517
532
 
518
- `arkparser.models.character.Character` Player character from the world save (`PlayerPawnTest_*` objects).
533
+ `arkparser.models.character.Character`: Player character from the world save (`PlayerPawnTest_*` objects).
519
534
 
520
535
  | Property | Type | Description |
521
536
  |---|---|---|
@@ -537,7 +552,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
537
552
 
538
553
  #### Structure
539
554
 
540
- `arkparser.models.structure.Structure` Placed structure with ownership and state.
555
+ `arkparser.models.structure.Structure`: Placed structure with ownership and state.
541
556
 
542
557
  | Property | Type | Description |
543
558
  |---|---|---|
@@ -560,7 +575,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
560
575
 
561
576
  #### Item
562
577
 
563
- `arkparser.models.item.Item` Inventory item with quality and stats.
578
+ `arkparser.models.item.Item`: Inventory item with quality and stats.
564
579
 
565
580
  | Property | Type | Description |
566
581
  |---|---|---|
@@ -583,7 +598,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
583
598
 
584
599
  #### TribeModel
585
600
 
586
- `arkparser.models.tribe.Tribe` Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
601
+ `arkparser.models.tribe.Tribe`: Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
587
602
 
588
603
  | Property | Type | Description |
589
604
  |---|---|---|
@@ -604,7 +619,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
604
619
 
605
620
  #### TribeMember
606
621
 
607
- `arkparser.models.tribe.TribeMember` Individual tribe member.
622
+ `arkparser.models.tribe.TribeMember`: Individual tribe member.
608
623
 
609
624
  | Field | Type | Description |
610
625
  |---|---|---|
@@ -614,7 +629,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
614
629
 
615
630
  #### TribeLogEntry
616
631
 
617
- `arkparser.models.tribe.TribeLogEntry` Parsed tribe log entry.
632
+ `arkparser.models.tribe.TribeLogEntry`: Parsed tribe log entry.
618
633
 
619
634
  | Field / Property | Type | Description |
620
635
  |---|---|---|
@@ -629,7 +644,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
629
644
 
630
645
  #### CreatureStats
631
646
 
632
- `arkparser.models.stats.CreatureStats` 12-stat named access for level-up points.
647
+ `arkparser.models.stats.CreatureStats`: 12-stat named access for level-up points.
633
648
 
634
649
  | Field | Type | Description |
635
650
  |---|---|---|
@@ -655,7 +670,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
655
670
 
656
671
  #### Location
657
672
 
658
- `arkparser.models.stats.Location` 3D position with optional GPS conversion.
673
+ `arkparser.models.stats.Location`: 3D position with optional GPS conversion.
659
674
 
660
675
  | Field | Type | Description |
661
676
  |---|---|---|
@@ -682,7 +697,7 @@ Lower-level data models for cloud inventory / obelisk data.
682
697
 
683
698
  #### UploadedCreature
684
699
 
685
- `arkparser.data_models.UploadedCreature` Uploaded creature from obelisk data.
700
+ `arkparser.data_models.UploadedCreature`: Uploaded creature from obelisk data.
686
701
 
687
702
  | Property | Type | Description |
688
703
  |---|---|---|
@@ -702,7 +717,7 @@ Lower-level data models for cloud inventory / obelisk data.
702
717
 
703
718
  #### UploadedItem
704
719
 
705
- `arkparser.data_models.UploadedItem` Uploaded item from obelisk data.
720
+ `arkparser.data_models.UploadedItem`: Uploaded item from obelisk data.
706
721
 
707
722
  | Property | Type | Description |
708
723
  |---|---|---|
@@ -723,7 +738,7 @@ Lower-level data models for cloud inventory / obelisk data.
723
738
 
724
739
  #### CryopodCreature
725
740
 
726
- `arkparser.data_models.CryopodCreature` Creature stored inside a cryopod.
741
+ `arkparser.data_models.CryopodCreature`: Creature stored inside a cryopod.
727
742
 
728
743
  | Property | Type | Description |
729
744
  |---|---|---|
@@ -746,7 +761,7 @@ Lower-level data models for cloud inventory / obelisk data.
746
761
 
747
762
  #### DinoStats
748
763
 
749
- `arkparser.data_models.DinoStats` Creature stat values (current and max).
764
+ `arkparser.data_models.DinoStats`: Creature stat values (current and max).
750
765
 
751
766
  | Field | Type | Description |
752
767
  |---|---|---|
@@ -770,7 +785,7 @@ Lower-level data models for cloud inventory / obelisk data.
770
785
 
771
786
  ### Export Functions
772
787
 
773
- `arkparser.export` ASV-compatible JSON export. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
788
+ `arkparser.export`: Native JSON export with optional ASV-compatible naming. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
774
789
 
775
790
  | Function | Returns | Description |
776
791
  |---|---|---|
@@ -787,7 +802,7 @@ Lower-level data models for cloud inventory / obelisk data.
787
802
 
788
803
  ### Map Config
789
804
 
790
- `arkparser.common.map_config` GPS coordinate conversion for ARK maps.
805
+ `arkparser.common.map_config`: GPS coordinate conversion for ARK maps.
791
806
 
792
807
  | Function | Returns | Description |
793
808
  |---|---|---|
@@ -801,7 +816,7 @@ Lower-level data models for cloud inventory / obelisk data.
801
816
 
802
817
  ### Version Detection
803
818
 
804
- `arkparser.common.version_detection` File format identification.
819
+ `arkparser.common.version_detection`: File format identification.
805
820
 
806
821
  | Function | Returns | Description |
807
822
  |---|---|---|
@@ -813,7 +828,7 @@ Lower-level data models for cloud inventory / obelisk data.
813
828
 
814
829
  ### Exceptions
815
830
 
816
- `arkparser.common.exceptions` All exceptions inherit from `ArkParseError`.
831
+ `arkparser.common.exceptions`: All exceptions inherit from `ArkParseError`.
817
832
 
818
833
  | Exception | Description |
819
834
  |---|---|
@@ -63,13 +63,13 @@ A pure-Python library for parsing ARK: Survival Evolved (ASE) and ARK: Survival
63
63
 
64
64
  ## Features
65
65
 
66
- - **Player Profiles** (`.arkprofile`) character name, level, stats, engrams
67
- - **Tribe Data** (`.arktribe`) members, ranks, logs, alliances
68
- - **Cloud Inventory / Obelisk** uploaded creatures, items, cryopod contents
69
- - **World Saves** (`.ark`) full map state: creatures, structures, items, players
70
- - **Dual Format** automatic ASE (v5-6) / ASA (v7+, SQLite) detection
71
- - **Export** ASV-compatible JSON export with GPS coordinate conversion
72
- - **Typed** full type annotations, `py.typed` marker
66
+ - **Player Profiles** (`.arkprofile`): platform gamertag, character name, level, stats, engrams
67
+ - **Tribe Data** (`.arktribe`): members, ranks, logs, alliances
68
+ - **Cloud Inventory / Obelisk**: uploaded creatures, items, cryopod contents
69
+ - **World Saves** (`.ark`): full map state, including creatures, structures, items, and players
70
+ - **Dual Format**: automatic ASE (v5-6) / ASA (v7+, SQLite) detection
71
+ - **Export**: native JSON export with optional ASV-compatible naming and GPS coordinate conversion
72
+ - **Typed**: full type annotations, `py.typed` marker
73
73
 
74
74
  ## Installation
75
75
 
@@ -88,7 +88,8 @@ from arkparser import Profile
88
88
 
89
89
  profile = Profile.load("path/to/player.arkprofile") # auto-detects ASE/ASA
90
90
 
91
- print(profile.player_name) # "SomePlayer"
91
+ print(profile.player_name) # Platform gamertag / display name
92
+ print(profile.character_name) # In-game character name
92
93
  print(profile.level) # 105
93
94
  print(profile.tribe_id) # 1729028872
94
95
  print(profile.engram_blueprints) # ["EngramEntry_Campfire_C", ...]
@@ -137,7 +138,7 @@ for item in inv.uploaded_items:
137
138
  ```python
138
139
  from arkparser import WorldSave
139
140
 
140
- # Works with both ASE (binary) and ASA (SQLite) auto-detected
141
+ # Works with both ASE (binary) and ASA (SQLite); auto-detected
141
142
  save = WorldSave.load("path/to/Extinction.ark") # ASE
142
143
  save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
143
144
 
@@ -163,7 +164,7 @@ for obj in save.objects:
163
164
  print(f"{tamed.name} Lv{tamed.level}")
164
165
  ```
165
166
 
166
- ### JSON Export (ASV-compatible)
167
+ ### JSON Export
167
168
 
168
169
  ```python
169
170
  from arkparser import export_all
@@ -171,7 +172,7 @@ from arkparser.common import get_map_config
171
172
 
172
173
  map_config = get_map_config("extinction.ark")
173
174
  data = export_all(save, map_config)
174
- # Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
175
+ # Returns: {"tamed": [...], "wild": [...], "players": [...], ...}
175
176
  ```
176
177
 
177
178
  Or export to files:
@@ -180,6 +181,18 @@ Or export to files:
180
181
  from arkparser import export_to_files
181
182
 
182
183
  export_to_files(save, "output/", map_config)
184
+ # Creates: tamed.json, wild.json, players.json, etc.
185
+ ```
186
+
187
+ For compatibility with the original [ASV (Ark Save Visualizer)](https://github.com/miragedmuk/ASV) export naming:
188
+
189
+ ```python
190
+ from arkparser import export_all, export_to_files
191
+
192
+ data = export_all(save, map_config, naming="asv")
193
+ # Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
194
+
195
+ export_to_files(save, "output/", map_config, naming="asv")
183
196
  # Creates: ASV_Tamed.json, ASV_Wild.json, ASV_Players.json, etc.
184
197
  ```
185
198
 
@@ -208,15 +221,17 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
208
221
 
209
222
  #### Profile
210
223
 
211
- `arkparser.files.profile.Profile` Parser for `.arkprofile` player profile files.
224
+ `arkparser.files.profile.Profile`: Parser for `.arkprofile` player profile files.
212
225
 
213
226
  | Property | Type | Description |
214
227
  |---|---|---|
215
- | `player_name` | `str \| None` | Character name |
228
+ | `player_name` | `str \| None` | Platform gamertag / display name |
229
+ | `character_name` | `str \| None` | In-game character name, falling back to `player_name` when absent |
216
230
  | `player_id` | `int \| None` | Unique player ID |
217
231
  | `unique_id` | `str \| None` | Platform ID (Steam/Xbox numeric ID) |
218
232
  | `tribe_id` | `int \| None` | Tribe ID (handles ASE `TribeId` / ASA `TribeID`) |
219
- | `tribe_name` | `str \| None` | Always `None` tribe name is not stored in profiles |
233
+ | `tribe_name` | `str \| None` | Always `None`; tribe name is not stored in profiles |
234
+ | `is_female` | `bool \| None` | Parsed gender flag (`True` = female, `False` = male, `None` = absent) |
220
235
  | `level` | `int` | Current level (`ExtraCharacterLevel + 1`) |
221
236
  | `experience` | `float` | Total XP |
222
237
  | `total_engram_points` | `int` | Engram points spent |
@@ -234,7 +249,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
234
249
 
235
250
  #### Tribe (File Parser)
236
251
 
237
- `arkparser.files.tribe.Tribe` Parser for `.arktribe` tribe data files.
252
+ `arkparser.files.tribe.Tribe`: Parser for `.arktribe` tribe data files.
238
253
 
239
254
  | Property | Type | Description |
240
255
  |---|---|---|
@@ -258,7 +273,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
258
273
 
259
274
  #### CloudInventory
260
275
 
261
- `arkparser.files.cloud_inventory.CloudInventory` Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
276
+ `arkparser.files.cloud_inventory.CloudInventory`: Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
262
277
 
263
278
  | Property | Type | Description |
264
279
  |---|---|---|
@@ -278,7 +293,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
278
293
 
279
294
  #### WorldSave
280
295
 
281
- `arkparser.files.world_save.WorldSave` Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
296
+ `arkparser.files.world_save.WorldSave`: Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
282
297
 
283
298
  | Property | Type | Description |
284
299
  |---|---|---|
@@ -320,7 +335,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
320
335
 
321
336
  #### GameObject
322
337
 
323
- `arkparser.game_objects.game_object.GameObject` The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
338
+ `arkparser.game_objects.game_object.GameObject`: The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
324
339
 
325
340
  | Field | Type | Description |
326
341
  |---|---|---|
@@ -346,7 +361,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
346
361
 
347
362
  #### GameObjectContainer
348
363
 
349
- `arkparser.game_objects.container.GameObjectContainer` Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
364
+ `arkparser.game_objects.container.GameObjectContainer`: Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
350
365
 
351
366
  | Method | Returns | Description |
352
367
  |---|---|---|
@@ -369,7 +384,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
369
384
 
370
385
  #### LocationData
371
386
 
372
- `arkparser.game_objects.location.LocationData` 3D position and rotation.
387
+ `arkparser.game_objects.location.LocationData`: 3D position and rotation.
373
388
 
374
389
  | Field | Type | Description |
375
390
  |---|---|---|
@@ -394,7 +409,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
394
409
 
395
410
  #### TamedCreature
396
411
 
397
- `arkparser.models.creature.TamedCreature` Tamed creature with full stats, breeding, and ownership data.
412
+ `arkparser.models.creature.TamedCreature`: Tamed creature with full stats, breeding, and ownership data.
398
413
 
399
414
  | Property | Type | Description |
400
415
  |---|---|---|
@@ -436,7 +451,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
436
451
 
437
452
  #### WildCreature
438
453
 
439
- `arkparser.models.creature.WildCreature` Wild creature with level and stats.
454
+ `arkparser.models.creature.WildCreature`: Wild creature with level and stats.
440
455
 
441
456
  | Property | Type | Description |
442
457
  |---|---|---|
@@ -456,7 +471,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
456
471
 
457
472
  #### Player
458
473
 
459
- `arkparser.models.player.Player` In-world player entity built from profile data.
474
+ `arkparser.models.player.Player`: In-world player entity built from profile data.
460
475
 
461
476
  | Property | Type | Description |
462
477
  |---|---|---|
@@ -481,7 +496,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
481
496
 
482
497
  #### Character
483
498
 
484
- `arkparser.models.character.Character` Player character from the world save (`PlayerPawnTest_*` objects).
499
+ `arkparser.models.character.Character`: Player character from the world save (`PlayerPawnTest_*` objects).
485
500
 
486
501
  | Property | Type | Description |
487
502
  |---|---|---|
@@ -503,7 +518,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
503
518
 
504
519
  #### Structure
505
520
 
506
- `arkparser.models.structure.Structure` Placed structure with ownership and state.
521
+ `arkparser.models.structure.Structure`: Placed structure with ownership and state.
507
522
 
508
523
  | Property | Type | Description |
509
524
  |---|---|---|
@@ -526,7 +541,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
526
541
 
527
542
  #### Item
528
543
 
529
- `arkparser.models.item.Item` Inventory item with quality and stats.
544
+ `arkparser.models.item.Item`: Inventory item with quality and stats.
530
545
 
531
546
  | Property | Type | Description |
532
547
  |---|---|---|
@@ -549,7 +564,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
549
564
 
550
565
  #### TribeModel
551
566
 
552
- `arkparser.models.tribe.Tribe` Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
567
+ `arkparser.models.tribe.Tribe`: Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
553
568
 
554
569
  | Property | Type | Description |
555
570
  |---|---|---|
@@ -570,7 +585,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
570
585
 
571
586
  #### TribeMember
572
587
 
573
- `arkparser.models.tribe.TribeMember` Individual tribe member.
588
+ `arkparser.models.tribe.TribeMember`: Individual tribe member.
574
589
 
575
590
  | Field | Type | Description |
576
591
  |---|---|---|
@@ -580,7 +595,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
580
595
 
581
596
  #### TribeLogEntry
582
597
 
583
- `arkparser.models.tribe.TribeLogEntry` Parsed tribe log entry.
598
+ `arkparser.models.tribe.TribeLogEntry`: Parsed tribe log entry.
584
599
 
585
600
  | Field / Property | Type | Description |
586
601
  |---|---|---|
@@ -595,7 +610,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
595
610
 
596
611
  #### CreatureStats
597
612
 
598
- `arkparser.models.stats.CreatureStats` 12-stat named access for level-up points.
613
+ `arkparser.models.stats.CreatureStats`: 12-stat named access for level-up points.
599
614
 
600
615
  | Field | Type | Description |
601
616
  |---|---|---|
@@ -621,7 +636,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
621
636
 
622
637
  #### Location
623
638
 
624
- `arkparser.models.stats.Location` 3D position with optional GPS conversion.
639
+ `arkparser.models.stats.Location`: 3D position with optional GPS conversion.
625
640
 
626
641
  | Field | Type | Description |
627
642
  |---|---|---|
@@ -648,7 +663,7 @@ Lower-level data models for cloud inventory / obelisk data.
648
663
 
649
664
  #### UploadedCreature
650
665
 
651
- `arkparser.data_models.UploadedCreature` Uploaded creature from obelisk data.
666
+ `arkparser.data_models.UploadedCreature`: Uploaded creature from obelisk data.
652
667
 
653
668
  | Property | Type | Description |
654
669
  |---|---|---|
@@ -668,7 +683,7 @@ Lower-level data models for cloud inventory / obelisk data.
668
683
 
669
684
  #### UploadedItem
670
685
 
671
- `arkparser.data_models.UploadedItem` Uploaded item from obelisk data.
686
+ `arkparser.data_models.UploadedItem`: Uploaded item from obelisk data.
672
687
 
673
688
  | Property | Type | Description |
674
689
  |---|---|---|
@@ -689,7 +704,7 @@ Lower-level data models for cloud inventory / obelisk data.
689
704
 
690
705
  #### CryopodCreature
691
706
 
692
- `arkparser.data_models.CryopodCreature` Creature stored inside a cryopod.
707
+ `arkparser.data_models.CryopodCreature`: Creature stored inside a cryopod.
693
708
 
694
709
  | Property | Type | Description |
695
710
  |---|---|---|
@@ -712,7 +727,7 @@ Lower-level data models for cloud inventory / obelisk data.
712
727
 
713
728
  #### DinoStats
714
729
 
715
- `arkparser.data_models.DinoStats` Creature stat values (current and max).
730
+ `arkparser.data_models.DinoStats`: Creature stat values (current and max).
716
731
 
717
732
  | Field | Type | Description |
718
733
  |---|---|---|
@@ -736,7 +751,7 @@ Lower-level data models for cloud inventory / obelisk data.
736
751
 
737
752
  ### Export Functions
738
753
 
739
- `arkparser.export` ASV-compatible JSON export. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
754
+ `arkparser.export`: Native JSON export with optional ASV-compatible naming. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
740
755
 
741
756
  | Function | Returns | Description |
742
757
  |---|---|---|
@@ -753,7 +768,7 @@ Lower-level data models for cloud inventory / obelisk data.
753
768
 
754
769
  ### Map Config
755
770
 
756
- `arkparser.common.map_config` GPS coordinate conversion for ARK maps.
771
+ `arkparser.common.map_config`: GPS coordinate conversion for ARK maps.
757
772
 
758
773
  | Function | Returns | Description |
759
774
  |---|---|---|
@@ -767,7 +782,7 @@ Lower-level data models for cloud inventory / obelisk data.
767
782
 
768
783
  ### Version Detection
769
784
 
770
- `arkparser.common.version_detection` File format identification.
785
+ `arkparser.common.version_detection`: File format identification.
771
786
 
772
787
  | Function | Returns | Description |
773
788
  |---|---|---|
@@ -779,7 +794,7 @@ Lower-level data models for cloud inventory / obelisk data.
779
794
 
780
795
  ### Exceptions
781
796
 
782
- `arkparser.common.exceptions` All exceptions inherit from `ArkParseError`.
797
+ `arkparser.common.exceptions`: All exceptions inherit from `ArkParseError`.
783
798
 
784
799
  | Exception | Description |
785
800
  |---|---|
@@ -6,7 +6,7 @@ This package provides tools to parse various ARK save file formats:
6
6
  - Profile: Player profile data (.arkprofile)
7
7
  - Tribe: Tribe data (.arktribe)
8
8
  - CloudInventory: Obelisk/cloud inventory data (no extension)
9
- - WorldSave: World save data (.ark) auto-detects ASE binary and ASA SQLite
9
+ - WorldSave: World save data (.ark), auto-detects ASE binary and ASA SQLite
10
10
 
11
11
  Supports both ASE (ARK: Survival Evolved) and ASA (ARK: Survival Ascended)
12
12
  formats with automatic detection.
@@ -16,7 +16,8 @@ Example usage:
16
16
  >>>
17
17
  >>> # Load a player profile
18
18
  >>> profile = Profile.load("path/to/profile.arkprofile")
19
- >>> print(f"Player: {profile.player_name}")
19
+ >>> print(f"Gamertag: {profile.player_name}")
20
+ >>> print(f"Character: {profile.character_name}")
20
21
  >>>
21
22
  >>> # Load tribe data
22
23
  >>> tribe = Tribe.load("path/to/tribe.arktribe")
@@ -26,7 +27,7 @@ Example usage:
26
27
  >>> inv = CloudInventory.load("path/to/obelisk_file")
27
28
  >>> print(f"Creatures: {inv.creature_count}, Items: {inv.item_count}")
28
29
  >>>
29
- >>> # Load any world save ASE or ASA, auto-detected
30
+ >>> # Load any world save: ASE or ASA, auto-detected
30
31
  >>> save = WorldSave.load("path/to/TheIsland.ark") # ASE
31
32
  >>> save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
32
33
  """