Merge branch 'main' into new-editors
|
Before Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
@@ -64,6 +64,7 @@
|
|||||||
<assets path="assets/" rename="assets" exclude="*.mp3" unless="web"/>
|
<assets path="assets/" rename="assets" exclude="*.mp3" unless="web"/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<!-- TODO: make it copy this manually, instead of using assets node, so it doesn't manually check for fonts -->
|
||||||
<assets path='mods' rename='mods' embed='false'/>
|
<assets path='mods' rename='mods' embed='false'/>
|
||||||
<assets path='art/readme.txt' rename='do NOT readme.txt' />
|
<assets path='art/readme.txt' rename='do NOT readme.txt' />
|
||||||
|
|
||||||
@@ -150,7 +151,7 @@
|
|||||||
<!-- Comment this out to disable dark mode windows -->
|
<!-- Comment this out to disable dark mode windows -->
|
||||||
<define name="DARK_MODE_WINDOW"/>
|
<define name="DARK_MODE_WINDOW"/>
|
||||||
|
|
||||||
<haxedef name="analyzer-optimize" />
|
<haxedef name="analyzer-optimize" unless="debug" />
|
||||||
|
|
||||||
<haxedef name="VIDEO_CUTSCENES" if="VIDEO_CUTSCENES" />
|
<haxedef name="VIDEO_CUTSCENES" if="VIDEO_CUTSCENES" />
|
||||||
<haxedef name="UPDATE_CHECKING" if="UPDATE_CHECKING" />
|
<haxedef name="UPDATE_CHECKING" if="UPDATE_CHECKING" />
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ final class EventsData {
|
|||||||
{name: "Time (Steps)", type: TFloat(0.25, 9999, 0.25, 2), defValue: 4},
|
{name: "Time (Steps)", type: TFloat(0.25, 9999, 0.25, 2), defValue: 4},
|
||||||
{name: "Camera", type: TDropDown(['camGame', 'camHUD']), defValue: "camHUD"}
|
{name: "Camera", type: TDropDown(['camGame', 'camHUD']), defValue: "camHUD"}
|
||||||
],
|
],
|
||||||
"BPM Change" => [{name: "Target BPM", type: TFloat(1), defValue: 100}],
|
"BPM Change" => [{name: "Target BPM", type: TFloat(1.00, null, 0.001, 3), defValue: 100}],
|
||||||
"Scroll Speed Change" => [
|
"Scroll Speed Change" => [
|
||||||
{name: "Tween Speed?", type: TBool, defValue: true},
|
{name: "Tween Speed?", type: TBool, defValue: true},
|
||||||
{name: "New Speed", type: TFloat(0.01, 99, 0.01, 2), defValue: 1.},
|
{name: "New Speed", type: TFloat(0.01, 99, 0.01, 2), defValue: 1.},
|
||||||
|
|||||||
@@ -101,11 +101,15 @@ class HScript extends Script {
|
|||||||
|
|
||||||
private function _errorHandler(error:Error) {
|
private function _errorHandler(error:Error) {
|
||||||
var fileName = error.origin;
|
var fileName = error.origin;
|
||||||
|
var oldfn = '$fileName:${error.line}: ';
|
||||||
if(remappedNames.exists(fileName))
|
if(remappedNames.exists(fileName))
|
||||||
fileName = remappedNames.get(fileName);
|
fileName = remappedNames.get(fileName);
|
||||||
var fn = '$fileName:${error.line}: ';
|
var fn = '$fileName:${error.line}: ';
|
||||||
var err = error.toString();
|
var err = error.toString();
|
||||||
if (err.startsWith(fn)) err = err.substr(fn.length);
|
while(err.startsWith(oldfn) || err.startsWith(fn)) {
|
||||||
|
if (err.startsWith(oldfn)) err = err.substr(oldfn.length);
|
||||||
|
if (err.startsWith(fn)) err = err.substr(fn.length);
|
||||||
|
}
|
||||||
|
|
||||||
Logs.traceColored([
|
Logs.traceColored([
|
||||||
Logs.logText(fn, GREEN),
|
Logs.logText(fn, GREEN),
|
||||||
|
|||||||
@@ -9,29 +9,29 @@ class EditorPicker extends MusicBeatSubstate {
|
|||||||
public var options:Array<Editor> = [
|
public var options:Array<Editor> = [
|
||||||
{
|
{
|
||||||
name: "Chart Editor",
|
name: "Chart Editor",
|
||||||
iconID: 0,
|
id: "chart",
|
||||||
state: funkin.editors.charter.CharterSelection
|
state: funkin.editors.charter.CharterSelection
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Character Editor",
|
name: "Character Editor",
|
||||||
iconID: 1,
|
id: "character",
|
||||||
state: funkin.editors.character.CharacterSelection
|
state: funkin.editors.character.CharacterSelection
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Stage Editor",
|
name: "Stage Editor",
|
||||||
iconID: 2,
|
id: "stage",
|
||||||
state: funkin.editors.stage.StageSelection
|
state: funkin.editors.stage.StageSelection
|
||||||
},
|
},
|
||||||
#if debug
|
#if debug
|
||||||
{
|
{
|
||||||
name: "UI Debug State",
|
name: "UI Debug State",
|
||||||
iconID: 3,
|
id: "uiDebug",
|
||||||
state: UIDebugState
|
state: UIDebugState
|
||||||
},
|
},
|
||||||
#end
|
#end
|
||||||
{
|
{
|
||||||
name: "Wiki",
|
name: "Wiki",
|
||||||
iconID: 5,
|
id: "wiki",
|
||||||
state: null,
|
state: null,
|
||||||
onClick: function() {
|
onClick: function() {
|
||||||
CoolUtil.openURL("https://codename-engine.com/");
|
CoolUtil.openURL("https://codename-engine.com/");
|
||||||
@@ -39,7 +39,7 @@ class EditorPicker extends MusicBeatSubstate {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Debug Options",
|
name: "Debug Options",
|
||||||
iconID: 4,
|
id: "debugOptions",
|
||||||
state: DebugOptions
|
state: DebugOptions
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@@ -74,7 +74,7 @@ class EditorPicker extends MusicBeatSubstate {
|
|||||||
|
|
||||||
optionHeight = FlxG.height / options.length;
|
optionHeight = FlxG.height / options.length;
|
||||||
for(k=>o in options) {
|
for(k=>o in options) {
|
||||||
var spr = new EditorPickerOption(o.name, o.iconID, optionHeight);
|
var spr = new EditorPickerOption(o.name, o.id, optionHeight);
|
||||||
spr.y = k * optionHeight;
|
spr.y = k * optionHeight;
|
||||||
add(spr);
|
add(spr);
|
||||||
sprites.push(spr);
|
sprites.push(spr);
|
||||||
@@ -155,7 +155,7 @@ class EditorPicker extends MusicBeatSubstate {
|
|||||||
|
|
||||||
typedef Editor = {
|
typedef Editor = {
|
||||||
var name:String;
|
var name:String;
|
||||||
var iconID:Int;
|
var id:String;
|
||||||
var state:Class<MusicBeatState>;
|
var state:Class<MusicBeatState>;
|
||||||
var ?onClick:Void->Void;
|
var ?onClick:Void->Void;
|
||||||
}
|
}
|
||||||
@@ -171,19 +171,14 @@ class EditorPickerOption extends FlxTypedSpriteGroup<FlxSprite> {
|
|||||||
public var selectionLerp:Float = 0;
|
public var selectionLerp:Float = 0;
|
||||||
|
|
||||||
public var iconRotationCycle:Float = 0;
|
public var iconRotationCycle:Float = 0;
|
||||||
public function new(name:String, iconID:Int, height:Float) {
|
public function new(name:String, iconID:String, height:Float) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
FlxG.mouse.visible = true;
|
FlxG.mouse.visible = true;
|
||||||
iconSpr = new FlxSprite();
|
iconSpr = new FlxSprite();
|
||||||
iconSpr.loadGraphic(Paths.image('editors/icons'), true, 128, 128);
|
iconSpr.loadGraphic(Paths.image('editors/icons/$iconID'));
|
||||||
iconSpr.animation.add("icon", [iconID], 24, true);
|
|
||||||
iconSpr.animation.play("icon");
|
|
||||||
iconSpr.antialiasing = true;
|
iconSpr.antialiasing = true;
|
||||||
if (height < 150) {
|
iconSpr.setUnstretchedGraphicSize(110, 110, false);
|
||||||
iconSpr.scale.set(height / 150, height / 150);
|
|
||||||
iconSpr.updateHitbox();
|
|
||||||
}
|
|
||||||
iconSpr.x = 25 + ((height - iconSpr.width) / 2);
|
iconSpr.x = 25 + ((height - iconSpr.width) / 2);
|
||||||
iconSpr.y = (height - iconSpr.height) / 2;
|
iconSpr.y = (height - iconSpr.height) / 2;
|
||||||
|
|
||||||
|
|||||||
@@ -340,6 +340,7 @@ class StrumLine extends FlxTypedGroup<Strum> {
|
|||||||
super.destroy();
|
super.destroy();
|
||||||
if(startingPos != null)
|
if(startingPos != null)
|
||||||
startingPos.put();
|
startingPos.put();
|
||||||
|
notes = FlxDestroyUtil.destroy(notes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ class Cutscene extends MusicBeatSubstate {
|
|||||||
public var skippable(default, set):Bool;
|
public var skippable(default, set):Bool;
|
||||||
|
|
||||||
public function set_skippable(val:Bool):Bool {
|
public function set_skippable(val:Bool):Bool {
|
||||||
if(!val) pauseItems.remove('Skip Cutscene');
|
if (!val) pauseItems.remove('Skip Cutscene');
|
||||||
else if(!pauseItems.contains('Skip Cutscene')) pauseItems.insert(1, 'Skip Cutscene');
|
else if (!pauseItems.contains('Skip Cutscene')) pauseItems.insert(1, 'Skip Cutscene');
|
||||||
return skippable = val;
|
return skippable = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,14 +30,14 @@ class DialogueCutscene extends ScriptedCutscene {
|
|||||||
public static var cutscene:DialogueCutscene;
|
public static var cutscene:DialogueCutscene;
|
||||||
public var dialogueScript(get, set):Script;
|
public var dialogueScript(get, set):Script;
|
||||||
|
|
||||||
public function set_curLine(val:DialogueLine) {
|
public inline function set_curLine(val:DialogueLine) {
|
||||||
lastLine = curLine;
|
lastLine = curLine;
|
||||||
return curLine = val;
|
return curLine = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Backwards compat funcs - Nex
|
// Backwards compat funcs - Nex
|
||||||
public function set_dialogueScript(val:Script) return script = val;
|
public inline function set_dialogueScript(val:Script) return script = val;
|
||||||
public function get_dialogueScript() return script;
|
public inline function get_dialogueScript() return script;
|
||||||
|
|
||||||
public function new(dialoguePath:String, callback:Void->Void) {
|
public function new(dialoguePath:String, callback:Void->Void) {
|
||||||
super(this.dialoguePath = dialoguePath, callback);
|
super(this.dialoguePath = dialoguePath, callback);
|
||||||
|
|||||||
@@ -62,6 +62,14 @@ class VideoCutscene extends Cutscene {
|
|||||||
video.antialiasing = true;
|
video.antialiasing = true;
|
||||||
video.autoPause = false; // Imma handle it better inside this class, mainly because of the pause menu - Nex
|
video.autoPause = false; // Imma handle it better inside this class, mainly because of the pause menu - Nex
|
||||||
video.bitmap.onEndReached.add(close);
|
video.bitmap.onEndReached.add(close);
|
||||||
|
video.bitmap.onFormatSetup.add(function() if (video.bitmap != null && video.bitmap.bitmapData != null) {
|
||||||
|
final width = video.bitmap.bitmapData.width;
|
||||||
|
final height = video.bitmap.bitmapData.height;
|
||||||
|
final scale:Float = Math.min(FlxG.width / width, FlxG.height / height);
|
||||||
|
video.setGraphicSize(Std.int(width * scale), Std.int(height * scale));
|
||||||
|
video.updateHitbox();
|
||||||
|
video.screenCenter();
|
||||||
|
});
|
||||||
|
|
||||||
//cover = new FlxSprite(0, FlxG.height * 0.85).makeSolid(FlxG.width + 50, FlxG.height + 50, 0xFF000000);
|
//cover = new FlxSprite(0, FlxG.height * 0.85).makeSolid(FlxG.width + 50, FlxG.height + 50, 0xFF000000);
|
||||||
//cover.scrollFactor.set(0, 0);
|
//cover.scrollFactor.set(0, 0);
|
||||||
@@ -100,7 +108,7 @@ class VideoCutscene extends Cutscene {
|
|||||||
File.saveBytes(localPath, Assets.getBytes(path));
|
File.saveBytes(localPath, Assets.getBytes(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(video.load(localPath)) new FlxTimer().start(0.001, function(_) {mutex.acquire(); onReady(); mutex.release();});
|
if (video.load(localPath)) new FlxTimer().start(0.001, function(_) { mutex.acquire(); onReady(); mutex.release(); });
|
||||||
else { mutex.acquire(); close(); mutex.release(); }
|
else { mutex.acquire(); close(); mutex.release(); }
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -236,6 +244,7 @@ class VideoCutscene extends Cutscene {
|
|||||||
|
|
||||||
public override function destroy() {
|
public override function destroy() {
|
||||||
FlxG.cameras.remove(cutsceneCamera, true);
|
FlxG.cameras.remove(cutsceneCamera, true);
|
||||||
|
video.destroy();
|
||||||
super.destroy();
|
super.destroy();
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class CreditsMain extends TreeMenu {
|
|||||||
var items:Array<OptionType> = [];
|
var items:Array<OptionType> = [];
|
||||||
|
|
||||||
public override function create() {
|
public override function create() {
|
||||||
bg = new FlxSprite(-80).loadGraphic(Paths.image('menus/menuBGBlue'));
|
bg = new FlxSprite(-80).loadAnimatedGraphic(Paths.image('menus/menuBGBlue'));
|
||||||
// bg.scrollFactor.set();
|
// bg.scrollFactor.set();
|
||||||
bg.scale.set(1.15, 1.15);
|
bg.scale.set(1.15, 1.15);
|
||||||
bg.updateHitbox();
|
bg.updateHitbox();
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ class OptionsMenu extends TreeMenu {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
var bg:FlxSprite;
|
||||||
|
|
||||||
public override function create() {
|
public override function create() {
|
||||||
super.create();
|
super.create();
|
||||||
|
|
||||||
@@ -39,7 +41,7 @@ class OptionsMenu extends TreeMenu {
|
|||||||
|
|
||||||
DiscordUtil.call("onMenuLoaded", ["Options Menu"]);
|
DiscordUtil.call("onMenuLoaded", ["Options Menu"]);
|
||||||
|
|
||||||
var bg:FlxSprite = new FlxSprite(-80).loadAnimatedGraphic(Paths.image('menus/menuBGBlue'));
|
bg = new FlxSprite(-80).loadAnimatedGraphic(Paths.image('menus/menuBGBlue'));
|
||||||
// bg.scrollFactor.set();
|
// bg.scrollFactor.set();
|
||||||
bg.scale.set(1.15, 1.15);
|
bg.scale.set(1.15, 1.15);
|
||||||
bg.updateHitbox();
|
bg.updateHitbox();
|
||||||
|
|||||||