Datas, Flags related stuff
This commit is contained in:
+8
-3
@@ -10,7 +10,11 @@
|
||||
<!--
|
||||
CHANGE THE SAVE PATH & NAME FOR YOUR MOD HERE!
|
||||
-->
|
||||
<app save-path="YoshiCrafter29/CodenameEngine" save-name="save-default" mod-saves="true" />
|
||||
<haxedef name="SAVE_PATH" value="CodenameEngine"/>
|
||||
<haxedef name="SAVE_NAME" value="save-default"/>
|
||||
|
||||
<haxedef name="SAVE_OPTIONS_PATH" value="CodenameEngine"/>
|
||||
<haxedef name="SAVE_OPTIONS_NAME" value="options"/>
|
||||
|
||||
<!--Switch Export with Unique ApplicationID and Icon-->
|
||||
<set name="APP_ID" value="0x0100f6c013bbc000" />
|
||||
@@ -109,7 +113,7 @@
|
||||
|
||||
<!-- Comment this out to disable Discord RPC !-->
|
||||
<section if="cpp">
|
||||
<!-- <define name="DISCORD_RPC" if="desktop"/> -->
|
||||
<define name="DISCORD_RPC" if="desktop"/>
|
||||
</section>
|
||||
|
||||
<!-- Uncomment this to achive faster compile times, will strip extraneous and commonly unused features. -->
|
||||
@@ -222,9 +226,10 @@
|
||||
<!-- Fix compiling issues -->
|
||||
<setenv name="HAXEPATH" value="./"/>
|
||||
|
||||
<haxedef name="HXCPP_M32" if="32bit" />
|
||||
<haxedef name="HXCPP_CHECK_POINTER" if="release" />
|
||||
<haxedef name="HXCPP_STACK_LINE" if="release" />
|
||||
<haxedef name="HXCPP_DEBUG_LINK" if="release" />
|
||||
<haxedef name="HXCPP_DEBUG_LINK" if="debug" />
|
||||
<haxedef name="HXCPP_CATCH_SEGV" />
|
||||
|
||||
<haxedef name="hscriptPos" /> <!-- for logging -->
|
||||
|
||||
@@ -73,6 +73,16 @@ class GlobalScript {
|
||||
});
|
||||
FlxG.signals.preStateSwitch.add(function() {
|
||||
call("preStateSwitch", []);
|
||||
|
||||
var stateName = Type.getClassName(Type.getClass(@:privateAccess FlxG.game._requestedState));
|
||||
stateName = stateName.substring(stateName.lastIndexOf(".") + 1);
|
||||
if (Flags.MOD_REDIRECT_STATES.exists(stateName)) {
|
||||
@:privateAccess {
|
||||
var classFromString = Type.resolveClass(Flags.MOD_REDIRECT_STATES.get(stateName));
|
||||
if (classFromString != null) FlxG.game._requestedState = Type.createInstance(classFromString, []);
|
||||
else FlxG.game._requestedState = new funkin.backend.scripting.ModState(Flags.MOD_REDIRECT_STATES.get(stateName));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
FlxG.signals.preUpdate.add(function() {
|
||||
|
||||
@@ -35,7 +35,7 @@ class Flags {
|
||||
public static var MOD_DISCORD_LOGO_KEY:String = "";
|
||||
public static var MOD_DISCORD_LOGO_TEXT:String = "";
|
||||
|
||||
@:bypass public static var MOD_REDIRECT_STATES:Map<String, String> = [];
|
||||
public static var MOD_REDIRECT_STATES:Map<String, String> = [];
|
||||
// -- Codename's Default Flags --
|
||||
public static var CURRENT_API_VERSION:Int = 1;
|
||||
public static var COMMIT_NUMBER:Int = GitCommitMacro.commitNumber;
|
||||
@@ -157,10 +157,8 @@ class Flags {
|
||||
public static var ICON_OFFSET:Float = 26;
|
||||
public static var ICON_LERP:Float = 0.33;
|
||||
|
||||
public static var DEFAULT_PREPARE_SPRITE:String = null;
|
||||
public static var DEFAULT_READY_SPRITE:String = 'game/ready';
|
||||
public static var DEFAULT_SET_SPRITE:String = 'game/set';
|
||||
public static var DEFAULT_GO_SPRITE:String = 'game/go';
|
||||
public static var DEFAULT_INTRO_LENGTH:Int = 5;
|
||||
public static var DEFAULT_INTRO_SPRITES:Array<String> = [null, 'game/ready', 'game/set', 'game/go'];
|
||||
|
||||
public static var CAM_BOP_STRENGTH:Float = 0.015;
|
||||
public static var HUD_BOP_STRENGTH:Float = 0.03;
|
||||
@@ -210,13 +208,8 @@ class Flags {
|
||||
public static var DEFAULT_PAUSE_MENU_MUSIC:String = "breakfast";
|
||||
public static var DEFAULT_GAMEOVER_MUSIC:String = "gameOver";
|
||||
|
||||
public static var DEFAULT_MISS1_SOUND:String = "missnote1";
|
||||
public static var DEFAULT_MISS2_SOUND:String = "missnote2";
|
||||
public static var DEFAULT_MISS3_SOUND:String = "missnote3";
|
||||
public static var DEFAULT_INTRO1_SOUND:String = "intro1";
|
||||
public static var DEFAULT_INTRO2_SOUND:String = "intro2";
|
||||
public static var DEFAULT_INTRO3_SOUND:String = "intro3";
|
||||
public static var DEFAULT_INTROGO_SOUND:String = "introGo";
|
||||
public static var DEFAULT_MISS_SOUNDS:Array<String> = ["missnote1", "missnote2", "missnote3"];
|
||||
public static var DEFAULT_INTRO_SOUNDS:Array<String> = ["intro3", "intro2", "intro1", "introGo"];
|
||||
public static var DEFAULT_GAMEOVERSFX_SOUND:String = "gameOverSFX";
|
||||
public static var DEFAULT_GAMEOVEREND_SOUND:String = "gameOverEnd";
|
||||
|
||||
@@ -271,14 +264,19 @@ class Flags {
|
||||
if (!(data.length > 0)) return;
|
||||
var res = IniUtil.parseString(data);
|
||||
|
||||
if (res.exists("Common")) for (key => value in res.get("Common")) flags["MOD_" + key] = value;
|
||||
if (res.exists("Discord")) for (key => value in res.get("Discord")) flags["MOD_DISCORD_" + key] = value;
|
||||
if (res.exists("Flags")) for (key => value in res.get("Flags")) flags[key] = value;
|
||||
|
||||
if (res.exists("StateRedirects")) for (key => value in res.get("StateRedirects"))
|
||||
if (!Flags.MOD_REDIRECT_STATES.exists(key)) Flags.MOD_REDIRECT_STATES.set(key, value);
|
||||
if (res.exists("StateRedirects.force")) for (key => value in res.get("StateRedirects.force"))
|
||||
Flags.MOD_REDIRECT_STATES.set(key, value);
|
||||
for (name => section in res) {
|
||||
switch (name) {
|
||||
case "Common": for (key => value in section) flags["MOD_" + key] = value;
|
||||
case "Discord": for (key => value in section) flags["MOD_DISCORD_" + key] = value;
|
||||
case "Flags": for (key => value in section) flags[key] = value;
|
||||
case "StateRedirects.force": for (key => value in section) MOD_REDIRECT_STATES.set(key, value);
|
||||
case "StateRedirects": for (key => value in section) if (!MOD_REDIRECT_STATES.exists(key)) MOD_REDIRECT_STATES.set(key, value);
|
||||
case "Global": // do nothing
|
||||
default:
|
||||
if (Type.typeof(Reflect.field(Flags, name)) == Type.typeof(section)) Reflect.setField(Flags, name, section);
|
||||
else trace('Invalid section $name');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function loadFromDatas(datas:Array<String>) {
|
||||
|
||||
@@ -135,18 +135,6 @@ class MainState extends FlxState {
|
||||
}
|
||||
}
|
||||
|
||||
FlxG.signals.preStateSwitch.add(() -> {
|
||||
var stateName = Type.getClassName(Type.getClass(@:privateAccess FlxG.game._requestedState));
|
||||
stateName = stateName.substring(stateName.lastIndexOf(".") + 1);
|
||||
if (Flags.MOD_REDIRECT_STATES.exists(stateName)) {
|
||||
@:privateAccess {
|
||||
var classFromString = Type.resolveClass(Flags.MOD_REDIRECT_STATES.get(stateName));
|
||||
if (classFromString != null) FlxG.game._requestedState = Type.createInstance(classFromString, []);
|
||||
else FlxG.game._requestedState = new funkin.backend.scripting.ModState(Flags.MOD_REDIRECT_STATES.get(stateName));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!Flags.DISABLE_WARNING_SCREEN) FlxG.switchState(new funkin.menus.WarningState());
|
||||
else FlxG.switchState(new TitleState());
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ class FlagMacro {
|
||||
var skip = field.meta.hasMeta(":bypass");
|
||||
var hasLazy = field.meta.hasMeta(":lazy");
|
||||
|
||||
if(skip) continue;
|
||||
if (skip) continue;
|
||||
|
||||
switch (field.kind) {
|
||||
case FVar(type, expr):
|
||||
@@ -61,9 +61,8 @@ class FlagMacro {
|
||||
}
|
||||
}
|
||||
|
||||
if(expr == null)
|
||||
Context.error('Flag ' + field.name + ' must have a default value', field.pos);
|
||||
if(type == null) {
|
||||
if (expr == null) Context.error('Flag ' + field.name + ' must have a default value', field.pos);
|
||||
if (type == null) {
|
||||
switch(expr.expr) {
|
||||
case EConst(CIdent("true")) | EConst(CIdent("false")):
|
||||
type = macro: Bool;
|
||||
@@ -84,13 +83,13 @@ class FlagMacro {
|
||||
switch(type) {
|
||||
case macro: Array<TrimmedString>:
|
||||
field.kind = FVar(macro: Array<String>, expr);
|
||||
parser = macro value.split(",").map((e) -> e.trim());
|
||||
parser = macro value.split(",").map((e) -> e == 'NULL' ? null : e.trim());
|
||||
case macro: Array<String>:
|
||||
parser = macro value.split(",");
|
||||
parser = macro value.split(",").map((e) -> e == 'NULL' ? null : e);
|
||||
case (macro: Array<Int>) | (macro: Array<FlxColor>):
|
||||
parser = macro value.split(",").map((e) -> Std.parseInt(e));
|
||||
parser = macro value.split(",").map((e) -> e == 'NULL' ? null : Std.parseInt(e));
|
||||
case macro: Array<Float>:
|
||||
parser = macro value.split(",").map((e) -> Std.parseFloat(e));
|
||||
parser = macro value.split(",").map((e) -> e == 'NULL' ? null : Std.parseFloat(e));
|
||||
case macro: Array<Bool>:
|
||||
parser = macro value.split(",").map(parseBool);
|
||||
case macro: TrimmedString:
|
||||
@@ -183,13 +182,15 @@ class FlagMacro {
|
||||
case TPath({name: "Array", pack: []}):
|
||||
Context.error("Flag " + field.name + " cannot be an Array that isn't a String or Bool or TrimmedString or Int or Float", field.pos);
|
||||
case TPath({name: "Map", pack: []}):
|
||||
Context.error("Flag " + field.name + " cannot be a Map<K, V>", field.pos);
|
||||
//Context.error("Flag " + field.name + " cannot be a Map<K, V>", field.pos);
|
||||
resetExprs.push(macro $i{field.name} = ${expr});
|
||||
continue;
|
||||
default:
|
||||
Context.error("Flag " + field.name + " must be either a Bool, Int, Float, String, Array<String>, Array<Int>, Array<Float>, Array<Bool> or Array<TrimmedString>", field.pos);
|
||||
}
|
||||
|
||||
if(parser == null) {
|
||||
Context.error("Flag " + field.name + " must be either a Bool, Int, String, Array<String>, Array<Bool> or Array<TrimmedString>", field.pos);
|
||||
if (parser == null) {
|
||||
Context.error("Flag " + field.name + " must be either a Bool, Int, Float, String, Array<String>, Array<Int>, Array<Float>, Array<Bool> or Array<TrimmedString>", field.pos);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -457,15 +457,15 @@ class PlayState extends MusicBeatState
|
||||
/**
|
||||
* Length of the intro countdown.
|
||||
*/
|
||||
public var introLength:Int = 5;
|
||||
public var introLength:Int = Flags.DEFAULT_INTRO_LENGTH;
|
||||
/**
|
||||
* Array of sprites for the intro.
|
||||
*/
|
||||
public var introSprites:Array<String> = [Flags.DEFAULT_PREPARE_SPRITE, Flags.DEFAULT_READY_SPRITE, Flags.DEFAULT_SET_SPRITE, Flags.DEFAULT_GO_SPRITE];
|
||||
public var introSprites:Array<String> = Flags.DEFAULT_INTRO_SPRITES.copy();
|
||||
/**
|
||||
* Array of sounds for the intro.
|
||||
*/
|
||||
public var introSounds:Array<String> = [Flags.DEFAULT_INTRO3_SOUND, Flags.DEFAULT_INTRO2_SOUND, Flags.DEFAULT_INTRO1_SOUND, Flags.DEFAULT_INTROGO_SOUND];
|
||||
public var introSounds:Array<String> = Flags.DEFAULT_INTRO_SOUNDS.copy();
|
||||
|
||||
/**
|
||||
* Whenever the game is paused or not.
|
||||
@@ -1765,7 +1765,7 @@ class PlayState extends MusicBeatState
|
||||
var directionID:Null<Int> = note == null ? direction : note.strumID;
|
||||
if (playerID == null || directionID == null || playerID == -1) return;
|
||||
|
||||
var event:NoteMissEvent = gameAndCharsEvent("onPlayerMiss", EventManager.get(NoteMissEvent).recycle(note, -10, 1, muteVocalsOnMiss, note != null ? -0.0475 : -0.04, Paths.sound(FlxG.random.getObject([Flags.DEFAULT_MISS1_SOUND, Flags.DEFAULT_MISS2_SOUND, Flags.DEFAULT_MISS3_SOUND])), FlxG.random.float(0.1, 0.2), note == null, combo > 5, "sad", true, true, "miss", strumLines.members[playerID].characters, playerID, note != null ? note.noteType : null, directionID, 0));
|
||||
var event:NoteMissEvent = gameAndCharsEvent("onPlayerMiss", EventManager.get(NoteMissEvent).recycle(note, -10, 1, muteVocalsOnMiss, note != null ? -0.0475 : -0.04, Paths.sound(FlxG.random.getObject(Flags.DEFAULT_MISS_SOUNDS)), FlxG.random.float(0.1, 0.2), note == null, combo > 5, "sad", true, true, "miss", strumLines.members[playerID].characters, playerID, note != null ? note.noteType : null, directionID, 0));
|
||||
strumLine.onMiss.dispatch(event);
|
||||
if (event.cancelled) return;
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class PauseSubState extends MusicBeatSubstate
|
||||
|
||||
public function new(?items:Array<String>, ?selectCall:NameEvent->Void) {
|
||||
super();
|
||||
menuItems = items != null ? items : Flags.DEFAULT_PAUSE_ITEMS;
|
||||
menuItems = items != null ? items : Flags.DEFAULT_PAUSE_ITEMS.copy();
|
||||
this.selectCall = selectCall;
|
||||
}
|
||||
|
||||
|
||||
@@ -193,8 +193,12 @@ class Options
|
||||
public static var SOLO_DEV_RELOAD(get, null):Array<FlxKey>;
|
||||
|
||||
public static function load() {
|
||||
var path = haxe.macro.Compiler.getDefine("SAVE_OPTIONS_PATH"), name = haxe.macro.Compiler.getDefine("SAVE_OPTIONS_NAME");
|
||||
if (path == null) path = 'CodenameEngine';
|
||||
if (name == null) name = 'options';
|
||||
|
||||
if (__save == null) __save = new FlxSave();
|
||||
__save.bind("options", "CodenameEngine");
|
||||
__save.bind(name, path);
|
||||
__load();
|
||||
|
||||
if (!__eventAdded) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package funkin.options.categories;
|
||||
|
||||
import funkin.savedata.FunkinSave;
|
||||
|
||||
class MiscOptions extends TreeMenuScreen {
|
||||
public function new() {
|
||||
super('optionsTree.miscellaneous-name', 'optionsTree.miscellaneous-desc', 'MiscOptions.');
|
||||
@@ -20,7 +22,9 @@ class MiscOptions extends TreeMenuScreen {
|
||||
|
||||
add(new Separator());
|
||||
add(new TextOption(getNameID('resetSaveData'), getDescID('resetSaveData'), () -> {
|
||||
// TODO: SAVE DATA RESETTING
|
||||
FunkinSave.save.erase();
|
||||
FunkinSave.highscores.clear();
|
||||
FunkinSave.flush();
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -24,10 +24,12 @@ class FunkinSave {
|
||||
public static var save:FlxSave;
|
||||
|
||||
public static function init() {
|
||||
//trace(Application.current.meta.get('save-path'));
|
||||
//trace(Application.current.meta.get('save-name'));
|
||||
save = new FlxSave();
|
||||
save.bind('save-default', #if sys 'YoshiCrafter29/CodenameEngine' #else 'CodenameEngine' #end);
|
||||
var path = haxe.macro.Compiler.getDefine("SAVE_PATH"), name = haxe.macro.Compiler.getDefine("SAVE_NAME");
|
||||
if (path == null) path = 'CodenameEngine';
|
||||
if (name == null) name = 'save-default';
|
||||
|
||||
if (save == null) save = new FlxSave();
|
||||
save.bind(name, path);
|
||||
load();
|
||||
|
||||
if (!__eventAdded) {
|
||||
|
||||
Reference in New Issue
Block a user