Skip to content

Commit bb81bd1

Browse files
committed
Help-
1 parent d0ea056 commit bb81bd1

File tree

3 files changed

+140
-6
lines changed

3 files changed

+140
-6
lines changed

source/archipelago/APGameState.hx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,13 +546,16 @@ class APGameState
546546
|| _ap.clientStatus == ClientStatus.READY;
547547
}
548548

549-
public var _slotData:Dynamic;
549+
public var _slotData:APInfo.APSlotData;
550550

551551
public function new(ap:Client, slotData:Dynamic)
552552
{
553553
_ap = ap;
554554
_slotData = slotData;
555555

556+
trace("slotData: " + Std.string(slotData));
557+
trace("Retained slotData: " + Std.string(_slotData));
558+
556559
_seed = _ap.seed;
557560

558561
archipelago.APPlayState.apGame = this;
@@ -885,6 +888,18 @@ class APGameState
885888
return songAndMod;
886889
}
887890

891+
// Check for songs and mods from an array of song names
892+
public function getSongsAndModsFromArray(songNames:Array<String>):Array<{song:String, ?mod:String}>
893+
{
894+
var songsAndMods:Array<{song:String, ?mod:String}> = [];
895+
for (songName in songNames)
896+
{
897+
var songAndMod = getSongAndMod(songName);
898+
songsAndMods.push(songAndMod);
899+
}
900+
return songsAndMods;
901+
}
902+
888903
public function findSpecialItems():Map<String, Int>
889904
{
890905
var specialItems:Map<String, Int> = new Map<String, Int>();

source/archipelago/APInfo.hx

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,82 @@
11
package archipelago;
22

33
import substates.RankingSubstate;
4+
5+
typedef SongDetailData = {
6+
id: Int,
7+
modded: Bool,
8+
playerOwner: String,
9+
sharedWith: Array<String>,
10+
songName: String
11+
}
12+
13+
typedef APSlotDataType = {
14+
deathLink: Bool,
15+
fullSongCount: Int,
16+
victoryLocation: String,
17+
victoryID: Int,
18+
ticketWinCount: Int,
19+
gradeNeeded: String,
20+
accuracyNeeded: String,
21+
locationType: String,
22+
locationMethod: String,
23+
selectedSongs: Array<String>,
24+
songData: Map<String, SongDetailData>
25+
}
26+
27+
abstract APSlotData(APSlotDataType) from APSlotDataType to APSlotDataType {
28+
public function new(?data:APSlotDataType) {
29+
this = data != null ? data : {
30+
deathLink: false,
31+
fullSongCount: 0,
32+
victoryLocation: "",
33+
victoryID: 0,
34+
ticketWinCount: 1,
35+
gradeNeeded: "Any",
36+
accuracyNeeded: "Any",
37+
locationType: "Song Completion",
38+
locationMethod: "Per Song",
39+
selectedSongs: [],
40+
songData: new Map<String, SongDetailData>()
41+
};
42+
}
43+
44+
public var deathLink(get, never):Bool;
45+
public var fullSongCount(get, never):Int;
46+
public var victoryLocation(get, never):String;
47+
public var victoryID(get, never):Int;
48+
public var ticketWinCount(get, never):Int;
49+
public var gradeNeeded(get, never):String;
50+
public var accuracyNeeded(get, never):String;
51+
public var locationType(get, never):String;
52+
public var locationMethod(get, never):String;
53+
public var selectedSongs(get, never):Array<String>;
54+
public var songData(get, never):Map<String, SongDetailData>;
55+
56+
private function get_deathLink():Bool return this.deathLink;
57+
private function get_fullSongCount():Int return this.fullSongCount;
58+
private function get_victoryLocation():String return this.victoryLocation;
59+
private function get_victoryID():Int return this.victoryID;
60+
private function get_ticketWinCount():Int return this.ticketWinCount;
61+
private function get_gradeNeeded():String return this.gradeNeeded;
62+
private function get_accuracyNeeded():String return this.accuracyNeeded;
63+
private function get_locationType():String return this.locationType;
64+
private function get_locationMethod():String return this.locationMethod;
65+
private function get_selectedSongs():Array<String> return this.selectedSongs;
66+
private function get_songData():Map<String, SongDetailData> return this.songData;
67+
68+
public function get(key:String):Dynamic {
69+
return Reflect.field(this, key);
70+
}
71+
72+
public function set(key:String, value:Dynamic):Void {
73+
Reflect.setField(this, key, value);
74+
}
75+
76+
public function hasKey(key:String):Bool {
77+
return Reflect.hasField(this, key);
78+
}
79+
}
480
class APInfo {
581
public static var ap:Client;
682
public static var apGame:APGameState;
@@ -19,8 +95,8 @@ class APInfo {
1995
public static var hintPoints(get, never):Int;
2096
public static var hintCost(get, never):Int;
2197

22-
public static var slotData(get, never):Dynamic;
23-
public static function get_slotData():Dynamic {
98+
public static var slotData(get, never):APSlotData;
99+
public static function get_slotData():APSlotData {
24100
return apGame?._slotData;
25101
}
26102

source/managers/APFreeplayManager.hx

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,39 @@ import archipelago.PacketTypes.ClientStatus;
1717
/*
1818
1919
*/
20+
21+
// SongInfo structure as typedef
22+
typedef SongInfo = {
23+
var song:String;
24+
var mod:String;
25+
var unlocked:Bool;
26+
var missing:Bool;
27+
var hinted:Bool;
28+
var otherData:Dynamic;
29+
}
30+
31+
abstract APSongData(SongInfo) {
32+
// SongInfo holds all relevant data for a song
33+
public static function create(song:String, mod:String, unlocked:Bool, missing:Bool, hinted:Bool, otherData:Dynamic):APSongData {
34+
return new APSongData({song: song, mod: mod, unlocked: unlocked, missing: missing, hinted: hinted, otherData: otherData});
35+
}
36+
37+
public var song(get, never):String;
38+
public var mod(get, never):String;
39+
public var unlocked(get, never):Bool;
40+
public var missing(get, never):Bool;
41+
public var hinted(get, never):Bool;
42+
public var otherData(get, never):Dynamic;
43+
44+
inline function get_song():String return this.song;
45+
inline function get_mod():String return this.mod;
46+
inline function get_unlocked():Bool return this.unlocked;
47+
inline function get_missing():Bool return this.missing;
48+
inline function get_hinted():Bool return this.hinted;
49+
inline function get_otherData():Dynamic return this.otherData;
50+
51+
52+
}
2053
class APFreeplayManager extends FreeplayManager {
2154
#if ARCHIPELAGO_ALLOWED
2255
public static var curUnlocked:Array<{song:String, mod:String}> = [];
@@ -132,8 +165,8 @@ class APFreeplayManager extends FreeplayManager {
132165
}
133166
}
134167

135-
trace("Reloading songs in FreeplayState instance...");
136-
FreeplayManager.getInstance().fpManager.reloadFreeplay(true);
168+
trace("Reloading songs in FreeplayManager instance...");
169+
FreeplayManager.instance.reloadFreeplay(true);
137170

138171
trace("Checking if the song is a victory song...");
139172
if (archipelago.APEntryState.apGame.checkGoal(songName, modName)) {
@@ -306,8 +339,18 @@ class APFreeplayManager extends FreeplayManager {
306339
return array;
307340
}
308341

342+
var apSongData = archipelago.APInfo.apGame?.getSongAndModsFromArray(archipelago.APInfo.slotData.selectedSongs);
343+
309344
WeekData.setDirectoryFromWeek(leWeek);
310-
for (song in leWeek.songs)
345+
var allowedSongs = [for (song in leWeek.songs) {
346+
for (songData in apSongData) {
347+
if (songData.song == song[0] && songData.mod == leWeek.folder) {
348+
song;
349+
}
350+
}
351+
}];
352+
353+
for (song in allowedSongs)
311354
{
312355
var categoryWhaat:Array<String> = Std.isOfType(leWeek.category, String) ?
313356
(cast leWeek.category:String).split(',').map(function(cat:String):String {

0 commit comments

Comments
 (0)