Changes for the future, etc.

This commit is contained in:
Nennneko5787 2023-03-16 18:09:27 +09:00
parent 8c028d6bbe
commit 05d4cda780
24 changed files with 1182 additions and 173 deletions

View File

@ -63,6 +63,7 @@
<library name="weeks" preload="true" />
<library name="scripts" preload="true" />
<library name="shaders" preload="true" />
<library name="characters" preload="true" />
</section>
<section if="NO_PRELOAD_ALL">
@ -79,6 +80,7 @@
<library name="weeks" preload="false" />
<library name="scripts" preload="false" />
<library name="shaders" preload="false" />
<library name="characters" preload="false" />
</section>
<assets path="assets/songs" library="songs" exclude="*.fla|*.ogg" if="web"/>
@ -107,6 +109,8 @@
<assets path="assets/scripts" library="scripts" exclude="*.fla|*.mp3" unless="web"/>
<assets path="assets/shaders" library="shaders" exclude="*.fla|*.ogg" if="web"/>
<assets path="assets/shaders" library="shaders" exclude="*.fla|*.mp3" unless="web"/>
<assets path="assets/characters" library="characters" exclude="*.fla|*.ogg" if="web"/>
<assets path="assets/characters" library="characters" exclude="*.fla|*.mp3" unless="web"/>
<template path="example_mods" rename="mods" />
@ -134,9 +138,9 @@
<haxelib name="flixel-ui" />
<haxelib name="newgrounds" unless="switch"/>
<haxelib name="faxe" if='switch'/>
<haxelib name="polymod" if="desktop || mobile"/>
<haxelib name="polymod" if="desktop"/>
<haxelib name="hxcpp-debug-server" if="desktop debug"/>
<haxelib name="hxCodec" if="desktop || mobile" />
<haxelib name="hxCodec" if="desktop || mobile" unless="32bits" />
<haxelib name="linc_luajit" if="desktop || mobile" />
<!-- <haxelib name="flixel-animate" /> -->
@ -190,6 +194,9 @@
<!--Error Dialog-->
<haxedef name="ErrorDialog" if="desktop" />
<haxedef name="HXCPP_CHECK_POINTER" if="CRASH_HANDLER" />
<haxedef name="HXCPP_STACK_LINE" if="CRASH_HANDLER" />
<!-- Show debug traces for hxCodec -->
<haxedef name="HXC_DEBUG_TRACE" if="debug" />

View File

