Merge branch 'master' of https://github.com/KadeDev/Kade-Engine
This commit is contained in:
commit
4b8527dd83
22
ISSUES-WITH-ISSUES.md
Normal file
22
ISSUES-WITH-ISSUES.md
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Addressing Various Topics Related to Issues &/Or Discussions
|
||||||
|
|
||||||
|
Read this before making an issue. It pretty much just tells you what and what not to complain about.
|
||||||
|
## Issues
|
||||||
|
|
||||||
|
### What should go in an issue?
|
||||||
|
An issue should adhere to one of the two templates, Bug Report or Enhancement. (You can also create from blank but meh)
|
||||||
|
|
||||||
|
An issue should NOT be related to any problems in forks or mods of Kade Engine.
|
||||||
|
|
||||||
|
What the individual issue templates are for is self-explanatory, but please ACTUALLY use them. Don't just leave them blank and put all or partial info in the title.
|
||||||
|
|
||||||
|
|
||||||
|
## Discussions
|
||||||
|
|
||||||
|
### What should go in a discussion?
|
||||||
|
Discussions should be related to mods or forks of Kade Engine, as well as topics related to building the game from source.
|
||||||
|
|
||||||
|
> issues are for suggestions/bugs with kade engine itself, not with forks/mods of it.
|
||||||
|
|
||||||
|
|
||||||
|
This whole thing was made by Prokube's head and a comment by daniel11420.
|
13
Modding.md
13
Modding.md
@ -1,13 +0,0 @@
|
|||||||
# RIGHT NOW THE MODS FOLDER DOES NOT WORK ENTIRELY JUST YET!!!
|
|
||||||
## THIS IS WORK IN PROGRESS!!!
|
|
||||||
|
|
||||||
# QUICK AND DIRTY MOD GUIDE
|
|
||||||
|
|
||||||
With the 0.2.6 update, I added a bit of a slightly nicer mod support backend.
|
|
||||||
|
|
||||||
It's POLYMOD, which is made by Lars Doucet: https://github.com/larsiusprime/polymod
|
|
||||||
|
|
||||||
You may have noticed that there's a new folder in the assets. MODS. Within it you will see 2 files. modList.txt, and a folder called introMod.
|
|
||||||
modList.txt will load any folder into the game. Put the folder you want to load into a new line in modList.txt, and reboot the game.
|
|
||||||
|
|
||||||
Now you may be wondering, what do I put in the folder? Well later down it'll get a bit more complicated, especially as I'll make the IN-GAME mod loader nicer.
|
|
@ -94,7 +94,7 @@
|
|||||||
<assets path='art/readme.txt' rename='do NOT readme.txt' />
|
<assets path='art/readme.txt' rename='do NOT readme.txt' />
|
||||||
<!-- <template path='mods' /> -->
|
<!-- <template path='mods' /> -->
|
||||||
|
|
||||||
<assets path="CHANGELOG.md" rename='changelog.txt'/>
|
<!-- <assets path="CHANGELOG.md" rename='changelog.txt'/> -->
|
||||||
|
|
||||||
<!-- NOTE FOR FUTURE SELF SINCE FONTS ARE ALWAYS FUCKY
|
<!-- NOTE FOR FUTURE SELF SINCE FONTS ARE ALWAYS FUCKY
|
||||||
TO FIX ONE OF THEM, I CONVERTED IT TO OTF. DUNNO IF YOU NEED TO
|
TO FIX ONE OF THEM, I CONVERTED IT TO OTF. DUNNO IF YOU NEED TO
|
||||||
|
11
README.md
11
README.md
@ -14,11 +14,14 @@ Links: **[itch.io page](https://ninja-muffin24.itch.io/funkin) ⋅ [Newgrounds](
|
|||||||
## Kade Engine
|
## Kade Engine
|
||||||
**Kade Engine** is a mod for Friday Night Funkin', including a full engine rework, replays, and more.
|
**Kade Engine** is a mod for Friday Night Funkin', including a full engine rework, replays, and more.
|
||||||
|
|
||||||
Links: **[GameBanana mod page](https://gamebanana.com/gamefiles/16761) ⋅ [play in browser](https://funkin.puyo.xyz) ⋅ [latest stable release](https://github.com/KadeDev/Kade-Engine/releases/latest) ⋅ [latest development build (windows)](https://ci.appveyor.com/project/KadeDev/kade-engine-windows/build/artifacts) ⋅ [latest development build (macOS)](https://ci.appveyor.com/project/KadeDev/kade-engine-macos/build/artifacts)** ⋅ **[latest development build (linux)](https://ci.appveyor.com/project/KadeDev/kade-engine-linux/build/artifacts)**
|
Links: **[GameBanana mod page](https://gamebanana.com/gamefiles/16761) ⋅ [play in browser](https://funkin.puyo.xyz) ⋅ [latest stable release](https://github.com/KadeDev/Kade-Engine/releases/latest) ⋅ [latest development build (windows)](https://ci.appveyor.com/project/KadeDev/kade-engine-windows/build/artifacts) ⋅ [latest development build (macOS)](https://ci.appveyor.com/project/KadeDev/kade-engine-macos/build/artifacts) ⋅ [latest development build (linux)](https://ci.appveyor.com/project/KadeDev/kade-engine-linux/build/artifacts)**
|
||||||
|
|
||||||
**REMEMBER**: This is a **mod**. This is not the vanilla game and should be treated as a **modification**. This is not and probably will never be official, so don't get confused.
|
**REMEMBER**: This is a **mod**. This is not the vanilla game and should be treated as a **modification**. This is not and probably will never be official, so don't get confused.
|
||||||
|
|
||||||
# Screenshots ([skip](#features))
|
## Website ([KadeDev.github.io/kade-engine/](https://KadeDev.github.io/Kade-Engine/))
|
||||||
|
If you're looking for documentation, changelogs, or guides, you can find those on the Kade Engine website.
|
||||||
|
|
||||||
|
# Previews ([skip](#features))
|
||||||
|
|
||||||
 
|
 
|
||||||
|
|
||||||
@ -56,7 +59,3 @@ This game was made with love to Newgrounds and its community. Extra love to Tom
|
|||||||
### Kade Engine
|
### Kade Engine
|
||||||
- [KadeDeveloper](https://twitter.com/KadeDeveloper) - Maintainer and lead programmer
|
- [KadeDeveloper](https://twitter.com/KadeDeveloper) - Maintainer and lead programmer
|
||||||
- [The contributors](https://github.com/KadeDev/Kade-Engine/graphs/contributors)
|
- [The contributors](https://github.com/KadeDev/Kade-Engine/graphs/contributors)
|
||||||
|
|
||||||
# Other pages
|
|
||||||
- [BUILDING.md](https://github.com/KadeDev/Kade-Engine/blob/master/BUILDING.md) - How to compile/build the game
|
|
||||||
- [ModCharts.md](https://github.com/KadeDev/Kade-Engine/blob/master/ModCharts.md) - Mod Chart Documentation
|
|
||||||
|
1
assets/preload/data/dad battle/dad battle-easy.json
Normal file
1
assets/preload/data/dad battle/dad battle-easy.json
Normal file
File diff suppressed because one or more lines are too long
1
assets/preload/data/dad battle/dad battle-hard.json
Normal file
1
assets/preload/data/dad battle/dad battle-hard.json
Normal file
File diff suppressed because one or more lines are too long
1
assets/preload/data/dad battle/dad battle.json
Normal file
1
assets/preload/data/dad battle/dad battle.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,19 +1,19 @@
|
|||||||
Tutorial:gf:1
|
Tutorial:gf:1
|
||||||
Bopeebo:dad:1
|
Bopeebo:dad:1
|
||||||
Fresh:dad:1
|
Fresh:dad:1
|
||||||
Dadbattle:dad:1
|
Dad Battle:dad:1
|
||||||
Spookeez:spooky:2
|
Spookeez:spooky:2
|
||||||
South:spooky:2
|
South:spooky:2
|
||||||
Monster:monster:2
|
Monster:monster:2
|
||||||
Pico:pico:3
|
Pico:pico:3
|
||||||
Philly:pico:3
|
Philly Nice:pico:3
|
||||||
Blammed:pico:3
|
Blammed:pico:3
|
||||||
Satin-Panties:mom:4
|
Satin Panties:mom:4
|
||||||
High:mom:4
|
High:mom:4
|
||||||
Milf:mom:4
|
Milf:mom:4
|
||||||
Cocoa:parents-christmas:5
|
Cocoa:parents-christmas:5
|
||||||
Eggnog:parents-christmas:5
|
Eggnog:parents-christmas:5
|
||||||
Winter-Horrorland:monster-christmas:5
|
Winter Horrorland:monster-christmas:5
|
||||||
Senpai:senpai:6
|
Senpai:senpai:6
|
||||||
Roses:senpai:6
|
Roses:senpai:6
|
||||||
Thorns:spirit:6
|
Thorns:spirit:6
|
@ -1,17 +0,0 @@
|
|||||||
function start (song)
|
|
||||||
print("Song: " .. song .. " @ " .. bpm .. " donwscroll: " .. downscroll)
|
|
||||||
end
|
|
||||||
|
|
||||||
function update (elapsed) -- modified example https://twitter.com/KadeDeveloper/status/1382178179184422918
|
|
||||||
print(fuckyou[1])
|
|
||||||
end
|
|
||||||
|
|
||||||
function beatHit (beat)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function stepHit (step)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
print("Mod Chart script loaded :)")
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
assets/preload/images/KadeEngineLogo.png
Normal file
BIN
assets/preload/images/KadeEngineLogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 102 KiB |
Binary file not shown.
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 130 KiB |
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
|||||||
funkin.me
|
|
7
docs/_config.yml
Normal file
7
docs/_config.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
theme: jekyll-theme-minimal
|
||||||
|
title: "Kade Engine"
|
||||||
|
description: "Kade Engine is a mod for Friday Night Funkin', including a full engine rework, replays, and more."
|
||||||
|
show_downloads: true
|
||||||
|
replace_index_with: "https://cors-thing.puyo.workers.dev/master/"
|
||||||
|
logo: "https://github.com/KadeDev/Kade-Engine/raw/master/KadeEngineLogo.png"
|
||||||
|
url: "https://KadeDev.github.io/Kade-Engine/"
|
34
docs/_includes/header.html
Normal file
34
docs/_includes/header.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<style>
|
||||||
|
.headerlink {
|
||||||
|
background-color: #555;
|
||||||
|
color: white;
|
||||||
|
float: none;
|
||||||
|
border: none;
|
||||||
|
border-style: none;
|
||||||
|
outline: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 14px 16px;
|
||||||
|
font-size: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.headerlink:hover {
|
||||||
|
background-color: #777;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
height: 2px !important;
|
||||||
|
color: #555 !important;
|
||||||
|
background-color: #555 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<center>
|
||||||
|
<p id="HtmlIsTheWorstThingIHaveEverUsed">
|
||||||
|
<a class="headerlink" href="{{site.url}}changelogs/">Changelogs</a>
|
||||||
|
<a class="headerlink" href="{{site.url}}building">Building</a>
|
||||||
|
<a class="headerlink" href="{{site.url}}modchart">Modcharts</a>
|
||||||
|
<a class="headerlink" href="{{site.url}}guides">Guides</a>
|
||||||
|
<br>
|
||||||
|
<hr>
|
||||||
|
</p>
|
||||||
|
</center>
|
93
docs/_layouts/default.html
Normal file
93
docs/_layouts/default.html
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ site.lang | default: "en-US" }}">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>{{page.title}} - Kade Engine</title>
|
||||||
|
|
||||||
|
{% seo %}
|
||||||
|
<link rel="stylesheet" href="{{ "/assets/css/style.css?v=" | append: site.github.build_revision | relative_url }}">
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="wrapper">
|
||||||
|
<header>
|
||||||
|
<h1><a href="{{ site.url }}">{{ site.title | default: site.github.repository_name }}</a></h1>
|
||||||
|
|
||||||
|
{% if site.logo %}
|
||||||
|
<img src="{{site.logo | relative_url}}" alt="Logo" />
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<p>{{ site.description | default: site.github.project_tagline }}</p>
|
||||||
|
|
||||||
|
{% if site.github.is_project_page %}
|
||||||
|
<p class="view"><a href="{{ site.github.repository_url }}">View the Project on GitHub <small>{{ site.github.repository_nwo }}</small></a></p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if site.github.is_user_page %}
|
||||||
|
<p class="view"><a href="{{ site.github.owner_url }}">View My GitHub Profile</a></p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if site.show_downloads %}
|
||||||
|
<p>
|
||||||
|
<small>Source code</small>
|
||||||
|
<ul class="downloads">
|
||||||
|
<li><a href="{{ site.github.zip_url }}">Download <strong>ZIP File</strong></a></li>
|
||||||
|
<li><a href="{{ site.github.tar_url }}">Download <strong>TAR Ball</strong></a></li>
|
||||||
|
<li><a href="{{ site.github.repository_url }}">View On <strong>GitHub</strong></a></li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<small>Binaries</small><br>
|
||||||
|
<a href="https://github.com/KadeDev/Kade-Engine/releases/latest">Download the <b>Latest release</b></a><br>
|
||||||
|
<a href="https://ci.appveyor.com/project/KadeDev/kade-engine-windows/build/artifacts">Download a <b>Windows</b> development build</a><br>
|
||||||
|
<a href="https://ci.appveyor.com/project/KadeDev/kade-engine-linux/build/artifacts">Download a <b>Linux</b> development build</a><br>
|
||||||
|
<a href="https://funkin.puyo.xyz/nightly/">Play in your <b>Web Browser</b></a>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</header>
|
||||||
|
<section id="content">
|
||||||
|
{% include header.html %}
|
||||||
|
{% if page.url == "/" %}
|
||||||
|
<!-- yay i'm NOT stupid -->
|
||||||
|
{% else %}
|
||||||
|
{{ content }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<footer>
|
||||||
|
{% if site.github.is_project_page %}
|
||||||
|
<p>This project is maintained by <a href="{{ site.github.owner_url }}">{{ site.github.owner_name }}</a></p>
|
||||||
|
{% endif %}
|
||||||
|
<p><small>Hosted on GitHub Pages — Theme by <a href="https://github.com/orderedlist">orderedlist</a></small></p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<script src="{{ "/assets/js/scale.fix.js" | relative_url }}"></script>
|
||||||
|
{% if page.url == "/" %}
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function httpGet(theUrl)
|
||||||
|
{
|
||||||
|
var xmlHttp = new XMLHttpRequest();
|
||||||
|
xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
|
||||||
|
xmlHttp.send( null );
|
||||||
|
return xmlHttp.responseText;
|
||||||
|
}
|
||||||
|
document.getElementById('content').innerHTML = document.getElementById('content').innerHTML + marked(httpGet("{{ site.replace_index_with }}"));
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
{% if site.google_analytics %}
|
||||||
|
<script>
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||||
|
ga('create', '{{ site.google_analytics }}', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,6 +1,6 @@
|
|||||||
# Building Friday Night Funkin': Kade Engine
|
# Building Friday Night Funkin': Kade Engine
|
||||||
|
|
||||||
**Please note** that these instructions are for compiling/building the game. If you just want to play Kade Engine, **play in your browser or download a build instead**: **[play in browser](https://funkin.puyo.xyz) ⋅ [latest stable release](https://github.com/KadeDev/Kade-Engine/releases/latest) ⋅ [latest development build (windows)](https://ci.appveyor.com/project/KadeDev/kade-engine-windows/build/artifacts) ⋅ [latest development build (linux)](https://ci.appveyor.com/project/daniel11420/kade-engine-linux/build/artifacts)**. If you want to build the game yourself, continue reading.
|
**Please note** that these instructions are for compiling/building the game. If you just want to play Kade Engine, **play in your browser or download a build instead**: **[play in browser](https://funkin.puyo.xyz) ⋅ [latest stable release](https://github.com/KadeDev/Kade-Engine/releases/latest) ⋅ [latest development build (windows)](https://ci.appveyor.com/project/KadeDev/kade-engine-windows/build/artifacts) ⋅ [latest development build (macOS)](https://ci.appveyor.com/project/daniel11420/kade-engine-macos/build/artifacts) ⋅ [latest development build (linux)](https://ci.appveyor.com/project/daniel11420/kade-engine-linux/build/artifacts)**. If you want to build the game yourself, continue reading.
|
||||||
|
|
||||||
**Also note**: you should be familiar with the commandline. If not, read this [quick guide by ninjamuffin](https://ninjamuffin99.newgrounds.com/news/post/1090480).
|
**Also note**: you should be familiar with the commandline. If not, read this [quick guide by ninjamuffin](https://ninjamuffin99.newgrounds.com/news/post/1090480).
|
||||||
|
|
||||||
@ -28,6 +28,7 @@
|
|||||||
- `haxelib git faxe https://github.com/uhrobots/faxe`
|
- `haxelib git faxe https://github.com/uhrobots/faxe`
|
||||||
- `haxelib git polymod https://github.com/larsiusprime/polymod.git`
|
- `haxelib git polymod https://github.com/larsiusprime/polymod.git`
|
||||||
- `haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc`
|
- `haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc`
|
||||||
|
|
||||||
### Windows-only dependencies (only for building *to* Windows. Building html5 on Windows does not require this)
|
### Windows-only dependencies (only for building *to* Windows. Building html5 on Windows does not require this)
|
||||||
If you are planning to build for Windows, you also need to install **Visual Studio 2019**. While installing it, *don't click on any of the options to install workloads*. Instead, go to the **individual components** tab and choose the following:
|
If you are planning to build for Windows, you also need to install **Visual Studio 2019**. While installing it, *don't click on any of the options to install workloads*. Instead, go to the **individual components** tab and choose the following:
|
||||||
- MSVC v142 - VS 2019 C++ x64/x86 build tools
|
- MSVC v142 - VS 2019 C++ x64/x86 build tools
|
||||||
@ -57,10 +58,11 @@ Since you already installed `git` in a previous step, we'll use it to clone the
|
|||||||
2. `git clone https://github.com/KadeDev/Kade-Engine.git`
|
2. `git clone https://github.com/KadeDev/Kade-Engine.git`
|
||||||
3. `cd` into the source code: `cd Kade-Engine`
|
3. `cd` into the source code: `cd Kade-Engine`
|
||||||
4. (optional) If you want to build a specific version of Kade Engine, you can use `git checkout` to switch to it (i.e. `git checkout 1.4-KE`) (remember that versions 1.4 and older cannot build to Linux or HTML5)
|
4. (optional) If you want to build a specific version of Kade Engine, you can use `git checkout` to switch to it (i.e. `git checkout 1.4-KE`) (remember that versions 1.4 and older cannot build to Linux or HTML5)
|
||||||
- You should **not** do this if you are planning to contribute, as you should always be developing on the latest version.
|
- You should **not** do this if you are planning to contribute, as you should always be developing on the latest version.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
Finally, we are ready to build.
|
Finally, we are ready to build.
|
||||||
|
|
||||||
- Run `lime build <target>`, replacing `<target>` with the platform you want to build to (`windows`, `linux`, `html5`) (i.e. `lime build windows`)
|
- Run `lime build <target>`, replacing `<target>` with the platform you want to build to (`windows`, `mac`, `linux`, `html5`) (i.e. `lime build windows`)
|
||||||
- The build will be in `Kade-Engine/export/<target>/bin`, with `<target>` being the target you built to in the previous step. (i.e. `Kade-Engine/export/windows/bin`)
|
- The build will be in `Kade-Engine/export/<target>/bin`, with `<target>` being the target you built to in the previous step. (i.e. `Kade-Engine/export/windows/bin`)
|
||||||
- Only the `bin` folder is necessary to run the game. The other ones in `export/<target>` are not.
|
- Only the `bin` folder is necessary to run the game. The other ones in `export/<target>` are not.
|
@ -1,5 +1,5 @@
|
|||||||
# Changelog
|
# Changelog for 1.4.2 and before
|
||||||
All notable changes will be documented in this file.
|
Changelogs from before the current changelog system existed.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
24
docs/changelogs/changelog-template.md
Normal file
24
docs/changelogs/changelog-template.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Latest changelog/Changelog for 1.0.0
|
||||||
|
|
||||||
|
Changes marked with 💖 will be listed in the short version of the changelog in `version.downloadMe`.
|
||||||
|
|
||||||
|
### Additions
|
||||||
|
- New thing without issue
|
||||||
|
- [#1](https://github.com/KadeDev/Kade-Engine/issues/1): New thing with issue
|
||||||
|
- [#1](https://github.com/KadeDev/Kade-Engine/issues/1) ([PR #1](https://github.com/KadeDev/Kade-Engine/pulls/1)): New thing with issue and pull request
|
||||||
|
- [PR #1](https://github.com/KadeDev/Kade-Engine/pulls/1): New thing with pull request but no issue
|
||||||
|
- 💖 [PR #1](https://github.com/KadeDev/Kade-Engine/pulls/1): New thing with pull request but no issue and it's going in the short changelog
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
- Use same templates as additions
|
||||||
|
- Changes also includes stuff getting removed (as that happens less often so include it with changes)
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
- Use same templates as additions
|
||||||
|
- This is for when bugs get fixed. This should, like, always have an issue link, most of the time (if it has one)
|
||||||
|
|
||||||
|
## Links
|
||||||
|
[GitHub Release](https://github.com/KadeDev/Kade-Engine/releases/tag/1.4.2) · [Last Windows CI build]() · [Last macOS CI build]() · [Last Linux CI build]()
|
||||||
|
|
||||||
|
// Only include links section after it is no longer "latest changelog"
|
||||||
|
// "Last x CI build" links should link to a specific build, the last one for the version
|
4
docs/changelogs/index.md
Normal file
4
docs/changelogs/index.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Changelogs
|
||||||
|
|
||||||
|
- [Latest](latest) (Contains changes that are not in a release yet)
|
||||||
|
- [1.4.2 and before](changelog-pre)
|
39
docs/changelogs/latest.md
Normal file
39
docs/changelogs/latest.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Latest changelog
|
||||||
|
|
||||||
|
Changes marked with 💖 will be listed in the short version of the changelog in `version.downloadMe`.
|
||||||
|
|
||||||
|
### Additions
|
||||||
|
- [PR #307](https://github.com/KadeDev/Kade-Engine/pulls/307): Fix freeplay lag, add freeplay background changes, and add icons updating in charting state
|
||||||
|
- Updated to Week 7 input with anti mash
|
||||||
|
- 💖 Added toggle for ghost tapping
|
||||||
|
- 💖 [PR #328](https://github.com/KadeDev/Kade-Engine/pulls/328) and [PR #331](https://github.com/KadeDev/Kade-Engine/pulls/331): Distractions toggle
|
||||||
|
- [PR #341](https://github.com/KadeDev/Kade-Engine/pull/341): Update heads in realtime in charting state
|
||||||
|
- 💖 [PR #362](https://github.com/KadeDev/Kade-Engine/pull/362): Officially support macOS (and add macOS requirements to docs)
|
||||||
|
- Set up macOS CI builds
|
||||||
|
- [PR #373](https://github.com/KadeDev/Kade-Engine/pull/373): Add tweens to modcharts
|
||||||
|
- [PR #367](https://github.com/KadeDev/Kade-Engine/pull/367): Add labels to charting state
|
||||||
|
- [PR #374](https://github.com/KadeDev/Kade-Engine/pull/374): Add more icon sizes
|
||||||
|
- 💖 [PR #385](https://github.com/KadeDev/Kade-Engine/pull/385): Autoplay
|
||||||
|
- (maybe 💖) [#353](https://github.com/KadeDev/Kade-Engine/issues/353) ([PR #400](https://github.com/KadeDev/Kade-Engine/pulls/400)): Clap assist for syncing charts
|
||||||
|
- [PR #413](https://github.com/KadeDev/Kade-Engine/pulls/413): Option to disable flashing lights in menus
|
||||||
|
- [PR #428](https://github.com/KadeDev/Kade-Engine/pulls/428): Move documentation to GitHub Pages + new changelog system
|
||||||
|
- [PR #431](https://github.com/KadeDev/Kade-Engine/pull/431): Add Max NPS counter
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
- Tutorial is now a modchart instead of being hardcoded
|
||||||
|
- [PR #332](https://github.com/KadeDev/Kade-Engine/pull/332): Move the beatbox in Fresh to the vocal track
|
||||||
|
- [PR #334](https://github.com/KadeDev/Kade-Engine/pull/334): Unhardcode GF Version, stages, and noteskins and make them loaded from chart
|
||||||
|
- [PR #291](https://github.com/KadeDev/Kade-Engine/pull/291): Make it so you can compile with 4.0.x
|
||||||
|
- 💖 [PR #440](https://github.com/KadeDev/Kade-Engine/pull/440): Change how replays work + store scroll speed and direction in replays
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
- [PR #289](https://github.com/KadeDev/Kade-Engine/pulls/289): Player 2 now plays idle animation properly when camera zooms in
|
||||||
|
- (maybe 💖) [PR #314](https://github.com/KadeDev/Kade-Engine/pulls/314): Fix note trails
|
||||||
|
- [PR #330](https://github.com/KadeDev/Kade-Engine/pull/330): Fix spelling errors in options
|
||||||
|
- [#329](https://github.com/KadeDev/Kade-Engine/issues/329) ([PR #341](https://github.com/KadeDev/Kade-Engine/pull/341)): Fix crash when changing characters in charting state on web
|
||||||
|
- [PR #341](https://github.com/KadeDev/Kade-Engine/pull/341): Fix html5 crash (when building), fix layering issues in charting state, fix charting state crashes in html5
|
||||||
|
- [PR #376](https://github.com/KadeDev/Kade-Engine/pull/376): Fix must hit sections
|
||||||
|
- [#368](https://github.com/KadeDev/Kade-Engine/issues/368) ([PR #392](https://github.com/KadeDev/Kade-Engine/pull/392)): Fix enemy idle animations not playing before first note
|
||||||
|
- [PR #399](https://github.com/KadeDev/Kade-Engine/pulls/399): Fix downscroll typo
|
||||||
|
- [PR #431](https://github.com/KadeDev/Kade-Engine/pull/431): Fix NPS counter
|
||||||
|
- [#404](https://github.com/KadeDev/Kade-Engine/issues/404) ([PR #446](https://github.com/KadeDev/Kade-Engine/pull/446)): Fix bug where Alt Animation in charting state doesn't stay checked after going to another section then back
|
10
docs/guides/index.md
Normal file
10
docs/guides/index.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Guides
|
||||||
|
[Creating A Custom Week](https://kadedev.github.io/Kade-Engine/guides/weeks)
|
||||||
|
|
||||||
|
### Contributing
|
||||||
|
If you'd like to write a guide, you can make a [pull request](https://github.com/KadeDev/Kade-Engine/pulls). Make sure you put the guide in `docs/guides/` and that it's written in Markdown.
|
||||||
|
|
||||||
|
Guides that need to be written:
|
||||||
|
- How to use the charting state/chart editor
|
||||||
|
- How to make custom dialogue (like Week 6)
|
||||||
|
- How to make custom characters
|
158
docs/guides/weeks.md
Normal file
158
docs/guides/weeks.md
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
# Creating A Custom Week
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
1. The ability to compile Kade Engine from the source code. All information related to building Kade Engine is listed [here.](https://kadedev.github.io/Kade-Engine/building)
|
||||||
|
2. A text editor. Some form of IDE that can support Haxe is recommended, such as Visual Studio Code.
|
||||||
|
|
||||||
|
---
|
||||||
|
### Step 1. Navigation
|
||||||
|
Navigate to your Kade Engine source code. In the `source` folder, look for `StoryMenuState.hx`. Open it in your text editor.
|
||||||
|
|
||||||
|
### Step 2. Songlist
|
||||||
|
|
||||||
|
Scroll down to Line 26, or Search (Windows/Linux: `Ctrl+F`, Mac: `Cmd+F`) for "weekData". You should find an Array that looks like this:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```haxe
|
||||||
|
var weekData:Array<Dynamic> = [
|
||||||
|
|
||||||
|
['Tutorial'],
|
||||||
|
|
||||||
|
['Bopeebo', 'Fresh', 'Dadbattle'],
|
||||||
|
|
||||||
|
['Spookeez', 'South', "Monster"],
|
||||||
|
|
||||||
|
['Pico', 'Philly', "Blammed"],
|
||||||
|
|
||||||
|
['Satin-Panties', "High", "Milf"],
|
||||||
|
|
||||||
|
['Cocoa', 'Eggnog', 'Winter-Horrorland'],
|
||||||
|
|
||||||
|
['Senpai', 'Roses', 'Thorns']
|
||||||
|
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Copy `['Senpai', 'Roses', 'Thorns']` into an empty line below it, and change the song names to the song names you want to use.
|
||||||
|
Don't forget to add a comma at the end of the previous Week, and you have your songlist for the week completed!
|
||||||
|
|
||||||
|
Example
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```haxe
|
||||||
|
var weekData:Array<Dynamic> = [
|
||||||
|
|
||||||
|
['Tutorial'],
|
||||||
|
|
||||||
|
['Bopeebo', 'Fresh', 'Dadbattle'],
|
||||||
|
|
||||||
|
['Spookeez', 'South', "Monster"],
|
||||||
|
|
||||||
|
['Pico', 'Philly', "Blammed"],
|
||||||
|
|
||||||
|
['Satin-Panties', "High", "Milf"],
|
||||||
|
|
||||||
|
['Cocoa', 'Eggnog', 'Winter-Horrorland'],
|
||||||
|
|
||||||
|
['Senpai', 'Roses', 'Thorns'],
|
||||||
|
|
||||||
|
['Ugh', 'Guns', 'Stress']
|
||||||
|
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Step 3. Week Characters
|
||||||
|
Directly below the songlist should be an Array titled `weekCharacters`. This array tells the game what characters to display in the top yellow bar when a certain week is selected.
|
||||||
|
It's not very useful unless you followed the Characters guide (will link to it once it's actually done). If you have, though, you can insert the name of your character into the first pair of quotes in a new "week". Example:
|
||||||
|
|
||||||
|
Example
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```haxe
|
||||||
|
var weekCharacters:Array<Dynamic> = [
|
||||||
|
|
||||||
|
['', 'bf', 'gf'],
|
||||||
|
|
||||||
|
['dad', 'bf', 'gf'],
|
||||||
|
|
||||||
|
['spooky', 'bf', 'gf'],
|
||||||
|
|
||||||
|
['pico', 'bf', 'gf'],
|
||||||
|
|
||||||
|
['mom', 'bf', 'gf'],
|
||||||
|
|
||||||
|
['parents-christmas', 'bf', 'gf'],
|
||||||
|
|
||||||
|
['senpai', 'bf', 'gf'],
|
||||||
|
|
||||||
|
['tankman', 'bf', 'gf']
|
||||||
|
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Step 4. Week Names
|
||||||
|
|
||||||
|
Underneath the song list, there should be another array called `weekNames`. Creating a new line in that array, just enter a string that represents what you want the week to be called.
|
||||||
|
|
||||||
|
Example
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
```haxe
|
||||||
|
var weekNames:Array<String> = [
|
||||||
|
|
||||||
|
"How to Funk",
|
||||||
|
|
||||||
|
"Daddy dearest",
|
||||||
|
|
||||||
|
"Spooky Month",
|
||||||
|
|
||||||
|
"PICO",
|
||||||
|
|
||||||
|
"Mommy Must Murder",
|
||||||
|
|
||||||
|
"Red Snow",
|
||||||
|
|
||||||
|
"Hating Simulator ft. Moawlings",
|
||||||
|
|
||||||
|
"Tankman"
|
||||||
|
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Now, compile the game, and if all goes correctly, the Story Mode menu shouldn't crash your game. If you make your way to the bottom of the list, there's your custom week! Except... its displaying as a HaxeFlixel Logo?
|
||||||
|
|
||||||
|
### Step 5. Graphics
|
||||||
|
|
||||||
|
Displaying a week icon for your custom week is as simple as dropping a .png into `assets/images/storymenu`. Rename the file to `week7.png`, `week8.png`, etc.
|
||||||
|
|
||||||
|
Example
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
NOTE: You will have to add a new item to `weekUnlocked`, so that the week is playable.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
### Conclusion
|
||||||
|
|
||||||
|
If you followed all of the steps correctly, you have successfully created a new week in the Story Mode.
|
Binary file not shown.
Before Width: | Height: | Size: 232 KiB |
@ -1,60 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
@brandybuizel
|
|
||||||
@ninja_muffin2.4
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--Let's get meta bois-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Friday Night Funkin'</title>
|
|
||||||
<meta name="description" content="A dope ass rhythm game">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<link href="styles.css" rel="stylesheet" type="text/css">
|
|
||||||
<!-- <link href="website/mm.ico" rel="icon" type="image/x-icon"> -->
|
|
||||||
<link rel="shortcut icon" type="image/png" href="../art/icon.png" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<!--Header-->
|
|
||||||
<header>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
|
|
||||||
<marquee width="1920" scrollamount="2" scrolldelay="10" truespeed="truespeed">Friday Night Funkin</marquee>
|
|
||||||
<!--Hot tortilla wrap-->
|
|
||||||
<div id="wrapper">
|
|
||||||
<h1>Friday Night Funkin' - Rhythm game extraordinaire</h1>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="coolervidwrapper">
|
|
||||||
<div class='videoWrapper'>
|
|
||||||
<iframe width="560" height="349" src="https://www.youtube.com/embed/HMNKUo3CCpU" frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
||||||
allowfullscreen></iframe>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="coolBox hovertext" id="twitter">
|
|
||||||
<p class="description">Friday Night Funkin' is a dope ass rhythm game.</p>
|
|
||||||
<p class='description'>It is made by <a href="https://twitter.com/ninja_muffin99">ninjamuffin99 (programmer)</a>, <a
|
|
||||||
href="https://twitter.com/PhantomArcade3K">PhantomArcade (animator)</a>, <a
|
|
||||||
href="https://twitter.com/evilsk8r">evilsk8r (artist)</a>,
|
|
||||||
and <a href="https://twitter.com/kawaisprite">Kawaisprite (musician)</a> originally for Ludum Dare 47.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="linktext hovertext" id="ng">
|
|
||||||
<a href="https://www.newgrounds.com/portal/view/770371">Play demo on Newgrounds</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class='linktext hovertext' id="itch">
|
|
||||||
<a href="https://ninja-muffin24.itch.io/funkin">Support the game on Itch.io</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
3
docs/index.md
Normal file
3
docs/index.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Readme
|
||||||
|
|
||||||
|
Index is automatically replaced with README by the layout. So, this file does nothing.
|
@ -1,16 +1,12 @@
|
|||||||
# Kade Engine Lua Mod Chart Documentation
|
# Lua Modcharts
|
||||||
|
|
||||||
In the 1.4.2 release of Kade Engine, we introduced Mod Charts. Mod Charts are a way of changing gameplay without hard coded values. This is achieved by using the Lua Scripting language to create script files that run during runtime.
|
In the 1.4.2 release of Kade Engine, we introduced Mod Charts. Mod Charts are a way of changing gameplay without hard coded values. This is achieved by using the Lua Scripting language to create script files that run during runtime.
|
||||||
|
|
||||||
All files **are located in** `assets/data/song/`
|
Song data is located in `assets/data/<song>/`, so the Lua file containing your scripts should be located at exactly `assets/data/<song>/modchart.lua`. (replace <song> with the name of the song. for example, `assets/data/milf/` for milf)
|
||||||
|
|
||||||
Modchart Lua File should be in `assets/data/song/modchart.lua` **exactly**
|
If the file doesn't exist, Lua code won't be ran.
|
||||||
|
|
||||||
Lua code will only be ran if that file exists.
|
## Examples
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Examples
|
|
||||||
|
|
||||||
Full Example
|
Full Example
|
||||||
|
|
||||||
@ -22,10 +18,10 @@ end
|
|||||||
|
|
||||||
function update (elapsed) -- example https://twitter.com/KadeDeveloper/status/1382178179184422918
|
function update (elapsed) -- example https://twitter.com/KadeDeveloper/status/1382178179184422918
|
||||||
local currentBeat = (songPos / 1000)*(bpm/60)
|
local currentBeat = (songPos / 1000)*(bpm/60)
|
||||||
for i=0,7 do
|
for i=0,7 do
|
||||||
setActorX(_G['defaultStrum'..i..'X'] + 32 * math.sin((currentBeat + i*0.25) * math.pi), i)
|
setActorX(_G['defaultStrum'..i..'X'] + 32 * math.sin((currentBeat + i*0.25) * math.pi), i)
|
||||||
setActorY(_G['defaultStrum'..i..'Y'] + 32 * math.cos((currentBeat + i*0.25) * math.pi), i)
|
setActorY(_G['defaultStrum'..i..'Y'] + 32 * math.cos((currentBeat + i*0.25) * math.pi), i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function beatHit (beat)
|
function beatHit (beat)
|
||||||
@ -43,9 +39,9 @@ Spinning Receptor Example
|
|||||||
|
|
||||||
```lua
|
```lua
|
||||||
function update (elapsed)
|
function update (elapsed)
|
||||||
for i=0,7 do
|
for i=0,7 do
|
||||||
setActorAngle(getActorAngle(i) + 15, i)
|
setActorAngle(getActorAngle(i) + 15, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -68,11 +64,11 @@ function update (elapsed)
|
|||||||
setActorY(_G['defaultStrum'..i..'Y'] + 32 * math.cos((currentBeat + i*0.25) * math.pi), i)
|
setActorY(_G['defaultStrum'..i..'Y'] + 32 * math.cos((currentBeat + i*0.25) * math.pi), i)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
for i=0,7 do
|
for i=0,7 do
|
||||||
setActorX(_G['defaultStrum'..i..'X'],i)
|
setActorX(_G['defaultStrum'..i..'X'],i)
|
||||||
setActorY(_G['defaultStrum'..i..'Y'],i)
|
setActorY(_G['defaultStrum'..i..'Y'],i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -90,23 +86,23 @@ end
|
|||||||
Looping through all of the rendered notes
|
Looping through all of the rendered notes
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
for i = 0, getRenderedNotes() do -- sets all of the rendered notes to 0 0 on the x and y axsis
|
for i = 0, getRenderedNotes() do -- sets all of the rendered notes to 0 0 on the x and y axsis
|
||||||
setRenderedNotePos(0,0,i)
|
setRenderedNotePos(0,0,i)
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
Centering BF's Side
|
Centering BF's Side
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
function setDefault(id)
|
function setDefault(id)
|
||||||
_G['defaultStrum'..id..'X'] = getActorX(id)
|
_G['defaultStrum'..id..'X'] = getActorX(id)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- put this somewhere in a function
|
-- put this somewhere in a function
|
||||||
|
|
||||||
for i = 4, 7 do -- go to the center
|
for i = 4, 7 do -- go to the center
|
||||||
tweenPosXAngle(i, _G['defaultStrum'..i..'X'] - 275,getActorAngle(i) + 360, 0.6, 'setDefault')
|
tweenPosXAngle(i, _G['defaultStrum'..i..'X'] - 275,getActorAngle(i) + 360, 0.6, 'setDefault')
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -116,10 +112,10 @@ Current calls to functions include,
|
|||||||
|
|
||||||
| Name | Arguments | Description |
|
| Name | Arguments | Description |
|
||||||
| :-----: | :------------: | :----------------------------------------------------------: |
|
| :-----: | :------------: | :----------------------------------------------------------: |
|
||||||
| start | Song Name | Get's called when the song starts |
|
| start | Song Name | Gets called when the song starts |
|
||||||
| update | Elapsed frames | Get's called every frame (after the song starts) |
|
| update | Elapsed frames | Gets called every frame (after the song starts) |
|
||||||
| stepHit | Current Step | Get's called when ever a step hits (steps are in between beats, aka 4 steps are in a beat) |
|
| stepHit | Current Step | Gets called when ever a step hits (steps are in between beats, aka 4 steps are in a beat) |
|
||||||
| beatHit | Current Beat | Get's called when ever a beat hits |
|
| beatHit | Current Beat | Gets called when ever a beat hits |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -175,13 +171,13 @@ These premade id's are the following:
|
|||||||
|
|
||||||
Creates a sprite out of the specified image, returns the id you gave it.
|
Creates a sprite out of the specified image, returns the id you gave it.
|
||||||
|
|
||||||
*Note: Sprite Path is normally the FILE NAME so if you have a file name of Image it'll go to assets/data/songName/Image.png so don't include the extension*
|
*Note: Sprite Path is normally the FILE NAME so if your file is named `Image` it'll go to assets/data/songName/Image.png so don't include the extension*
|
||||||
|
|
||||||
### Hud/Camera
|
### Hud/Camera
|
||||||
|
|
||||||
##### setHudPosition(int x, int y)
|
##### setHudPosition(int x, int y)
|
||||||
|
|
||||||
Set's the game hud's position in space.
|
Sets the game hud's position in space.
|
||||||
|
|
||||||
##### getHudX()
|
##### getHudX()
|
||||||
|
|
@ -1,97 +0,0 @@
|
|||||||
.coolBox {
|
|
||||||
background: #1a1a1aCC;
|
|
||||||
margin: 40px 4vw;
|
|
||||||
padding: 25px;
|
|
||||||
font-size: 120%;
|
|
||||||
border-radius: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wrapper
|
|
||||||
{
|
|
||||||
padding: 20px;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
marquee {
|
|
||||||
margin: auto;
|
|
||||||
text-align: center;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-image: url('img/skin-funkin-cardbordtoast.jpg');
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-attachment: fixed;
|
|
||||||
background-size: cover;
|
|
||||||
color:white;
|
|
||||||
background-color: #000;
|
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
a { color:inherit;
|
|
||||||
text-decoration: none;}
|
|
||||||
|
|
||||||
|
|
||||||
.hovertext a{
|
|
||||||
color:white;
|
|
||||||
text-shadow: 0px 0px #00000077;
|
|
||||||
transition: color 1s, text-shadow 1s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hovertext a:hover
|
|
||||||
{
|
|
||||||
text-shadow: 2px 2px #00000077;
|
|
||||||
color: #ffb50e;
|
|
||||||
}
|
|
||||||
|
|
||||||
.linktext {
|
|
||||||
text-align: center;
|
|
||||||
display:block;
|
|
||||||
font-size: 130%;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.linktext a {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.linktext a:hover {
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#itch a:hover
|
|
||||||
{
|
|
||||||
color: #fa5c5c;
|
|
||||||
}
|
|
||||||
#twitter a:hover
|
|
||||||
{
|
|
||||||
color: #00acee;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#coolervidwrapper {
|
|
||||||
padding-left: min(12em, 75%);
|
|
||||||
padding-right: min(12em, 75%);
|
|
||||||
min-width: 30%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.videoWrapper {
|
|
||||||
position: relative;
|
|
||||||
padding-bottom: 56.25%; /* 16:9 */
|
|
||||||
height: 0;
|
|
||||||
|
|
||||||
max-block-size: 1400px;
|
|
||||||
}
|
|
||||||
.videoWrapper iframe {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
}
|
|
@ -238,7 +238,7 @@ class AlphaCharacter extends FlxSprite
|
|||||||
|
|
||||||
public static var numbers:String = "1234567890";
|
public static var numbers:String = "1234567890";
|
||||||
|
|
||||||
public static var symbols:String = "|~#$%()*+-:;<=>@[]^_.,'!?";
|
public static var symbols:String = "|~#$%()*+-:;<=>@[]^_.,'!? ";
|
||||||
|
|
||||||
public var row:Int = 0;
|
public var row:Int = 0;
|
||||||
|
|
||||||
@ -302,6 +302,48 @@ class AlphaCharacter extends FlxSprite
|
|||||||
case "!":
|
case "!":
|
||||||
animation.addByPrefix(letter, 'exclamation point', 24);
|
animation.addByPrefix(letter, 'exclamation point', 24);
|
||||||
animation.play(letter);
|
animation.play(letter);
|
||||||
|
case '_':
|
||||||
|
animation.addByPrefix(letter, '_', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
y += 50;
|
||||||
|
case "#":
|
||||||
|
animation.addByPrefix(letter, '#', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case "$":
|
||||||
|
animation.addByPrefix(letter, '$', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case "%":
|
||||||
|
animation.addByPrefix(letter, '%', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case "&":
|
||||||
|
animation.addByPrefix(letter, '&', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case "(":
|
||||||
|
animation.addByPrefix(letter, '(', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case ")":
|
||||||
|
animation.addByPrefix(letter, ')', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case "+":
|
||||||
|
animation.addByPrefix(letter, '+', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case "-":
|
||||||
|
animation.addByPrefix(letter, '-', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case '"':
|
||||||
|
animation.addByPrefix(letter, '"', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
y -= 0;
|
||||||
|
case '@':
|
||||||
|
animation.addByPrefix(letter, '@', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
case "^":
|
||||||
|
animation.addByPrefix(letter, '^', 24);
|
||||||
|
animation.play(letter);
|
||||||
|
y -= 0;
|
||||||
|
case ' ':
|
||||||
|
animation.addByPrefix(letter, 'space', 24);
|
||||||
|
animation.play(letter);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateHitbox();
|
updateHitbox();
|
||||||
|
@ -55,7 +55,7 @@ class ChartingState extends MusicBeatState
|
|||||||
var bpmTxt:FlxText;
|
var bpmTxt:FlxText;
|
||||||
|
|
||||||
var strumLine:FlxSprite;
|
var strumLine:FlxSprite;
|
||||||
var curSong:String = 'Dadbattle';
|
var curSong:String = 'Dad Battle';
|
||||||
var amountSteps:Int = 0;
|
var amountSteps:Int = 0;
|
||||||
var bullshitUI:FlxGroup;
|
var bullshitUI:FlxGroup;
|
||||||
var writingNotesText:FlxText;
|
var writingNotesText:FlxText;
|
||||||
@ -515,7 +515,7 @@ class ChartingState extends MusicBeatState
|
|||||||
case 'Change BPM':
|
case 'Change BPM':
|
||||||
_song.notes[curSection].changeBPM = check.checked;
|
_song.notes[curSection].changeBPM = check.checked;
|
||||||
FlxG.log.add('changed bpm shit');
|
FlxG.log.add('changed bpm shit');
|
||||||
case "Alt Animation":
|
case "Alternate Animation":
|
||||||
_song.notes[curSection].altAnim = check.checked;
|
_song.notes[curSection].altAnim = check.checked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -670,8 +670,8 @@ class ChartingState extends MusicBeatState
|
|||||||
else FlxG.sound.play(Paths.sound('SNAP'));
|
else FlxG.sound.play(Paths.sound('SNAP'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/*curRenderedNotes.forEach(function(note:Note) {
|
/*curRenderedNotes.forEach(function(note:Note) {
|
||||||
if (strumLine.overlaps(note) && strumLine.y == note.y) // yandere dev type shit
|
if (strumLine.overlaps(note) && strumLine.y == note.y) // yandere dev type shit
|
||||||
@ -1390,4 +1390,4 @@ class ChartingState extends MusicBeatState
|
|||||||
_file = null;
|
_file = null;
|
||||||
FlxG.log.error("Problem saving Level data");
|
FlxG.log.error("Problem saving Level data");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,7 @@ class FreeplayState extends MusicBeatState
|
|||||||
public function addWeek(songs:Array<String>, weekNum:Int, ?songCharacters:Array<String>)
|
public function addWeek(songs:Array<String>, weekNum:Int, ?songCharacters:Array<String>)
|
||||||
{
|
{
|
||||||
if (songCharacters == null)
|
if (songCharacters == null)
|
||||||
songCharacters = ['bf'];
|
songCharacters = ['dad'];
|
||||||
|
|
||||||
var num:Int = 0;
|
var num:Int = 0;
|
||||||
for (song in songs)
|
for (song in songs)
|
||||||
|
@ -1,239 +1,254 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
import Controls.KeyboardScheme;
|
import Controls.KeyboardScheme;
|
||||||
import flixel.FlxG;
|
import flixel.FlxG;
|
||||||
import flixel.FlxObject;
|
import flixel.FlxObject;
|
||||||
import flixel.FlxSprite;
|
import flixel.FlxSprite;
|
||||||
import flixel.effects.FlxFlicker;
|
import flixel.effects.FlxFlicker;
|
||||||
import flixel.graphics.frames.FlxAtlasFrames;
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
import flixel.tweens.FlxEase;
|
import flixel.tweens.FlxEase;
|
||||||
import flixel.tweens.FlxTween;
|
import flixel.tweens.FlxTween;
|
||||||
import flixel.util.FlxColor;
|
import flixel.util.FlxColor;
|
||||||
import io.newgrounds.NG;
|
import flixel.util.FlxTimer;
|
||||||
import lime.app.Application;
|
import io.newgrounds.NG;
|
||||||
|
import lime.app.Application;
|
||||||
#if windows
|
|
||||||
import Discord.DiscordClient;
|
#if windows
|
||||||
#end
|
import Discord.DiscordClient;
|
||||||
|
#end
|
||||||
using StringTools;
|
|
||||||
|
using StringTools;
|
||||||
class MainMenuState extends MusicBeatState
|
|
||||||
{
|
class MainMenuState extends MusicBeatState
|
||||||
var curSelected:Int = 0;
|
{
|
||||||
|
var curSelected:Int = 0;
|
||||||
var menuItems:FlxTypedGroup<FlxSprite>;
|
|
||||||
|
var menuItems:FlxTypedGroup<FlxSprite>;
|
||||||
#if !switch
|
|
||||||
var optionShit:Array<String> = ['story mode', 'freeplay', 'donate', 'options'];
|
#if !switch
|
||||||
#else
|
var optionShit:Array<String> = ['story mode', 'freeplay', 'donate', 'options'];
|
||||||
var optionShit:Array<String> = ['story mode', 'freeplay'];
|
#else
|
||||||
#end
|
var optionShit:Array<String> = ['story mode', 'freeplay'];
|
||||||
|
#end
|
||||||
var newGaming:FlxText;
|
|
||||||
var newGaming2:FlxText;
|
var newGaming:FlxText;
|
||||||
var newInput:Bool = true;
|
var newGaming2:FlxText;
|
||||||
|
var newInput:Bool = true;
|
||||||
public static var nightly:String = "";
|
|
||||||
|
public static var nightly:String = "";
|
||||||
public static var kadeEngineVer:String = "1.4.2" + nightly;
|
|
||||||
public static var gameVer:String = "0.2.7.1";
|
public static var kadeEngineVer:String = "1.4.2" + nightly;
|
||||||
|
public static var gameVer:String = "0.2.7.1";
|
||||||
var magenta:FlxSprite;
|
|
||||||
var camFollow:FlxObject;
|
var magenta:FlxSprite;
|
||||||
|
var camFollow:FlxObject;
|
||||||
override function create()
|
|
||||||
{
|
override function create()
|
||||||
#if windows
|
{
|
||||||
// Updating Discord Rich Presence
|
#if windows
|
||||||
DiscordClient.changePresence("In the Menus", null);
|
// Updating Discord Rich Presence
|
||||||
#end
|
DiscordClient.changePresence("In the Menus", null);
|
||||||
|
#end
|
||||||
if (!FlxG.sound.music.playing)
|
|
||||||
{
|
if (!FlxG.sound.music.playing)
|
||||||
FlxG.sound.playMusic(Paths.music('freakyMenu'));
|
{
|
||||||
}
|
FlxG.sound.playMusic(Paths.music('freakyMenu'));
|
||||||
|
}
|
||||||
persistentUpdate = persistentDraw = true;
|
|
||||||
|
persistentUpdate = persistentDraw = true;
|
||||||
var bg:FlxSprite = new FlxSprite(-80).loadGraphic(Paths.image('menuBG'));
|
|
||||||
bg.scrollFactor.x = 0;
|
var bg:FlxSprite = new FlxSprite(-80).loadGraphic(Paths.image('menuBG'));
|
||||||
bg.scrollFactor.y = 0.15;
|
bg.scrollFactor.x = 0;
|
||||||
bg.setGraphicSize(Std.int(bg.width * 1.1));
|
bg.scrollFactor.y = 0.15;
|
||||||
bg.updateHitbox();
|
bg.setGraphicSize(Std.int(bg.width * 1.1));
|
||||||
bg.screenCenter();
|
bg.updateHitbox();
|
||||||
bg.antialiasing = true;
|
bg.screenCenter();
|
||||||
add(bg);
|
bg.antialiasing = true;
|
||||||
|
add(bg);
|
||||||
camFollow = new FlxObject(0, 0, 1, 1);
|
|
||||||
add(camFollow);
|
camFollow = new FlxObject(0, 0, 1, 1);
|
||||||
|
add(camFollow);
|
||||||
magenta = new FlxSprite(-80).loadGraphic(Paths.image('menuDesat'));
|
|
||||||
magenta.scrollFactor.x = 0;
|
magenta = new FlxSprite(-80).loadGraphic(Paths.image('menuDesat'));
|
||||||
magenta.scrollFactor.y = 0.18;
|
magenta.scrollFactor.x = 0;
|
||||||
magenta.setGraphicSize(Std.int(magenta.width * 1.1));
|
magenta.scrollFactor.y = 0.18;
|
||||||
magenta.updateHitbox();
|
magenta.setGraphicSize(Std.int(magenta.width * 1.1));
|
||||||
magenta.screenCenter();
|
magenta.updateHitbox();
|
||||||
magenta.visible = false;
|
magenta.screenCenter();
|
||||||
magenta.antialiasing = true;
|
magenta.visible = false;
|
||||||
magenta.color = 0xFFfd719b;
|
magenta.antialiasing = true;
|
||||||
add(magenta);
|
magenta.color = 0xFFfd719b;
|
||||||
// magenta.scrollFactor.set();
|
add(magenta);
|
||||||
|
// magenta.scrollFactor.set();
|
||||||
menuItems = new FlxTypedGroup<FlxSprite>();
|
|
||||||
add(menuItems);
|
menuItems = new FlxTypedGroup<FlxSprite>();
|
||||||
|
add(menuItems);
|
||||||
var tex = Paths.getSparrowAtlas('FNF_main_menu_assets');
|
|
||||||
|
var tex = Paths.getSparrowAtlas('FNF_main_menu_assets');
|
||||||
for (i in 0...optionShit.length)
|
|
||||||
{
|
for (i in 0...optionShit.length)
|
||||||
var menuItem:FlxSprite = new FlxSprite(0, 60 + (i * 160));
|
{
|
||||||
menuItem.frames = tex;
|
var menuItem:FlxSprite = new FlxSprite(0, 60 + (i * 160));
|
||||||
menuItem.animation.addByPrefix('idle', optionShit[i] + " basic", 24);
|
menuItem.frames = tex;
|
||||||
menuItem.animation.addByPrefix('selected', optionShit[i] + " white", 24);
|
menuItem.animation.addByPrefix('idle', optionShit[i] + " basic", 24);
|
||||||
menuItem.animation.play('idle');
|
menuItem.animation.addByPrefix('selected', optionShit[i] + " white", 24);
|
||||||
menuItem.ID = i;
|
menuItem.animation.play('idle');
|
||||||
menuItem.screenCenter(X);
|
menuItem.ID = i;
|
||||||
menuItems.add(menuItem);
|
menuItem.screenCenter(X);
|
||||||
menuItem.scrollFactor.set();
|
menuItems.add(menuItem);
|
||||||
menuItem.antialiasing = true;
|
menuItem.scrollFactor.set();
|
||||||
}
|
menuItem.antialiasing = true;
|
||||||
|
}
|
||||||
FlxG.camera.follow(camFollow, null, 0.60 * (60 / FlxG.save.data.fpsCap));
|
|
||||||
|
FlxG.camera.follow(camFollow, null, 0.60 * (60 / FlxG.save.data.fpsCap));
|
||||||
var versionShit:FlxText = new FlxText(5, FlxG.height - 18, 0, gameVer + (Main.watermarks ? " FNF - " + kadeEngineVer + " Kade Engine" : ""), 12);
|
|
||||||
versionShit.scrollFactor.set();
|
var versionShit:FlxText = new FlxText(5, FlxG.height - 18, 0, gameVer + (Main.watermarks ? " FNF - " + kadeEngineVer + " Kade Engine" : ""), 12);
|
||||||
versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
versionShit.scrollFactor.set();
|
||||||
add(versionShit);
|
versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
||||||
|
add(versionShit);
|
||||||
// NG.core.calls.event.logEvent('swag').send();
|
|
||||||
|
// NG.core.calls.event.logEvent('swag').send();
|
||||||
|
|
||||||
if (FlxG.save.data.dfjk)
|
|
||||||
controls.setKeyboardScheme(KeyboardScheme.Solo, true);
|
if (FlxG.save.data.dfjk)
|
||||||
else
|
controls.setKeyboardScheme(KeyboardScheme.Solo, true);
|
||||||
controls.setKeyboardScheme(KeyboardScheme.Duo(true), true);
|
else
|
||||||
|
controls.setKeyboardScheme(KeyboardScheme.Duo(true), true);
|
||||||
changeItem();
|
|
||||||
|
changeItem();
|
||||||
super.create();
|
|
||||||
}
|
super.create();
|
||||||
|
}
|
||||||
var selectedSomethin:Bool = false;
|
|
||||||
|
var selectedSomethin:Bool = false;
|
||||||
override function update(elapsed:Float)
|
|
||||||
{
|
override function update(elapsed:Float)
|
||||||
if (FlxG.sound.music.volume < 0.8)
|
{
|
||||||
{
|
if (FlxG.sound.music.volume < 0.8)
|
||||||
FlxG.sound.music.volume += 0.5 * FlxG.elapsed;
|
{
|
||||||
}
|
FlxG.sound.music.volume += 0.5 * FlxG.elapsed;
|
||||||
|
}
|
||||||
if (!selectedSomethin)
|
|
||||||
{
|
if (!selectedSomethin)
|
||||||
if (controls.UP_P)
|
{
|
||||||
{
|
if (controls.UP_P)
|
||||||
FlxG.sound.play(Paths.sound('scrollMenu'));
|
{
|
||||||
changeItem(-1);
|
FlxG.sound.play(Paths.sound('scrollMenu'));
|
||||||
}
|
changeItem(-1);
|
||||||
|
}
|
||||||
if (controls.DOWN_P)
|
|
||||||
{
|
if (controls.DOWN_P)
|
||||||
FlxG.sound.play(Paths.sound('scrollMenu'));
|
{
|
||||||
changeItem(1);
|
FlxG.sound.play(Paths.sound('scrollMenu'));
|
||||||
}
|
changeItem(1);
|
||||||
|
}
|
||||||
if (controls.BACK)
|
|
||||||
{
|
if (controls.BACK)
|
||||||
FlxG.switchState(new TitleState());
|
{
|
||||||
}
|
FlxG.switchState(new TitleState());
|
||||||
|
}
|
||||||
if (controls.ACCEPT)
|
|
||||||
{
|
if (controls.ACCEPT)
|
||||||
if (optionShit[curSelected] == 'donate')
|
{
|
||||||
{
|
if (optionShit[curSelected] == 'donate')
|
||||||
#if linux
|
{
|
||||||
Sys.command('/usr/bin/xdg-open', ["https://ninja-muffin24.itch.io/funkin", "&"]);
|
#if linux
|
||||||
#else
|
Sys.command('/usr/bin/xdg-open', ["https://www.kickstarter.com/projects/funkin/friday-night-funkin-the-full-ass-game", "&"]);
|
||||||
FlxG.openURL('https://ninja-muffin24.itch.io/funkin');
|
#else
|
||||||
#end
|
FlxG.openURL('https://www.kickstarter.com/projects/funkin/friday-night-funkin-the-full-ass-game');
|
||||||
}
|
#end
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
selectedSomethin = true;
|
{
|
||||||
FlxG.sound.play(Paths.sound('confirmMenu'));
|
selectedSomethin = true;
|
||||||
|
FlxG.sound.play(Paths.sound('confirmMenu'));
|
||||||
if(FlxG.save.data.flashing){
|
|
||||||
FlxFlicker.flicker(magenta, 1.1, 0.15, false);
|
if (FlxG.save.data.flashing)
|
||||||
}
|
FlxFlicker.flicker(magenta, 1.1, 0.15, false);
|
||||||
|
|
||||||
menuItems.forEach(function(spr:FlxSprite)
|
menuItems.forEach(function(spr:FlxSprite)
|
||||||
{
|
{
|
||||||
if (curSelected != spr.ID)
|
if (curSelected != spr.ID)
|
||||||
{
|
{
|
||||||
FlxTween.tween(spr, {alpha: 0}, 1.3, {
|
FlxTween.tween(spr, {alpha: 0}, 1.3, {
|
||||||
ease: FlxEase.quadOut,
|
ease: FlxEase.quadOut,
|
||||||
onComplete: function(twn:FlxTween)
|
onComplete: function(twn:FlxTween)
|
||||||
{
|
{
|
||||||
spr.kill();
|
spr.kill();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FlxFlicker.flicker(spr, 1, 0.06, false, false, function(flick:FlxFlicker)
|
if (FlxG.save.data.flashing)
|
||||||
{
|
{
|
||||||
var daChoice:String = optionShit[curSelected];
|
FlxFlicker.flicker(spr, 1, 0.06, false, false, function(flick:FlxFlicker)
|
||||||
|
{
|
||||||
switch (daChoice)
|
goToState();
|
||||||
{
|
});
|
||||||
case 'story mode':
|
}
|
||||||
FlxG.switchState(new StoryMenuState());
|
else
|
||||||
trace("Story Menu Selected");
|
{
|
||||||
case 'freeplay':
|
new FlxTimer().start(1, function(tmr:FlxTimer)
|
||||||
FlxG.switchState(new FreeplayState());
|
{
|
||||||
|
goToState();
|
||||||
trace("Freeplay Menu Selected");
|
});
|
||||||
|
}
|
||||||
case 'options':
|
}
|
||||||
FlxG.switchState(new OptionsMenu());
|
});
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
super.update(elapsed);
|
||||||
}
|
|
||||||
}
|
menuItems.forEach(function(spr:FlxSprite)
|
||||||
|
{
|
||||||
super.update(elapsed);
|
spr.screenCenter(X);
|
||||||
|
});
|
||||||
menuItems.forEach(function(spr:FlxSprite)
|
}
|
||||||
{
|
|
||||||
spr.screenCenter(X);
|
function goToState()
|
||||||
});
|
{
|
||||||
}
|
var daChoice:String = optionShit[curSelected];
|
||||||
|
|
||||||
function changeItem(huh:Int = 0)
|
switch (daChoice)
|
||||||
{
|
{
|
||||||
curSelected += huh;
|
case 'story mode':
|
||||||
|
FlxG.switchState(new StoryMenuState());
|
||||||
if (curSelected >= menuItems.length)
|
trace("Story Menu Selected");
|
||||||
curSelected = 0;
|
case 'freeplay':
|
||||||
if (curSelected < 0)
|
FlxG.switchState(new FreeplayState());
|
||||||
curSelected = menuItems.length - 1;
|
|
||||||
|
trace("Freeplay Menu Selected");
|
||||||
menuItems.forEach(function(spr:FlxSprite)
|
|
||||||
{
|
case 'options':
|
||||||
spr.animation.play('idle');
|
FlxG.switchState(new OptionsMenu());
|
||||||
|
}
|
||||||
if (spr.ID == curSelected)
|
}
|
||||||
{
|
|
||||||
spr.animation.play('selected');
|
function changeItem(huh:Int = 0)
|
||||||
camFollow.setPosition(spr.getGraphicMidpoint().x, spr.getGraphicMidpoint().y);
|
{
|
||||||
}
|
curSelected += huh;
|
||||||
|
|
||||||
spr.updateHitbox();
|
if (curSelected >= menuItems.length)
|
||||||
});
|
curSelected = 0;
|
||||||
}
|
if (curSelected < 0)
|
||||||
}
|
curSelected = menuItems.length - 1;
|
||||||
|
|
||||||
|
menuItems.forEach(function(spr:FlxSprite)
|
||||||
|
{
|
||||||
|
spr.animation.play('idle');
|
||||||
|
|
||||||
|
if (spr.ID == curSelected)
|
||||||
|
{
|
||||||
|
spr.animation.play('selected');
|
||||||
|
camFollow.setPosition(spr.getGraphicMidpoint().x, spr.getGraphicMidpoint().y);
|
||||||
|
}
|
||||||
|
|
||||||
|
spr.updateHitbox();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -37,14 +37,13 @@ class MenuItem extends FlxSpriteGroup
|
|||||||
{
|
{
|
||||||
super.update(elapsed);
|
super.update(elapsed);
|
||||||
y = FlxMath.lerp(y, (targetY * 120) + 480, 0.17 * (60 / FlxG.save.data.fpsCap));
|
y = FlxMath.lerp(y, (targetY * 120) + 480, 0.17 * (60 / FlxG.save.data.fpsCap));
|
||||||
if(FlxG.save.data.flashing){
|
|
||||||
if (isFlashing)
|
if (isFlashing)
|
||||||
flashingInt += 1;
|
flashingInt += 1;
|
||||||
|
|
||||||
if (flashingInt % fakeFramerate >= Math.floor(fakeFramerate / 2))
|
if (flashingInt % fakeFramerate >= Math.floor(fakeFramerate / 2))
|
||||||
week.color = 0xFF33ffff;
|
week.color = 0xFF33ffff;
|
||||||
else
|
else if (FlxG.save.data.flashing)
|
||||||
week.color = FlxColor.WHITE;
|
week.color = FlxColor.WHITE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,45 +1,98 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
import flixel.FlxG;
|
import flixel.FlxG;
|
||||||
import flixel.FlxSprite;
|
import flixel.FlxSprite;
|
||||||
import flixel.FlxSubState;
|
import flixel.FlxSubState;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
import flixel.util.FlxColor;
|
import flixel.tweens.FlxEase;
|
||||||
import lime.app.Application;
|
import flixel.tweens.FlxTween;
|
||||||
|
import flixel.util.FlxColor;
|
||||||
class OutdatedSubState extends MusicBeatState
|
import flixel.util.FlxTimer;
|
||||||
{
|
import lime.app.Application;
|
||||||
public static var leftState:Bool = false;
|
|
||||||
|
class OutdatedSubState extends MusicBeatState
|
||||||
public static var needVer:String = "IDFK LOL";
|
{
|
||||||
|
public static var leftState:Bool = false;
|
||||||
override function create()
|
|
||||||
{
|
public static var needVer:String = "IDFK LOL";
|
||||||
super.create();
|
public static var currChanges:String = "dk";
|
||||||
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
|
||||||
add(bg);
|
private var bgColors:Array<String> = [
|
||||||
var txt:FlxText = new FlxText(0, 0, FlxG.width,
|
'#314d7f',
|
||||||
"Kade Engine is Outdated!\n"
|
'#4e7093',
|
||||||
+ MainMenuState.kadeEngineVer
|
'#70526e',
|
||||||
+ " is your current version\nwhile the most recent version is " + needVer
|
'#594465'
|
||||||
+ "!\nPress Space to go to the github or ESCAPE to ignore this!!",
|
];
|
||||||
32);
|
private var colorRotation:Int = 1;
|
||||||
txt.setFormat("VCR OSD Mono", 32, FlxColor.WHITE, CENTER);
|
|
||||||
txt.screenCenter();
|
override function create()
|
||||||
add(txt);
|
{
|
||||||
}
|
super.create();
|
||||||
|
var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('week54prototype', 'shared'));
|
||||||
override function update(elapsed:Float)
|
bg.scale.x *= 1.55;
|
||||||
{
|
bg.scale.y *= 1.55;
|
||||||
if (controls.ACCEPT)
|
bg.screenCenter();
|
||||||
{
|
add(bg);
|
||||||
FlxG.openURL("https://github.com/KadeDev/Kade-Engine/releases/latest");
|
|
||||||
}
|
var kadeLogo:FlxSprite = new FlxSprite(FlxG.width, 0).loadGraphic(Paths.image('KadeEngineLogo'));
|
||||||
if (controls.BACK)
|
kadeLogo.scale.y = 0.3;
|
||||||
{
|
kadeLogo.scale.x = 0.3;
|
||||||
leftState = true;
|
kadeLogo.x -= kadeLogo.frameHeight;
|
||||||
FlxG.switchState(new MainMenuState());
|
kadeLogo.y -= 180;
|
||||||
}
|
kadeLogo.alpha = 0.8;
|
||||||
super.update(elapsed);
|
add(kadeLogo);
|
||||||
}
|
|
||||||
}
|
var txt:FlxText = new FlxText(0, 0, FlxG.width,
|
||||||
|
"Your Kade Engine is outdated!\nYou are on "
|
||||||
|
+ MainMenuState.kadeEngineVer
|
||||||
|
+ "\nwhile the most recent version is " + needVer + "."
|
||||||
|
+ "\n\nWhat's new:\n\n"
|
||||||
|
+ currChanges
|
||||||
|
+ "\n& more changes and bugfixes in the full changelog"
|
||||||
|
+ "\n\nPress Space to view the full changelog and update\nor ESCAPE to ignore this",
|
||||||
|
32);
|
||||||
|
|
||||||
|
txt.setFormat("VCR OSD Mono", 32, FlxColor.fromRGB(200, 200, 200), CENTER);
|
||||||
|
txt.borderColor = FlxColor.BLACK;
|
||||||
|
txt.borderSize = 3;
|
||||||
|
txt.borderStyle = FlxTextBorderStyle.OUTLINE;
|
||||||
|
txt.screenCenter();
|
||||||
|
add(txt);
|
||||||
|
|
||||||
|
FlxTween.color(bg, 2, bg.color, FlxColor.fromString(bgColors[colorRotation]));
|
||||||
|
FlxTween.angle(kadeLogo, kadeLogo.angle, -10, 2, {ease: FlxEase.quartInOut});
|
||||||
|
|
||||||
|
new FlxTimer().start(2, function(tmr:FlxTimer)
|
||||||
|
{
|
||||||
|
FlxTween.color(bg, 2, bg.color, FlxColor.fromString(bgColors[colorRotation]));
|
||||||
|
if(colorRotation < (bgColors.length - 1)) colorRotation++;
|
||||||
|
else colorRotation = 0;
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
new FlxTimer().start(2, function(tmr:FlxTimer)
|
||||||
|
{
|
||||||
|
if(kadeLogo.angle == -10) FlxTween.angle(kadeLogo, kadeLogo.angle, 10, 2, {ease: FlxEase.quartInOut});
|
||||||
|
else FlxTween.angle(kadeLogo, kadeLogo.angle, -10, 2, {ease: FlxEase.quartInOut});
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
new FlxTimer().start(0.8, function(tmr:FlxTimer)
|
||||||
|
{
|
||||||
|
if(kadeLogo.alpha == 0.8) FlxTween.tween(kadeLogo, {alpha: 1}, 0.8, {ease: FlxEase.quartInOut});
|
||||||
|
else FlxTween.tween(kadeLogo, {alpha: 0.8}, 0.8, {ease: FlxEase.quartInOut});
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
override function update(elapsed:Float)
|
||||||
|
{
|
||||||
|
if (controls.ACCEPT)
|
||||||
|
{
|
||||||
|
FlxG.openURL("https://kadedev.github.io/Kade-Engine/changelogs/changelog-" + needVer);
|
||||||
|
}
|
||||||
|
if (controls.BACK)
|
||||||
|
{
|
||||||
|
leftState = true;
|
||||||
|
FlxG.switchState(new MainMenuState());
|
||||||
|
}
|
||||||
|
super.update(elapsed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,239 +1,246 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
import openfl.Lib;
|
import openfl.Lib;
|
||||||
#if windows
|
#if windows
|
||||||
import llua.Lua;
|
import llua.Lua;
|
||||||
#end
|
#end
|
||||||
import Controls.Control;
|
import Controls.Control;
|
||||||
import flixel.FlxG;
|
import flixel.FlxG;
|
||||||
import flixel.FlxSprite;
|
import flixel.FlxSprite;
|
||||||
import flixel.FlxSubState;
|
import flixel.FlxSubState;
|
||||||
import flixel.addons.transition.FlxTransitionableState;
|
import flixel.addons.transition.FlxTransitionableState;
|
||||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
import flixel.input.keyboard.FlxKey;
|
import flixel.input.keyboard.FlxKey;
|
||||||
import flixel.system.FlxSound;
|
import flixel.system.FlxSound;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
import flixel.tweens.FlxEase;
|
import flixel.tweens.FlxEase;
|
||||||
import flixel.tweens.FlxTween;
|
import flixel.tweens.FlxTween;
|
||||||
import flixel.util.FlxColor;
|
import flixel.util.FlxColor;
|
||||||
|
|
||||||
class PauseSubState extends MusicBeatSubstate
|
class PauseSubState extends MusicBeatSubstate
|
||||||
{
|
{
|
||||||
var grpMenuShit:FlxTypedGroup<Alphabet>;
|
var grpMenuShit:FlxTypedGroup<Alphabet>;
|
||||||
|
|
||||||
var menuItems:Array<String> = ['Resume', 'Restart Song', 'Exit to menu'];
|
var menuItems:Array<String> = ['Resume', 'Restart Song', 'Exit to menu'];
|
||||||
var curSelected:Int = 0;
|
var curSelected:Int = 0;
|
||||||
|
|
||||||
var pauseMusic:FlxSound;
|
var pauseMusic:FlxSound;
|
||||||
var perSongOffset:FlxText;
|
var perSongOffset:FlxText;
|
||||||
|
|
||||||
var offsetChanged:Bool = false;
|
var offsetChanged:Bool = false;
|
||||||
|
|
||||||
public function new(x:Float, y:Float)
|
public function new(x:Float, y:Float)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
|
||||||
pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
|
pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
|
||||||
pauseMusic.volume = 0;
|
pauseMusic.volume = 0;
|
||||||
pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2)));
|
pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2)));
|
||||||
|
|
||||||
FlxG.sound.list.add(pauseMusic);
|
FlxG.sound.list.add(pauseMusic);
|
||||||
|
|
||||||
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
||||||
bg.alpha = 0;
|
bg.alpha = 0;
|
||||||
bg.scrollFactor.set();
|
bg.scrollFactor.set();
|
||||||
add(bg);
|
add(bg);
|
||||||
|
|
||||||
var levelInfo:FlxText = new FlxText(20, 15, 0, "", 32);
|
var levelInfo:FlxText = new FlxText(20, 15, 0, "", 32);
|
||||||
levelInfo.text += PlayState.SONG.song;
|
levelInfo.text += PlayState.SONG.song;
|
||||||
levelInfo.scrollFactor.set();
|
levelInfo.scrollFactor.set();
|
||||||
levelInfo.setFormat(Paths.font("vcr.ttf"), 32);
|
levelInfo.setFormat(Paths.font("vcr.ttf"), 32);
|
||||||
levelInfo.updateHitbox();
|
levelInfo.updateHitbox();
|
||||||
add(levelInfo);
|
add(levelInfo);
|
||||||
|
|
||||||
var levelDifficulty:FlxText = new FlxText(20, 15 + 32, 0, "", 32);
|
var levelDifficulty:FlxText = new FlxText(20, 15 + 32, 0, "", 32);
|
||||||
levelDifficulty.text += CoolUtil.difficultyString();
|
levelDifficulty.text += CoolUtil.difficultyString();
|
||||||
levelDifficulty.scrollFactor.set();
|
levelDifficulty.scrollFactor.set();
|
||||||
levelDifficulty.setFormat(Paths.font('vcr.ttf'), 32);
|
levelDifficulty.setFormat(Paths.font('vcr.ttf'), 32);
|
||||||
levelDifficulty.updateHitbox();
|
levelDifficulty.updateHitbox();
|
||||||
add(levelDifficulty);
|
add(levelDifficulty);
|
||||||
|
|
||||||
levelDifficulty.alpha = 0;
|
levelDifficulty.alpha = 0;
|
||||||
levelInfo.alpha = 0;
|
levelInfo.alpha = 0;
|
||||||
|
|
||||||
levelInfo.x = FlxG.width - (levelInfo.width + 20);
|
levelInfo.x = FlxG.width - (levelInfo.width + 20);
|
||||||
levelDifficulty.x = FlxG.width - (levelDifficulty.width + 20);
|
levelDifficulty.x = FlxG.width - (levelDifficulty.width + 20);
|
||||||
|
|
||||||
FlxTween.tween(bg, {alpha: 0.6}, 0.4, {ease: FlxEase.quartInOut});
|
FlxTween.tween(bg, {alpha: 0.6}, 0.4, {ease: FlxEase.quartInOut});
|
||||||
FlxTween.tween(levelInfo, {alpha: 1, y: 20}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.3});
|
FlxTween.tween(levelInfo, {alpha: 1, y: 20}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.3});
|
||||||
FlxTween.tween(levelDifficulty, {alpha: 1, y: levelDifficulty.y + 5}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.5});
|
FlxTween.tween(levelDifficulty, {alpha: 1, y: levelDifficulty.y + 5}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.5});
|
||||||
|
|
||||||
grpMenuShit = new FlxTypedGroup<Alphabet>();
|
grpMenuShit = new FlxTypedGroup<Alphabet>();
|
||||||
add(grpMenuShit);
|
add(grpMenuShit);
|
||||||
perSongOffset = new FlxText(5, FlxG.height - 18, 0, "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.', 12);
|
perSongOffset = new FlxText(5, FlxG.height - 18, 0, "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.', 12);
|
||||||
perSongOffset.scrollFactor.set();
|
perSongOffset.scrollFactor.set();
|
||||||
perSongOffset.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
perSongOffset.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
||||||
|
|
||||||
#if cpp
|
#if cpp
|
||||||
add(perSongOffset);
|
add(perSongOffset);
|
||||||
#end
|
#end
|
||||||
|
|
||||||
for (i in 0...menuItems.length)
|
for (i in 0...menuItems.length)
|
||||||
{
|
{
|
||||||
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false);
|
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false);
|
||||||
songText.isMenuItem = true;
|
songText.isMenuItem = true;
|
||||||
songText.targetY = i;
|
songText.targetY = i;
|
||||||
grpMenuShit.add(songText);
|
grpMenuShit.add(songText);
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelection();
|
changeSelection();
|
||||||
|
|
||||||
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
|
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
override function update(elapsed:Float)
|
override function update(elapsed:Float)
|
||||||
{
|
{
|
||||||
if (pauseMusic.volume < 0.5)
|
if (pauseMusic.volume < 0.5)
|
||||||
pauseMusic.volume += 0.01 * elapsed;
|
pauseMusic.volume += 0.01 * elapsed;
|
||||||
|
|
||||||
super.update(elapsed);
|
super.update(elapsed);
|
||||||
|
|
||||||
var upP = controls.UP_P;
|
var upP = controls.UP_P;
|
||||||
var downP = controls.DOWN_P;
|
var downP = controls.DOWN_P;
|
||||||
var leftP = controls.LEFT_P;
|
var leftP = controls.LEFT_P;
|
||||||
var rightP = controls.RIGHT_P;
|
var rightP = controls.RIGHT_P;
|
||||||
var accepted = controls.ACCEPT;
|
var accepted = controls.ACCEPT;
|
||||||
var oldOffset:Float = 0;
|
var oldOffset:Float = 0;
|
||||||
var songPath = 'assets/data/' + PlayState.SONG.song.toLowerCase() + '/';
|
var songPath = 'assets/data/' + PlayState.SONG.song.toLowerCase() + '/';
|
||||||
|
|
||||||
if (upP)
|
if (upP)
|
||||||
{
|
{
|
||||||
changeSelection(-1);
|
changeSelection(-1);
|
||||||
|
|
||||||
}else if (downP)
|
}else if (downP)
|
||||||
{
|
{
|
||||||
changeSelection(1);
|
changeSelection(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if cpp
|
#if cpp
|
||||||
else if (leftP)
|
else if (leftP)
|
||||||
{
|
{
|
||||||
oldOffset = PlayState.songOffset;
|
oldOffset = PlayState.songOffset;
|
||||||
PlayState.songOffset -= 1;
|
PlayState.songOffset -= 1;
|
||||||
sys.FileSystem.rename(songPath + oldOffset + '.offset', songPath + PlayState.songOffset + '.offset');
|
sys.FileSystem.rename(songPath + oldOffset + '.offset', songPath + PlayState.songOffset + '.offset');
|
||||||
perSongOffset.text = "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.';
|
perSongOffset.text = "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.';
|
||||||
|
|
||||||
// Prevent loop from happening every single time the offset changes
|
// Prevent loop from happening every single time the offset changes
|
||||||
if(!offsetChanged)
|
if(!offsetChanged)
|
||||||
{
|
{
|
||||||
grpMenuShit.clear();
|
grpMenuShit.clear();
|
||||||
|
|
||||||
menuItems = ['Restart Song', 'Exit to menu'];
|
menuItems = ['Restart Song', 'Exit to menu'];
|
||||||
|
|
||||||
for (i in 0...menuItems.length)
|
for (i in 0...menuItems.length)
|
||||||
{
|
{
|
||||||
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false);
|
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false);
|
||||||
songText.isMenuItem = true;
|
songText.isMenuItem = true;
|
||||||
songText.targetY = i;
|
songText.targetY = i;
|
||||||
grpMenuShit.add(songText);
|
grpMenuShit.add(songText);
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelection();
|
changeSelection();
|
||||||
|
|
||||||
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
|
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
|
||||||
offsetChanged = true;
|
offsetChanged = true;
|
||||||
}
|
}
|
||||||
}else if (rightP)
|
}else if (rightP)
|
||||||
{
|
{
|
||||||
oldOffset = PlayState.songOffset;
|
oldOffset = PlayState.songOffset;
|
||||||
PlayState.songOffset += 1;
|
PlayState.songOffset += 1;
|
||||||
sys.FileSystem.rename(songPath + oldOffset + '.offset', songPath + PlayState.songOffset + '.offset');
|
sys.FileSystem.rename(songPath + oldOffset + '.offset', songPath + PlayState.songOffset + '.offset');
|
||||||
perSongOffset.text = "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.';
|
perSongOffset.text = "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.';
|
||||||
if(!offsetChanged)
|
if(!offsetChanged)
|
||||||
{
|
{
|
||||||
grpMenuShit.clear();
|
grpMenuShit.clear();
|
||||||
|
|
||||||
menuItems = ['Restart Song', 'Exit to menu'];
|
menuItems = ['Restart Song', 'Exit to menu'];
|
||||||
|
|
||||||
for (i in 0...menuItems.length)
|
for (i in 0...menuItems.length)
|
||||||
{
|
{
|
||||||
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false);
|
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false);
|
||||||
songText.isMenuItem = true;
|
songText.isMenuItem = true;
|
||||||
songText.targetY = i;
|
songText.targetY = i;
|
||||||
grpMenuShit.add(songText);
|
grpMenuShit.add(songText);
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelection();
|
changeSelection();
|
||||||
|
|
||||||
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
|
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
|
||||||
offsetChanged = true;
|
offsetChanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
if (accepted)
|
if (accepted)
|
||||||
{
|
{
|
||||||
var daSelected:String = menuItems[curSelected];
|
var daSelected:String = menuItems[curSelected];
|
||||||
|
|
||||||
switch (daSelected)
|
switch (daSelected)
|
||||||
{
|
{
|
||||||
case "Resume":
|
case "Resume":
|
||||||
close();
|
close();
|
||||||
case "Restart Song":
|
case "Restart Song":
|
||||||
FlxG.resetState();
|
FlxG.resetState();
|
||||||
case "Exit to menu":
|
case "Exit to menu":
|
||||||
PlayState.loadRep = false;
|
if(PlayState.loadRep)
|
||||||
#if windows
|
{
|
||||||
if (PlayState.luaModchart != null)
|
FlxG.save.data.botplay = false;
|
||||||
{
|
FlxG.save.data.scrollSpeed = 1;
|
||||||
PlayState.luaModchart.die();
|
FlxG.save.data.downscroll = false;
|
||||||
PlayState.luaModchart = null;
|
}
|
||||||
}
|
PlayState.loadRep = false;
|
||||||
#end
|
#if windows
|
||||||
if (FlxG.save.data.fpsCap > 290)
|
if (PlayState.luaModchart != null)
|
||||||
(cast (Lib.current.getChildAt(0), Main)).setFPSCap(290);
|
{
|
||||||
FlxG.switchState(new MainMenuState());
|
PlayState.luaModchart.die();
|
||||||
}
|
PlayState.luaModchart = null;
|
||||||
}
|
}
|
||||||
|
#end
|
||||||
if (FlxG.keys.justPressed.J)
|
if (FlxG.save.data.fpsCap > 290)
|
||||||
{
|
(cast (Lib.current.getChildAt(0), Main)).setFPSCap(290);
|
||||||
// for reference later!
|
|
||||||
// PlayerSettings.player1.controls.replaceBinding(Control.LEFT, Keys, FlxKey.J, null);
|
FlxG.switchState(new MainMenuState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override function destroy()
|
if (FlxG.keys.justPressed.J)
|
||||||
{
|
{
|
||||||
pauseMusic.destroy();
|
// for reference later!
|
||||||
|
// PlayerSettings.player1.controls.replaceBinding(Control.LEFT, Keys, FlxKey.J, null);
|
||||||
super.destroy();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeSelection(change:Int = 0):Void
|
override function destroy()
|
||||||
{
|
{
|
||||||
curSelected += change;
|
pauseMusic.destroy();
|
||||||
|
|
||||||
if (curSelected < 0)
|
super.destroy();
|
||||||
curSelected = menuItems.length - 1;
|
}
|
||||||
if (curSelected >= menuItems.length)
|
|
||||||
curSelected = 0;
|
function changeSelection(change:Int = 0):Void
|
||||||
|
{
|
||||||
var bullShit:Int = 0;
|
curSelected += change;
|
||||||
|
|
||||||
for (item in grpMenuShit.members)
|
if (curSelected < 0)
|
||||||
{
|
curSelected = menuItems.length - 1;
|
||||||
item.targetY = bullShit - curSelected;
|
if (curSelected >= menuItems.length)
|
||||||
bullShit++;
|
curSelected = 0;
|
||||||
|
|
||||||
item.alpha = 0.6;
|
var bullShit:Int = 0;
|
||||||
// item.setGraphicSize(Std.int(item.width * 0.8));
|
|
||||||
|
for (item in grpMenuShit.members)
|
||||||
if (item.targetY == 0)
|
{
|
||||||
{
|
item.targetY = bullShit - curSelected;
|
||||||
item.alpha = 1;
|
bullShit++;
|
||||||
// item.setGraphicSize(Std.int(item.width));
|
|
||||||
}
|
item.alpha = 0.6;
|
||||||
}
|
// item.setGraphicSize(Std.int(item.width * 0.8));
|
||||||
}
|
|
||||||
}
|
if (item.targetY == 0)
|
||||||
|
{
|
||||||
|
item.alpha = 1;
|
||||||
|
// item.setGraphicSize(Std.int(item.width));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6814
source/PlayState.hx
6814
source/PlayState.hx
File diff suppressed because it is too large
Load Diff
@ -129,10 +129,10 @@ class Ratings
|
|||||||
return "sick";
|
return "sick";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function CalculateRanking(score:Int,scoreDef:Int,nps:Int,accuracy:Float):String
|
public static function CalculateRanking(score:Int,scoreDef:Int,nps:Int,maxNPS:Int,accuracy:Float):String
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
(FlxG.save.data.npsDisplay ? "NPS: " + nps + (!FlxG.save.data.botplay ? " | " : "") : "") + (!FlxG.save.data.botplay ? // NPS Toggle
|
(FlxG.save.data.npsDisplay ? "NPS: " + nps + " (Max " + maxNPS + ")" + (!FlxG.save.data.botplay ? " | " : "") : "") + (!FlxG.save.data.botplay ? // NPS Toggle
|
||||||
"Score:" + (Conductor.safeFrames != 10 ? score + " (" + scoreDef + ")" : "" + score) + // Score
|
"Score:" + (Conductor.safeFrames != 10 ? score + " (" + scoreDef + ")" : "" + score) + // Score
|
||||||
" | Combo Breaks:" + PlayState.misses + // Misses/Combo Breaks
|
" | Combo Breaks:" + PlayState.misses + // Misses/Combo Breaks
|
||||||
" | Accuracy:" + (FlxG.save.data.botplay ? "N/A" : HelperFunctions.truncateFloat(accuracy, 2) + " %") + // Accuracy
|
" | Accuracy:" + (FlxG.save.data.botplay ? "N/A" : HelperFunctions.truncateFloat(accuracy, 2) + " %") + // Accuracy
|
||||||
|
192
source/Replay.hx
192
source/Replay.hx
@ -1,101 +1,91 @@
|
|||||||
#if sys
|
#if sys
|
||||||
import sys.io.File;
|
import sys.io.File;
|
||||||
#end
|
#end
|
||||||
import Controls.Control;
|
import Controls.Control;
|
||||||
import flixel.FlxG;
|
import flixel.FlxG;
|
||||||
import openfl.events.IOErrorEvent;
|
import openfl.events.IOErrorEvent;
|
||||||
import openfl.events.Event;
|
import openfl.events.Event;
|
||||||
import openfl.net.FileReference;
|
import openfl.net.FileReference;
|
||||||
import lime.utils.Assets;
|
import lime.utils.Assets;
|
||||||
import haxe.Json;
|
import haxe.Json;
|
||||||
import flixel.input.keyboard.FlxKey;
|
import flixel.input.keyboard.FlxKey;
|
||||||
import openfl.utils.Dictionary;
|
import openfl.utils.Dictionary;
|
||||||
|
|
||||||
typedef KeyPress =
|
typedef ReplayJSON =
|
||||||
{
|
{
|
||||||
public var time:Float;
|
public var replayGameVer:String;
|
||||||
public var key:String;
|
public var timestamp:Date;
|
||||||
}
|
public var songName:String;
|
||||||
|
public var songDiff:Int;
|
||||||
typedef KeyRelease =
|
public var songNotes:Array<Float>;
|
||||||
{
|
public var noteSpeed:Float;
|
||||||
public var time:Float;
|
public var isDownscroll:Bool;
|
||||||
public var key:String;
|
}
|
||||||
}
|
|
||||||
|
class Replay
|
||||||
typedef ReplayJSON =
|
{
|
||||||
{
|
public static var version:String = "1.0"; // replay file version
|
||||||
public var replayGameVer:String;
|
|
||||||
public var timestamp:Date;
|
public var path:String = "";
|
||||||
public var songName:String;
|
public var replay:ReplayJSON;
|
||||||
public var songDiff:Int;
|
public function new(path:String)
|
||||||
public var keyPresses:Array<KeyPress>;
|
{
|
||||||
public var keyReleases:Array<KeyRelease>;
|
this.path = path;
|
||||||
}
|
replay = {
|
||||||
|
songName: "Tutorial",
|
||||||
class Replay
|
songDiff: 1,
|
||||||
{
|
noteSpeed: 1.5,
|
||||||
public static var version:String = "1.0"; // replay file version
|
isDownscroll: false,
|
||||||
|
songNotes: [],
|
||||||
public var path:String = "";
|
replayGameVer: version,
|
||||||
public var replay:ReplayJSON;
|
timestamp: Date.now()
|
||||||
public function new(path:String)
|
};
|
||||||
{
|
}
|
||||||
this.path = path;
|
|
||||||
replay = {
|
public static function LoadReplay(path:String):Replay
|
||||||
songName: "Tutorial",
|
{
|
||||||
songDiff: 1,
|
var rep:Replay = new Replay(path);
|
||||||
keyPresses: [],
|
|
||||||
keyReleases: [],
|
rep.LoadFromJSON();
|
||||||
replayGameVer: version,
|
|
||||||
timestamp: Date.now()
|
trace('basic replay data:\nSong Name: ' + rep.replay.songName + '\nSong Diff: ' + rep.replay.songDiff + '\nNotes Length: ' + rep.replay.songNotes.length);
|
||||||
};
|
|
||||||
}
|
return rep;
|
||||||
|
}
|
||||||
public static function LoadReplay(path:String):Replay
|
|
||||||
{
|
public function SaveReplay(notearray:Array<Float>)
|
||||||
var rep:Replay = new Replay(path);
|
{
|
||||||
|
var json = {
|
||||||
rep.LoadFromJSON();
|
"songName": PlayState.SONG.song.toLowerCase(),
|
||||||
|
"songDiff": PlayState.storyDifficulty,
|
||||||
trace('basic replay data:\nSong Name: ' + rep.replay.songName + '\nSong Diff: ' + rep.replay.songDiff + '\nKeys Length: ' + rep.replay.keyPresses.length);
|
"noteSpeed": (FlxG.save.data.scrollSpeed > 1 ? FlxG.save.data.scrollSpeed : PlayState.SONG.speed),
|
||||||
|
"isDownscroll": FlxG.save.data.downscroll,
|
||||||
return rep;
|
"songNotes": notearray,
|
||||||
}
|
"timestamp": Date.now(),
|
||||||
|
"replayGameVer": version
|
||||||
public function SaveReplay()
|
};
|
||||||
{
|
|
||||||
var json = {
|
var data:String = Json.stringify(json);
|
||||||
"songName": PlayState.SONG.song.toLowerCase(),
|
|
||||||
"songDiff": PlayState.storyDifficulty,
|
#if sys
|
||||||
"keyPresses": replay.keyPresses,
|
File.saveContent("assets/replays/replay-" + PlayState.SONG.song + "-time" + Date.now().getTime() + ".kadeReplay", data);
|
||||||
"keyReleases": replay.keyReleases,
|
#end
|
||||||
"timestamp": Date.now(),
|
}
|
||||||
"replayGameVer": version
|
|
||||||
};
|
public function LoadFromJSON()
|
||||||
|
{
|
||||||
var data:String = Json.stringify(json);
|
#if sys
|
||||||
|
trace('loading ' + Sys.getCwd() + 'assets/replays/' + path + ' replay...');
|
||||||
#if sys
|
try
|
||||||
File.saveContent("assets/replays/replay-" + PlayState.SONG.song + "-time" + Date.now().getTime() + ".kadeReplay", data);
|
{
|
||||||
#end
|
var repl:ReplayJSON = cast Json.parse(File.getContent(Sys.getCwd() + "assets/replays/" + path));
|
||||||
}
|
replay = repl;
|
||||||
|
}
|
||||||
|
catch(e)
|
||||||
public function LoadFromJSON()
|
{
|
||||||
{
|
trace('failed!\n' + e.message);
|
||||||
#if sys
|
}
|
||||||
trace('loading ' + Sys.getCwd() + 'assets/replays/' + path + ' replay...');
|
#end
|
||||||
try
|
}
|
||||||
{
|
|
||||||
var repl:ReplayJSON = cast Json.parse(File.getContent(Sys.getCwd() + "assets/replays/" + path));
|
}
|
||||||
replay = repl;
|
|
||||||
}
|
|
||||||
catch(e)
|
|
||||||
{
|
|
||||||
trace('failed!\n' + e.message);
|
|
||||||
}
|
|
||||||
#end
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -25,11 +25,11 @@ class StoryMenuState extends MusicBeatState
|
|||||||
|
|
||||||
var weekData:Array<Dynamic> = [
|
var weekData:Array<Dynamic> = [
|
||||||
['Tutorial'],
|
['Tutorial'],
|
||||||
['Bopeebo', 'Fresh', 'Dadbattle'],
|
['Bopeebo', 'Fresh', 'Dad Battle'],
|
||||||
['Spookeez', 'South', "Monster"],
|
['Spookeez', 'South', "Monster"],
|
||||||
['Pico', 'Philly', "Blammed"],
|
['Pico', 'Philly Nice', "Blammed"],
|
||||||
['Satin-Panties', "High", "Milf"],
|
['Satin Panties', "High", "Milf"],
|
||||||
['Cocoa', 'Eggnog', 'Winter-Horrorland'],
|
['Cocoa', 'Eggnog', 'Winter Horrorland'],
|
||||||
['Senpai', 'Roses', 'Thorns']
|
['Senpai', 'Roses', 'Thorns']
|
||||||
];
|
];
|
||||||
var curDifficulty:Int = 1;
|
var curDifficulty:Int = 1;
|
||||||
@ -47,7 +47,7 @@ class StoryMenuState extends MusicBeatState
|
|||||||
];
|
];
|
||||||
|
|
||||||
var weekNames:Array<String> = [
|
var weekNames:Array<String> = [
|
||||||
"How to Funk",
|
"",
|
||||||
"Daddy Dearest",
|
"Daddy Dearest",
|
||||||
"Spooky Month",
|
"Spooky Month",
|
||||||
"PICO",
|
"PICO",
|
||||||
|
@ -1,463 +1,467 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
import flixel.FlxG;
|
import flixel.FlxG;
|
||||||
import flixel.FlxSprite;
|
import flixel.FlxSprite;
|
||||||
import flixel.FlxState;
|
import flixel.FlxState;
|
||||||
import flixel.addons.display.FlxGridOverlay;
|
import flixel.addons.display.FlxGridOverlay;
|
||||||
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
||||||
import flixel.addons.transition.FlxTransitionableState;
|
import flixel.addons.transition.FlxTransitionableState;
|
||||||
import flixel.addons.transition.TransitionData;
|
import flixel.addons.transition.TransitionData;
|
||||||
import flixel.graphics.FlxGraphic;
|
import flixel.graphics.FlxGraphic;
|
||||||
import flixel.graphics.frames.FlxAtlasFrames;
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
import flixel.group.FlxGroup;
|
import flixel.group.FlxGroup;
|
||||||
import flixel.input.gamepad.FlxGamepad;
|
import flixel.input.gamepad.FlxGamepad;
|
||||||
import flixel.math.FlxPoint;
|
import flixel.math.FlxPoint;
|
||||||
import flixel.math.FlxRect;
|
import flixel.math.FlxRect;
|
||||||
import flixel.system.FlxSound;
|
import flixel.system.FlxSound;
|
||||||
import flixel.system.ui.FlxSoundTray;
|
import flixel.system.ui.FlxSoundTray;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
import flixel.tweens.FlxEase;
|
import flixel.tweens.FlxEase;
|
||||||
import flixel.tweens.FlxTween;
|
import flixel.tweens.FlxTween;
|
||||||
import flixel.util.FlxColor;
|
import flixel.util.FlxColor;
|
||||||
import flixel.util.FlxTimer;
|
import flixel.util.FlxTimer;
|
||||||
import io.newgrounds.NG;
|
import io.newgrounds.NG;
|
||||||
import lime.app.Application;
|
import lime.app.Application;
|
||||||
import openfl.Assets;
|
import openfl.Assets;
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
import Discord.DiscordClient;
|
import Discord.DiscordClient;
|
||||||
#end
|
#end
|
||||||
|
|
||||||
#if cpp
|
#if cpp
|
||||||
import sys.thread.Thread;
|
import sys.thread.Thread;
|
||||||
#end
|
#end
|
||||||
|
|
||||||
using StringTools;
|
using StringTools;
|
||||||
|
|
||||||
class TitleState extends MusicBeatState
|
class TitleState extends MusicBeatState
|
||||||
{
|
{
|
||||||
static var initialized:Bool = false;
|
static var initialized:Bool = false;
|
||||||
|
|
||||||
var blackScreen:FlxSprite;
|
var blackScreen:FlxSprite;
|
||||||
var credGroup:FlxGroup;
|
var credGroup:FlxGroup;
|
||||||
var credTextShit:Alphabet;
|
var credTextShit:Alphabet;
|
||||||
var textGroup:FlxGroup;
|
var textGroup:FlxGroup;
|
||||||
var ngSpr:FlxSprite;
|
var ngSpr:FlxSprite;
|
||||||
|
|
||||||
var curWacky:Array<String> = [];
|
var curWacky:Array<String> = [];
|
||||||
|
|
||||||
var wackyImage:FlxSprite;
|
var wackyImage:FlxSprite;
|
||||||
|
|
||||||
override public function create():Void
|
override public function create():Void
|
||||||
{
|
{
|
||||||
#if polymod
|
#if polymod
|
||||||
polymod.Polymod.init({modRoot: "mods", dirs: ['introMod']});
|
polymod.Polymod.init({modRoot: "mods", dirs: ['introMod']});
|
||||||
#end
|
#end
|
||||||
|
|
||||||
#if sys
|
#if sys
|
||||||
if (!sys.FileSystem.exists(Sys.getCwd() + "/assets/replays"))
|
if (!sys.FileSystem.exists(Sys.getCwd() + "/assets/replays"))
|
||||||
sys.FileSystem.createDirectory(Sys.getCwd() + "/assets/replays");
|
sys.FileSystem.createDirectory(Sys.getCwd() + "/assets/replays");
|
||||||
#end
|
#end
|
||||||
|
|
||||||
@:privateAccess
|
@:privateAccess
|
||||||
{
|
{
|
||||||
trace("Loaded " + openfl.Assets.getLibrary("default").assetsLoaded + " assets (DEFAULT)");
|
trace("Loaded " + openfl.Assets.getLibrary("default").assetsLoaded + " assets (DEFAULT)");
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerSettings.init();
|
PlayerSettings.init();
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
DiscordClient.initialize();
|
DiscordClient.initialize();
|
||||||
|
|
||||||
Application.current.onExit.add (function (exitCode) {
|
Application.current.onExit.add (function (exitCode) {
|
||||||
DiscordClient.shutdown();
|
DiscordClient.shutdown();
|
||||||
});
|
});
|
||||||
|
|
||||||
#end
|
#end
|
||||||
|
|
||||||
curWacky = FlxG.random.getObject(getIntroTextShit());
|
curWacky = FlxG.random.getObject(getIntroTextShit());
|
||||||
|
|
||||||
// DEBUG BULLSHIT
|
// DEBUG BULLSHIT
|
||||||
|
|
||||||
super.create();
|
super.create();
|
||||||
|
|
||||||
// NGio.noLogin(APIStuff.API);
|
// NGio.noLogin(APIStuff.API);
|
||||||
|
|
||||||
#if ng
|
#if ng
|
||||||
var ng:NGio = new NGio(APIStuff.API, APIStuff.EncKey);
|
var ng:NGio = new NGio(APIStuff.API, APIStuff.EncKey);
|
||||||
trace('NEWGROUNDS LOL');
|
trace('NEWGROUNDS LOL');
|
||||||
#end
|
#end
|
||||||
|
|
||||||
FlxG.save.bind('funkin', 'ninjamuffin99');
|
FlxG.save.bind('funkin', 'ninjamuffin99');
|
||||||
|
|
||||||
KadeEngineData.initSave();
|
KadeEngineData.initSave();
|
||||||
|
|
||||||
Highscore.load();
|
Highscore.load();
|
||||||
|
|
||||||
if (FlxG.save.data.weekUnlocked != null)
|
if (FlxG.save.data.weekUnlocked != null)
|
||||||
{
|
{
|
||||||
// FIX LATER!!!
|
// FIX LATER!!!
|
||||||
// WEEK UNLOCK PROGRESSION!!
|
// WEEK UNLOCK PROGRESSION!!
|
||||||
// StoryMenuState.weekUnlocked = FlxG.save.data.weekUnlocked;
|
// StoryMenuState.weekUnlocked = FlxG.save.data.weekUnlocked;
|
||||||
|
|
||||||
if (StoryMenuState.weekUnlocked.length < 4)
|
if (StoryMenuState.weekUnlocked.length < 4)
|
||||||
StoryMenuState.weekUnlocked.insert(0, true);
|
StoryMenuState.weekUnlocked.insert(0, true);
|
||||||
|
|
||||||
// QUICK PATCH OOPS!
|
// QUICK PATCH OOPS!
|
||||||
if (!StoryMenuState.weekUnlocked[0])
|
if (!StoryMenuState.weekUnlocked[0])
|
||||||
StoryMenuState.weekUnlocked[0] = true;
|
StoryMenuState.weekUnlocked[0] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if FREEPLAY
|
#if FREEPLAY
|
||||||
FlxG.switchState(new FreeplayState());
|
FlxG.switchState(new FreeplayState());
|
||||||
#elseif CHARTING
|
#elseif CHARTING
|
||||||
FlxG.switchState(new ChartingState());
|
FlxG.switchState(new ChartingState());
|
||||||
#else
|
#else
|
||||||
new FlxTimer().start(1, function(tmr:FlxTimer)
|
new FlxTimer().start(1, function(tmr:FlxTimer)
|
||||||
{
|
{
|
||||||
startIntro();
|
startIntro();
|
||||||
});
|
});
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
var logoBl:FlxSprite;
|
var logoBl:FlxSprite;
|
||||||
var gfDance:FlxSprite;
|
var gfDance:FlxSprite;
|
||||||
var danceLeft:Bool = false;
|
var danceLeft:Bool = false;
|
||||||
var titleText:FlxSprite;
|
var titleText:FlxSprite;
|
||||||
|
|
||||||
function startIntro()
|
function startIntro()
|
||||||
{
|
{
|
||||||
if (!initialized)
|
if (!initialized)
|
||||||
{
|
{
|
||||||
var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond);
|
var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond);
|
||||||
diamond.persist = true;
|
diamond.persist = true;
|
||||||
diamond.destroyOnNoUse = false;
|
diamond.destroyOnNoUse = false;
|
||||||
|
|
||||||
FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 1, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32},
|
FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 1, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32},
|
||||||
new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||||
FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 0.7, new FlxPoint(0, 1),
|
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));
|
{asset: diamond, width: 32, height: 32}, new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||||
|
|
||||||
transIn = FlxTransitionableState.defaultTransIn;
|
transIn = FlxTransitionableState.defaultTransIn;
|
||||||
transOut = FlxTransitionableState.defaultTransOut;
|
transOut = FlxTransitionableState.defaultTransOut;
|
||||||
|
|
||||||
// HAD TO MODIFY SOME BACKEND SHIT
|
// HAD TO MODIFY SOME BACKEND SHIT
|
||||||
// IF THIS PR IS HERE IF ITS ACCEPTED UR GOOD TO GO
|
// IF THIS PR IS HERE IF ITS ACCEPTED UR GOOD TO GO
|
||||||
// https://github.com/HaxeFlixel/flixel-addons/pull/348
|
// https://github.com/HaxeFlixel/flixel-addons/pull/348
|
||||||
|
|
||||||
// var music:FlxSound = new FlxSound();
|
// var music:FlxSound = new FlxSound();
|
||||||
// music.loadStream(Paths.music('freakyMenu'));
|
// music.loadStream(Paths.music('freakyMenu'));
|
||||||
// FlxG.sound.list.add(music);
|
// FlxG.sound.list.add(music);
|
||||||
// music.play();
|
// music.play();
|
||||||
FlxG.sound.playMusic(Paths.music('freakyMenu'), 0);
|
FlxG.sound.playMusic(Paths.music('freakyMenu'), 0);
|
||||||
|
|
||||||
FlxG.sound.music.fadeIn(4, 0, 0.7);
|
FlxG.sound.music.fadeIn(4, 0, 0.7);
|
||||||
}
|
}
|
||||||
|
|
||||||
Conductor.changeBPM(102);
|
Conductor.changeBPM(102);
|
||||||
persistentUpdate = true;
|
persistentUpdate = true;
|
||||||
|
|
||||||
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
||||||
// bg.antialiasing = true;
|
// bg.antialiasing = true;
|
||||||
// bg.setGraphicSize(Std.int(bg.width * 0.6));
|
// bg.setGraphicSize(Std.int(bg.width * 0.6));
|
||||||
// bg.updateHitbox();
|
// bg.updateHitbox();
|
||||||
add(bg);
|
add(bg);
|
||||||
|
|
||||||
logoBl = new FlxSprite(-150, -100);
|
logoBl = new FlxSprite(-150, -100);
|
||||||
logoBl.frames = Paths.getSparrowAtlas('logoBumpin');
|
logoBl.frames = Paths.getSparrowAtlas('logoBumpin');
|
||||||
logoBl.antialiasing = true;
|
logoBl.antialiasing = true;
|
||||||
logoBl.animation.addByPrefix('bump', 'logo bumpin', 24);
|
logoBl.animation.addByPrefix('bump', 'logo bumpin', 24);
|
||||||
logoBl.animation.play('bump');
|
logoBl.animation.play('bump');
|
||||||
logoBl.updateHitbox();
|
logoBl.updateHitbox();
|
||||||
// logoBl.screenCenter();
|
// logoBl.screenCenter();
|
||||||
// logoBl.color = FlxColor.BLACK;
|
// logoBl.color = FlxColor.BLACK;
|
||||||
|
|
||||||
gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07);
|
gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07);
|
||||||
gfDance.frames = Paths.getSparrowAtlas('gfDanceTitle');
|
gfDance.frames = Paths.getSparrowAtlas('gfDanceTitle');
|
||||||
gfDance.animation.addByIndices('danceLeft', 'gfDance', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
|
gfDance.animation.addByIndices('danceLeft', 'gfDance', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
|
||||||
gfDance.animation.addByIndices('danceRight', 'gfDance', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
|
gfDance.animation.addByIndices('danceRight', 'gfDance', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
|
||||||
gfDance.antialiasing = true;
|
gfDance.antialiasing = true;
|
||||||
add(gfDance);
|
add(gfDance);
|
||||||
add(logoBl);
|
add(logoBl);
|
||||||
|
|
||||||
titleText = new FlxSprite(100, FlxG.height * 0.8);
|
titleText = new FlxSprite(100, FlxG.height * 0.8);
|
||||||
titleText.frames = Paths.getSparrowAtlas('titleEnter');
|
titleText.frames = Paths.getSparrowAtlas('titleEnter');
|
||||||
titleText.animation.addByPrefix('idle', "Press Enter to Begin", 24);
|
titleText.animation.addByPrefix('idle', "Press Enter to Begin", 24);
|
||||||
titleText.animation.addByPrefix('press', "ENTER PRESSED", 24);
|
titleText.animation.addByPrefix('press', "ENTER PRESSED", 24);
|
||||||
titleText.antialiasing = true;
|
titleText.antialiasing = true;
|
||||||
titleText.animation.play('idle');
|
titleText.animation.play('idle');
|
||||||
titleText.updateHitbox();
|
titleText.updateHitbox();
|
||||||
// titleText.screenCenter(X);
|
// titleText.screenCenter(X);
|
||||||
add(titleText);
|
add(titleText);
|
||||||
|
|
||||||
var logo:FlxSprite = new FlxSprite().loadGraphic(Paths.image('logo'));
|
var logo:FlxSprite = new FlxSprite().loadGraphic(Paths.image('logo'));
|
||||||
logo.screenCenter();
|
logo.screenCenter();
|
||||||
logo.antialiasing = true;
|
logo.antialiasing = true;
|
||||||
// add(logo);
|
// add(logo);
|
||||||
|
|
||||||
// FlxTween.tween(logoBl, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG});
|
// FlxTween.tween(logoBl, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG});
|
||||||
// FlxTween.tween(logo, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG, startDelay: 0.1});
|
// FlxTween.tween(logo, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG, startDelay: 0.1});
|
||||||
|
|
||||||
credGroup = new FlxGroup();
|
credGroup = new FlxGroup();
|
||||||
add(credGroup);
|
add(credGroup);
|
||||||
textGroup = new FlxGroup();
|
textGroup = new FlxGroup();
|
||||||
|
|
||||||
blackScreen = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
blackScreen = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
||||||
credGroup.add(blackScreen);
|
credGroup.add(blackScreen);
|
||||||
|
|
||||||
credTextShit = new Alphabet(0, 0, "ninjamuffin99\nPhantomArcade\nkawaisprite\nevilsk8er", true);
|
credTextShit = new Alphabet(0, 0, "ninjamuffin99\nPhantomArcade\nkawaisprite\nevilsk8er", true);
|
||||||
credTextShit.screenCenter();
|
credTextShit.screenCenter();
|
||||||
|
|
||||||
// credTextShit.alignment = CENTER;
|
// credTextShit.alignment = CENTER;
|
||||||
|
|
||||||
credTextShit.visible = false;
|
credTextShit.visible = false;
|
||||||
|
|
||||||
ngSpr = new FlxSprite(0, FlxG.height * 0.52).loadGraphic(Paths.image('newgrounds_logo'));
|
ngSpr = new FlxSprite(0, FlxG.height * 0.52).loadGraphic(Paths.image('newgrounds_logo'));
|
||||||
add(ngSpr);
|
add(ngSpr);
|
||||||
ngSpr.visible = false;
|
ngSpr.visible = false;
|
||||||
ngSpr.setGraphicSize(Std.int(ngSpr.width * 0.8));
|
ngSpr.setGraphicSize(Std.int(ngSpr.width * 0.8));
|
||||||
ngSpr.updateHitbox();
|
ngSpr.updateHitbox();
|
||||||
ngSpr.screenCenter(X);
|
ngSpr.screenCenter(X);
|
||||||
ngSpr.antialiasing = true;
|
ngSpr.antialiasing = true;
|
||||||
|
|
||||||
FlxTween.tween(credTextShit, {y: credTextShit.y + 20}, 2.9, {ease: FlxEase.quadInOut, type: PINGPONG});
|
FlxTween.tween(credTextShit, {y: credTextShit.y + 20}, 2.9, {ease: FlxEase.quadInOut, type: PINGPONG});
|
||||||
|
|
||||||
FlxG.mouse.visible = false;
|
FlxG.mouse.visible = false;
|
||||||
|
|
||||||
if (initialized)
|
if (initialized)
|
||||||
skipIntro();
|
skipIntro();
|
||||||
else
|
else
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
// credGroup.add(credTextShit);
|
// credGroup.add(credTextShit);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getIntroTextShit():Array<Array<String>>
|
function getIntroTextShit():Array<Array<String>>
|
||||||
{
|
{
|
||||||
var fullText:String = Assets.getText(Paths.txt('introText'));
|
var fullText:String = Assets.getText(Paths.txt('introText'));
|
||||||
|
|
||||||
var firstArray:Array<String> = fullText.split('\n');
|
var firstArray:Array<String> = fullText.split('\n');
|
||||||
var swagGoodArray:Array<Array<String>> = [];
|
var swagGoodArray:Array<Array<String>> = [];
|
||||||
|
|
||||||
for (i in firstArray)
|
for (i in firstArray)
|
||||||
{
|
{
|
||||||
swagGoodArray.push(i.split('--'));
|
swagGoodArray.push(i.split('--'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return swagGoodArray;
|
return swagGoodArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
var transitioning:Bool = false;
|
var transitioning:Bool = false;
|
||||||
|
|
||||||
override function update(elapsed:Float)
|
override function update(elapsed:Float)
|
||||||
{
|
{
|
||||||
if (FlxG.sound.music != null)
|
if (FlxG.sound.music != null)
|
||||||
Conductor.songPosition = FlxG.sound.music.time;
|
Conductor.songPosition = FlxG.sound.music.time;
|
||||||
// FlxG.watch.addQuick('amp', FlxG.sound.music.amplitude);
|
// FlxG.watch.addQuick('amp', FlxG.sound.music.amplitude);
|
||||||
|
|
||||||
if (FlxG.keys.justPressed.F)
|
if (FlxG.keys.justPressed.F)
|
||||||
{
|
{
|
||||||
FlxG.fullscreen = !FlxG.fullscreen;
|
FlxG.fullscreen = !FlxG.fullscreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pressedEnter:Bool = FlxG.keys.justPressed.ENTER;
|
var pressedEnter:Bool = FlxG.keys.justPressed.ENTER;
|
||||||
|
|
||||||
#if mobile
|
#if mobile
|
||||||
for (touch in FlxG.touches.list)
|
for (touch in FlxG.touches.list)
|
||||||
{
|
{
|
||||||
if (touch.justPressed)
|
if (touch.justPressed)
|
||||||
{
|
{
|
||||||
pressedEnter = true;
|
pressedEnter = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
||||||
|
|
||||||
if (gamepad != null)
|
if (gamepad != null)
|
||||||
{
|
{
|
||||||
if (gamepad.justPressed.START)
|
if (gamepad.justPressed.START)
|
||||||
pressedEnter = true;
|
pressedEnter = true;
|
||||||
|
|
||||||
#if switch
|
#if switch
|
||||||
if (gamepad.justPressed.B)
|
if (gamepad.justPressed.B)
|
||||||
pressedEnter = true;
|
pressedEnter = true;
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pressedEnter && !transitioning && skippedIntro)
|
if (pressedEnter && !transitioning && skippedIntro)
|
||||||
{
|
{
|
||||||
#if !switch
|
#if !switch
|
||||||
NGio.unlockMedal(60960);
|
NGio.unlockMedal(60960);
|
||||||
|
|
||||||
// If it's Friday according to da clock
|
// If it's Friday according to da clock
|
||||||
if (Date.now().getDay() == 5)
|
if (Date.now().getDay() == 5)
|
||||||
NGio.unlockMedal(61034);
|
NGio.unlockMedal(61034);
|
||||||
#end
|
#end
|
||||||
|
|
||||||
titleText.animation.play('press');
|
if (FlxG.save.data.flashing)
|
||||||
|
titleText.animation.play('press');
|
||||||
FlxG.camera.flash(FlxColor.WHITE, 1);
|
|
||||||
FlxG.sound.play(Paths.sound('confirmMenu'), 0.7);
|
FlxG.camera.flash(FlxColor.WHITE, 1);
|
||||||
|
FlxG.sound.play(Paths.sound('confirmMenu'), 0.7);
|
||||||
transitioning = true;
|
|
||||||
// FlxG.sound.music.stop();
|
transitioning = true;
|
||||||
|
// FlxG.sound.music.stop();
|
||||||
new FlxTimer().start(2, function(tmr:FlxTimer)
|
|
||||||
{
|
new FlxTimer().start(2, function(tmr:FlxTimer)
|
||||||
|
{
|
||||||
// Get current version of Kade Engine
|
// Get current version of Kade Engine
|
||||||
|
|
||||||
var http = new haxe.Http("https://raw.githubusercontent.com/KadeDev/Kade-Engine/master/version.downloadMe");
|
//var http = new haxe.Http("https://raw.githubusercontent.com/KadeDev/Kade-Engine/master/version.downloadMe");
|
||||||
|
var http = new haxe.Http("https://raw.githubusercontent.com/KadeDev/Kade-Engine/patchnotes/version.downloadMe");
|
||||||
http.onData = function (data:String) {
|
var returnedData:Array<String> = [];
|
||||||
|
|
||||||
if (!MainMenuState.kadeEngineVer.contains(data.trim()) && !OutdatedSubState.leftState && MainMenuState.nightly == "")
|
http.onData = function (data:String)
|
||||||
{
|
{
|
||||||
trace('outdated lmao! ' + data.trim() + ' != ' + MainMenuState.kadeEngineVer);
|
returnedData[0] = data.substring(0, data.indexOf(';'));
|
||||||
OutdatedSubState.needVer = data;
|
returnedData[1] = data.substring(data.indexOf('-'), data.length);
|
||||||
FlxG.switchState(new OutdatedSubState());
|
if (!MainMenuState.kadeEngineVer.contains(returnedData[0].trim()) && !OutdatedSubState.leftState && MainMenuState.nightly == "")
|
||||||
}
|
{
|
||||||
else
|
trace('outdated lmao! ' + returnedData[0] + ' != ' + MainMenuState.kadeEngineVer);
|
||||||
{
|
OutdatedSubState.needVer = returnedData[0];
|
||||||
FlxG.switchState(new MainMenuState());
|
OutdatedSubState.currChanges = returnedData[1];
|
||||||
}
|
FlxG.switchState(new OutdatedSubState());
|
||||||
}
|
}
|
||||||
|
else
|
||||||
http.onError = function (error) {
|
{
|
||||||
trace('error: $error');
|
FlxG.switchState(new MainMenuState());
|
||||||
FlxG.switchState(new MainMenuState()); // fail but we go anyway
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
http.request();
|
http.onError = function (error) {
|
||||||
|
trace('error: $error');
|
||||||
});
|
FlxG.switchState(new MainMenuState()); // fail but we go anyway
|
||||||
// FlxG.sound.play(Paths.music('titleShoot'), 0.7);
|
}
|
||||||
}
|
|
||||||
|
http.request();
|
||||||
if (pressedEnter && !skippedIntro && initialized)
|
});
|
||||||
{
|
// FlxG.sound.play(Paths.music('titleShoot'), 0.7);
|
||||||
skipIntro();
|
}
|
||||||
}
|
|
||||||
|
if (pressedEnter && !skippedIntro && initialized)
|
||||||
super.update(elapsed);
|
{
|
||||||
}
|
skipIntro();
|
||||||
|
}
|
||||||
function createCoolText(textArray:Array<String>)
|
|
||||||
{
|
super.update(elapsed);
|
||||||
for (i in 0...textArray.length)
|
}
|
||||||
{
|
|
||||||
var money:Alphabet = new Alphabet(0, 0, textArray[i], true, false);
|
function createCoolText(textArray:Array<String>)
|
||||||
money.screenCenter(X);
|
{
|
||||||
money.y += (i * 60) + 200;
|
for (i in 0...textArray.length)
|
||||||
credGroup.add(money);
|
{
|
||||||
textGroup.add(money);
|
var money:Alphabet = new Alphabet(0, 0, textArray[i], true, false);
|
||||||
}
|
money.screenCenter(X);
|
||||||
}
|
money.y += (i * 60) + 200;
|
||||||
|
credGroup.add(money);
|
||||||
function addMoreText(text:String)
|
textGroup.add(money);
|
||||||
{
|
}
|
||||||
var coolText:Alphabet = new Alphabet(0, 0, text, true, false);
|
}
|
||||||
coolText.screenCenter(X);
|
|
||||||
coolText.y += (textGroup.length * 60) + 200;
|
function addMoreText(text:String)
|
||||||
credGroup.add(coolText);
|
{
|
||||||
textGroup.add(coolText);
|
var coolText:Alphabet = new Alphabet(0, 0, text, true, false);
|
||||||
}
|
coolText.screenCenter(X);
|
||||||
|
coolText.y += (textGroup.length * 60) + 200;
|
||||||
function deleteCoolText()
|
credGroup.add(coolText);
|
||||||
{
|
textGroup.add(coolText);
|
||||||
while (textGroup.members.length > 0)
|
}
|
||||||
{
|
|
||||||
credGroup.remove(textGroup.members[0], true);
|
function deleteCoolText()
|
||||||
textGroup.remove(textGroup.members[0], true);
|
{
|
||||||
}
|
while (textGroup.members.length > 0)
|
||||||
}
|
{
|
||||||
|
credGroup.remove(textGroup.members[0], true);
|
||||||
override function beatHit()
|
textGroup.remove(textGroup.members[0], true);
|
||||||
{
|
}
|
||||||
super.beatHit();
|
}
|
||||||
|
|
||||||
logoBl.animation.play('bump');
|
override function beatHit()
|
||||||
danceLeft = !danceLeft;
|
{
|
||||||
|
super.beatHit();
|
||||||
if (danceLeft)
|
|
||||||
gfDance.animation.play('danceRight');
|
logoBl.animation.play('bump');
|
||||||
else
|
danceLeft = !danceLeft;
|
||||||
gfDance.animation.play('danceLeft');
|
|
||||||
|
if (danceLeft)
|
||||||
FlxG.log.add(curBeat);
|
gfDance.animation.play('danceRight');
|
||||||
|
else
|
||||||
switch (curBeat)
|
gfDance.animation.play('danceLeft');
|
||||||
{
|
|
||||||
case 1:
|
FlxG.log.add(curBeat);
|
||||||
createCoolText(['ninjamuffin99', 'phantomArcade', 'kawaisprite', 'evilsk8er']);
|
|
||||||
// credTextShit.visible = true;
|
switch (curBeat)
|
||||||
case 3:
|
{
|
||||||
addMoreText('present');
|
case 1:
|
||||||
// credTextShit.text += '\npresent...';
|
createCoolText(['ninjamuffin99', 'phantomArcade', 'kawaisprite', 'evilsk8er']);
|
||||||
// credTextShit.addText();
|
// credTextShit.visible = true;
|
||||||
case 4:
|
case 3:
|
||||||
deleteCoolText();
|
addMoreText('present');
|
||||||
// credTextShit.visible = false;
|
// credTextShit.text += '\npresent...';
|
||||||
// credTextShit.text = 'In association \nwith';
|
// credTextShit.addText();
|
||||||
// credTextShit.screenCenter();
|
case 4:
|
||||||
case 5:
|
deleteCoolText();
|
||||||
if (Main.watermarks)
|
// credTextShit.visible = false;
|
||||||
createCoolText(['Kade Engine', 'by']);
|
// credTextShit.text = 'In association \nwith';
|
||||||
else
|
// credTextShit.screenCenter();
|
||||||
createCoolText(['In Partnership', 'with']);
|
case 5:
|
||||||
case 7:
|
if (Main.watermarks)
|
||||||
if (Main.watermarks)
|
createCoolText(['Kade Engine', 'by']);
|
||||||
addMoreText('KadeDeveloper');
|
else
|
||||||
else
|
createCoolText(['In Partnership', 'with']);
|
||||||
{
|
case 7:
|
||||||
addMoreText('Newgrounds');
|
if (Main.watermarks)
|
||||||
ngSpr.visible = true;
|
addMoreText('KadeDeveloper');
|
||||||
}
|
else
|
||||||
// credTextShit.text += '\nNewgrounds';
|
{
|
||||||
case 8:
|
addMoreText('Newgrounds');
|
||||||
deleteCoolText();
|
ngSpr.visible = true;
|
||||||
ngSpr.visible = false;
|
}
|
||||||
// credTextShit.visible = false;
|
// credTextShit.text += '\nNewgrounds';
|
||||||
|
case 8:
|
||||||
// credTextShit.text = 'Shoutouts Tom Fulp';
|
deleteCoolText();
|
||||||
// credTextShit.screenCenter();
|
ngSpr.visible = false;
|
||||||
case 9:
|
// credTextShit.visible = false;
|
||||||
createCoolText([curWacky[0]]);
|
|
||||||
// credTextShit.visible = true;
|
// credTextShit.text = 'Shoutouts Tom Fulp';
|
||||||
case 11:
|
// credTextShit.screenCenter();
|
||||||
addMoreText(curWacky[1]);
|
case 9:
|
||||||
// credTextShit.text += '\nlmao';
|
createCoolText([curWacky[0]]);
|
||||||
case 12:
|
// credTextShit.visible = true;
|
||||||
deleteCoolText();
|
case 11:
|
||||||
// credTextShit.visible = false;
|
addMoreText(curWacky[1]);
|
||||||
// credTextShit.text = "Friday";
|
// credTextShit.text += '\nlmao';
|
||||||
// credTextShit.screenCenter();
|
case 12:
|
||||||
case 13:
|
deleteCoolText();
|
||||||
addMoreText('Friday');
|
// credTextShit.visible = false;
|
||||||
// credTextShit.visible = true;
|
// credTextShit.text = "Friday";
|
||||||
case 14:
|
// credTextShit.screenCenter();
|
||||||
addMoreText('Night');
|
case 13:
|
||||||
// credTextShit.text += '\nNight';
|
addMoreText('Friday');
|
||||||
case 15:
|
// credTextShit.visible = true;
|
||||||
addMoreText('Funkin'); // credTextShit.text += '\nFunkin';
|
case 14:
|
||||||
|
addMoreText('Night');
|
||||||
case 16:
|
// credTextShit.text += '\nNight';
|
||||||
skipIntro();
|
case 15:
|
||||||
}
|
addMoreText('Funkin'); // credTextShit.text += '\nFunkin';
|
||||||
}
|
|
||||||
|
case 16:
|
||||||
var skippedIntro:Bool = false;
|
skipIntro();
|
||||||
|
}
|
||||||
function skipIntro():Void
|
}
|
||||||
{
|
|
||||||
if (!skippedIntro)
|
var skippedIntro:Bool = false;
|
||||||
{
|
|
||||||
remove(ngSpr);
|
function skipIntro():Void
|
||||||
|
{
|
||||||
FlxG.camera.flash(FlxColor.WHITE, 4);
|
if (!skippedIntro)
|
||||||
remove(credGroup);
|
{
|
||||||
skippedIntro = true;
|
remove(ngSpr);
|
||||||
}
|
|
||||||
}
|
FlxG.camera.flash(FlxColor.WHITE, 4);
|
||||||
}
|
remove(credGroup);
|
||||||
|
skippedIntro = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user