diff --git a/Project.xml b/Project.xml index 21ed84198..878edf8c1 100644 --- a/Project.xml +++ b/Project.xml @@ -58,6 +58,7 @@ + diff --git a/source/BlendModeEffect.hx b/source/BlendModeEffect.hx new file mode 100644 index 000000000..1c9038be7 --- /dev/null +++ b/source/BlendModeEffect.hx @@ -0,0 +1,34 @@ +package; + +import flixel.util.FlxColor; +import openfl.display.ShaderParameter; + +typedef BlendModeShader = +{ + var uBlendColor:ShaderParameter; +} + +class BlendModeEffect +{ + public var shader(default, null):BlendModeShader; + + @:isVar + public var color(default, set):FlxColor; + + public function new(shader:BlendModeShader, color:FlxColor):Void + { + shader.uBlendColor.value = []; + this.shader = shader; + this.color = color; + } + + function set_color(color:FlxColor):FlxColor + { + shader.uBlendColor.value[0] = color.redFloat; + shader.uBlendColor.value[1] = color.greenFloat; + shader.uBlendColor.value[2] = color.blueFloat; + shader.uBlendColor.value[3] = color.alphaFloat; + + return this.color = color; + } +} diff --git a/source/ChartingState.hx b/source/ChartingState.hx index 157ed2c11..3f8f8c190 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -241,9 +241,9 @@ class ChartingState extends MusicBeatState stepperSectionBPM.value = Conductor.bpm; stepperSectionBPM.name = 'section_bpm'; - var stepperCopy:FlxUINumericStepper = new FlxUINumericStepper(110, 30, 1, 1, -999, 999, 0); + var stepperCopy:FlxUINumericStepper = new FlxUINumericStepper(110, 130, 1, 1, -999, 999, 0); - var copyButton:FlxButton = new FlxButton(110, 8, "Copy last section", function() + var copyButton:FlxButton = new FlxButton(10, 130, "Copy last section", function() { copySection(Std.int(stepperCopy.value)); }); diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index ede087ed8..699dc1a53 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -12,7 +12,7 @@ import lime.utils.Assets; class FreeplayState extends MusicBeatState { - var songs:Array = ["Milf", "Bopeebo", "Dadbattle", "Fresh", "Tutorial"]; + var songs:Array = ["High", "Milf", "Bopeebo", "Dadbattle", "Fresh", "Tutorial"]; var selector:FlxText; var curSelected:Int = 0; diff --git a/source/OverlayShader.hx b/source/OverlayShader.hx new file mode 100644 index 000000000..4de9a555e --- /dev/null +++ b/source/OverlayShader.hx @@ -0,0 +1,33 @@ +package; + +import flixel.system.FlxAssets.FlxShader; + +class OverlayShader extends FlxShader +{ + @:glFragmentSource(' + #pragma header + uniform vec4 uBlendColor; + + vec3 blendLighten(base:Vec3, blend:Vec3) : Vec3 { + return mix( + 1.0 - 2.0 * (1.0 - base) * (1.0 - blend), + 2.0 * base * blend, + step( base, vec3(0.5) ) + ); + } + + vec4 blendLighten(vec4 base, vec4 blend, float opacity) + { + return (blendLighten(base, blend) * opacity + base * (1.0 - opacity)); + } + + void main() + { + vec4 base = texture2D(bitmap, openfl_TextureCoordv); + gl_FragColor = blendLighten(base, uBlendColor, uBlendColor.a); + }') + public function new() + { + super(); + } +} diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index 1c7297043..ac747dbca 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -46,7 +46,7 @@ class PauseSubState extends MusicBeatSubstate changeSelection(); - cameras = [FlxG.cameras.list[1]]; + cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]]; } override function update(elapsed:Float) diff --git a/source/PlayState.hx b/source/PlayState.hx index d4a6307df..42ccb54db 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -29,6 +29,8 @@ import flixel.util.FlxStringUtil; import flixel.util.FlxTimer; import haxe.Json; import lime.utils.Assets; +import openfl.display.BlendMode; +import openfl.filters.ShaderFilter; using StringTools; @@ -87,12 +89,16 @@ class PlayState extends MusicBeatState var phillyTrain:FlxSprite; var trainSound:FlxSound; + var limo:FlxSprite; + var talking:Bool = true; var songScore:Int = 0; var scoreTxt:FlxText; public static var campaignScore:Int = 0; + var defaultCamZoom:Float = 1.05; + override public function create() { // var gameCam:FlxCamera = FlxG.camera; @@ -192,6 +198,41 @@ class PlayState extends MusicBeatState var street:FlxSprite = new FlxSprite(-40, streetBehind.y).loadGraphic(AssetPaths.street__png); add(street); } + else if (SONG.song.toLowerCase() == 'milf' || SONG.song.toLowerCase() == 'satin-panties' || SONG.song.toLowerCase() == 'high') + { + curStage = 'limo'; + defaultCamZoom = 0.90; + + var skyBG:FlxSprite = new FlxSprite(-120, -50).loadGraphic(AssetPaths.limoSunset__png); + skyBG.scrollFactor.set(0.1, 0.1); + add(skyBG); + + var bgLimo:FlxSprite = new FlxSprite(-200, 400); + bgLimo.frames = FlxAtlasFrames.fromSparrow(AssetPaths.bgLimo__png, AssetPaths.bgLimo__xml); + bgLimo.animation.addByPrefix('drive', "BG limo", 24); + bgLimo.animation.play('drive'); + bgLimo.scrollFactor.set(0.4, 0.4); + add(bgLimo); + + var overlayShit:FlxSprite = new FlxSprite(-500, -600).loadGraphic(AssetPaths.limoOverlay__png); + overlayShit.alpha = 0.5; + // add(overlayShit); + + // var shaderBullshit = new BlendModeEffect(new OverlayShader(), FlxColor.RED); + + // FlxG.camera.setFilters([new ShaderFilter(cast shaderBullshit.shader)]); + + // overlayShit.shader = shaderBullshit; + + var limoTex = FlxAtlasFrames.fromSparrow(AssetPaths.limoDrive__png, AssetPaths.limoDrive__xml); + + limo = new FlxSprite(-120, 550); + limo.frames = limoTex; + limo.animation.addByPrefix('drive', "Limo stage", 24); + limo.animation.play('drive'); + limo.antialiasing = true; + // add(limo); + } else { curStage = 'stage'; @@ -226,6 +267,10 @@ class PlayState extends MusicBeatState gf.antialiasing = true; add(gf); + // Shitty layering but whatev it works LOL + if (curStage == 'limo') + add(limo); + dad = new Character(100, 100, SONG.player2); add(dad); @@ -256,6 +301,16 @@ class PlayState extends MusicBeatState boyfriend = new Boyfriend(770, 450); add(boyfriend); + // REPOSITIONING PER STAGE + switch (curStage) + { + case 'limo': + { + boyfriend.y -= 220; + boyfriend.x += 260; + } + } + var doof:DialogueBox = new DialogueBox(false, dialogue); // doof.x += 70; doof.y = FlxG.height * 0.5; @@ -287,7 +342,7 @@ class PlayState extends MusicBeatState FlxG.camera.follow(camFollow, LOCKON, 0.04); // FlxG.camera.setScrollBounds(0, FlxG.width, 0, FlxG.height); - FlxG.camera.zoom = 1.05; + FlxG.camera.zoom = defaultCamZoom; FlxG.worldBounds.set(0, 0, FlxG.width, FlxG.height); @@ -790,6 +845,11 @@ class PlayState extends MusicBeatState { camFollow.setPosition(boyfriend.getMidpoint().x - 100, boyfriend.getMidpoint().y - 100); + if (curStage == 'limo') + { + camFollow.x = boyfriend.getMidpoint().x - 300; + } + if (SONG.song.toLowerCase() == 'tutorial') { FlxTween.tween(FlxG.camera, {zoom: 1}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut}); @@ -799,7 +859,7 @@ class PlayState extends MusicBeatState if (camZooming) { - FlxG.camera.zoom = FlxMath.lerp(1.05, FlxG.camera.zoom, 0.95); + FlxG.camera.zoom = FlxMath.lerp(defaultCamZoom, FlxG.camera.zoom, 0.95); camHUD.zoom = FlxMath.lerp(1, camHUD.zoom, 0.95); } @@ -1003,6 +1063,7 @@ class PlayState extends MusicBeatState } else { + trace('WENT BACK TO FREEPLAY??'); FlxG.switchState(new FreeplayState()); } } diff --git a/source/TitleState.hx b/source/TitleState.hx index aaf5cb053..a91ed235f 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -74,7 +74,9 @@ class TitleState extends MusicBeatState StoryMenuState.weekUnlocked[0] = true; } - #if SKIP_TO_PLAYSTATE + #if FREEPLAY + FlxG.switchState(new FreeplayState()); + #elseif CHARTING FlxG.switchState(new ChartingState()); #else startIntro();