diff --git a/art/generateDoc.bat b/art/generateDoc.bat
index 5159ca88..e2d35e4f 100644
--- a/art/generateDoc.bat
+++ b/art/generateDoc.bat
@@ -1,7 +1,8 @@
@ECHO OFF
cd ..
echo Building Game...
-lime build windows --haxeflag="--macro include('scripting')" --haxeflag="-xml docs/doc.xml"
-echo Generating Documentation...
-haxelib run dox -i docs --include funkin --include scripting
-echo Done!
\ No newline at end of file
+lime build windows --haxeflag="--macro include('scripting')" --haxeflag="-xml docs/doc.xml" -D DOCUMENTATION --no-output
+echo art
+
+echo Generated the api xml file at docs/doc.xml
+echo Please put this in FNF-CNE-Devs.github.io/api-generator/api/doc.xml
\ No newline at end of file
diff --git a/assets/data/stages/school-evil.hx b/assets/data/stages/school-evil.hx
index af086dab..c29dbeea 100644
--- a/assets/data/stages/school-evil.hx
+++ b/assets/data/stages/school-evil.hx
@@ -1,5 +1,4 @@
function create() {
- importScript("data/scripts/pixel");
isSpooky = true;
// Make transition work between school types
diff --git a/assets/data/stages/school-evil.xml b/assets/data/stages/school-evil.xml
index 568b3aad..48ee14b7 100644
--- a/assets/data/stages/school-evil.xml
+++ b/assets/data/stages/school-evil.xml
@@ -1,5 +1,6 @@
+
\ No newline at end of file
diff --git a/assets/data/stages/school.hx b/assets/data/stages/school.hx
index 5cba9421..dc55a69d 100644
--- a/assets/data/stages/school.hx
+++ b/assets/data/stages/school.hx
@@ -1,5 +1,5 @@
+//
function create() {
- importScript("data/scripts/pixel");
if (PlayState.SONG.meta.name.toLowerCase() == "roses") {
bgGirls.animation.remove("danceLeft");
bgGirls.animation.remove("danceRight");
diff --git a/assets/data/stages/school.xml b/assets/data/stages/school.xml
index dabf463b..7a2740ad 100644
--- a/assets/data/stages/school.xml
+++ b/assets/data/stages/school.xml
@@ -1,5 +1,7 @@
+
+
diff --git a/source/funkin/backend/scripting/events/SplashShowEvent.hx b/source/funkin/backend/scripting/events/SplashShowEvent.hx
new file mode 100644
index 00000000..46504d44
--- /dev/null
+++ b/source/funkin/backend/scripting/events/SplashShowEvent.hx
@@ -0,0 +1,23 @@
+package funkin.backend.scripting.events;
+
+import funkin.game.SplashGroup;
+import funkin.game.Strum;
+
+final class SplashShowEvent extends CancellableEvent {
+ /**
+ Splash name/type
+ **/
+ public var splashName:String;
+ /**
+ Splash that is shown
+ **/
+ public var splash:FunkinSprite;
+ /**
+ Strum that the splash is shown on
+ **/
+ public var strum:Strum;
+ /**
+ Splash group that the splash is from
+ **/
+ public var group:SplashGroup;
+}
\ No newline at end of file
diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx
index 619ac751..28277d44 100644
--- a/source/funkin/backend/shaders/FunkinShader.hx
+++ b/source/funkin/backend/shaders/FunkinShader.hx
@@ -484,6 +484,10 @@ uniform bool hasColorTransform;
vec4 flixel_texture2D(sampler2D bitmap, vec2 coord) {
vec4 color = texture2D(bitmap, coord);
+ return applyFlixelEffects(color);
+}
+
+vec4 applyFlixelEffects(vec4 color) {
if (!hasTransform) {
return color;
}
@@ -496,7 +500,7 @@ vec4 flixel_texture2D(sampler2D bitmap, vec2 coord) {
return color * openfl_Alphav;
}
- color = vec4(color.rgb / color.a, color.a);
+ color.rgb = color.rgb / color.a;
color = clamp(openfl_ColorOffsetv + (color * openfl_ColorMultiplierv), 0.0, 1.0);
if (color.a > 0.0) {
diff --git a/source/funkin/backend/utils/MemoryUtil.hx b/source/funkin/backend/utils/MemoryUtil.hx
index 85f7d145..ac807088 100644
--- a/source/funkin/backend/utils/MemoryUtil.hx
+++ b/source/funkin/backend/utils/MemoryUtil.hx
@@ -117,7 +117,17 @@ class MemoryUtil {
22 => "DDR2 FB-DIMM",
24 => "DDR3",
25 => "FBD2",
- 26 => "DDR4"
+ 26 => "DDR4",
+ 27 => "LPDDR",
+ 28 => "LPDDR2",
+ 29 => "LPDDR3",
+ 30 => "LPDDR4",
+ 31 => "Logical Non-volatile device",
+ 32 => "HBM",
+ 33 => "HBM2",
+ 34 => "DDR5",
+ 35 => "LPDDR5",
+ 36 => "HBM3",
];
var memoryOutput:Int = -1;
diff --git a/source/funkin/editors/EditorPicker.hx b/source/funkin/editors/EditorPicker.hx
index 8a2ebd89..50a93453 100644
--- a/source/funkin/editors/EditorPicker.hx
+++ b/source/funkin/editors/EditorPicker.hx
@@ -22,11 +22,13 @@ class EditorPicker extends MusicBeatSubstate {
iconID: 2,
state: null
},
+ #if debug
{
name: "UI Debug State",
iconID: 3,
state: UIDebugState
},
+ #end
{
name: "Debug Options",
iconID: 4,
diff --git a/source/funkin/game/SplashHandler.hx b/source/funkin/game/SplashHandler.hx
index fbc7ddca..81430db3 100644
--- a/source/funkin/game/SplashHandler.hx
+++ b/source/funkin/game/SplashHandler.hx
@@ -1,5 +1,7 @@
package funkin.game;
+import funkin.backend.scripting.events.SplashShowEvent;
+
class SplashHandler extends FlxTypedGroup {
/**
* Map containing all of the splashes group.
@@ -40,10 +42,12 @@ class SplashHandler extends FlxTypedGroup {
var __grp:SplashGroup;
public function showSplash(name:String, strum:Strum) {
__grp = getSplashGroup(name);
- var event = funkin.backend.scripting.EventManager.get(funkin.backend.scripting.events.DynamicEvent).recycle(__grp.showOnStrum(strum), strum);
+
+ var event = EventManager.get(SplashShowEvent).recycle(name, __grp.showOnStrum(strum), strum, __grp);
event = PlayState.instance.gameAndCharsEvent("onSplashShown", event);
+
if (!event.cancelled)
- add(event.value1);
+ add(event.splash);
// max 8 rendered splashes
while(members.length > Constants.MAX_SPLASHES)
diff --git a/source/funkin/game/Stage.hx b/source/funkin/game/Stage.hx
index 4cabb52d..b0282af8 100644
--- a/source/funkin/game/Stage.hx
+++ b/source/funkin/game/Stage.hx
@@ -2,6 +2,7 @@ package funkin.game;
import flixel.FlxState;
import flixel.math.FlxPoint;
+import funkin.backend.scripting.DummyScript;
import funkin.backend.scripting.Script;
import funkin.backend.scripting.events.StageNodeEvent;
import funkin.backend.scripting.events.StageXMLEvent;
@@ -18,6 +19,7 @@ class Stage extends FlxBasic implements IBeatReceiver {
public var stageScript:Script;
public var state:FlxState;
public var characterPoses:Map = [];
+ public var xmlImportedScripts:Map = [];
private var spritesParentFolder = "";
@@ -45,6 +47,7 @@ class Stage extends FlxBasic implements IBeatReceiver {
stageScript.load();
}
+ var event = null;
if (stageXML != null) {
if (PlayState.instance != null) {
var parsed:Null;
@@ -68,8 +71,8 @@ class Stage extends FlxBasic implements IBeatReceiver {
}
if (PlayState.instance != null) {
- var event = PlayState.instance.gameAndCharsEvent("onStageXMLParsed", EventManager.get(StageXMLEvent).recycle(this, stageXML, elems));
- elems = event.elems;
+ event = EventManager.get(StageXMLEvent).recycle(this, stageXML, elems);
+ elems = PlayState.instance.gameAndCharsEvent("onStageXMLParsed", event).elems;
}
for(node in elems) {
@@ -86,7 +89,7 @@ class Stage extends FlxBasic implements IBeatReceiver {
state.add(spr);
spr;
case "box" | "solid":
- if ( !node.has.name || !node.has.width || !node.has.height) continue;
+ if (!node.has.name || !node.has.width || !node.has.height) continue;
var spr = new FlxSprite(
(node.has.x) ? Std.parseFloat(node.att.x).getDefault(0) : 0,
@@ -134,6 +137,22 @@ class Stage extends FlxBasic implements IBeatReceiver {
);
PlayState.instance.add(PlayState.instance.comboGroup);
PlayState.instance.comboGroup;
+ case "use-extension" | "extension" | "ext":
+ if (!node.has.script || PlayState.instance == null) continue;
+
+ var folder = node.getAtt("folder").getDefault("data/scripts/");
+ if (!folder.endsWith("/")) folder += "/";
+
+ var path = Paths.script(folder + node.getAtt("script"));
+ var daScript = Script.create(path);
+ if (daScript is DummyScript) Logs.trace('Script at ${path} does not exist.', ERROR);
+ else {
+ xmlImportedScripts.set(path, node.getAtt("isShortLived") == "true");
+ PlayState.instance.scripts.add(daScript);
+ daScript.load();
+ }
+
+ null;
default: null;
}
@@ -173,8 +192,20 @@ class Stage extends FlxBasic implements IBeatReceiver {
});
if (PlayState.instance == null) return;
- for(k=>e in stageSprites) {
+
+ for (k=>e in stageSprites)
stageScript.set(k, e);
+
+ // idk lemme check anyways just in case scripts did smth - Nex
+ if (event != null) PlayState.instance.gameAndCharsEvent("onPostStageCreation", event);
+
+ // shortlived scripts destroy when the stage finishes setting up - Nex
+ for (p=>b in xmlImportedScripts) if (b) {
+ var script = PlayState.instance.scripts.getByPath(p);
+ if (script == null) continue;
+
+ PlayState.instance.scripts.remove(script);
+ script.destroy();
}
}
diff --git a/source/hscript/Config.hx b/source/hscript/Config.hx
index dcfcc10e..98fc7f7a 100644
--- a/source/hscript/Config.hx
+++ b/source/hscript/Config.hx
@@ -3,19 +3,23 @@ package hscript;
class Config {
// Runs support for custom classes in these
public static final ALLOWED_CUSTOM_CLASSES = [
+ #if !DOCUMENTATION
"flixel",
"funkin",
+ #end
];
// Runs support for abstract support in these
public static final ALLOWED_ABSTRACT_AND_ENUM = [
+ #if !DOCUMENTATION
"flixel",
"openfl",
"haxe.xml",
"haxe.CallStack",
"funkin",
+ #end
];
// Incase any of your files fail