Git Product home page Git Product logo

fortrise's Introduction

FortRise - TowerFall Mod Loader

It's a mod loader for TowerFall Dark World (created by Maddy Thorson). It's using MonoMod an open-source C# modding utility.

Installation

Pyrgos:

  • Download and Install pyrgos.
  • Launch pyrgos.
  • Add a TowerFall directory to the launcher.
  • Click the hammer icon next to the play button.
  • Click the installer versions you have in the launcher, if you haven't had one, download an installer inside of the launcher.
  • Wait for it to patch.
  • Done! And click the play button to see the changes.

Full CLI

  • Go to the Releases page, and download the latest installer in zip file.
    • NoAnsi for Windows, OSXLinux for Mac and Linux.
  • Extract all of the contents and open the command line.
  • Type Installer.NoAnsi.exe --patch "<Path to TowerFall>" to do install and patch TowerFall.
    • Installer.NoAnsi.bin.osx for Mac and Installer.NoAnsi.bin.x86_64 for Linux.
  • Wait for it to patch.
  • And, it's done! Launch TowerFall and it should have a mods section in main menu.

Note

Installer.NoAnsi.exe must run through a terminal or a command prompt. It means, you must go to the directory where the Installer.NoAnsi.exe is on by running cd command in the terminal.

Mod Installation

  • For installing a mod, you must create a directory called Mods.
  • Then create a folder inside of it and name what it represent the mod is.
  • Paste all of the mod content and done.
  • Launch TowerFall to see the changes.

Creating mods

For creating mods, check out Creating Mods in the wiki, for more information.

Troubleshooting

The game crashes before it even loads! (Windows only)

If the game crashes before loading, or you see an error in the log file that says An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. on Windows, right click for each DLLs on the root directory, click Properties, and hit the unblock checkbox at the bottom. You might also need to unblock every DLLs of the mod you've installed inside of the Mods folder.

Pyrgos does not launch

If you are on Windows, you might not have Webview2 installed on your system. Pyrgos relies on Webview2 for UI. If you do not want to install Webview2, you better go off using the CLI Installer instead. If your pc has it and it still does not work, you can report it into the official TowerFall Discord server under the #modding channel.

Join the official TowerFall Discord Server, we can help you here!

TowerFall

Mods Created in FortRise

Add Custom Archers for Towerfall easily by just Drag n Drop and create Archers with custom hair, wings, ghost, particles, layers and even taunts and skins for archers. archer-loader

By: DShad

TF EX is a mod that attempt to bring netplay to TowerFall (EX as a Fighting game EX move, usually costing meter). netplay

By: Terria and RedDude

Ported 8P mode as a FortRise mod with wider level set and additional Co-Op wide quest. eight-player-versus eight-player-quest

Enjoy the chaos of ten new arrows, with more on the way! oops-all-arrows

Roadmap

Check the roadmap for planned features.

fortrise's People

Contributors

terria-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

batuhanson

fortrise's Issues

Improve gamemode API

The current approach for gamemode right now is by declaring a custom VersusRoundLogic with CustomRoundLogic attribute and some undocumented static method that you had to do in order to be rendered in the Versus Selection Menu. This works, but it doesn't cover the custom LevelSystem or anything related to gamemode, and I want some improvement to the gamemode API. I still want to support the old API for backward compatibility.

My current idea for a new implementation for gamemode API:

[CustomGameMode("ModName/ModeName")]
public class NewMode : GameMode 
{
     public override RoundLogic Logic => // ...;

     public override LevelSystem LevelSystem => // ...;

    public override GameMode Initialize(GameModeBuilder create) 
     {
             return create
                      //.Coop()
                      .Versus()
                      .Icon(/*Subtexture*/)
                      .DisplayName("Awesome GameMode")
                      .Build(this);
     }
}

This way, they can be both Versus or Co-Op and cover the LevelSystem or maybe other game mode related things. But this is just my idea, and it could possibly support backward compatibility for the old API.

Custom Towers Not Working On Normal Mode

Crashes upon entering a custom workshop level.
Error:

TowerFall Error Log
==========================================
>>>>>

