GithubHelp home page GithubHelp logo

zpchavez / bartizan Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kha/bartizan

4.0 3.0 2.0 40.21 MB

Mod Framework for TowerFall Ascension

C# 84.73% Shell 0.68% JavaScript 1.22% TypeScript 13.25% CSS 0.06% HTML 0.05%

bartizan's Introduction

Bartizan Plus TowerFall Modding Framework

This is a fork of Bartizan, the mod framework for TowerFall.

What's New

  • Easy-to-use GUI patcher for applying the mods
  • Support for 8-player and 4-player versions
  • Support for Steam and Itch versions
  • Many new variants
  • Bug fixes
    • Fixed glitched replay gifs by removing screen shake from replays
    • Fixed bug on some 8-player levels where asymmetrical treasure spawns even though symmetrical treasure variant is enabled
    • Fixed bug where the game starts with rumble on even when the setting is set to off

What's The Same

  • All the game modes, variants, and UI enhancements from the original Bartizan remain

What's Missing

  • The dev mods from the original Bartizan have not been maintained, so they do not work.

Under The Hood Changes

  • Uses MonoMod instead of Bartizan's Patcher to patch in mod code
  • Patcher is still used to
    • Create BaseTowerFall.exe
    • Compile graphics into atlas files

How to Patch your game

Download the latest version of the patcher from the releases page

Variants

New

Crown Summons Chalice Ghost

In this mode, putting on someone's fallen crown summons the chalice ghost. If the crown is knocked off or the player dies, the chalice ghost vanishes.

Chalice Ghosts Hunt Ghosts

Chalice ghosts will go after player ghosts in addition to players.

Gotta Bust Ghosts

The round won't end until all ghosts have been busted.

Variety Pack

Start with one of every arrow type

Fast Ghosts

Ghost are faster

CalvinFall

New random variants every round!

Ghost Revives

Ghosts can revive, but you can't revive yourself.

Ghost Items

Ghosts can get powerups (everything except arrows).

Ghost Joust

Ghosts can kill other ghosts by dashing into them.

Meaner Monsters

Enemies other than bats and green slimes will come out of dark portals.

From the original Bartizan

No Head Bounce

No Ledge Grab

Koala hunters no more.

Awfully Slow Arrows

Awfully Fast Arrows

Infinite Arrows

No Dodge Cooldowns

UI Enhancements

Win Counter

Resets when you return to the Player Select screen.

Game Modes

Respawn

Best played with Gunn Style activated, obviously. Not shown on the replay gifs: our awesome in-game kill count HUDs!

Crawl

Variants: No Balancing, No Treasure, Start with Toy Arrows

Inspired by a certain other indie game - kill living players to regain your humanity! Unlike in other game modes, you score points for killing enemy ghosts. This may be our most ambitious mod yet, and therefore not quite yet balanced. Toy arrows are a good way to nerf living players if you feel the ghosts are too weak.

How to work on your own mods

This is a little different than the original Bartizan, and it differs between Windows and Mac.

Note: you may need to use Visual Studio 2019, since later versions can't target .NET 4.0

In bin, create a directory called originals. Inside that directory create directories for the versions of TowerFall you'll be working with. For the Steam version name it 4-player. For the 4-player Itch version name it 4-player-itch. For 8-player name it 8-player. Finally, copy the corresponding TowerFall.exe files into those directories.

On Mac, copy FNA.dll into bin.

There are multiple build configs for the Mod project that you can use depending on which version you are patching and whether you are including certain features in the build.

After building, a releasable build will be output at /bin/builds whose directory will match the name of the one in /bin/originals. Also, a copy of the patched TowerFall.exe will be copied to TowerFall-4-player.exe or TowerFall-8-player.exe, etc.

In order to work without patching the game after every build, create a copy of TF that includes the following symlinks (Using 8-player as an example. Replace 8 with 4 as needed):

  • TowerFall.exe -> <BartizanPath>/bin/TowerFall-8-player.exe (this should replace the existing TowerFall.exe)
  • Content/Atlas/modAtlas.png -> <BartizanPath>/bin/builds/8-player/modAtlas.png
  • Content/Atlas/modAtlas.xml -> <BartizanPath>/bin/builds/8-player/modAtlas.xml

Then any time you build the Mod project, just run that copy of TowerFall and it will have the latest changes.

Note that when you change build configurations, you may need to manually switch which BaseTowerFall.exe you include in your references for the Mod project. If you see a compile error about the number of arguments not matching, this is likely the issue.

Windows Specific Things

Check out the windows-build branch of the repo.

You'll need to copy the following dll files to bin.

  • Microsoft.Xna.Framework.dll
  • Microsoft.Xna.Framework.Game.dll
  • Microsoft.Xna.Framework.Graphics.dll
  • Microsoft.Xna.Framework.Net.dll
  • Microsoft.Xna.Framework.Xact.dll

These files can be found in c:\Windows\Microsoft.NET\assembly\GAC_32 and c:\Windows\Microsoft.NET\assembly\GAC_MSIL.

bartizan's People

Contributors

kha avatar liruenth avatar tehmillhouse avatar terria-k avatar zpchavez avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

liruenth terria-k

bartizan's Issues

Crash when trying to play a level in the editor

