Skip to content
This repository was archived by the owner on Jun 25, 2024. It is now read-only.
Open

:) #323

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export/
.vscode/
.idea/
vscode-project.hxml
*.fla
1 change: 0 additions & 1 deletion Project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
<!-- <library name="noPreload"/> -->
<assets path="assets/music"/>
<assets path="assets/sounds"/>
<assets path="assets/discord"/>
<assets path='TempFiles' rename='Templates' embed='false'/>

<assets path="CHANGELOG.md"/>
Expand Down
115 changes: 18 additions & 97 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,97 +1,18 @@
# Friday Night Funkin
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FTheDrawingCoder-Gamer%2FFunkin%2Fbadge%3Fref%3Dmaster&style=for-the-badge)](https://actions-badge.atrox.dev/TheDrawingCoder-Gamer/Funkin/goto?ref=master)
![Azure DevOps builds](https://img.shields.io/azure-devops/build/benharless820/7af207e5-72fd-483f-9a48-6fc65e63abb9/4?label=pipelines&style=for-the-badge)
[![forthebadge](https://forthebadge.com/images/badges/fuck-it-ship-it.svg)](https://forthebadge.com)
[![forthebadge](https://forthebadge.com/images/badges/works-on-my-machine.svg)](https://forthebadge.com)
[![forthebadge](https://forthebadge.com/images/badges/contains-tasty-spaghetti-code.svg)](https://forthebadge.com)
[![forthebadge](https://forthebadge.com/images/badges/it-works-why.svg)](https://forthebadge.com)
[![forthebadge](https://forthebadge.com/images/badges/just-plain-nasty.svg)](https://forthebadge.com)

This is the repository for Friday Night Funkin Modding Plus, a mod for FNF to add more features for modders and players alike.

Any mods made with this mod must have express permission from the creator of songs included.
(for example, if you include the Whitty Mod, you should have express permission from Nate Anim8, KadeDev, and SockClip.
I at least would like to see the main author and a majority of secondary offers get express permission)
If an author gives express disapproval, and the mod is up, you should take your mod down. I own the code to this mod so I can (and will)
take down mods that don't follow this rule.


- Get the cutting edge build: https://dev.azure.com/benharless820/FNF%20Modding%20Plus/_build
- Play the Original Game: https://github.com/ninjamuffin99/Funkin
- Need Help? FNF Modding Plus Discord: https://discord.gg/xeC748FR
- Trello Page (todo list): https://trello.com/b/cFjJJIjF/fnf-modding-plus
## Credits for the Original Game

- [ninjamuffin99](https://twitter.com/ninja_muffin99) - Programmer
- [PhantomArcade3K](https://twitter.com/phantomarcade3k) and [Evilsk8r](https://twitter.com/evilsk8r) - Art
- [KawaiSprite](https://twitter.com/kawaisprite) - Musician
## Modding+ Credits

- [BulbyVR](https://github.com/TheDrawingCoder-Gamer) - Owner/Programmer
- [DJ Popsicle](https://gamebanana.com/members/1780306) - Co-Owner/Additional Programmer
- [Matheus L/Mlops](https://gamebanana.com/members/1767306), [AndreDoodles](https://gamebanana.com/members/1764840), riko, Raf, ElBartSinsoJaJa, and [plum](https://www.youtube.com/channel/UCXbiI4MJD9Y3FpjW61lG8ZQ) - Artist & Animation
- [ThePinkPhantom/JuliettePink](https://gamebanana.com/members/1892442) - Portrait Artist
- [Alex Director](https://gamebanana.com/members/1701629) - Icon Fixer
- [TrafficKid](https://github.com/TrafficKid) - GitHub Wikipedia
- [GwebDev](https://github.com/GrowtopiaFli) - Edited WebM code
- [Axy](https://github.com/AxyGitPoggers) - Poggers help
## Build instructions

THESE INSTRUCTIONS ARE FOR COMPILING THE GAME'S SOURCE CODE!!!

IF YOU WANT TO JUST DOWNLOAD AND INSTALL AND PLAY THE GAME NORMALLY, GO TO GAMEBANANA TO DOWNLOAD THE GAME FOR PC!!

https://gamebanana.com/gamefiles/14264

IF YOU WANT TO COMPILE THE GAME YOURSELF, OR PLAY ON MAC OR LINUX, CONTINUE READING!!!

IF YOU MAKE A MOD AND DISTRIBUTE A MODIFIED / RECOMIPLED VERSION, YOU MUST OPEN SOURCE YOUR MOD AS WELL

### Installing shit

First you need to install Haxe and HaxeFlixel. I'm too lazy to write and keep updated with that setup (which is pretty simple).
The link to that is on the [HaxeFlixel website](https://haxeflixel.com/documentation/getting-started/)

Other installations you'd need is the additional libraries, a fully updated list will be in `Project.xml` in the project root, but here are the one's I'm using as of writing.

```
hscript
flixel-ui
tjson
json2object
uniontypes
hxcpp-debug-server
```

So for each of those type `haxelib install [library]` so shit like `haxelib install hscript`

You'll also need to install hscript-ex. Do this with

```
haxelib git hscript-ex https://github.com/ianharrigan/hscript-ex
```


### Compiling game


To run it from your desktop (Windows, Mac, Linux) it can be a bit more involved. For Linux, you only need to open a terminal in the project directory and run 'lime test linux -debug' and then run the executible file in export/release/linux/bin. For Windows, you need to install Visual Studio Community 2019. While installing VSC, 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
* Windows SDK (10.0.17763.0)
* C++ Profiling tools
* C++ CMake tools for windows
* C++ ATL for v142 build tools (x86 & x64)
* C++ MFC for v142 build tools (x86 & x64)
* C++/CLI support for v142 build tools (14.21)
* C++ Modules for v142 build tools (x64/x86)
* Clang Compiler for Windows
* Windows 10 SDK (10.0.17134.0)
* Windows 10 SDK (10.0.16299.0)
* MSVC v141 - VS 2017 C++ x64/x86 build tools
* MSVC v140 - VS 2015 C++ build tools (v14.00)

This will install about 22GB of crap, but once that is done you can open up a command line in the project's directory and run `lime test windows -debug`. Once that command finishes (it takes forever even on a higher end PC), you can run FNF from the .exe file under export\release\windows\bin
As for Mac, 'lime test mac -debug' should work, if not the internet surely has a guide on how to compile Haxe stuff for Mac.
### Additional guides

- [Command line basics](https://ninjamuffin99.newgrounds.com/news/post/1090480)
im done letting people think drippy is a good person.
she fucked up so hard intentionally and still says that she did nothing wrong and that im in the wrong.
look at the gdrive, full dms leak.
i dont condone leaking dms normally but im tired of letting people get affected by her, SUCK MY ASS DRIPPY.
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
https://drive.google.com/drive/folders/1jydp46vlIgMIfcvl2Ab8oMyV8nwGPX2H?usp=sharing
SUCK MY FUCKING ASS.
148 changes: 148 additions & 0 deletions animateatlas/AtlasFrameMaker.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
package animateatlas;
import flixel.util.FlxDestroyUtil;
import openfl.geom.Rectangle;
import flixel.math.FlxPoint;
import flixel.math.FlxRect;
import openfl.Assets;
import haxe.Json;
import openfl.display.BitmapData;
import animateatlas.JSONData.AtlasData;
import animateatlas.JSONData.AnimationData;
import animateatlas.displayobject.SpriteAnimationLibrary;
import animateatlas.displayobject.SpriteMovieClip;
import flixel.graphics.FlxGraphic;
import flixel.graphics.frames.FlxFramesCollection;
import flixel.graphics.frames.FlxFrame;
class AtlasFrameMaker extends FlxFramesCollection{


//public static var widthoffset:Int = 0;
//public static var heightoffset:Int = 0;
//public static var excludeArray:Array<String>;
/**

* Creates Frames from TextureAtlas(very early and broken ok) Originally made for FNF HD by Smokey and Rozebud
*
* @param key The file path.
* @param _excludeArray Use this to only create selected animations. Keep null to create all of them.
*
*/

public static function construct(key:String,?_excludeArray:Array<String> = null):FlxFramesCollection{

// widthoffset = _widthoffset;
// heightoffset = _heightoffset;



var frameCollection:FlxFramesCollection;
var frameArray:Array<Array<FlxFrame>> = [];
var animationData:AnimationData = Json.parse(Assets.getText(key + "/Animation.json"));
var atlasData:AtlasData = Json.parse(Assets.getText(key + "/spritemap.json"));
var bitmapData:BitmapData = Assets.getBitmapData(key + "/spritemap.png");
var ss = new SpriteAnimationLibrary(animationData, atlasData, bitmapData);
var t = ss.createAnimation();
if(_excludeArray == null){
_excludeArray = t.getFrameLabels();
}
frameCollection = new FlxFramesCollection(FlxGraphic.fromBitmapData(bitmapData),FlxFrameCollectionType.IMAGE);


for(x in t.getFrameLabels()){

frameArray.push(getFramesArray(t, x,_excludeArray));


}

for(x in frameArray){
for(y in x){
frameCollection.pushFrame(y);
}
}

return frameCollection;

}

@:noCompletion static function getFramesArray(t:SpriteMovieClip,animation:String,_excludeArray:Array<String>):Array<FlxFrame>
{
var sizeInfo:Rectangle = new Rectangle(0,0);
t.currentLabel = animation;
var bitMapArray:Array<BitmapData> = [];
var daFramez:Array<FlxFrame> = [];
var firstPass = true;
var frameSize:FlxPoint = new FlxPoint(0,0);

for (i in t.getFrame(animation)...t.numFrames){
t.currentFrame = i;
if (t.currentLabel == animation){
if (_excludeArray.contains(animation)){
sizeInfo = t.getBounds(t);

var bitmapShit:BitmapData = new BitmapData(
Std.int(sizeInfo.width + Math.abs(sizeInfo.x)),Std.int(sizeInfo.height +Math.abs(sizeInfo.y)),true,0);

bitmapShit.draw(t,null,null,null,null,true);
bitMapArray.push(bitmapShit);

if (firstPass){
frameSize.set(bitmapShit.width,bitmapShit.height);
firstPass = false;
}
}
}
else break;
}

for (i in 0...bitMapArray.length){
var b = FlxGraphic.fromBitmapData(bitMapArray[i]);
var theFrame = new FlxFrame(b);
theFrame.parent = b;
theFrame.name = animation + i;
theFrame.sourceSize.set(frameSize.x,frameSize.y);
theFrame.frame = new FlxRect(0, 0, bitMapArray[i].width, bitMapArray[i].height);
daFramez.push(theFrame);

//trace(daFramez);
}
return daFramez;
}

/*public static function renderTest(key:String, animation:String, ?frame:Int = 0):Void
{
var animationData:AnimationData = Json.parse(Assets.getText(key + "/Animation.json"));
var atlasData:AtlasData = Json.parse(Assets.getText(key + "/spritemap.json"));
var bitmapData:BitmapData = Assets.getBitmapData(key + "/spritemap.png");
var ss = new SpriteAnimationLibrary(animationData, atlasData, bitmapData);
var t = ss.createAnimation();
var bitMapArray:Array<BitmapData> = [];

for (i in 0...t.numFrames){
t.currentFrame = i;
if (t.currentLabel == animation){
//trace(t.currentFrame);
var bitmapShit:BitmapData = new BitmapData(Std.int(t.width),Std.int(t.height),true,0);
//bitmapShit.drawWithQuality(t,null,null,null,null,true);
bitmapShit.draw(t, new Matrix(1, 0, 0, 1, t.width/2, t.height/2), null, null, null, false);
bitMapArray.push(bitmapShit);
}
}

saveImage(bitMapArray[frame]);

}

public static function saveImage(bitmapData:BitmapData)
{
var b:ByteArray = new ByteArray();
b = bitmapData.encode(bitmapData.rect, new PNGEncoderOptions(true), b);
new FileDialog().save(b, "png", null, "file");
}
*/





}
21 changes: 21 additions & 0 deletions animateatlas/HelperEnums.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package animateatlas;

enum abstract LoopMode(String) from String to String {
public static inline var LOOP:String = "loop";
public static inline var PLAY_ONCE:String = "playonce";
public static inline var SINGLE_FRAME:String = "singleframe";

public static function isValid(value:String):Bool {
return value == LOOP || value == PLAY_ONCE || value == SINGLE_FRAME;
}
}

enum abstract SymbolType(String) from String to String {
public static inline var GRAPHIC:String = "graphic";
public static inline var MOVIE_CLIP:String = "movieclip";
public static inline var BUTTON:String = "button";

public static function isValid(value:String):Bool {
return value == GRAPHIC || value == MOVIE_CLIP || value == BUTTON;
}
}
Loading