Ver 1.3.3.3
10/6/2023 9:37:11 PM
Debug Flags: 0000 - 0 - Player: Normal
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at TowerFall.TreasureSpawner..ctor(Session session, Int32[] mask, Single arrowChance, Boolean arrowShuffle)
   at TowerFall.CustomLevelSystem.GetTreasureSpawner(Session session)
   at DMD<TowerFall.Session::StartGame>(Session this)
   at DMD<TowerFall.MapScene::StartSession>(MapScene this)
   at Trampoline<TowerFall.MapScene::StartSession>?18473894(MapScene )
   at EightPlayerMod.MapButtonPatch.MapSceneStartSession_patch(orig_StartSession orig, MapScene self)
   at Hook<TowerFall.MapScene::StartSession>?53451813(MapScene )
   at Monocle.Alarm.Update()
   at Monocle.Entity.Update()
   at Monocle.Layer.Update()
   at Monocle.Scene.Update()
   at TowerFall.MapScene.orig_Update()
   at TowerFall.MapScene.Update()
   at Monocle.Engine.Update(GameTime gameTime)
   at TowerFall.TFGame.orig_Update(GameTime gameTime)
   at TowerFall.TFGame.Update(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.Game.RunLoop()
   at Microsoft.Xna.Framework.Game.Run()
   at TowerFall.TFGame.orig_Main(String[] args)

Tower: ShootingRange.zip

Possibly a bad path on Linux

My son has been trying to run FortRise, but there seems to be an issue on Linux. This is the error that I am seeing when I select the "Launch TowerFall" button:

   at FortLauncher.Launcher.MenuButtons_LaunchTowerFall() in D:\Project\FNA Project\FortLauncher\Launcher\Widgets\MenuButtons.cs:line 127
System.ComponentModel.Win32Exception (8): An error occurred trying to start process '/home/mungus/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/TowerFall/TowerFall.exe' with working directory '/home/mungus/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/TowerFall'. Exec format error

My guess is that it is assuming an .exe file, but being Linux, that won't work. Other than the TowerFall.exe the path would be correct.

Slow OGG Decoder

The ogg decoder right now is very slow and inefficient and will freeze for a millisecond every time it loops.

Static VariantsManager?

I am trying to update the variants loading to avoid depreciated functions. It appears VariantsManager is set to static, preventing me from making variants in the new system.
Code:
var IceArrow = FortRise.VariantManager.AddVariant(new CustomVariantInfo("StartWithIceArrows", VariantAtlas["StartWithIceArrows"],CustomVariantFlags.CanRandom | CustomVariantFlags.PerPlayer), false);
Error: An Object Reference Is Required For The Static Method "FortRise.VariantManager.AddVariant"

Custom settings not appearing in settings

For one of my mods, the custom settings stopped appearing in 4.1.0. Was their an API change?
Code:

public override void CreateModSettings(List<OptionsButton> optionList)
    {
        var optionButton = new OptionsButton("TITLE MODE");
        optionButton.SetCallbacks(
            ()=> {optionButton.State = SettingName();}, 
            ()=> {Settings.MenuVariant--; SettingName(); }, 
            ()=>{Settings.MenuVariant++; SettingName(); },
            null
        );
        optionList.Add(optionButton);
        var optionBezelButton = new OptionsButton("BEZEL MODE");
        optionBezelButton.SetCallbacks(
            () => { optionBezelButton.State = SideSettingName(); },
            () => { Settings.BezelVariant--; SideSettingName(); },
            () => { Settings.BezelVariant++; SideSettingName(); },
            null
        );
        optionList.Add(optionButton);
        optionList.Add(optionBezelButton);
        string SideSettingName()
        {
            optionBezelButton.CanLeft = Settings.BezelVariant > 0;
            optionBezelButton.CanRight = Settings.BezelVariant < BezelLoad.BezelNames.Count - 1;
            Refresher.RefreshBezel();
            return BezelLoad.BezelNames[Settings.BezelVariant];
        }
        string SettingName()
        {
            Refresher.RefreshLogo();
            optionButton.CanLeft = Settings.MenuVariant > 0;
            optionButton.CanRight = Settings.MenuVariant < MenuVariantNames.Count - 1;
            return MenuVariantNames[Settings.MenuVariant];
        }

    }

From: Towerfall-Redemption/MenuVariantsMod/ExampleModModule.cs Line 58

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.