Skip to content

Commit 5e0747a

Browse files
latest cne changes
sorry for that 1 month break i have various other projs working on (none of which been i got bored of)
1 parent 6cd8a6b commit 5e0747a

17 files changed

Lines changed: 398 additions & 268 deletions

File tree

.github/workflows/linux.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jobs:
77
build:
88
name: Linux Build
99
permissions: write-all
10-
runs-on: ubuntu-latest
10+
runs-on: ubuntu-22.04
1111
steps:
1212
- name: Pulling the source
1313
uses: actions/checkout@v2

project.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<!--
1111
CHANGE THE SAVE PATH & NAME FOR YOUR MOD HERE!
1212
-->
13-
<app save-path="TheBrCrew/VsBr" save-name="save-vsbr" mod-saves="true" />
13+
<app save-path="YoshiCrafter29/CodenameEngine" save-name="save-vsbr" mod-saves="true" />
1414

1515
<!-- DO NOT REMOVE!! ALLOWS ME TO DO REGIONS LIKE IN C# AND KEEP CODE ORGANIZED. REMOVING IT WOULD BREAK THE ENGINE -->
1616
<haxedef name="REGION" />

source/funkin/backend/assets/AssetsLibraryList.hx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ class AssetsLibraryList extends AssetLibrary {
6363
if (l is IModsAssetLibrary) {
6464
var lib = cast(l, IModsAssetLibrary);
6565
for(e in lib.getFiles(folder))
66-
content.push(e);
66+
if(!content.contains(e))
67+
content.push(e);
6768
}
6869
#end
6970
}
@@ -87,7 +88,8 @@ class AssetsLibraryList extends AssetLibrary {
8788
if (l is IModsAssetLibrary) {
8889
var lib = cast(l, IModsAssetLibrary);
8990
for(e in lib.getFolders(folder))
90-
content.push(e);
91+
if(!content.contains(e))
92+
content.push(e);
9193
}
9294
#end
9395
}

source/funkin/backend/chart/Chart.hx

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -87,23 +87,18 @@ class Chart {
8787
return data;
8888
}
8989

