Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44a19340a4 | ||
|
|
74d37f60f3 | ||
|
|
f5b79bb332 | ||
|
|
dbc3a79e62 | ||
|
|
a262b7e683 | ||
|
|
b43221d527 | ||
|
|
7a9a510c47 | ||
|
|
1716dc48ab | ||
|
|
522256a3cf | ||
|
|
4e3d5d75ec | ||
|
|
3196195790 | ||
|
|
e08fac35d0 | ||
|
|
69f67ce3f9 | ||
|
|
d961fcec30 | ||
|
|
de41464364 | ||
|
|
75cc052c7b | ||
|
|
991a168686 | ||
|
|
1cdaf62088 | ||
|
|
537883d2f4 | ||
|
|
6a1bbb72e3 | ||
|
|
8b43664327 | ||
|
|
d1fa0e5fa7 | ||
|
|
e89c0411c6 | ||
|
|
1993d205ca | ||
|
|
f8aa7201c0 | ||
|
|
07086b5e38 | ||
|
|
70195051ec | ||
|
|
9570de76a8 | ||
|
|
17539a6f39 | ||
|
|
16b080bf84 | ||
|
|
549c1ad441 | ||
|
|
be812cd2ec | ||
|
|
272f862c69 | ||
|
|
cf5a689918 | ||
|
|
84c153d69c |
@@ -18,10 +18,10 @@ Codename Engine is a new Friday Night Funkin' Engine aimed at simplifying moddin
|
||||
|
||||
## How to download
|
||||
|
||||
Latest builds for the engine can be found in the [Actions](https://github.com/YoshiCrafter29/CodenameEngine/actions) tab.<br>
|
||||
Latest builds for the engine can be found in the [Actions](https://github.com/CodenameCrew/CodenameEngine/actions) tab.<br>
|
||||
In the future (when the engine won't be a WIP anymore) we're gonna also publish the engine on platforms like Gamebanana; stay tuned!
|
||||
|
||||
If you don't have a github account please go onto https://fnf-cne-devs.github.io/ and click the download button for the respective operating system.
|
||||
If you don't have a github account please go onto https://codename-engine.com/ and click the download button for the respective operating system.
|
||||
|
||||
<details>
|
||||
<summary><h2>How to build</h2></summary>
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
<stepper name="alphaStepper" label="${translate('alpha')}" value="char.alpha / 0.75" x="col(0)" y="curY" precision="2" step="0.01" width="100" />
|
||||
<stepper name="angleStepper" label="${translate('angle')}" value="char.angle" x="last.x + last.bWidth + XOFFSET - 20" y="curY" precision="2" step="0.01" width="100" />
|
||||
|
||||
<stepper name="zoomFactorStepper" label="${translate('zoomFactor')" value="char.zoomFactor" x="col(1)" y="curY" precision="2" step="0.01" width="100" />
|
||||
<stepper name="zoomFactorStepper" label="${translate('zoomFactor')}" value="char.zoomFactor" x="col(1)" y="curY" precision="2" step="0.01" width="100" />
|
||||
|
||||
<section if="!StringTools.startsWith(char.name, 'NO_DELETE_')">
|
||||
<textbox name="charName" label="${translate('positionName')}" value="char.name" x="col(2)" y="curY" width="100"/>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
var sound:Sound;
|
||||
var sound:FlxSound;
|
||||
|
||||
function create()
|
||||
sound = Paths.sound('jeffGameover/jeffGameover-' + FlxG.random.int(1, 25, !Options.naughtyness ? [1, 3, 8, 13, 17, 21] : null));
|
||||
function create() {
|
||||
sound = FlxG.sound.load(Paths.sound('jeffGameover/jeffGameover-' + FlxG.random.int(1, 25, !Options.naughtyness ? [1, 3, 8, 13, 17, 21] : null)));
|
||||
sound.onComplete = () -> FlxG.sound.music.fadeIn(4, 0.2, 1);
|
||||
}
|
||||
|
||||
function beatHit(cur:Int) if (cur == 0) {
|
||||
FlxG.sound.play(sound, 1, false, null, true, () -> if (!isEnding) FlxG.sound.music.fadeIn(4, 0.2, 1));
|
||||
function postDeathStart() {
|
||||
sound.play();
|
||||
FlxG.sound.music.volume = 0.2;
|
||||
}
|
||||
|
After Width: | Height: | Size: 197 B |
@@ -236,7 +236,7 @@
|
||||
<group name="BookmarkMenu" prefix="bookmarks.">
|
||||
<str id="addBookmarkHere">Add Bookmark Here</str>
|
||||
<str id="editBookmarkList">Edit Bookmark List</str>
|
||||
<str id="goto">Go to "{0}"</str>
|
||||
<str id="goTo">Go to "{0}"</str>
|
||||
<str id="createBookmarkTitle">Creating New Bookmark...</str>
|
||||
<str id="createBookmarkName">Bookmark Name:</str>
|
||||
<str id="createBookmarkColor">Bookmark Color:</str>
|
||||
@@ -571,7 +571,7 @@
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen">
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen.">
|
||||
<str id="win-title">Editing Stage "{0}" Infos</str>
|
||||
<str id="title">Stage Info</str>
|
||||
<str id="stageName">Stage Name</str>
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
<group name="BookmarkMenu" prefix="bookmarks.">
|
||||
<str id="addBookmarkHere">Añadir Marcador Aquí</str>
|
||||
<str id="editBookmarkList">Editar Lista de Marcadores</str>
|
||||
<str id="goto">Ir hacia "{0}"</str>
|
||||
<str id="goTo">Ir hacia "{0}"</str>
|
||||
<str id="createBookmarkTitle">Creando Nuevo Marcador...</str>
|
||||
<str id="createBookmarkName">Nombre de Marcador:</str>
|
||||
<str id="createBookmarkColor">Color de Marcador:</str>
|
||||
@@ -544,7 +544,7 @@
|
||||
<str id="stagePath">Ubicación de Imágenes</str>
|
||||
</group>
|
||||
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen">
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen.">
|
||||
<str id="win-title">Editando info. del escenario: "{0}"</str>
|
||||
<str id="title">Info. del Escenario</str>
|
||||
<str id="stageName">Nombre del Escenario</str>
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
<group name="BookmarkMenu" prefix="bookmarks.">
|
||||
<str id="addBookmarkHere">Aggiungi Segnalibro Qui</str>
|
||||
<str id="editBookmarkList">Modifica Lista Segnalibri</str>
|
||||
<str id="goto">Vai a "{0}"</str>
|
||||
<str id="goTo">Vai a "{0}"</str>
|
||||
<str id="createBookmarkTitle">Creazione nuovo Segnalibro...</str>
|
||||
<str id="createBookmarkName">Nome Segnalibro:</str>
|
||||
<str id="createBookmarkColor">Colore Segnalibro:</str>
|
||||
@@ -554,7 +554,7 @@
|
||||
<str id="stagePath">Percorso file Palcoscenico</str>
|
||||
</group>
|
||||
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen">
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen.">
|
||||
<str id="win-title">Modificando Informazioni Palcoscenico "{0}"</str>
|
||||
<str id="title">Informazioni Palcoscenico</str>
|
||||
<str id="stageName">Nome Palcoscenico</str>
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
<group name="BookmarkMenu" prefix="bookmarks.">
|
||||
<str id="addBookmarkHere">Dodaj Zakładkę Tutaj</str>
|
||||
<str id="editBookmarkList">Edytuj Listę Zakładek</str>
|
||||
<str id="goto">Idź do "{0}"</str>
|
||||
<str id="goTo">Idź do "{0}"</str>
|
||||
<str id="createBookmarkTitle">Tworzenie Nowej Zakładki...</str>
|
||||
<str id="createBookmarkName">Nazwa Zakładki:</str>
|
||||
<str id="createBookmarkColor">Kolor Zakładki:</str>
|
||||
@@ -559,7 +559,7 @@
|
||||
<str id="stagePath">Ścieżka Plikowa Sceny</str>
|
||||
</group>
|
||||
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen">
|
||||
<group name="StageInfoScreen" prefix="stageInfoScreen.">
|
||||
<str id="win-title">Edytowanie Info Sceny "{0}"</str>
|
||||
<str id="title">Info Sceny</str>
|
||||
<str id="stageName">Nazwa Sceny</str>
|
||||
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="credits.png" width="3020" height="169">
|
||||
<SubTexture name="credits basic0000" x="1" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0001" x="1" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0002" x="1" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0003" x="433" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0004" x="433" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0005" x="433" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0006" x="865" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0007" x="865" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits basic0008" x="865" y="1" width="430" height="114" frameX="-0" frameY="-0" frameWidth="430" frameHeight="114"/>
|
||||
<SubTexture name="credits white0000" x="1297" y="1" width="574" height="164" frameX="-0" frameY="24" frameWidth="574" frameHeight="169"/>
|
||||
<SubTexture name="credits white0001" x="2446" y="1" width="573" height="167" frameX="-0" frameY="25" frameWidth="574" frameHeight="169"/>
|
||||
<SubTexture name="credits white0002" x="1873" y="1" width="571" height="165" frameX="-0" frameY="21" frameWidth="574" frameHeight="169"/>
|
||||
</TextureAtlas>
|
||||
|
After Width: | Height: | Size: 126 KiB |
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="freeplay.png" width="1027" height="927">
|
||||
<SubTexture name="freeplay basic0000" x="1" y="556" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0001" x="1" y="556" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0002" x="1" y="556" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0003" x="1" y="680" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0004" x="1" y="680" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0005" x="1" y="680" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0006" x="1" y="804" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0007" x="1" y="804" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay basic0008" x="1" y="804" width="701" height="122" frameX="-0" frameY="-0" frameWidth="701" frameHeight="122"/>
|
||||
<SubTexture name="freeplay white0000" x="1" y="373" width="1020" height="181" frameX="-7" frameY="30" frameWidth="1027" frameHeight="188"/>
|
||||
<SubTexture name="freeplay white0001" x="1" y="187" width="1021" height="184" frameX="-4" frameY="30" frameWidth="1027" frameHeight="188"/>
|
||||
<SubTexture name="freeplay white0002" x="1" y="1" width="1025" height="184" frameX="-0" frameY="26" frameWidth="1027" frameHeight="188"/>
|
||||
</TextureAtlas>
|
||||
|
After Width: | Height: | Size: 48 KiB |
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="options.png" width="2449" height="159">
|
||||
<SubTexture name="options basic0000" x="1" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0001" x="1" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0002" x="1" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0003" x="346" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0004" x="346" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0005" x="346" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0006" x="691" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0007" x="691" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options basic0008" x="691" y="1" width="343" height="113" frameX="-0" frameY="-0" frameWidth="343" frameHeight="113"/>
|
||||
<SubTexture name="options white0000" x="1036" y="1" width="474" height="156" frameX="-0" frameY="15" frameWidth="474" frameHeight="157"/>
|
||||
<SubTexture name="options white0001" x="1512" y="1" width="465" height="156" frameX="-6" frameY="14" frameWidth="474" frameHeight="157"/>
|
||||
<SubTexture name="options white0002" x="1979" y="1" width="469" height="157" frameX="-4" frameY="15" frameWidth="474" frameHeight="157"/>
|
||||
</TextureAtlas>
|
||||
|
After Width: | Height: | Size: 93 KiB |
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="story mode.png" width="1230" height="556">
|
||||
<SubTexture name="story mode basic0000" x="734" y="1" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0001" x="734" y="1" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0002" x="734" y="1" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0003" x="734" y="119" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0004" x="734" y="119" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0005" x="734" y="119" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0006" x="730" y="237" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0007" x="730" y="237" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode basic0008" x="730" y="237" width="495" height="116" frameX="-0" frameY="-0" frameWidth="495" frameHeight="116"/>
|
||||
<SubTexture name="story mode white0000" x="1" y="375" width="732" height="180" frameX="-0" frameY="28" frameWidth="732" frameHeight="186"/>
|
||||
<SubTexture name="story mode white0001" x="1" y="1" width="731" height="185" frameX="-0" frameY="30" frameWidth="732" frameHeight="186"/>
|
||||
<SubTexture name="story mode white0002" x="1" y="188" width="727" height="185" frameX="-0" frameY="29" frameWidth="732" frameHeight="186"/>
|
||||
</TextureAtlas>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Created with Funkin Packer v0.1.3 https://neeeoo.github.io/funkin-packer/
|
||||
-->
|
||||
<TextureAtlas imagePath="titleEnter.png" width="1186" height="2650">
|
||||
<SubTexture name="ENTER PRESSED0000" x="1" y="1" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="ENTER PRESSED0001" x="1" y="107" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="ENTER PRESSED0002" x="1" y="1" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="ENTER PRESSED0003" x="1" y="107" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="ENTER PRESSED0004" x="1" y="1" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="ENTER PRESSED0005" x="1" y="107" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="ENTER PRESSED0006" x="1" y="1" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="ENTER PRESSED0007" x="1" y="107" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0000" x="1" y="213" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0001" x="1" y="319" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0002" x="1" y="425" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0003" x="1" y="531" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0004" x="1" y="637" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0005" x="1" y="743" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0006" x="1" y="849" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0007" x="1" y="955" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0008" x="1" y="1061" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0009" x="1" y="1167" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0010" x="1" y="1273" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0011" x="1" y="1379" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0012" x="1" y="1485" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0013" x="1" y="1591" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0014" x="1" y="1697" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0015" x="1" y="1803" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0016" x="1" y="1909" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0017" x="1" y="2015" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0018" x="1" y="2121" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0019" x="1" y="2227" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0020" x="1" y="2333" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0021" x="1" y="2439" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0022" x="1" y="2545" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0023" x="1" y="2545" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0024" x="1" y="2439" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0025" x="1" y="2333" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0026" x="1" y="2227" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0027" x="1" y="2121" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0028" x="1" y="2015" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0029" x="1" y="1909" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0030" x="1" y="1803" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0031" x="1" y="1697" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0032" x="1" y="1591" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0033" x="1" y="1485" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0034" x="1" y="1379" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0035" x="1" y="1273" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0036" x="1" y="1167" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0037" x="1" y="1061" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0038" x="1" y="955" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0039" x="1" y="849" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0040" x="1" y="743" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0041" x="1" y="637" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0042" x="1" y="531" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0043" x="1" y="425" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0044" x="1" y="319" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
<SubTexture name="Press Enter to Begin0045" x="1" y="213" width="1184" height="104" frameX="-143" frameY="-1" frameWidth="1494" frameHeight="110"/>
|
||||
</TextureAtlas>
|
||||
@@ -1,3 +1,3 @@
|
||||
name="Polski"
|
||||
credits="GlitchDotSmh & Kolze"
|
||||
version="1.0.0"
|
||||
credits="GlitchDotSmh, Kolze & Verwex"
|
||||
version="1.1.0"
|
||||
|
Before Width: | Height: | Size: 564 KiB |
@@ -1,60 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Created with Funkin Packer v0.1.3 https://neeeoo.github.io/funkin-packer/
|
||||
-->
|
||||
<TextureAtlas imagePath="titleEnter.png" width="1258" height="1991">
|
||||
<SubTexture name="ENTER PRESSED0001" x="1" y="1" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="ENTER PRESSED0002" x="1" y="77" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="ENTER PRESSED0003" x="1" y="1" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="ENTER PRESSED0004" x="1" y="77" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="ENTER PRESSED0005" x="1" y="1" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="ENTER PRESSED0006" x="1" y="77" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="ENTER PRESSED0007" x="1" y="1" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="ENTER PRESSED0008" x="1" y="77" width="1256" height="73" frameX="-105" frameY="-0" frameWidth="1478" frameHeight="78"/>
|
||||
<SubTexture name="Press Enter to Begin0001" x="1" y="153" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0002" x="1" y="233" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0003" x="1" y="313" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0004" x="1" y="393" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0005" x="1" y="473" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0006" x="1" y="553" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0007" x="1" y="633" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0008" x="1" y="713" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0009" x="1" y="793" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0010" x="1" y="873" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0011" x="1" y="953" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0012" x="1" y="1033" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0013" x="1" y="1113" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0014" x="1" y="1193" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0015" x="1" y="1273" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0016" x="1" y="1353" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0017" x="1" y="1433" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0018" x="1" y="1513" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0019" x="1" y="1593" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0020" x="1" y="1673" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0021" x="1" y="1753" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0022" x="1" y="1833" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0023" x="1" y="1913" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0024" x="1" y="1913" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0025" x="1" y="1833" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0026" x="1" y="1753" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0027" x="1" y="1673" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0028" x="1" y="1593" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0029" x="1" y="1513" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0030" x="1" y="1433" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0031" x="1" y="1353" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0032" x="1" y="1273" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0033" x="1" y="1193" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0034" x="1" y="1113" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0035" x="1" y="1033" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0036" x="1" y="953" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0037" x="1" y="873" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0038" x="1" y="793" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0039" x="1" y="713" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0040" x="1" y="633" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0041" x="1" y="553" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0042" x="1" y="473" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0043" x="1" y="393" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0044" x="1" y="313" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0045" x="1" y="233" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
<SubTexture name="Press Enter to Begin0046" x="1" y="153" width="1255" height="77" frameX="-112" frameY="-3" frameWidth="1494" frameHeight="96"/>
|
||||
</TextureAtlas>
|
||||
@@ -5,7 +5,7 @@
|
||||
title="Friday Night Funkin' - Codename Engine" main="funkin.backend.system.Main"
|
||||
file="CodenameEngine" packageName="com.yoshman29.codenameengine"
|
||||
package="com.yoshman29.codenameengine"
|
||||
version="1.0.0" company="Yoshman29" />
|
||||
version="1.0.1" company="Yoshman29" />
|
||||
|
||||
<!--
|
||||
CHANGE THE SAVE PATH & NAME FOR YOUR MOD HERE!
|
||||
@@ -50,7 +50,7 @@
|
||||
<!-- _________________________________ Engine Settings _______________________________ -->
|
||||
|
||||
<!-- Comment this out to disable updates !-->
|
||||
<!-- <define name="UPDATE_CHECKING" unless="web || hl || neko"/> -->
|
||||
<define name="UPDATE_CHECKING" unless="web || hl || neko"/>
|
||||
|
||||
<!-- Comment this out to disable Discord RPC !-->
|
||||
<section if="cpp">
|
||||
|
||||
@@ -11,13 +11,14 @@ import funkin.backend.system.Controls;
|
||||
import funkin.backend.system.GraphicCacheSprite;
|
||||
import funkin.backend.system.framerate.Framerate;
|
||||
import funkin.backend.system.interfaces.IBeatReceiver;
|
||||
import funkin.backend.system.interfaces.IBeatCancellableReceiver;
|
||||
import funkin.options.PlayerSettings;
|
||||
|
||||
/**
|
||||
* Base class for all the states.
|
||||
* Handles the scripts, the transitions, and the beat and step events.
|
||||
**/
|
||||
class MusicBeatState extends FlxState implements IBeatReceiver
|
||||
class MusicBeatState extends FlxState implements IBeatCancellableReceiver
|
||||
{
|
||||
private var lastBeat:Float = 0;
|
||||
private var lastStep:Float = 0;
|
||||
|
||||
@@ -9,17 +9,23 @@ import funkin.backend.scripting.events.*;
|
||||
import funkin.backend.system.Conductor;
|
||||
import funkin.backend.system.Controls;
|
||||
import funkin.backend.system.interfaces.IBeatReceiver;
|
||||
import funkin.backend.system.interfaces.IBeatCancellableReceiver;
|
||||
import funkin.options.PlayerSettings;
|
||||
|
||||
/**
|
||||
* Base class for all the sub states.
|
||||
* Handles the scripts, the transitions, and the beat and step events.
|
||||
**/
|
||||
class MusicBeatSubstate extends FlxSubState implements IBeatReceiver
|
||||
class MusicBeatSubstate extends FlxSubState implements IBeatCancellableReceiver
|
||||
{
|
||||
private var lastBeat:Float = 0;
|
||||
private var lastStep:Float = 0;
|
||||
|
||||
/**
|
||||
* Whenever the Conductor auto update should be enabled or not.
|
||||
*/
|
||||
public var cancelConductorUpdate:Bool = false;
|
||||
|
||||
/**
|
||||
* Whether this specific substate can open custom transitions
|
||||
*/
|
||||
|
||||
@@ -23,8 +23,28 @@ class Paths
|
||||
});
|
||||
}
|
||||
|
||||
public static inline function getPath(file:String, ?library:String)
|
||||
return library != null ? '$library:assets/$library/$file' : 'assets/$file';
|
||||
public static inline function getPath(file:String, ?library:String) {
|
||||
var returnedPath:String = library != null ? '$library:assets/$library/$file' : 'assets/$file';
|
||||
#if (sys && !windows)
|
||||
returnedPath = Path.normalize(returnedPath);
|
||||
if (OpenFlAssets.exists(returnedPath)) return returnedPath;
|
||||
var fixedPath:String = library != null ? '$library:assets/$library/' : 'assets/';
|
||||
var parts:Array<String> = returnedPath.split("/");
|
||||
for (it=>part in parts) {
|
||||
if (it == 0) continue;
|
||||
var entries:Array<String> = null;
|
||||
if (Path.extension(part) == "") entries = assetsTree.getFolders(fixedPath);
|
||||
else entries = assetsTree.getFiles(fixedPath);
|
||||
for (entry in entries) {
|
||||
if (entry.toLowerCase() == part.toLowerCase()) {
|
||||
fixedPath += entry + (it != parts.length - 1 ? "/" : "");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (returnedPath.toLowerCase() == fixedPath.toLowerCase()) returnedPath = fixedPath;
|
||||
#end
|
||||
return returnedPath;
|
||||
}
|
||||
|
||||
public static inline function video(key:String, ?ext:String)
|
||||
return getPath('videos/$key.${ext != null ? ext : Flags.VIDEO_EXT}');
|
||||
|
||||
@@ -106,7 +106,7 @@ class Chart {
|
||||
bpm: 100
|
||||
};
|
||||
|
||||
data.setFieldDefault("name", songName);
|
||||
data.name = songName;
|
||||
data.setFieldDefault("bpm", Flags.DEFAULT_BPM);
|
||||
data.setFieldDefault("beatsPerMeasure", Flags.DEFAULT_BEATS_PER_MEASURE);
|
||||
data.setFieldDefault("stepsPerBeat", Flags.DEFAULT_STEPS_PER_BEAT);
|
||||
|
||||
@@ -10,7 +10,7 @@ import openfl.Assets;
|
||||
using StringTools;
|
||||
|
||||
class EventsData {
|
||||
public static var defaultEventsList:Array<String> = ["HScript Call", "Camera Movement", "Camera Position", "Add Camera Zoom", "Camera Zoom", "Camera Modulo Change", "Camera Flash", "BPM Change", "Continuous BPM Change", "Time Signature Change", "Scroll Speed Change", "Alt Animation Toggle", "Play Animation"];
|
||||
public static var defaultEventsList:Array<String> = ["HScript Call", "Camera Movement", "Camera Position", "Add Camera Zoom", "Camera Bop", "Camera Zoom", "Camera Modulo Change", "Camera Flash", "BPM Change", "Continuous BPM Change", "Time Signature Change", "Scroll Speed Change", "Alt Animation Toggle", "Play Animation"];
|
||||
public static var defaultEventsParams:Map<String, Array<EventParamInfo>> = [
|
||||
"HScript Call" => [
|
||||
{name: "Function Name", type: TString, defValue: "myFunc"},
|
||||
@@ -56,6 +56,9 @@ class EventsData {
|
||||
{name: "Amount", type: TFloat(-10, 10, 0.01, 2), defValue: 0.05},
|
||||
{name: "Camera", type: TDropDown(['camGame', 'camHUD']), defValue: "camGame"}
|
||||
],
|
||||
"Camera Bop" => [
|
||||
{name: "Amount", type: TFloat(-10, 10, 0.1, 2), defValue: 0.1}
|
||||
],
|
||||
"Camera Zoom" => [
|
||||
{name: "Tween Zoom?", type: TBool, defValue: true},
|
||||
{name: "New Zoom", type: TFloat(-10, 10, 0.01, 2), defValue: 1},
|
||||
|
||||
@@ -4,6 +4,7 @@ import flixel.FlxState;
|
||||
import flixel.util.FlxSignal.FlxTypedSignal;
|
||||
import funkin.backend.chart.ChartData;
|
||||
import funkin.backend.system.interfaces.IBeatReceiver;
|
||||
import funkin.backend.system.interfaces.IBeatCancellableReceiver;
|
||||
import funkin.editors.charter.Charter;
|
||||
|
||||
enum BeatType {
|
||||
@@ -371,8 +372,14 @@ final class Conductor
|
||||
private static var __updateMeasure:Bool;
|
||||
|
||||
private static function update() {
|
||||
if (FlxG.state != null && FlxG.state is MusicBeatState && cast(FlxG.state, MusicBeatState).cancelConductorUpdate) return;
|
||||
|
||||
if (FlxG.state == null) return;
|
||||
else {
|
||||
var state = FlxG.state;
|
||||
while (state != null) {
|
||||
if (state is IBeatCancellableReceiver && cast(FlxG.state, IBeatCancellableReceiver).cancelConductorUpdate) return;
|
||||
state = state.subState;
|
||||
}
|
||||
}
|
||||
__updateSongPos(FlxG.elapsed);
|
||||
|
||||
var oldStep = curStep, oldBeat = curBeat, oldMeasure = curMeasure, oldChangeIndex = curChangeIndex;
|
||||
|
||||
@@ -26,8 +26,8 @@ class Flags {
|
||||
public static var MOD_DOWNLOAD_LINK:String = "";
|
||||
public static var MOD_DEPENDENCIES:Array<String> = [];
|
||||
|
||||
@:noCompletion public static var MOD_ICON64:String = "";
|
||||
@:noCompletion public static var MOD_ICON32:String = "";
|
||||
@:noCompletion public static var MOD_ICON24:String = "";
|
||||
@:noCompletion public static var MOD_ICON16:String = "";
|
||||
public static var MOD_ICON:String = "";
|
||||
|
||||
@@ -46,6 +46,7 @@ class Flags {
|
||||
public static var COMMIT_HASH:String = GitCommitMacro.commitHash;
|
||||
public static var COMMIT_MESSAGE:String = 'Commit $COMMIT_NUMBER ($COMMIT_HASH)';
|
||||
|
||||
@:bypass public static var WINDOW_TITLE_USE_MOD_NAME:Bool = false;
|
||||
@:lazy public static var TITLE:String = Application.current.meta.get('name');
|
||||
@:lazy public static var VERSION:String = Application.current.meta.get('version');
|
||||
|
||||
@@ -136,7 +137,14 @@ class Flags {
|
||||
public static var DEFAULT_CAM_ZOOM_STRENGTH:Int = 1;
|
||||
public static var DEFAULT_CAM_ZOOM:Float = 1.05; // what zoom level it defaults to
|
||||
public static var DEFAULT_HUD_ZOOM:Float = 1.0;
|
||||
public static var MAX_CAMERA_ZOOM_MULT:Float = 1.35;
|
||||
public static var DEFAULT_ZOOM:Float = 1.0;
|
||||
public static var DEFAULT_ZOOM_LERP:Float = 0.05;
|
||||
public static var MAX_CAMERA_ZOOM_MULT:Float = 10;
|
||||
public static var USE_CAM_ZOOM_MULT:Bool = true;
|
||||
public static var DEFAULT_CAM_ZOOM_MULT:Float = 0.015;
|
||||
public static var DEFAULT_HUD_ZOOM_MULT:Float = 0.03;
|
||||
public static var DEFAULT_CAM_ZOOM_LERP:Float = 0.05;
|
||||
public static var DEFAULT_HUD_ZOOM_LERP:Float = 0.05;
|
||||
|
||||
// to translate these you need to convert them into ids
|
||||
// Resume -> pause.resume
|
||||
@@ -164,11 +172,6 @@ class Flags {
|
||||
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;
|
||||
public static var DEFAULT_CAM_ZOOM_LERP:Float = 0.05;
|
||||
public static var DEFAULT_HUD_ZOOM_LERP:Float = 0.05;
|
||||
|
||||
public static var MAX_SPLASHES:Int = 8;
|
||||
public static var STUNNED_TIME:Float = 5 / 60;
|
||||
|
||||
@@ -281,6 +284,8 @@ class Flags {
|
||||
else trace('Invalid section $name');
|
||||
}
|
||||
}
|
||||
|
||||
if (!flags.exists("WINDOW_TITLE_USE_MOD_NAME")) flags.set("WINDOW_TITLE_USE_MOD_NAME", flags.exists('TITLE') ? 'false' : 'true');
|
||||
}
|
||||
|
||||
public static function loadFromDatas(datas:Array<String>) {
|
||||
|
||||
@@ -112,7 +112,8 @@ class MainState extends FlxState {
|
||||
TranslationUtil.setLanguage(Flags.DISABLE_LANGUAGES ? Flags.DEFAULT_LANGUAGE : null);
|
||||
ModsFolder.onModSwitch.dispatch(ModsFolder.currentModFolder); // Loads global.hx
|
||||
MusicBeatTransition.script = Flags.DEFAULT_TRANSITION_SCRIPT;
|
||||
WindowUtils.resetTitle();
|
||||
WindowUtils.resetAffixes(false);
|
||||
WindowUtils.setWindow();
|
||||
Main.refreshAssets();
|
||||
DiscordUtil.init();
|
||||
EventsData.reloadEvents();
|
||||
@@ -126,6 +127,8 @@ class MainState extends FlxState {
|
||||
CoolUtil.safeAddAttributes('./.temp/', NativeAPI.FileAttribute.HIDDEN);
|
||||
#end
|
||||
|
||||
var startState:Class<FlxState> = Flags.DISABLE_WARNING_SCREEN ? TitleState : funkin.menus.WarningState;
|
||||
|
||||
if (Options.devMode && Options.allowConfigWarning) {
|
||||
var lib:ModsFolderLibrary;
|
||||
for (e in Paths.assetsTree.libraries) if ((lib = cast AssetsLibraryList.getCleanLibrary(e)) is ModsFolderLibrary
|
||||
@@ -133,12 +136,11 @@ class MainState extends FlxState {
|
||||
{
|
||||
if (lib.exists(Paths.ini("config/modpack"), lime.utils.AssetType.TEXT)) break;
|
||||
|
||||
FlxG.switchState(new ModConfigWarning(lib));
|
||||
FlxG.switchState(new ModConfigWarning(lib, startState));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Flags.DISABLE_WARNING_SCREEN) FlxG.switchState(new funkin.menus.WarningState());
|
||||
else FlxG.switchState(new TitleState());
|
||||
FlxG.switchState(cast Type.createInstance(startState, []));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package funkin.backend.system.interfaces;
|
||||
|
||||
interface IBeatCancellableReceiver extends IBeatReceiver {
|
||||
public var cancelConductorUpdate:Bool;
|
||||
}
|
||||
@@ -56,7 +56,7 @@ class UpdateScreen extends MusicBeatState {
|
||||
generalProgress.alignment = CENTER;
|
||||
add(generalProgress);
|
||||
|
||||
overSound = FlxG.sound.load(Paths.sound(Flags.DEFAULT_GAMEOVER_RETRY_SFX));
|
||||
overSound = FlxG.sound.load(Paths.sound(Flags.DEFAULT_GAMEOVEREND_SOUND));
|
||||
|
||||
updater.execute();
|
||||
|
||||
|
||||
@@ -20,11 +20,11 @@ class UpdateUtil {
|
||||
|
||||
public static function checkForUpdates():UpdateCheckCallback {
|
||||
var curTag = 'v${Flags.VERSION}';
|
||||
trace(curTag);
|
||||
trace("Current version: " + curTag);
|
||||
|
||||
var error = false;
|
||||
|
||||
var newUpdates = __doReleaseFiltering(GitHub.getReleases(Flags.REPO_NAME, Flags.REPO_OWNER, function(e) {
|
||||
var newUpdates = __doReleaseFiltering(GitHub.getReleases(Flags.REPO_OWNER, Flags.REPO_NAME, function(e) {
|
||||
error = true;
|
||||
}), curTag);
|
||||
|
||||
@@ -79,7 +79,6 @@ class UpdateUtil {
|
||||
newArray.insert(0, release);
|
||||
if (__curVersionPos > -2)
|
||||
__curVersionPos++;
|
||||
trace(release.tag_name);
|
||||
}
|
||||
}
|
||||
if (__curVersionPos < -1)
|
||||
|
||||
@@ -45,16 +45,17 @@ final class WindowUtils {
|
||||
* Resets the window title to the application name and resets the prefix and suffix.
|
||||
**/
|
||||
public static inline function resetTitle() {
|
||||
title = Flags.TITLE == null ? Lib.application.meta.get('name') : Flags.TITLE;
|
||||
resetAffixes();
|
||||
resetAffixes(false);
|
||||
title = Flags.TITLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the prefix and suffix.
|
||||
* @param update Should it update window title.
|
||||
**/
|
||||
public static inline function resetAffixes() {
|
||||
public static inline function resetAffixes(update = true) {
|
||||
prefix = suffix = "";
|
||||
updateTitle();
|
||||
if (update) updateTitle();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,9 +63,13 @@ final class WindowUtils {
|
||||
* @param title The title to set.
|
||||
* @param image The image to set as the icon.
|
||||
**/
|
||||
public static inline function setWindow(?name:String, ?image:String)
|
||||
{ Lib.application.window.setIcon(lime.graphics.Image.fromBytes(Assets.getBytes(image != null ? image : Flags.MOD_ICON)));
|
||||
title = name != null ? name : Flags.MOD_NAME;
|
||||
public static inline function setWindow(?title:String, ?image:String)
|
||||
{
|
||||
// TODO: Implement ICON SIZES in Flags.
|
||||
WindowUtils.title = title != null ? title : (Flags.WINDOW_TITLE_USE_MOD_NAME ? Flags.MOD_NAME : Flags.TITLE);
|
||||
|
||||
var iconPath = image != null ? image : Flags.MOD_ICON;
|
||||
if (Assets.exists(Paths.image(iconPath))) Lib.application.window.setIcon(lime.graphics.Image.fromBytes(Assets.getBytes(Paths.image(iconPath))));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -633,22 +633,16 @@ class Charter extends UIState {
|
||||
|
||||
// create events
|
||||
rightEventsGroup.autoSort = leftEventsGroup.autoSort = false;
|
||||
var lastLeftEvents:CharterEvent = null, lastRightEvents:CharterEvent = null, lastEvents:CharterEvent;
|
||||
var lastLeftTime = Math.NaN, lastRightTime = Math.NaN, lastTime:Float;
|
||||
var lastLeftEvents:CharterEvent = null, lastRightEvents:CharterEvent = null;
|
||||
var lastLeftTime = Math.NaN, lastRightTime = Math.NaN;
|
||||
for (e in PlayState.SONG.events) if (e != null) {
|
||||
if (e.global) {
|
||||
lastEvents = lastRightEvents;
|
||||
lastTime = lastRightTime;
|
||||
if (lastRightEvents != null && lastRightTime == e.time) lastRightEvents.events.push(e);
|
||||
else rightEventsGroup.add(lastRightEvents = new CharterEvent(Conductor.getStepForTime(lastRightTime = e.time), [e], e.global));
|
||||
}
|
||||
else {
|
||||
lastEvents = lastLeftEvents;
|
||||
lastTime = lastLeftTime;
|
||||
}
|
||||
|
||||
if (lastEvents != null && lastTime == e.time) lastEvents.events.push(e);
|
||||
else {
|
||||
lastEvents = new CharterEvent(Conductor.getStepForTime(lastTime = e.time), [e], e.global);
|
||||
(e.global ? rightEventsGroup : leftEventsGroup).add(lastEvents);
|
||||
if (lastLeftEvents != null && lastLeftTime == e.time) lastLeftEvents.events.push(e);
|
||||
else leftEventsGroup.add(lastLeftEvents = new CharterEvent(Conductor.getStepForTime(lastLeftTime = e.time), [e], e.global));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ class UIUtil {
|
||||
} else if (member is UITextBox) @:privateAccess {
|
||||
var textbox:UITextBox = cast member;
|
||||
if (textbox.__wasFocused) {
|
||||
textbox.onChange(textbox.label.text);
|
||||
if (textbox.onChange != null) textbox.onChange(textbox.label.text);
|
||||
textbox.__wasFocused = false;
|
||||
}
|
||||
}
|
||||
@@ -159,4 +159,4 @@ class UIUtil {
|
||||
confirmUISelections(cast member);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +87,7 @@ class GameOverSubstate extends MusicBeatSubstate
|
||||
|
||||
lossSFX = FlxG.sound.play(Paths.sound(lossSFXName));
|
||||
Conductor.changeBPM(gameOverSongBPM);
|
||||
cancelConductorUpdate = true;
|
||||
|
||||
DiscordUtil.call("onGameOver", []);
|
||||
gameoverScript.call("postCreate");
|
||||
@@ -106,22 +107,23 @@ class GameOverSubstate extends MusicBeatSubstate
|
||||
|
||||
if (!isEnding && ((!lossSFX.playing) || (character.getAnimName() == "firstDeath" && character.isAnimFinished())) && (FlxG.sound.music == null || !FlxG.sound.music.playing))
|
||||
{
|
||||
var event = new CancellableEvent();
|
||||
gameoverScript.call("deathStart", [event]);
|
||||
|
||||
if (event.cancelled) return;
|
||||
|
||||
CoolUtil.playMusic(Paths.music(gameOverSong), false, 1, true, Flags.DEFAULT_BPM);
|
||||
beatHit(0);
|
||||
character.playAnim("deathLoop", true, DANCE);
|
||||
cancelConductorUpdate = false;
|
||||
|
||||
gameoverScript.call("postDeathStart");
|
||||
}
|
||||
}
|
||||
|
||||
override function beatHit(curBeat:Int)
|
||||
{
|
||||
super.beatHit(curBeat);
|
||||
|
||||
gameoverScript.call("beatHit", [curBeat]);
|
||||
|
||||
if (__cancelDefault)
|
||||
return;
|
||||
|
||||
if (FlxG.sound.music != null && FlxG.sound.music.playing)
|
||||
character.playAnim("deathLoop", true, DANCE);
|
||||
}
|
||||
|
||||
override function stepHit(curStep:Int)
|
||||
|
||||
@@ -388,7 +388,7 @@ class HealthIcon extends FunkinSprite
|
||||
}) + sprTrackerOffset.x, sprTracker.y + sprTrackerOffset.y);
|
||||
}
|
||||
|
||||
if (animation.curAnim != null || (this.animated && animateAtlas != null)) {
|
||||
if (animation.curAnim != null || this.animated) {
|
||||
var data = getIconAnim(health);
|
||||
var localAnimState = data.animState;
|
||||
|
||||
|
||||
@@ -362,6 +362,10 @@ class PlayState extends MusicBeatState
|
||||
* Speed at which the game camera zoom lerps to.
|
||||
*/
|
||||
public var camGameZoomLerp:Float = Flags.DEFAULT_CAM_ZOOM_LERP;
|
||||
/**
|
||||
* The current multiplier for game camera zooming.
|
||||
*/
|
||||
public var camGameZoomMult:Float = Flags.DEFAULT_CAM_ZOOM_MULT;
|
||||
|
||||
/**
|
||||
* Camera zoom at which the hud lerps to.
|
||||
@@ -371,6 +375,21 @@ class PlayState extends MusicBeatState
|
||||
* Speed at which the hud camera zoom lerps to.
|
||||
*/
|
||||
public var camHUDZoomLerp:Float = Flags.DEFAULT_HUD_ZOOM_LERP;
|
||||
/**
|
||||
* The current multiplier for game camera zooming.
|
||||
*/
|
||||
public var camHUDZoomMult:Float = Flags.DEFAULT_HUD_ZOOM_MULT;
|
||||
|
||||
/**
|
||||
* Camera zoom at which the cameras that zooms lerps to.
|
||||
* (Only used if useCamZoomMult is on).
|
||||
*/
|
||||
public var defaultZoom:Float = Flags.DEFAULT_ZOOM;
|
||||
/**
|
||||
* Speed at which the cameras that zooms zoom lerps to.
|
||||
* (Only used if useCamZoomMult is on).
|
||||
*/
|
||||
public var camZoomLerp:Float = Flags.DEFAULT_ZOOM_LERP;
|
||||
|
||||
/**
|
||||
* Whenever cam zooming is enabled, enables on a note hit if not cancelled.
|
||||
@@ -401,15 +420,24 @@ class PlayState extends MusicBeatState
|
||||
*/
|
||||
public var camZoomingStrength:Float = Flags.DEFAULT_CAM_ZOOM_STRENGTH;
|
||||
/**
|
||||
* Default multiplier for `maxCamZoom`.
|
||||
*/
|
||||
* Default multiplier for `maxCamZoom`.
|
||||
*/
|
||||
public var maxCamZoomMult:Float = Flags.MAX_CAMERA_ZOOM_MULT;
|
||||
/**
|
||||
* Maximum amount of zoom for the camera (based on `maxCamZoomMult` and the camera's zoom IF not set).
|
||||
*/
|
||||
* Whether it should use a implementation where it multiplies the current camera zoom instead.
|
||||
*/
|
||||
public var useCamZoomMult:Bool = Flags.USE_CAM_ZOOM_MULT;
|
||||
/**
|
||||
* The current multiplier for camera zooming.
|
||||
* (Only used if useCamZoomMult is on).
|
||||
*/
|
||||
public var camZoomingMult:Float = Flags.DEFAULT_ZOOM;
|
||||
/**
|
||||
* Maximum amount of zoom for the camera (based on `maxCamZoomMult` and the camera's zoom IF not set).
|
||||
*/
|
||||
public var maxCamZoom(get, default):Float = Math.NaN;
|
||||
|
||||
private inline function get_maxCamZoom() return Math.isNaN(maxCamZoom) ? maxCamZoomMult * defaultCamZoom : maxCamZoom;
|
||||
private inline function get_maxCamZoom() return Math.isNaN(maxCamZoom) ? defaultCamZoom + (camZoomingMult * camGameZoomMult) : maxCamZoom;
|
||||
|
||||
/**
|
||||
* Zoom for the pixel assets.
|
||||
@@ -1324,12 +1352,17 @@ class PlayState extends MusicBeatState
|
||||
if (canAccessDebugMenus && chartingMode && controls.DEV_ACCESS)
|
||||
FlxG.switchState(new funkin.editors.charter.Charter(SONG.meta.name, difficulty, false));
|
||||
|
||||
if (Options.camZoomOnBeat && camZooming && FlxG.camera.zoom < maxCamZoom) {
|
||||
if (Options.camZoomOnBeat && camZooming) {
|
||||
var beat = Conductor.getBeats(camZoomingEvery, camZoomingInterval, camZoomingOffset);
|
||||
if (camZoomingLastBeat != beat) {
|
||||
camZoomingLastBeat = beat;
|
||||
FlxG.camera.zoom += 0.015 * camZoomingStrength;
|
||||
camHUD.zoom += 0.03 * camZoomingStrength;
|
||||
if (useCamZoomMult) {
|
||||
if (camZoomingMult < maxCamZoomMult) camZoomingMult += camZoomingStrength;
|
||||
}
|
||||
else if (FlxG.camera.zoom < maxCamZoom) {
|
||||
FlxG.camera.zoom += camGameZoomMult * camZoomingStrength;
|
||||
camHUD.zoom += camHUDZoomMult * camZoomingStrength;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1372,6 +1405,12 @@ class PlayState extends MusicBeatState
|
||||
moveCamera();
|
||||
|
||||
if (camZooming) {
|
||||
if (useCamZoomMult) {
|
||||
camZoomingMult = lerp(camZoomingMult, defaultZoom, camZoomLerp) - defaultZoom;
|
||||
FlxG.camera.zoomMultiplier = camZoomingMult * camGameZoomMult + defaultZoom;
|
||||
camHUD.zoomMultiplier = camZoomingMult * camHUDZoomMult + defaultZoom;
|
||||
camZoomingMult += defaultZoom;
|
||||
}
|
||||
FlxG.camera.zoom = lerp(FlxG.camera.zoom, defaultCamZoom, camGameZoomLerp);
|
||||
camHUD.zoom = lerp(camHUD.zoom, defaultHudZoom, camHUDZoomLerp);
|
||||
}
|
||||
@@ -1530,6 +1569,8 @@ class PlayState extends MusicBeatState
|
||||
case "Add Camera Zoom":
|
||||
var camera:FlxCamera = event.params[1] == "camHUD" ? camHUD : camGame;
|
||||
camera.zoom += event.params[0];
|
||||
case "Camera Bop":
|
||||
camZoomingMult += event.params[0];
|
||||
case "Camera Zoom":
|
||||
var cam = event.params[2] == "camHUD" ? camHUD : camGame;
|
||||
var name = (event.params[2] == "camHUD" ? "camHUD" : "camGame") + ".zoom"; // avoiding having different values from these 2 - Nex
|
||||
|
||||
@@ -25,6 +25,8 @@ class MainMenuState extends MusicBeatState
|
||||
var camFollow:FlxObject;
|
||||
var versionText:FunkinText;
|
||||
|
||||
var devModeWarning:FunkinText;
|
||||
|
||||
public var canAccessDebugMenus:Bool = !Flags.DISABLE_EDITORS;
|
||||
|
||||
override function create()
|
||||
@@ -85,10 +87,17 @@ class MainMenuState extends MusicBeatState
|
||||
add(versionText);
|
||||
|
||||
changeItem();
|
||||
|
||||
devModeWarning = new FunkinText(0, FlxG.height - 50, 1280, "You have to enable DEVELOPER MODE in the miscellaneous settings!", 24);
|
||||
devModeWarning.alignment = CENTER;
|
||||
add(devModeWarning);
|
||||
devModeWarning.scrollFactor.set();
|
||||
devModeWarning.alpha = 0;
|
||||
}
|
||||
|
||||
var selectedSomethin:Bool = false;
|
||||
var forceCenterX:Bool = true;
|
||||
var devModeCount:Int = 0;
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
@@ -111,6 +120,17 @@ class MainMenuState extends MusicBeatState
|
||||
}
|
||||
*/
|
||||
}
|
||||
if (!Options.devMode && FlxG.keys.justPressed.SEVEN) {
|
||||
FlxG.sound.play(Paths.sound(Flags.DEFAULT_EDITOR_DELETE_SOUND));
|
||||
if (devModeCount++ == 2) {
|
||||
FlxTween.tween(devModeWarning, {alpha: 1}, 0.4);
|
||||
}
|
||||
FlxTween.completeTweensOf(devModeWarning);
|
||||
FlxTween.color(devModeWarning, 0.2, 0xFFFF0000, 0xFFFFFFFF);
|
||||
FlxTween.shake(devModeWarning, 0.005, 0.3);
|
||||
devModeWarning.y = FlxG.height - 75;
|
||||
FlxTween.tween(devModeWarning, {y: FlxG.height - 50}, 0.4);
|
||||
}
|
||||
|
||||
var upP = controls.UP_P;
|
||||
var downP = controls.DOWN_P;
|
||||
|
||||
@@ -15,7 +15,7 @@ class MiscOptions extends TreeMenuScreen {
|
||||
if (report.newUpdate) FlxG.switchState(new funkin.backend.system.updating.UpdateAvailableScreen(report));
|
||||
else {
|
||||
CoolUtil.playMenuSFX(CANCEL);
|
||||
updateDescText(translate('checkForUpdates-noUpdateFound'));
|
||||
//updateDescText(translate('checkForUpdates-noUpdateFound'));
|
||||
}
|
||||
}));
|
||||
#end
|
||||
|
||||
@@ -372,7 +372,7 @@ class NativeAudioSource {
|
||||
|
||||
if (playing) {
|
||||
var timeRemaining = (getLength() - value) / getPitch();
|
||||
if (timeRemaining < 8) complete();
|
||||
if (timeRemaining < 8 && value > 8) complete();
|
||||
else {
|
||||
completed = streamEnded = false;
|
||||
if (streamed) {
|
||||
|
||||
@@ -312,12 +312,29 @@ class AudioBuffer
|
||||
if (vorbisFile == null) return null;
|
||||
|
||||
var info = vorbisFile.info();
|
||||
if (info == null) return null;
|
||||
|
||||
var audioBuffer = new AudioBuffer();
|
||||
audioBuffer.channels = info.channels;
|
||||
audioBuffer.sampleRate = info.rate;
|
||||
audioBuffer.bitsPerSample = 16;
|
||||
audioBuffer.__srcVorbisFile = vorbisFile;
|
||||
|
||||
if (!vorbisFile.seekable() ||
|
||||
vorbisFile.pcmTotal() < #if lime_cffi @:privateAccess lime._internal.backend.native.NativeAudioSource.STREAM_BUFFER_SAMPLES #else 0x4000 #end)
|
||||
{
|
||||
// convert it to static if its too short or unseekable.
|
||||
vorbisFile.rawSeek(0);
|
||||
|
||||
var isBigEndian = lime.system.System.endianness == lime.system.Endian.BIG_ENDIAN;
|
||||
var bytes:Bytes = Bytes.alloc(Std.int(haxe.Int64.toInt(vorbisFile.pcmTotal()) * info.channels * 2));
|
||||
var total = 0, result = 0;
|
||||
do {
|
||||
total += (result = vorbisFile.read(bytes, total, 0x1000, isBigEndian, 2, true));
|
||||
} while (result > 0);
|
||||
|
||||
audioBuffer.data = new UInt8Array(bytes);
|
||||
}
|
||||
else audioBuffer.__srcVorbisFile = vorbisFile;
|
||||
|
||||
return audioBuffer;
|
||||
}
|
||||
|
||||