@ -44,8 +44,6 @@ Run build-Itch-WINDOWS.bat in /art/ and build.
* nennneko5787 - Programmer
* ShadowMario - StrumNote.hx code, Lua code and shader code that I stole and modified from [PsychEngine](https://github.com/ShadowMario/FNF-PsychEngine).
* k.net(brightfyre) - Window focus & unfocus source code I stole from [Indie Cross](https://github.com/brightfyregit/Indie-Cross-Public)
* Leather128 - Part of the 5K+ support code stolen from [LeatherEngine](https://github.com/Leather128/LeatherEngine) and part of the Mod Menu code
* tposejank - Part of the 5K+ support code stolen from [Psych Engine With Extra Keys](https://gamebanana.com/mods/333373)
## Funkin
* ninjamuffin99 - Programmer
* PhantomArcade3K and Evilsk8r - Art

View File

@ -0,0 +1,107 @@
{
"texture":"characters/bfCar",
"onInit":"idle",
"antialiasing": true,
"animations":[
{
"name":"idle",
"anim":"BF idle dance",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singUP",
"anim":"BF NOTE UP0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFT",
"anim":"BF NOTE LEFT0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHT",
"anim":"BF NOTE RIGHT0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWN",
"anim":"BF NOTE DOWN0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singUPmiss",
"anim":"BF NOTE UP MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFTmiss",
"anim":"BF NOTE LEFT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHTmiss",
"anim":"BF NOTE RIGHT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWNmiss",
"anim":"BF NOTE DOWN MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"hey",
"anim":"BF HEY",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"idleHair",
"anim":"BF idle dance",
"framerate":24,
"loop": true,
"flipx": true,
"flipy": false,
"type":"indices",
"indices":[10, 11, 12, 13]
}
]
}

View File

@ -0,0 +1,97 @@
{
"texture":"characters/bfChristmas",
"onInit":"idle",
"antialiasing": true,
"animations":[
{
"name":"idle",
"anim":"BF idle dance",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singUP",
"anim":"BF NOTE UP0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFT",
"anim":"BF NOTE LEFT0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHT",
"anim":"BF NOTE RIGHT0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWN",
"anim":"BF NOTE DOWN0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singUPmiss",
"anim":"BF NOTE UP MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFTmiss",
"anim":"BF NOTE LEFT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHTmiss",
"anim":"BF NOTE RIGHT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWNmiss",
"anim":"BF NOTE DOWN MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"hey",
"anim":"BF HEY",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
}
]
}

View File

@ -0,0 +1,43 @@
{
"texture":"characters/bfPixelsDEAD",
"onInit":"firstDeath",
"antialiasing": true,
"animations":[
{
"name":"singUP",
"anim":"BF Dead with GF Loop",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"firstDeath",
"anim":"BF Dies with GF",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"deathLoop",
"anim":"BF Dead with GF Loop",
"framerate":24,
"loop": true,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"deathConfirm",
"anim":"RETRY confirm holding gf",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
}
]
}

View File

@ -0,0 +1,43 @@
{
"texture":"characters/bfPixelsDEAD",
"onInit":"firstDeath",
"antialiasing": false,
"animations":[
{
"name":"singUP",
"anim":"BF Dies pixel",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"firstDeath",
"anim":"BF Dies pixel",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"deathLoop",
"anim":"Retry Loop",
"framerate":24,
"loop": true,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"deathConfirm",
"anim":"RETRY CONFIRM",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
}
]
}

View File

@ -0,0 +1,97 @@
{
"texture":"characters/bfChristmas",
"onInit":"idle",
"antialiasing": false,
"animations":[
{
"name":"idle",
"anim":"BF IDLE",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singUP",
"anim":"BF UP NOTE",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFT",
"anim":"BF LEFT NOTE",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHT",
"anim":"BF RIGHT NOTE",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWN",
"anim":"BF DOWN NOTE",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singUPmiss",
"anim":"BF UP MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFTmiss",
"anim":"BF LEFT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHTmiss",
"anim":"BF RIGHT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWNmiss",
"anim":"BF DOWN MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"hey",
"anim":"BF HEY",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
}
]
}

View File

@ -0,0 +1,133 @@
{
"texture":"characters/BOYFRIEND",
"onInit":"idle",
"antialiasing": true,
"animations":[
{
"name":"idle",
"anim":"BF idle dance",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"UP",
"anim":"BF NOTE UP0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"LEFT",
"anim":"BF NOTE LEFT0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"RIGHT",
"anim":"BF NOTE RIGHT0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"DOWN",
"anim":"BF NOTE DOWN0",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"UPmiss",
"anim":"BF NOTE UP MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"LEFTmiss",
"anim":"BF NOTE LEFT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"RIGHTmiss",
"anim":"BF NOTE RIGHT MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"DOWNmiss",
"anim":"BF NOTE DOWN MISS",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"hey",
"anim":"BF HEY",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"firstDeath",
"anim":"BF dies",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"deathLoop",
"anim":"BF Dead Loop",
"framerate":24,
"loop": true,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"deathConfirm",
"anim":"BF Dead confirm",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"scared",
"anim":"BF idle shaking",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
}
]
}

View File

@ -0,0 +1,52 @@
{
"texture":"characters/DADDY_DEAREST",
"onInit":"idle",
"antialiasing": true,
"animations":[
{
"name":"idle",
"anim":"Dad idle dance",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singUP",
"anim":"Dad Sing Note UP",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHT",
"anim":"Dad Sing Note RIGHT",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWN",
"anim":"Dad Sing Note DOWN",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFT",
"anim":"Dad Sing Note LEFT",
"framerate":24,
"loop": false,
"flipx": true,
"flipy": false,
"type":"prefix"
}
]
}

View File

@ -0,0 +1,111 @@
{
"texture":"characters/GF_assets",
"onInit":"danceRight",
"antialiasing": true,
"animations":[
{
"name":"cheer",
"anim":"GF Cheer",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"prefix"
},
{
"name":"singLEFT",
"anim":"GF left note",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"prefix"
},
{
"name":"singRIGHT",
"anim":"GF Right Note",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"prefix"
},
{
"name":"singUP",
"anim":"GF Up Note",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"prefix"
},
{
"name":"singDOWN",
"anim":"GF Down Note",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"prefix"
},
{
"name":"sad",
"anim":"gf sad",
"framerate":24,
"loop": true,
"flipx": false,
"flipy": false,
"type":"indices",
"indices":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
},
{
"name":"danceLeft",
"anim":"GF Dancing Beat",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"indices",
"indices":[30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
},
{
"name":"danceRight",
"anim":"GF Dancing Beat",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"indices",
"indices":[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
},
{
"name":"hairBlow",
"anim":"GF Dancing Beat Hair blowing",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"indices",
"indices":[0, 1, 2, 3]
},
{
"name":"hairFall",
"anim":"GF Dancing Beat Hair Landing",
"framerate":24,
"loop": false,
"flipx": false,
"flipy": false,
"type":"indices",
"indices":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
},
{
"name":"scared",
"anim":"GF FEAR",
"framerate":24,
"loop": true,
"flipx": false,
"flipy": false,
"type":"prefix"
}
]
}

View File

@ -7,9 +7,34 @@ import flixel.animation.FlxBaseAnimation;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.util.FlxSort;
import haxe.io.Path;
import ui.PreferencesMenu;
#if desktop
import lime.utils.AssetType;
import lime.utils.Assets;
import haxe.Json;
import haxe.format.JsonParser;
#end
using StringTools;
typedef CharacterFile = {
var texture:String;
var onInit:String;
var antialiasing:Bool;
var animations:Array<AnimArray>;
}
typedef AnimArray = {
var name:String;
var anim:String;
var framerate:Int;
var loop:Bool;
var flipx:Bool;
var flipy:Bool;
var type:String;
var indices:Array<Int>;
}
class Character extends FlxSprite
{
public var animOffsets:Map<String, Array<Dynamic>>;
@ -22,6 +47,8 @@ class Character extends FlxSprite
public var animationNotes:Array<Dynamic> = [];
public var healthColorArray:Array<Int> = [255, 0, 0];
public function new(x:Float, y:Float, ?character:String = "bf", ?isPlayer:Bool = false)
{
super(x, y);
@ -31,11 +58,13 @@ class Character extends FlxSprite
this.isPlayer = isPlayer;
var tex:FlxAtlasFrames;
antialiasing = true;
antialiasing = PreferencesMenu.getPref('antialiasing');
switch (curCharacter)
{
case 'gf':
// Color Set
healthColorArray = [165,0,77];
// GIRLFRIEND CODE
tex = Paths.getSparrowAtlas('characters/GF_assets');
frames = tex;
@ -56,6 +85,9 @@ class Character extends FlxSprite
playAnim('danceRight');
case 'gf-christmas':
// Color Set
healthColorArray = [165,0,77];
tex = Paths.getSparrowAtlas('characters/gfChristmas');
frames = tex;
quickAnimAdd('cheer', 'GF Cheer');
@ -74,6 +106,9 @@ class Character extends FlxSprite
playAnim('danceRight');
case 'gf-tankmen':
// Color Set
healthColorArray = [165,0,77];
frames = Paths.getSparrowAtlas('characters/gfTankmen');
animation.addByIndices('sad', 'GF Crying at Gunpoint', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "", 24, true);
animation.addByIndices('danceLeft', 'GF Dancing at Gunpoint', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
@ -83,6 +118,9 @@ class Character extends FlxSprite
playAnim('danceRight');
case 'bf-holding-gf':
// Color Set
healthColorArray = [49,176,209];
frames = Paths.getSparrowAtlas('characters/bfAndGF');
quickAnimAdd('idle', 'BF idle dance');
quickAnimAdd('singDOWN', 'BF NOTE DOWN0');
@ -103,6 +141,9 @@ class Character extends FlxSprite
flipX = true;
case 'gf-car':
// Color Set
healthColorArray = [165,0,77];
tex = Paths.getSparrowAtlas('characters/gfCar');
frames = tex;
animation.addByIndices('singUP', 'GF Dancing Beat Hair blowing CAR', [0], "", 24, false);
@ -116,6 +157,9 @@ class Character extends FlxSprite
playAnim('danceRight');
case 'gf-pixel':
// Color Set
healthColorArray = [165,0,77];
tex = Paths.getSparrowAtlas('characters/gfPixel');
frames = tex;
animation.addByIndices('singUP', 'GF IDLE', [2], "", 24, false);
@ -131,6 +175,9 @@ class Character extends FlxSprite
antialiasing = false;
case 'dad':
// Color Set
healthColorArray = [175,102,206];
// DAD ANIMATION LOADING CODE
tex = Paths.getSparrowAtlas('characters/DADDY_DEAREST');
frames = tex;
@ -144,6 +191,9 @@ class Character extends FlxSprite
playAnim('idle');
case 'spooky':
// Color Set
healthColorArray = [213,126,0];
tex = Paths.getSparrowAtlas('characters/spooky_kids_assets');
frames = tex;
quickAnimAdd('singUP', 'spooky UP NOTE');
@ -157,6 +207,9 @@ class Character extends FlxSprite
playAnim('danceRight');
case 'mom':
// Color Set
healthColorArray = [216,85,142];
tex = Paths.getSparrowAtlas('characters/Mom_Assets');
frames = tex;
@ -173,6 +226,9 @@ class Character extends FlxSprite
playAnim('idle');
case 'mom-car':
// Color Set
healthColorArray = [216,85,142];
tex = Paths.getSparrowAtlas('characters/momCar');
frames = tex;
@ -189,6 +245,9 @@ class Character extends FlxSprite
playAnim('idle');
case 'monster':
// Color Set
healthColorArray = [243,110,245];
tex = Paths.getSparrowAtlas('characters/Monster_Assets');
frames = tex;
quickAnimAdd('idle', 'monster idle');
@ -201,6 +260,9 @@ class Character extends FlxSprite
playAnim('idle');
case 'monster-christmas':
// Color Set
healthColorArray = [216,85,142];
tex = Paths.getSparrowAtlas('characters/monsterChristmas');
frames = tex;
quickAnimAdd('idle', 'monster idle');
@ -213,6 +275,9 @@ class Character extends FlxSprite
playAnim('idle');
case 'pico':
// Color Set
healthColorArray = [183,216,85];
tex = Paths.getSparrowAtlas('characters/Pico_FNF_assetss');
frames = tex;
quickAnimAdd('idle', "Pico Idle Dance");
@ -244,6 +309,9 @@ class Character extends FlxSprite
flipX = true;
case 'pico-speaker':
// Color Set
healthColorArray = [183,216,85];
frames = Paths.getSparrowAtlas('characters/picoSpeaker');
quickAnimAdd('shoot1', "Pico shoot 1");
@ -258,6 +326,9 @@ class Character extends FlxSprite
loadMappedAnims();
case 'bf':
// Color Set
healthColorArray = [49,176,209];
var tex = Paths.getSparrowAtlas('characters/BOYFRIEND');
frames = tex;
quickAnimAdd('idle', 'BF idle dance');
@ -286,6 +357,9 @@ class Character extends FlxSprite
loadOffsetFile(curCharacter);
case 'bf-christmas':
// Color Set
healthColorArray = [49,176,209];
var tex = Paths.getSparrowAtlas('characters/bfChristmas');
frames = tex;
quickAnimAdd('idle', 'BF idle dance');
@ -305,6 +379,9 @@ class Character extends FlxSprite
flipX = true;
case 'bf-car':
// Color Set
healthColorArray = [49,176,209];
var tex = Paths.getSparrowAtlas('characters/bfCar');
frames = tex;
quickAnimAdd('idle', 'BF idle dance');
@ -324,6 +401,9 @@ class Character extends FlxSprite
flipX = true;
case 'bf-pixel':
// Color Set
healthColorArray = [49,176,209];
frames = Paths.getSparrowAtlas('characters/bfPixel');
quickAnimAdd('idle', 'BF IDLE');
quickAnimAdd('singUP', 'BF UP NOTE');
@ -349,6 +429,9 @@ class Character extends FlxSprite
flipX = true;
case 'bf-pixel-dead':
// Color Set
healthColorArray = [49,176,209];
frames = Paths.getSparrowAtlas('characters/bfPixelsDEAD');
quickAnimAdd('singUP', "BF Dies pixel");
quickAnimAdd('firstDeath', "BF Dies pixel");
@ -366,6 +449,9 @@ class Character extends FlxSprite
flipX = true;
case 'bf-holding-gf-dead':
// Color Set
healthColorArray = [49,176,209];
frames = Paths.getSparrowAtlas('characters/bfHoldingGF-DEAD');
quickAnimAdd('singUP', 'BF Dead with GF Loop');
quickAnimAdd('firstDeath', 'BF Dies with GF');
@ -379,6 +465,9 @@ class Character extends FlxSprite
flipX = true;
case 'senpai':
// Color Set
healthColorArray = [255,170,111];
frames = Paths.getSparrowAtlas('characters/senpai');
quickAnimAdd('idle', 'Senpai Idle');
// at framerate 16.8 animation plays over 2 beats at 144bpm,
@ -400,6 +489,9 @@ class Character extends FlxSprite
antialiasing = false;
case 'senpai-angry':
// Color Set
healthColorArray = [255,170,111];
frames = Paths.getSparrowAtlas('characters/senpai');
quickAnimAdd('idle', 'Angry Senpai Idle');
quickAnimAdd('singUP', 'Angry Senpai UP NOTE');
@ -417,6 +509,9 @@ class Character extends FlxSprite
antialiasing = false;
case 'spirit':
// Color Set
healthColorArray = [255,60,110];
frames = Paths.getPackerAtlas('characters/spirit');
quickAnimAdd('idle', "idle spirit_");
quickAnimAdd('singUP', "up_");
@ -434,6 +529,9 @@ class Character extends FlxSprite
antialiasing = false;
case 'parents-christmas':
// Color Set
healthColorArray = [196,94,174];
frames = Paths.getSparrowAtlas('characters/mom_dad_christmas_assets');
quickAnimAdd('idle', 'Parent Christmas Idle');
quickAnimAdd('singUP', 'Parent Up Note Dad');
@ -451,6 +549,9 @@ class Character extends FlxSprite
playAnim('idle');
case 'tankman':
// Color Set
healthColorArray = [225,225,225];
frames = Paths.getSparrowAtlas('characters/tankmanCaptain');
quickAnimAdd('idle', "Tankman Idle Dance");
@ -487,6 +588,24 @@ class Character extends FlxSprite
playAnim('idle');
flipX = true;
#if desktop
default:
var characterJson:String = Assets.getText(Paths.character(curCharacter+".json"));
var characterParseJson:CharacterFile = haxe.Json.parse(characterJson);
frames = Paths.getSparrowAtlas(characterParseJson.texture);
for (i in characterParseJson.animations){
if (i.type == "prefix"){
animation.addByPrefix(i.name, i.anim, i.framerate, i.loop, i.flipx, i.flipy);
}
if (i.type == "indices"){
animation.addByIndices(i.name, i.anim, i.indices, "", i.framerate, i.loop, i.flipx, i.flipy);
}
}
playAnim(characterParseJson.onInit);
if ((characterParseJson.antialiasing && PreferencesMenu.getPref('antialiasing')) || !characterParseJson.antialiasing)
antialiasing = characterParseJson.antialiasing;
#end
}
dance();

View File

@ -69,6 +69,7 @@ class ChartingState extends MusicBeatState
var _song:SwagSong;
var typingShit:FlxInputText;
var typingShitt:FlxInputText;
/*
* WILL BE THE CURRENT / LAST PLACED NOTE
**/
@ -114,6 +115,7 @@ class ChartingState extends MusicBeatState
{
_song = {
song: 'Test',
stage: 'stage',
notes: [],
bpm: 150,
needsVoices: true,
@ -224,7 +226,11 @@ class ChartingState extends MusicBeatState
stepperBPM.value = Conductor.bpm;
stepperBPM.name = 'song_bpm';
var characters:Array<String> = CoolUtil.coolTextFile(Paths.txt('characterList'));
var characters:Array<String> = Paths.txt("characterList").trim().split('\n');
var charactersRaw:Array<String> = Paths.filelist(openfl.utils.AssetType.CHARACTER);
for (i in charactersRaw) {
characters.push(i.replace(".json",""));
}
var player1DropDown = new FlxUIDropDownMenu(10, 100, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String)
{
@ -240,6 +246,9 @@ class ChartingState extends MusicBeatState
});
player2DropDown.selectedLabel = _song.player2;
var UI_songStage = new FlxUIInputText(10, 120, 70, _song.stage, 8);
typingShitt = UI_songStage;
var tab_group_song = new FlxUI(null, UI_box);
tab_group_song.name = "Song";
tab_group_song.add(UI_songTitle);
@ -254,6 +263,7 @@ class ChartingState extends MusicBeatState
tab_group_song.add(stepperSpeed);
tab_group_song.add(player1DropDown);
tab_group_song.add(player2DropDown);
tab_group_song.add(UI_songStage);
UI_box.addGroup(tab_group_song);
UI_box.scrollFactor.set();
@ -490,6 +500,7 @@ class ChartingState extends MusicBeatState
Conductor.songPosition = FlxG.sound.music.time;
_song.song = typingShit.text;
_song.stage = typingShitt.text;
strumLine.y = getYfromStrum((Conductor.songPosition - sectionStartTime()) % (Conductor.stepCrochet * _song.notes[curSection].lengthInSteps));
@ -593,7 +604,7 @@ class ChartingState extends MusicBeatState
}
}
if (!typingShit.hasFocus)
if (!typingShit.hasFocus || !typingShitt.hasFocus)
{
if (FlxG.keys.justPressed.SPACE)
{

View File

@ -59,6 +59,10 @@ import ui.PreferencesMenu;
import Discord;
#end
#if hxCodec
import hxcodec.VideoHandler;
#end
using StringTools;
class LuaHandler {
@ -162,6 +166,44 @@ class LuaHandler {
DiscordClient.changePresence(details, state, smallImageKey, hasStartTimestamp, endTimestamp);
#end
});
Lua_helper.add_callback(lua, "playCutscene", function (name:String, atEndOfSong:Bool = false) {
#if hxCodec
PlayState.instance.inCutscene = true;
FlxG.sound.music.stop();
var video:VideoHandler = new VideoHandler();
video.finishCallback = function()
{
PlayState.instance.inCutscene = false;
if (atEndOfSong)
{
if (PlayState.storyPlaylist.length <= 0)
FlxG.switchState(new StoryMenuState());
else
{
PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase());
FlxG.switchState(new PlayState());
}
}
else
FlxTween.tween(FlxG.camera, {zoom: PlayState.defaultCamZoom}, (Conductor.crochet / 1000) * 5, {ease: FlxEase.quadInOut});
PlayState.instance.startCountdown();
PlayState.instance.cameraMovement();
}
video.playVideo(Paths.video(name).replace("videos:",""));
#else
PlayState.instance.inCutscene = true;
var vid:FlxVideo = new FlxVideo(name);
vid.finishCallback = function()
{
FlxTween.tween(FlxG.camera, {zoom: PlayState.defaultCamZoom}, (Conductor.crochet / 1000) * 5, {ease: FlxEase.quadInOut});
PlayState.instance.startCountdown();
PlayState.instance.cameraMovement();
PlayState.instance.inCutscene = false;
};
#end
});
#end
}
@ -321,6 +363,19 @@ class DebugLuaText extends FlxText
}
}
class ModchartSprite extends FlxSprite
{
public var wasAdded:Bool = false;
public var animOffsets:Map<String, Array<Float>> = new Map<String, Array<Float>>();
//public var isInFront:Bool = false;
public function new(?x:Float = 0, ?y:Float = 0)
{
super(x, y);
antialiasing = PreferencesMenu.getPref('antialiasing');
}
}
#if hscript
class HScript
{

View File

@ -93,6 +93,7 @@ class Note extends FlxSprite
animation.add('bluehold', [1]);
}
antialiasing = false;
setGraphicSize(Std.int(width * PlayState.daPixelZoom));
updateHitbox();
@ -116,7 +117,7 @@ class Note extends FlxSprite
setGraphicSize(Std.int(width * 0.7));
updateHitbox();
antialiasing = true;
antialiasing = PreferencesMenu.getPref('antialiasing');
// colorSwap.colorToReplace = 0xFFF9393F;
// colorSwap.newColor = 0xFF00FF00;
@ -235,8 +236,10 @@ class Note extends FlxSprite
if (strumTime <= Conductor.songPosition)
wasGoodHit = true;
if (PreferencesMenu.getPref('middlescroll'))
alpha = 0;
if(PlayState.ismiddlescroll) {
alpha = 1 * 0.35;
}
}
if (tooLate)

View File

@ -32,7 +32,7 @@ class NoteSplash extends FlxSprite
alpha = 0.6;
animation.play('note' + noteData + '-' + FlxG.random.int(0, 1), true);
animation.curAnim.frameRate += FlxG.random.int(-2, 2);
if(animation.curAnim != null)animation.curAnim.frameRate = 24 + FlxG.random.int(-2, 2);
updateHitbox();
offset.set(width * 0.3, height * 0.3);
@ -40,7 +40,7 @@ class NoteSplash extends FlxSprite
override function update(elapsed:Float)
{
if (animation.curAnim.finished)
if (animation.curAnim != null && animation.curAnim.finished)
kill();
super.update(elapsed);

View File

@ -135,6 +135,16 @@ class Paths
return file('$key',"shaders");
}
inline static public function character(key:String)
{
return file('$key.json',"characters");
}
inline static public function stage(key:String)
{
return file('$key.json',"stages");
}
inline static public function filelist(type:AssetType = TEXT):Array<String>
{
return OpenFlAssets.list(type);

View File

@ -108,6 +108,7 @@ class PlayState extends MusicBeatState
private var gfSpeed:Int = 1;
private var health:Float = 1;
private var combo:Int = 0;
private var maxcombo:Int = 0;
private var healthBarBG:FlxSprite;
private var healthBar:FlxBar;
@ -154,17 +155,21 @@ class PlayState extends MusicBeatState
var songScore:Int = 0;
var scoreTxt:FlxText;
var scoreTxtTween:FlxTween;
var judgementCounter:FlxText;
var judgementCounterTween:FlxTween;
var msTimingTxt:FlxText = new FlxText(0, 0, 0, "0ms");
var msTimingTxtTween:FlxTween;
var grpNoteSplashes:FlxTypedGroup<NoteSplash>;
public static var campaignScore:Int = 0;
var defaultCamZoom:Float = 1.05;
public static var defaultCamZoom:Float = 1.05;
// how big to stretch the pixel art assets
public static var daPixelZoom:Float = 6;
var inCutscene:Bool = false;
public var inCutscene:Bool = false;
#if discord_rpc
// Discord RPC variables
@ -185,9 +190,9 @@ class PlayState extends MusicBeatState
var shits:Int = 0;
var misses:Int = 0;
//settings
public static var isdownscroll:Bool = PreferencesMenu.getPref('downscroll');
public static var ismiddlescroll:Bool = PreferencesMenu.getPref('middlescroll');
//GamePlay Settings
public static var isdownscroll:Bool = false;
public static var ismiddlescroll:Bool = false;
//lua shit
//public var boyfriendMap:Map<String, Boyfriend> = new Map();
@ -205,21 +210,13 @@ class PlayState extends MusicBeatState
override public function create()
{
//GamePlay Settings
isdownscroll = PreferencesMenu.getPref('downscroll');
ismiddlescroll = PreferencesMenu.getPref('middlescroll');
// for lua
instance = this;
//lua shit
#if linc_luajit
var luaFileList:Array<String> = Paths.filelist(openfl.utils.AssetType.SCRIPT);
for (lua in luaFileList)
{
if(lua.endsWith('.lua'))
{
luaArray.push(new LuaHandler(Paths.file(lua,openfl.utils.AssetType.SCRIPT,"default")));
}
}
#end
if (FlxG.sound.music != null)
FlxG.sound.music.stop();
@ -291,7 +288,7 @@ class PlayState extends MusicBeatState
halloweenBG.animation.addByPrefix('idle', 'halloweem bg0');
halloweenBG.animation.addByPrefix('lightning', 'halloweem bg lightning strike', 24, false);
halloweenBG.animation.play('idle');
halloweenBG.antialiasing = true;
halloweenBG.antialiasing = PreferencesMenu.getPref('antialiasing');
add(halloweenBG);
isHalloween = true;
@ -320,7 +317,7 @@ class PlayState extends MusicBeatState
light.visible = false;
light.setGraphicSize(Std.int(light.width * 0.85));
light.updateHitbox();
light.antialiasing = true;
light.antialiasing = PreferencesMenu.getPref('antialiasing');
light.shader = lightFadeShader.shader;
phillyCityLights.add(light);
}
@ -374,7 +371,7 @@ class PlayState extends MusicBeatState
limo.frames = Paths.getSparrowAtlas('limo/limoDrive');
limo.animation.addByPrefix('drive', "Limo stage", 24);
limo.animation.play('drive');
limo.antialiasing = true;
limo.antialiasing = PreferencesMenu.getPref('antialiasing');
fastCar = new FlxSprite(-300, 160).loadGraphic(Paths.image('limo/fastCarLol'));
// add(limo);
@ -384,7 +381,7 @@ class PlayState extends MusicBeatState
defaultCamZoom = 0.80;
var bg:FlxSprite = new FlxSprite(-1000, -500).loadGraphic(Paths.image('christmas/bgWalls'));
bg.antialiasing = true;
bg.antialiasing = PreferencesMenu.getPref('antialiasing');
bg.scrollFactor.set(0.2, 0.2);
bg.active = false;
bg.setGraphicSize(Std.int(bg.width * 0.8));
@ -394,14 +391,14 @@ class PlayState extends MusicBeatState
upperBoppers = new FlxSprite(-240, -90);
upperBoppers.frames = Paths.getSparrowAtlas('christmas/upperBop');
upperBoppers.animation.addByPrefix('bop', "Upper Crowd Bob", 24, false);
upperBoppers.antialiasing = true;
upperBoppers.antialiasing = PreferencesMenu.getPref('antialiasing');
upperBoppers.scrollFactor.set(0.33, 0.33);
upperBoppers.setGraphicSize(Std.int(upperBoppers.width * 0.85));
upperBoppers.updateHitbox();
add(upperBoppers);
var bgEscalator:FlxSprite = new FlxSprite(-1100, -600).loadGraphic(Paths.image('christmas/bgEscalator'));
bgEscalator.antialiasing = true;
bgEscalator.antialiasing = PreferencesMenu.getPref('antialiasing');
bgEscalator.scrollFactor.set(0.3, 0.3);
bgEscalator.active = false;
bgEscalator.setGraphicSize(Std.int(bgEscalator.width * 0.9));
@ -409,14 +406,14 @@ class PlayState extends MusicBeatState
add(bgEscalator);
var tree:FlxSprite = new FlxSprite(370, -250).loadGraphic(Paths.image('christmas/christmasTree'));
tree.antialiasing = true;
tree.antialiasing = PreferencesMenu.getPref('antialiasing');
tree.scrollFactor.set(0.40, 0.40);
add(tree);
bottomBoppers = new FlxSprite(-300, 140);
bottomBoppers.frames = Paths.getSparrowAtlas('christmas/bottomBop');
bottomBoppers.animation.addByPrefix('bop', 'Bottom Level Boppers', 24, false);
bottomBoppers.antialiasing = true;
bottomBoppers.antialiasing = PreferencesMenu.getPref('antialiasing');
bottomBoppers.scrollFactor.set(0.9, 0.9);
bottomBoppers.setGraphicSize(Std.int(bottomBoppers.width * 1));
bottomBoppers.updateHitbox();
@ -424,18 +421,18 @@ class PlayState extends MusicBeatState
var fgSnow:FlxSprite = new FlxSprite(-600, 700).loadGraphic(Paths.image('christmas/fgSnow'));
fgSnow.active = false;
fgSnow.antialiasing = true;
fgSnow.antialiasing = PreferencesMenu.getPref('antialiasing');
add(fgSnow);
santa = new FlxSprite(-840, 150);
santa.frames = Paths.getSparrowAtlas('christmas/santa');
santa.animation.addByPrefix('idle', 'santa idle in fear', 24, false);
santa.antialiasing = true;
santa.antialiasing = PreferencesMenu.getPref('antialiasing');
add(santa);
case 'winter-horrorland':
curStage = 'mallEvil';
var bg:FlxSprite = new FlxSprite(-400, -500).loadGraphic(Paths.image('christmas/evilBG'));
bg.antialiasing = true;
bg.antialiasing = PreferencesMenu.getPref('antialiasing');
bg.scrollFactor.set(0.2, 0.2);
bg.active = false;
bg.setGraphicSize(Std.int(bg.width * 0.8));
@ -443,12 +440,12 @@ class PlayState extends MusicBeatState
add(bg);
var evilTree:FlxSprite = new FlxSprite(300, -300).loadGraphic(Paths.image('christmas/evilTree'));
evilTree.antialiasing = true;
evilTree.antialiasing = PreferencesMenu.getPref('antialiasing');
evilTree.scrollFactor.set(0.2, 0.2);
add(evilTree);
var evilSnow:FlxSprite = new FlxSprite(-200, 700).loadGraphic(Paths.image("christmas/evilSnow"));
evilSnow.antialiasing = true;
evilSnow.antialiasing = PreferencesMenu.getPref('antialiasing');
add(evilSnow);
case 'senpai' | 'roses':
curStage = 'school';
@ -649,7 +646,7 @@ class PlayState extends MusicBeatState
var fgTank3:BGSprite = new BGSprite('tank3', 1300, 1200, 3.5, 2.5, ['fg']);
foregroundSprites.add(fgTank3);
default:
case "bopeepo" | "fresh" | "dadbattle" | "tutorial" | "test":
defaultCamZoom = 0.9;
curStage = 'stage';
@ -659,7 +656,7 @@ class PlayState extends MusicBeatState
var stageFront:FlxSprite = new FlxSprite(-650, 600).loadGraphic(Paths.image('stagefront'));
stageFront.setGraphicSize(Std.int(stageFront.width * 1.1));
stageFront.updateHitbox();
stageFront.antialiasing = true;
stageFront.antialiasing = PreferencesMenu.getPref('antialiasing');
stageFront.scrollFactor.set(0.9, 0.9);
stageFront.active = false;
add(stageFront);
@ -667,11 +664,14 @@ class PlayState extends MusicBeatState
var stageCurtains:FlxSprite = new FlxSprite(-500, -300).loadGraphic(Paths.image('stagecurtains'));
stageCurtains.setGraphicSize(Std.int(stageCurtains.width * 0.9));
stageCurtains.updateHitbox();
stageCurtains.antialiasing = true;
stageCurtains.antialiasing = PreferencesMenu.getPref('antialiasing');
stageCurtains.scrollFactor.set(1.3, 1.3);
stageCurtains.active = false;
add(stageCurtains);
default:
defaultCamZoom = 0.9;
curStage = SONG.stage;
}
var gfVersion:String = 'gf';
@ -890,9 +890,9 @@ class PlayState extends MusicBeatState
healthBar = new FlxBar(healthBarBG.x + 4, healthBarBG.y + 4, RIGHT_TO_LEFT, Std.int(healthBarBG.width - 8), Std.int(healthBarBG.height - 8), this,
'health', 0, 2);
healthBar.scrollFactor.set();
healthBar.createFilledBar(0xFFFF0000, 0xFF66FF33);
// healthBar
add(healthBar);
reloadHealthBarColors();
scoreTxt = new FlxText(0, healthBarBG.y + 36, FlxG.width, "", 20);
scoreTxt.setFormat(Paths.font("vcr.ttf"), 20, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
@ -900,6 +900,18 @@ class PlayState extends MusicBeatState
scoreTxt.borderSize = 1.25;
add(scoreTxt);
if (PreferencesMenu.getPref('judgementCounter'))
{
judgementCounter = new FlxText(20, 0, 0, "", 20);
judgementCounter.setFormat(Paths.font("vcr.ttf"), 20, FlxColor.WHITE, FlxTextAlign.LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
judgementCounter.borderSize = 2;
judgementCounter.borderQuality = 2;
judgementCounter.scrollFactor.set();
judgementCounter.screenCenter(Y);
judgementCounter.text = 'Sicks: ${sicks}\nGoods: ${goods}\nBads: ${bads}\nShits: ${shits}\nCombo: ${combo} / ${maxcombo}';
add(judgementCounter);
}
iconP1 = new HealthIcon(SONG.player1, true);
iconP1.y = healthBar.y - (iconP1.height / 2);
add(iconP1);
@ -916,6 +928,7 @@ class PlayState extends MusicBeatState
iconP1.cameras = [camHUD];
iconP2.cameras = [camHUD];
scoreTxt.cameras = [camHUD];
judgementCounter.cameras = [camHUD];
doof.cameras = [camHUD];
// if (SONG.song == 'South')
@ -924,6 +937,18 @@ class PlayState extends MusicBeatState
// cameras = [FlxG.cameras.list[1]];
//lua shit
#if linc_luajit
var luaFileList:Array<String> = Paths.filelist(openfl.utils.AssetType.SCRIPT);
for (lua in luaFileList)
{
if(lua.endsWith('.lua'))
{
luaArray.push(new LuaHandler(Paths.script(lua).replace("scripts:","")));
}
}
#end
startingSong = true;
if (isStoryMode && !seenCutscene)
@ -1018,7 +1043,7 @@ class PlayState extends MusicBeatState
startCountdown();
cameraMovement();
}
video.playVideo(Paths.video(name));
video.playVideo(Paths.video(name).replace("videos:",""));
#else
inCutscene = true;
var vid:FlxVideo = new FlxVideo(name);
@ -1058,7 +1083,7 @@ class PlayState extends MusicBeatState
tankCutscene.animation.addByPrefix('wellWell', 'TANK TALK 1 P1', 24, false);
tankCutscene.animation.addByPrefix('killYou', 'TANK TALK 1 P2', 24, false);
tankCutscene.animation.play('wellWell');
tankCutscene.antialiasing = true;
tankCutscene.antialiasing = PreferencesMenu.getPref('antialiasing');
gfCutsceneLayer.add(tankCutscene);
camHUD.visible = false;
@ -1139,7 +1164,7 @@ class PlayState extends MusicBeatState
tankCutscene.frames = Paths.getSparrowAtlas('cutsceneStuff/tankTalkSong2');
tankCutscene.animation.addByPrefix('tankyguy', 'TANK TALK 2', 24, false);
tankCutscene.animation.play('tankyguy');
tankCutscene.antialiasing = true;
tankCutscene.antialiasing = PreferencesMenu.getPref('antialiasing');
gfCutsceneLayer.add(tankCutscene); // add();
tankCutscene.startSyncAudio = FlxG.sound.load(Paths.sound('tankSong2'));
@ -1218,7 +1243,7 @@ class PlayState extends MusicBeatState
gfTankmen.frames = Paths.getSparrowAtlas('characters/gfTankmen');
gfTankmen.animation.addByPrefix('loop', 'GF Dancing at Gunpoint', 24, true);
gfTankmen.animation.play('loop');
gfTankmen.antialiasing = true;
gfTankmen.antialiasing = PreferencesMenu.getPref('antialiasing');
gfCutsceneLayer.add(gfTankmen);
var tankCutscene:TankCutscene = new TankCutscene(-70, 320);
@ -1227,13 +1252,13 @@ class PlayState extends MusicBeatState
// tankCutscene.animation.addByPrefix('weed', 'sexAmbig', 24, false);
tankCutscene.animation.play('tankyguy');
tankCutscene.antialiasing = true;
tankCutscene.antialiasing = PreferencesMenu.getPref('antialiasing');
bfTankCutsceneLayer.add(tankCutscene); // add();
var alsoTankCutscene:FlxSprite = new FlxSprite(20, 320);
alsoTankCutscene.frames = Paths.getSparrowAtlas('cutsceneStuff/tankTalkSong3-pt2');
alsoTankCutscene.animation.addByPrefix('swagTank', 'TANK TALK 3 P2 UNCUT', 24, false);
alsoTankCutscene.antialiasing = true;
alsoTankCutscene.antialiasing = PreferencesMenu.getPref('antialiasing');
bfTankCutsceneLayer.add(alsoTankCutscene);
@ -1265,7 +1290,7 @@ class PlayState extends MusicBeatState
var bfCatchGf:FlxSprite = new FlxSprite(boyfriend.x - 10, boyfriend.y - 90);
bfCatchGf.frames = Paths.getSparrowAtlas('cutsceneStuff/bfCatchesGF');
bfCatchGf.animation.addByPrefix('catch', 'BF catches GF', 24, false);
bfCatchGf.antialiasing = true;
bfCatchGf.antialiasing = PreferencesMenu.getPref('antialiasing');
add(bfCatchGf);
bfCatchGf.visible = false;
@ -1541,13 +1566,13 @@ class PlayState extends MusicBeatState
var startTimer:FlxTimer = new FlxTimer();
var perfectMode:Bool = false;
function startCountdown():Void
public function startCountdown():Void
{
inCutscene = false;
camHUD.visible = true;
generateStaticArrows(0,4);
generateStaticArrows(1,4);
generateStaticArrows(1);
generateStaticArrows(0);
talking = false;
startedCountdown = true;
@ -1563,12 +1588,12 @@ class PlayState extends MusicBeatState
gf.dance();
if (swagCounter % 2 == 0)
{
if (!boyfriend.animation.curAnim.name.startsWith("sing"))
if (getAnimName(boyfriend).startsWith("sing"))
boyfriend.playAnim('idle');
if (!dad.animation.curAnim.name.startsWith("sing"))
if (getAnimName(dad).startsWith("sing"))
dad.dance();
}
else if (dad.curCharacter == 'spooky' && !dad.animation.curAnim.name.startsWith("sing"))
else if (dad.curCharacter == 'spooky' && getAnimName(dad).startsWith("sing"))
dad.dance();
if (generatedMusic)
notes.sort(sortNotes, FlxSort.DESCENDING);
@ -1715,13 +1740,34 @@ class PlayState extends MusicBeatState
sustainNote.mustPress = gottaHitNote;
if (sustainNote.mustPress)
{
sustainNote.x += FlxG.width / 2; // general offset
}
else if(ismiddlescroll)
{
sustainNote.x += 310;
if(daNoteData > 1) //Up and Right
{
sustainNote.x += FlxG.width / 2 + 25;
}
}
}
swagNote.mustPress = gottaHitNote;
if (swagNote.mustPress)
{
swagNote.x += FlxG.width / 2; // general offset
}
else if(ismiddlescroll)
{
swagNote.x += 310;
if(daNoteData > 1) //Up and Right
{
swagNote.x += FlxG.width / 2 + 25;
}
}
}
}
@ -1747,12 +1793,16 @@ class PlayState extends MusicBeatState
// ^ These two sorts also look cute together ^
private function generateStaticArrows(player:Int, keyCount:Int = 4):Void
private function generateStaticArrows(player:Int):Void
{
for (i in 0...keyCount)
for (i in 0...4)
{
// FlxG.log.add(i);
var babyArrow:StrumNote = new StrumNote(0, strumLine.y, i, player, keyCount);
var targetAlpha:Float = 1;
if (player == 0)
if(ismiddlescroll) targetAlpha = 0.35;
var babyArrow:StrumNote = new StrumNote(0, strumLine.y, i, player);
var colorswap:ColorSwap = new ColorSwap();
babyArrow.shader = colorswap.shader;
colorswap.update(Note.arrowColors[i]);
@ -1764,7 +1814,7 @@ class PlayState extends MusicBeatState
babyArrow.y -= 10;
// babyArrow.alpha = 0;
FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: 1}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)});
FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: targetAlpha}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)});
if (player == 0)
opponentStrums.add(babyArrow);
@ -1775,9 +1825,20 @@ class PlayState extends MusicBeatState
babyArrow.x += 110;
babyArrow.x += ((FlxG.width / 2) * player);
if (PreferencesMenu.getPref('middlescroll'))
if(ismiddlescroll)
babyArrow.x -= 320;
if (player == 0)
{
if(ismiddlescroll)
{
babyArrow.x += 310;
if(i > 1) { //Up and Right
babyArrow.x += FlxG.width / 2 + 25;
}
}
}
strumLineNotes.add(babyArrow);
}
}
@ -1878,6 +1939,9 @@ class PlayState extends MusicBeatState
perfectMode = false;
#end
if (practiceMode)
SONG.validScore = false;
// do this BEFORE super.update() so songPosition is accurate
if (startingSong)
{
@ -2150,7 +2214,7 @@ class PlayState extends MusicBeatState
if (daNote.isSustainNote)
{
if (daNote.animation.curAnim.name.endsWith("end") && daNote.prevNote != null)
if (getAnimName(daNote).endsWith("end") && daNote.prevNote != null)
daNote.y += daNote.prevNote.height;
else
daNote.y += daNote.height / 2;
@ -2239,7 +2303,7 @@ class PlayState extends MusicBeatState
if (combo != 0)
{
combo = 0;
displayCombo();
displayCombo(false);
}
}
@ -2376,23 +2440,20 @@ class PlayState extends MusicBeatState
var isSick:Bool = true;
if (msTimingTxtTween != null)
msTimingTxtTween.cancel();
if (noteDiff > Conductor.safeZoneOffset * 0.9)
{
daRating = 'shit';
score = 50;
isSick = false; // shitty copypaste on this literally just because im lazy and tired lol!
}
else if (noteDiff > Conductor.safeZoneOffset * 0.75)
{
daRating = 'bad';
score = 100;
isSick = false;
}
else if (noteDiff > Conductor.safeZoneOffset * 0.2)
{
daRating = 'good';
score = 200;
isSick = false;
}
if (isSick)
@ -2406,17 +2467,37 @@ class PlayState extends MusicBeatState
switch (daRating){
case "sick":
sicks++;
msTimingTxt.color = FlxColor.CYAN;
case "good":
goods++;
score = 200;
isSick = false;
msTimingTxt.color = FlxColor.GREEN;
case "bad":
bads++;
score = 100;
isSick = false;
msTimingTxt.color = FlxColor.ORANGE;
case "shit":
shits++;
score = 50;
isSick = false; // shitty copypaste on this literally just because im lazy and tired lol!
msTimingTxt.color = FlxColor.RED;
}
reloadHUD(true);
msTimingTxt.borderStyle = OUTLINE;
msTimingTxt.borderSize = 1;
msTimingTxt.borderColor = FlxColor.BLACK;
msTimingTxt.text = Std.string(Math.round(Conductor.songPosition - strumtime)) + "ms";
msTimingTxt.size = 20;
if (msTimingTxt.alpha != 1)
msTimingTxt.alpha = 1;
// Only add the score if you're not on practice mode
if (!practiceMode)
songScore += score;
songScore += score;
// ludum dare rating system
/* if (combo > 60)
@ -2454,7 +2535,7 @@ class PlayState extends MusicBeatState
else
{
rating.setGraphicSize(Std.int(rating.width * 0.7));
rating.antialiasing = true;
rating.antialiasing = PreferencesMenu.getPref('antialiasing');
}
rating.updateHitbox();
@ -2465,10 +2546,11 @@ class PlayState extends MusicBeatState
},
startDelay: Conductor.crochet * 0.001
});
displayCombo();
displayCombo(true,rating);
}
function displayCombo():Void
function displayCombo(flag:Bool = false, rating:FlxSprite = null):Void
{
var pixelShitPart1:String = "";
var pixelShitPart2:String = '';
@ -2504,7 +2586,7 @@ class PlayState extends MusicBeatState
else
{
comboSpr.setGraphicSize(Std.int(comboSpr.width * 0.7));
comboSpr.antialiasing = true;
comboSpr.antialiasing = PreferencesMenu.getPref('antialiasing');
}
comboSpr.updateHitbox();
@ -2541,7 +2623,7 @@ class PlayState extends MusicBeatState
}
else
{
numScore.antialiasing = true;
numScore.antialiasing = PreferencesMenu.getPref('antialiasing');
numScore.setGraphicSize(Std.int(numScore.width * 0.5));
}
numScore.updateHitbox();
@ -2553,7 +2635,7 @@ class PlayState extends MusicBeatState
add(numScore);
FlxTween.tween(numScore, {alpha: 0}, 0.2, {
FlxTween.tween(numScore, {alpha: 1}, 0.2, {
onComplete: function(tween:FlxTween)
{
numScore.destroy();
@ -2563,11 +2645,29 @@ class PlayState extends MusicBeatState
daLoop++;
}
if (flag){
add(msTimingTxt);
msTimingTxt.screenCenter();
msTimingTxt.x = comboSpr.x + 100;
msTimingTxt.y = rating.y + 100;
msTimingTxt.acceleration.y = 600;
msTimingTxt.velocity.y -= 150;
msTimingTxt.velocity.x += comboSpr.velocity.x;
msTimingTxtTween = FlxTween.tween(msTimingTxt, {alpha: 0}, 1, {
onComplete: function(twn:FlxTween) {
msTimingTxtTween = null;
}
});
}
}
var cameraRightSide:Bool = false;
function cameraMovement()
public function cameraMovement()
{
if (camFollow.x != dad.getMidpoint().x + 150 && !cameraRightSide)
{
@ -2712,7 +2812,7 @@ class PlayState extends MusicBeatState
if (boyfriend.holdTimer > Conductor.stepCrochet * 4 * 0.001 && !holdArray.contains(true))
{
if (boyfriend.animation.curAnim.name.startsWith('sing') && !boyfriend.animation.curAnim.name.endsWith('miss'))
if (getAnimName(boyfriend).startsWith('sing') && getAnimName(boyfriend).endsWith('miss'))
{
boyfriend.playAnim('idle');
}
@ -2720,7 +2820,7 @@ class PlayState extends MusicBeatState
playerStrums.forEach(function(spr:StrumNote)
{
if (pressArray[spr.noteData] && spr.animation.curAnim.name != 'confirm')
if (pressArray[spr.noteData] && getAnimName(spr) != 'confirm')
spr.animation.play('pressed');
if (!holdArray[spr.noteData])
spr.animation.play('static');
@ -2736,7 +2836,7 @@ class PlayState extends MusicBeatState
});
}
function getAnimName(spr:FlxSprite):String
public function getAnimName(spr:FlxSprite):String
{
if (spr == null)
return "";
@ -2805,7 +2905,7 @@ class PlayState extends MusicBeatState
function opponentNoteHit(note:Note):Void
{
var time:Float = 0.15;
if(note.isSustainNote && !note.animation.curAnim.name.endsWith('end')) {
if(note.isSustainNote && getAnimName(note).endsWith('end')) {
time += 0.15;
}
@ -2869,6 +2969,8 @@ class PlayState extends MusicBeatState
if (!note.isSustainNote)
{
combo += 1;
if (combo > maxcombo)
maxcombo = combo;
popUpScore(note.strumTime, note);
}
@ -3085,14 +3187,14 @@ class PlayState extends MusicBeatState
if (curBeat % 2 == 0)
{
if (!boyfriend.animation.curAnim.name.startsWith("sing"))
if (getAnimName(boyfriend).startsWith("sing"))
boyfriend.playAnim('idle');
if (!dad.animation.curAnim.name.startsWith("sing"))
if (getAnimName(dad).startsWith("sing"))
dad.dance();
}
else if (dad.curCharacter == 'spooky')
{
if (!dad.animation.curAnim.name.startsWith("sing"))
if (getAnimName(dad).startsWith("sing"))
dad.dance();
}
@ -3172,6 +3274,7 @@ class PlayState extends MusicBeatState
function reloadHUD(hop:Bool = false){
scoreTxt.text = "Score: " + songScore + " | Misses: " + misses;
judgementCounter.text = 'Sicks: ${sicks}\nGoods: ${goods}\nBads: ${bads}\nShits: ${shits}\nCombo: ${combo} / ${maxcombo}';
if (hop){
if(scoreTxtTween != null) {
scoreTxtTween.cancel();
@ -3183,7 +3286,26 @@ class PlayState extends MusicBeatState
scoreTxtTween = null;
}
});
if(judgementCounterTween != null) {
judgementCounterTween.cancel();
}
judgementCounter.scale.x = 1.075;
judgementCounter.scale.y = 1.075;
judgementCounterTween = FlxTween.tween(judgementCounter.scale, {x: 1, y: 1}, 0.2, {
onComplete: function(twn:FlxTween) {
judgementCounterTween = null;
}
});
}
callOnLuas('onUpdateScore', [sicks,goods,bads,shits,misses]);
}
function reloadHealthBarColors(){
healthBar.createFilledBar(FlxColor.fromRGB(dad.healthColorArray[0], dad.healthColorArray[1], dad.healthColorArray[2]),
FlxColor.fromRGB(boyfriend.healthColorArray[0], boyfriend.healthColorArray[1], boyfriend.healthColorArray[2]));
healthBar.updateBar();
}
function onWindowFocusOut():Void

View File

@ -14,4 +14,5 @@ class Preference {
public static var vcombospr = PreferencesMenu.getPref('vcombospr');
public static var shaders = PreferencesMenu.getPref('shaders');
public static var antialiasing = PreferencesMenu.getPref('antialiasing');
public static var judgementCounter = PreferencesMenu.getPref('judgementCounter');
}

View File

@ -10,6 +10,7 @@ using StringTools;
typedef SwagSong =
{
var song:String;
var stage:Null<String>;
var notes:Array<SwagSection>;
var bpm:Float;
var needsVoices:Bool;
@ -23,6 +24,7 @@ typedef SwagSong =
class Song
{
public var song:String;
public var stage:Null<String>;
public var notes:Array<SwagSection>;
public var bpm:Float;
public var needsVoices:Bool = true;

View File

@ -17,7 +17,6 @@ class StrumNote extends FlxSprite
public var direction:Float = 90;//plan on doing scroll directions soon -bb
public var downScroll:Bool = false;//plan on doing scroll directions soon -bb
public var sustainReduce:Bool = true;
public var keyCount:Int = 4;
private var player:Int;
@ -30,14 +29,13 @@ class StrumNote extends FlxSprite
return value;
}
public function new(x:Float, y:Float, leData:Int, player:Int, keyCount:Int = 4) {
public function new(x:Float, y:Float, leData:Int, player:Int) {
x += Note.swagWidth * leData;
colorSwap = new ColorSwap();
shader = colorSwap.shader;
noteData = leData;
this.player = player;
this.noteData = leData;
this.keyCount = keyCount;
super(x, y);
var skin:String = 'NOTE_assets';

View File

@ -52,7 +52,6 @@ import polymod.Polymod;
class TitleState extends MusicBeatState
{
public static var initialized:Bool = false;
var startedIntro:Bool;
var blackScreen:FlxSprite;
var credGroup:FlxGroup;
@ -126,8 +125,6 @@ class TitleState extends MusicBeatState
return;
}
startedIntro = false;
FlxG.game.focusLostFramerate = 60;
swagShader = new ColorSwap();
@ -207,10 +204,15 @@ class TitleState extends MusicBeatState
// netConnection.addEventListener(MouseEvent.MOUSE_DOWN, overlay_onMouseDown);
#else
new FlxTimer().start(1, function(tmr:FlxTimer)
{
if (initialized)
startIntro();
});
else
{
new FlxTimer().start(1, function(tmr:FlxTimer)
{
startIntro();
});
}
#end
#if discord_rpc
@ -278,11 +280,9 @@ class TitleState extends MusicBeatState
FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 0.7, new FlxPoint(0, 1),
{asset: diamond, width: 32, height: 32}, new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
}
if (FlxG.sound.music == null || !FlxG.sound.music.playing)
{
if(FlxG.sound.music == null) {
FlxG.sound.playMusic(Paths.music('freakyMenu'), 0);
FlxG.sound.music.fadeIn(4, 0, 0.7);
}
Conductor.changeBPM(102);
@ -379,7 +379,6 @@ class TitleState extends MusicBeatState
FlxG.sound.music.onComplete = function() FlxG.switchState(new VideoState());
*/
startedIntro = true;
// credGroup.add(credTextShit);
}
@ -450,8 +449,6 @@ class TitleState extends MusicBeatState
if (pressedEnter && !transitioning && skippedIntro)
{
if (FlxG.sound.music != null)
FlxG.sound.music.onComplete = null;
// netStream.play(Paths.file('music/kickstarterTrailer.mp4'));
//NGio.unlockMedal(60960);
@ -498,11 +495,13 @@ class TitleState extends MusicBeatState
new FlxTimer().start(1, function(tmr:FlxTimer)
{
FlxG.switchState(new MainMenuState());
closedState = true;
});
#else
new FlxTimer().start(1, function(tmr:FlxTimer)
{
FlxG.switchState(new MainMenuState());
closedState = true;
});
#end
// FlxG.sound.play(Paths.music('titleShoot'), 0.7);
@ -565,88 +564,85 @@ class TitleState extends MusicBeatState
}
}
private var sickBeats:Int = 0; //Basically curBeat but won't be skipped if you hold the tab or resize the screen
public static var closedState:Bool = false;
var isRainbow:Bool = false;
override function beatHit()
{
super.beatHit();
if (!startedIntro)
return ;
if (skippedIntro)
{
if(logoBl != null)
logoBl.animation.play('bump', true);
if(gfDance != null) {
danceLeft = !danceLeft;
if (danceLeft)
gfDance.animation.play('danceRight');
else
gfDance.animation.play('danceLeft');
}
else
if (!closedState)
{
FlxG.log.add(curBeat);
FlxG.log.add(sickBeats);
// if the user is draggin the window some beats will
// be missed so this is just to compensate
if (curBeat > lastBeat)
sickBeats++;
switch (sickBeats)
{
for (i in lastBeat...curBeat)
{
switch (i + 1)
{
case 1:
createCoolText(['ninjamuffin99', 'phantomArcade', 'kawaisprite', 'evilsk8er']);
// credTextShit.visible = true;
case 3:
addMoreText('present');
// credTextShit.text += '\npresent...';
// credTextShit.addText();
case 4:
deleteCoolText();
// credTextShit.visible = false;
// credTextShit.text = 'In association \nwith';
// credTextShit.screenCenter();
case 5:
createCoolText(['In association', 'with']);
case 7:
addMoreText('newgrounds');
ngSpr.visible = true;
// credTextShit.text += '\nNewgrounds';
case 8:
deleteCoolText();
ngSpr.visible = false;
// credTextShit.visible = false;
case 1:
FlxG.sound.playMusic(Paths.music('freakyMenu'), 0);
FlxG.sound.music.fadeIn(4, 0, 0.7);
case 2:
createCoolText(['ninjamuffin99', 'phantomArcade', 'kawaisprite', 'evilsk8er']);
// credTextShit.visible = true;
case 4:
addMoreText('present');
// credTextShit.text += '\npresent...';
// credTextShit.addText();
case 5:
deleteCoolText();
// credTextShit.visible = false;
// credTextShit.text = 'In association \nwith';
// credTextShit.screenCenter();
case 6:
createCoolText(['In association', 'with']);
case 8:
addMoreText('newgrounds');
ngSpr.visible = true;
// credTextShit.text += '\nNewgrounds';
case 9:
deleteCoolText();
ngSpr.visible = false;
// credTextShit.visible = false;
// credTextShit.text = 'Shoutouts Tom Fulp';
// credTextShit.screenCenter();
case 9:
createCoolText([curWacky[0]]);
// credTextShit.visible = true;
case 11:
addMoreText(curWacky[1]);
// credTextShit.text += '\nlmao';
case 12:
deleteCoolText();
// credTextShit.visible = false;
// credTextShit.text = "Friday";
// credTextShit.screenCenter();
case 13:
addMoreText('Friday');
// credTextShit.visible = true;
case 14:
addMoreText('Night');
// credTextShit.text += '\nNight';
case 15:
addMoreText('Funkin'); // credTextShit.text += '\nFunkin';
// credTextShit.text = 'Shoutouts Tom Fulp';
// credTextShit.screenCenter();
case 10:
createCoolText([curWacky[0]]);
// credTextShit.visible = true;
case 12:
addMoreText(curWacky[1]);
// credTextShit.text += '\nlmao';
case 13:
deleteCoolText();
// credTextShit.visible = false;
// credTextShit.text = "Friday";
// credTextShit.screenCenter();
case 14:
addMoreText('Friday');
// credTextShit.visible = true;
case 15:
addMoreText('Night');
// credTextShit.text += '\nNight';
case 16:
addMoreText('Funkin'); // credTextShit.text += '\nFunkin';
case 16:
skipIntro();
}
}
case 17:
skipIntro();
}
lastBeat = curBeat;
lastBeat = sickBeats;
}
}

View File

@ -9,14 +9,16 @@ package openfl.utils;
public var DATA = "DATA";
public var FONT = "FONT";
public var SHARED = "SHARED";
public var SONG = "SONGS";
public var SONG = "SONG";
public var MUSIC = "MUSIC";
public var SOUND = "SOUNDS";
public var SCRIPT = "SCRIPTS";
public var SHADER = "SHADERS";
public var WEEK = "WEEKS";
public var IMAGE = "IMAGES";
public var VIDEO = "VIDEOS";
public var SOUND = "SOUND";
public var SCRIPT = "SCRIPT";
public var SHADER = "SHADER";
public var WEEK = "WEEK";
public var IMAGE = "IMAGE";
public var VIDEO = "VIDEO";
public var STAGE = "STAGE";
public var CHARACTER = "CHARACTERS";
public var MOVIE_CLIP = "MOVIE_CLIP";
public var TEXT = "TEXT";
}

View File

@ -125,7 +125,7 @@ class OptionsState extends MusicBeatState
File.saveContent(ModMenu.MOD_PATH + "/modList.txt", rawEnabledMods.trim());
ModMenu.enabledMods = rawEnabledMods.trim().split('\n');
FlxG.sound.play(Paths.sound('cancelMenu'));
FlxG.switchState(new OptionsState());
switchPage(Options);
}
}

View File

@ -41,6 +41,7 @@ class PreferencesMenu extends ui.OptionsState.Page
createPrefItem('Visible Combo Sprite', 'vcombospr', false);
createPrefItem('Shaders', 'shaders', true);
createPrefItem('Antialiasing', 'antialiasing', true);
createPrefItem('JudgementCounter', 'judgementCounter', true);
camFollow = new FlxObject(FlxG.width / 2, 0, 140, 70);
if (items != null)
@ -82,6 +83,7 @@ class PreferencesMenu extends ui.OptionsState.Page
preferenceCheck('vcombospr', false);
preferenceCheck('shaders', true);
preferenceCheck('antialiasing', true);
preferenceCheck('judgementCounter', true);
#if muted
setPref('master-volume', 0);