diff --git a/.gitignore b/.gitignore
index 8f54cb6b..ea7c0547 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
export/
+dump/
latest/windows/obj/
latest/windows/haxe/
.vscode/
\ No newline at end of file
diff --git a/Project.xml b/Project.xml
index 2e250dce..aa36df06 100644
--- a/Project.xml
+++ b/Project.xml
@@ -146,23 +146,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/buildnumber.txt b/buildnumber.txt
index 466fe402..3e19de01 100644
--- a/buildnumber.txt
+++ b/buildnumber.txt
@@ -1 +1 @@
-1548
\ No newline at end of file
+1556
\ No newline at end of file
diff --git a/source/funkin/macros/FlxSpriteProxyMacro.hx b/source/funkin/macros/FlxSpriteProxyMacro.hx
new file mode 100644
index 00000000..c9ca76ec
--- /dev/null
+++ b/source/funkin/macros/FlxSpriteProxyMacro.hx
@@ -0,0 +1,111 @@
+package funkin.macros;
+#if macro
+import haxe.macro.Expr;
+import haxe.macro.Context;
+import haxe.macro.Printer;
+import haxe.macro.Type.ClassField;
+import haxe.macro.TypeTools;
+
+class FlxSpriteProxyMacro {
+ public static function build() {
+ return Context.getBuildFields();
+
+ /*
+ //TODO: FIX ALL OF THIS
+ var parentFields:Array = [];
+ var parentFieldsNames:Array = [];
+ var superClass = Context.getLocalClass().get().superClass.t.get();
+ while(superClass != null) {
+ for(e in superClass.fields.get()) {
+ if (!parentFieldsNames.contains(e.name) && !e.kind.match(FMethod(MethInline))) {
+ parentFields.push(e);
+ parentFieldsNames.push(e.name);
+ }
+ }
+ if (superClass.superClass != null)
+ superClass = superClass.superClass.t.get();
+ else
+ superClass = null;
+ }
+ parentFieldsNames = [];
+ trace(Context.getLocalType());
+ var fields:Array = Context.getBuildFields();
+
+ // loop through all parent functions
+ for(f in parentFields) {
+ for(field in fields)
+ if (field.name == f.name)
+ continue;
+ switch(f.type) {
+ case TLazy(lazyFunc):
+ switch(lazyFunc()) {
+ case TFun(args, ret):
+
+ // its a function / getter / setter! overriding
+ var overFunc:Function = {
+ args: [for(a in args) {
+ value: null,
+ type: TypeTools.toComplexType(a.t),
+ opt: a.opt,
+ name: a.name
+ }]
+ };
+ var funcName = f.name;
+
+ var argNames:Array = [];
+ for(a in args)
+ argNames.push({
+ pos: Context.makePosition({
+ min: 1,
+ max: 2,
+ file: "DeezNuts.hx"
+ }),
+ expr: EConst(CIdent(a.name))
+ });
+ if (ret == null) {
+ overFunc.expr = macro {
+ function test(p1) {
+ trace(p1);
+ }
+ if (this.proxy != null) {
+ this.proxy.$funcName($a{argNames});
+ return;
+ }
+ super.$funcName($a{argNames});
+ };
+ } else {
+ overFunc.expr = macro {
+ if (this.proxy != null) {
+ return this.proxy.$funcName($a{argNames});
+ }
+ return super.$funcName($a{argNames});
+ };
+ }
+ var field:Field = {
+ pos: Context.makePosition({
+ min: 0,
+ max: 0,
+ file: "DeezNuts.hx"
+ }),
+ name: f.name,
+ kind: FFun(overFunc),
+ access: [AOverride, APublic]
+ };
+ var p = new Printer();
+ trace(p.printField(field));
+ fields.push(field);
+ default:
+ // nothing
+ }
+ default:
+ // nothing
+ }
+ }
+
+
+
+ return fields;
+ */
+ }
+}
+#end
\ No newline at end of file
diff --git a/source/funkin/macros/ScriptsMacro.hx b/source/funkin/macros/ScriptsMacro.hx
new file mode 100644
index 00000000..d7316840
--- /dev/null
+++ b/source/funkin/macros/ScriptsMacro.hx
@@ -0,0 +1,47 @@
+package funkin.macros;
+
+#if macro
+import haxe.macro.Context;
+import haxe.macro.Compiler;
+import haxe.macro.Expr;
+
+class ScriptsMacro {
+ public static function addAdditionalClasses() {
+ Compiler.include("flixel");
+ Compiler.include("away3d");
+ Compiler.include("flx3d");
+ #if sys
+ Compiler.include("sys");
+ #end
+
+ Compiler.include("DateTools");
+ Compiler.include("EReg");
+ Compiler.include("Lambda");
+ Compiler.include("StringBuf");
+ Compiler.include("haxe.crypto");
+ Compiler.include("haxe.display");
+ Compiler.include("haxe.exceptions");
+ Compiler.include("haxe.extern");
+
+ Compiler.include("scripting");
+ }
+
+ public static function build():Array {
+ var fields:Array = Context.getBuildFields();
+
+ for(f in fields) {
+ switch(f.kind) {
+ case FFun(func):
+ if (f.access == null) f.access = [];
+ if (f.access.contains(AInline))
+ f.access.remove(AInline);
+ f.access.push(ADynamic);
+ default:
+ // do nothing u piece of shit
+ }
+ }
+
+ return fields;
+ }
+}
+#end
\ No newline at end of file
diff --git a/update.bat b/update.bat
index a74344ed..7dc42631 100644
--- a/update.bat
+++ b/update.bat
@@ -3,4 +3,5 @@ haxelib git flixel-yc29 https://www.github.com/YoshiCrafter29/flixel
haxelib git hscript-improved https://www.github.com/YoshiCrafter29/hscript-improved
haxelib install away3d
haxelib install hxCodec
-haxelib install markdown
\ No newline at end of file
+haxelib install markdown
+haxelib git flxanimate https://github.com/Dot-Stuff/flxanimate/
\ No newline at end of file