System.Exception: No defined Round Logic for that mode!
  at TowerFall.RoundLogic.GetMyRoundLogic (TowerFall.Session ) [0x000ab] in <6a4b78a95e324850a35a269a354e702e>:0 
  at TowerFall.Session.LevelLoadStart (TowerFall.Level level) [0x00008] in <6a4b78a95e324850a35a269a354e702e>:0 
  at TowerFall.LevelLoaderXML+<Load>d__0.MoveNext () [0x002ae] in <6a4b78a95e324850a35a269a354e702e>:0 
  at Monocle.Coroutine+<DoNoFrameSkip>d__3.MoveNext () [0x00091] in <6a4b78a95e324850a35a269a354e702e>:0 
  at Monocle.Coroutine.Update () [0x0009c] in <6a4b78a95e324850a35a269a354e702e>:0 
  at TowerFall.LevelLoaderXML.Update () [0x00001] in <6a4b78a95e324850a35a269a354e702e>:0 
  at Monocle.Engine.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x000c7] in <6a4b78a95e324850a35a269a354e702e>:0 
  at TowerFall.TFGame.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x00019] in <6a4b78a95e324850a35a269a354e702e>:0 
  at Microsoft.Xna.Framework.Game.Tick () [0x00202] in <ce8f172d01894c0192c5d4db4f3826f7>:0 
  at Microsoft.Xna.Framework.Game.RunLoop () [0x0003c] in <ce8f172d01894c0192c5d4db4f3826f7>:0 
  at Microsoft.Xna.Framework.Game.Run () [0x00032] in <ce8f172d01894c0192c5d4db4f3826f7>:0 
  at TowerFall.TFGame.Main (System.String[] args) [0x00207] in <6a4b78a95e324850a35a269a354e702e>:0 ```

Crash in trials mode

This is happening because I used the Dummy tag for team revivers. I needed a tag to use and so I picked an existing one that wasn't used in 8-player. But now that there's a 4-player build I may need to find another solution

Ver 1.3.3.3
2/16/2022 1:55:46 PM
Debug Flags: 0000 - 0
System.InvalidCastException: Unable to cast object of type 'TowerFall.Dummy' to type 'TowerFall.MyTeamReviver'.
   at TowerFall.GameplayLayer.BatchedRender()
   at Monocle.Layer.Render()
   at TowerFall.Level.CoreRender(RenderTarget2D canvas)
   at TowerFall.Level.Render()
   at Monocle.Engine.Draw(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.DrawFrame()
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.Game.HostIdle(Object sender, EventArgs e)
   at Microsoft.Xna.Framework.GameHost.OnIdle()
   at Microsoft.Xna.Framework.WindowsGameHost.RunOneFrame()
   at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object sender, EventArgs e)
   at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at Microsoft.Xna.Framework.WindowsGameHost.Run()
   at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
   at TowerFall.TFGame.Main(String[] args)

The Patching Process

This is an incredibly hard framework to use. The custom mod section needs to be updated to be more clear.
However, I got it to patch after trying hard (using Windows-build.)
It created a vanilla Towerfall with the MonoMod piece of MonoMod.WasHere.
Here is a copy of the Mod.dll
ModDll.zip
Also, some scripts attempt to modify protected classes and tries to override some nonexistent classes.
Finally, thanks for putting in the effort to keep the modding framework alive.

Exploding shields

Shields explode when they are popped. The shield owner is immune to the blast.

Instructions for modding

Dear @zpchavez,
The instructions for making custom mods are very unclear, and have no information on how to make a mod.dll.
Can you please help explain how to do this?
From,
CoolModder

Windows Build

Notes for building on windows:

  1. Instead of FNA.dll use Microsoft.Xna.Framework dll files located at c:\Windows\Microsoft.NET\assembly\GAC_32 and c:\Windows\Microsoft.NET\assembly\GAC_MSIL
  2. Use Visual Studio 2019. Later versions can't target .NET 4.0
  3. Use windows-build branch
  4. For 8-player use 8-Player Windows build config

Can't build on ubuntu 18.04

I tried build with xbuild but I get this error:

Classes/Patched/MyMatchSettings.cs(20,24): error CS1501: No overload for method 'PlayerGoals' takes 7 arguments
Classes/Patched/MyVersusPlayerMatchResults.cs(17,9): error CS1729: 'VersusPlayerMatchResults' does not contain a constructor that takes 7 arguments
			Task "Csc" execution -- FAILED
			Done building target "CoreCompile" in project "/mnt/home/kryspin/Pobrane/Github/Bartizan/Mod/Mod.csproj".-- FAILED
		Done building project "/mnt/home/kryspin/Pobrane/Github/Bartizan/Mod/Mod.csproj".-- FAILED
	Task "MSBuild" execution -- FAILED
	Done building target "Build" in project "/mnt/home/kryspin/Pobrane/Github/Bartizan/Bartizan.sln".-- FAILED
Done building project "/mnt/home/kryspin/Pobrane/Github/Bartizan/Bartizan.sln".-- FAILED

Build FAILED.
Errors:

/mnt/home/kryspin/Pobrane/Github/Bartizan/Bartizan.sln (default targets) ->
(Build target) ->
/mnt/home/kryspin/Pobrane/Github/Bartizan/Mod/Mod.csproj (default targets) ->
/usr/lib/mono/xbuild/14.0/bin/Microsoft.CSharp.targets (CoreCompile target) ->

	Classes/Patched/MyMatchSettings.cs(20,24): error CS1501: No overload for method 'PlayerGoals' takes 7 arguments
	Classes/Patched/MyVersusPlayerMatchResults.cs(17,9): error CS1729: 'VersusPlayerMatchResults' does not contain a constructor that takes 7 arguments

	 0 Warning(s)
	 2 Error(s)

Time Elapsed 00:00:01.8464010

mono --version :

Mono JIT compiler version 5.16.0.179 (tarball Thu Oct  4 10:20:38 UTC 2018)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  amd64
	Disabled:      none
	Misc:          softdebug 
	Interpreter:   yes
	LLVM:          yes(3.6.0svn-mono-/)
	GC:            sgen (concurrent by default)

build.log

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.