90-
public static function loadChartMeta(songName:String, difficulty:String = "normal", fromMods:Bool = true) {
90+
public static function loadChartMeta(songName:String, difficulty:String = "normal", fromMods:Bool = true):ChartMetaData {
9191
var songNameLower = songName.toLowerCase();
9292
var metaPath = Paths.file('songs/${songNameLower}/meta.json');
9393
var metaDiffPath = Paths.file('songs/${songNameLower}/meta-${difficulty.toLowerCase()}.json');
9494

9595
var data:ChartMetaData = null;
9696
var fromMods:Bool = fromMods;
97-
for(path in [metaDiffPath, metaPath]) {
98-
if (Assets.exists(path)) {
99-
fromMods = Paths.assetsTree.existsSpecific(path, "TEXT", MODS);
100-
try {
101-
data = Json.parse(Assets.getText(path));
102-
} catch(e) {
103-
Logs.trace('Failed to load song metadata for ${songName} ($path): ${Std.string(e)}', ERROR);
104-
}
105-
if (data != null) break;
106-
}
97+
for (path in [metaDiffPath, metaPath]) if (Assets.exists(path)) {
98+
fromMods = Paths.assetsTree.existsSpecific(path, "TEXT", MODS);
99+
try data = Json.parse(Assets.getText(path))
100+
catch(e) Logs.trace('Failed to load song metadata for ${songName} ($path): ${Std.string(e)}', ERROR);
101+
if (data != null) break;
107102
}
108103

109104
if (data == null)
@@ -165,11 +160,9 @@ class Chart {
165160
valid = false;
166161
}
167162
var data:Dynamic = null;
168-
try {
169-
if (valid)
170-
data = Json.parse(Assets.getText(chartPath));
171-
} catch(e) {
172-
Logs.trace('Could not parse chart for song ${songName} ($difficulty): ${Std.string(e)}', ERROR, RED);
163+
if (valid) {
164+
try data = Json.parse(Assets.getText(chartPath))
165+
catch(e) Logs.trace('Could not parse chart for song ${songName} ($difficulty): ${Std.string(e)}', ERROR, RED);
173166
}
174167

175168
/**

source/funkin/backend/scripting/HScript.hx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ class HScript extends Script {
119119
interp.execute(expr);
120120
call("new", []);
121121
}
122+
123+
#if GLOBAL_SCRIPT
124+
funkin.backend.scripting.GlobalScript.call("onScriptSetup", [this, "hscript"]);
125+
#end
122126
}
123127

124128
public override function reload() {

source/funkin/backend/scripting/events/RatingUpdateEvent.hx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package funkin.backend.scripting.events;
22

33
final class RatingUpdateEvent extends CancellableEvent {
44
/**
5-
New combo
5+
New combo (may be null if no ratings were found)
66
**/
7-
public var rating:ComboRating;
7+
public var rating:Null<ComboRating>;
88
/**
99
Old combo (may be null)
1010
**/
11-
public var oldRating:ComboRating;
11+
public var oldRating:Null<ComboRating>;
1212

1313
}

source/funkin/backend/scripting/events/WeekSelectEvent.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package funkin.backend.scripting.events;
22

3-
import funkin.menus.StoryMenuState.WeekData;
3+
import funkin.backend.week.WeekData;
44

55
final class WeekSelectEvent extends CancellableEvent {
66
/**

source/funkin/backend/shaders/FunkinShader.hx

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,20 @@
11
package funkin.backend.shaders;
22

3+
import flixel.graphics.FlxGraphic;
4+
import flixel.system.FlxAssets.FlxShader;
35
import haxe.Exception;
46
import hscript.IHScriptCustomBehaviour;
5-
import flixel.graphics.tile.FlxGraphicsShader;
6-
import openfl.display3D.Program3D;
7-
import flixel.system.FlxAssets.FlxShader;
8-
9-
import openfl.display3D._internal.GLProgram;
10-
import openfl.display3D._internal.GLShader;
11-
import openfl.utils._internal.Log;
7+
import lime.utils.Float32Array;
128
import openfl.display.BitmapData;
9+
import openfl.display.ShaderInput;
1310
import openfl.display.ShaderParameter;
1411
import openfl.display.ShaderParameterType;
15-
import openfl.display.ShaderInput;
16-
import lime.utils.Float32Array;
12+
import openfl.display3D._internal.GLProgram;
13+
import openfl.display3D._internal.GLShader;
14+
import openfl.utils._internal.Log;
1715

1816
using StringTools;
1917

20-
import openfl.display.ShaderParameter;
21-
import openfl.display.BitmapData;
22-
import openfl.display.ShaderInput;
23-
2418
@:access(openfl.display3D.Context3D)
2519
@:access(openfl.display3D.Program3D)
2620
@:access(openfl.display.ShaderInput)
@@ -195,7 +189,7 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour {
195189

196190
var useBackCompat:Bool = true;
197191
for (regex in ShaderTemplates.vertBackCompatVarList) if (!regex.match(value)) useBackCompat = false;
198-
192+
199193
value = value.replace("#pragma header", useBackCompat ? ShaderTemplates.vertHeaderBackCompat : ShaderTemplates.vertHeader).replace("#pragma body", useBackCompat ? ShaderTemplates.vertBodyBackCompat : ShaderTemplates.vertBody);
200194
if (value != __glVertexSource)
201195
{
@@ -495,37 +489,42 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour {
495489
} else {
496490
var field = Reflect.field(data, name);
497491
var cl = Type.getClassName(Type.getClass(field));
492+
var isNotNull = val != null;
498493
// cant do "field is ShaderInput" for some reason
499494
if (cl.startsWith("openfl.display.ShaderParameter")) {
500495
if (field.__length <= 1) {
501496
// that means we wait for a single number, instead of an array
502-
if (field.__isInt && !(val is Int)) {
497+
if (field.__isInt && isNotNull && !(val is Int)) {
503498
throw new ShaderTypeException(name, Type.getClass(val), 'Int');
504499
return null;
505500
} else
506-
if (field.__isBool && !(val is Bool)) {
501+
if (field.__isBool && isNotNull && !(val is Bool)) {
507502
throw new ShaderTypeException(name, Type.getClass(val), 'Bool');
508503
return null;
509504
} else
510-
if (field.__isFloat && !(val is Float)) {
505+
if (field.__isFloat && isNotNull && !(val is Float)) {
511506
throw new ShaderTypeException(name, Type.getClass(val), 'Float');
512507
return null;
513508
}
514-
return field.value = [val];
509+
return field.value = isNotNull ? [val] : null;
515510
} else {
516-
if (!(val is Array)) {
511+
if (isNotNull && !(val is Array)) {
517512
throw new ShaderTypeException(name, Type.getClass(val), Array);
518513
return null;
519514
}
520515
return field.value = val;
521516
}
522517
} else if (cl.startsWith("openfl.display.ShaderInput")) {
523518
// shader input!!
524-
if (!(val is BitmapData)) {
519+
var bitmap:BitmapData;
520+
if (!isNotNull) bitmap = null;
521+
else if (val is BitmapData) bitmap = val;
522+
else if (val is FlxGraphic) bitmap = val.bitmap;
523+
else {
525524
throw new ShaderTypeException(name, Type.getClass(val), BitmapData);
526525
return null;
527526
}
528-
field.input = cast val;
527+
field.input = bitmap;
529528
}
530529
}
531530

source/funkin/backend/system/MainState.hx

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ import funkin.menus.TitleState;
88
import funkin.menus.BetaWarningState;
99
import funkin.backend.chart.EventsData;
1010
import flixel.FlxState;
11+
import haxe.io.Path;
12+
13+
@dox(hide)
14+
typedef AddonInfo = {
15+
var name:String;
16+
var path:String;
17+
}
1118

1219
/**
1320
* Simple state used for loading the game
@@ -32,25 +39,64 @@ class MainState extends FlxState {
3239
Paths.assetsTree.reset();
3340

3441
#if MOD_SUPPORT
35-
var _lowPriorityAddons:Array<String> = [];
36-
var _highPriorityAddons:Array<String> = [];
37-
var _noPriorityAddons:Array<String> = [];
38-
if (FileSystem.exists(ModsFolder.addonsPath) && FileSystem.isDirectory(ModsFolder.addonsPath)) {
39-
for(i=>addon in [for(dir in FileSystem.readDirectory(ModsFolder.addonsPath)) if (FileSystem.isDirectory('${ModsFolder.addonsPath}$dir')) dir]) {
40-
if (addon.startsWith("[LOW]")) _lowPriorityAddons.insert(0, addon);
41-
else if (addon.startsWith("[HIGH]")) _highPriorityAddons.insert(0, addon);
42-
else _noPriorityAddons.insert(0, addon);
42+
inline function isDirectory(path:String):Bool
43+
return FileSystem.exists(path) && FileSystem.isDirectory(path);
44+
45+
inline function ltrim(str:String, prefix:String):String
46+
return str.substr(prefix.length).ltrim();
47+
48+
inline function loadLib(path:String, name:String)
49+
Paths.assetsTree.addLibrary(ModsFolder.loadModLib(path, name));
50+
51+
var _lowPriorityAddons:Array<AddonInfo> = [];
52+
var _highPriorityAddons:Array<AddonInfo> = [];
53+
var _noPriorityAddons:Array<AddonInfo> = [];
54+
55+
var addonPaths = [
56+
ModsFolder.addonsPath,
57+
(
58+
ModsFolder.currentModFolder != null ?
59+
ModsFolder.modsPath + ModsFolder.currentModFolder + "/addons/" :
60+
null
61+
)
62+
];
63+
64+
for(path in addonPaths) {
65+
if (path == null) continue;
66+
if (!isDirectory(path)) continue;
67+
68+
for(addon in FileSystem.readDirectory(path)) {
69+
if(!FileSystem.isDirectory(path + addon)) {
70+
switch(Path.extension(addon).toLowerCase()) {
71+
case 'zip':
72+
addon = Path.withoutExtension(addon);
73+
default:
74+
continue;
75+
}
76+
}
77+
78+
var data:AddonInfo = {
79+
name: addon,
80+
path: path + addon
81+
};
82+
83+
if (addon.startsWith("[LOW]")) _lowPriorityAddons.insert(0, data);
84+
else if (addon.startsWith("[HIGH]")) _highPriorityAddons.insert(0, data);
85+
else _noPriorityAddons.insert(0, data);
4386
}
44-
for (addon in _lowPriorityAddons)
45-
Paths.assetsTree.addLibrary(ModsFolder.loadModLib('${ModsFolder.addonsPath}$addon', StringTools.ltrim(addon.substr("[LOW]".length))));
4687
}
88+
89+
for (addon in _lowPriorityAddons)
90+
loadLib(addon.path, ltrim(addon.name, "[LOW]"));
91+
4792
if (ModsFolder.currentModFolder != null)
48-
Paths.assetsTree.addLibrary(ModsFolder.loadModLib('${ModsFolder.modsPath}${ModsFolder.currentModFolder}', ModsFolder.currentModFolder));
93+
loadLib(ModsFolder.modsPath + ModsFolder.currentModFolder, ModsFolder.currentModFolder);
4994

50-
if (FileSystem.exists(ModsFolder.addonsPath) && FileSystem.isDirectory(ModsFolder.addonsPath)){
51-
for (addon in _noPriorityAddons) Paths.assetsTree.addLibrary(ModsFolder.loadModLib('${ModsFolder.addonsPath}$addon', addon));
52-
for (addon in _highPriorityAddons) Paths.assetsTree.addLibrary(ModsFolder.loadModLib('${ModsFolder.addonsPath}$addon', StringTools.ltrim(addon.substr("[HIGH]".length))));
53-
}
95+
for (addon in _noPriorityAddons)
96+
loadLib(addon.path, addon.name);
97+
98+
for (addon in _highPriorityAddons)
99+
loadLib(addon.path, ltrim(addon.name, "[HIGH]"));
54100
#end
55101

56102
MusicBeatTransition.script = "";

source/funkin/backend/utils/CoolUtil.hx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -609,11 +609,11 @@ class CoolUtil
609609
* @param spr Sprite to load the graphic for
610610
* @param path Path to the graphic
611611
*/
612-
public static function loadAnimatedGraphic(spr:FlxSprite, path:String) {
612+
public static function loadAnimatedGraphic(spr:FlxSprite, path:String, fps:Float = 24.0) {
613613
spr.frames = Paths.getFrames(path, true);
614614

615615
if (spr.frames != null && spr.frames.frames != null) {
616-
spr.animation.add("idle", [for(i in 0...spr.frames.frames.length) i], 24, true);
616+
spr.animation.add("idle", [for(i in 0...spr.frames.frames.length) i], fps, true);
617617
spr.animation.play("idle");
618618
}
619619

0 commit comments

Comments
 (0)