Skip to content

Commit 6f059ee

Browse files
committed
Gaming.
1 parent 0aa9aa5 commit 6f059ee

File tree

8 files changed

+167
-40
lines changed

8 files changed

+167
-40
lines changed
499 KB
Binary file not shown.
16.3 KB
Loading
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<TextureAtlas imagePath="NOTE_assets.png">
3+
<!-- Created with Adobe Animate version 22.0.0.93 -->
4+
<!-- http://www.adobe.com/products/animate.html -->
5+
<SubTexture name="ap0000" x="100" y="0" width="137" height="142"/>
6+
<SubTexture name="ap hold end0000" x="0" y="0" width="50" height="64"/>
7+
<SubTexture name="ap hold piece0000" x="50" y="0" width="50" height="44"/>
8+
<SubTexture name="arrowAP0000" x="237" y="0" width="137" height="142"/>
9+
</TextureAtlas>

source/archipelago/APGameState.hx

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ typedef SetNotifyPacket =
297297
typedef ProcessedItemsResult =
298298
{
299299
tickets:Int,
300-
nonSongs:Map<String, Int>,
300+
nonSongs:haxe.DynamicAccess<Int>,
301301
nonSongsNames:Array<String>,
302302
unlockedSongs:Array<{song:String, mod:String}>,
303303
itemsToTrigger:Array<String>,
@@ -326,7 +326,7 @@ class APGameState
326326
// Sanity-related variables
327327
public var unlockedSanityItems:Map<String, SanityItemData> = new Map<String, SanityItemData>();
328328
public var sanitySettings:SanitySettings = {enable_sanity_locations: false, sanity_completion_type: "on_getting", sanity_types: []};
329-
public var sanityLocationIds:Map<String, Int> = new Map<String, Int>();
329+
public var sanityLocationIds:haxe.DynamicAccess<Int> = new haxe.DynamicAccess<Int>();
330330

331331
public function locationData(songName:String, modName:String):Array<Int>
332332
{
@@ -532,8 +532,6 @@ class APGameState
532532
{
533533
var locations:Array<Int> = [];
534534

535-
trace('is setting on: ${sanitySettings.enable_sanity_locations}');
536-
537535
if (!sanitySettings.enable_sanity_locations)
538536
return locations;
539537

@@ -586,7 +584,7 @@ class APGameState
586584
// First try slot data lookup
587585
if (_slotData != null && Reflect.hasField(_slotData, "sanityLocationData"))
588586
{
589-
var sanityLocationData:Map<String, SanityLocationData> = Reflect.field(_slotData, "sanityLocationData");
587+
var sanityLocationData:haxe.DynamicAccess<SanityLocationData> = Reflect.field(_slotData, "sanityLocationData");
590588
if (sanityLocationData != null)
591589
{
592590
var locationName = "Use " + itemType + ": " + itemName;
@@ -820,19 +818,19 @@ class APGameState
820818
// Initialize sanity location IDs from slot data
821819
if (_slotData != null && Reflect.hasField(_slotData, "sanityLocationData"))
822820
{
823-
var sanityLocationData:Map<String, SanityLocationData> = Reflect.field(_slotData, "sanityLocationData");
821+
var sanityLocationData:haxe.DynamicAccess<SanityLocationData> = Reflect.field(_slotData, "sanityLocationData");
824822
if (sanityLocationData != null)
825823
{
826824
for (locationName => locationData in sanityLocationData)
827825
{
828826
sanityLocationIds.set(locationName, locationData.id);
829827
}
830-
trace("Loaded " + Lambda.count(sanityLocationIds) + " sanity location IDs");
828+
trace("Loaded " + [for (key in sanityLocationIds.keys()) key].length + " sanity location IDs");
831829
}
832830
}
833831

834832
// Initialize unlocked sanity items (empty at start - will be populated as items are received)
835-
unlockedSanityItems.clear();
833+
unlockedSanityItems = new Map<String, SanityItemData>();
836834
trace("Sanity system initialized");
837835
}
838836

@@ -1097,7 +1095,7 @@ class APGameState
10971095
{
10981096
unlockedSanityItems.set(item.name, item.data);
10991097
}
1100-
trace("Loaded " + Lambda.count(unlockedSanityItems) + " unlocked sanity items from save");
1098+
trace("Loaded " + [for (key in unlockedSanityItems.keys()) key].length + " unlocked sanity items from save");
11011099
}
11021100

11031101
_saveData.save();
@@ -1201,7 +1199,7 @@ class APGameState
12011199
if (reg.match(trapName))
12021200
{
12031201
var modifier = reg.matched(1);
1204-
archipelago.APItem.APChartModifier.restoreFromSave(modifier).fromTrapLink = true;
1202+
archipelago.APItem.APChartModifier.restoreFromSave(modifier, true).fromTrapLink = true;
12051203
}
12061204
else
12071205
{
@@ -1552,7 +1550,7 @@ class APGameState
15521550
specialItems.set(itemName, currentPackages["Friday Night Funkin"].item_name_to_id.get(item));
15531551
}
15541552
}
1555-
//trace("Special Items: " + specialItems);
1553+
trace("Special Items: " + specialItems);
15561554

15571555
return specialItems;
15581556
}
@@ -1615,7 +1613,7 @@ class APGameState
16151613
function processItemsSync(songs:Array<NetworkItem>):ProcessedItemsResult
16161614
{
16171615
var tickets = 0;
1618-
var nonSongs:Map<String, Int> = [];
1616+
var nonSongs:haxe.DynamicAccess<Int> = new haxe.DynamicAccess<Int>();
16191617
var nonSongsNames:Array<String> = [];
16201618
var unlockedSongs:Array<{song:String, mod:String}> = [];
16211619
var itemsToTrigger:Array<String> = [];
@@ -1637,8 +1635,25 @@ class APGameState
16371635
// Use the realName function to convert special keywords back to actual brackets
16381636
itemName = APInfo.realName(itemName);
16391637

1640-
// Check if this is a sanity item
1641-
if (itemName.indexOf("Stage: ") == 0 || itemName.indexOf("Character: ") == 0)
1638+
// Check if this is a sanity item by ID instead of name
1639+
var isSanityItem = false;
1640+
if (_slotData != null && _slotData.sanityData != null)
1641+
{
1642+
// Check if the item ID exists in the sanity data
1643+
for (sanityItemName in _slotData.sanityData.keys())
1644+
{
1645+
var sanityItemData = _slotData.sanityData.get(sanityItemName);
1646+
if (sanityItemData != null && sanityItemData.id == songName.item)
1647+
{
1648+
isSanityItem = true;
1649+
// Use the sanity item name from slot data for consistency
1650+
itemName = sanityItemName;
1651+
break;
1652+
}
1653+
}
1654+
}
1655+
1656+
if (isSanityItem)
16421657
{
16431658
// This is a sanity item - add to sanity tracking
16441659
sanityItems.push(itemName);
@@ -1727,7 +1742,6 @@ class APGameState
17271742
// Handle sanity items
17281743
for (sanityItemName in result.sanityItems)
17291744
{
1730-
trace('Sanity Item: $sanityItemName');
17311745
handleSanityItemReceived(sanityItemName);
17321746
}
17331747

@@ -1767,8 +1781,7 @@ class APGameState
17671781
// Get sanity item data from slot data
17681782
if (_slotData != null && Reflect.hasField(_slotData, "sanityData"))
17691783
{
1770-
var sanityData:DynamicAccess<SanityItemData> = Reflect.field(_slotData, "sanityData");
1771-
trace('SlotData: $_slotData\nSanityData: $sanityData');
1784+
var sanityData:haxe.DynamicAccess<SanityItemData> = Reflect.field(_slotData, "sanityData");
17721785
if (sanityData != null && sanityData.exists(itemName))
17731786
{
17741787
var sanityItemData = sanityData.get(itemName);
@@ -1881,14 +1894,24 @@ class APGameState
18811894

18821895
public function isSanityItemUnlocked(itemType:String, itemName:String):Bool
18831896
{
1897+
// If no sanity system exists at all, everything is unlocked
1898+
var unlockedSanityCount = [for (key in unlockedSanityItems.keys()) key].length;
1899+
var sanityLocationCount = [for (key in sanityLocationIds.keys()) key].length;
1900+
if (unlockedSanityCount == 0 && sanityLocationCount == 0) return true;
1901+
1902+
1903+
18841904
var key = itemType + ": " + itemName;
18851905
return unlockedSanityItems.exists(key);
18861906
}
18871907

18881908
public function checkSongCharactersAndStageUnlocked(song:backend.Song.SwagSong):Array<String>
18891909
{
1890-
trace('Unlocked Sanity Items: $unlockedSanityItems\nSanity Location ID\'s: $sanityLocationIds');
18911910
// Check if sanity system exists at all (regardless of location settings)
1911+
var unlockedSanityCount = [for (key in unlockedSanityItems.keys()) key].length;
1912+
var sanityLocationCount = [for (key in sanityLocationIds.keys()) key].length;
1913+
if (unlockedSanityCount == 0 && sanityLocationCount == 0) return [];
1914+
18921915
var missingItems:Array<String> = [];
18931916

18941917
// Check what types of sanity items we should look for

source/archipelago/APInfo.hx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ typedef APSlotDataType = {
3939
locationType: String,
4040
locationMethod: String,
4141
selectedSongs: Array<String>,
42-
songData: Map<String, SongDetailData>,
42+
songData: haxe.DynamicAccess<SongDetailData>,
4343
?custom_weeks: Dynamic, // Custom weeks data from HScript processing
4444
?song_modifications: Dynamic, // Song additions/exclusions data
4545
?unoColorsUsed:Array<{name:String, color_code:String}>, // Uno mod colors used in the slot
4646
?highQualityExpected: Bool, // Whether high quality trap content is expected to be available
47-
?sanityData: Map<String, SanityItemData>, // Sanity items for this player
48-
?sanityLocationData: Map<String, SanityLocationData>, // Sanity locations for this player
47+
?sanityData: haxe.DynamicAccess<SanityItemData>, // Sanity items for this player
48+
?sanityLocationData: haxe.DynamicAccess<SanityLocationData>, // Sanity locations for this player
4949
?sanitySettings: SanitySettings // Sanity settings for this player
5050
}
5151

@@ -62,7 +62,7 @@ abstract APSlotData(APSlotDataType) from APSlotDataType to APSlotDataType {
6262
locationType: "Song Completion",
6363
locationMethod: "Per Song",
6464
selectedSongs: [],
65-
songData: new Map<String, SongDetailData>(),
65+
songData: new haxe.DynamicAccess<SongDetailData>(),
6666
custom_weeks: null,
6767
song_modifications: null,
6868
highQualityExpected: false
@@ -79,13 +79,13 @@ abstract APSlotData(APSlotDataType) from APSlotDataType to APSlotDataType {
7979
public var locationType(get, never):String;
8080
public var locationMethod(get, never):String;
8181
public var selectedSongs(get, never):Array<String>;
82-
public var songData(get, never):Map<String, SongDetailData>;
82+
public var songData(get, never):haxe.DynamicAccess<SongDetailData>;
8383
public var custom_weeks(get, never):Dynamic;
8484
public var song_modifications(get, never):Dynamic;
8585
public var unoColorsUsed(get, never):Array<{name:String, color_code:String}>;
8686
public var highQualityExpected(get, never):Bool;
87-
public var sanityData(get, never):Map<String, SanityItemData>;
88-
public var sanityLocationData(get, never):Map<String, SanityLocationData>;
87+
public var sanityData(get, never):haxe.DynamicAccess<SanityItemData>;
88+
public var sanityLocationData(get, never):haxe.DynamicAccess<SanityLocationData>;
8989
public var sanitySettings(get, never):SanitySettings;
9090

9191
private function get_deathLink():Bool return this.deathLink;
@@ -98,13 +98,13 @@ abstract APSlotData(APSlotDataType) from APSlotDataType to APSlotDataType {
9898
private function get_locationType():String return this.locationType;
9999
private function get_locationMethod():String return this.locationMethod;
100100
private function get_selectedSongs():Array<String> return this.selectedSongs;
101-
private function get_songData():Map<String, SongDetailData> return this.songData;
101+
private function get_songData():haxe.DynamicAccess<SongDetailData> return this.songData;
102102
private function get_custom_weeks():Dynamic return this.custom_weeks;
103103
private function get_song_modifications():Dynamic return this.song_modifications;
104104
private function get_unoColorsUsed():Array<{name:String, color_code:String}> return this.unoColorsUsed;
105105
private function get_highQualityExpected():Bool return this.highQualityExpected != null ? this.highQualityExpected : false;
106-
private function get_sanityData():Map<String, SanityItemData> return this.sanityData != null ? this.sanityData : new Map<String, SanityItemData>();
107-
private function get_sanityLocationData():Map<String, SanityLocationData> return this.sanityLocationData != null ? this.sanityLocationData : new Map<String, SanityLocationData>();
106+
private function get_sanityData():haxe.DynamicAccess<SanityItemData> return this.sanityData != null ? this.sanityData : new haxe.DynamicAccess<SanityItemData>();
107+
private function get_sanityLocationData():haxe.DynamicAccess<SanityLocationData> return this.sanityLocationData != null ? this.sanityLocationData : new haxe.DynamicAccess<SanityLocationData>();
108108
private function get_sanitySettings():SanitySettings return this.sanitySettings != null ? this.sanitySettings : {enable_sanity_locations: false, sanity_completion_type: "on_getting", sanity_types: []};
109109

110110
public function get(key:String):Dynamic {

source/archipelago/APItem.hx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,8 +2046,8 @@ class APChartModifier extends APTrap {
20462046
}, false, false, false, fromTrapLink);
20472047
}
20482048

2049-
public static function restoreFromSave(modifier:String):APChartModifier {
2050-
return new APChartModifier(modifier);
2049+
public static function restoreFromSave(modifier:String, ?fromTrapLink:Bool):APChartModifier {
2050+
return new APChartModifier(modifier, fromTrapLink);
20512051
}
20522052
}
20532053

0 commit comments

Comments
 (0)