From f8075eb39657fc4b7d6b0a62e8814dec1f162a60 Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Sun, 23 Jun 2024 20:40:23 +0200 Subject: [PATCH 1/4] added gitignore --- .gitignore | 398 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 398 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8a30d25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,398 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml From fdde91ed873adb9605c6aced751fbed73c49a537 Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Sun, 23 Jun 2024 20:43:13 +0200 Subject: [PATCH 2/4] add build action --- .github/workflows/build.yml | 126 ++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..ed6ed13 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,126 @@ +name: Build + +on: + push: + branches: + - '*' + tags: + - '*' + pull_request: + branches: + - '*' + +env: + PROJECT_NAME: AncientMonkey + MELONLOADER_BRANCH: alpha-development + + MOD_HELPER_NAME: Btd6ModHelper + BLOONSTD6: ./BloonsTD6 + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - name: Clone Repo + uses: actions/checkout@master + with: + path: ${{ env.PROJECT_NAME }} + + + - name: Download Latest MelonLoader + if: env.MELONLOADER_BRANCH == '' + uses: robinraju/release-downloader@v1.4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + repository: LavaGang/MelonLoader + fileName: MelonLoader.x64.zip + tarBall: false + zipBall: false + latest: true + - name: Extract Latest MelonLoader + if: env.MELONLOADER_BRANCH == '' + shell: bash + run: unzip MelonLoader.x64.zip -d ${{ env.BLOONSTD6 }} + + + - name: Download Specific MelonLoader + if: env.MELONLOADER_BRANCH != '' + uses: dawidd6/action-download-artifact@v2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + workflow: build.yml + branch: ${{ env.MELONLOADER_BRANCH }} + name: MelonLoader.Linux.x64.CI.Release + repo: LavaGang/MelonLoader + path: ${{ env.BLOONSTD6 }} + + + - name: Clone Dependencies Repo + uses: actions/checkout@master + with: + token: ${{ secrets.GITHUB_TOKEN }} + repository: doombubbles/btd6-ci-dependencies + ref: main + path: ${{ env.BLOONSTD6 }}/MelonLoader/Il2CppAssemblies + + + - name: Download Latest Mod Helper + uses: robinraju/release-downloader@v1.4 + if: env.MOD_HELPER_BRANCH == '' + with: + token: ${{ secrets.GITHUB_TOKEN }} + repository: gurrenm3/BTD-Mod-Helper + fileName: ${{ env.MOD_HELPER_NAME }}.dll + out-file-path: ${{ env.BLOONSTD6 }}/Mods/ + tarBall: false + zipBall: false + latest: true + + + - name: Download Specific Mod Helper + uses: dawidd6/action-download-artifact@v2 + if: env.MOD_HELPER_BRANCH != '' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + workflow: build.yml + name: ${{ env.MOD_HELPER_NAME }}.dll + branch: ${{ env.MOD_HELPER_BRANCH }} + repo: gurrenm3/BTD-Mod-Helper + path: ${{ env.BLOONSTD6 }}/Mods/ + + + - name: Download btd6.targets + shell: bash + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + choco install -y wget + fi + wget https://raw.githubusercontent.com/gurrenm3/BTD-Mod-Helper/master/BloonsTD6%20Mod%20Helper/btd6.targets + + + - name: Setup .NET + uses: actions/setup-dotnet@v2 + with: + dotnet-version: 6.0.x # net6 can still build older as well + + + - name: Build + run: dotnet build -c Release -p:BloonsTD6="../${{ env.BLOONSTD6 }}" "${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj" + + + - name: Upload Mod DLL + uses: actions/upload-artifact@v3 + with: + name: ${{ env.PROJECT_NAME }}.dll + path: ${{ env.BLOONSTD6 }}/Mods/${{ env.PROJECT_NAME }}.dll + + + # - name: Release + # uses: softprops/action-gh-release@v1 + # if: startsWith(github.ref, 'refs/tags/') + # with: + # files: ${{ env.BLOONSTD6 }}/Mods/${{ env.PROJECT_NAME }}.dll + # body_path: ${{ env.PROJECT_NAME }}/LATEST.md + # fail_on_unmatched_files: true From 0710c7d37b994406cb5fcb18eae1ba4be0c01cbc Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Sun, 23 Jun 2024 20:53:53 +0200 Subject: [PATCH 3/4] simple reformat to fix all the warnings --- AncientMonkey.cs | 175 +- AncientMonkey.csproj | 46 +- Challenge/ChallengeButton.cs | 230 +- Challenge/ChallengePanel.cs | 134 +- Challenge/ChallengeTemplate.cs | 72 +- Challenge/Challenges.cs | 251 +- Main.cs | 3644 ++++++++++++++-------------- ModHelperData.cs | 12 +- PlasmaEffects.cs | 126 +- Weapons-Ability/Ability.cs | 670 +++-- Weapons-Ability/AbilityTemplate.cs | 34 +- Weapons-Ability/Common.cs | 732 +++--- Weapons-Ability/Epic.cs | 2392 +++++++++--------- Weapons-Ability/Exotic.cs | 1289 +++++----- Weapons-Ability/Godly.cs | 381 ++- Weapons-Ability/Legendary.cs | 1952 ++++++++------- Weapons-Ability/Omega.cs | 521 ++-- Weapons-Ability/Rare.cs | 1334 +++++----- Weapons-Ability/WeaponTemplate.cs | 58 +- 19 files changed, 6879 insertions(+), 7174 deletions(-) diff --git a/AncientMonkey.cs b/AncientMonkey.cs index eb19957..223f713 100644 --- a/AncientMonkey.cs +++ b/AncientMonkey.cs @@ -1,124 +1,95 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BTD_Mod_Helper; +using BTD_Mod_Helper.Api; +using BTD_Mod_Helper.Api.Display; +using BTD_Mod_Helper.Api.Enums; using BTD_Mod_Helper.Api.Towers; -using BTD_Mod_Helper; +using BTD_Mod_Helper.Extensions; +using HarmonyLib; +using Il2CppAssets.Scripts.Models; +using Il2CppAssets.Scripts.Models.Audio; using Il2CppAssets.Scripts.Models.Bloons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Projectiles; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.TowerSets; -using Il2CppAssets.Scripts.Unity; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Towers; -using BTD_Mod_Helper; using Il2CppAssets.Scripts.Models.GenericBehaviors; +using Il2CppAssets.Scripts.Models.Map; +using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Models.Towers.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; +using Il2CppAssets.Scripts.Models.Towers.Filters; +using Il2CppAssets.Scripts.Models.Towers.Projectiles; using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Models.Towers.TowerFilters; +using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; using Il2CppAssets.Scripts.Models.TowerSets; -using Il2CppAssets.Scripts.Unity; -using MelonLoader; -using BTD_Mod_Helper; -using MelonLoader; -using BTD_Mod_Helper; -using BTD_Mod_Helper.Api.Towers; -using Il2CppAssets.Scripts.Models.Towers; -using MelonLoader; -using BTD_Mod_Helper; -using MelonLoader; -using BTD_Mod_Helper; -using BTD_Mod_Helper.Api; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Models; using Il2CppAssets.Scripts.Simulation.Objects; +using Il2CppAssets.Scripts.Simulation.SimulationBehaviors; +using Il2CppAssets.Scripts.Simulation.SMath; using Il2CppAssets.Scripts.Simulation.Towers; using Il2CppAssets.Scripts.Simulation.Towers.Weapons; -using UnityEngine; -using Random = System.Random; -using System.Collections.Generic; -using System.Linq; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.TowerSets; -using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Api.Towers; using Il2CppAssets.Scripts.Unity; using Il2CppAssets.Scripts.Unity.Display; -using BTD_Mod_Helper.Api.Display; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Models.GenericBehaviors; -using Il2CppAssets.Scripts.Simulation.SMath; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; -using Il2CppAssets.Scripts.Models.Towers.TowerFilters; -using Il2CppAssets.Scripts.Models.Map; -using Il2CppAssets.Scripts.Models.Audio; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; using Il2CppInterop.Runtime.InteropTypes.Arrays; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Towers.Filters; -using HarmonyLib; -using Il2CppAssets.Scripts.Simulation.SimulationBehaviors; +using MelonLoader; +using Random = System.Random; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; namespace blankdisplay { - public class BlankDisplay : ModDisplay - { - public override string BaseDisplay => Generic2dDisplay; + public class BlankDisplay : ModDisplay + { + public override string BaseDisplay => Generic2dDisplay; - public override void ModifyDisplayNode(UnityDisplayNode node) - { - Set2DTexture(node, "NoneDisplay"); - } - } + public override void ModifyDisplayNode(UnityDisplayNode node) + { + Set2DTexture(node, "NoneDisplay"); + } + } } namespace AncientMonkey { - public class AncientMonkeyTower : ModTower - { - public override TowerSet TowerSet => TowerSet.Primary; - public override string BaseTower => TowerType.DartMonkey; - public override int Cost => 0; - public override string DisplayName => "Ancient Monkey"; - public override string Name => "AncientMonkey"; - public override int TopPathUpgrades => 0; - public override int MiddlePathUpgrades => 0; - public override int BottomPathUpgrades => 0; - public override string Description => "The Ancient Monkey is very weak in the Beginning but you can make him stronger."; - public override string Portrait => "AncientMonkeyIcon"; - public override string Icon => "AncientMonkeyIcon"; - public override bool IsValidCrosspath(int[] tiers) => + public class AncientMonkeyTower : ModTower + { + public override TowerSet TowerSet => TowerSet.Primary; + public override string BaseTower => TowerType.DartMonkey; + public override int Cost => 0; + public override string DisplayName => "Ancient Monkey"; + public override string Name => "AncientMonkey"; + public override int TopPathUpgrades => 0; + public override int MiddlePathUpgrades => 0; + public override int BottomPathUpgrades => 0; + public override string Description => "The Ancient Monkey is very weak in the Beginning but you can make him stronger."; + public override string Portrait => "AncientMonkeyIcon"; + public override string Icon => "AncientMonkeyIcon"; + public override bool IsValidCrosspath(int[] tiers) => ModHelper.HasMod("UltimateCrosspathing") || base.IsValidCrosspath(tiers); - public override void ModifyBaseTowerModel(TowerModel towerModel) - { - var attackModel = towerModel.GetAttackModel(); - attackModel.range = 0; - } - } - [HarmonyPatch(typeof(Il2CppAssets.Scripts.Simulation.SimulationBehaviors.NecroData), nameof(NecroData.RbePool))] - internal static class Necro_RbePool - { - [HarmonyPrefix] - private static bool Postfix(NecroData __instance, ref int __result) - { - var tower = __instance.tower; - if (tower.towerModel.name.Contains("Ancient")) - { - - __result = 9999; - - } - return false; - } - } + public override void ModifyBaseTowerModel(TowerModel towerModel) + { + var attackModel = towerModel.GetAttackModel(); + attackModel.range = 0; + } + } + [HarmonyPatch(typeof(Il2CppAssets.Scripts.Simulation.SimulationBehaviors.NecroData), nameof(NecroData.RbePool))] + internal static class Necro_RbePool + { + [HarmonyPrefix] + private static bool Postfix(NecroData __instance, ref int __result) + { + var tower = __instance.tower; + if (tower.towerModel.name.Contains("Ancient")) + { + + __result = 9999; + + } + return false; + } + } } diff --git a/AncientMonkey.csproj b/AncientMonkey.csproj index ffba8ab..c28e239 100644 --- a/AncientMonkey.csproj +++ b/AncientMonkey.csproj @@ -1,23 +1,23 @@ - - - net6.0 - AncientMonkey - Debug;Release - enable - AncientMonkey - latest - False - embedded - - - - - - - - - - - - - + + + net6.0 + AncientMonkey + Debug;Release + enable + AncientMonkey + latest + False + embedded + + + + + + + + + + + + + diff --git a/Challenge/ChallengeButton.cs b/Challenge/ChallengeButton.cs index 19d9c67..6038d43 100644 --- a/Challenge/ChallengeButton.cs +++ b/Challenge/ChallengeButton.cs @@ -1,134 +1,134 @@ -using System; +using BTD_Mod_Helper.Api; using BTD_Mod_Helper.Api.Components; -using BTD_Mod_Helper.Api; -using UnityEngine; using BTD_Mod_Helper.Api.Enums; using BTD_Mod_Helper.Extensions; -using TaskScheduler = BTD_Mod_Helper.Api.TaskScheduler; +using HarmonyLib; +using Il2Cpp; using Il2CppAssets.Scripts.Unity.Menu; using Il2CppAssets.Scripts.Unity.UI_New; -using Il2Cpp; using Il2CppAssets.Scripts.Unity.UI_New.Main.DifficultySelect; using Il2CppAssets.Scripts.Unity.UI_New.Main.MapSelect; -using HarmonyLib; +using System; +using TaskScheduler = BTD_Mod_Helper.Api.TaskScheduler; +using UnityEngine; namespace AncientMonkey.Challenge { - public static class ChallengeButton - { - private static ModHelperPanel panel; - private static ModHelperButton image; + public static class ChallengeButton + { + private static ModHelperPanel panel; + private static ModHelperButton image; - private static void OpenEditorPanel() - { - MenuManager.instance.buttonClickSound.Play("ClickSounds"); - ModGameMenu.Open(); - } - public static void CreatePanel(GameObject screen) - { - panel = screen.AddModHelperPanel(new Info("ChallengeButton") - { - Anchor = new Vector2(1, 0), - Pivot = new Vector2(1, 0) - }); - var animator = panel.AddComponent(); - animator.runtimeAnimatorController = Animations.GlobalButtonAnimation; - animator.speed = .75f; + private static void OpenEditorPanel() + { + MenuManager.instance.buttonClickSound.Play("ClickSounds"); + ModGameMenu.Open(); + } + public static void CreatePanel(GameObject screen) + { + panel = screen.AddModHelperPanel(new Info("ChallengeButton") + { + Anchor = new Vector2(1, 0), + Pivot = new Vector2(1, 0) + }); + var animator = panel.AddComponent(); + animator.runtimeAnimatorController = Animations.GlobalButtonAnimation; + animator.speed = .75f; - image = panel.AddButton(new Info("ChallengeButton", -4390, 500, 420, 420, new Vector2(1, 0), new Vector2(0.5f, 0)), VanillaSprites.ChallengesIcon, new Action(OpenEditorPanel)); - image.AddText(new Info("Text", 0, -125, 425, 200), "Ancients Challenges", 70f); - } - private static void HideButton() - { - panel.GetComponent().Play("PopupSlideOut"); - TaskScheduler.ScheduleTask(() => panel.SetActive(false), ScheduleType.WaitForFrames, 13); - } - private static void Init() - { - var screen = CommonForegroundScreen.instance.transform; - var ModSavePanel = screen.FindChild("ChallengeButton"); - if (ModSavePanel == null) - { - CreatePanel(screen.gameObject); - } - } - public static void Show() - { - Init(); - panel.SetActive(true); - panel.GetComponent().Play("PopupSlideIn"); - } + image = panel.AddButton(new Info("ChallengeButton", -4390, 500, 420, 420, new Vector2(1, 0), new Vector2(0.5f, 0)), VanillaSprites.ChallengesIcon, new Action(OpenEditorPanel)); + image.AddText(new Info("Text", 0, -125, 425, 200), "Ancients Challenges", 70f); + } + private static void HideButton() + { + panel.GetComponent().Play("PopupSlideOut"); + TaskScheduler.ScheduleTask(() => panel.SetActive(false), ScheduleType.WaitForFrames, 13); + } + private static void Init() + { + var screen = CommonForegroundScreen.instance.transform; + var ModSavePanel = screen.FindChild("ChallengeButton"); + if (ModSavePanel == null) + { + CreatePanel(screen.gameObject); + } + } + public static void Show() + { + Init(); + panel.SetActive(true); + panel.GetComponent().Play("PopupSlideIn"); + } - public static void Hide() - { - var screen = CommonForegroundScreen.instance.transform; - var ModSavePanel = screen.FindChild("ChallengeButton"); - if (ModSavePanel != null) - { - HideButton(); - } - } - } - [HarmonyPatch(typeof(MenuManager), nameof(MenuManager.OpenMenu))] - internal static class MenuManager_OpenMenu - { - [HarmonyPostfix] - private static void Postfix(MenuManager __instance, string menuName) - { - if (menuName == "MapSelectScreen") - { - ChallengeButton.Show(); - } - } - } + public static void Hide() + { + var screen = CommonForegroundScreen.instance.transform; + var ModSavePanel = screen.FindChild("ChallengeButton"); + if (ModSavePanel != null) + { + HideButton(); + } + } + } + [HarmonyPatch(typeof(MenuManager), nameof(MenuManager.OpenMenu))] + internal static class MenuManager_OpenMenu + { + [HarmonyPostfix] + private static void Postfix(MenuManager __instance, string menuName) + { + if (menuName == "MapSelectScreen") + { + ChallengeButton.Show(); + } + } + } - [HarmonyPatch(typeof(DifficultySelectScreen), nameof(DifficultySelectScreen.Open))] - internal static class DifficultySelectScreen_Open - { - [HarmonyPostfix] - private static void Postfix() - { - ChallengeButton.Hide(); - } - } + [HarmonyPatch(typeof(DifficultySelectScreen), nameof(DifficultySelectScreen.Open))] + internal static class DifficultySelectScreen_Open + { + [HarmonyPostfix] + private static void Postfix() + { + ChallengeButton.Hide(); + } + } - [HarmonyPatch(typeof(DifficultySelectScreen), nameof(DifficultySelectScreen.OpenModeSelectUi))] - internal static class DifficultySelectScreen_OpenModeSelectUi - { - [HarmonyPostfix] - private static void Postfix() - { - ChallengeButton.Hide(); - } - } + [HarmonyPatch(typeof(DifficultySelectScreen), nameof(DifficultySelectScreen.OpenModeSelectUi))] + internal static class DifficultySelectScreen_OpenModeSelectUi + { + [HarmonyPostfix] + private static void Postfix() + { + ChallengeButton.Hide(); + } + } - [HarmonyPatch(typeof(ContinueGamePanel), nameof(ContinueGamePanel.ContinueClicked))] - internal static class ContinueGamePanel_ContinueClicked - { - [HarmonyPostfix] - private static void Postfix() - { - ChallengeButton.Hide(); - } - } + [HarmonyPatch(typeof(ContinueGamePanel), nameof(ContinueGamePanel.ContinueClicked))] + internal static class ContinueGamePanel_ContinueClicked + { + [HarmonyPostfix] + private static void Postfix() + { + ChallengeButton.Hide(); + } + } - [HarmonyPatch(typeof(MapSelectScreen), nameof(MapSelectScreen.Open))] - internal static class MapSelectScreen_Open - { - [HarmonyPostfix] - private static void Postfix() - { - ChallengeButton.Show(); - } - } + [HarmonyPatch(typeof(MapSelectScreen), nameof(MapSelectScreen.Open))] + internal static class MapSelectScreen_Open + { + [HarmonyPostfix] + private static void Postfix() + { + ChallengeButton.Show(); + } + } - [HarmonyPatch(typeof(MapSelectScreen), nameof(MapSelectScreen.Close))] - internal static class MapSelectScreen_Close - { - [HarmonyPostfix] - private static void Postfix() - { - ChallengeButton.Hide(); - } - } + [HarmonyPatch(typeof(MapSelectScreen), nameof(MapSelectScreen.Close))] + internal static class MapSelectScreen_Close + { + [HarmonyPostfix] + private static void Postfix() + { + ChallengeButton.Hide(); + } + } } diff --git a/Challenge/ChallengePanel.cs b/Challenge/ChallengePanel.cs index 7c71323..b7ac109 100644 --- a/Challenge/ChallengePanel.cs +++ b/Challenge/ChallengePanel.cs @@ -1,82 +1,82 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BTD_Mod_Helper.Api; using BTD_Mod_Helper.Api.Components; using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Api; +using BTD_Mod_Helper.Extensions; using Il2Cpp; +using Il2CppAssets.Scripts.Unity.Effects; using Il2CppAssets.Scripts.Unity.Menu; -using Il2CppAssets.Scripts.Unity.UI_New.ChallengeEditor; +using Il2CppAssets.Scripts.Unity.Towers.Upgrades; using Il2CppAssets.Scripts.Unity.UI_New; +using Il2CppAssets.Scripts.Unity.UI_New.ChallengeEditor; +using Il2CppNinjaKiwi.Common; using Il2CppTMPro; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using UnityEngine; -using BTD_Mod_Helper.Extensions; -using Il2CppNinjaKiwi.Common; -using Il2CppAssets.Scripts.Unity.Effects; -using Il2CppAssets.Scripts.Unity.Towers.Upgrades; namespace AncientMonkey.Challenge { - public class ChallengePanel : ModGameMenu - { + public class ChallengePanel : ModGameMenu + { - ModHelperScrollPanel ScrollPanel; - public override bool OnMenuOpened(Il2CppSystem.Object data) - { - CommonForegroundScreen.instance.heading.SetActive(true); - CommonForegroundHeader.SetText("Ancients Challenges"); - var panelTransform = GameMenu.gameObject.GetComponentInChildrenByName("Panel"); - var panel = panelTransform.gameObject; - panel.DestroyAllChildren(); - var MainPanel = panel.AddModHelperPanel(new Info("AncientsChallengesMenu", 3600, 1900)); - CreateChallengesListPanel(MainPanel); + ModHelperScrollPanel ScrollPanel; + public override bool OnMenuOpened(Il2CppSystem.Object data) + { + CommonForegroundScreen.instance.heading.SetActive(true); + CommonForegroundHeader.SetText("Ancients Challenges"); + var panelTransform = GameMenu.gameObject.GetComponentInChildrenByName("Panel"); + var panel = panelTransform.gameObject; + panel.DestroyAllChildren(); + var MainPanel = panel.AddModHelperPanel(new Info("AncientsChallengesMenu", 3600, 1900)); + CreateChallengesListPanel(MainPanel); - return false; - } - private void CreateChallengesListPanel(ModHelperPanel MainPanel) - { - ScrollPanel = MainPanel.AddScrollPanel(new Info("MainScrollMenu", 0, 0, 3300, 2000), RectTransform.Axis.Vertical, VanillaSprites.MainBgPanel, 50, 50); - LoadChallengesPanels(); - } - public void LoadChallengesPanels() - { - ScrollPanel.ScrollContent.transform.DestroyAllChildren(); + return false; + } + private void CreateChallengesListPanel(ModHelperPanel MainPanel) + { + ScrollPanel = MainPanel.AddScrollPanel(new Info("MainScrollMenu", 0, 0, 3300, 2000), RectTransform.Axis.Vertical, VanillaSprites.MainBgPanel, 50, 50); + LoadChallengesPanels(); + } + public void LoadChallengesPanels() + { + ScrollPanel.ScrollContent.transform.DestroyAllChildren(); - foreach (var challenge in GetContent().OrderByDescending(c => c.mod == mod)) - { - ScrollPanel.AddScrollContent(CreateChallenge(challenge)); - } - } - public ModHelperPanel CreateChallenge(ChallengeTemplate challenge) - { - var panel = ModHelperPanel.Create(new Info("ChallengePanel" + challenge.ChallengeName, 0, 0, 3150, 250), challenge.Background); - var name = panel.AddText(new Info("ChallengeName", -1150, 0, 800, 100), challenge.ChallengeName, 80, TextAlignmentOptions.MidlineLeft); - var difficulty = panel.AddText(new Info("ChallengeDifficulty", -200, 0, 800, 100), challenge.ChallengeDifficulty.ToString(), 80, TextAlignmentOptions.MidlineLeft); - var image = panel.AddImage(new Info("image", 400, 0, 225, 225), challenge.Icon); + foreach (var challenge in GetContent().OrderByDescending(c => c.mod == mod)) + { + ScrollPanel.AddScrollContent(CreateChallenge(challenge)); + } + } + public ModHelperPanel CreateChallenge(ChallengeTemplate challenge) + { + var panel = ModHelperPanel.Create(new Info("ChallengePanel" + challenge.ChallengeName, 0, 0, 3150, 250), challenge.Background); + var name = panel.AddText(new Info("ChallengeName", -1150, 0, 800, 100), challenge.ChallengeName, 80, TextAlignmentOptions.MidlineLeft); + var difficulty = panel.AddText(new Info("ChallengeDifficulty", -200, 0, 800, 100), challenge.ChallengeDifficulty.ToString(), 80, TextAlignmentOptions.MidlineLeft); + var image = panel.AddImage(new Info("image", 400, 0, 225, 225), challenge.Icon); - var button = panel.AddButton(new Info("ChallengeIcon", 780, 0, 500, 150), VanillaSprites.GreenBtnLong, new System.Action(() => - { - AncientMonkey.mod.selectedChallenge = challenge; - LoadChallengesPanels(); - })); - ModHelperText select = button.AddText(new Info("select", 0, 0, 700, 160), "Select", 80); - if (challenge.UsingCustomSprite) - { - image.Image.SetSprite(challenge.CustomSprite); - } - if (AncientMonkey.mod.selectedChallenge.Name == challenge.Name) - { - panel.SetInfo(new Info("ChallengePanel" + challenge.ChallengeName, 0, 0, 3150, 250 + challenge.DescriptionPanelHeight)); - name.SetInfo(new Info("ChallengeName", -1150, challenge.DescriptionPanelHeight / 2, 800, 100)); - difficulty.SetInfo(new Info("ChallengeDifficulty", -200, challenge.DescriptionPanelHeight / 2, 800, 100)); - image.SetInfo(new Info("image", 400, challenge.DescriptionPanelHeight / 2, 225, 225)); - button.SetInfo(new Info("ChallengeIcon", 780, challenge.DescriptionPanelHeight / 2, 500, 150)); - select.Text.text = "Selected"; - var descriptionText = panel.AddText(new Info("descriptionText", 0, -75, 3100, challenge.DescriptionPanelHeight), challenge.Description, 80, TextAlignmentOptions.TopLeft); - } - return panel; - } - } + var button = panel.AddButton(new Info("ChallengeIcon", 780, 0, 500, 150), VanillaSprites.GreenBtnLong, new System.Action(() => + { + AncientMonkey.mod.selectedChallenge = challenge; + LoadChallengesPanels(); + })); + ModHelperText select = button.AddText(new Info("select", 0, 0, 700, 160), "Select", 80); + if (challenge.UsingCustomSprite) + { + image.Image.SetSprite(challenge.CustomSprite); + } + if (AncientMonkey.mod.selectedChallenge.Name == challenge.Name) + { + panel.SetInfo(new Info("ChallengePanel" + challenge.ChallengeName, 0, 0, 3150, 250 + challenge.DescriptionPanelHeight)); + name.SetInfo(new Info("ChallengeName", -1150, challenge.DescriptionPanelHeight / 2, 800, 100)); + difficulty.SetInfo(new Info("ChallengeDifficulty", -200, challenge.DescriptionPanelHeight / 2, 800, 100)); + image.SetInfo(new Info("image", 400, challenge.DescriptionPanelHeight / 2, 225, 225)); + button.SetInfo(new Info("ChallengeIcon", 780, challenge.DescriptionPanelHeight / 2, 500, 150)); + select.Text.text = "Selected"; + var descriptionText = panel.AddText(new Info("descriptionText", 0, -75, 3100, challenge.DescriptionPanelHeight), challenge.Description, 80, TextAlignmentOptions.TopLeft); + } + return panel; + } + } } diff --git a/Challenge/ChallengeTemplate.cs b/Challenge/ChallengeTemplate.cs index 2817554..a3da2e6 100644 --- a/Challenge/ChallengeTemplate.cs +++ b/Challenge/ChallengeTemplate.cs @@ -1,45 +1,45 @@ -using System; +using BTD_Mod_Helper.Api; +using BTD_Mod_Helper.Api.Enums; +using Il2CppAssets.Scripts.Simulation.Towers; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using BTD_Mod_Helper.Api; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Simulation.Towers; using UnityEngine; namespace AncientMonkey.Challenge { - public abstract class ChallengeTemplate : ModContent - { - public static bool IsSelected(ChallengeTemplate challenge) => AncientMonkey.mod.selectedChallenge == challenge; - public override void Register() { } - public abstract Difficulty ChallengeDifficulty { get; } - public abstract string ChallengeName { get; } - public abstract string Background { get; } - public abstract string Icon { get; } - public abstract string Description { get; } - public virtual bool UsingCustomSprite { get; } = false; - public virtual int DescriptionPanelHeight { get; } - public virtual Sprite CustomSprite { get; } - public virtual WeaponTemplate.Rarity MinNURarity { get; } = WeaponTemplate.Rarity.Common; - public virtual WeaponTemplate.Rarity MaxNURarity { get; } = WeaponTemplate.Rarity.Exotic; - public virtual WeaponTemplate.Rarity MinURarity { get; } = WeaponTemplate.Rarity.Rare; - public virtual WeaponTemplate.Rarity MaxURarity { get; } = WeaponTemplate.Rarity.Godly; - public virtual WeaponTemplate.Rarity MinUURarity { get; } = WeaponTemplate.Rarity.Epic; - public virtual WeaponTemplate.Rarity MaxUURarity { get; } = WeaponTemplate.Rarity.Omega; - public virtual float NewWeaponCostMult { get; } = 1; - public virtual float StrongerWeaponCostMult { get; } = 1; - public virtual float AbilityWeaponCostMult { get; } = 1; - public virtual float UpgradeCostMult { get; } = 1; - public virtual float LuckCostMult { get; } = 1; - public enum Difficulty - { - Easy, - Medium, - Hard, - Impossible, - Ancient, - } - } + public abstract class ChallengeTemplate : ModContent + { + public static bool IsSelected(ChallengeTemplate challenge) => AncientMonkey.mod.selectedChallenge == challenge; + public override void Register() { } + public abstract Difficulty ChallengeDifficulty { get; } + public abstract string ChallengeName { get; } + public abstract string Background { get; } + public abstract string Icon { get; } + public abstract string Description { get; } + public virtual bool UsingCustomSprite { get; } = false; + public virtual int DescriptionPanelHeight { get; } + public virtual Sprite CustomSprite { get; } + public virtual WeaponTemplate.Rarity MinNURarity { get; } = WeaponTemplate.Rarity.Common; + public virtual WeaponTemplate.Rarity MaxNURarity { get; } = WeaponTemplate.Rarity.Exotic; + public virtual WeaponTemplate.Rarity MinURarity { get; } = WeaponTemplate.Rarity.Rare; + public virtual WeaponTemplate.Rarity MaxURarity { get; } = WeaponTemplate.Rarity.Godly; + public virtual WeaponTemplate.Rarity MinUURarity { get; } = WeaponTemplate.Rarity.Epic; + public virtual WeaponTemplate.Rarity MaxUURarity { get; } = WeaponTemplate.Rarity.Omega; + public virtual float NewWeaponCostMult { get; } = 1; + public virtual float StrongerWeaponCostMult { get; } = 1; + public virtual float AbilityWeaponCostMult { get; } = 1; + public virtual float UpgradeCostMult { get; } = 1; + public virtual float LuckCostMult { get; } = 1; + public enum Difficulty + { + Easy, + Medium, + Hard, + Impossible, + Ancient, + } + } } diff --git a/Challenge/Challenges.cs b/Challenge/Challenges.cs index 9349030..00ea2c9 100644 --- a/Challenge/Challenges.cs +++ b/Challenge/Challenges.cs @@ -1,135 +1,136 @@ -using System; +using BTD_Mod_Helper.Api; +using BTD_Mod_Helper.Api.Enums; +using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Unity; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using BTD_Mod_Helper.Api; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; using UnityEngine; + using static AncientMonkey.WeaponTemplate; namespace AncientMonkey.Challenge { - public class None : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Easy; - public override string ChallengeName => "None"; - public override string Background => VanillaSprites.MainBGPanelGrey; - public override string Icon => VanillaSprites.WoodenRoundButton; - public override string Description => "-Basic Mode"; - public override int DescriptionPanelHeight => 80; - } - public class OnlyGodly : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Easy; - public override string ChallengeName => "Only Godly"; - public override string Background => VanillaSprites.MainBgPanelWhiteSmall; - public override string Icon => VanillaSprites.VengefulAdoraIcon; - public override string Description => "-Every New Weapon Is Godly\n-Every Stronger Weapon Is Godly"; - public override Rarity MaxNURarity => Rarity.Godly; - public override Rarity MinNURarity => Rarity.Godly; - public override Rarity MaxURarity => Rarity.Godly; - public override Rarity MinURarity => Rarity.Godly; - public override Rarity MaxUURarity => Rarity.Godly; - public override Rarity MinUURarity => Rarity.Godly; - public override int DescriptionPanelHeight => 180; - } - public class LegendaryMadness : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Easy; - public override string ChallengeName => "Legendary Madness"; - public override string Background => VanillaSprites.MainBGPanelYellow; - public override string Icon => VanillaSprites.SunTempleUpgradeIcon; - public override string Description => "-Every New Weapon Is Min Legendary\n-Every Stronger Weapon Is Min Legendary"; - public override Rarity MaxNURarity => Rarity.Exotic; - public override Rarity MinNURarity => Rarity.Legendary; - public override Rarity MaxURarity => Rarity.Godly; - public override Rarity MinURarity => Rarity.Legendary; - public override Rarity MaxUURarity => Rarity.Omega; - public override Rarity MinUURarity => Rarity.Legendary; - public override int DescriptionPanelHeight => 180; - } - public class ExpensiveWeapons : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Medium; - public override string ChallengeName => "Expensive Weapons"; - public override string Background => VanillaSprites.MainBGPanelBronze; - public override string Icon => VanillaSprites.IntermediateMapIcon; - public override string Description => "-New Weapons Cost Are 1.5X More Expensive"; - public override float NewWeaponCostMult => 1.5f; - public override int DescriptionPanelHeight => 80; - } - public class AbilitySpam : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Medium; - public override string ChallengeName => "Ability Spam"; - public override string Background => VanillaSprites.MainBgPanelParagon; - public override string Icon => VanillaSprites.CashDropUpgradeIcon; - public override string Description => "-New Weapons Cost Are 25X More Expensive\n-Stronger Weapons Cost Are 25X More Expensive\n-Abilities Cost Are 4X Less Expensive"; - public override int DescriptionPanelHeight => 280; - public override float NewWeaponCostMult => 25; - public override float StrongerWeaponCostMult => 25; - public override float AbilityWeaponCostMult => 0.25f; - } - public class NoUpgrade : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Medium; - public override string ChallengeName => "No Upgrade"; - public override string Background => VanillaSprites.MainBGPanelBlue; - public override string Icon => VanillaSprites.UpgradeIcon; - public override string Description => "-Upgrade Cost Is 100X More Expensive"; - public override int DescriptionPanelHeight => 80; - public override float UpgradeCostMult => 100; - } - public class MoneyTrouble : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Hard; - public override string ChallengeName => "Money Trouble"; - public override string Background => VanillaSprites.MainBGPanelYellow; - public override string Icon => VanillaSprites.HalfCashIcon; - public override string Description => "-New Weapons Cost Are 3X More Expensive\n-Stronger Weapons Cost Are 3X More Expensive\n-Abilities Cost Are 3X More Expensive\nUpgrade Cost Is 3X More Expensive\n-Extra Luck Cost Is 3X More Expensive"; - public override int DescriptionPanelHeight => 480; - public override float UpgradeCostMult => 3; - public override float NewWeaponCostMult => 3; - public override float StrongerWeaponCostMult => 3; - public override float AbilityWeaponCostMult => 3; - public override float LuckCostMult => 3; - } - public class OnlyCommon : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Impossible; - public override string ChallengeName => "Only Common"; - public override string Background => VanillaSprites.MainBgPanel; - public override string Icon => VanillaSprites.DartMonkeyIcon; - public override string Description => "-Every New Weapon Is Common\n-Every Stronger Weapon Is Common"; - public override Rarity MaxNURarity => Rarity.Common; - public override Rarity MinNURarity => Rarity.Common; - public override Rarity MaxURarity => Rarity.Common; - public override Rarity MinURarity => Rarity.Common; - public override Rarity MaxUURarity => Rarity.Common; - public override Rarity MinUURarity => Rarity.Common; - public override int DescriptionPanelHeight => 180; - } - public class EliteChallenge : ChallengeTemplate - { - public override Difficulty ChallengeDifficulty => Difficulty.Ancient; - public override string ChallengeName => "Elite Challenge"; - public override string Background => VanillaSprites.MainBgPanelWhiteSmall; - public override string Icon => VanillaSprites.CHIMPSIcon; - public override string Description => "-Every New Weapon Is Common\n-Every Stronger Weapon Is Common\n-New Weapons Cost Are 15X More Expensive\n-Stronger Weapons Cost Are 15X More Expensive\n-Abilities Cost Are 15X More Expensive\nUpgrade Cost Is 15X More Expensive\n-Extra Luck Cost Is 15X More Expensive"; - public override Rarity MaxNURarity => Rarity.Common; - public override Rarity MinNURarity => Rarity.Common; - public override Rarity MaxURarity => Rarity.Common; - public override Rarity MinURarity => Rarity.Common; - public override Rarity MaxUURarity => Rarity.Common; - public override Rarity MinUURarity => Rarity.Common; - public override int DescriptionPanelHeight => 680; - public override float UpgradeCostMult => 15; - public override float NewWeaponCostMult => 15; - public override float StrongerWeaponCostMult => 15; - public override float AbilityWeaponCostMult => 15; - public override float LuckCostMult => 15; - } + public class None : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Easy; + public override string ChallengeName => "None"; + public override string Background => VanillaSprites.MainBGPanelGrey; + public override string Icon => VanillaSprites.WoodenRoundButton; + public override string Description => "-Basic Mode"; + public override int DescriptionPanelHeight => 80; + } + public class OnlyGodly : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Easy; + public override string ChallengeName => "Only Godly"; + public override string Background => VanillaSprites.MainBgPanelWhiteSmall; + public override string Icon => VanillaSprites.VengefulAdoraIcon; + public override string Description => "-Every New Weapon Is Godly\n-Every Stronger Weapon Is Godly"; + public override Rarity MaxNURarity => Rarity.Godly; + public override Rarity MinNURarity => Rarity.Godly; + public override Rarity MaxURarity => Rarity.Godly; + public override Rarity MinURarity => Rarity.Godly; + public override Rarity MaxUURarity => Rarity.Godly; + public override Rarity MinUURarity => Rarity.Godly; + public override int DescriptionPanelHeight => 180; + } + public class LegendaryMadness : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Easy; + public override string ChallengeName => "Legendary Madness"; + public override string Background => VanillaSprites.MainBGPanelYellow; + public override string Icon => VanillaSprites.SunTempleUpgradeIcon; + public override string Description => "-Every New Weapon Is Min Legendary\n-Every Stronger Weapon Is Min Legendary"; + public override Rarity MaxNURarity => Rarity.Exotic; + public override Rarity MinNURarity => Rarity.Legendary; + public override Rarity MaxURarity => Rarity.Godly; + public override Rarity MinURarity => Rarity.Legendary; + public override Rarity MaxUURarity => Rarity.Omega; + public override Rarity MinUURarity => Rarity.Legendary; + public override int DescriptionPanelHeight => 180; + } + public class ExpensiveWeapons : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Medium; + public override string ChallengeName => "Expensive Weapons"; + public override string Background => VanillaSprites.MainBGPanelBronze; + public override string Icon => VanillaSprites.IntermediateMapIcon; + public override string Description => "-New Weapons Cost Are 1.5X More Expensive"; + public override float NewWeaponCostMult => 1.5f; + public override int DescriptionPanelHeight => 80; + } + public class AbilitySpam : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Medium; + public override string ChallengeName => "Ability Spam"; + public override string Background => VanillaSprites.MainBgPanelParagon; + public override string Icon => VanillaSprites.CashDropUpgradeIcon; + public override string Description => "-New Weapons Cost Are 25X More Expensive\n-Stronger Weapons Cost Are 25X More Expensive\n-Abilities Cost Are 4X Less Expensive"; + public override int DescriptionPanelHeight => 280; + public override float NewWeaponCostMult => 25; + public override float StrongerWeaponCostMult => 25; + public override float AbilityWeaponCostMult => 0.25f; + } + public class NoUpgrade : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Medium; + public override string ChallengeName => "No Upgrade"; + public override string Background => VanillaSprites.MainBGPanelBlue; + public override string Icon => VanillaSprites.UpgradeIcon; + public override string Description => "-Upgrade Cost Is 100X More Expensive"; + public override int DescriptionPanelHeight => 80; + public override float UpgradeCostMult => 100; + } + public class MoneyTrouble : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Hard; + public override string ChallengeName => "Money Trouble"; + public override string Background => VanillaSprites.MainBGPanelYellow; + public override string Icon => VanillaSprites.HalfCashIcon; + public override string Description => "-New Weapons Cost Are 3X More Expensive\n-Stronger Weapons Cost Are 3X More Expensive\n-Abilities Cost Are 3X More Expensive\nUpgrade Cost Is 3X More Expensive\n-Extra Luck Cost Is 3X More Expensive"; + public override int DescriptionPanelHeight => 480; + public override float UpgradeCostMult => 3; + public override float NewWeaponCostMult => 3; + public override float StrongerWeaponCostMult => 3; + public override float AbilityWeaponCostMult => 3; + public override float LuckCostMult => 3; + } + public class OnlyCommon : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Impossible; + public override string ChallengeName => "Only Common"; + public override string Background => VanillaSprites.MainBgPanel; + public override string Icon => VanillaSprites.DartMonkeyIcon; + public override string Description => "-Every New Weapon Is Common\n-Every Stronger Weapon Is Common"; + public override Rarity MaxNURarity => Rarity.Common; + public override Rarity MinNURarity => Rarity.Common; + public override Rarity MaxURarity => Rarity.Common; + public override Rarity MinURarity => Rarity.Common; + public override Rarity MaxUURarity => Rarity.Common; + public override Rarity MinUURarity => Rarity.Common; + public override int DescriptionPanelHeight => 180; + } + public class EliteChallenge : ChallengeTemplate + { + public override Difficulty ChallengeDifficulty => Difficulty.Ancient; + public override string ChallengeName => "Elite Challenge"; + public override string Background => VanillaSprites.MainBgPanelWhiteSmall; + public override string Icon => VanillaSprites.CHIMPSIcon; + public override string Description => "-Every New Weapon Is Common\n-Every Stronger Weapon Is Common\n-New Weapons Cost Are 15X More Expensive\n-Stronger Weapons Cost Are 15X More Expensive\n-Abilities Cost Are 15X More Expensive\nUpgrade Cost Is 15X More Expensive\n-Extra Luck Cost Is 15X More Expensive"; + public override Rarity MaxNURarity => Rarity.Common; + public override Rarity MinNURarity => Rarity.Common; + public override Rarity MaxURarity => Rarity.Common; + public override Rarity MinURarity => Rarity.Common; + public override Rarity MaxUURarity => Rarity.Common; + public override Rarity MinUURarity => Rarity.Common; + public override int DescriptionPanelHeight => 680; + public override float UpgradeCostMult => 15; + public override float NewWeaponCostMult => 15; + public override float StrongerWeaponCostMult => 15; + public override float AbilityWeaponCostMult => 15; + public override float LuckCostMult => 15; + } } diff --git a/Main.cs b/Main.cs index 82f6930..4b09fe0 100644 --- a/Main.cs +++ b/Main.cs @@ -1,1886 +1,1808 @@ -using MelonLoader; -using BTD_Mod_Helper; -using AncientMonkey; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Models.Towers; -using static Il2CppSystem.Globalization.TimeSpanParse; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Models; +using AncientMonkey; +using AncientMonkey.Challenge; +using AncientMonkey.Weapons; +using BTD_Mod_Helper; +using BTD_Mod_Helper.Api; using BTD_Mod_Helper.Api.Components; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppAssets.Scripts.Unity.UI_New.InGame; -using MelonLoader; -using BTD_Mod_Helper; -using System; -using Il2CppAssets.Scripts.Simulation.Towers.Weapons; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Unity.Display; using BTD_Mod_Helper.Api.Display; -using Il2CppAssets.Scripts.Models.Towers; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppAssets.Scripts.Unity.UI_New.InGame; -using UnityEngine; -using BTD_Mod_Helper.Api.Components; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Simulation.Towers; -using UnityEngine; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppSystem; -using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Attack.Behaviors; -using System.Linq; using BTD_Mod_Helper.Api.Enums; +using BTD_Mod_Helper.Api.Helpers; +using BTD_Mod_Helper.Api.ModOptions; +using BTD_Mod_Helper.Api.Towers; using BTD_Mod_Helper.Extensions; +using Harmony; +using HarmonyLib; using Il2Cpp; +using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models; +using Il2CppAssets.Scripts.Models.Bloons.Behaviors; using Il2CppAssets.Scripts.Models.GenericBehaviors; using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.Towers.Filters; -using Il2CppAssets.Scripts.Unity; - -using Il2CppAssets.Scripts.Unity; -using Il2CppAssets.Scripts.Simulation.Bloons; -using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Filters; +using Il2CppAssets.Scripts.Models.Towers.Projectiles; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Weapons; -using Il2CppSystem.IO; +using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; +using Il2CppAssets.Scripts.Models.TowerSets; +using Il2CppAssets.Scripts.Simulation.Bloons; using Il2CppAssets.Scripts.Simulation.Objects; -using UnityEngine.InputSystem.Utilities; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using System.Threading; -using Il2CppSystem.Runtime.InteropServices; -using BTD_Mod_Helper.Api.Display; +using Il2CppAssets.Scripts.Simulation.Towers; +using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Abilities; +using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Attack.Behaviors; +using Il2CppAssets.Scripts.Simulation.Towers.Weapons; +using Il2CppAssets.Scripts.Unity; using Il2CppAssets.Scripts.Unity.Display; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; -using BTD_Mod_Helper.Api.Towers; -using BTD_Mod_Helper.Api; -using BTD_Mod_Helper.Api.Components; -using BTD_Mod_Helper.Extensions; -using UnityEngine; -using BTD_Mod_Helper.Api.Enums; -using TaskScheduler = BTD_Mod_Helper.Api.TaskScheduler; +using Il2CppAssets.Scripts.Unity.Gamepad; +using Il2CppAssets.Scripts.Unity.Menu; +using Il2CppAssets.Scripts.Unity.Towers.Upgrades; +using Il2CppAssets.Scripts.Unity.Towers.Weapons; +using Il2CppAssets.Scripts.Unity.UI_New; using Il2CppAssets.Scripts.Unity.UI_New.ChallengeEditor; +using Il2CppAssets.Scripts.Unity.UI_New.InGame; +using Il2CppAssets.Scripts.Unity.UI_New.Quests; using Il2CppAssets.Scripts.Utils; -using Il2CppAssets.Scripts.Unity.UI_New; -using Il2CppAssets.Scripts.Unity.Menu; -using Il2CppTMPro; +using Il2CppNewtonsoft.Json.Utilities; using Il2CppNinjaKiwi.Common; -using Il2CppAssets.Scripts.Unity.UI_New.Quests; -using Il2Cpp; -using System.Linq; +using Il2CppNinjaKiwi.Common.ResourceUtils; +using Il2CppSystem; +using Il2CppSystem.IO; +using Il2CppSystem.Runtime.InteropServices; +using Il2CppTMPro; using MelonLoader; -using AncientMonkey.Weapons; -using Unity.XR.Oculus.Input; -using BTD_Mod_Helper.Api.Helpers; -using HarmonyLib; -using Harmony; -using Il2CppAssets.Scripts.Unity.Towers.Weapons; -using BTD_Mod_Helper.Api.ModOptions; -using UnityEngine.UIElements; -using Il2CppAssets.Scripts.Unity.Towers.Upgrades; -using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Abilities; -using Il2CppAssets.Scripts.Unity.Gamepad; -using AncientMonkey.Challenge; -using Il2CppNewtonsoft.Json.Utilities; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using BTD_Mod_Helper.Api.Towers; -using BTD_Mod_Helper; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Towers; -using BTD_Mod_Helper; -using Il2CppAssets.Scripts.Models.Bloons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Projectiles; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.TowerSets; -using Il2CppAssets.Scripts.Unity; +using Random = System.Random; using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Towers; -using BTD_Mod_Helper; -using Il2CppAssets.Scripts.Models.GenericBehaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.TowerSets; -using Il2CppAssets.Scripts.Unity; -using MelonLoader; -using BTD_Mod_Helper; -using MelonLoader; -using BTD_Mod_Helper; -using BTD_Mod_Helper.Api.Towers; -using Il2CppAssets.Scripts.Models.Towers; -using MelonLoader; -using BTD_Mod_Helper; -using MelonLoader; -using BTD_Mod_Helper; -using BTD_Mod_Helper.Api; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Models; -using Il2CppAssets.Scripts.Simulation.Objects; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Simulation.Towers.Weapons; +using TaskScheduler = BTD_Mod_Helper.Api.TaskScheduler; +using Unity.XR.Oculus.Input; using UnityEngine; -using Random = System.Random; -using System.Collections.Generic; -using System.Linq; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.TowerSets; -using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Api.Towers; -using Il2CppAssets.Scripts.Unity; -using Il2CppAssets.Scripts.Unity.Display; -using BTD_Mod_Helper.Api.Display; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Models.GenericBehaviors; -using Il2CppNinjaKiwi.Common.ResourceUtils; +using UnityEngine.InputSystem.Utilities; +using UnityEngine.UIElements; + +using static Il2CppSystem.Globalization.TimeSpanParse; + +[assembly: MelonInfo(typeof(AncientMonkey.AncientMonkey), ModHelperData.Name, ModHelperData.Version, ModHelperData.RepoOwner)] +[assembly: MelonGame("Ninja Kiwi", "BloonsTD6")] -[assembly: MelonInfo(typeof(AncientMonkey.AncientMonkey), ModHelperData.Name, ModHelperData.Version, ModHelperData.RepoOwner)] -[assembly: MelonGame("Ninja Kiwi", "BloonsTD6")] - -namespace AncientMonkey; - -public class AncientMonkey : BloonsTD6Mod +namespace AncientMonkey; + +public class AncientMonkey : BloonsTD6Mod { - internal static readonly ModSettingBool SandboxMode = new(false) - { - requiresRestart = true, - icon = VanillaSprites.SandboxBtn, - description = "Enable Sandbox Mode" - }; - - - public static AncientMonkey mod; - public float newWeaponCost = 250; - public float baseNewWeaponCost = 250; - public float rareChance = 85; - public float epicChance = 100; - public float legendaryChance = 100; - public float exoticChance = 100; - public float godlyChance = 100; - public float omegaChance = 100; - public float rareStrongChance = 85; - public float epicStrongChance = 100; - public float legendaryStrongChance = 100; - public float exoticStrongChance = 100; - public float godlyStrongerChance = 100; - public float omegaStrongerChance = 100; - public float strongerWeaponCost = 1100; - public float baseStrongerWeaponCost = 1100; - public float newAbilityCost = 6500; - public float baseNewAbilityCost = 1750; - public bool upgradeOpen = false; - public bool selectingWeaponOpen = false; - public bool mib = false; - public bool panelOpen = false; - public float level = 0; - public float rangeBoostSandbox = 1; - public float attackSpeedBoostSandbox = 1; - public float moneyBoostSandbox = 1; - public int damageBoostSandbox = 0; - public int pierceBoostSandbox = 0; - public int newWeaponSlot = 3; - public int strongWeaponSlot = 3; - public int abilitySlot = 1; - public int extraWeaponSlotLevel = 0; - public int extraWeaponSlotLevelMax = 1; - public int extraWeaponSlotCost = 80000; - public int strongExtraWeaponSlotLevel = 0; - public int strongExtraWeaponSlotLevelMax = 1; - public int strongExtraWeaponSlotCost = 100000; - public int ExtraAbilitySlotLevel = 0; - public int ExtraAbilitySlotLevelMax = 1; - public int ExtraAbilitySlotCost = 160000; - public int ExtraLuckLevel = 0; - public int ExtraLuckMax = 20; - public int XP = 0; - public int XPMax = 0; - public float UpgradeCost = 125000; - public float Upgrade2Cost = 1000000; - public float ExtraLuckCost = 250; - public WeaponTemplate.Rarity minNewWeaponRarity = WeaponTemplate.Rarity.Common; - public WeaponTemplate.Rarity maxNewWeaponRarity = WeaponTemplate.Rarity.Exotic; - public WeaponTemplate.Rarity minStrongWeaponRarity = WeaponTemplate.Rarity.Common; - public WeaponTemplate.Rarity maxStrongWeaponRarity = WeaponTemplate.Rarity.Exotic; - - public ChallengeTemplate? activeChallenge = new None(); - public ChallengeTemplate selectedChallenge - { - get { return activeChallenge; } - set { activeChallenge = value; } - } - public override void OnApplicationStart() - { - - mod = this; - - foreach (var weapon in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) - { - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Common) - { - Common.CommonWpn.Add(weapon.WeaponName); - if (weapon.CustomIcon) - { - Common.CommonCustomImg.Add(weapon.CustomIcon); - } - else - { - Common.CommonCustomImg.Add(new Sprite()); - } - Common.CommonImg.Add(weapon.Icon); - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Rare) - { - Rare.RareWpn.Add(weapon.WeaponName); - Rare.RareImg.Add(weapon.Icon); - if (weapon.CustomIcon) - { - Rare.RareCustomImg.Add(weapon.CustomIcon); - } - else - { - Rare.RareCustomImg.Add(new Sprite()); - } - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Epic) - { - Epic.EpicWpn.Add(weapon.WeaponName); - Epic.EpicImg.Add(weapon.Icon); - if (weapon.CustomIcon) - { - Epic.EpicCustomImg.Add(weapon.CustomIcon); - } - else - { - Epic.EpicCustomImg.Add(new Sprite()); - } - - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Legendary) - { - Legendary.LegendaryWpn.Add(weapon.WeaponName); - Legendary.LegendaryImg.Add(weapon.Icon); - if (weapon.CustomIcon) - { - Legendary.LegendaryCustomImg.Add(weapon.CustomIcon); - } - else - { - Legendary.LegendaryCustomImg.Add(new Sprite()); - } - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Exotic) - { - Exotic.ExoticWpn.Add(weapon.WeaponName); - Exotic.ExoticImg.Add(weapon.Icon); - if (weapon.CustomIcon) - { - Exotic.ExoticCustomImg.Add(weapon.CustomIcon); - } - else - { - Exotic.ExoticCustomImg.Add(new Sprite()); - } - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Godly) - { - Godly.GodlyWpn.Add(weapon.WeaponName); - Godly.GodlyImg.Add(weapon.Icon); - if (weapon.CustomIcon) - { - Godly.GodlyCustomImg.Add(weapon.CustomIcon); - } - else - { - Godly.GodlyCustomImg.Add(new Sprite()); - } - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Omega) - { - Omega.OmegaWpn.Add(weapon.WeaponName); - Omega.OmegaImg.Add(weapon.Icon); - if (weapon.CustomIcon) - { - Omega.OmegaCustomImg.Add(weapon.CustomIcon); - } - else - { - Omega.OmegaCustomImg.Add(new Sprite()); - } - } - } - foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) - { - AbilityClass.AbilityName.Add(ability.AbilityName); - AbilityClass.AbilityImg.Add(ability.Icon); - if (ability.CustomIcon) - { - AbilityClass.AbilityCustomImg.Add(ability.CustomIcon); - } - else - { - AbilityClass.AbilityCustomImg.Add(new Sprite()); - } - } - } - - public void Reset() - { - newWeaponCost = 325 * mod.selectedChallenge.NewWeaponCostMult; - rareChance = 90; - epicChance = 100; - rareStrongChance = 90; - epicStrongChance = 100; - legendaryStrongChance = 100; - legendaryChance = 100; - exoticChance = 100; - exoticStrongChance = 100; - omegaChance = 100; - omegaStrongerChance = 100; - baseNewWeaponCost = 250 * mod.selectedChallenge.NewWeaponCostMult; - strongerWeaponCost = 500 * mod.selectedChallenge.StrongerWeaponCostMult; - baseStrongerWeaponCost = 500 * mod.selectedChallenge.StrongerWeaponCostMult; - newAbilityCost = 7500 * mod.selectedChallenge.AbilityWeaponCostMult; - baseNewAbilityCost = 1000 * mod.selectedChallenge.AbilityWeaponCostMult; - upgradeOpen = false; - selectingWeaponOpen = false; - mib = false; - panelOpen = false; - level = 0; - newWeaponSlot = 3; - strongWeaponSlot = 3; - abilitySlot = 1; - extraWeaponSlotLevel = 0; - extraWeaponSlotCost = 50000; - strongExtraWeaponSlotLevel = 0; - strongExtraWeaponSlotCost = 65000; - ExtraAbilitySlotLevel = 0; - ExtraAbilitySlotCost = 100000; - ExtraLuckCost = 700 * mod.selectedChallenge.LuckCostMult; - ExtraLuckLevel = 0; - minNewWeaponRarity = mod.selectedChallenge.MinNURarity; - maxNewWeaponRarity = mod.selectedChallenge.MaxNURarity; - minStrongWeaponRarity = mod.selectedChallenge.MinNURarity; - maxStrongWeaponRarity = mod.selectedChallenge.MaxNURarity; - UpgradeCost = 125000 * mod.selectedChallenge.UpgradeCostMult; - Upgrade2Cost = 1000000 * mod.selectedChallenge.UpgradeCostMult; - XP = 0; - XPMax = 0; - } - public override void OnGameModelLoaded(GameModel model) - { - Reset(); - } - public override void OnTowerSold(Tower tower, float amount) - { - if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) - { - Reset(); - } - } - public override void OnRestart() - { - MenuUi.instance.CloseMenu(); - } - public override void OnTowerCreated(Tower tower, Entity target, Model modelToUse) - { - if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) - { - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - minNewWeaponRarity = WeaponTemplate.Rarity.Common; - maxNewWeaponRarity = WeaponTemplate.Rarity.Common; - newWeaponSlot = 5; - MenuUi.NewWeaponPanel(rect, tower, false); - Reset(); - } - } - public override void OnNewGameModel(GameModel result) - { - foreach (var tower in result.towerSet.ToList()) - { - if (tower.name.Contains("AncientMonkey-AncientMonkey")) - { - tower.GetShopTowerDetails().towerCount = 1; - } - } - } - public override void OnTowerSelected(Tower tower) - { - if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) - { - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - MenuUi.CreateUpgradeMenu(rect, tower); - upgradeOpen = true; - } - } - public override void OnTowerDeselected(Tower tower) - { - if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) - { - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - upgradeOpen = false; - if (MenuUi.instance) - { - MenuUi.instance.CloseMenu(); - } - - } - } - [RegisterTypeInIl2Cpp(false)] - public class MenuUi : MonoBehaviour - { - public static MenuUi instance; - - public ModHelperInputField input; - public void CloseMenu() - { - if(gameObject) - { - Destroy(gameObject); - } - } - public void NewWeapon(Tower tower) - { - InGame game = InGame.instance; - if (SandboxMode) - { - RectTransform rect = game.uiRect; - MenuUi.NewWeaponPanel(rect, tower, false); - MenuUi.instance.CloseMenu(); - return; - } - if (game.GetCash() >= mod.newWeaponCost) - { - game.AddCash(-mod.newWeaponCost); - RectTransform rect = game.uiRect; - mod.newWeaponCost += mod.baseNewWeaponCost; - tower.worth += mod.newWeaponCost - mod.baseNewWeaponCost; - mod.baseNewWeaponCost *= 1.06f; - MenuUi.NewWeaponPanel(rect, tower,false); - MenuUi.instance.CloseMenu(); - } - } - public void WeaponSelected(string Weapon, Tower tower,bool levelup) - { - mod.panelOpen = false; - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - if(!SandboxMode) - { - Destroy(gameObject); - } - - foreach (var weapon in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) - { - if(weapon.WeaponName == Weapon) - { - weapon.stackIndex += 1; - weapon.EditTower(tower); - } - } - mod.XP += 1; - if (levelup) - { - mod.XP = 0; - } - if (mod.XP >= mod.XPMax && mod.level >= 2) - { - mod.XPMax += 2; - NewWeaponPanel(rect, tower, true); - - return; - } - mod.rareChance -= 5f + mod.ExtraLuckLevel * 0.45f; - mod.epicChance -= 1.45f + mod.ExtraLuckLevel * 0.1f; - if (mod.epicChance <= 88) - { - mod.legendaryChance -= 0.85f + mod.ExtraLuckLevel * 0.06f; - } - if (mod.legendaryChance <= 91) - { - mod.exoticChance -= 0.50f + mod.ExtraLuckLevel * 0.04f; - } - if (mod.level >= 1) - { - if (mod.exoticChance <= 94) - { - mod.godlyChance -= 0.3f + mod.ExtraLuckLevel * 0.025f; - } - } - if (mod.level >= 2) - { - if (mod.godlyChance <= 95) - { - mod.omegaChance -= 0.15f + mod.ExtraLuckLevel * 0.01f; - } - } - - if (mod.upgradeOpen == true && !SandboxMode) - { - CreateUpgradeMenu(rect, tower); - } - - mod.selectingWeaponOpen = false; - if (mod.mib) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.GetDescendants().ForEach(model => model.isActive = false); - foreach (var weaponModel in towerModel.GetDescendants().ToArray()) - { - if (weaponModel.projectile.HasBehavior()) - { - weaponModel.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - } - if (weaponModel.projectile.HasBehavior()) - { - weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - } - if (weaponModel.projectile.HasBehavior()) - { - weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - } - } - tower.UpdateRootModel(towerModel); - } - - } - public static ModHelperPanel CreateWeapon(WeaponTemplate weapon, Tower tower ) - { - var sprite = VanillaSprites.GreyInsertPanel; - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Rare) - { - sprite = VanillaSprites.BlueInsertPanel; - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Epic) - { - sprite = VanillaSprites.MainBgPanelParagon; - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Legendary) - { - sprite = VanillaSprites.MainBGPanelYellow; - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Exotic) - { - sprite = VanillaSprites.MainBgPanelWhiteSmall; - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Godly) - { - sprite = VanillaSprites.MainBGPanelSilver; - } - if (weapon.WeaponRarity == WeaponTemplate.Rarity.Omega) - { - sprite = VanillaSprites.MainBgPanelHematite; - } - var panel = ModHelperPanel.Create(new Info("WeaponContent" + weapon.WeaponName, 0, 0, 2250, 150), sprite); - MenuUi upgradeUi = panel.AddComponent(); - ModHelperText wpnName = panel.AddText(new Info("wpnName", -600, 0, 1000, 150), weapon.WeaponName, 80, TextAlignmentOptions.MidlineLeft); - ModHelperText rarity = panel.AddText(new Info("rarity", 275, 0, 600, 150), weapon.WeaponRarity.ToString(), 80, TextAlignmentOptions.MidlineLeft); - ModHelperImage image = panel.AddImage(new Info("image", -100, 0, 140, 140), weapon.Icon); - ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", 900, 0, 400, 120), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.WeaponSelected(weapon.WeaponName, tower, false);}) ) ; - if(weapon.IsCamo) - { - ModHelperImage camoImg = panel.AddImage(new Info("camoImg", 460, 0, 120, 120), VanillaSprites.CamoBloonIcon); - } - if (weapon.IsLead) - { - ModHelperImage leadImg = panel.AddImage(new Info("leadImg", 580, 0, 120, 120), VanillaSprites.LeadBloonIcon); - } - ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Select", 60); - return panel; - } - public static void SandBoxWeaponPanel(RectTransform rect, Tower tower) - { - - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.MainBGPanelBlue); - panel.transform.DestroyAllChildren(); - ModHelperScrollPanel scrollPanel = panel.AddScrollPanel(new Info("scrollPanel", 0, 0, 2500, 1850), RectTransform.Axis.Vertical, VanillaSprites.MainBGPanelBlue, 15, 50); - ModHelperButton exit = panel.AddButton(new Info("exit", 1200, 900, 135, 135), VanillaSprites.RedBtn, new System.Action(() => { - tower.SetSelectionBlocked(false); panel.DeleteObject(); if (mod.upgradeOpen == true){CreateUpgradeMenu(rect, tower); } - })); - ModHelperText x = exit.AddText(new Info("x", 0, 0, 700, 160), "X", 80); - - for (int i = 1; i < 100; i++) - { - foreach (var weapon in ModContent.GetContent()) - { - if (weapon.SandboxIndex == i) - { - scrollPanel.AddScrollContent(CreateWeapon(weapon, tower)); - } - } - } - } - - public static void NewWeaponPanel(RectTransform rect, Tower tower, bool Levelup) - { - mod.panelOpen = true; - if(instance) - { - instance.CloseMenu(); - } - - if(SandboxMode) - { - SandBoxWeaponPanel(rect, tower); - return; - } - float weaponPanelWidth = 833.33f; - float weaponPanelX = 412.5f; - float weaponPanelY = 900; - float wpnContentX = 25 - (mod.newWeaponSlot -1) * 425; - float panelWidth = mod.newWeaponSlot * weaponPanelWidth; - var imag = VanillaSprites.BrownInsertPanel; - if (mod.level == 1) - { - imag = VanillaSprites.BlueInsertPanel; - } - if (mod.level == 2) - { - imag = VanillaSprites.MainBgPanelParagon; - } - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, panelWidth, 1850, new UnityEngine.Vector2()), imag); - - MenuUi upgradeUi = panel.AddComponent(); - ModHelperText selectWpn = panel.AddText(new Info("selectWpn", 0, 800, 2500, 180), "Select New Weapon", 100); - if (!instance) - { - selectWpn.Text.text = "Choose A starter Weapon"; - selectWpn.Text.color = new Color(0, 1, 0); - } - if (Levelup) - { - selectWpn.Text.text = "Choose A level up Weapon"; - selectWpn.Text.color = new Color(0.46f, 0, 0.78f); - } - Il2CppSystem.Random rnd = new Il2CppSystem.Random(); - for (int i = 0; i < mod.newWeaponSlot; i++) - { - var WpnRarityNum = rnd.Next(1, 100); - var WpnRarity = "Common"; - var RarityNumber = 1; - var MinNum = 1; - var MaxNum = 1; - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) - { - MinNum = 1; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Rare) - { - MinNum = 2; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Epic) - { - MinNum = 3; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Legendary) - { - MinNum = 4; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Exotic) - { - MinNum = 5; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Godly) - { - MinNum = 6; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Omega) - { - MinNum = 7; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) - { - MaxNum = 1; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Rare) - { - MaxNum = 2; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Epic) - { - MaxNum = 3; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Legendary) - { - MaxNum = 4; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Exotic) - { - MaxNum = 5; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Godly) - { - MaxNum = 6; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Omega) - { - MaxNum = 7; - } - if (WpnRarityNum >= mod.rareChance) - { - RarityNumber = 2; - } - if (WpnRarityNum >= mod.epicChance) - { - RarityNumber = 3; - } - if (WpnRarityNum >= mod.legendaryChance) - { - RarityNumber = 4; - } - if (WpnRarityNum >= mod.exoticChance) - { - RarityNumber = 5; - } - if (WpnRarityNum >= mod.godlyChance) - { - RarityNumber = 6; - } - if (WpnRarityNum >= mod.omegaChance) - { - RarityNumber = 7; - } - if (RarityNumber < MinNum) - { - RarityNumber = MinNum; - } - if (RarityNumber > MaxNum) - { - RarityNumber = MaxNum; - } - if (RarityNumber == 2) - { - WpnRarity = "Rare"; - } - if (RarityNumber == 3) - { - WpnRarity = "Epic"; - } - if (RarityNumber == 4) - { - WpnRarity = "Legendary"; - } - if (RarityNumber == 5) - { - WpnRarity = "Exotic"; - } - if (RarityNumber == 6) - { - WpnRarity = "Godly"; - } - if (RarityNumber == 7) - { - WpnRarity = "Omega"; - } - - var sprite = VanillaSprites.GreyInsertPanel; - var numWpn = rnd.Next(0, Common.CommonWpn.Count); - var weapon = Common.CommonWpn[numWpn]; - var img = Common.CommonImg[numWpn]; - Sprite csprite = Common.CommonCustomImg[numWpn]; - if (WpnRarity == "Rare") - { - numWpn = rnd.Next(0, Rare.RareWpn.Count); - sprite = VanillaSprites.BlueInsertPanel; - weapon = Rare.RareWpn[numWpn]; - img = Rare.RareImg[numWpn]; - csprite = Rare.RareCustomImg[numWpn]; - } - if (WpnRarity == "Epic") - { - numWpn = rnd.Next(0, Epic.EpicWpn.Count); - sprite = VanillaSprites.MainBgPanelParagon; - weapon = Epic.EpicWpn[numWpn]; - img = Epic.EpicImg[numWpn]; - csprite = Epic.EpicCustomImg[numWpn]; - } - if (WpnRarity == "Legendary") - { - numWpn = rnd.Next(0, Legendary.LegendaryWpn.Count); - sprite = VanillaSprites.MainBGPanelYellow; - weapon = Legendary.LegendaryWpn[numWpn]; - img = Legendary.LegendaryImg[numWpn]; - csprite = Legendary.LegendaryCustomImg[numWpn]; - } - if (WpnRarity == "Exotic") - { - numWpn = rnd.Next(0, Exotic.ExoticWpn.Count); - sprite = VanillaSprites.MainBgPanelWhiteSmall; - weapon = Exotic.ExoticWpn[numWpn]; - img = Exotic.ExoticImg[numWpn]; - csprite = Exotic.ExoticCustomImg[numWpn]; - } - if (WpnRarity == "Godly") - { - numWpn = rnd.Next(0, Godly.GodlyWpn.Count); - sprite = VanillaSprites.MainBGPanelSilver; - weapon = Godly.GodlyWpn[numWpn]; - img = Godly.GodlyImg[numWpn]; - csprite = Godly.GodlyCustomImg[numWpn]; - } - if (WpnRarity == "Omega") - { - numWpn = rnd.Next(0, Omega.OmegaWpn.Count); - sprite = VanillaSprites.MainBgPanelHematite; - weapon = Omega.OmegaWpn[numWpn]; - img = Omega.OmegaImg[numWpn]; - csprite = Omega.OmegaCustomImg[numWpn]; - } - ModHelperPanel wpnPanel = panel.AddPanel(new Info("wpnPanel", weaponPanelX, weaponPanelY, 650, 1450, new UnityEngine.Vector2()), sprite); - ModHelperText rarityText = panel.AddText(new Info("rarityText", wpnContentX, 600, 800, 180), WpnRarity, 100); - ModHelperText weaponText = panel.AddText(new Info("weaponText", wpnContentX, 500, 800, 180), weapon, 75); - - ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", wpnContentX, -600, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.WeaponSelected(weapon, tower,Levelup))); - ModHelperText selectWpnTxt = selectWpnBtn.AddText(new Info("selectWpnTxt", 0, 0, 700, 160), "Select", 70); - foreach (var weaponContent in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) - { - if (weaponContent.WeaponName == weapon) - { - ModHelperText descText = panel.AddText(new Info("descText", wpnContentX, 400, 800, 180), weaponContent.Description, 55); - ModHelperText StackIndex = panel.AddText(new Info("StackIndex", wpnContentX - 275, 650, 100, 100), $"{weaponContent.stackIndex}", 80); - if (weaponContent.CustomIcon) - { - ModHelperImage image = panel.AddImage(new Info("image", wpnContentX, 0, 400, 400), csprite); - } - else - { - ModHelperImage image = panel.AddImage(new Info("image", wpnContentX, 0, 400, 400), img); - } - if (weaponContent.IsCamo && !weaponContent.IsLead) - { - ModHelperImage camoImg = panel.AddImage(new Info("camoImg", wpnContentX + 275, 650, 100, 100), VanillaSprites.CamoBloonIcon); - } - if (weaponContent.IsLead && !weaponContent.IsCamo) - { - ModHelperImage leadImg = panel.AddImage(new Info("leadImg", wpnContentX + 275, 650, 100, 100), VanillaSprites.LeadBloonIcon); - } - if (weaponContent.IsLead && weaponContent.IsCamo) - { - ModHelperImage camoImg = panel.AddImage(new Info("camoImg", wpnContentX + 275, 650, 100, 100), VanillaSprites.CamoBloonIcon); - ModHelperImage leadImg = panel.AddImage(new Info("leadImg", wpnContentX + 275, 560, 100, 100), VanillaSprites.LeadBloonIcon); - } - } - } - weaponPanelX += weaponPanelWidth; - wpnContentX += weaponPanelWidth; - - } - } - public static void SandBoxStrongWeaponPanel(RectTransform rect, Tower tower) - { - - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 1250, 1500, new UnityEngine.Vector2()), VanillaSprites.MainBGPanelBlue); - MenuUi upgradeUi = panel.AddComponent(); - panel.transform.DestroyAllChildren(); - if (mod.damageBoostSandbox < 0) - { - mod.damageBoostSandbox = 0; - } - if (mod.pierceBoostSandbox < 0) - { - mod.pierceBoostSandbox = 0; - } - if (mod.rangeBoostSandbox <= 0.9) - { - mod.rangeBoostSandbox = 1f; - } - if (mod.attackSpeedBoostSandbox <= 0) - { - mod.attackSpeedBoostSandbox = 0.05f; - } - if (mod.attackSpeedBoostSandbox >= 1.05f) - { - mod.attackSpeedBoostSandbox = 1f; - } - if (mod.moneyBoostSandbox <= 0.9) - { - mod.moneyBoostSandbox = 1f; - } - - mod.rangeBoostSandbox = Mathf.Round(mod.rangeBoostSandbox * 10) / 10; - mod.attackSpeedBoostSandbox = Mathf.Round(mod.attackSpeedBoostSandbox * 100) / 100; - mod.moneyBoostSandbox = Mathf.Round(mod.moneyBoostSandbox * 10) / 10; - - panel.AddText(new Info("text", 300, 350, 1200, 150), "Damage Boost: " + mod.damageBoostSandbox, 75, TextAlignmentOptions.TopLeft); - panel.AddButton(new Info("button1", -400, 430, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.damageBoostSandbox += 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - panel.AddButton(new Info("button2", -400, 350, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.damageBoostSandbox -= 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - - panel.AddText(new Info("text2", 300, 150, 1200, 150), "Pierce Boost: " + mod.pierceBoostSandbox, 75, TextAlignmentOptions.TopLeft); - panel.AddButton(new Info("button3", -400, 230, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.pierceBoostSandbox += 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - panel.AddButton(new Info("button4", -400, 150, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.pierceBoostSandbox -= 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - - panel.AddText(new Info("text2", 300, -50, 1200, 150), "Range Boost: " + mod.rangeBoostSandbox, 75, TextAlignmentOptions.TopLeft); - panel.AddButton(new Info("button3", -400, 30, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.rangeBoostSandbox += 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - panel.AddButton(new Info("button4", -400, -50, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.rangeBoostSandbox -= 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - - panel.AddText(new Info("text2", 300, -250, 1200, 150), "Attack Speed Boost: " + mod.attackSpeedBoostSandbox, 75, TextAlignmentOptions.TopLeft); - panel.AddButton(new Info("button3", -400, -170, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.attackSpeedBoostSandbox -= 0.05f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - panel.AddButton(new Info("button4", -400, -250, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.attackSpeedBoostSandbox += 0.05f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - - panel.AddText(new Info("text2", 300, -450, 1200, 150), "Money Boost: " + mod.moneyBoostSandbox, 75, TextAlignmentOptions.TopLeft); - panel.AddButton(new Info("button3", -400, -370, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.moneyBoostSandbox += 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - panel.AddButton(new Info("button4", -400, -450, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.moneyBoostSandbox -= 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); - - ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", 0, -600, 400, 120), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.StrongWpnSelected(mod.damageBoostSandbox, mod.pierceBoostSandbox, mod.attackSpeedBoostSandbox, mod.rangeBoostSandbox, mod.moneyBoostSandbox, tower); panel.DeleteObject(); })); - ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Edit", 70); - } - public static void StrongWeaponPanel(RectTransform rect, Tower tower) - { - mod.panelOpen = true; - if (SandboxMode) - { - SandBoxStrongWeaponPanel(rect, tower); - return; - } - float strongWeaponPanelWidth = 833.33f; - float strongWeaponPanelX = 412.5f; - float strongWeaponPanelY = 900; - float strongWpnContentX = 25 - (mod.strongWeaponSlot - 1) * 425; - float panelWidth = mod.strongWeaponSlot * strongWeaponPanelWidth; - var img = VanillaSprites.BrownInsertPanel; - if (mod.level == 1) - { - img = VanillaSprites.BlueInsertPanel; - } - if (mod.level == 2) - { - img = VanillaSprites.MainBgPanelParagon; - } - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, panelWidth, 1850, new UnityEngine.Vector2()), img); - ModHelperText selectStrongWpn = panel.AddText(new Info("selectStrongWpn", 0, 800, 2500, 180), "Select Stronger Weapon Card", 100); - Il2CppSystem.Random rnd = new Il2CppSystem.Random(); - - MenuUi upgradeUi = panel.AddComponent(); - for (int i = 0; i < mod.strongWeaponSlot; i++) - { - var StrongWpnRarityNum = rnd.Next(1, 100); - var StrongWpnRarity = "Common"; - var RarityNumber = 1; - var MinNum = 1; - var MaxNum = 1; - var damageBoost = rnd.Next(0, 2); - var pierceBoost = rnd.Next(0, 2); - float rangeBoost = rnd.Next(0, 7); - float attackSpeedBoost = rnd.Next(95, 101); - float moneyBoost = rnd.Next(0, 7); - var sprite = VanillaSprites.GreyInsertPanel; - - - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) - { - MinNum = 1; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Rare) - { - MinNum = 2; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Epic) - { - MinNum = 3; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Legendary) - { - MinNum = 4; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Exotic) - { - MinNum = 5; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Godly) - { - MinNum = 6; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Omega) - { - MinNum = 7; - } - if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) - { - MaxNum = 1; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Rare) - { - MaxNum = 2; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Epic) - { - MaxNum = 3; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Legendary) - { - MaxNum = 4; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Exotic) - { - MaxNum = 5; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Godly) - { - MaxNum = 6; - } - if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Omega) - { - MaxNum = 7; - } - if (StrongWpnRarityNum >= mod.rareStrongChance) - { - RarityNumber = 2; - } - if (StrongWpnRarityNum >= mod.epicStrongChance) - { - RarityNumber = 3; - } - if (StrongWpnRarityNum >= mod.legendaryStrongChance) - { - RarityNumber = 4; - } - if (StrongWpnRarityNum >= mod.exoticStrongChance) - { - RarityNumber = 5; - } - if (StrongWpnRarityNum >= mod.godlyStrongerChance) - { - RarityNumber = 6; - } - if (StrongWpnRarityNum >= mod.omegaStrongerChance) - { - RarityNumber = 7; - } - if (RarityNumber < MinNum) - { - RarityNumber = MinNum; - } - if (RarityNumber > MaxNum) - { - RarityNumber = MaxNum; - } - if (RarityNumber == 2) - { - StrongWpnRarity = "Rare"; - } - if (RarityNumber == 3) - { - StrongWpnRarity = "Epic"; - } - if (RarityNumber == 4) - { - StrongWpnRarity = "Legendary"; - } - if (RarityNumber == 5) - { - StrongWpnRarity = "Exotic"; - } - if (RarityNumber == 6) - { - StrongWpnRarity = "Godly"; - } - if (RarityNumber == 7) - { - StrongWpnRarity = "Omega"; - } - if (StrongWpnRarity == "Rare") - { - damageBoost = rnd.Next(0, 3); - pierceBoost = rnd.Next(0, 3); - rangeBoost = rnd.Next(0, 10); - attackSpeedBoost = rnd.Next(91, 101); - moneyBoost = rnd.Next(0, 10); - sprite = VanillaSprites.BlueInsertPanel; - } - if (StrongWpnRarity == "Epic") - { - damageBoost = rnd.Next(1, 5); - pierceBoost = rnd.Next(1, 5); - rangeBoost = rnd.Next(0, 13); - attackSpeedBoost = rnd.Next(88, 101); - moneyBoost = rnd.Next(0, 13); - sprite = VanillaSprites.MainBgPanelParagon; - } - if (StrongWpnRarity == "Legendary") - { - damageBoost = rnd.Next(2, 7); - pierceBoost = rnd.Next(2, 7); - rangeBoost = rnd.Next(0, 15); - attackSpeedBoost = rnd.Next(85, 101); - moneyBoost = rnd.Next(0, 15); - sprite = VanillaSprites.MainBGPanelYellow; - } - if (StrongWpnRarity == "Exotic") - { - damageBoost = rnd.Next(3, 9); - pierceBoost = rnd.Next(3, 9); - rangeBoost = rnd.Next(0, 18); - attackSpeedBoost = rnd.Next(83, 101); - moneyBoost = rnd.Next(0, 18); - sprite = VanillaSprites.MainBgPanelWhiteSmall; - } - if (StrongWpnRarity == "Godly") - { - damageBoost = rnd.Next(5, 15); - pierceBoost = rnd.Next(5, 15); - rangeBoost = rnd.Next(0, 23); - attackSpeedBoost = rnd.Next(75, 101); - moneyBoost = rnd.Next(0, 23); - sprite = VanillaSprites.MainBGPanelSilver; - } - if (StrongWpnRarity == "Omega") - { - damageBoost = rnd.Next(8, 22); - pierceBoost = rnd.Next(8, 22); - rangeBoost = rnd.Next(0, 28); - attackSpeedBoost = rnd.Next(71, 101); - moneyBoost = rnd.Next(0, 28); - sprite = VanillaSprites.MainBgPanelHematite; - } - attackSpeedBoost = attackSpeedBoost / 100; - rangeBoost = 1 + rangeBoost / 100; - moneyBoost = 1 + moneyBoost / 100; - ModHelperPanel strongWpnPanel = panel.AddPanel(new Info("strongWpnPanel", strongWeaponPanelX, strongWeaponPanelY, 650, 1450, new UnityEngine.Vector2()), sprite); - - ModHelperText rarityText = panel.AddText(new Info("rarityText", strongWpnContentX, 600, 800, 180), StrongWpnRarity, 100); - ModHelperText cardText = panel.AddText(new Info("cardText", strongWpnContentX, 500, 800, 180), "Stronger Weapon Card", 50); - ModHelperText dmgBoostText = panel.AddText(new Info("dmgBoostText", strongWpnContentX, 200, 800, 180), "Damage Boost :" + damageBoost, 50); - ModHelperText prcBoostText = panel.AddText(new Info("prcBoostText", strongWpnContentX, 100, 800, 180), "Pierce Boost :" + pierceBoost, 50); - ModHelperText rngBoostText = panel.AddText(new Info("rngBoostText", strongWpnContentX, 0, 800, 180), "Range Boost : X" + rangeBoost, 50); - ModHelperText atkspdBoostText = panel.AddText(new Info("atkspdBoostText", strongWpnContentX, -100, 800, 180), "Attack Speed Boost : X" + attackSpeedBoost, 50); - ModHelperText mnyBoostText = panel.AddText(new Info("mnyBoostText", strongWpnContentX, -200, 800, 180), "Money Boost : X" + moneyBoost, 50); - ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", strongWpnContentX, -600, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.StrongWpnSelected(damageBoost, pierceBoost, attackSpeedBoost, rangeBoost, moneyBoost, tower))); - ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Select", 70); - strongWeaponPanelX += strongWeaponPanelWidth; - strongWpnContentX += strongWeaponPanelWidth; - } - } - public void StrongWeapon(Tower tower) - { - InGame game = InGame.instance; - if (SandboxMode) - { - RectTransform rect = game.uiRect; - MenuUi.StrongWeaponPanel(rect, tower); - MenuUi.instance.CloseMenu(); - - return; - } - - if (game.GetCash() >= mod.strongerWeaponCost) - { - game.AddCash(-mod.strongerWeaponCost); - RectTransform rect = game.uiRect; - MenuUi.StrongWeaponPanel(rect, tower); - mod.strongerWeaponCost += mod.baseStrongerWeaponCost; - tower.worth += mod.strongerWeaponCost - mod.baseStrongerWeaponCost; - mod.baseStrongerWeaponCost *= 1.06f; - - - MenuUi.instance.CloseMenu(); - - } - } - public void StrongWpnSelected(int Dmg, int Pierce, float AtkSpd, float Range, float Money, Tower tower) - { - mod.panelOpen = false; - InGame game = InGame.instance; - Destroy(gameObject); - RectTransform rect = game.uiRect; - var towerModel = tower.rootModel.Duplicate().Cast(); - if (mod.upgradeOpen == true) - { - CreateUpgradeMenu(rect, tower); - } - towerModel.range *= Range; - if (towerModel.HasBehavior()) - { - foreach (var towercreate in towerModel.GetBehaviors().ToArray()) - { - if (towercreate.towerModel.HasBehavior()) - { - foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) - { - if (towerModel.GetBehavior().towerModel.HasBehavior()) - { - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].rate *= AtkSpd; - attackModel.weapons[0].projectile.pierce += Pierce; - attackModel.weapons[0].projectile.GetDamageModel().damage += Dmg; - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().lifespan += Range / 90; - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().minimum *= Money; - attackModel.weapons[0].projectile.GetBehavior().maximum *= Money; - } - - } - - } - foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) - { - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].rate *= AtkSpd; - attackModel.weapons[0].projectile.pierce += Pierce; - attackModel.weapons[0].projectile.GetDamageModel().damage += Dmg; - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().lifespan += Range / 90; - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().minimum *= Money; - attackModel.weapons[0].projectile.GetBehavior().maximum *= Money; - } - } - } - } - } - foreach (var attackModel in towerModel.GetDescendants().ToArray()) - { - if (!attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].rate *= AtkSpd; - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.pierce += Pierce; - attackModel.weapons[0].projectile.GetDamageModel().damage += Dmg; - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().lifespan += Range / 60; - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().minimum *= Money; - attackModel.weapons[0].projectile.GetBehavior().maximum *= Money; - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().projectile.pierce += Pierce; - attackModel.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += Dmg; - - } - if (attackModel.weapons[0].projectile.HasBehavior()) - { - attackModel.weapons[0].projectile.GetBehavior().projectile.pierce += Pierce; - attackModel.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += Dmg; - } - } - } - foreach (var attackModel in towerModel.GetDescendants().ToArray()) - { - attackModel.range *= Range; - } - mod.rareStrongChance -= 6.7f + mod.ExtraLuckLevel * 0.55f; - mod.epicStrongChance -= 2f + mod.ExtraLuckLevel * 0.15f; - if (mod.epicStrongChance <= 88) - { - mod.legendaryStrongChance -= 1.15f + mod.ExtraLuckLevel * 0.09f; - } - if (mod.legendaryStrongChance <= 91) - { - mod.exoticStrongChance -= 0.75f + mod.ExtraLuckLevel * 0.05f; - } - if (mod.exoticStrongChance <= 93) - { - mod.godlyStrongerChance -= 0.55f + mod.ExtraLuckLevel * 0.03f; - } - if (mod.godlyChance <= 94) - { - mod.omegaStrongerChance -= 0.30f + mod.ExtraLuckLevel * 0.015f; - } - tower.UpdateRootModel(towerModel); - - - } - public void NewAbility(Tower tower) - { - InGame game = InGame.instance; - if(SandboxMode) - { - RectTransform rect = game.uiRect; - MenuUi.NewAbilityPanel(rect, tower); - MenuUi.instance.CloseMenu(); - return; - } - if (game.GetCash() >= mod.newAbilityCost) - { - game.AddCash(-mod.newAbilityCost); - RectTransform rect = game.uiRect; - mod.newAbilityCost += mod.baseNewAbilityCost; - tower.worth += mod.newAbilityCost - mod.baseNewAbilityCost; - MenuUi.NewAbilityPanel(rect, tower); - MenuUi.instance.CloseMenu(); - } - } - public static ModHelperPanel CreateAbility(AbilityTemplate ability, Tower tower) - { - - var sprite = VanillaSprites.GreyInsertPanel; - var panel = ModHelperPanel.Create(new Info("WeaponContent" + ability.AbilityName, 0, 0, 2250, 150), sprite); - MenuUi upgradeUi = panel.AddComponent(); - ModHelperText abilityName = panel.AddText(new Info("abilityName", -600, 0, 1000, 150), ability.AbilityName, 80, TextAlignmentOptions.MidlineLeft); - ModHelperImage image = panel.AddImage(new Info("image", -100, 0, 140, 140), ability.Icon); - ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", 900, 0, 400, 120), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.AbilitySelected(ability.AbilityName, tower, "none"); })); - ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Select", 60); - return panel; - } - public static void SandBoxAbilityPanel(RectTransform rect, Tower tower) - { - - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.MainBGPanelBlue); - panel.transform.DestroyAllChildren(); - - ModHelperScrollPanel scrollPanel = panel.AddScrollPanel(new Info("scrollPanel", 0, 0, 2500, 1850), RectTransform.Axis.Vertical, VanillaSprites.MainBGPanelBlue, 15, 50); - ModHelperButton exit = panel.AddButton(new Info("exit", 1200, 900, 135, 135), VanillaSprites.RedBtn, new System.Action(() => { - tower.SetSelectionBlocked(false); panel.DeleteObject(); - })); - ModHelperText x = exit.AddText(new Info("x", 0, 0, 700, 160), "X", 80); - foreach (var ability in ModContent.GetContent()) - { - scrollPanel.AddScrollContent(CreateAbility(ability, tower)); - } - } - public static void NewAbilityPanel(RectTransform rect, Tower tower) - { - mod.panelOpen = true; - if (SandboxMode) - { - SandBoxAbilityPanel(rect, tower); - return; - } - - float abilityPanelWidth = 833.33f; - float abilityPanelX = 412.5f; - float abilityPanelY = 900; - float abilityContentX = 25 + (mod.abilitySlot - 1) * -425; - float panelWidth = mod.abilitySlot * abilityPanelWidth; - var sprite = VanillaSprites.BrownInsertPanel; - if (mod.level == 1) - { - sprite = VanillaSprites.BlueInsertPanel; - } - if (mod.level == 2) - { - sprite = VanillaSprites.MainBgPanelParagon; - } - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, panelWidth, 1850, new UnityEngine.Vector2()), sprite); - ModHelperText selectAb = panel.AddText(new Info("selectAb", 0, 800, 2500, 180), "Select New Ability", 100); - MenuUi upgradeUi = panel.AddComponent(); - - Il2CppSystem.Random rnd = new Il2CppSystem.Random(); - for (int i = 0; i < mod.abilitySlot; i++) - { - var num = rnd.Next(0, AbilityClass.AbilityName.Count); - var abSelected = AbilityClass.AbilityName[num]; - var imgSelected = AbilityClass.AbilityImg[num]; - Sprite csprite = AbilityClass.AbilityCustomImg[num]; - ModHelperPanel abilityPanel = panel.AddPanel(new Info("abilityPanel", abilityPanelX, abilityPanelY, 650, 1450, new UnityEngine.Vector2()), VanillaSprites.GreyInsertPanel); - ModHelperText abilityText = panel.AddText(new Info("abilityText", abilityContentX, 600, 800, 180), "Ability", 100); - ModHelperText abilityText2 = panel.AddText(new Info("abilityText2", abilityContentX, 500, 800, 180), abSelected, 75); - ModHelperButton selectAbilityBtn = panel.AddButton(new Info("selectAbilityBtn", abilityContentX, -600, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.AbilitySelected(abSelected, tower, "Common"))); - ModHelperText selectAbility1 = selectAbilityBtn.AddText(new Info("selectAbility1", 0, 0, 700, 160), "Select", 70); - - - foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) - { - if (ability.AbilityName == abSelected) - { - ModHelperText descText = panel.AddText(new Info("descText", abilityContentX, 400, 800, 180), ability.Description, 55); - ModHelperText StackIndex = panel.AddText(new Info("StackIndex", abilityContentX - 275, 650, 100, 100), $"{ability.stackIndex}", 80); - if (ability.CustomIcon) - { - ModHelperImage image = panel.AddImage(new Info("image", abilityContentX, 0, 400, 400), csprite); - } - else - { - ModHelperImage image = panel.AddImage(new Info("image", abilityContentX, 0, 400, 400), imgSelected); - } - } - } - abilityPanelX += abilityPanelWidth; - abilityContentX += abilityPanelWidth; - } - - } - public void AbilitySelected(string Ability, Tower tower, string rarity) - { - mod.panelOpen = false; - InGame game = InGame.instance; - if(!SandboxMode) - { - Destroy(gameObject); - } - RectTransform rect = game.uiRect; - if (mod.upgradeOpen == true && !SandboxMode) - { - CreateUpgradeMenu(rect, tower); - } - - if (Ability == "MIB") - { - mod.mib = true; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.GetDescendants().ForEach(model => model.isActive = false); - foreach (var weaponModel in towerModel.GetDescendants().ToArray()) - { - if (weaponModel.projectile.HasBehavior()) - { - weaponModel.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - } - if (weaponModel.projectile.HasBehavior()) - { - weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - } - if (weaponModel.projectile.HasBehavior()) - { - weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - } - } - tower.UpdateRootModel(towerModel); - } - foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) - { - if (ability.AbilityName == Ability) - { - ability.EditTower(tower); - ability.stackIndex += 1; - } - } - - } - public void Upgrade1Panel(Tower tower) - { - MenuUi.instance.CloseMenu(); - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.BrownInsertPanel); - MenuUi upgradeUi = panel.AddComponent(); - ModHelperText upgradeText = panel.AddText(new Info("upgradeText", 0, 800, 2500, 180), "Upgrade To Advanced Ancient Monkey", 100); - ModHelperText text1 = panel.AddText(new Info("text1", 0, 500, 2500, 180), "-Unlock a new rarity", 75); - ModHelperText text2 = panel.AddText(new Info("text2", 0, 400, 2500, 180), "-Increase New Weapon Slot by 1", 75); - ModHelperText text3 = panel.AddText(new Info("text3", 0, 300, 2500, 180), "-Increase Stronger Weapon Slot by 1", 75); - ModHelperText text4 = panel.AddText(new Info("text4", 0, 200, 2500, 180), "-Increase New Ability Slot by 1", 75); - ModHelperText text5 = panel.AddText(new Info("text5", 0, 100, 2500, 180), "-Greatly Increased Luck", 75); - ModHelperText text6 = panel.AddText(new Info("text6", 0, 0, 2500, 180), "-Removed Common Rarity", 75); - ModHelperText text7 = panel.AddText(new Info("text7", 0, -100, 2500, 180), "-Stronger Weapon and New Weapon Cost Increased", 75); - ModHelperText text8 = panel.AddText(new Info("text8", 0, -200, 2500, 180), "-New Ability Cost Decreased", 75); - ModHelperText text9 = panel.AddText(new Info("text9", 0, -300, 2500, 180), "-Keep Everything", 75); - ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade1", 350, -800, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade1(tower))); - ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade1Buy", 0, 0, 700, 160), "Upgrade ($" + mod.UpgradeCost / 1000 + "K)", 70); - ModHelperButton cancel = panel.AddButton(new Info("cancel", -350, -800, 500, 160), VanillaSprites.RedBtnLong, new System.Action(() => upgradeUi.Cancel(tower))); - ModHelperText cancelText = cancel.AddText(new Info("cancelText", 0, 0, 700, 160), "Cancel", 70); - } - public void Upgrade2Panel(Tower tower) - { - MenuUi.instance.CloseMenu(); - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.BrownInsertPanel); - MenuUi upgradeUi = panel.AddComponent(); - ModHelperText upgradeText = panel.AddText(new Info("upgradeText", 0, 800, 2500, 180), "Upgrade To Super Ancient Monkey", 100); - ModHelperText text1 = panel.AddText(new Info("text1", 0, 500, 2500, 180), "-Unlock a new rarity", 75); - ModHelperText text2 = panel.AddText(new Info("text2", 0, 400, 2500, 180), "-Greatly Increased Luck", 75); - ModHelperText text3 = panel.AddText(new Info("text3", 0, 300, 2500, 180), "-Removed Rare Rarity", 75); - ModHelperText text4 = panel.AddText(new Info("text4", 0, 200, 2500, 180), "-Stronger Weapon and New Weapon Cost Increased", 75); - ModHelperText text5 = panel.AddText(new Info("text5", 0, 100, 2500, 180), "-New Ability Cost Decreased", 75); - ModHelperText text6 = panel.AddText(new Info("text5", 0, 0, 2500, 180), "-New XP System", 75); - ModHelperText text7 = panel.AddText(new Info("text7", 0, -100, 2500, 180), "-Keep Everything", 75); - ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade1", 350, -800, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade2(tower))); - ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade1Buy", 0, 0, 700, 160), "Upgrade ($" + mod.Upgrade2Cost / 1000000 + "M)", 70); - ModHelperButton cancel = panel.AddButton(new Info("cancel", -350, -800, 500, 160), VanillaSprites.RedBtnLong, new System.Action(() => upgradeUi.Cancel(tower))); - ModHelperText cancelText = cancel.AddText(new Info("cancelText", 0, 0, 700, 160), "Cancel", 70); - } - public string[] Monkeys = { - "DartMonkey", - "BoomerangMonkey", - "BombShooter", - "TackShooter", - "IceMonkey", - "GlueGunner", - "SniperMonkey", - "MonkeySub", - "MonkeyBuccaneer", - "MonkeyAce", - "HeliPilot", - "MortarMonkey", - "DartlingGunner", - "WizardMonkey", - "SuperMonkey", - "NinjaMonkey", - "Alchemist", - "Druid", - "BananaFarm", - "MonkeyVillage", - "SpikeFactory", - "EngineerMonkey" - }; - public string Monkey = "DartMonkey"; - public int upgradeTier = 0; - public int upgradePath = 0; - public void ChangeSkin(Tower tower) - { - Il2CppNinjaKiwi.Common.Random rnd = new Il2CppNinjaKiwi.Common.Random(); - var monkey = Monkeys[rnd.Next(1, Monkeys.Length)]; - var upgradeTier = rnd.Next(1, 6); - var upgradePath = rnd.Next(1, 4); - instance.Monkey = monkey; - instance.upgradePath = upgradePath; - instance.upgradeTier = upgradeTier; - - var towerModel = tower.rootModel.Duplicate().Cast(); - if (upgradePath == 1) - { - towerModel.display = Game.instance.model.GetTowerFromId(monkey + "-" + upgradeTier + "00").display; - } - if (upgradePath == 2) - { - towerModel.display = Game.instance.model.GetTowerFromId(monkey + "-0" + upgradeTier + "0").display; - } - if (upgradePath == 3) - { - towerModel.display = Game.instance.model.GetTowerFromId(monkey + "-00" + upgradeTier).display; - } - tower.UpdateRootModel(towerModel); - } - public void ExtraPanel(Tower tower) - { - mod.panelOpen = true; - - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - var sprite = VanillaSprites.BrownInsertPanel; - - if (mod.level == 1) - { - sprite = VanillaSprites.BlueInsertPanel; - } - if (mod.level == 2) - { - sprite = VanillaSprites.MainBgPanelParagon; - } - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), sprite); - MenuUi upgradeUi = panel.AddComponent(); - ModHelperText upgradeText = panel.AddText(new Info("upgradeText", 0, 800, 2500, 180), "Extra Upgrades Panel", 100); - - var pipY = 400; - var pipX = -650; - for (int i = 0; i < mod.extraWeaponSlotLevel; i++) - { - ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); - pipX += 87; - } - for (int i = 0; i < mod.extraWeaponSlotLevelMax - mod.extraWeaponSlotLevel; i++) - { - ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); - pipX += 87; - } - if(mod.extraWeaponSlotLevel == mod.extraWeaponSlotLevelMax) - { - ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 400, 525, 145), VanillaSprites.GreenBtnLong, null); - ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Max", 50); - } - else - { - ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 400, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.extraWeaponSlotCost) { game.AddCash(mod.extraWeaponSlotCost *= -1); mod.extraWeaponSlotLevel += 1; panel.DeleteObject(); ExtraPanel(tower); mod.newWeaponSlot++; } })); - ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Extra New Weapon Slot : $" + mod.extraWeaponSlotCost, 45); - } - - pipY = 250; - pipX = -650; - for (int i = 0; i < mod.strongExtraWeaponSlotLevel; i++) - { - ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); - pipX += 87; - } - for (int i = 0; i < mod.extraWeaponSlotLevelMax - mod.strongExtraWeaponSlotLevel; i++) - { - ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); - pipX += 87; - } - if (mod.strongExtraWeaponSlotLevel == mod.extraWeaponSlotLevelMax) - { - ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 250, 525, 145), VanillaSprites.GreenBtnLong, null); - ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Max", 60); - } - else - { - ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 250, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.strongExtraWeaponSlotCost) { game.AddCash(mod.strongExtraWeaponSlotCost *= -1); mod.strongExtraWeaponSlotLevel += 1; panel.DeleteObject(); ExtraPanel(tower); mod.strongWeaponSlot++; } })); - ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Extra Stronger Weapon Slot : $" + mod.strongExtraWeaponSlotCost, 45); - } - - pipY = 100; - pipX = -650; - for (int i = 0; i < mod.ExtraAbilitySlotLevel; i++) - { - ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); - pipX += 87; - } - for (int i = 0; i < mod.ExtraAbilitySlotLevelMax - mod.ExtraAbilitySlotLevel; i++) - { - ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); - pipX += 87; - } - if (mod.ExtraAbilitySlotLevel == mod.ExtraAbilitySlotLevelMax) - { - ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 100, 525, 145), VanillaSprites.GreenBtnLong, null); - ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Max", 60); - } - else - { - ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 100, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.ExtraAbilitySlotCost) { game.AddCash(mod.ExtraAbilitySlotCost *= -1); mod.ExtraAbilitySlotLevel += 1; panel.DeleteObject(); ExtraPanel(tower); mod.abilitySlot++; } })); - ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Extra New Ability Slot : $" + mod.ExtraAbilitySlotCost, 50); - } - - pipY = -50; - pipX = -650; - for (int i = 0; i < mod.ExtraLuckLevel; i++) - { - ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); - pipX += 87; - } - for (int i = 0; i < mod.ExtraLuckMax - mod.ExtraLuckLevel; i++) - { - ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); - pipX += 87; - } - if (mod.ExtraLuckLevel == mod.ExtraLuckMax) - { - ModHelperButton upgradeExtraLevel = panel.AddButton(new Info("upgradeExtraLevel", -980, -50, 525, 145), VanillaSprites.GreenBtnLong, null); - ModHelperText upgradeExtraLevelText = upgradeExtraLevel.AddText(new Info("upgradeExtraLevelText", 0, 0, 550, 150), "Max", 60); - } - else - { - ModHelperButton upgradeExtraLevel = panel.AddButton(new Info("upgradeExtraLevel", -980, -50, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.ExtraLuckCost) { game.AddCash(mod.ExtraLuckCost * -1); mod.ExtraLuckLevel += 1; mod.ExtraLuckCost *= 1.35f; ; panel.DeleteObject(); ExtraPanel(tower); } })); - ModHelperText upgradeExtraLevelText = upgradeExtraLevel.AddText(new Info("upgradeExtraLevelText", 0, 0, 550, 150), "Extra Luck : $" + Mathf.Round(mod.ExtraLuckCost), 50); - } - - - ModHelperButton monkeySkinChange = panel.AddButton(new Info("monkeySkinChange", -980, -200, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { ChangeSkin(tower); panel.DeleteObject(); ExtraPanel(tower); } )); - ModHelperText monkeySkinChangeText = monkeySkinChange.AddText(new Info("monkeySkinChangeText", 0, 0, 550, 150), "Change Skin", 60); - if (upgradePath == 1) - { - ModHelperText monkeySkinChangeMonkeyText = panel.AddText(new Info("monkeySkinChangeMonkeyText", 50, -200, 1000, 150), Monkey + " " + upgradeTier + "00", 60); - } - if (upgradePath == 2) - { - ModHelperText monkeySkinChangeMonkeyText = panel.AddText(new Info("monkeySkinChangeMonkeyText", 50, -200, 1000, 150), Monkey + " 0" + upgradeTier + "0", 60); - } - if (upgradePath == 3) - { - ModHelperText monkeySkinChangeMonkeyText = panel.AddText(new Info("monkeySkinChangeMonkeyText", 50, -200, 1000, 150), Monkey + " 00" + upgradeTier, 60); - } - - - ModHelperButton cancel = panel.AddButton(new Info("cancel", 0, -800, 500, 160), VanillaSprites.RedBtnLong, new System.Action(() => upgradeUi.Cancel(tower))); - ModHelperText cancelText = cancel.AddText(new Info("cancelText", 0, 0, 700, 160), "Cancel", 70); - } - public void Upgrade1(Tower tower) - { - InGame game = InGame.instance; - if (game.GetCash() >= mod.UpgradeCost) - { - game.AddCash(-mod.UpgradeCost); - - RectTransform rect = game.uiRect; - - mod.newWeaponCost = 450 * mod.selectedChallenge.NewWeaponCostMult; - mod.baseNewWeaponCost = 350 * mod.selectedChallenge.NewWeaponCostMult; - mod.rareChance = 0; - mod.epicChance = 75; - mod.legendaryChance = 98; - mod.exoticChance = 100; - mod.godlyChance = 100; - mod.rareStrongChance = 0; - mod.epicStrongChance = 70; - mod.legendaryStrongChance = 95; - mod.exoticStrongChance = 100; - mod.godlyStrongerChance = 100; - mod.strongerWeaponCost = 950 * mod.selectedChallenge.StrongerWeaponCostMult; - mod.baseStrongerWeaponCost = 750 * mod.selectedChallenge.StrongerWeaponCostMult; - mod.newAbilityCost = 6000 * mod.selectedChallenge.AbilityWeaponCostMult; - - mod.baseNewAbilityCost = 750 * mod.selectedChallenge.AbilityWeaponCostMult; - mod.level += 1; - mod.newWeaponSlot += 1; - mod.strongWeaponSlot += 1; - mod.abilitySlot += 1; - mod.minNewWeaponRarity = mod.selectedChallenge.MinURarity; - mod.maxNewWeaponRarity = mod.selectedChallenge.MaxURarity; - mod.minStrongWeaponRarity = mod.selectedChallenge.MinURarity; - mod.maxStrongWeaponRarity = mod.selectedChallenge.MaxURarity; - mod.panelOpen = false; - if (mod.upgradeOpen == true) - { - CreateUpgradeMenu(rect, tower); - } - - Destroy(gameObject); - } - } - public void Upgrade2(Tower tower) - { - InGame game = InGame.instance; - if (game.GetCash() >= mod.Upgrade2Cost) - { - game.AddCash(-mod.Upgrade2Cost); - - RectTransform rect = game.uiRect; - - mod.newWeaponCost = 2350 * mod.selectedChallenge.NewWeaponCostMult; - mod.baseNewWeaponCost = 1750 * mod.selectedChallenge.NewWeaponCostMult; - mod.rareChance = 0; - mod.epicChance = 0; - mod.legendaryChance = 80; - mod.exoticChance = 99; - mod.godlyChance = 100; - mod.rareStrongChance = 0; - mod.epicStrongChance = 0; - mod.legendaryStrongChance = 75; - mod.exoticStrongChance = 98; - mod.godlyStrongerChance = 100; - mod.strongerWeaponCost = 3500 * mod.selectedChallenge.StrongerWeaponCostMult; - mod.baseStrongerWeaponCost = 2250 * mod.selectedChallenge.StrongerWeaponCostMult; - mod.newAbilityCost = 5500 * mod.selectedChallenge.AbilityWeaponCostMult; - - mod.baseNewAbilityCost = 500 * mod.selectedChallenge.AbilityWeaponCostMult; - mod.level += 1; - mod.minNewWeaponRarity = mod.selectedChallenge.MinUURarity; - mod.maxNewWeaponRarity = mod.selectedChallenge.MaxUURarity; - mod.minStrongWeaponRarity = mod.selectedChallenge.MinUURarity; - mod.maxStrongWeaponRarity = mod.selectedChallenge.MaxUURarity; - mod.XP = 0; - mod.XPMax = 2; - - mod.panelOpen = false; - if (mod.upgradeOpen == true) - { - CreateUpgradeMenu(rect, tower); - } - - Destroy(gameObject); - } - } - public void Cancel(Tower tower) - { - InGame game = InGame.instance; - RectTransform rect = game.uiRect; - Destroy(gameObject); - mod.panelOpen = false; - if (mod.upgradeOpen == true) - { - CreateUpgradeMenu(rect, tower); - } - } - public static void CreateUpgradeMenu(RectTransform rect, Tower tower) - { - if(mod.panelOpen == true) - { - return; - } - var sprite = VanillaSprites.BrownInsertPanel; - if (mod.level == 1) - { - sprite = VanillaSprites.BlueInsertPanel; - } - if (mod.level == 2) - { - sprite = VanillaSprites.MainBgPanelParagon; - } - ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 200, 3333, 450, new UnityEngine.Vector2()), sprite); - MenuUi upgradeUi = panel.AddComponent(); - instance = upgradeUi; - - if(SandboxMode) - { - ModHelperText newWpnCost = panel.AddText(new Info("newWpnCost", -416, 140, 1000, 180), "New Weapon: Free", 70); - } - else - { - ModHelperText newWpnCost = panel.AddText(new Info("newWpnCost", -416, 140, 1000, 180), "New Weapon: $" + Mathf.Round(mod.newWeaponCost), 70); - } - if (mod.selectingWeaponOpen == false) - { - ModHelperButton newWpnBtn = panel.AddButton(new Info("newWpnBtn", -416, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.NewWeapon(tower))); - ModHelperText newWpnBuy = newWpnBtn.AddText(new Info("newWpnBuy", 0, 0, 700, 160), "Buy", 70); - } - ModHelperText newWpnDesc = panel.AddText(new Info("newWpnDesc", -416, -100, 860, 180), "Give an extra weapon", 42); - - if (SandboxMode) - { - ModHelperText strongWpnCost = panel.AddText(new Info("strongWpnCost", -1216, 140, 1000, 180), "Stronger Weapon: Free", 70); - } - else - { - ModHelperText strongWpnCost = panel.AddText(new Info("strongWpnCost", -1216, 140, 1000, 180), "Stronger Weapon: $" + Mathf.Round(mod.strongerWeaponCost), 70); - } - - if (mod.selectingWeaponOpen == false) - { - ModHelperButton strongWpnBtn = panel.AddButton(new Info("strongWpnBtn", -1216, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.StrongWeapon(tower))); - ModHelperText strongWpnBuy = strongWpnBtn.AddText(new Info("strongWpnBuy", 0, 0, 700, 160), "Buy", 70); - } - - ModHelperText strongWpnDesc = panel.AddText(new Info("strongWpnDesc", -1216, -100, 860, 180), "Make your current weapon stronger", 42); - if (SandboxMode) - { - ModHelperText abilityCost = panel.AddText(new Info("abilityCost", 384, 140, 1000, 180), "New Ability: Free", 70); - } else - { - ModHelperText abilityCost = panel.AddText(new Info("abilityCost", 384, 140, 1000, 180), "New Ability: $" + Mathf.Round(mod.newAbilityCost), 70); - } - - ModHelperText extraText = panel.AddText(new Info("extraText", 1217, 140, 1000, 180), "Extra Panel", 70); - ModHelperButton extraBtn = panel.AddButton(new Info("extraBtn", 1217, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.ExtraPanel(tower); MenuUi.instance.CloseMenu(); })); - ModHelperText extraOpen = extraBtn.AddText(new Info("extraOpen", 0, 0, 700, 160), "Open", 70); - - if (mod.selectingWeaponOpen == false) - { - ModHelperButton abilityBtn = panel.AddButton(new Info("abilityBtn", 384, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.NewAbility(tower))); - ModHelperText abilityBuy = abilityBtn.AddText(new Info("abilityBuy", 0, 0, 700, 160), "Buy", 70); - } - ModHelperText abilityDesc = panel.AddText(new Info("abilityDesc", 384, -100, 860, 180), "Give an ability", 42); - - if(mod.level == 0) - { - ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade1", 0, 300, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade1Panel(tower))); - ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade1Buy", 0, 0, 700, 160), "Upgrade", 70); - } - if (mod.level == 1) - { - ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade2", 0, 300, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade2Panel(tower))); - ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade2Buy", 0, 0, 700, 160), "Upgrade", 70); - } - if (mod.level >= 2) - { - var percent = mod.XP * 100 / mod.XPMax; - var size = 2970 * percent / 100; - ModHelperPanel xppanel = panel.AddPanel(new Info("Panel", 0, 325, 3000, 180), VanillaSprites.BrownInsertPanel); - ModHelperPanel xpbar = panel.AddPanel(new Info("Panel", (size - size / 2) - 2970 / 2 , 325, size, 150), VanillaSprites.MainBgPanelParagon); - ModHelperText upgrade1Buy = panel.AddText(new Info("text", 0, 325, 3000, 180), mod.XPMax - mod.XP + " Until Free Weapon", 70); - } - } - } + internal static readonly ModSettingBool SandboxMode = new(false) + { + requiresRestart = true, + icon = VanillaSprites.SandboxBtn, + description = "Enable Sandbox Mode" + }; + + + public static AncientMonkey mod; + public float newWeaponCost = 250; + public float baseNewWeaponCost = 250; + public float rareChance = 85; + public float epicChance = 100; + public float legendaryChance = 100; + public float exoticChance = 100; + public float godlyChance = 100; + public float omegaChance = 100; + public float rareStrongChance = 85; + public float epicStrongChance = 100; + public float legendaryStrongChance = 100; + public float exoticStrongChance = 100; + public float godlyStrongerChance = 100; + public float omegaStrongerChance = 100; + public float strongerWeaponCost = 1100; + public float baseStrongerWeaponCost = 1100; + public float newAbilityCost = 6500; + public float baseNewAbilityCost = 1750; + public bool upgradeOpen = false; + public bool selectingWeaponOpen = false; + public bool mib = false; + public bool panelOpen = false; + public float level = 0; + public float rangeBoostSandbox = 1; + public float attackSpeedBoostSandbox = 1; + public float moneyBoostSandbox = 1; + public int damageBoostSandbox = 0; + public int pierceBoostSandbox = 0; + public int newWeaponSlot = 3; + public int strongWeaponSlot = 3; + public int abilitySlot = 1; + public int extraWeaponSlotLevel = 0; + public int extraWeaponSlotLevelMax = 1; + public int extraWeaponSlotCost = 80000; + public int strongExtraWeaponSlotLevel = 0; + public int strongExtraWeaponSlotLevelMax = 1; + public int strongExtraWeaponSlotCost = 100000; + public int ExtraAbilitySlotLevel = 0; + public int ExtraAbilitySlotLevelMax = 1; + public int ExtraAbilitySlotCost = 160000; + public int ExtraLuckLevel = 0; + public int ExtraLuckMax = 20; + public int XP = 0; + public int XPMax = 0; + public float UpgradeCost = 125000; + public float Upgrade2Cost = 1000000; + public float ExtraLuckCost = 250; + public WeaponTemplate.Rarity minNewWeaponRarity = WeaponTemplate.Rarity.Common; + public WeaponTemplate.Rarity maxNewWeaponRarity = WeaponTemplate.Rarity.Exotic; + public WeaponTemplate.Rarity minStrongWeaponRarity = WeaponTemplate.Rarity.Common; + public WeaponTemplate.Rarity maxStrongWeaponRarity = WeaponTemplate.Rarity.Exotic; + + public ChallengeTemplate? activeChallenge = new None(); + public ChallengeTemplate selectedChallenge + { + get { return activeChallenge; } + set { activeChallenge = value; } + } + public override void OnApplicationStart() + { + + mod = this; + + foreach (var weapon in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) + { + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Common) + { + Common.CommonWpn.Add(weapon.WeaponName); + if (weapon.CustomIcon) + { + Common.CommonCustomImg.Add(weapon.CustomIcon); + } + else + { + Common.CommonCustomImg.Add(new Sprite()); + } + Common.CommonImg.Add(weapon.Icon); + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Rare) + { + Rare.RareWpn.Add(weapon.WeaponName); + Rare.RareImg.Add(weapon.Icon); + if (weapon.CustomIcon) + { + Rare.RareCustomImg.Add(weapon.CustomIcon); + } + else + { + Rare.RareCustomImg.Add(new Sprite()); + } + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Epic) + { + Epic.EpicWpn.Add(weapon.WeaponName); + Epic.EpicImg.Add(weapon.Icon); + if (weapon.CustomIcon) + { + Epic.EpicCustomImg.Add(weapon.CustomIcon); + } + else + { + Epic.EpicCustomImg.Add(new Sprite()); + } + + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Legendary) + { + Legendary.LegendaryWpn.Add(weapon.WeaponName); + Legendary.LegendaryImg.Add(weapon.Icon); + if (weapon.CustomIcon) + { + Legendary.LegendaryCustomImg.Add(weapon.CustomIcon); + } + else + { + Legendary.LegendaryCustomImg.Add(new Sprite()); + } + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Exotic) + { + Exotic.ExoticWpn.Add(weapon.WeaponName); + Exotic.ExoticImg.Add(weapon.Icon); + if (weapon.CustomIcon) + { + Exotic.ExoticCustomImg.Add(weapon.CustomIcon); + } + else + { + Exotic.ExoticCustomImg.Add(new Sprite()); + } + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Godly) + { + Godly.GodlyWpn.Add(weapon.WeaponName); + Godly.GodlyImg.Add(weapon.Icon); + if (weapon.CustomIcon) + { + Godly.GodlyCustomImg.Add(weapon.CustomIcon); + } + else + { + Godly.GodlyCustomImg.Add(new Sprite()); + } + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Omega) + { + Omega.OmegaWpn.Add(weapon.WeaponName); + Omega.OmegaImg.Add(weapon.Icon); + if (weapon.CustomIcon) + { + Omega.OmegaCustomImg.Add(weapon.CustomIcon); + } + else + { + Omega.OmegaCustomImg.Add(new Sprite()); + } + } + } + foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) + { + AbilityClass.AbilityName.Add(ability.AbilityName); + AbilityClass.AbilityImg.Add(ability.Icon); + if (ability.CustomIcon) + { + AbilityClass.AbilityCustomImg.Add(ability.CustomIcon); + } + else + { + AbilityClass.AbilityCustomImg.Add(new Sprite()); + } + } + } + + public void Reset() + { + newWeaponCost = 325 * mod.selectedChallenge.NewWeaponCostMult; + rareChance = 90; + epicChance = 100; + rareStrongChance = 90; + epicStrongChance = 100; + legendaryStrongChance = 100; + legendaryChance = 100; + exoticChance = 100; + exoticStrongChance = 100; + omegaChance = 100; + omegaStrongerChance = 100; + baseNewWeaponCost = 250 * mod.selectedChallenge.NewWeaponCostMult; + strongerWeaponCost = 500 * mod.selectedChallenge.StrongerWeaponCostMult; + baseStrongerWeaponCost = 500 * mod.selectedChallenge.StrongerWeaponCostMult; + newAbilityCost = 7500 * mod.selectedChallenge.AbilityWeaponCostMult; + baseNewAbilityCost = 1000 * mod.selectedChallenge.AbilityWeaponCostMult; + upgradeOpen = false; + selectingWeaponOpen = false; + mib = false; + panelOpen = false; + level = 0; + newWeaponSlot = 3; + strongWeaponSlot = 3; + abilitySlot = 1; + extraWeaponSlotLevel = 0; + extraWeaponSlotCost = 50000; + strongExtraWeaponSlotLevel = 0; + strongExtraWeaponSlotCost = 65000; + ExtraAbilitySlotLevel = 0; + ExtraAbilitySlotCost = 100000; + ExtraLuckCost = 700 * mod.selectedChallenge.LuckCostMult; + ExtraLuckLevel = 0; + minNewWeaponRarity = mod.selectedChallenge.MinNURarity; + maxNewWeaponRarity = mod.selectedChallenge.MaxNURarity; + minStrongWeaponRarity = mod.selectedChallenge.MinNURarity; + maxStrongWeaponRarity = mod.selectedChallenge.MaxNURarity; + UpgradeCost = 125000 * mod.selectedChallenge.UpgradeCostMult; + Upgrade2Cost = 1000000 * mod.selectedChallenge.UpgradeCostMult; + XP = 0; + XPMax = 0; + } + public override void OnGameModelLoaded(GameModel model) + { + Reset(); + } + public override void OnTowerSold(Tower tower, float amount) + { + if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) + { + Reset(); + } + } + public override void OnRestart() + { + MenuUi.instance.CloseMenu(); + } + public override void OnTowerCreated(Tower tower, Entity target, Model modelToUse) + { + if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) + { + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + minNewWeaponRarity = WeaponTemplate.Rarity.Common; + maxNewWeaponRarity = WeaponTemplate.Rarity.Common; + newWeaponSlot = 5; + MenuUi.NewWeaponPanel(rect, tower, false); + Reset(); + } + } + public override void OnNewGameModel(GameModel result) + { + foreach (var tower in result.towerSet.ToList()) + { + if (tower.name.Contains("AncientMonkey-AncientMonkey")) + { + tower.GetShopTowerDetails().towerCount = 1; + } + } + } + public override void OnTowerSelected(Tower tower) + { + if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) + { + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + MenuUi.CreateUpgradeMenu(rect, tower); + upgradeOpen = true; + } + } + public override void OnTowerDeselected(Tower tower) + { + if (tower.towerModel.name.Contains("AncientMonkey-AncientMonkey")) + { + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + upgradeOpen = false; + if (MenuUi.instance) + { + MenuUi.instance.CloseMenu(); + } + + } + } + [RegisterTypeInIl2Cpp(false)] + public class MenuUi : MonoBehaviour + { + public static MenuUi instance; + + public ModHelperInputField input; + public void CloseMenu() + { + if (gameObject) + { + Destroy(gameObject); + } + } + public void NewWeapon(Tower tower) + { + InGame game = InGame.instance; + if (SandboxMode) + { + RectTransform rect = game.uiRect; + MenuUi.NewWeaponPanel(rect, tower, false); + MenuUi.instance.CloseMenu(); + return; + } + if (game.GetCash() >= mod.newWeaponCost) + { + game.AddCash(-mod.newWeaponCost); + RectTransform rect = game.uiRect; + mod.newWeaponCost += mod.baseNewWeaponCost; + tower.worth += mod.newWeaponCost - mod.baseNewWeaponCost; + mod.baseNewWeaponCost *= 1.06f; + MenuUi.NewWeaponPanel(rect, tower, false); + MenuUi.instance.CloseMenu(); + } + } + public void WeaponSelected(string Weapon, Tower tower, bool levelup) + { + mod.panelOpen = false; + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + if (!SandboxMode) + { + Destroy(gameObject); + } + + foreach (var weapon in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) + { + if (weapon.WeaponName == Weapon) + { + weapon.stackIndex += 1; + weapon.EditTower(tower); + } + } + mod.XP += 1; + if (levelup) + { + mod.XP = 0; + } + if (mod.XP >= mod.XPMax && mod.level >= 2) + { + mod.XPMax += 2; + NewWeaponPanel(rect, tower, true); + + return; + } + mod.rareChance -= 5f + mod.ExtraLuckLevel * 0.45f; + mod.epicChance -= 1.45f + mod.ExtraLuckLevel * 0.1f; + if (mod.epicChance <= 88) + { + mod.legendaryChance -= 0.85f + mod.ExtraLuckLevel * 0.06f; + } + if (mod.legendaryChance <= 91) + { + mod.exoticChance -= 0.50f + mod.ExtraLuckLevel * 0.04f; + } + if (mod.level >= 1) + { + if (mod.exoticChance <= 94) + { + mod.godlyChance -= 0.3f + mod.ExtraLuckLevel * 0.025f; + } + } + if (mod.level >= 2) + { + if (mod.godlyChance <= 95) + { + mod.omegaChance -= 0.15f + mod.ExtraLuckLevel * 0.01f; + } + } + + if (mod.upgradeOpen == true && !SandboxMode) + { + CreateUpgradeMenu(rect, tower); + } + + mod.selectingWeaponOpen = false; + if (mod.mib) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.GetDescendants().ForEach(model => model.isActive = false); + foreach (var weaponModel in towerModel.GetDescendants().ToArray()) + { + if (weaponModel.projectile.HasBehavior()) + { + weaponModel.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + } + if (weaponModel.projectile.HasBehavior()) + { + weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + } + if (weaponModel.projectile.HasBehavior()) + { + weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + } + } + tower.UpdateRootModel(towerModel); + } + + } + public static ModHelperPanel CreateWeapon(WeaponTemplate weapon, Tower tower) + { + var sprite = VanillaSprites.GreyInsertPanel; + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Rare) + { + sprite = VanillaSprites.BlueInsertPanel; + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Epic) + { + sprite = VanillaSprites.MainBgPanelParagon; + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Legendary) + { + sprite = VanillaSprites.MainBGPanelYellow; + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Exotic) + { + sprite = VanillaSprites.MainBgPanelWhiteSmall; + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Godly) + { + sprite = VanillaSprites.MainBGPanelSilver; + } + if (weapon.WeaponRarity == WeaponTemplate.Rarity.Omega) + { + sprite = VanillaSprites.MainBgPanelHematite; + } + var panel = ModHelperPanel.Create(new Info("WeaponContent" + weapon.WeaponName, 0, 0, 2250, 150), sprite); + MenuUi upgradeUi = panel.AddComponent(); + ModHelperText wpnName = panel.AddText(new Info("wpnName", -600, 0, 1000, 150), weapon.WeaponName, 80, TextAlignmentOptions.MidlineLeft); + ModHelperText rarity = panel.AddText(new Info("rarity", 275, 0, 600, 150), weapon.WeaponRarity.ToString(), 80, TextAlignmentOptions.MidlineLeft); + ModHelperImage image = panel.AddImage(new Info("image", -100, 0, 140, 140), weapon.Icon); + ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", 900, 0, 400, 120), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.WeaponSelected(weapon.WeaponName, tower, false); })); + if (weapon.IsCamo) + { + ModHelperImage camoImg = panel.AddImage(new Info("camoImg", 460, 0, 120, 120), VanillaSprites.CamoBloonIcon); + } + if (weapon.IsLead) + { + ModHelperImage leadImg = panel.AddImage(new Info("leadImg", 580, 0, 120, 120), VanillaSprites.LeadBloonIcon); + } + ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Select", 60); + return panel; + } + public static void SandBoxWeaponPanel(RectTransform rect, Tower tower) + { + + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.MainBGPanelBlue); + panel.transform.DestroyAllChildren(); + ModHelperScrollPanel scrollPanel = panel.AddScrollPanel(new Info("scrollPanel", 0, 0, 2500, 1850), RectTransform.Axis.Vertical, VanillaSprites.MainBGPanelBlue, 15, 50); + ModHelperButton exit = panel.AddButton(new Info("exit", 1200, 900, 135, 135), VanillaSprites.RedBtn, new System.Action(() => + { + tower.SetSelectionBlocked(false); panel.DeleteObject(); if (mod.upgradeOpen == true) { CreateUpgradeMenu(rect, tower); } + })); + ModHelperText x = exit.AddText(new Info("x", 0, 0, 700, 160), "X", 80); + + for (int i = 1; i < 100; i++) + { + foreach (var weapon in ModContent.GetContent()) + { + if (weapon.SandboxIndex == i) + { + scrollPanel.AddScrollContent(CreateWeapon(weapon, tower)); + } + } + } + } + + public static void NewWeaponPanel(RectTransform rect, Tower tower, bool Levelup) + { + mod.panelOpen = true; + if (instance) + { + instance.CloseMenu(); + } + + if (SandboxMode) + { + SandBoxWeaponPanel(rect, tower); + return; + } + float weaponPanelWidth = 833.33f; + float weaponPanelX = 412.5f; + float weaponPanelY = 900; + float wpnContentX = 25 - (mod.newWeaponSlot - 1) * 425; + float panelWidth = mod.newWeaponSlot * weaponPanelWidth; + var imag = VanillaSprites.BrownInsertPanel; + if (mod.level == 1) + { + imag = VanillaSprites.BlueInsertPanel; + } + if (mod.level == 2) + { + imag = VanillaSprites.MainBgPanelParagon; + } + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, panelWidth, 1850, new UnityEngine.Vector2()), imag); + + MenuUi upgradeUi = panel.AddComponent(); + ModHelperText selectWpn = panel.AddText(new Info("selectWpn", 0, 800, 2500, 180), "Select New Weapon", 100); + if (!instance) + { + selectWpn.Text.text = "Choose A starter Weapon"; + selectWpn.Text.color = new Color(0, 1, 0); + } + if (Levelup) + { + selectWpn.Text.text = "Choose A level up Weapon"; + selectWpn.Text.color = new Color(0.46f, 0, 0.78f); + } + Il2CppSystem.Random rnd = new Il2CppSystem.Random(); + for (int i = 0; i < mod.newWeaponSlot; i++) + { + var WpnRarityNum = rnd.Next(1, 100); + var WpnRarity = "Common"; + var RarityNumber = 1; + var MinNum = 1; + var MaxNum = 1; + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) + { + MinNum = 1; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Rare) + { + MinNum = 2; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Epic) + { + MinNum = 3; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Legendary) + { + MinNum = 4; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Exotic) + { + MinNum = 5; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Godly) + { + MinNum = 6; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Omega) + { + MinNum = 7; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) + { + MaxNum = 1; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Rare) + { + MaxNum = 2; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Epic) + { + MaxNum = 3; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Legendary) + { + MaxNum = 4; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Exotic) + { + MaxNum = 5; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Godly) + { + MaxNum = 6; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Omega) + { + MaxNum = 7; + } + if (WpnRarityNum >= mod.rareChance) + { + RarityNumber = 2; + } + if (WpnRarityNum >= mod.epicChance) + { + RarityNumber = 3; + } + if (WpnRarityNum >= mod.legendaryChance) + { + RarityNumber = 4; + } + if (WpnRarityNum >= mod.exoticChance) + { + RarityNumber = 5; + } + if (WpnRarityNum >= mod.godlyChance) + { + RarityNumber = 6; + } + if (WpnRarityNum >= mod.omegaChance) + { + RarityNumber = 7; + } + if (RarityNumber < MinNum) + { + RarityNumber = MinNum; + } + if (RarityNumber > MaxNum) + { + RarityNumber = MaxNum; + } + if (RarityNumber == 2) + { + WpnRarity = "Rare"; + } + if (RarityNumber == 3) + { + WpnRarity = "Epic"; + } + if (RarityNumber == 4) + { + WpnRarity = "Legendary"; + } + if (RarityNumber == 5) + { + WpnRarity = "Exotic"; + } + if (RarityNumber == 6) + { + WpnRarity = "Godly"; + } + if (RarityNumber == 7) + { + WpnRarity = "Omega"; + } + + var sprite = VanillaSprites.GreyInsertPanel; + var numWpn = rnd.Next(0, Common.CommonWpn.Count); + var weapon = Common.CommonWpn[numWpn]; + var img = Common.CommonImg[numWpn]; + Sprite csprite = Common.CommonCustomImg[numWpn]; + if (WpnRarity == "Rare") + { + numWpn = rnd.Next(0, Rare.RareWpn.Count); + sprite = VanillaSprites.BlueInsertPanel; + weapon = Rare.RareWpn[numWpn]; + img = Rare.RareImg[numWpn]; + csprite = Rare.RareCustomImg[numWpn]; + } + if (WpnRarity == "Epic") + { + numWpn = rnd.Next(0, Epic.EpicWpn.Count); + sprite = VanillaSprites.MainBgPanelParagon; + weapon = Epic.EpicWpn[numWpn]; + img = Epic.EpicImg[numWpn]; + csprite = Epic.EpicCustomImg[numWpn]; + } + if (WpnRarity == "Legendary") + { + numWpn = rnd.Next(0, Legendary.LegendaryWpn.Count); + sprite = VanillaSprites.MainBGPanelYellow; + weapon = Legendary.LegendaryWpn[numWpn]; + img = Legendary.LegendaryImg[numWpn]; + csprite = Legendary.LegendaryCustomImg[numWpn]; + } + if (WpnRarity == "Exotic") + { + numWpn = rnd.Next(0, Exotic.ExoticWpn.Count); + sprite = VanillaSprites.MainBgPanelWhiteSmall; + weapon = Exotic.ExoticWpn[numWpn]; + img = Exotic.ExoticImg[numWpn]; + csprite = Exotic.ExoticCustomImg[numWpn]; + } + if (WpnRarity == "Godly") + { + numWpn = rnd.Next(0, Godly.GodlyWpn.Count); + sprite = VanillaSprites.MainBGPanelSilver; + weapon = Godly.GodlyWpn[numWpn]; + img = Godly.GodlyImg[numWpn]; + csprite = Godly.GodlyCustomImg[numWpn]; + } + if (WpnRarity == "Omega") + { + numWpn = rnd.Next(0, Omega.OmegaWpn.Count); + sprite = VanillaSprites.MainBgPanelHematite; + weapon = Omega.OmegaWpn[numWpn]; + img = Omega.OmegaImg[numWpn]; + csprite = Omega.OmegaCustomImg[numWpn]; + } + ModHelperPanel wpnPanel = panel.AddPanel(new Info("wpnPanel", weaponPanelX, weaponPanelY, 650, 1450, new UnityEngine.Vector2()), sprite); + ModHelperText rarityText = panel.AddText(new Info("rarityText", wpnContentX, 600, 800, 180), WpnRarity, 100); + ModHelperText weaponText = panel.AddText(new Info("weaponText", wpnContentX, 500, 800, 180), weapon, 75); + + ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", wpnContentX, -600, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.WeaponSelected(weapon, tower, Levelup))); + ModHelperText selectWpnTxt = selectWpnBtn.AddText(new Info("selectWpnTxt", 0, 0, 700, 160), "Select", 70); + foreach (var weaponContent in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) + { + if (weaponContent.WeaponName == weapon) + { + ModHelperText descText = panel.AddText(new Info("descText", wpnContentX, 400, 800, 180), weaponContent.Description, 55); + ModHelperText StackIndex = panel.AddText(new Info("StackIndex", wpnContentX - 275, 650, 100, 100), $"{weaponContent.stackIndex}", 80); + if (weaponContent.CustomIcon) + { + ModHelperImage image = panel.AddImage(new Info("image", wpnContentX, 0, 400, 400), csprite); + } + else + { + ModHelperImage image = panel.AddImage(new Info("image", wpnContentX, 0, 400, 400), img); + } + if (weaponContent.IsCamo && !weaponContent.IsLead) + { + ModHelperImage camoImg = panel.AddImage(new Info("camoImg", wpnContentX + 275, 650, 100, 100), VanillaSprites.CamoBloonIcon); + } + if (weaponContent.IsLead && !weaponContent.IsCamo) + { + ModHelperImage leadImg = panel.AddImage(new Info("leadImg", wpnContentX + 275, 650, 100, 100), VanillaSprites.LeadBloonIcon); + } + if (weaponContent.IsLead && weaponContent.IsCamo) + { + ModHelperImage camoImg = panel.AddImage(new Info("camoImg", wpnContentX + 275, 650, 100, 100), VanillaSprites.CamoBloonIcon); + ModHelperImage leadImg = panel.AddImage(new Info("leadImg", wpnContentX + 275, 560, 100, 100), VanillaSprites.LeadBloonIcon); + } + } + } + weaponPanelX += weaponPanelWidth; + wpnContentX += weaponPanelWidth; + + } + } + public static void SandBoxStrongWeaponPanel(RectTransform rect, Tower tower) + { + + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 1250, 1500, new UnityEngine.Vector2()), VanillaSprites.MainBGPanelBlue); + MenuUi upgradeUi = panel.AddComponent(); + panel.transform.DestroyAllChildren(); + if (mod.damageBoostSandbox < 0) + { + mod.damageBoostSandbox = 0; + } + if (mod.pierceBoostSandbox < 0) + { + mod.pierceBoostSandbox = 0; + } + if (mod.rangeBoostSandbox <= 0.9) + { + mod.rangeBoostSandbox = 1f; + } + if (mod.attackSpeedBoostSandbox <= 0) + { + mod.attackSpeedBoostSandbox = 0.05f; + } + if (mod.attackSpeedBoostSandbox >= 1.05f) + { + mod.attackSpeedBoostSandbox = 1f; + } + if (mod.moneyBoostSandbox <= 0.9) + { + mod.moneyBoostSandbox = 1f; + } + + mod.rangeBoostSandbox = Mathf.Round(mod.rangeBoostSandbox * 10) / 10; + mod.attackSpeedBoostSandbox = Mathf.Round(mod.attackSpeedBoostSandbox * 100) / 100; + mod.moneyBoostSandbox = Mathf.Round(mod.moneyBoostSandbox * 10) / 10; + + panel.AddText(new Info("text", 300, 350, 1200, 150), "Damage Boost: " + mod.damageBoostSandbox, 75, TextAlignmentOptions.TopLeft); + panel.AddButton(new Info("button1", -400, 430, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.damageBoostSandbox += 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + panel.AddButton(new Info("button2", -400, 350, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.damageBoostSandbox -= 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + + panel.AddText(new Info("text2", 300, 150, 1200, 150), "Pierce Boost: " + mod.pierceBoostSandbox, 75, TextAlignmentOptions.TopLeft); + panel.AddButton(new Info("button3", -400, 230, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.pierceBoostSandbox += 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + panel.AddButton(new Info("button4", -400, 150, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.pierceBoostSandbox -= 1; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + + panel.AddText(new Info("text2", 300, -50, 1200, 150), "Range Boost: " + mod.rangeBoostSandbox, 75, TextAlignmentOptions.TopLeft); + panel.AddButton(new Info("button3", -400, 30, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.rangeBoostSandbox += 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + panel.AddButton(new Info("button4", -400, -50, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.rangeBoostSandbox -= 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + + panel.AddText(new Info("text2", 300, -250, 1200, 150), "Attack Speed Boost: " + mod.attackSpeedBoostSandbox, 75, TextAlignmentOptions.TopLeft); + panel.AddButton(new Info("button3", -400, -170, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.attackSpeedBoostSandbox -= 0.05f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + panel.AddButton(new Info("button4", -400, -250, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.attackSpeedBoostSandbox += 0.05f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + + panel.AddText(new Info("text2", 300, -450, 1200, 150), "Money Boost: " + mod.moneyBoostSandbox, 75, TextAlignmentOptions.TopLeft); + panel.AddButton(new Info("button3", -400, -370, 100, 100), VanillaSprites.AddMoreBtn, new System.Action(() => { mod.moneyBoostSandbox += 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + panel.AddButton(new Info("button4", -400, -450, 100, 100), VanillaSprites.AddRemoveBtn, new System.Action(() => { mod.moneyBoostSandbox -= 0.1f; panel.DeleteObject(); ; SandBoxStrongWeaponPanel(rect, tower); })); + + ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", 0, -600, 400, 120), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.StrongWpnSelected(mod.damageBoostSandbox, mod.pierceBoostSandbox, mod.attackSpeedBoostSandbox, mod.rangeBoostSandbox, mod.moneyBoostSandbox, tower); panel.DeleteObject(); })); + ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Edit", 70); + } + public static void StrongWeaponPanel(RectTransform rect, Tower tower) + { + mod.panelOpen = true; + if (SandboxMode) + { + SandBoxStrongWeaponPanel(rect, tower); + return; + } + float strongWeaponPanelWidth = 833.33f; + float strongWeaponPanelX = 412.5f; + float strongWeaponPanelY = 900; + float strongWpnContentX = 25 - (mod.strongWeaponSlot - 1) * 425; + float panelWidth = mod.strongWeaponSlot * strongWeaponPanelWidth; + var img = VanillaSprites.BrownInsertPanel; + if (mod.level == 1) + { + img = VanillaSprites.BlueInsertPanel; + } + if (mod.level == 2) + { + img = VanillaSprites.MainBgPanelParagon; + } + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, panelWidth, 1850, new UnityEngine.Vector2()), img); + ModHelperText selectStrongWpn = panel.AddText(new Info("selectStrongWpn", 0, 800, 2500, 180), "Select Stronger Weapon Card", 100); + Il2CppSystem.Random rnd = new Il2CppSystem.Random(); + + MenuUi upgradeUi = panel.AddComponent(); + for (int i = 0; i < mod.strongWeaponSlot; i++) + { + var StrongWpnRarityNum = rnd.Next(1, 100); + var StrongWpnRarity = "Common"; + var RarityNumber = 1; + var MinNum = 1; + var MaxNum = 1; + var damageBoost = rnd.Next(0, 2); + var pierceBoost = rnd.Next(0, 2); + float rangeBoost = rnd.Next(0, 7); + float attackSpeedBoost = rnd.Next(95, 101); + float moneyBoost = rnd.Next(0, 7); + var sprite = VanillaSprites.GreyInsertPanel; + + + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) + { + MinNum = 1; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Rare) + { + MinNum = 2; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Epic) + { + MinNum = 3; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Legendary) + { + MinNum = 4; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Exotic) + { + MinNum = 5; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Godly) + { + MinNum = 6; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Omega) + { + MinNum = 7; + } + if (mod.minNewWeaponRarity == WeaponTemplate.Rarity.Common) + { + MaxNum = 1; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Rare) + { + MaxNum = 2; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Epic) + { + MaxNum = 3; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Legendary) + { + MaxNum = 4; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Exotic) + { + MaxNum = 5; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Godly) + { + MaxNum = 6; + } + if (mod.maxNewWeaponRarity == WeaponTemplate.Rarity.Omega) + { + MaxNum = 7; + } + if (StrongWpnRarityNum >= mod.rareStrongChance) + { + RarityNumber = 2; + } + if (StrongWpnRarityNum >= mod.epicStrongChance) + { + RarityNumber = 3; + } + if (StrongWpnRarityNum >= mod.legendaryStrongChance) + { + RarityNumber = 4; + } + if (StrongWpnRarityNum >= mod.exoticStrongChance) + { + RarityNumber = 5; + } + if (StrongWpnRarityNum >= mod.godlyStrongerChance) + { + RarityNumber = 6; + } + if (StrongWpnRarityNum >= mod.omegaStrongerChance) + { + RarityNumber = 7; + } + if (RarityNumber < MinNum) + { + RarityNumber = MinNum; + } + if (RarityNumber > MaxNum) + { + RarityNumber = MaxNum; + } + if (RarityNumber == 2) + { + StrongWpnRarity = "Rare"; + } + if (RarityNumber == 3) + { + StrongWpnRarity = "Epic"; + } + if (RarityNumber == 4) + { + StrongWpnRarity = "Legendary"; + } + if (RarityNumber == 5) + { + StrongWpnRarity = "Exotic"; + } + if (RarityNumber == 6) + { + StrongWpnRarity = "Godly"; + } + if (RarityNumber == 7) + { + StrongWpnRarity = "Omega"; + } + if (StrongWpnRarity == "Rare") + { + damageBoost = rnd.Next(0, 3); + pierceBoost = rnd.Next(0, 3); + rangeBoost = rnd.Next(0, 10); + attackSpeedBoost = rnd.Next(91, 101); + moneyBoost = rnd.Next(0, 10); + sprite = VanillaSprites.BlueInsertPanel; + } + if (StrongWpnRarity == "Epic") + { + damageBoost = rnd.Next(1, 5); + pierceBoost = rnd.Next(1, 5); + rangeBoost = rnd.Next(0, 13); + attackSpeedBoost = rnd.Next(88, 101); + moneyBoost = rnd.Next(0, 13); + sprite = VanillaSprites.MainBgPanelParagon; + } + if (StrongWpnRarity == "Legendary") + { + damageBoost = rnd.Next(2, 7); + pierceBoost = rnd.Next(2, 7); + rangeBoost = rnd.Next(0, 15); + attackSpeedBoost = rnd.Next(85, 101); + moneyBoost = rnd.Next(0, 15); + sprite = VanillaSprites.MainBGPanelYellow; + } + if (StrongWpnRarity == "Exotic") + { + damageBoost = rnd.Next(3, 9); + pierceBoost = rnd.Next(3, 9); + rangeBoost = rnd.Next(0, 18); + attackSpeedBoost = rnd.Next(83, 101); + moneyBoost = rnd.Next(0, 18); + sprite = VanillaSprites.MainBgPanelWhiteSmall; + } + if (StrongWpnRarity == "Godly") + { + damageBoost = rnd.Next(5, 15); + pierceBoost = rnd.Next(5, 15); + rangeBoost = rnd.Next(0, 23); + attackSpeedBoost = rnd.Next(75, 101); + moneyBoost = rnd.Next(0, 23); + sprite = VanillaSprites.MainBGPanelSilver; + } + if (StrongWpnRarity == "Omega") + { + damageBoost = rnd.Next(8, 22); + pierceBoost = rnd.Next(8, 22); + rangeBoost = rnd.Next(0, 28); + attackSpeedBoost = rnd.Next(71, 101); + moneyBoost = rnd.Next(0, 28); + sprite = VanillaSprites.MainBgPanelHematite; + } + attackSpeedBoost = attackSpeedBoost / 100; + rangeBoost = 1 + rangeBoost / 100; + moneyBoost = 1 + moneyBoost / 100; + ModHelperPanel strongWpnPanel = panel.AddPanel(new Info("strongWpnPanel", strongWeaponPanelX, strongWeaponPanelY, 650, 1450, new UnityEngine.Vector2()), sprite); + + ModHelperText rarityText = panel.AddText(new Info("rarityText", strongWpnContentX, 600, 800, 180), StrongWpnRarity, 100); + ModHelperText cardText = panel.AddText(new Info("cardText", strongWpnContentX, 500, 800, 180), "Stronger Weapon Card", 50); + ModHelperText dmgBoostText = panel.AddText(new Info("dmgBoostText", strongWpnContentX, 200, 800, 180), "Damage Boost :" + damageBoost, 50); + ModHelperText prcBoostText = panel.AddText(new Info("prcBoostText", strongWpnContentX, 100, 800, 180), "Pierce Boost :" + pierceBoost, 50); + ModHelperText rngBoostText = panel.AddText(new Info("rngBoostText", strongWpnContentX, 0, 800, 180), "Range Boost : X" + rangeBoost, 50); + ModHelperText atkspdBoostText = panel.AddText(new Info("atkspdBoostText", strongWpnContentX, -100, 800, 180), "Attack Speed Boost : X" + attackSpeedBoost, 50); + ModHelperText mnyBoostText = panel.AddText(new Info("mnyBoostText", strongWpnContentX, -200, 800, 180), "Money Boost : X" + moneyBoost, 50); + ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", strongWpnContentX, -600, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.StrongWpnSelected(damageBoost, pierceBoost, attackSpeedBoost, rangeBoost, moneyBoost, tower))); + ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Select", 70); + strongWeaponPanelX += strongWeaponPanelWidth; + strongWpnContentX += strongWeaponPanelWidth; + } + } + public void StrongWeapon(Tower tower) + { + InGame game = InGame.instance; + if (SandboxMode) + { + RectTransform rect = game.uiRect; + MenuUi.StrongWeaponPanel(rect, tower); + MenuUi.instance.CloseMenu(); + + return; + } + + if (game.GetCash() >= mod.strongerWeaponCost) + { + game.AddCash(-mod.strongerWeaponCost); + RectTransform rect = game.uiRect; + MenuUi.StrongWeaponPanel(rect, tower); + mod.strongerWeaponCost += mod.baseStrongerWeaponCost; + tower.worth += mod.strongerWeaponCost - mod.baseStrongerWeaponCost; + mod.baseStrongerWeaponCost *= 1.06f; + + + MenuUi.instance.CloseMenu(); + + } + } + public void StrongWpnSelected(int Dmg, int Pierce, float AtkSpd, float Range, float Money, Tower tower) + { + mod.panelOpen = false; + InGame game = InGame.instance; + Destroy(gameObject); + RectTransform rect = game.uiRect; + var towerModel = tower.rootModel.Duplicate().Cast(); + if (mod.upgradeOpen == true) + { + CreateUpgradeMenu(rect, tower); + } + towerModel.range *= Range; + if (towerModel.HasBehavior()) + { + foreach (var towercreate in towerModel.GetBehaviors().ToArray()) + { + if (towercreate.towerModel.HasBehavior()) + { + foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) + { + if (towerModel.GetBehavior().towerModel.HasBehavior()) + { + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].rate *= AtkSpd; + attackModel.weapons[0].projectile.pierce += Pierce; + attackModel.weapons[0].projectile.GetDamageModel().damage += Dmg; + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().lifespan += Range / 90; + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().minimum *= Money; + attackModel.weapons[0].projectile.GetBehavior().maximum *= Money; + } + + } + + } + foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) + { + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].rate *= AtkSpd; + attackModel.weapons[0].projectile.pierce += Pierce; + attackModel.weapons[0].projectile.GetDamageModel().damage += Dmg; + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().lifespan += Range / 90; + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().minimum *= Money; + attackModel.weapons[0].projectile.GetBehavior().maximum *= Money; + } + } + } + } + } + foreach (var attackModel in towerModel.GetDescendants().ToArray()) + { + if (!attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].rate *= AtkSpd; + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.pierce += Pierce; + attackModel.weapons[0].projectile.GetDamageModel().damage += Dmg; + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().lifespan += Range / 60; + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().minimum *= Money; + attackModel.weapons[0].projectile.GetBehavior().maximum *= Money; + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().projectile.pierce += Pierce; + attackModel.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += Dmg; + + } + if (attackModel.weapons[0].projectile.HasBehavior()) + { + attackModel.weapons[0].projectile.GetBehavior().projectile.pierce += Pierce; + attackModel.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += Dmg; + } + } + } + foreach (var attackModel in towerModel.GetDescendants().ToArray()) + { + attackModel.range *= Range; + } + mod.rareStrongChance -= 6.7f + mod.ExtraLuckLevel * 0.55f; + mod.epicStrongChance -= 2f + mod.ExtraLuckLevel * 0.15f; + if (mod.epicStrongChance <= 88) + { + mod.legendaryStrongChance -= 1.15f + mod.ExtraLuckLevel * 0.09f; + } + if (mod.legendaryStrongChance <= 91) + { + mod.exoticStrongChance -= 0.75f + mod.ExtraLuckLevel * 0.05f; + } + if (mod.exoticStrongChance <= 93) + { + mod.godlyStrongerChance -= 0.55f + mod.ExtraLuckLevel * 0.03f; + } + if (mod.godlyChance <= 94) + { + mod.omegaStrongerChance -= 0.30f + mod.ExtraLuckLevel * 0.015f; + } + tower.UpdateRootModel(towerModel); + + + } + public void NewAbility(Tower tower) + { + InGame game = InGame.instance; + if (SandboxMode) + { + RectTransform rect = game.uiRect; + MenuUi.NewAbilityPanel(rect, tower); + MenuUi.instance.CloseMenu(); + return; + } + if (game.GetCash() >= mod.newAbilityCost) + { + game.AddCash(-mod.newAbilityCost); + RectTransform rect = game.uiRect; + mod.newAbilityCost += mod.baseNewAbilityCost; + tower.worth += mod.newAbilityCost - mod.baseNewAbilityCost; + MenuUi.NewAbilityPanel(rect, tower); + MenuUi.instance.CloseMenu(); + } + } + public static ModHelperPanel CreateAbility(AbilityTemplate ability, Tower tower) + { + + var sprite = VanillaSprites.GreyInsertPanel; + var panel = ModHelperPanel.Create(new Info("WeaponContent" + ability.AbilityName, 0, 0, 2250, 150), sprite); + MenuUi upgradeUi = panel.AddComponent(); + ModHelperText abilityName = panel.AddText(new Info("abilityName", -600, 0, 1000, 150), ability.AbilityName, 80, TextAlignmentOptions.MidlineLeft); + ModHelperImage image = panel.AddImage(new Info("image", -100, 0, 140, 140), ability.Icon); + ModHelperButton selectWpnBtn = panel.AddButton(new Info("selectWpnBtn", 900, 0, 400, 120), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.AbilitySelected(ability.AbilityName, tower, "none"); })); + ModHelperText selectWpn = selectWpnBtn.AddText(new Info("selectWpn", 0, 0, 700, 160), "Select", 60); + return panel; + } + public static void SandBoxAbilityPanel(RectTransform rect, Tower tower) + { + + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.MainBGPanelBlue); + panel.transform.DestroyAllChildren(); + + ModHelperScrollPanel scrollPanel = panel.AddScrollPanel(new Info("scrollPanel", 0, 0, 2500, 1850), RectTransform.Axis.Vertical, VanillaSprites.MainBGPanelBlue, 15, 50); + ModHelperButton exit = panel.AddButton(new Info("exit", 1200, 900, 135, 135), VanillaSprites.RedBtn, new System.Action(() => + { + tower.SetSelectionBlocked(false); panel.DeleteObject(); + })); + ModHelperText x = exit.AddText(new Info("x", 0, 0, 700, 160), "X", 80); + foreach (var ability in ModContent.GetContent()) + { + scrollPanel.AddScrollContent(CreateAbility(ability, tower)); + } + } + public static void NewAbilityPanel(RectTransform rect, Tower tower) + { + mod.panelOpen = true; + if (SandboxMode) + { + SandBoxAbilityPanel(rect, tower); + return; + } + + float abilityPanelWidth = 833.33f; + float abilityPanelX = 412.5f; + float abilityPanelY = 900; + float abilityContentX = 25 + (mod.abilitySlot - 1) * -425; + float panelWidth = mod.abilitySlot * abilityPanelWidth; + var sprite = VanillaSprites.BrownInsertPanel; + if (mod.level == 1) + { + sprite = VanillaSprites.BlueInsertPanel; + } + if (mod.level == 2) + { + sprite = VanillaSprites.MainBgPanelParagon; + } + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, panelWidth, 1850, new UnityEngine.Vector2()), sprite); + ModHelperText selectAb = panel.AddText(new Info("selectAb", 0, 800, 2500, 180), "Select New Ability", 100); + MenuUi upgradeUi = panel.AddComponent(); + + Il2CppSystem.Random rnd = new Il2CppSystem.Random(); + for (int i = 0; i < mod.abilitySlot; i++) + { + var num = rnd.Next(0, AbilityClass.AbilityName.Count); + var abSelected = AbilityClass.AbilityName[num]; + var imgSelected = AbilityClass.AbilityImg[num]; + Sprite csprite = AbilityClass.AbilityCustomImg[num]; + ModHelperPanel abilityPanel = panel.AddPanel(new Info("abilityPanel", abilityPanelX, abilityPanelY, 650, 1450, new UnityEngine.Vector2()), VanillaSprites.GreyInsertPanel); + ModHelperText abilityText = panel.AddText(new Info("abilityText", abilityContentX, 600, 800, 180), "Ability", 100); + ModHelperText abilityText2 = panel.AddText(new Info("abilityText2", abilityContentX, 500, 800, 180), abSelected, 75); + ModHelperButton selectAbilityBtn = panel.AddButton(new Info("selectAbilityBtn", abilityContentX, -600, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.AbilitySelected(abSelected, tower, "Common"))); + ModHelperText selectAbility1 = selectAbilityBtn.AddText(new Info("selectAbility1", 0, 0, 700, 160), "Select", 70); + + + foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) + { + if (ability.AbilityName == abSelected) + { + ModHelperText descText = panel.AddText(new Info("descText", abilityContentX, 400, 800, 180), ability.Description, 55); + ModHelperText StackIndex = panel.AddText(new Info("StackIndex", abilityContentX - 275, 650, 100, 100), $"{ability.stackIndex}", 80); + if (ability.CustomIcon) + { + ModHelperImage image = panel.AddImage(new Info("image", abilityContentX, 0, 400, 400), csprite); + } + else + { + ModHelperImage image = panel.AddImage(new Info("image", abilityContentX, 0, 400, 400), imgSelected); + } + } + } + abilityPanelX += abilityPanelWidth; + abilityContentX += abilityPanelWidth; + } + + } + public void AbilitySelected(string Ability, Tower tower, string rarity) + { + mod.panelOpen = false; + InGame game = InGame.instance; + if (!SandboxMode) + { + Destroy(gameObject); + } + RectTransform rect = game.uiRect; + if (mod.upgradeOpen == true && !SandboxMode) + { + CreateUpgradeMenu(rect, tower); + } + + if (Ability == "MIB") + { + mod.mib = true; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.GetDescendants().ForEach(model => model.isActive = false); + foreach (var weaponModel in towerModel.GetDescendants().ToArray()) + { + if (weaponModel.projectile.HasBehavior()) + { + weaponModel.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + } + if (weaponModel.projectile.HasBehavior()) + { + weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + } + if (weaponModel.projectile.HasBehavior()) + { + weaponModel.projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + } + } + tower.UpdateRootModel(towerModel); + } + foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) + { + if (ability.AbilityName == Ability) + { + ability.EditTower(tower); + ability.stackIndex += 1; + } + } + + } + public void Upgrade1Panel(Tower tower) + { + MenuUi.instance.CloseMenu(); + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.BrownInsertPanel); + MenuUi upgradeUi = panel.AddComponent(); + ModHelperText upgradeText = panel.AddText(new Info("upgradeText", 0, 800, 2500, 180), "Upgrade To Advanced Ancient Monkey", 100); + ModHelperText text1 = panel.AddText(new Info("text1", 0, 500, 2500, 180), "-Unlock a new rarity", 75); + ModHelperText text2 = panel.AddText(new Info("text2", 0, 400, 2500, 180), "-Increase New Weapon Slot by 1", 75); + ModHelperText text3 = panel.AddText(new Info("text3", 0, 300, 2500, 180), "-Increase Stronger Weapon Slot by 1", 75); + ModHelperText text4 = panel.AddText(new Info("text4", 0, 200, 2500, 180), "-Increase New Ability Slot by 1", 75); + ModHelperText text5 = panel.AddText(new Info("text5", 0, 100, 2500, 180), "-Greatly Increased Luck", 75); + ModHelperText text6 = panel.AddText(new Info("text6", 0, 0, 2500, 180), "-Removed Common Rarity", 75); + ModHelperText text7 = panel.AddText(new Info("text7", 0, -100, 2500, 180), "-Stronger Weapon and New Weapon Cost Increased", 75); + ModHelperText text8 = panel.AddText(new Info("text8", 0, -200, 2500, 180), "-New Ability Cost Decreased", 75); + ModHelperText text9 = panel.AddText(new Info("text9", 0, -300, 2500, 180), "-Keep Everything", 75); + ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade1", 350, -800, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade1(tower))); + ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade1Buy", 0, 0, 700, 160), "Upgrade ($" + mod.UpgradeCost / 1000 + "K)", 70); + ModHelperButton cancel = panel.AddButton(new Info("cancel", -350, -800, 500, 160), VanillaSprites.RedBtnLong, new System.Action(() => upgradeUi.Cancel(tower))); + ModHelperText cancelText = cancel.AddText(new Info("cancelText", 0, 0, 700, 160), "Cancel", 70); + } + public void Upgrade2Panel(Tower tower) + { + MenuUi.instance.CloseMenu(); + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), VanillaSprites.BrownInsertPanel); + MenuUi upgradeUi = panel.AddComponent(); + ModHelperText upgradeText = panel.AddText(new Info("upgradeText", 0, 800, 2500, 180), "Upgrade To Super Ancient Monkey", 100); + ModHelperText text1 = panel.AddText(new Info("text1", 0, 500, 2500, 180), "-Unlock a new rarity", 75); + ModHelperText text2 = panel.AddText(new Info("text2", 0, 400, 2500, 180), "-Greatly Increased Luck", 75); + ModHelperText text3 = panel.AddText(new Info("text3", 0, 300, 2500, 180), "-Removed Rare Rarity", 75); + ModHelperText text4 = panel.AddText(new Info("text4", 0, 200, 2500, 180), "-Stronger Weapon and New Weapon Cost Increased", 75); + ModHelperText text5 = panel.AddText(new Info("text5", 0, 100, 2500, 180), "-New Ability Cost Decreased", 75); + ModHelperText text6 = panel.AddText(new Info("text5", 0, 0, 2500, 180), "-New XP System", 75); + ModHelperText text7 = panel.AddText(new Info("text7", 0, -100, 2500, 180), "-Keep Everything", 75); + ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade1", 350, -800, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade2(tower))); + ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade1Buy", 0, 0, 700, 160), "Upgrade ($" + mod.Upgrade2Cost / 1000000 + "M)", 70); + ModHelperButton cancel = panel.AddButton(new Info("cancel", -350, -800, 500, 160), VanillaSprites.RedBtnLong, new System.Action(() => upgradeUi.Cancel(tower))); + ModHelperText cancelText = cancel.AddText(new Info("cancelText", 0, 0, 700, 160), "Cancel", 70); + } + public string[] Monkeys = { + "DartMonkey", + "BoomerangMonkey", + "BombShooter", + "TackShooter", + "IceMonkey", + "GlueGunner", + "SniperMonkey", + "MonkeySub", + "MonkeyBuccaneer", + "MonkeyAce", + "HeliPilot", + "MortarMonkey", + "DartlingGunner", + "WizardMonkey", + "SuperMonkey", + "NinjaMonkey", + "Alchemist", + "Druid", + "BananaFarm", + "MonkeyVillage", + "SpikeFactory", + "EngineerMonkey" + }; + public string Monkey = "DartMonkey"; + public int upgradeTier = 0; + public int upgradePath = 0; + public void ChangeSkin(Tower tower) + { + Il2CppNinjaKiwi.Common.Random rnd = new Il2CppNinjaKiwi.Common.Random(); + var monkey = Monkeys[rnd.Next(1, Monkeys.Length)]; + var upgradeTier = rnd.Next(1, 6); + var upgradePath = rnd.Next(1, 4); + instance.Monkey = monkey; + instance.upgradePath = upgradePath; + instance.upgradeTier = upgradeTier; + + var towerModel = tower.rootModel.Duplicate().Cast(); + if (upgradePath == 1) + { + towerModel.display = Game.instance.model.GetTowerFromId(monkey + "-" + upgradeTier + "00").display; + } + if (upgradePath == 2) + { + towerModel.display = Game.instance.model.GetTowerFromId(monkey + "-0" + upgradeTier + "0").display; + } + if (upgradePath == 3) + { + towerModel.display = Game.instance.model.GetTowerFromId(monkey + "-00" + upgradeTier).display; + } + tower.UpdateRootModel(towerModel); + } + public void ExtraPanel(Tower tower) + { + mod.panelOpen = true; + + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + var sprite = VanillaSprites.BrownInsertPanel; + + if (mod.level == 1) + { + sprite = VanillaSprites.BlueInsertPanel; + } + if (mod.level == 2) + { + sprite = VanillaSprites.MainBgPanelParagon; + } + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 1500, 2500, 1850, new UnityEngine.Vector2()), sprite); + MenuUi upgradeUi = panel.AddComponent(); + ModHelperText upgradeText = panel.AddText(new Info("upgradeText", 0, 800, 2500, 180), "Extra Upgrades Panel", 100); + + var pipY = 400; + var pipX = -650; + for (int i = 0; i < mod.extraWeaponSlotLevel; i++) + { + ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); + pipX += 87; + } + for (int i = 0; i < mod.extraWeaponSlotLevelMax - mod.extraWeaponSlotLevel; i++) + { + ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); + pipX += 87; + } + if (mod.extraWeaponSlotLevel == mod.extraWeaponSlotLevelMax) + { + ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 400, 525, 145), VanillaSprites.GreenBtnLong, null); + ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Max", 50); + } + else + { + ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 400, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.extraWeaponSlotCost) { game.AddCash(mod.extraWeaponSlotCost *= -1); mod.extraWeaponSlotLevel += 1; panel.DeleteObject(); ExtraPanel(tower); mod.newWeaponSlot++; } })); + ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Extra New Weapon Slot : $" + mod.extraWeaponSlotCost, 45); + } + + pipY = 250; + pipX = -650; + for (int i = 0; i < mod.strongExtraWeaponSlotLevel; i++) + { + ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); + pipX += 87; + } + for (int i = 0; i < mod.extraWeaponSlotLevelMax - mod.strongExtraWeaponSlotLevel; i++) + { + ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); + pipX += 87; + } + if (mod.strongExtraWeaponSlotLevel == mod.extraWeaponSlotLevelMax) + { + ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 250, 525, 145), VanillaSprites.GreenBtnLong, null); + ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Max", 60); + } + else + { + ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 250, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.strongExtraWeaponSlotCost) { game.AddCash(mod.strongExtraWeaponSlotCost *= -1); mod.strongExtraWeaponSlotLevel += 1; panel.DeleteObject(); ExtraPanel(tower); mod.strongWeaponSlot++; } })); + ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Extra Stronger Weapon Slot : $" + mod.strongExtraWeaponSlotCost, 45); + } + + pipY = 100; + pipX = -650; + for (int i = 0; i < mod.ExtraAbilitySlotLevel; i++) + { + ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); + pipX += 87; + } + for (int i = 0; i < mod.ExtraAbilitySlotLevelMax - mod.ExtraAbilitySlotLevel; i++) + { + ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); + pipX += 87; + } + if (mod.ExtraAbilitySlotLevel == mod.ExtraAbilitySlotLevelMax) + { + ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 100, 525, 145), VanillaSprites.GreenBtnLong, null); + ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Max", 60); + } + else + { + ModHelperButton upgradeExtraSlotLevel = panel.AddButton(new Info("upgradeExtraSlotLevel", -980, 100, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.ExtraAbilitySlotCost) { game.AddCash(mod.ExtraAbilitySlotCost *= -1); mod.ExtraAbilitySlotLevel += 1; panel.DeleteObject(); ExtraPanel(tower); mod.abilitySlot++; } })); + ModHelperText upgradeExtraSlotLevelText = upgradeExtraSlotLevel.AddText(new Info("upgradeExtraSlotLevelText", 0, 0, 550, 150), "Extra New Ability Slot : $" + mod.ExtraAbilitySlotCost, 50); + } + + pipY = -50; + pipX = -650; + for (int i = 0; i < mod.ExtraLuckLevel; i++) + { + ModHelperImage pipUpgraded = panel.AddImage(new Info("pipUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOnGreen); + pipX += 87; + } + for (int i = 0; i < mod.ExtraLuckMax - mod.ExtraLuckLevel; i++) + { + ModHelperImage pipNotUpgraded = panel.AddImage(new Info("pipNotUpgraded", pipX, pipY, 80, 160), VanillaSprites.MkOffRed); + pipX += 87; + } + if (mod.ExtraLuckLevel == mod.ExtraLuckMax) + { + ModHelperButton upgradeExtraLevel = panel.AddButton(new Info("upgradeExtraLevel", -980, -50, 525, 145), VanillaSprites.GreenBtnLong, null); + ModHelperText upgradeExtraLevelText = upgradeExtraLevel.AddText(new Info("upgradeExtraLevelText", 0, 0, 550, 150), "Max", 60); + } + else + { + ModHelperButton upgradeExtraLevel = panel.AddButton(new Info("upgradeExtraLevel", -980, -50, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { if (game.GetCash() >= mod.ExtraLuckCost) { game.AddCash(mod.ExtraLuckCost * -1); mod.ExtraLuckLevel += 1; mod.ExtraLuckCost *= 1.35f; ; panel.DeleteObject(); ExtraPanel(tower); } })); + ModHelperText upgradeExtraLevelText = upgradeExtraLevel.AddText(new Info("upgradeExtraLevelText", 0, 0, 550, 150), "Extra Luck : $" + Mathf.Round(mod.ExtraLuckCost), 50); + } + + + ModHelperButton monkeySkinChange = panel.AddButton(new Info("monkeySkinChange", -980, -200, 525, 145), VanillaSprites.GreenBtnLong, new System.Action(() => { ChangeSkin(tower); panel.DeleteObject(); ExtraPanel(tower); })); + ModHelperText monkeySkinChangeText = monkeySkinChange.AddText(new Info("monkeySkinChangeText", 0, 0, 550, 150), "Change Skin", 60); + if (upgradePath == 1) + { + ModHelperText monkeySkinChangeMonkeyText = panel.AddText(new Info("monkeySkinChangeMonkeyText", 50, -200, 1000, 150), Monkey + " " + upgradeTier + "00", 60); + } + if (upgradePath == 2) + { + ModHelperText monkeySkinChangeMonkeyText = panel.AddText(new Info("monkeySkinChangeMonkeyText", 50, -200, 1000, 150), Monkey + " 0" + upgradeTier + "0", 60); + } + if (upgradePath == 3) + { + ModHelperText monkeySkinChangeMonkeyText = panel.AddText(new Info("monkeySkinChangeMonkeyText", 50, -200, 1000, 150), Monkey + " 00" + upgradeTier, 60); + } + + + ModHelperButton cancel = panel.AddButton(new Info("cancel", 0, -800, 500, 160), VanillaSprites.RedBtnLong, new System.Action(() => upgradeUi.Cancel(tower))); + ModHelperText cancelText = cancel.AddText(new Info("cancelText", 0, 0, 700, 160), "Cancel", 70); + } + public void Upgrade1(Tower tower) + { + InGame game = InGame.instance; + if (game.GetCash() >= mod.UpgradeCost) + { + game.AddCash(-mod.UpgradeCost); + + RectTransform rect = game.uiRect; + + mod.newWeaponCost = 450 * mod.selectedChallenge.NewWeaponCostMult; + mod.baseNewWeaponCost = 350 * mod.selectedChallenge.NewWeaponCostMult; + mod.rareChance = 0; + mod.epicChance = 75; + mod.legendaryChance = 98; + mod.exoticChance = 100; + mod.godlyChance = 100; + mod.rareStrongChance = 0; + mod.epicStrongChance = 70; + mod.legendaryStrongChance = 95; + mod.exoticStrongChance = 100; + mod.godlyStrongerChance = 100; + mod.strongerWeaponCost = 950 * mod.selectedChallenge.StrongerWeaponCostMult; + mod.baseStrongerWeaponCost = 750 * mod.selectedChallenge.StrongerWeaponCostMult; + mod.newAbilityCost = 6000 * mod.selectedChallenge.AbilityWeaponCostMult; + + mod.baseNewAbilityCost = 750 * mod.selectedChallenge.AbilityWeaponCostMult; + mod.level += 1; + mod.newWeaponSlot += 1; + mod.strongWeaponSlot += 1; + mod.abilitySlot += 1; + mod.minNewWeaponRarity = mod.selectedChallenge.MinURarity; + mod.maxNewWeaponRarity = mod.selectedChallenge.MaxURarity; + mod.minStrongWeaponRarity = mod.selectedChallenge.MinURarity; + mod.maxStrongWeaponRarity = mod.selectedChallenge.MaxURarity; + mod.panelOpen = false; + if (mod.upgradeOpen == true) + { + CreateUpgradeMenu(rect, tower); + } + + Destroy(gameObject); + } + } + public void Upgrade2(Tower tower) + { + InGame game = InGame.instance; + if (game.GetCash() >= mod.Upgrade2Cost) + { + game.AddCash(-mod.Upgrade2Cost); + + RectTransform rect = game.uiRect; + + mod.newWeaponCost = 2350 * mod.selectedChallenge.NewWeaponCostMult; + mod.baseNewWeaponCost = 1750 * mod.selectedChallenge.NewWeaponCostMult; + mod.rareChance = 0; + mod.epicChance = 0; + mod.legendaryChance = 80; + mod.exoticChance = 99; + mod.godlyChance = 100; + mod.rareStrongChance = 0; + mod.epicStrongChance = 0; + mod.legendaryStrongChance = 75; + mod.exoticStrongChance = 98; + mod.godlyStrongerChance = 100; + mod.strongerWeaponCost = 3500 * mod.selectedChallenge.StrongerWeaponCostMult; + mod.baseStrongerWeaponCost = 2250 * mod.selectedChallenge.StrongerWeaponCostMult; + mod.newAbilityCost = 5500 * mod.selectedChallenge.AbilityWeaponCostMult; + + mod.baseNewAbilityCost = 500 * mod.selectedChallenge.AbilityWeaponCostMult; + mod.level += 1; + mod.minNewWeaponRarity = mod.selectedChallenge.MinUURarity; + mod.maxNewWeaponRarity = mod.selectedChallenge.MaxUURarity; + mod.minStrongWeaponRarity = mod.selectedChallenge.MinUURarity; + mod.maxStrongWeaponRarity = mod.selectedChallenge.MaxUURarity; + mod.XP = 0; + mod.XPMax = 2; + + mod.panelOpen = false; + if (mod.upgradeOpen == true) + { + CreateUpgradeMenu(rect, tower); + } + + Destroy(gameObject); + } + } + public void Cancel(Tower tower) + { + InGame game = InGame.instance; + RectTransform rect = game.uiRect; + Destroy(gameObject); + mod.panelOpen = false; + if (mod.upgradeOpen == true) + { + CreateUpgradeMenu(rect, tower); + } + } + public static void CreateUpgradeMenu(RectTransform rect, Tower tower) + { + if (mod.panelOpen == true) + { + return; + } + var sprite = VanillaSprites.BrownInsertPanel; + if (mod.level == 1) + { + sprite = VanillaSprites.BlueInsertPanel; + } + if (mod.level == 2) + { + sprite = VanillaSprites.MainBgPanelParagon; + } + ModHelperPanel panel = rect.gameObject.AddModHelperPanel(new Info("Panel_", 2200, 200, 3333, 450, new UnityEngine.Vector2()), sprite); + MenuUi upgradeUi = panel.AddComponent(); + instance = upgradeUi; + + if (SandboxMode) + { + ModHelperText newWpnCost = panel.AddText(new Info("newWpnCost", -416, 140, 1000, 180), "New Weapon: Free", 70); + } + else + { + ModHelperText newWpnCost = panel.AddText(new Info("newWpnCost", -416, 140, 1000, 180), "New Weapon: $" + Mathf.Round(mod.newWeaponCost), 70); + } + if (mod.selectingWeaponOpen == false) + { + ModHelperButton newWpnBtn = panel.AddButton(new Info("newWpnBtn", -416, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.NewWeapon(tower))); + ModHelperText newWpnBuy = newWpnBtn.AddText(new Info("newWpnBuy", 0, 0, 700, 160), "Buy", 70); + } + ModHelperText newWpnDesc = panel.AddText(new Info("newWpnDesc", -416, -100, 860, 180), "Give an extra weapon", 42); + + if (SandboxMode) + { + ModHelperText strongWpnCost = panel.AddText(new Info("strongWpnCost", -1216, 140, 1000, 180), "Stronger Weapon: Free", 70); + } + else + { + ModHelperText strongWpnCost = panel.AddText(new Info("strongWpnCost", -1216, 140, 1000, 180), "Stronger Weapon: $" + Mathf.Round(mod.strongerWeaponCost), 70); + } + + if (mod.selectingWeaponOpen == false) + { + ModHelperButton strongWpnBtn = panel.AddButton(new Info("strongWpnBtn", -1216, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.StrongWeapon(tower))); + ModHelperText strongWpnBuy = strongWpnBtn.AddText(new Info("strongWpnBuy", 0, 0, 700, 160), "Buy", 70); + } + + ModHelperText strongWpnDesc = panel.AddText(new Info("strongWpnDesc", -1216, -100, 860, 180), "Make your current weapon stronger", 42); + if (SandboxMode) + { + ModHelperText abilityCost = panel.AddText(new Info("abilityCost", 384, 140, 1000, 180), "New Ability: Free", 70); + } + else + { + ModHelperText abilityCost = panel.AddText(new Info("abilityCost", 384, 140, 1000, 180), "New Ability: $" + Mathf.Round(mod.newAbilityCost), 70); + } + + ModHelperText extraText = panel.AddText(new Info("extraText", 1217, 140, 1000, 180), "Extra Panel", 70); + ModHelperButton extraBtn = panel.AddButton(new Info("extraBtn", 1217, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => { upgradeUi.ExtraPanel(tower); MenuUi.instance.CloseMenu(); })); + ModHelperText extraOpen = extraBtn.AddText(new Info("extraOpen", 0, 0, 700, 160), "Open", 70); + + if (mod.selectingWeaponOpen == false) + { + ModHelperButton abilityBtn = panel.AddButton(new Info("abilityBtn", 384, 20, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.NewAbility(tower))); + ModHelperText abilityBuy = abilityBtn.AddText(new Info("abilityBuy", 0, 0, 700, 160), "Buy", 70); + } + ModHelperText abilityDesc = panel.AddText(new Info("abilityDesc", 384, -100, 860, 180), "Give an ability", 42); + + if (mod.level == 0) + { + ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade1", 0, 300, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade1Panel(tower))); + ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade1Buy", 0, 0, 700, 160), "Upgrade", 70); + } + if (mod.level == 1) + { + ModHelperButton upgrade1 = panel.AddButton(new Info("upgrade2", 0, 300, 500, 160), VanillaSprites.GreenBtnLong, new System.Action(() => upgradeUi.Upgrade2Panel(tower))); + ModHelperText upgrade1Buy = upgrade1.AddText(new Info("upgrade2Buy", 0, 0, 700, 160), "Upgrade", 70); + } + if (mod.level >= 2) + { + var percent = mod.XP * 100 / mod.XPMax; + var size = 2970 * percent / 100; + ModHelperPanel xppanel = panel.AddPanel(new Info("Panel", 0, 325, 3000, 180), VanillaSprites.BrownInsertPanel); + ModHelperPanel xpbar = panel.AddPanel(new Info("Panel", (size - size / 2) - 2970 / 2, 325, size, 150), VanillaSprites.MainBgPanelParagon); + ModHelperText upgrade1Buy = panel.AddText(new Info("text", 0, 325, 3000, 180), mod.XPMax - mod.XP + " Until Free Weapon", 70); + } + } + } } \ No newline at end of file diff --git a/ModHelperData.cs b/ModHelperData.cs index 4333b6e..610959e 100644 --- a/ModHelperData.cs +++ b/ModHelperData.cs @@ -2,12 +2,12 @@ namespace AncientMonkey; public static class ModHelperData { - public const string WorksOnVersion = "42.0"; - public const string Version = "4.0.0"; - public const string Name = "AncientMonkey"; + public const string WorksOnVersion = "42.0"; + public const string Version = "4.0.0"; + public const string Name = "AncientMonkey"; - public const string Description = "Add the Ancient Monkey to Bloons TD6"; + public const string Description = "Add the Ancient Monkey to Bloons TD6"; - public const string RepoOwner = "lasgauti"; // TODO add your github username hero, also in the download url in README.md - public const string RepoName = "AncientMonkey"; // TODO add your repo name here, also in the download url in README.md + public const string RepoOwner = "lasgauti"; // TODO add your github username hero, also in the download url in README.md + public const string RepoName = "AncientMonkey"; // TODO add your repo name here, also in the download url in README.md } diff --git a/PlasmaEffects.cs b/PlasmaEffects.cs index a8d60f4..1ffc0bb 100644 --- a/PlasmaEffects.cs +++ b/PlasmaEffects.cs @@ -1,87 +1,87 @@ -using System.Linq; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity.Display; -using BTD_Mod_Helper.Api.Display; +using BTD_Mod_Helper.Api.Display; using BTD_Mod_Helper.Extensions; -using UnityEngine; -using Il2CppAssets.Scripts.Unity; +using Il2CppAssets.Scripts.Models.Towers; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities.Behaviors; +using Il2CppAssets.Scripts.Unity; +using Il2CppAssets.Scripts.Unity.Display; using System.Collections.Generic; +using System.Linq; +using UnityEngine; namespace PlasmaEffects { - public class LightningDisplay : ModDisplay - { - public override string BaseDisplay => Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050").GetDescendant().effectModel.assetId.GUID; - public Dictionary psColor = new() - { - { "Glow", new Color(0.7f, 0.1f, 1f, 0.409f) }, - { "Lightning", new Color(0.7f, 0.1f, 1f) }, - { "Pulse", new Color(0.5f, 0.1f, 1f, 0.518f) }, - { "PulseBig", new Color(0.5f, 0.1f, 1f, 0.518f) } - }; + public class LightningDisplay : ModDisplay + { + public override string BaseDisplay => Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050").GetDescendant().effectModel.assetId.GUID; + public Dictionary psColor = new() + { + { "Glow", new Color(0.7f, 0.1f, 1f, 0.409f) }, + { "Lightning", new Color(0.7f, 0.1f, 1f) }, + { "Pulse", new Color(0.5f, 0.1f, 1f, 0.518f) }, + { "PulseBig", new Color(0.5f, 0.1f, 1f, 0.518f) } + }; - public override void ModifyDisplayNode(UnityDisplayNode node) - { + public override void ModifyDisplayNode(UnityDisplayNode node) + { #if DEBUG node.PrintInfo(); #endif - foreach (ParticleSystem ps in node.GetComponentsInChildren()) - { - ps.startSize *= 0.1f; - if (psColor.ContainsKey(ps.gameObject.name)) ps.startColor = psColor[ps.gameObject.name]; - } - } - } + foreach (ParticleSystem ps in node.GetComponentsInChildren()) + { + ps.startSize *= 0.1f; + if (psColor.ContainsKey(ps.gameObject.name)) ps.startColor = psColor[ps.gameObject.name]; + } + } + } - public class WpnPlasmaDisplay : ModDisplay - { - public override string BaseDisplay => Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-040").GetDescendant().effectModel.assetId.GUID; - public Dictionary psColor = new() - { - //{ "Glow", new Color(0.7f, 0.1f, 1f, 0.409f) }, - //{ "Lightning", new Color(0.7f, 0.1f, 1f) }, - //{ "Pulse", new Color(0.5f, 0.1f, 1f, 0.518f) }, - //{ "PulseBig", new Color(0.5f, 0.1f, 1f, 0.518f) } - }; + public class WpnPlasmaDisplay : ModDisplay + { + public override string BaseDisplay => Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-040").GetDescendant().effectModel.assetId.GUID; + public Dictionary psColor = new() + { + //{ "Glow", new Color(0.7f, 0.1f, 1f, 0.409f) }, + //{ "Lightning", new Color(0.7f, 0.1f, 1f) }, + //{ "Pulse", new Color(0.5f, 0.1f, 1f, 0.518f) }, + //{ "PulseBig", new Color(0.5f, 0.1f, 1f, 0.518f) } + }; - public override void ModifyDisplayNode(UnityDisplayNode node) - { + public override void ModifyDisplayNode(UnityDisplayNode node) + { #if DEBUG node.PrintInfo(); #endif - foreach (ParticleSystem ps in node.GetComponentsInChildren()) - { - ps.startSize *= 0.75f; - if (psColor.ContainsKey(ps.gameObject.name)) ps.startColor = psColor[ps.gameObject.name]; - } - } - } + foreach (ParticleSystem ps in node.GetComponentsInChildren()) + { + ps.startSize *= 0.75f; + if (psColor.ContainsKey(ps.gameObject.name)) ps.startColor = psColor[ps.gameObject.name]; + } + } + } - public class WpnNovaDisplay : ModDisplay - { - public override string BaseDisplay => Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050").GetDescendant().effectModel.assetId.GUID; - public Dictionary psColor = new() - { - //{ "Glow", new Color(0.7f, 0.1f, 1f, 0.409f) }, - //{ "Lightning", new Color(0.7f, 0.1f, 1f) }, - //{ "Pulse", new Color(0.5f, 0.1f, 1f, 0.518f) }, - //{ "PulseBig", new Color(0.5f, 0.1f, 1f, 0.518f) } - }; + public class WpnNovaDisplay : ModDisplay + { + public override string BaseDisplay => Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050").GetDescendant().effectModel.assetId.GUID; + public Dictionary psColor = new() + { + //{ "Glow", new Color(0.7f, 0.1f, 1f, 0.409f) }, + //{ "Lightning", new Color(0.7f, 0.1f, 1f) }, + //{ "Pulse", new Color(0.5f, 0.1f, 1f, 0.518f) }, + //{ "PulseBig", new Color(0.5f, 0.1f, 1f, 0.518f) } + }; - public override void ModifyDisplayNode(UnityDisplayNode node) - { + public override void ModifyDisplayNode(UnityDisplayNode node) + { #if DEBUG node.PrintInfo(); #endif - foreach (ParticleSystem ps in node.GetComponentsInChildren()) - { - ps.startSize *= 0.75f; - if (psColor.ContainsKey(ps.gameObject.name)) ps.startColor = psColor[ps.gameObject.name]; - } - } - } + foreach (ParticleSystem ps in node.GetComponentsInChildren()) + { + ps.startSize *= 0.75f; + if (psColor.ContainsKey(ps.gameObject.name)) ps.startColor = psColor[ps.gameObject.name]; + } + } + } } \ No newline at end of file diff --git a/Weapons-Ability/Ability.cs b/Weapons-Ability/Ability.cs index ebac6a9..8049ab2 100644 --- a/Weapons-Ability/Ability.cs +++ b/Weapons-Ability/Ability.cs @@ -1,357 +1,347 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BTD_Mod_Helper.Api; using BTD_Mod_Helper.Api.Enums; +using BTD_Mod_Helper.Extensions; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.GenericBehaviors; using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Models.Towers.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Mutators; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; +using Il2CppAssets.Scripts.Simulation.Towers; +using Il2CppAssets.Scripts.Simulation.Towers.Weapons.Behaviors; using Il2CppAssets.Scripts.Unity; -using UnityEngine; +using Il2CppSystem; +using Il2CppSystem.IO; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppSystem; -using Il2CppAssets.Scripts.Simulation.Towers.Weapons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Mutators; -using Il2CppAssets.Scripts.Models.GenericBehaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities.Behaviors; -using BTD_Mod_Helper.Api; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppSystem.IO; namespace AncientMonkey.Weapons { - public class MIB : AbilityTemplate - { - public override string AbilityName => "MIB"; - public override string Icon => VanillaSprites.MonkeyIntelligenceBureauUpgradeIcon; - public override void EditTower(Tower tower) - { - } - } - public class SummoningPhoenix : AbilityTemplate - { - public override string AbilityName => "Summoning Phoenix"; - public override string Icon => VanillaSprites.SummonPhoenixUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("WizardMonkey-042").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class Teleportation : AbilityTemplate - { - public override string AbilityName => "Teleportation"; - public override string Icon => VanillaSprites.DarkKnightUpgradeIconAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("SuperMonkey-004").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class BladeMaelstrom : AbilityTemplate - { - public override string AbilityName => "Blade Maelstrom"; - public override string Icon => VanillaSprites.BladeMaelstromUpgradeIconAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("TackShooter-040").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class TechTerror : AbilityTemplate - { - public override string AbilityName => "Tech Terror"; - public override string Icon => VanillaSprites.TechTerrorUpgradeIconAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("SuperMonkey-040").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class SpikeStorm : AbilityTemplate - { - public override string AbilityName => "Spike Storm"; - public override string Icon => VanillaSprites.SpikeStormUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("SpikeFactory-040").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class Overclock : AbilityTemplate - { - public override string AbilityName => "Overclock"; - public override string Icon => VanillaSprites.OverclockUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("EngineerMonkey-040").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class FirstStrikeCapability : AbilityTemplate - { - public override string AbilityName => "First Strike Capability"; - public override string Icon => VanillaSprites.FirstStrikeCapabilityUpgradeIconAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("MonkeySub-040").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class SnowStorm : AbilityTemplate - { - public override string AbilityName => "Snow Storm"; - public override string Icon => VanillaSprites.SnowstormUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("IceMonkey-040").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class CarpetOfSpike : AbilityTemplate - { - public override string AbilityName => "Carpet Of Spike"; - public override string Icon => VanillaSprites.CarpetOfSpikesUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("SpikeFactory-250").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class MoabEliminator : AbilityTemplate - { - public override string AbilityName => "Moab Eliminator"; - public override string Icon => VanillaSprites.MoabEliminatorUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("BombShooter-050").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class MonkeyNomics : AbilityTemplate - { - public override string AbilityName => "Monkey Nomics"; - public override string Icon => VanillaSprites.MonkeyNomicsUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("BananaFarm-050").GetAbility().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class PermaPhoenix : AbilityTemplate - { - public override string AbilityName => "Perma Phoenix"; - public override string Icon => VanillaSprites.WizardLordPhoenixUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class FireStorm : AbilityTemplate - { - public override string AbilityName => "Fire Storm"; - public override string Icon => VanillaSprites.FirestormAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("Gwendolin 20").GetAbility(1).Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class MOABHex : AbilityTemplate - { - public override string AbilityName => "MOAB Hex"; - public override string Icon => VanillaSprites.MoabHexAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("Ezili 20").GetAbility(2).Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class BallOfLight : AbilityTemplate - { - public override string AbilityName => "Ball Of Light"; - public override string Icon => VanillaSprites.BallofLightAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("Adora 20").GetAbility(2).Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class PermaUCAV : AbilityTemplate - { - public override string AbilityName => "Perma UCAV"; - public override string Icon => VanillaSprites.UcavAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - phoenix.towerModel = Game.instance.model.GetTowerFromId("UCAVPerma").Duplicate(); - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class PsionicScream : AbilityTemplate - { - public override string AbilityName => "Psionic Scream"; - public override string Icon => VanillaSprites.PsionicScreamAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("Psi 20").GetAbility(1).Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class MOABBarrage : AbilityTemplate - { - public override string AbilityName => "MOAB Barrage"; - public override string Icon => VanillaSprites.MOABBarrageAA; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("CaptainChurchill 20").GetAbility(1).Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class BenjaminEndOfRoundCash : AbilityTemplate - { - public override string AbilityName => "Ben End Round Cash"; - public override string Icon => VanillaSprites.BenjaminIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var ab = Game.instance.model.GetTowerFromId("Benjamin 20").GetBehavior().Duplicate(); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class BananaStockExchange : AbilityTemplate - { - public override string AbilityName => "Banana Stock Exchange"; - public override string Icon => VanillaSprites.ThriveIcon; - public override Sprite CustomIcon => GetSprite("BananaStockExchangeIcon"); - public override string Description => "Custom Ability by LynxC"; - public override void EditTower(Tower tower) - { - foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) - { - if (ability.Name == "BananaStockExchange") - { - if (ability.stackIndex > 1) - { - var towerModel = tower.rootModel.Duplicate().Cast(); + public class MIB : AbilityTemplate + { + public override string AbilityName => "MIB"; + public override string Icon => VanillaSprites.MonkeyIntelligenceBureauUpgradeIcon; + public override void EditTower(Tower tower) + { + } + } + public class SummoningPhoenix : AbilityTemplate + { + public override string AbilityName => "Summoning Phoenix"; + public override string Icon => VanillaSprites.SummonPhoenixUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("WizardMonkey-042").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class Teleportation : AbilityTemplate + { + public override string AbilityName => "Teleportation"; + public override string Icon => VanillaSprites.DarkKnightUpgradeIconAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("SuperMonkey-004").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class BladeMaelstrom : AbilityTemplate + { + public override string AbilityName => "Blade Maelstrom"; + public override string Icon => VanillaSprites.BladeMaelstromUpgradeIconAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("TackShooter-040").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class TechTerror : AbilityTemplate + { + public override string AbilityName => "Tech Terror"; + public override string Icon => VanillaSprites.TechTerrorUpgradeIconAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("SuperMonkey-040").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class SpikeStorm : AbilityTemplate + { + public override string AbilityName => "Spike Storm"; + public override string Icon => VanillaSprites.SpikeStormUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("SpikeFactory-040").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class Overclock : AbilityTemplate + { + public override string AbilityName => "Overclock"; + public override string Icon => VanillaSprites.OverclockUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("EngineerMonkey-040").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class FirstStrikeCapability : AbilityTemplate + { + public override string AbilityName => "First Strike Capability"; + public override string Icon => VanillaSprites.FirstStrikeCapabilityUpgradeIconAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("MonkeySub-040").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class SnowStorm : AbilityTemplate + { + public override string AbilityName => "Snow Storm"; + public override string Icon => VanillaSprites.SnowstormUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("IceMonkey-040").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class CarpetOfSpike : AbilityTemplate + { + public override string AbilityName => "Carpet Of Spike"; + public override string Icon => VanillaSprites.CarpetOfSpikesUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("SpikeFactory-250").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class MoabEliminator : AbilityTemplate + { + public override string AbilityName => "Moab Eliminator"; + public override string Icon => VanillaSprites.MoabEliminatorUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("BombShooter-050").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class MonkeyNomics : AbilityTemplate + { + public override string AbilityName => "Monkey Nomics"; + public override string Icon => VanillaSprites.MonkeyNomicsUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("BananaFarm-050").GetAbility().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class PermaPhoenix : AbilityTemplate + { + public override string AbilityName => "Perma Phoenix"; + public override string Icon => VanillaSprites.WizardLordPhoenixUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class FireStorm : AbilityTemplate + { + public override string AbilityName => "Fire Storm"; + public override string Icon => VanillaSprites.FirestormAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("Gwendolin 20").GetAbility(1).Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class MOABHex : AbilityTemplate + { + public override string AbilityName => "MOAB Hex"; + public override string Icon => VanillaSprites.MoabHexAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("Ezili 20").GetAbility(2).Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class BallOfLight : AbilityTemplate + { + public override string AbilityName => "Ball Of Light"; + public override string Icon => VanillaSprites.BallofLightAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("Adora 20").GetAbility(2).Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class PermaUCAV : AbilityTemplate + { + public override string AbilityName => "Perma UCAV"; + public override string Icon => VanillaSprites.UcavAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + phoenix.towerModel = Game.instance.model.GetTowerFromId("UCAVPerma").Duplicate(); + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class PsionicScream : AbilityTemplate + { + public override string AbilityName => "Psionic Scream"; + public override string Icon => VanillaSprites.PsionicScreamAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("Psi 20").GetAbility(1).Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class MOABBarrage : AbilityTemplate + { + public override string AbilityName => "MOAB Barrage"; + public override string Icon => VanillaSprites.MOABBarrageAA; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("CaptainChurchill 20").GetAbility(1).Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class BenjaminEndOfRoundCash : AbilityTemplate + { + public override string AbilityName => "Ben End Round Cash"; + public override string Icon => VanillaSprites.BenjaminIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var ab = Game.instance.model.GetTowerFromId("Benjamin 20").GetBehavior().Duplicate(); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class BananaStockExchange : AbilityTemplate + { + public override string AbilityName => "Banana Stock Exchange"; + public override string Icon => VanillaSprites.ThriveIcon; + public override Sprite CustomIcon => GetSprite("BananaStockExchangeIcon"); + public override string Description => "Custom Ability by LynxC"; + public override void EditTower(Tower tower) + { + foreach (var ability in ModContent.GetContent().OrderByDescending(c => c.mod == mod)) + { + if (ability.Name == "BananaStockExchange") + { + if (ability.stackIndex > 1) + { + var towerModel = tower.rootModel.Duplicate().Cast(); - if (towerModel.HasBehavior()) - { - foreach (var towercreate in towerModel.GetBehaviors().ToArray()) - { - if (towercreate.towerModel.HasBehavior()) - { - foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) - { - if (towerModel.GetBehavior().towerModel.HasBehavior()) - { - if (attackModel.weapons[0].projectile.HasBehavior()) - { - towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().minimum *= 1.5f; - towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().maximum *= 1.5f; - } - } - } - foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) - { - if (attackModel.weapons[0].projectile.HasBehavior()) - { - towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().minimum *= 1.5f; - towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().maximum *= 1.5f; - } - } - } - } - } - foreach (var attackModel in towerModel.GetDescendants().ToArray()) - { - if (!attackModel.weapons[0].projectile.HasBehavior()) - { - if (attackModel.weapons[0].projectile.HasBehavior()) - { - towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().minimum *= 1.5f; - towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().maximum *= 1.5f; - } - } - } - foreach (var cashModel in towerModel.GetDescendants().ToArray()) - { - cashModel.cashPerRound *= 1.5f; - } + if (towerModel.HasBehavior()) + { + foreach (var towercreate in towerModel.GetBehaviors().ToArray()) + { + if (towercreate.towerModel.HasBehavior()) + { + foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) + { + if (towerModel.GetBehavior().towerModel.HasBehavior()) + { + if (attackModel.weapons[0].projectile.HasBehavior()) + { + towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().minimum *= 1.5f; + towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().maximum *= 1.5f; + } + } + } + foreach (var attackModel in towercreate.towerModel.GetBehavior().GetBehaviors().ToArray()) + { + if (attackModel.weapons[0].projectile.HasBehavior()) + { + towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().minimum *= 1.5f; + towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().maximum *= 1.5f; + } + } + } + } + } + foreach (var attackModel in towerModel.GetDescendants().ToArray()) + { + if (!attackModel.weapons[0].projectile.HasBehavior()) + { + if (attackModel.weapons[0].projectile.HasBehavior()) + { + towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().minimum *= 1.5f; + towerModel.GetAttackModel().weapons[0].projectile.GetBehavior().maximum *= 1.5f; + } + } + } + foreach (var cashModel in towerModel.GetDescendants().ToArray()) + { + cashModel.cashPerRound *= 1.5f; + } - tower.UpdateRootModel(towerModel); - } - else - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var cash = Game.instance.model.GetTower(TowerType.BananaFarm, 0, 0, 5).GetBehavior().Duplicate(); - cash.cashPerRound = 1000; + tower.UpdateRootModel(towerModel); + } + else + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var cash = Game.instance.model.GetTower(TowerType.BananaFarm, 0, 0, 5).GetBehavior().Duplicate(); + cash.cashPerRound = 1000; - towerModel.AddBehavior(cash); - tower.UpdateRootModel(towerModel); - } - } - } - } - } - public class AbilityClass - { - public static List AbilityName = new List(); - public static List AbilityImg = new List(); - public static List AbilityCustomImg = new List(); - } + towerModel.AddBehavior(cash); + tower.UpdateRootModel(towerModel); + } + } + } + } + } + public class AbilityClass + { + public static List AbilityName = new List(); + public static List AbilityImg = new List(); + public static List AbilityCustomImg = new List(); + } } diff --git a/Weapons-Ability/AbilityTemplate.cs b/Weapons-Ability/AbilityTemplate.cs index 38ce0b2..03ca5f4 100644 --- a/Weapons-Ability/AbilityTemplate.cs +++ b/Weapons-Ability/AbilityTemplate.cs @@ -1,30 +1,24 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api; +using BTD_Mod_Helper.Api; +using Il2CppAssets.Scripts.Simulation.Towers; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using BTD_Mod_Helper.Api; -using Il2CppAssets.Scripts.Simulation.Towers; using UnityEngine; namespace AncientMonkey.Weapons { - public abstract class AbilityTemplate : ModContent - { - public override void Register() { } - public abstract string AbilityName { get; } - public abstract string Icon { get; } - public abstract void EditTower(Tower tower); - public float stackIndex = 0; - public virtual string Description { get; } - public virtual Sprite CustomIcon { get; } - public virtual bool IsCamo { get; } - public virtual bool IsLead { get; } - } + public abstract class AbilityTemplate : ModContent + { + public override void Register() { } + public abstract string AbilityName { get; } + public abstract string Icon { get; } + public abstract void EditTower(Tower tower); + public float stackIndex = 0; + public virtual string Description { get; } + public virtual Sprite CustomIcon { get; } + public virtual bool IsCamo { get; } + public virtual bool IsLead { get; } + } } diff --git a/Weapons-Ability/Common.cs b/Weapons-Ability/Common.cs index 36f44be..b735287 100644 --- a/Weapons-Ability/Common.cs +++ b/Weapons-Ability/Common.cs @@ -1,390 +1,390 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using AncientMonkey.Projectiles; using BTD_Mod_Helper.Api.Enums; using BTD_Mod_Helper.Extensions; +using Il2Cpp; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.GenericBehaviors; using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using System.Diagnostics; -using Il2Cpp; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; -using Il2CppAssets.Scripts.Models.GenericBehaviors; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; +using Il2CppAssets.Scripts.Simulation.Towers; +using Il2CppAssets.Scripts.Unity; using Il2CppInterop.Runtime.InteropTypes.Arrays; -using AncientMonkey.Projectiles; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; namespace AncientMonkey.Weapons { - public class Dart : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Dart"; - public override string Icon => VanillaSprites.SharpShotsUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Boomerang : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Boomerang"; - public override string Icon => VanillaSprites.ImprovedRangsUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Tack : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.FasterShootingUpgradeIcon; - public override string WeaponName => "Tack"; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("TackShooter").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Nail : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.LargerServiceAreaUpgradeIcon; - public override string WeaponName => "Nail"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Glue : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.GlueSoakUpgradeIcon; - public override string WeaponName => "Glue"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("GlueGunner").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Bomb : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.BiggerBombsUpgradeIcon; - public override string WeaponName => "Bomb"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BombShooter").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Magic : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.IntenseMagicUpgradeIcon; - public override string WeaponName => "Magic"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("WizardMonkey").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Quincy : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.QuincyIcon; - public override string WeaponName => "Quincy"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Quincy").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Shuriken : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.SharpShurikensUpgradeIcon; - public override string WeaponName => "Shuriken"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Ezili : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.EziliIcon; - public override string WeaponName => "Ezili"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Ezili").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Sniper : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.EvenFasterFiringUpgradeIcon; - public override string WeaponName => "Sniper"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Thorn : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string Icon => VanillaSprites.ThornSwarmUpgradeIcon; - public override string WeaponName => "Thorn"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Druid").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Sub : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Sub"; - public override string Icon => VanillaSprites.BarbedDartsUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MonkeySub").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MonkeyAce : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Monkey Ace"; - public override string Icon => VanillaSprites.RapidFireUpgradeIcon; - public override void EditTower(Tower tower) - { - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.AddBehavior(wpn); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); + public class Dart : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Dart"; + public override string Icon => VanillaSprites.SharpShotsUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Boomerang : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Boomerang"; + public override string Icon => VanillaSprites.ImprovedRangsUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Tack : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.FasterShootingUpgradeIcon; + public override string WeaponName => "Tack"; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("TackShooter").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Nail : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.LargerServiceAreaUpgradeIcon; + public override string WeaponName => "Nail"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Glue : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.GlueSoakUpgradeIcon; + public override string WeaponName => "Glue"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("GlueGunner").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Bomb : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.BiggerBombsUpgradeIcon; + public override string WeaponName => "Bomb"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BombShooter").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Magic : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.IntenseMagicUpgradeIcon; + public override string WeaponName => "Magic"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("WizardMonkey").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Quincy : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.QuincyIcon; + public override string WeaponName => "Quincy"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Quincy").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Shuriken : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.SharpShurikensUpgradeIcon; + public override string WeaponName => "Shuriken"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Ezili : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.EziliIcon; + public override string WeaponName => "Ezili"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Ezili").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Sniper : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.EvenFasterFiringUpgradeIcon; + public override string WeaponName => "Sniper"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Thorn : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string Icon => VanillaSprites.ThornSwarmUpgradeIcon; + public override string WeaponName => "Thorn"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Druid").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Sub : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Sub"; + public override string Icon => VanillaSprites.BarbedDartsUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MonkeySub").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MonkeyAce : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Monkey Ace"; + public override string Icon => VanillaSprites.RapidFireUpgradeIcon; + public override void EditTower(Tower tower) + { + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.AddBehavior(wpn); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); + + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class Acid : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Acid"; + public override string Icon => VanillaSprites.LargerPotionsUpgradeIcon; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("Alchemist").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Shell : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Shell"; + public override string Icon => VanillaSprites.FasterReloadUpgradeIcon2; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MortarMonkey").GetAttackModel().Duplicate(); + wpn.RemoveBehaviors(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class Acid : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Acid"; - public override string Icon => VanillaSprites.LargerPotionsUpgradeIcon; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("Alchemist").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Shell : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Shell"; - public override string Icon => VanillaSprites.FasterReloadUpgradeIcon2; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MortarMonkey").GetAttackModel().Duplicate(); - wpn.RemoveBehaviors(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Ice : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Ice"; - public override string Icon => VanillaSprites.PermafrostUpgradeIcon; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("IceMonkey").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SeekingDart : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Rubber Seeking"; - public override string Icon => VanillaSprites.NevaMissTargetingUpgradeIcon; - public override bool IsLead => true; - public override Sprite CustomIcon => GetSprite("RubberSeekingIcon"); - public override string Description => "Dart Monkey 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Ice : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Ice"; + public override string Icon => VanillaSprites.PermafrostUpgradeIcon; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("IceMonkey").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SeekingDart : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Rubber Seeking"; + public override string Icon => VanillaSprites.NevaMissTargetingUpgradeIcon; + public override bool IsLead => true; + public override Sprite CustomIcon => GetSprite("RubberSeekingIcon"); + public override string Description => "Dart Monkey 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); - seeking.distance = 999; - seeking.constantlyAquireNewTarget = true; + seeking.distance = 999; + seeking.constantlyAquireNewTarget = true; - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - wpn.weapons[0].projectile.AddBehavior(seeking); - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; - wpn.weapons[0].projectile.pierce += 1; - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Incendiary : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Incendiary Bomb"; - public override string Icon => VanillaSprites.BiggerBombsUpgradeIcon; - public override bool IsLead => true; - public override Sprite CustomIcon => GetSprite("IncendiaryIcon"); - public override string Description => "Bomb Shooter 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. - GetBehavior().projectile.GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + wpn.weapons[0].projectile.AddBehavior(seeking); + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; + wpn.weapons[0].projectile.pierce += 1; + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Incendiary : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Incendiary Bomb"; + public override string Icon => VanillaSprites.BiggerBombsUpgradeIcon; + public override bool IsLead => true; + public override Sprite CustomIcon => GetSprite("IncendiaryIcon"); + public override string Description => "Bomb Shooter 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. + GetBehavior().projectile.GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("BombShooter-100").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(fire); - wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Ripper : WeaponTemplate - { - public override int SandboxIndex => 1; - public override Rarity WeaponRarity => Rarity.Common; - public override string WeaponName => "Ripper"; - public override string Icon => VanillaSprites.AcidicMixtureDipUpgradeIcon; - public override Sprite CustomIcon => GetSprite("RipperIcon"); - public override string Description => "Buccaneer 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("BombShooter-100").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(fire); + wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Ripper : WeaponTemplate + { + public override int SandboxIndex => 1; + public override Rarity WeaponRarity => Rarity.Common; + public override string WeaponName => "Ripper"; + public override string Icon => VanillaSprites.AcidicMixtureDipUpgradeIcon; + public override Sprite CustomIcon => GetSprite("RipperIcon"); + public override string Description => "Buccaneer 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer").GetAttackModel().Duplicate(); - wpn.GetBehavior().additionalRotation = 0; - wpn.weapons[0].emission.RemoveBehavior(); - wpn.weapons[0].ejectX = 0; - wpn.weapons[0].ejectY = 0; - wpn.weapons[0].ejectX = 0; + var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer").GetAttackModel().Duplicate(); + wpn.GetBehavior().additionalRotation = 0; + wpn.weapons[0].emission.RemoveBehavior(); + wpn.weapons[0].ejectX = 0; + wpn.weapons[0].ejectY = 0; + wpn.weapons[0].ejectX = 0; - wpn.weapons[0].projectile.AddBehavior(bleed); - wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } + wpn.weapons[0].projectile.AddBehavior(bleed); + wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } - public class Common - { - public static List CommonWpn = new List(); - public static List CommonImg = new List(); - public static List CommonCustomImg = new List(); - } + public class Common + { + public static List CommonWpn = new List(); + public static List CommonImg = new List(); + public static List CommonCustomImg = new List(); + } } diff --git a/Weapons-Ability/Epic.cs b/Weapons-Ability/Epic.cs index d96f74f..2158a56 100644 --- a/Weapons-Ability/Epic.cs +++ b/Weapons-Ability/Epic.cs @@ -1,1278 +1,1258 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using AncientMonkey.Projectiles; +using blankdisplay; +using BTD_Mod_Helper.Api.Display; using BTD_Mod_Helper.Api.Enums; +using BTD_Mod_Helper.Api.Towers; using BTD_Mod_Helper.Extensions; +using Il2Cpp; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.Bloons.Behaviors; +using Il2CppAssets.Scripts.Models.SimulationBehaviors; using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.SimulationBehaviors; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2CppSystem.IO; -using PlasmaEffects; -using Il2CppAssets.Scripts.Models.Towers.Filters; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Bloons.Behaviors; -using AncientMonkey.Projectiles; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Filters; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; -using Il2Cpp; -using blankdisplay; -using BTD_Mod_Helper.Api.Display; -using BTD_Mod_Helper.Api.Towers; using Il2CppAssets.Scripts.Models.TowerSets; +using Il2CppAssets.Scripts.Simulation.Towers; +using Il2CppAssets.Scripts.Unity; using Il2CppAssets.Scripts.Unity.Display; using Il2CppNinjaKiwi.Common.ResourceUtils; +using Il2CppSystem.IO; +using PlasmaEffects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; namespace AncientMonkey.Weapons { - public class Epic - { - public class PlasmaBlasts : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.PlasmaBlastUpgradeIcon; - public override string WeaponName => "Plasma Blasts"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-200").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class DragonsBreath : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.DragonsBreathUpgradeIcon; - public override string WeaponName => "Dragon's Breath"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-030").GetAttackModel(3).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class RecursiveCluster : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.RecursiveClusterUpgradeIcon; - public override string WeaponName => "Recursive Cluster"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BombShooter-024").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BouncingBullet : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BouncingBulletUpgradeIcon; - public override string WeaponName => "Bouncing Bullet"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-230").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class StickyBomb : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.StickyBombUpgradeIcon; - public override string WeaponName => "Sticky Bomb"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-004").GetAttackModel(2).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SpikedBalls : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.SpikedBallsUpgradeIcon; - public override string WeaponName => "Spiked Balls"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-320").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BananaPlantation : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BananaPlantationUpgradeIcon; - public override string WeaponName => "Banana Plantation"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BananaFarm-320").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BloonTrap : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BloonTrapUpgradeIcon; - public override string WeaponName => "Bloon Trap"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-004").GetAttackModel(1).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class HydraRocketPods : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.HydraRocketsUpgradeIcon; - public override string WeaponName => "Hydra Rocket Pods"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-030").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Destroyer : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.DestroyerUpgradeIcon; - public override string WeaponName => "Destroyer"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-320").GetAttackModel().Duplicate(); - wpn.GetBehavior().additionalRotation = 0; - wpn.weapons[0].emission.RemoveBehavior(); - wpn.weapons[0].ejectX = 0; - wpn.weapons[0].ejectY = 0; - wpn.weapons[0].ejectX = 0; - wpn.weapons[1].ejectX = 0; - wpn.weapons[1].ejectY = 0; - wpn.weapons[1].ejectX = 0; - wpn.weapons[2].ejectX = 0; - wpn.weapons[2].ejectY = 0; - wpn.weapons[2].ejectX = 0; - wpn.weapons[2].emission.RemoveBehavior(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MoabGlue : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.MoabGlueUpgradeIcon; - public override string WeaponName => "Moab Glue"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("GlueGunner-023").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - wpn.name = "AttackModel_MoabGlue_"; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Icicles : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.IciclesUpgradeIcon; - public override string WeaponName => "Icicles"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("IceMonkey-204").GetAttackModel().Duplicate(); - - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Overdrive : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.OverdriveUpgradeIcon; - public override string WeaponName => "Overdrive"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("TackShooter-204").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class DruidOfTheJungle : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.DruidoftheJungleUpgradeIcon; - public override string WeaponName => "Druid of the jungle"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Druid-130").GetAttackModel(1).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BallisticMissile : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BallisticMissileUpgradeIcon; - public override string WeaponName => "Ballistic Missile"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("MonkeySub-032").GetAttackModel(1).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SentryExpert : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.SentryExpertUpgradeIcon; - public override string WeaponName => "Sentry Expert"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-400").GetAttackModel(1).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BloonLiquefier : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BloonLiquefierUpgradeIcon; - public override string WeaponName => "Bloon Liquefier"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("GlueGunner-420").GetAttackModel(0).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class RingOfFire : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.RingOfFireUpgradeIcon; - public override string WeaponName => "Ring Of Fire"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("TackShooter-420").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MoabAssassin : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.MoabAssassinUpgradeIcon; - public override string WeaponName => "Moab Assassin"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-204").GetAttackModel(0).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SharpShooter : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.SharpShooterUpgradeIcon; - public override string WeaponName => "Sharp Shooter"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-204").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class TheBigOne : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.TheBIgOneUpgradeIcon; - public override string WeaponName => "The Big One"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-402").GetAttackModel().Duplicate(); - wpn.RemoveBehaviors(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class OperationDartStorm : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.OperationDartStormUpgradeIcon; - public override string WeaponName => "Operation: Dart Storm"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehavior().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehaviors()[1].Duplicate(); - var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehaviors()[2].Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.AddBehavior(wpn); - ace.AddBehavior(wpn2); - ace.AddBehavior(wpn3); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); + public class Epic + { + public class PlasmaBlasts : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.PlasmaBlastUpgradeIcon; + public override string WeaponName => "Plasma Blasts"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-200").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class DragonsBreath : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.DragonsBreathUpgradeIcon; + public override string WeaponName => "Dragon's Breath"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-030").GetAttackModel(3).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class RecursiveCluster : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.RecursiveClusterUpgradeIcon; + public override string WeaponName => "Recursive Cluster"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BombShooter-024").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BouncingBullet : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BouncingBulletUpgradeIcon; + public override string WeaponName => "Bouncing Bullet"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-230").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class StickyBomb : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.StickyBombUpgradeIcon; + public override string WeaponName => "Sticky Bomb"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-004").GetAttackModel(2).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SpikedBalls : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.SpikedBallsUpgradeIcon; + public override string WeaponName => "Spiked Balls"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-320").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BananaPlantation : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BananaPlantationUpgradeIcon; + public override string WeaponName => "Banana Plantation"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BananaFarm-320").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BloonTrap : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BloonTrapUpgradeIcon; + public override string WeaponName => "Bloon Trap"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-004").GetAttackModel(1).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class HydraRocketPods : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.HydraRocketsUpgradeIcon; + public override string WeaponName => "Hydra Rocket Pods"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-030").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Destroyer : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.DestroyerUpgradeIcon; + public override string WeaponName => "Destroyer"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-320").GetAttackModel().Duplicate(); + wpn.GetBehavior().additionalRotation = 0; + wpn.weapons[0].emission.RemoveBehavior(); + wpn.weapons[0].ejectX = 0; + wpn.weapons[0].ejectY = 0; + wpn.weapons[0].ejectX = 0; + wpn.weapons[1].ejectX = 0; + wpn.weapons[1].ejectY = 0; + wpn.weapons[1].ejectX = 0; + wpn.weapons[2].ejectX = 0; + wpn.weapons[2].ejectY = 0; + wpn.weapons[2].ejectX = 0; + wpn.weapons[2].emission.RemoveBehavior(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MoabGlue : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.MoabGlueUpgradeIcon; + public override string WeaponName => "Moab Glue"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("GlueGunner-023").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + wpn.name = "AttackModel_MoabGlue_"; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Icicles : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.IciclesUpgradeIcon; + public override string WeaponName => "Icicles"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("IceMonkey-204").GetAttackModel().Duplicate(); + + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Overdrive : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.OverdriveUpgradeIcon; + public override string WeaponName => "Overdrive"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("TackShooter-204").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class DruidOfTheJungle : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.DruidoftheJungleUpgradeIcon; + public override string WeaponName => "Druid of the jungle"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Druid-130").GetAttackModel(1).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BallisticMissile : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BallisticMissileUpgradeIcon; + public override string WeaponName => "Ballistic Missile"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("MonkeySub-032").GetAttackModel(1).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SentryExpert : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.SentryExpertUpgradeIcon; + public override string WeaponName => "Sentry Expert"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-400").GetAttackModel(1).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BloonLiquefier : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BloonLiquefierUpgradeIcon; + public override string WeaponName => "Bloon Liquefier"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("GlueGunner-420").GetAttackModel(0).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class RingOfFire : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.RingOfFireUpgradeIcon; + public override string WeaponName => "Ring Of Fire"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("TackShooter-420").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MoabAssassin : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.MoabAssassinUpgradeIcon; + public override string WeaponName => "Moab Assassin"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-204").GetAttackModel(0).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SharpShooter : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.SharpShooterUpgradeIcon; + public override string WeaponName => "Sharp Shooter"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-204").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class TheBigOne : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.TheBIgOneUpgradeIcon; + public override string WeaponName => "The Big One"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-402").GetAttackModel().Duplicate(); + wpn.RemoveBehaviors(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class OperationDartStorm : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.OperationDartStormUpgradeIcon; + public override string WeaponName => "Operation: Dart Storm"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehavior().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehaviors()[1].Duplicate(); + var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-420").GetBehaviors()[2].Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.AddBehavior(wpn); + ace.AddBehavior(wpn2); + ace.AddBehavior(wpn3); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); + + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class ArtilleryBattery : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.ArtilleryBatteryUpgradeIcon; + public override string WeaponName => "Artillery Battery"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-240").GetAttackModel().Duplicate(); + wpn.RemoveBehaviors(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class FullAutoRifle : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.FullAutoRifleUpgradeIcon; + public override string WeaponName => "Full Auto Rifle"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-204").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class ArmorPiercingDarts : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.ArmorPiercingDartsUpgradeIcon; + public override string WeaponName => "Armor Piercing Darts"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("MonkeySub-024").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class DarkKnight : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.DarkKnightUpgradeIcon; + public override string WeaponName => "Dark Knight"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-203").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MarketPlace : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.MarketplaceUpgradeIcon; + public override string WeaponName => "Market Place"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BananaFarm-023").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class FavoredTrades : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.FavoredTradesUpgradeIcon; + public override string WeaponName => "Favored Trades"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-004").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Rifleman : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.DeadlyPrecisionUpgradeIcon; + public override string WeaponName => "Rifleman"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override Sprite CustomIcon => GetSprite("RiflemanIcon"); + public override string Description => "Dart Monkey 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); + seeking.distance = 999; + seeking.constantlyAquireNewTarget = true; - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class ArtilleryBattery : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.ArtilleryBatteryUpgradeIcon; - public override string WeaponName => "Artillery Battery"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-240").GetAttackModel().Duplicate(); - wpn.RemoveBehaviors(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class FullAutoRifle : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.FullAutoRifleUpgradeIcon; - public override string WeaponName => "Full Auto Rifle"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-204").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class ArmorPiercingDarts : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.ArmorPiercingDartsUpgradeIcon; - public override string WeaponName => "Armor Piercing Darts"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("MonkeySub-024").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class DarkKnight : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.DarkKnightUpgradeIcon; - public override string WeaponName => "Dark Knight"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-203").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MarketPlace : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.MarketplaceUpgradeIcon; - public override string WeaponName => "Market Place"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BananaFarm-023").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class FavoredTrades : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.FavoredTradesUpgradeIcon; - public override string WeaponName => "Favored Trades"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-004").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Rifleman : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.DeadlyPrecisionUpgradeIcon; - public override string WeaponName => "Rifleman"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override Sprite CustomIcon => GetSprite("RiflemanIcon"); - public override string Description => "Dart Monkey 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); - seeking.distance = 999; - seeking.constantlyAquireNewTarget = true; + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + wpn.weapons[0].projectile.AddBehavior(seeking); + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; + wpn.weapons[0].projectile.pierce += 2; + wpn.weapons[0].rate /= 5.6f; + wpn.weapons[0].projectile.GetDamageModel().damage += 1; + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 3, false, false) { name = "CeramicModifier_" }); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PlasmaBomb : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BallLightningUpgradeIcon; + public override string WeaponName => "Plasma Bombs"; + public override Sprite CustomIcon => GetSprite("PlasmaBombIcon"); + public override string Description => "Bomb Shooter 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var super = Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050"); + var techTerror = super.GetDescendants().ToArray().First(a => a.name == "AttackModel_TechTerror_").Duplicate(); + var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. + GetBehavior().projectile.GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - wpn.weapons[0].projectile.AddBehavior(seeking); - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; - wpn.weapons[0].projectile.pierce += 2; - wpn.weapons[0].rate /= 5.6f; - wpn.weapons[0].projectile.GetDamageModel().damage += 1; - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 3, false, false) { name = "CeramicModifier_" }); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PlasmaBomb : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BallLightningUpgradeIcon; - public override string WeaponName => "Plasma Bombs"; - public override Sprite CustomIcon => GetSprite("PlasmaBombIcon"); - public override string Description => "Bomb Shooter 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var super = Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050"); - var techTerror = super.GetDescendants().ToArray().First(a => a.name == "AttackModel_TechTerror_").Duplicate(); - var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. - GetBehavior().projectile.GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("BombShooter").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("BombShooter").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); + var charge = techTerror.weapons[0].projectile; + charge.GetBehavior().Lifespan = 0.1f; + charge.radius = 30; + charge.scale = 30; + charge.pierce = 35; + charge.GetDamageModel().damage = 10; + charge.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + charge.GetDescendants().ForEach(model => model.isActive = false); + charge.hasDamageModifiers = true; + charge.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 20, false, false) { name = "MoabModifier_" }); + charge.AddBehavior(fire); + var chargeBehavior = new CreateProjectileOnContactModel("", charge, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaBlast_" }; - var charge = techTerror.weapons[0].projectile; - charge.GetBehavior().Lifespan = 0.1f; - charge.radius = 30; - charge.scale = 30; - charge.pierce = 35; - charge.GetDamageModel().damage = 10; - charge.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - charge.GetDescendants().ForEach(model => model.isActive = false); - charge.hasDamageModifiers = true; - charge.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 20, false, false) { name = "MoabModifier_" }); - charge.AddBehavior(fire); - var chargeBehavior = new CreateProjectileOnContactModel("", charge, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaBlast_" }; + var lightningVisual = charge.Duplicate(); + lightningVisual.RemoveBehavior(); + lightningVisual.RemoveBehavior(); + lightningVisual.RemoveBehavior(); + lightningVisual.GetBehavior().Lifespan = 0.75f; + lightningVisual.ApplyDisplay(); + var lightningVisualBehavior = new CreateProjectileOnContactModel("", lightningVisual, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaVisual_" }; - var lightningVisual = charge.Duplicate(); - lightningVisual.RemoveBehavior(); - lightningVisual.RemoveBehavior(); - lightningVisual.RemoveBehavior(); - lightningVisual.GetBehavior().Lifespan = 0.75f; - lightningVisual.ApplyDisplay(); - var lightningVisualBehavior = new CreateProjectileOnContactModel("", lightningVisual, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaVisual_" }; + var druid = Game.instance.model.GetTower(TowerType.Druid, 2); + var lightningBolt = druid.GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); - var druid = Game.instance.model.GetTower(TowerType.Druid, 2); - var lightningBolt = druid.GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); + var lightning = lightningBolt.projectile; + lightning.pierce = 25; + lightning.GetBehavior().splitRange = towerModel.range * 5f; + lightning.GetBehavior().splits = 1; + lightning.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + lightning.GetDescendants().ForEach(model => model.isActive = false); + lightning.AddBehavior(fire); + var lightningBehavior = new CreateProjectileOnContactModel("", lightning, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "Lightning_" }; - var lightning = lightningBolt.projectile; - lightning.pierce = 25; - lightning.GetBehavior().splitRange = towerModel.range * 5f; - lightning.GetBehavior().splits = 1; - lightning.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - lightning.GetDescendants().ForEach(model => model.isActive = false); - lightning.AddBehavior(fire); - var lightningBehavior = new CreateProjectileOnContactModel("", lightning, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "Lightning_" }; + wpn.weapons[0].projectile.AddBehavior(lightningBehavior); + wpn.weapons[0].projectile.AddBehavior(lightningVisualBehavior); + wpn.weapons[0].projectile.AddBehavior(chargeBehavior); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(fire); + wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; + wpn.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 3, false, false) { name = "CeramicModifier_" }); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 1, 3, false, false) { name = "FortifiedModifier_" }); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 20, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 9; + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class FireCracker : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.ShrapnelShotUpgradeIcon; + public override string WeaponName => "Fire Cracker"; + public override Sprite CustomIcon => GetSprite("FirecrackerIcon"); + public override string Description => "Tack Shooter 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var explosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); + var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); + var fragment = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); + effect.effectModel = bombEffect; + fragment.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.AddBehavior(lightningBehavior); - wpn.weapons[0].projectile.AddBehavior(lightningVisualBehavior); - wpn.weapons[0].projectile.AddBehavior(chargeBehavior); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(fire); - wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; - wpn.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 3, false, false) { name = "CeramicModifier_" }); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 1, 3, false, false) { name = "FortifiedModifier_" }); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 20, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 9; - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class FireCracker : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.ShrapnelShotUpgradeIcon; - public override string WeaponName => "Fire Cracker"; - public override Sprite CustomIcon => GetSprite("FirecrackerIcon"); - public override string Description => "Tack Shooter 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var explosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); - var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); - var fragment = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); - effect.effectModel = bombEffect; - fragment.GetDescendants().ForEach(model => model.isActive = false); + explosion.GetDescendants().ForEach(model => model.isActive = false); + explosion.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + explosion.GetDamageModel().damage = 2; - explosion.GetDescendants().ForEach(model => model.isActive = false); - explosion.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - explosion.GetDamageModel().damage = 2; + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("TackShooter-200").GetAttackModel().Duplicate(); + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetBehavior().Lifespan = 0.2f; + wpn.weapons[0].projectile.pierce = 999; + wpn.weapons[0].projectile.GetDamageModel().damage -= 1; + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Fragment", fragment, new ArcEmissionModel("FragmentEmmision_", 6, 0, 360, null, true, false), false)); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Explosion", explosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); + wpn.weapons[0].projectile.AddBehavior(effect); + wpn.weapons[0].projectile.AddBehavior(sound); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class IceMagic : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.IntenseMagicUpgradeIcon; + public override string WeaponName => "Ice Magic"; + public override Sprite CustomIcon => GetSprite("IceMagicIcon"); + public override string Description => "Ice Monkey 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); + seeking.distance = 999; + seeking.constantlyAquireNewTarget = true; + seeking.turnRate *= 2; - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("TackShooter-200").GetAttackModel().Duplicate(); - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetBehavior().Lifespan = 0.2f; - wpn.weapons[0].projectile.pierce = 999; - wpn.weapons[0].projectile.GetDamageModel().damage -= 1; - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Fragment", fragment, new ArcEmissionModel("FragmentEmmision_", 6, 0, 360, null, true, false), false)); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Explosion", explosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); - wpn.weapons[0].projectile.AddBehavior(effect); - wpn.weapons[0].projectile.AddBehavior(sound); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class IceMagic : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.IntenseMagicUpgradeIcon; - public override string WeaponName => "Ice Magic"; - public override Sprite CustomIcon => GetSprite("IceMagicIcon"); - public override string Description => "Ice Monkey 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); - seeking.distance = 999; - seeking.constantlyAquireNewTarget = true; - seeking.turnRate *= 2; + var shard = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); + shard.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; + shard.scale /= 1.25f; + shard.pierce += 2; + shard.AddBehavior(seeking); + shard.GetBehavior().Lifespan *= 6; + shard.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.White; + shard.GetDescendants().ForEach(model => model.isActive = false); + shard.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - var shard = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); - shard.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; - shard.scale /= 1.25f; - shard.pierce += 2; - shard.AddBehavior(seeking); - shard.GetBehavior().Lifespan *= 6; - shard.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.White; - shard.GetDescendants().ForEach(model => model.isActive = false); - shard.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.White; + wpn.weapons[0].rate /= 1.44f; + wpn.weapons[0].projectile.GetDamageModel().damage += 3; + wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); + wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; + wpn.weapons[0].projectile.pierce = 1; + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("CreateProjectileOnContactModel_", shard, new ArcEmissionModel("ArcEmissionModel_", 3, 0, 30, null, true, false), true, false, false)); + wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class AciGunner : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.CorrosiveGlueUpgradeIcon; + public override string WeaponName => "Acid Gunner"; + public override Sprite CustomIcon => GetSprite("AcidGunnerIcon"); + public override string Description => "Glue Gunner 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var overlay = Game.instance.model.GetTowerFromId("GlueGunner-300").GetAttackModel().weapons[0].projectile.GetBehavior().overlayType; + var slow = Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var slowModel = new SlowModel("SlowModel_", slow.multiplier, slow.lifespan, "AcidSlow", 3, overlay, slow.isUnique, slow.dontRefreshDuration, slow.effectModel, true, false, false); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.White; - wpn.weapons[0].rate /= 1.44f; - wpn.weapons[0].projectile.GetDamageModel().damage += 3; - wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); - wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; - wpn.weapons[0].projectile.pierce = 1; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("CreateProjectileOnContactModel_", shard, new ArcEmissionModel("ArcEmissionModel_", 3, 0, 30, null, true, false), true, false, false)); - wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class AciGunner : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.CorrosiveGlueUpgradeIcon; - public override string WeaponName => "Acid Gunner"; - public override Sprite CustomIcon => GetSprite("AcidGunnerIcon"); - public override string Description => "Glue Gunner 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var overlay = Game.instance.model.GetTowerFromId("GlueGunner-300").GetAttackModel().weapons[0].projectile.GetBehavior().overlayType; - var slow = Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var slowModel = new SlowModel("SlowModel_", slow.multiplier, slow.lifespan, "AcidSlow", 3, overlay, slow.isUnique, slow.dontRefreshDuration, slow.effectModel, true, false, false); + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + wpn.weapons[0].rate = Game.instance.model.GetTower(TowerType.GlueGunner).GetAttackModel().weapons[0].rate / 2.8f; + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.GlueGunner, 3).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetDamageModel().damage = 4; + wpn.weapons[0].projectile.pierce = 3; + wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; + wpn.weapons[0].emission = new RandomArcEmissionModel("VenomGunner_", 3, 0, 0, 35, 0, null); + wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + wpn.weapons[0].projectile.AddBehavior(slowModel); + wpn.GetBehavior().filters = Game.instance.model.GetTowerFromId("DartMonkey-003").GetAttackModel().GetBehavior().filters; + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class FlakGun : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.FragBombsUpgradeIcon; + public override string WeaponName => "Flak Gun"; + public override Sprite CustomIcon => GetSprite("FlakGunIcon"); + public override string Description => "Sniper 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var bomb = Game.instance.model.GetTower(TowerType.BombShooter, 0).GetAttackModel().weapons[0].projectile.Duplicate(); + var blast = bomb.GetBehavior().projectile.Duplicate(); + var explosion = bomb.GetBehavior().Duplicate(); + var shrapnel = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); + shrapnel.pierce = 3; + shrapnel.GetBehavior().Lifespan *= 1.5f; + shrapnel.GetDamageModel().damage = 2; - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - wpn.weapons[0].rate = Game.instance.model.GetTower(TowerType.GlueGunner).GetAttackModel().weapons[0].rate / 2.8f; - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.GlueGunner, 3).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetDamageModel().damage = 4; - wpn.weapons[0].projectile.pierce = 3; - wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; - wpn.weapons[0].emission = new RandomArcEmissionModel("VenomGunner_", 3, 0, 0, 35, 0, null); - wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - wpn.weapons[0].projectile.AddBehavior(slowModel); - wpn.GetBehavior().filters = Game.instance.model.GetTowerFromId("DartMonkey-003").GetAttackModel().GetBehavior().filters; - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class FlakGun : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.FragBombsUpgradeIcon; - public override string WeaponName => "Flak Gun"; - public override Sprite CustomIcon => GetSprite("FlakGunIcon"); - public override string Description => "Sniper 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var bomb = Game.instance.model.GetTower(TowerType.BombShooter, 0).GetAttackModel().weapons[0].projectile.Duplicate(); - var blast = bomb.GetBehavior().projectile.Duplicate(); - var explosion = bomb.GetBehavior().Duplicate(); - var shrapnel = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); - shrapnel.pierce = 3; - shrapnel.GetBehavior().Lifespan *= 1.5f; - shrapnel.GetDamageModel().damage = 2; + blast.GetDamageModel().damage = 3; + blast.radius = 20; + blast.pierce = 16; + blast.GetDescendants().ForEach(model => model.isActive = false); - blast.GetDamageModel().damage = 3; - blast.radius = 20; - blast.pierce = 16; - blast.GetDescendants().ForEach(model => model.isActive = false); + explosion.effectModel.scale *= 2; - explosion.effectModel.scale *= 2; + var contactModel = new CreateProjectileOnContactModel("aaa", blast, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "RifleBlast_" }; + var fragmentModel = new CreateProjectileOnContactModel("aaa", shrapnel, new ArcEmissionModel("ArcEmissionModel_", 6, 0, 360, null, true, false), true, false, false) { name = "RifleShrapnel_" }; - var contactModel = new CreateProjectileOnContactModel("aaa", blast, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "RifleBlast_" }; - var fragmentModel = new CreateProjectileOnContactModel("aaa", shrapnel, new ArcEmissionModel("ArcEmissionModel_", 6, 0, 360, null, true, false), true, false, false) { name = "RifleShrapnel_" }; + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-002").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.weapons[0].projectile.GetDamageModel().damage += 1; + wpn.weapons[0].projectile.AddBehavior(contactModel); + wpn.weapons[0].projectile.AddBehavior(explosion); + wpn.weapons[0].projectile.AddBehavior(fragmentModel); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class AssaultSub : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.LotsMoreDartsUpgradeIcon; + public override string WeaponName => "Assault Sub"; + public override Sprite CustomIcon => GetSprite("AssaultSubIcon"); + public override string Description => "Monkey Sub 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MonkeySub").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetBehavior().TurnRate *= 3; + wpn.weapons[0].name = "Dart1"; + wpn.weapons[0].rate /= 1.2f; - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-002").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.weapons[0].projectile.GetDamageModel().damage += 1; - wpn.weapons[0].projectile.AddBehavior(contactModel); - wpn.weapons[0].projectile.AddBehavior(explosion); - wpn.weapons[0].projectile.AddBehavior(fragmentModel); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class AssaultSub : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.LotsMoreDartsUpgradeIcon; - public override string WeaponName => "Assault Sub"; - public override Sprite CustomIcon => GetSprite("AssaultSubIcon"); - public override string Description => "Monkey Sub 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MonkeySub").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetBehavior().TurnRate *= 3; - wpn.weapons[0].name = "Dart1"; - wpn.weapons[0].rate /= 1.2f; + var dart2 = wpn.weapons[0].Duplicate(); + var dart3 = wpn.weapons[0].Duplicate(); + var dart4 = wpn.weapons[0].Duplicate(); - var dart2 = wpn.weapons[0].Duplicate(); - var dart3 = wpn.weapons[0].Duplicate(); - var dart4 = wpn.weapons[0].Duplicate(); + dart2.name = "Dart2"; + dart3.name = "Dart3"; + dart4.name = "Dart4"; - dart2.name = "Dart2"; - dart3.name = "Dart3"; - dart4.name = "Dart4"; + wpn.AddWeapon(dart2); + wpn.AddWeapon(dart3); + wpn.AddWeapon(dart4); - wpn.AddWeapon(dart2); - wpn.AddWeapon(dart3); - wpn.AddWeapon(dart4); + foreach (var weapon in wpn.weapons) + { + if (weapon.name == "Dart1") + { + weapon.ejectX = 9; + } + if (weapon.name == "Dart2") + { + weapon.ejectX = 3; + } + if (weapon.name == "Dart3") + { + weapon.ejectX = -3; + } + if (weapon.name == "Dart4") + { + weapon.ejectX = -9; + } + } - foreach (var weapon in wpn.weapons) - { - if (weapon.name == "Dart1") - { - weapon.ejectX = 9; - } - if (weapon.name == "Dart2") - { - weapon.ejectX = 3; - } - if (weapon.name == "Dart3") - { - weapon.ejectX = -3; - } - if (weapon.name == "Dart4") - { - weapon.ejectX = -9; - } - } + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Dreadnought : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.SpikedBallsUpgradeIcon; + public override string WeaponName => "Dreadnought"; + public override Sprite CustomIcon => GetSprite("DreadnoughtIcon"); + public override string Description => "Buccaneer 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + bleed.GetBehavior().damage += 1; + bleed.GetBehavior().interval -= 1f; - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Dreadnought : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.SpikedBallsUpgradeIcon; - public override string WeaponName => "Dreadnought"; - public override Sprite CustomIcon => GetSprite("DreadnoughtIcon"); - public override string Description => "Buccaneer 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - bleed.GetBehavior().damage += 1; - bleed.GetBehavior().interval -= 1f; + var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-200").GetAttackModel().Duplicate(); + wpn.GetBehavior().additionalRotation = 0; + wpn.weapons[0].emission.RemoveBehavior(); + wpn.weapons[0].ejectX = 0; + wpn.weapons[0].ejectY = 0; + wpn.weapons[0].ejectX = 0; - var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-200").GetAttackModel().Duplicate(); - wpn.GetBehavior().additionalRotation = 0; - wpn.weapons[0].emission.RemoveBehavior(); - wpn.weapons[0].ejectX = 0; - wpn.weapons[0].ejectY = 0; - wpn.weapons[0].ejectX = 0; + wpn.weapons[0].projectile.AddBehavior(bleed); + wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; + wpn.weapons[0].projectile.GetDamageModel().damage += 3; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + wpn.weapons[0].projectile.GetBehavior().Speed *= 2; + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Dogfighter : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.FasterBarrelSpinUpgradeIcon; + public override string WeaponName => "Dogfighter"; + public override Sprite CustomIcon => GetSprite("DogfighterIcon"); + public override string Description => "Monkey Ace 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var dart = Game.instance.model.GetTower(TowerType.DartMonkey).GetWeapon().projectile.Duplicate(); + var bomb = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); + var effect = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); + bomb.name = "SplodeyDart"; + bomb.projectile.GetDamageModel().damage += 2; - wpn.weapons[0].projectile.AddBehavior(bleed); - wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; - wpn.weapons[0].projectile.GetDamageModel().damage += 3; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - wpn.weapons[0].projectile.GetBehavior().Speed *= 2; - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Dogfighter : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.FasterBarrelSpinUpgradeIcon; - public override string WeaponName => "Dogfighter"; - public override Sprite CustomIcon => GetSprite("DogfighterIcon"); - public override string Description => "Monkey Ace 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var dart = Game.instance.model.GetTower(TowerType.DartMonkey).GetWeapon().projectile.Duplicate(); - var bomb = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); - var effect = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); - bomb.name = "SplodeyDart"; - bomb.projectile.GetDamageModel().damage += 2; + var gatling = Game.instance.model.GetTower(TowerType.HeliPilot, 4).GetAttackModel().weapons[2].Duplicate(); + gatling.emission = new RandomArcEmissionModel("emission", 4, 0, 0, 45, 0, null); + gatling.projectile.GetDamageModel().damage += 3; + gatling.name = "GatlingGun"; - var gatling = Game.instance.model.GetTower(TowerType.HeliPilot, 4).GetAttackModel().weapons[2].Duplicate(); - gatling.emission = new RandomArcEmissionModel("emission", 4, 0, 0, 45, 0, null); - gatling.projectile.GetDamageModel().damage += 3; - gatling.name = "GatlingGun"; + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.GetBehavior().speed *= 2.5f; + wpn.weapons[0].projectile.AddBehavior(bomb); + wpn.weapons[0].projectile.AddBehavior(effect); + wpn.weapons[0].projectile.pierce = 1; + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("Crackshot", dart, new ArcEmissionModel("ArcEmissionModel_", 4, 0, 35, null, true, false), true, false, false)); + wpn.weapons[0].projectile.GetDamageModel().damage += 1; + wpn.AddWeapon(gatling); + ace.AddBehavior(wpn); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.GetBehavior().speed *= 2.5f; - wpn.weapons[0].projectile.AddBehavior(bomb); - wpn.weapons[0].projectile.AddBehavior(effect); - wpn.weapons[0].projectile.pierce = 1; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("Crackshot", dart, new ArcEmissionModel("ArcEmissionModel_", 4, 0, 35, null, true, false), true, false, false)); - wpn.weapons[0].projectile.GetDamageModel().damage += 1; - wpn.AddWeapon(gatling); - ace.AddBehavior(wpn); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class Railgun : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.LaserCannonUpgradeIcon; + public override string WeaponName => "Railgun"; + public override Sprite CustomIcon => GetSprite("RailgunIcon"); + public override string Description => "Heli Pilot 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var railgun = Game.instance.model.GetTower(TowerType.HeliPilot, 4).GetAttackModel().weapons[2].Duplicate(); - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class Railgun : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.LaserCannonUpgradeIcon; - public override string WeaponName => "Railgun"; - public override Sprite CustomIcon => GetSprite("RailgunIcon"); - public override string Description => "Heli Pilot 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var railgun = Game.instance.model.GetTower(TowerType.HeliPilot, 4).GetAttackModel().weapons[2].Duplicate(); + railgun.projectile.pierce = 20; + railgun.projectile.GetDamageModel().damage = 5; + railgun.projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + railgun.rate = Game.instance.model.GetTower(TowerType.HeliPilot, 2).GetAttackModel().weapons[0].rate * 3f; + railgun.projectile.ApplyDisplay(); + railgun.name = "_Railgun_Main"; - railgun.projectile.pierce = 20; - railgun.projectile.GetDamageModel().damage = 5; - railgun.projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - railgun.rate = Game.instance.model.GetTower(TowerType.HeliPilot, 2).GetAttackModel().weapons[0].rate * 3f; - railgun.projectile.ApplyDisplay(); - railgun.name = "_Railgun_Main"; + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var heli = Game.instance.model.GetTowerFromId("HeliPilot").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("HeliPilot").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.weapons[0].projectile.GetDamageModel().damage += 1; + wpn.weapons[0].projectile.pierce += 4; + wpn.weapons[0].projectile.display = Game.instance.model.GetTowerFromId("DartlingGunner-300").GetAttackModel().weapons[0].projectile.display; + wpn.AddWeapon(railgun); + heli.AddBehavior(wpn); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(heli); - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var heli = Game.instance.model.GetTowerFromId("HeliPilot").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("HeliPilot").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.weapons[0].projectile.GetDamageModel().damage += 1; - wpn.weapons[0].projectile.pierce += 4; - wpn.weapons[0].projectile.display = Game.instance.model.GetTowerFromId("DartlingGunner-300").GetAttackModel().weapons[0].projectile.display; - wpn.AddWeapon(railgun); - heli.AddBehavior(wpn); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(heli); + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class CarpetBomb : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BomberAceUpgradeIcon; + public override string WeaponName => "Carpet Bombing"; + public override Sprite CustomIcon => GetSprite("CarpetBombIcon"); + public override string Description => "Mortar 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var bomb = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); + var mortar = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var explosion = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); + var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); + bombEffect.scale /= 2; + effect.effectModel = bombEffect; - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class CarpetBomb : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BomberAceUpgradeIcon; - public override string WeaponName => "Carpet Bombing"; - public override Sprite CustomIcon => GetSprite("CarpetBombIcon"); - public override string Description => "Mortar 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var bomb = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); - var mortar = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var explosion = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); - var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); - bombEffect.scale /= 2; - effect.effectModel = bombEffect; + explosion.radius /= 2; + explosion.pierce = 16; + explosion.GetDamageModel().damage = 2; - explosion.radius /= 2; - explosion.pierce = 16; - explosion.GetDamageModel().damage = 2; + bomb.pierce = 9999; + bomb.GetDamageModel().damage = 0; + bomb.GetBehavior().Speed /= 1.75f; + bomb.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + bomb.display = Game.instance.model.GetTower(TowerType.DartlingGunner, 5).GetAttackModel().weapons[0].projectile.display; - bomb.pierce = 9999; - bomb.GetDamageModel().damage = 0; - bomb.GetBehavior().Speed /= 1.75f; - bomb.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - bomb.display = Game.instance.model.GetTower(TowerType.DartlingGunner, 5).GetAttackModel().weapons[0].projectile.display; + bomb.AddBehavior(new CreateProjectileOnExpireModel("ExpireExplosion", explosion, new ArcEmissionModel("", 1, 0, 0, null, true, false), false)); - bomb.AddBehavior(new CreateProjectileOnExpireModel("ExpireExplosion", explosion, new ArcEmissionModel("", 1, 0, 0, null, true, false), false)); + bomb.AddBehavior(effect); + bomb.AddBehavior(sound); - bomb.AddBehavior(effect); - bomb.AddBehavior(sound); + var bomb2 = bomb.Duplicate(); + var bomb3 = bomb.Duplicate(); - var bomb2 = bomb.Duplicate(); - var bomb3 = bomb.Duplicate(); + bomb2.GetBehavior().Lifespan *= 1.5f; + bomb3.GetBehavior().Lifespan *= 2; - bomb2.GetBehavior().Lifespan *= 1.5f; - bomb3.GetBehavior().Lifespan *= 2; + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-020").GetAttackModel().Duplicate(); + wpn.RemoveBehaviors(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-1", bomb, new ArcEmissionModel("", 4, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-2", bomb2, new ArcEmissionModel("", 4, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-3", bomb3, new ArcEmissionModel("", 4, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Volley : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.QuadDartsUpgradeIcon; + public override string WeaponName => "Volley"; + public override Sprite CustomIcon => GetSprite("VolleyIcon"); + public override string Description => "Dartling 4th path by LynxC"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-020").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 6, 12, 100, false, null, 0, null, 1)); + wpn.weapons[0].projectile.GetDamageModel().damage += 1; + wpn.weapons[0].emission = new RandomArcEmissionModel("VollyGunner_", 3, 0, 0, 15, 0, null); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SpectralClaws : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.ArcaneSpikeUpgradeIcon; + public override string WeaponName => "Spectral Claws"; + public override Sprite CustomIcon => GetSprite("SpectralClawsIcon"); + public override string Description => "Super Monkey 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().Duplicate(); + var shard = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-020").GetAttackModel().Duplicate(); - wpn.RemoveBehaviors(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-1", bomb, new ArcEmissionModel("", 4, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-2", bomb2, new ArcEmissionModel("", 4, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-3", bomb3, new ArcEmissionModel("", 4, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Volley : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.QuadDartsUpgradeIcon; - public override string WeaponName => "Volley"; - public override Sprite CustomIcon => GetSprite("VolleyIcon"); - public override string Description => "Dartling 4th path by LynxC"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-020").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 6, 12, 100, false, null, 0, null, 1)); - wpn.weapons[0].projectile.GetDamageModel().damage += 1; - wpn.weapons[0].emission = new RandomArcEmissionModel("VollyGunner_", 3, 0, 0, 15, 0, null); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SpectralClaws : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.ArcaneSpikeUpgradeIcon; - public override string WeaponName => "Spectral Claws"; - public override Sprite CustomIcon => GetSprite("SpectralClawsIcon"); - public override string Description => "Super Monkey 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().Duplicate(); - var shard = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); + wpn.weapons[0].rate /= 1.5f; + wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 2, 0, 180, null, false, false); + wpn.weapons[0].projectile.pierce = 999; + wpn.weapons[0].projectile.GetDamageModel().damage = 0; + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + wpn.weapons[0].projectile.GetBehavior().Speed /= 2; - wpn.weapons[0].rate /= 1.5f; - wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 2, 0, 180, null, false, false); - wpn.weapons[0].projectile.pierce = 999; - wpn.weapons[0].projectile.GetDamageModel().damage = 0; - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - wpn.weapons[0].projectile.GetBehavior().Speed /= 2; + shard.pierce = 3; + shard.GetDamageModel().damage = 4; + shard.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; + shard.AddBehavior(new TrackTargetModel("", 999, seeking.trackNewTargets, true, seeking.maxSeekAngle, seeking.ignoreSeekAngle, seeking.turnRate * 6, seeking.overrideRotation, seeking.useLifetimeAsDistance)); + shard.GetBehavior().Speed *= 2; + shard.GetBehavior().Lifespan *= 3; + shard.ApplyDisplay(); - shard.pierce = 3; - shard.GetDamageModel().damage = 4; - shard.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.None; - shard.AddBehavior(new TrackTargetModel("", 999, seeking.trackNewTargets, true, seeking.maxSeekAngle, seeking.ignoreSeekAngle, seeking.turnRate * 6, seeking.overrideRotation, seeking.useLifetimeAsDistance)); - shard.GetBehavior().Speed *= 2; - shard.GetBehavior().Lifespan *= 3; - shard.ApplyDisplay(); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("SpectralShards", shard, new ArcEmissionModel("", 3, 0, 30, null, false, false), false)); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PotionLauncher : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.BuckshotUpgradeIcon; + public override string WeaponName => "Potion Launcher"; + public override Sprite CustomIcon => GetSprite("PotionLauncherIcon"); + public override string Description => "Alchemist 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("Alchemist").GetAttackModel().Duplicate(); + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "AcidFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); + wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; + wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 1; + wpn.weapons[0].rate /= 3; + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class DeepDruid : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.GreatWhiteUpgradeIcon; + public override string WeaponName => "Druid of the Deep"; + public override Sprite CustomIcon => GetSprite("DruidofDeepIcon"); + public override string Description => "Druid 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTower(TowerType.BeastHandler, 3).GetBehavior().towerModel.GetAttackModel().Duplicate(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class HealthierBananas : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.GreaterProductionUpgradeIcon; + public override string WeaponName => "Healthier Bananas"; + public override Sprite CustomIcon => GetSprite("HealthierBananasIcon"); + public override string Description => "Farm 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var lives = Game.instance.model.GetTower(TowerType.BananaFarm, 0, 0, 5).GetBehavior().Duplicate(); + lives.name = "RoundLives"; + lives.amount = 3; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("SpectralShards", shard, new ArcEmissionModel("", 3, 0, 30, null, false, false), false)); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PotionLauncher : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.BuckshotUpgradeIcon; - public override string WeaponName => "Potion Launcher"; - public override Sprite CustomIcon => GetSprite("PotionLauncherIcon"); - public override string Description => "Alchemist 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("Alchemist").GetAttackModel().Duplicate(); - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "AcidFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); - wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; - wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 1; - wpn.weapons[0].rate /= 3; - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class DeepDruid : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.GreatWhiteUpgradeIcon; - public override string WeaponName => "Druid of the Deep"; - public override Sprite CustomIcon => GetSprite("DruidofDeepIcon"); - public override string Description => "Druid 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTower(TowerType.BeastHandler, 3).GetBehavior().towerModel.GetAttackModel().Duplicate(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class HealthierBananas : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.GreaterProductionUpgradeIcon; - public override string WeaponName => "Healthier Bananas"; - public override Sprite CustomIcon => GetSprite("HealthierBananasIcon"); - public override string Description => "Farm 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var lives = Game.instance.model.GetTower(TowerType.BananaFarm, 0, 0, 5).GetBehavior().Duplicate(); - lives.name = "RoundLives"; - lives.amount = 3; + var wpn = Game.instance.model.GetTowerFromId("BananaFarm-020").GetAttackModel().Duplicate(); + wpn.weapons[0].GetBehavior().count += 3; + wpn.weapons[0].projectile.GetBehavior().maximum += 30f; + wpn.weapons[0].projectile.GetBehavior().minimum += 30f; + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(lives); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class ShieldGenerator : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.PlasmaAcceleratorUpgradeIcon; + public override string WeaponName => "Shield Generator"; + public override Sprite CustomIcon => GetSprite("ShieldGeneratorIcon"); + public override string Description => "Spike Factory 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-020").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.weapons[0].projectile.pierce += 11; + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 1.25f; + wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 0, 10, 50, false, null, 0, null, 1)); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.Purple; + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PrototypeSentries : WeaponTemplate + { + public override int SandboxIndex => 3; + public override Rarity WeaponRarity => Rarity.Epic; + public override string Icon => VanillaSprites.SentryGunUpgradeIcon; + public override string WeaponName => "Prototype Sentries"; + public override Sprite CustomIcon => GetSprite("PrototypeSentriesIcon"); + public override string Description => "Engineer 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var druid = Game.instance.model.GetTower(TowerType.Druid, 2); + var lightning = druid.GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); + lightning.animation = 1; + lightning.projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.Purple; - var wpn = Game.instance.model.GetTowerFromId("BananaFarm-020").GetAttackModel().Duplicate(); - wpn.weapons[0].GetBehavior().count += 3; - wpn.weapons[0].projectile.GetBehavior().maximum += 30f; - wpn.weapons[0].projectile.GetBehavior().minimum += 30f; - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(lives); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class ShieldGenerator : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.PlasmaAcceleratorUpgradeIcon; - public override string WeaponName => "Shield Generator"; - public override Sprite CustomIcon => GetSprite("ShieldGeneratorIcon"); - public override string Description => "Spike Factory 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-020").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.weapons[0].projectile.pierce += 11; - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 1.25f; - wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 0, 10, 50, false, null, 0, null, 1)); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.Purple; - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PrototypeSentries : WeaponTemplate - { - public override int SandboxIndex => 3; - public override Rarity WeaponRarity => Rarity.Epic; - public override string Icon => VanillaSprites.SentryGunUpgradeIcon; - public override string WeaponName => "Prototype Sentries"; - public override Sprite CustomIcon => GetSprite("PrototypeSentriesIcon"); - public override string Description => "Engineer 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var druid = Game.instance.model.GetTower(TowerType.Druid, 2); - var lightning = druid.GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); - lightning.animation = 1; - lightning.projectile.GetDamageModel().immuneBloonProperties = Il2Cpp.BloonProperties.Purple; + lightning.rate = .75f; - lightning.rate = .75f; + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + var sentry = wpn.weapons[0].projectile.GetBehavior().tower; + var lightningProj = lightning.projectile; + lightningProj.pierce = 9; + lightningProj.GetBehavior().splitRange = sentry.range / 2f; + lightningProj.GetBehavior().splits = 1; + sentry.GetAttackModel().weapons[0] = lightning; + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - var sentry = wpn.weapons[0].projectile.GetBehavior().tower; - var lightningProj = lightning.projectile; - lightningProj.pierce = 9; - lightningProj.GetBehavior().splitRange = sentry.range / 2f; - lightningProj.GetBehavior().splits = 1; - sentry.GetAttackModel().weapons[0] = lightning; - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - - public class TruckNotRotorDisplay : ModDisplay - { - public override PrefabReference BaseDisplayReference => Game.instance.model.GetTower(TowerType.HeliPilot, 0, 4, 0).GetBehavior().display; - public override void ModifyDisplayNode(UnityDisplayNode node) - { - node.RemoveBone("MonkeyHeliRig:Top_Rotor"); - node.RemoveBone("MonkeyHeliRig:Top_RotorExtra"); - } - } - public static List EpicWpn = new List(); - public static List EpicImg = new List(); - public static List EpicCustomImg = new List(); - } + public class TruckNotRotorDisplay : ModDisplay + { + public override PrefabReference BaseDisplayReference => Game.instance.model.GetTower(TowerType.HeliPilot, 0, 4, 0).GetBehavior().display; + public override void ModifyDisplayNode(UnityDisplayNode node) + { + node.RemoveBone("MonkeyHeliRig:Top_Rotor"); + node.RemoveBone("MonkeyHeliRig:Top_RotorExtra"); + } + } + public static List EpicWpn = new List(); + public static List EpicImg = new List(); + public static List EpicCustomImg = new List(); + } } namespace Monkeys { - public class Officer : ModTower - { - public override string Portrait => "Officer"; - public override string Name => "Officer"; - public override TowerSet TowerSet => TowerSet.Military; - public override string BaseTower => TowerType.SniperMonkey; + public class Officer : ModTower + { + public override string Portrait => "Officer"; + public override string Name => "Officer"; + public override TowerSet TowerSet => TowerSet.Military; + public override string BaseTower => TowerType.SniperMonkey; - public override bool DontAddToShop => true; - public override int Cost => 0; + public override bool DontAddToShop => true; + public override int Cost => 0; - public override int TopPathUpgrades => 0; - public override int MiddlePathUpgrades => 0; - public override int BottomPathUpgrades => 0; + public override int TopPathUpgrades => 0; + public override int MiddlePathUpgrades => 0; + public override int BottomPathUpgrades => 0; - public override string DisplayName => "Officer"; - public override string Description => ""; + public override string DisplayName => "Officer"; + public override string Description => ""; - public override void ModifyBaseTowerModel(TowerModel towerModel) - { - var attackModel = towerModel.GetBehavior(); - var weapons = attackModel.weapons[0]; - var projectile = weapons.projectile; - towerModel.isSubTower = true; - towerModel.AddBehavior(new TowerExpireModel("ExpireModel", 30f, 3, false, false)); - weapons.rate = 0.4f; - projectile.GetDamageModel().damage = 5; - towerModel.range = 42; - attackModel.range = 42; - towerModel.radius = 0; - towerModel.isGlobalRange = false; - var Pops = Game.instance.model.GetTowerFromId("Sentry").GetBehavior().Duplicate(); - towerModel.AddBehavior(Pops); + public override void ModifyBaseTowerModel(TowerModel towerModel) + { + var attackModel = towerModel.GetBehavior(); + var weapons = attackModel.weapons[0]; + var projectile = weapons.projectile; + towerModel.isSubTower = true; + towerModel.AddBehavior(new TowerExpireModel("ExpireModel", 30f, 3, false, false)); + weapons.rate = 0.4f; + projectile.GetDamageModel().damage = 5; + towerModel.range = 42; + attackModel.range = 42; + towerModel.radius = 0; + towerModel.isGlobalRange = false; + var Pops = Game.instance.model.GetTowerFromId("Sentry").GetBehavior().Duplicate(); + towerModel.AddBehavior(Pops); - } - public class OfficerDisplay : ModTowerDisplay - { - public override float Scale => .7f; - public override string BaseDisplay => GetDisplay(TowerType.EngineerMonkey, 0, 0, 2); + } + public class OfficerDisplay : ModTowerDisplay + { + public override float Scale => .7f; + public override string BaseDisplay => GetDisplay(TowerType.EngineerMonkey, 0, 0, 2); - public override bool UseForTower(int[] tiers) - { - return true; - } - public override void ModifyDisplayNode(UnityDisplayNode node) - { - foreach (var renderer in node.genericRenderers) - { - renderer.material.mainTexture = GetTexture("OfficerDisplay"); - } - } - } + public override bool UseForTower(int[] tiers) + { + return true; + } + public override void ModifyDisplayNode(UnityDisplayNode node) + { + foreach (var renderer in node.genericRenderers) + { + renderer.material.mainTexture = GetTexture("OfficerDisplay"); + } + } + } - } + } } diff --git a/Weapons-Ability/Exotic.cs b/Weapons-Ability/Exotic.cs index 7c0b3ae..43c80c2 100644 --- a/Weapons-Ability/Exotic.cs +++ b/Weapons-Ability/Exotic.cs @@ -1,674 +1,643 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using AncientMonkey.Projectiles; using BTD_Mod_Helper.Api.Enums; +using BTD_Mod_Helper.Extensions; +using Il2Cpp; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.Bloons.Behaviors; using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Models.Towers.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Filters; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; +using Il2CppAssets.Scripts.Simulation.Towers; using Il2CppAssets.Scripts.Unity; -using UnityEngine; using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using System.Threading; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using AncientMonkey.Projectiles; -using Il2Cpp; -using Il2CppAssets.Scripts.Models.Bloons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Towers.Filters; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; namespace AncientMonkey.Weapons { - public class Exotic - { - public class LegendOfTheNight : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.LegendOfTheNightUpgradeIcon; - public override string WeaponName => "Legend Of The Night"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-205").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SuperMines : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.SuperMinesUpgradeIcon; - public override string WeaponName => "Super Mines"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-520").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BananaCentral : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.BananaCentralUpgradeIcon; - public override string WeaponName => "Banana Central"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BananaFarm-520").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class XXXLTrap : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.XXXLUpgradeIcon; - public override string WeaponName => "XXXL Trap"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-015").GetAttackModel(1).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Archmage : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.ArchmageUpgradeIcon; - public override string WeaponName => "Archmage"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var wpn2 = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetAttackModel(1).Duplicate(); - wpn2.range = tower.towerModel.range; - var wpn3 = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetAttackModel(2).Duplicate(); - wpn3.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(wpn2); - towerModel.AddBehavior(wpn3); - tower.UpdateRootModel(towerModel); - } - } - public class MAD : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.MadUpgradeIcon; - public override string WeaponName => "M.A.D"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-250").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class RayOfDoom : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.RayOfDoomUpgradeIcon; - public override string WeaponName => "Ray Of Doom"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-520").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class AvatarOfWrath : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.AvatarofWrathUpgradeIcon; - public override string WeaponName => "Avatar Of Wrath"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Druid-025").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class InfernoRing : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; - public override string WeaponName => "Inferno Ring"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("TackShooter-520").GetAttackModel().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("TackShooter-520").GetAttackModel(1).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(wpn2); - tower.UpdateRootModel(towerModel); - } - } - public class BloonCrush : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.BloonCrushUpgradeIcon; - public override string WeaponName => "Bloon Crush"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BombShooter-520").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MoabDomination : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.MoabDominationUpgradeIcon; - public override string WeaponName => "Moab Domination"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-025").GetAttackModel(1).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PermaBrew : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.PermanentBrewUpgradeIcon; - public override string WeaponName => "Perma Brew"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Alchemist-520").GetAttackModel(2).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SuperStorm : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.SuperStormUpgradeIcon; - public override string WeaponName => "Super Storm"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var tornado = Game.instance.model.GetTowerFromId("Druid-520").GetAttackModel().weapons.First(w => w.name.Contains("Superstorm")).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.GetAttackModel().AddWeapon(tornado); - tower.UpdateRootModel(towerModel); - } - } - public class FlyingFortress : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.FlyingFortressUpgradeIcon; - public override string WeaponName => "Flying Fortress"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehavior().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehaviors()[1].Duplicate(); - var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehaviors()[2].Duplicate(); - var wpn4 = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehaviors()[3].Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.AddBehavior(wpn); - ace.AddBehavior(wpn2); - ace.AddBehavior(wpn3); - ace.AddBehavior(wpn4); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); - - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class ExplosionKing : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.RecursiveClusterUpgradeIcon; - public override string WeaponName => "Explosion King"; - public override Sprite CustomIcon => GetSprite("ExplosionKingIcon"); - public override string Description => "Tack Shooter 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var explosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); - var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); - effect.effectModel = bombEffect; - - explosion.GetDescendants().ForEach(model => model.isActive = false); - explosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; - - var clusterExplosion = explosion.Duplicate(); - var recursiveExplosion = explosion.Duplicate(); - - explosion.GetDamageModel().damage = 6; - clusterExplosion.GetDamageModel().damage = 4; - recursiveExplosion.GetDamageModel().damage = 2; - - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("TackShooter-200").GetAttackModel().Duplicate(); - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetBehavior().Lifespan = 0.2f; - wpn.weapons[0].projectile.pierce = 999; - wpn.weapons[0].projectile.GetDamageModel().damage -= 1; - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.AddBehavior(effect); - wpn.weapons[0].projectile.AddBehavior(sound); - - var firework = wpn.weapons[0].projectile.Duplicate(); - var recursiveFirework = firework.Duplicate(); - - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Explosion", explosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); - firework.AddBehavior(new CreateProjectileOnExpireModel("Explosion", clusterExplosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); - recursiveFirework.AddBehavior(new CreateProjectileOnExpireModel("Explosion", recursiveExplosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); - - firework.AddBehavior(new CreateProjectileOnExpireModel("Firework", recursiveFirework, new ArcEmissionModel("FragmentEmmision_", 8, 0, 360, null, true, false), false)); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Firework", firework, new ArcEmissionModel("FragmentEmmision_", 8, 0, 360, null, true, false), false)); - - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PolarVortex : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.TheBIggestOneUpgradeIcon; - public override string WeaponName => "Polar Vortex"; - public override Sprite CustomIcon => GetSprite("PolarVortexIcon"); - public override string Description => "Ice Monkey 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); - seeking.distance = 999; - seeking.constantlyAquireNewTarget = true; - seeking.turnRate *= 2; - - var shard = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); - shard.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; - shard.scale /= 1.25f; - shard.pierce += 7; - shard.AddBehavior(seeking); - shard.GetBehavior().Lifespan *= 6; - shard.GetDamageModel().damage += 1; - shard.GetDamageModel().immuneBloonProperties = BloonProperties.White; - shard.GetDescendants().ForEach(model => model.isActive = false); - shard.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.White; - wpn.weapons[0].rate /= 1.44f; - wpn.weapons[0].projectile.GetDamageModel().damage += 7; - wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); - wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; - wpn.weapons[0].projectile.pierce = 1; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("CreateProjectileOnContactModel_", shard, new ArcEmissionModel("ArcEmissionModel_", 5, 0, 50, null, true, false), true, false, false)); - wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - wpn.range = tower.towerModel.range; - - var breath = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().Duplicate(); - breath.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 3).GetAttackModel().weapons[0].projectile.display; - breath.range = tower.towerModel.range; - breath.weapons[0].rate /= 12; - breath.weapons[0].projectile.GetDamageModel().damage = 4; - breath.weapons[0].projectile.pierce = 3; - breath.weapons[0].projectile.hasDamageModifiers = true; - breath.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 3, 5, false, false) { name = "MoabModifier_" }); - - breath.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "BreathFreeze", 999999, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); - breath.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; - breath.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - breath.weapons[0].GetDescendants().ForEach(model => model.isActive = false); - - var icicleOrbit = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetBehavior().Duplicate(); - icicleOrbit.projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; - icicleOrbit.range = 20; - - var icicleOrbit2 = icicleOrbit.Duplicate(); - icicleOrbit2.range = 45; - icicleOrbit2.count = 5; - - var icicleDamage = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetAttackModel(1).Duplicate(); - icicleDamage.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - icicleDamage.GetDescendants().ForEach(model => model.isActive = false); - icicleDamage.weapons[0].projectile.GetDamageModel().damage *= 4; - icicleDamage.weapons[0].projectile.pierce *= 3; - icicleDamage.range = tower.towerModel.range; - icicleDamage.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 2, 0, false, false) { name = "MoabModifier_" }); - icicleDamage.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); - icicleDamage.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; - - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(breath); - towerModel.AddBehavior(icicleOrbit); - towerModel.AddBehavior(icicleOrbit2); - towerModel.AddBehavior(icicleDamage); - tower.UpdateRootModel(towerModel); - } - } - public class KingCobra : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; - public override string WeaponName => "King Cobra"; - public override Sprite CustomIcon => GetSprite("KingCobraIcon"); - public override string Description => "Glue Gunner 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var overlay = Game.instance.model.GetTowerFromId("GlueGunner-300").GetAttackModel().weapons[0].projectile.GetBehavior().overlayType; - var slow = Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var slowModel = new SlowModel("SlowModel_", slow.multiplier, slow.lifespan, "AcidSlow", 3, overlay, slow.isUnique, slow.dontRefreshDuration, slow.effectModel, true, false, false); - - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].rate = Game.instance.model.GetTower(TowerType.GlueGunner).GetAttackModel().weapons[0].rate / 7f; - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.GlueGunner, 3).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetDamageModel().damage = 20; - wpn.weapons[0].projectile.pierce = 3; - wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; - wpn.weapons[0].emission = new RandomArcEmissionModel("VenomGunner_", 8, 0, 0, 80, 0, null); - wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); - wpn.weapons[0].projectile.AddBehavior(slowModel); - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 3, 0, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 2, 0, false, false) { name = "FortifiedModifier_" }); - wpn.GetBehavior().filters = Game.instance.model.GetTowerFromId("DartMonkey-003").GetAttackModel().GetBehavior().filters; - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class FlyingDutchman : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.DarkRitualAA; - public override string WeaponName => "Flying Dutchman"; - public override Sprite CustomIcon => GetSprite("FlyingDutchmanIcon"); - public override string Description => "Buccaneer 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - bleed.GetBehavior().damage += 5; - bleed.GetBehavior().interval = 0.5f; - - var aura = Game.instance.model.GetTower(TowerType.TackShooter, 5, 2).GetAttackModel().Duplicate(); - aura.weapons[0].projectile.GetDamageModel().damage = 9; - aura.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - aura.GetDescendants().ForEach(model => model.isActive = false); - - var orbit = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetBehavior().Duplicate(); - orbit.projectile.ApplyDisplay(); - orbit.range = aura.range; - orbit.count = 10; - - var necro = Game.instance.model.GetTower(TowerType.WizardMonkey, 0, 0, 5).GetBehavior().Duplicate(); - var necroWeapon = Game.instance.model.GetTower(TowerType.WizardMonkey, 0, 0, 5).GetAttackModel(2).Duplicate(); - - var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-200").GetAttackModel().Duplicate(); - wpn.GetBehavior().additionalRotation = 0; - wpn.weapons[0].emission.RemoveBehavior(); - wpn.weapons[0].ejectX = 0; - wpn.weapons[0].ejectY = 0; - wpn.weapons[0].ejectX = 0; - - wpn.weapons[0].projectile.AddBehavior(bleed); - wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; - wpn.weapons[0].projectile.GetDamageModel().damage += 6; - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.GetBehavior().Speed *= 2; - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.range = tower.towerModel.range; - - var ball2 = wpn.weapons[0].Duplicate(); - var ball3 = wpn.weapons[0].Duplicate(); - - ball2.ejectX = 15; - ball3.ejectX = -15; - - wpn.AddWeapon(ball2); - wpn.AddWeapon(ball3); - - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(aura); - towerModel.AddBehavior(orbit); - towerModel.AddBehavior(necroWeapon); - towerModel.AddBehavior(necro); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Incinerator : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; - public override string WeaponName => "Incinerator"; - public override Sprite CustomIcon => GetSprite("IncineratorIcon"); - public override string Description => "Dartling 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. - GetBehavior().projectile.GetBehavior().Duplicate(); - - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-020").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 18, 36, 100, false, null, 0, null, 1)); - wpn.weapons[0].projectile.GetDamageModel().damage += 31; - wpn.weapons[0].emission = new RandomArcEmissionModel("VollyGunner_", 12, 0, 0, 60, 0, null); - wpn.weapons[0].projectile.pierce += 6; - wpn.weapons[0].rate /= 3f; - wpn.weapons[0].projectile.GetBehavior().Lifespan = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Lifespan * 1.2f; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.WizardMonkey, 0, 1).GetAttackModel(1).weapons[0].projectile.display; - wpn.weapons[0].projectile.AddBehavior(fire); - wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 2, 0, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "BAD", 3, 0, false, false) { name = "BADModifier_" }); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MasterWaves : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.SpiritoftheForestUpgradeIcon; - public override string WeaponName => "Master of the Waves"; - public override Sprite CustomIcon => GetSprite("MasterofWavesIcon"); - public override string Description => "Druid 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BeastHandler, 2).GetBehavior().towerModel.GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 3; - wpn.weapons[0].projectile.GetBehavior().Speed /= 1.667f; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.GetDamageModel().damage = 8; - wpn.weapons[0].projectile.pierce = 99; - wpn.weapons[0].rate = 1.4f; - wpn.weapons[0].emission = new ArcEmissionModel("Tsunami_", 10, 0, 90, null, false, false); - wpn.range = tower.towerModel.range; - - var orca = Game.instance.model.GetTower(TowerType.BeastHandler, 4).GetBehavior().towerModel.GetAttackModel().Duplicate(); - orca.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - orca.AddBehavior(new TargetCloseModel("targetclose", false, false)); - orca.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - orca.AddBehavior(new TargetLastModel("targetlast", false, false)); - orca.range = tower.towerModel.range; - - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(orca); - tower.UpdateRootModel(towerModel); - } - } - public class Lockdown : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.EnergizerUpgradeIcon; - public override string WeaponName => "Lockdown"; - public override Sprite CustomIcon => GetSprite("LockdownIcon"); - public override string Description => "Spike Factory 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-020").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.weapons[0].projectile.pierce += 43; - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 1.875f; - wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 0, 45, 75, true, null, 0, null, 1)); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.GetDamageModel().damage += 4; - wpn.weapons[0].projectile.ApplyDisplay(); - //wpn.weapons[0].rate /= 2; - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PrimalLegend : WeaponTemplate - { - public override int SandboxIndex => 5; - public override Rarity WeaponRarity => Rarity.Exotic; - public override string Icon => VanillaSprites.TrueSonGodUpgradeIcon; - public override string WeaponName => "Primal Legend"; - public override Sprite CustomIcon => GetSprite("PrimalLegendIcon"); - public override string Description => "Beast Handler 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("ObynGreenfoot").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.weapons[0].rate /= 5f; - wpn.weapons[0].projectile.GetDamageModel().damage += 7; - wpn.weapons[0].projectile.pierce += 5; - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 56, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 16, false, false) { name = "CeramicModifier_" }); - - wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; - wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 2.5f, "Stun", 999, "Stun", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, true)); - - var shard = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); - shard.GetDamageModel().immuneBloonProperties = BloonProperties.None; - shard.ApplyDisplay(); - shard.GetDamageModel().damage = 5; - shard.pierce = 6; - - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("", shard, new ArcEmissionModel("aaa", 16, 0, 360, null, true, false), true, false, false)); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public static List ExoticWpn = new List(); - public static List ExoticImg = new List(); - public static List ExoticCustomImg = new List(); - } + public class Exotic + { + public class LegendOfTheNight : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.LegendOfTheNightUpgradeIcon; + public override string WeaponName => "Legend Of The Night"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-205").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SuperMines : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.SuperMinesUpgradeIcon; + public override string WeaponName => "Super Mines"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-520").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BananaCentral : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.BananaCentralUpgradeIcon; + public override string WeaponName => "Banana Central"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BananaFarm-520").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class XXXLTrap : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.XXXLUpgradeIcon; + public override string WeaponName => "XXXL Trap"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-015").GetAttackModel(1).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Archmage : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.ArchmageUpgradeIcon; + public override string WeaponName => "Archmage"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var wpn2 = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetAttackModel(1).Duplicate(); + wpn2.range = tower.towerModel.range; + var wpn3 = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetAttackModel(2).Duplicate(); + wpn3.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(wpn2); + towerModel.AddBehavior(wpn3); + tower.UpdateRootModel(towerModel); + } + } + public class MAD : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.MadUpgradeIcon; + public override string WeaponName => "M.A.D"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-250").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class RayOfDoom : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.RayOfDoomUpgradeIcon; + public override string WeaponName => "Ray Of Doom"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-520").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class AvatarOfWrath : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.AvatarofWrathUpgradeIcon; + public override string WeaponName => "Avatar Of Wrath"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Druid-025").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class InfernoRing : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; + public override string WeaponName => "Inferno Ring"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("TackShooter-520").GetAttackModel().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("TackShooter-520").GetAttackModel(1).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(wpn2); + tower.UpdateRootModel(towerModel); + } + } + public class BloonCrush : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.BloonCrushUpgradeIcon; + public override string WeaponName => "Bloon Crush"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BombShooter-520").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MoabDomination : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.MoabDominationUpgradeIcon; + public override string WeaponName => "Moab Domination"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-025").GetAttackModel(1).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PermaBrew : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.PermanentBrewUpgradeIcon; + public override string WeaponName => "Perma Brew"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Alchemist-520").GetAttackModel(2).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SuperStorm : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.SuperStormUpgradeIcon; + public override string WeaponName => "Super Storm"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var tornado = Game.instance.model.GetTowerFromId("Druid-520").GetAttackModel().weapons.First(w => w.name.Contains("Superstorm")).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.GetAttackModel().AddWeapon(tornado); + tower.UpdateRootModel(towerModel); + } + } + public class FlyingFortress : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.FlyingFortressUpgradeIcon; + public override string WeaponName => "Flying Fortress"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehavior().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehaviors()[1].Duplicate(); + var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehaviors()[2].Duplicate(); + var wpn4 = Game.instance.model.GetTowerFromId("MonkeyAce-205").GetBehaviors()[3].Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.AddBehavior(wpn); + ace.AddBehavior(wpn2); + ace.AddBehavior(wpn3); + ace.AddBehavior(wpn4); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); + + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class ExplosionKing : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.RecursiveClusterUpgradeIcon; + public override string WeaponName => "Explosion King"; + public override Sprite CustomIcon => GetSprite("ExplosionKingIcon"); + public override string Description => "Tack Shooter 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var explosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); + var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); + effect.effectModel = bombEffect; + + explosion.GetDescendants().ForEach(model => model.isActive = false); + explosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; + + var clusterExplosion = explosion.Duplicate(); + var recursiveExplosion = explosion.Duplicate(); + + explosion.GetDamageModel().damage = 6; + clusterExplosion.GetDamageModel().damage = 4; + recursiveExplosion.GetDamageModel().damage = 2; + + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("TackShooter-200").GetAttackModel().Duplicate(); + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetBehavior().Lifespan = 0.2f; + wpn.weapons[0].projectile.pierce = 999; + wpn.weapons[0].projectile.GetDamageModel().damage -= 1; + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.AddBehavior(effect); + wpn.weapons[0].projectile.AddBehavior(sound); + + var firework = wpn.weapons[0].projectile.Duplicate(); + var recursiveFirework = firework.Duplicate(); + + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Explosion", explosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); + firework.AddBehavior(new CreateProjectileOnExpireModel("Explosion", clusterExplosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); + recursiveFirework.AddBehavior(new CreateProjectileOnExpireModel("Explosion", recursiveExplosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); + + firework.AddBehavior(new CreateProjectileOnExpireModel("Firework", recursiveFirework, new ArcEmissionModel("FragmentEmmision_", 8, 0, 360, null, true, false), false)); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Firework", firework, new ArcEmissionModel("FragmentEmmision_", 8, 0, 360, null, true, false), false)); + + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PolarVortex : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.TheBIggestOneUpgradeIcon; + public override string WeaponName => "Polar Vortex"; + public override Sprite CustomIcon => GetSprite("PolarVortexIcon"); + public override string Description => "Ice Monkey 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); + seeking.distance = 999; + seeking.constantlyAquireNewTarget = true; + seeking.turnRate *= 2; + + var shard = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); + shard.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; + shard.scale /= 1.25f; + shard.pierce += 7; + shard.AddBehavior(seeking); + shard.GetBehavior().Lifespan *= 6; + shard.GetDamageModel().damage += 1; + shard.GetDamageModel().immuneBloonProperties = BloonProperties.White; + shard.GetDescendants().ForEach(model => model.isActive = false); + shard.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.White; + wpn.weapons[0].rate /= 1.44f; + wpn.weapons[0].projectile.GetDamageModel().damage += 7; + wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); + wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; + wpn.weapons[0].projectile.pierce = 1; + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("CreateProjectileOnContactModel_", shard, new ArcEmissionModel("ArcEmissionModel_", 5, 0, 50, null, true, false), true, false, false)); + wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + wpn.range = tower.towerModel.range; + + var breath = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().Duplicate(); + breath.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 3).GetAttackModel().weapons[0].projectile.display; + breath.range = tower.towerModel.range; + breath.weapons[0].rate /= 12; + breath.weapons[0].projectile.GetDamageModel().damage = 4; + breath.weapons[0].projectile.pierce = 3; + breath.weapons[0].projectile.hasDamageModifiers = true; + breath.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 3, 5, false, false) { name = "MoabModifier_" }); + + breath.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "BreathFreeze", 999999, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); + breath.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; + breath.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + breath.weapons[0].GetDescendants().ForEach(model => model.isActive = false); + + var icicleOrbit = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetBehavior().Duplicate(); + icicleOrbit.projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; + icicleOrbit.range = 20; + + var icicleOrbit2 = icicleOrbit.Duplicate(); + icicleOrbit2.range = 45; + icicleOrbit2.count = 5; + + var icicleDamage = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetAttackModel(1).Duplicate(); + icicleDamage.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + icicleDamage.GetDescendants().ForEach(model => model.isActive = false); + icicleDamage.weapons[0].projectile.GetDamageModel().damage *= 4; + icicleDamage.weapons[0].projectile.pierce *= 3; + icicleDamage.range = tower.towerModel.range; + icicleDamage.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 2, 0, false, false) { name = "MoabModifier_" }); + icicleDamage.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); + icicleDamage.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; + + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(breath); + towerModel.AddBehavior(icicleOrbit); + towerModel.AddBehavior(icicleOrbit2); + towerModel.AddBehavior(icicleDamage); + tower.UpdateRootModel(towerModel); + } + } + public class KingCobra : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; + public override string WeaponName => "King Cobra"; + public override Sprite CustomIcon => GetSprite("KingCobraIcon"); + public override string Description => "Glue Gunner 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var overlay = Game.instance.model.GetTowerFromId("GlueGunner-300").GetAttackModel().weapons[0].projectile.GetBehavior().overlayType; + var slow = Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var slowModel = new SlowModel("SlowModel_", slow.multiplier, slow.lifespan, "AcidSlow", 3, overlay, slow.isUnique, slow.dontRefreshDuration, slow.effectModel, true, false, false); + + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].rate = Game.instance.model.GetTower(TowerType.GlueGunner).GetAttackModel().weapons[0].rate / 7f; + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.GlueGunner, 3).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetDamageModel().damage = 20; + wpn.weapons[0].projectile.pierce = 3; + wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("NinjaMonkey-020").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; + wpn.weapons[0].emission = new RandomArcEmissionModel("VenomGunner_", 8, 0, 0, 80, 0, null); + wpn.weapons[0].projectile.AddBehavior(Game.instance.model.GetTowerFromId("GlueGunner-100").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate()); + wpn.weapons[0].projectile.AddBehavior(slowModel); + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 3, 0, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 2, 0, false, false) { name = "FortifiedModifier_" }); + wpn.GetBehavior().filters = Game.instance.model.GetTowerFromId("DartMonkey-003").GetAttackModel().GetBehavior().filters; + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class FlyingDutchman : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.DarkRitualAA; + public override string WeaponName => "Flying Dutchman"; + public override Sprite CustomIcon => GetSprite("FlyingDutchmanIcon"); + public override string Description => "Buccaneer 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + bleed.GetBehavior().damage += 5; + bleed.GetBehavior().interval = 0.5f; + + var aura = Game.instance.model.GetTower(TowerType.TackShooter, 5, 2).GetAttackModel().Duplicate(); + aura.weapons[0].projectile.GetDamageModel().damage = 9; + aura.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + aura.GetDescendants().ForEach(model => model.isActive = false); + + var orbit = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetBehavior().Duplicate(); + orbit.projectile.ApplyDisplay(); + orbit.range = aura.range; + orbit.count = 10; + + var necro = Game.instance.model.GetTower(TowerType.WizardMonkey, 0, 0, 5).GetBehavior().Duplicate(); + var necroWeapon = Game.instance.model.GetTower(TowerType.WizardMonkey, 0, 0, 5).GetAttackModel(2).Duplicate(); + + var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-200").GetAttackModel().Duplicate(); + wpn.GetBehavior().additionalRotation = 0; + wpn.weapons[0].emission.RemoveBehavior(); + wpn.weapons[0].ejectX = 0; + wpn.weapons[0].ejectY = 0; + wpn.weapons[0].ejectX = 0; + + wpn.weapons[0].projectile.AddBehavior(bleed); + wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; + wpn.weapons[0].projectile.GetDamageModel().damage += 6; + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.GetBehavior().Speed *= 2; + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.range = tower.towerModel.range; + + var ball2 = wpn.weapons[0].Duplicate(); + var ball3 = wpn.weapons[0].Duplicate(); + + ball2.ejectX = 15; + ball3.ejectX = -15; + + wpn.AddWeapon(ball2); + wpn.AddWeapon(ball3); + + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(aura); + towerModel.AddBehavior(orbit); + towerModel.AddBehavior(necroWeapon); + towerModel.AddBehavior(necro); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Incinerator : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; + public override string WeaponName => "Incinerator"; + public override Sprite CustomIcon => GetSprite("IncineratorIcon"); + public override string Description => "Dartling 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. + GetBehavior().projectile.GetBehavior().Duplicate(); + + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-020").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 18, 36, 100, false, null, 0, null, 1)); + wpn.weapons[0].projectile.GetDamageModel().damage += 31; + wpn.weapons[0].emission = new RandomArcEmissionModel("VollyGunner_", 12, 0, 0, 60, 0, null); + wpn.weapons[0].projectile.pierce += 6; + wpn.weapons[0].rate /= 3f; + wpn.weapons[0].projectile.GetBehavior().Lifespan = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Lifespan * 1.2f; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.WizardMonkey, 0, 1).GetAttackModel(1).weapons[0].projectile.display; + wpn.weapons[0].projectile.AddBehavior(fire); + wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 2, 0, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "BAD", 3, 0, false, false) { name = "BADModifier_" }); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MasterWaves : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.SpiritoftheForestUpgradeIcon; + public override string WeaponName => "Master of the Waves"; + public override Sprite CustomIcon => GetSprite("MasterofWavesIcon"); + public override string Description => "Druid 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BeastHandler, 2).GetBehavior().towerModel.GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 3; + wpn.weapons[0].projectile.GetBehavior().Speed /= 1.667f; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.GetDamageModel().damage = 8; + wpn.weapons[0].projectile.pierce = 99; + wpn.weapons[0].rate = 1.4f; + wpn.weapons[0].emission = new ArcEmissionModel("Tsunami_", 10, 0, 90, null, false, false); + wpn.range = tower.towerModel.range; + + var orca = Game.instance.model.GetTower(TowerType.BeastHandler, 4).GetBehavior().towerModel.GetAttackModel().Duplicate(); + orca.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + orca.AddBehavior(new TargetCloseModel("targetclose", false, false)); + orca.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + orca.AddBehavior(new TargetLastModel("targetlast", false, false)); + orca.range = tower.towerModel.range; + + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(orca); + tower.UpdateRootModel(towerModel); + } + } + public class Lockdown : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.EnergizerUpgradeIcon; + public override string WeaponName => "Lockdown"; + public override Sprite CustomIcon => GetSprite("LockdownIcon"); + public override string Description => "Spike Factory 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-020").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.weapons[0].projectile.pierce += 43; + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 1.875f; + wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 0, 45, 75, true, null, 0, null, 1)); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.GetDamageModel().damage += 4; + wpn.weapons[0].projectile.ApplyDisplay(); + //wpn.weapons[0].rate /= 2; + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PrimalLegend : WeaponTemplate + { + public override int SandboxIndex => 5; + public override Rarity WeaponRarity => Rarity.Exotic; + public override string Icon => VanillaSprites.TrueSonGodUpgradeIcon; + public override string WeaponName => "Primal Legend"; + public override Sprite CustomIcon => GetSprite("PrimalLegendIcon"); + public override string Description => "Beast Handler 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("ObynGreenfoot").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.weapons[0].rate /= 5f; + wpn.weapons[0].projectile.GetDamageModel().damage += 7; + wpn.weapons[0].projectile.pierce += 5; + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 56, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 16, false, false) { name = "CeramicModifier_" }); + + wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; + wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 2.5f, "Stun", 999, "Stun", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, true)); + + var shard = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); + shard.GetDamageModel().immuneBloonProperties = BloonProperties.None; + shard.ApplyDisplay(); + shard.GetDamageModel().damage = 5; + shard.pierce = 6; + + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("", shard, new ArcEmissionModel("aaa", 16, 0, 360, null, true, false), true, false, false)); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public static List ExoticWpn = new List(); + public static List ExoticImg = new List(); + public static List ExoticCustomImg = new List(); + } } diff --git a/Weapons-Ability/Godly.cs b/Weapons-Ability/Godly.cs index 53ad862..87fc590 100644 --- a/Weapons-Ability/Godly.cs +++ b/Weapons-Ability/Godly.cs @@ -1,229 +1,188 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using AncientMonkey.Projectiles; using BTD_Mod_Helper.Api.Enums; +using BTD_Mod_Helper.Extensions; +using Il2Cpp; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.Bloons.Behaviors; using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Filters; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; +using Il2CppAssets.Scripts.Simulation.Towers; +using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Attack; using Il2CppAssets.Scripts.Unity; -using UnityEngine; using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using System.Threading; -using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; -using AncientMonkey.Projectiles; -using Il2Cpp; -using Il2CppAssets.Scripts.Models.Bloons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Towers.Filters; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; namespace AncientMonkey.Weapons { - public class ApexPlasmaMaster : WeaponTemplate - { - public override int SandboxIndex => 6; - public override Rarity WeaponRarity => Rarity.Godly; - public override string Icon => VanillaSprites.ApexPlasmaMasterUpgradeIcon; - public override string WeaponName => "Apex Plasma Master"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-Paragon").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class GlaiveDominus : WeaponTemplate - { - public override int SandboxIndex => 6; - public override Rarity WeaponRarity => Rarity.Godly; - public override string Icon => VanillaSprites.GlaiveDominusUpgradeIcon; - public override string WeaponName => "Glaive Dominus"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetAttackModel().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetAttackModel(1).Duplicate(); - var wpn3 = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetAttackModel(2).Duplicate(); - var orbit = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(wpn2); - towerModel.AddBehavior(wpn3); - towerModel.AddBehavior(orbit); - tower.UpdateRootModel(towerModel); - } - } - public class AscendedShadow : WeaponTemplate - { - public override int SandboxIndex => 6; - public override Rarity WeaponRarity => Rarity.Godly; - public override string Icon => VanillaSprites.AscendedShadowUpgradeIcon; - public override string WeaponName => "Ascended Shadow"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel(1).Duplicate(); - var wpn3 = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel(2).Duplicate(); - var wpn4 = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel(3).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(wpn2); - towerModel.AddBehavior(wpn3); - towerModel.AddBehavior(wpn4); - tower.UpdateRootModel(towerModel); - } - } - public class GoliathDoomship : WeaponTemplate - { - public override int SandboxIndex => 6; - public override Rarity WeaponRarity => Rarity.Godly; - public override string Icon => VanillaSprites.GoliathDoomshipUpgradeIcon; - public override string WeaponName => "Goliath Doomship"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); - var ab = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehaviors()[1].Duplicate(); - var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehaviors()[2].Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.AddBehavior(wpn); - ace.AddBehavior(wpn2); - ace.AddBehavior(wpn3); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); - phoenix.towerModel.AddBehavior(ab); - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class MasterBuilder : WeaponTemplate - { - public override int SandboxIndex => 6; - public override Rarity WeaponRarity => Rarity.Godly; - public override string Icon => VanillaSprites.MasterBuilderUpgradeIcon; - public override string WeaponName => "Master Builder"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAttackModel().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAttackModel(1).Duplicate(); - var wpn3 = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAttackModel(2).Duplicate(); - var ab = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAbility(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(wpn2); - towerModel.AddBehavior(wpn3); - towerModel.AddBehavior(ab); - tower.UpdateRootModel(towerModel); - } - } - public class ArcaneGuardian : WeaponTemplate - { - public override int SandboxIndex => 6; - public override Rarity WeaponRarity => Rarity.Godly; - public override string Icon => VanillaSprites.TrueSonGodUpgradeIcon; - public override string WeaponName => "Arcane Guardian"; - public override Sprite CustomIcon => GetSprite("ArcaneGuardianIcon"); - public override string Description => "Super Monkey 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. - GetBehavior().projectile.GetBehavior().Duplicate(); + public class ApexPlasmaMaster : WeaponTemplate + { + public override int SandboxIndex => 6; + public override Rarity WeaponRarity => Rarity.Godly; + public override string Icon => VanillaSprites.ApexPlasmaMasterUpgradeIcon; + public override string WeaponName => "Apex Plasma Master"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-Paragon").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class GlaiveDominus : WeaponTemplate + { + public override int SandboxIndex => 6; + public override Rarity WeaponRarity => Rarity.Godly; + public override string Icon => VanillaSprites.GlaiveDominusUpgradeIcon; + public override string WeaponName => "Glaive Dominus"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetAttackModel().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetAttackModel(1).Duplicate(); + var wpn3 = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetAttackModel(2).Duplicate(); + var orbit = Game.instance.model.GetTowerFromId("BoomerangMonkey-Paragon").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(wpn2); + towerModel.AddBehavior(wpn3); + towerModel.AddBehavior(orbit); + tower.UpdateRootModel(towerModel); + } + } + public class AscendedShadow : WeaponTemplate + { + public override int SandboxIndex => 6; + public override Rarity WeaponRarity => Rarity.Godly; + public override string Icon => VanillaSprites.AscendedShadowUpgradeIcon; + public override string WeaponName => "Ascended Shadow"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel(1).Duplicate(); + var wpn3 = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel(2).Duplicate(); + var wpn4 = Game.instance.model.GetTowerFromId("NinjaMonkey-Paragon").GetAttackModel(3).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(wpn2); + towerModel.AddBehavior(wpn3); + towerModel.AddBehavior(wpn4); + tower.UpdateRootModel(towerModel); + } + } + public class GoliathDoomship : WeaponTemplate + { + public override int SandboxIndex => 6; + public override Rarity WeaponRarity => Rarity.Godly; + public override string Icon => VanillaSprites.GoliathDoomshipUpgradeIcon; + public override string WeaponName => "Goliath Doomship"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); + var ab = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehaviors()[1].Duplicate(); + var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehaviors()[2].Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.AddBehavior(wpn); + ace.AddBehavior(wpn2); + ace.AddBehavior(wpn3); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); + phoenix.towerModel.AddBehavior(ab); + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class MasterBuilder : WeaponTemplate + { + public override int SandboxIndex => 6; + public override Rarity WeaponRarity => Rarity.Godly; + public override string Icon => VanillaSprites.MasterBuilderUpgradeIcon; + public override string WeaponName => "Master Builder"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAttackModel().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAttackModel(1).Duplicate(); + var wpn3 = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAttackModel(2).Duplicate(); + var ab = Game.instance.model.GetTowerFromId("EngineerMonkey-Paragon").GetAbility(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(wpn2); + towerModel.AddBehavior(wpn3); + towerModel.AddBehavior(ab); + tower.UpdateRootModel(towerModel); + } + } + public class ArcaneGuardian : WeaponTemplate + { + public override int SandboxIndex => 6; + public override Rarity WeaponRarity => Rarity.Godly; + public override string Icon => VanillaSprites.TrueSonGodUpgradeIcon; + public override string WeaponName => "Arcane Guardian"; + public override Sprite CustomIcon => GetSprite("ArcaneGuardianIcon"); + public override string Description => "Super Monkey 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. + GetBehavior().projectile.GetBehavior().Duplicate(); - fire.GetBehavior().damage += 28; - fire.GetBehavior().Interval -= 1f; + fire.GetBehavior().damage += 28; + fire.GetBehavior().Interval -= 1f; - var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-200").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.weapons[0].projectile.AddBehavior(fire); - wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 6, 0, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 2, 0, false, false) { name = "FortifiedModifier_" }); - wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 4, 0, 45, null, false, false); - wpn.weapons[0].projectile.pierce += 8; - wpn.weapons[0].projectile.GetDamageModel().damage = 22; - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.ApplyDisplay(); + var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-200").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.weapons[0].projectile.AddBehavior(fire); + wpn.weapons[0].projectile.collisionPasses = new int[] { -1, 0, 1 }; + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 6, 0, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 2, 0, false, false) { name = "FortifiedModifier_" }); + wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 4, 0, 45, null, false, false); + wpn.weapons[0].projectile.pierce += 8; + wpn.weapons[0].projectile.GetDamageModel().damage = 22; + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.ApplyDisplay(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Godly - { - public static List GodlyWpn = new List(); - public static List GodlyImg = new List(); - public static List GodlyCustomImg = new List(); - } + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Godly + { + public static List GodlyWpn = new List(); + public static List GodlyImg = new List(); + public static List GodlyCustomImg = new List(); + } } diff --git a/Weapons-Ability/Legendary.cs b/Weapons-Ability/Legendary.cs index 4b4f051..d6578df 100644 --- a/Weapons-Ability/Legendary.cs +++ b/Weapons-Ability/Legendary.cs @@ -1,1060 +1,1030 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using AncientMonkey.Projectiles; using BTD_Mod_Helper.Api.Enums; using BTD_Mod_Helper.Extensions; +using Il2Cpp; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.Bloons.Behaviors; using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using AncientMonkey.Projectiles; -using Il2Cpp; -using Il2CppAssets.Scripts.Models.Bloons.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Filters; using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; using Il2CppAssets.Scripts.Models.Towers.Weapons.Behaviors; -using PlasmaEffects; +using Il2CppAssets.Scripts.Simulation.Towers; +using Il2CppAssets.Scripts.Unity; using Il2CppSystem.IO; +using PlasmaEffects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; namespace AncientMonkey.Weapons { - public class Legendary - { - public class UltraJuggernaut : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.UltraJuggernautUpgradeIcon; - public override string WeaponName => "Ultra Juggernaut"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-520").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BloonSolver : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.TheBloonSolverUpgradeIcon; - public override string WeaponName => "Bloon Solver"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("GlueGunner-520").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SuperBrittle : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SuperBrittleUpgradeIcon; - public override string WeaponName => "Super Brittle"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("IceMonkey-520").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class TackZone : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.TheTackZoneUpgradeIcon; - public override string WeaponName => "Tack Zone"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("TackShooter-025").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BombBlitz : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.BombBlitzUpgradeIcon; - public override string WeaponName => "Bomb Blitz"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BombShooter-025").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PermaCharge : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.PermaChargeUpgradeIcon; - public override string WeaponName => "Perma Charge"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-052").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class EliteDefender : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.EliteDefenderUpgradeIcon; - public override string WeaponName => "Elite Defender"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-025").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SubCommander : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SubCommanderUpgradeIcon; - public override string WeaponName => "Sub Commander"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("MonkeySub-025").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PlasmaAccelerator : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.PlasmaAcceleratorUpgradeIcon; - public override string WeaponName => "Plasma Accelerator"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-420").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class ArcaneSpike : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.ArcaneSpikeUpgradeIcon; - public override string WeaponName => "Arcane Spike"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-402").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SunAvatar : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SunAvatarUpgradeIcon; - public override string WeaponName => "Sun Avatar"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-320").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SpikedMines : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SpikedMinesUpgradeIcon; - public override string WeaponName => "Spiked Mines"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-420").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BananaResearchFacility : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.BananaResearchFacilityUpgradeIcon; - public override string WeaponName => "Banana Research Facility"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BananaFarm-420").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SentryChampion : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SentryParagonUpgradeIcon; - public override string WeaponName => "Sentry Champion"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-520").GetAttackModel(1).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SpiritOfTheForest : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SpiritoftheForestUpgradeIcon; - public override string WeaponName => "Spirit of the Forest"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Druid-250").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var vines = Game.instance.model.GetTowerFromId("Druid-250").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(vines); - tower.UpdateRootModel(towerModel); - } - } - public class CrossBowMaster : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.CrossBowMasterUpgradeIcon; - public override string WeaponName => "Cross Bow Master"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-025").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MoabEliminator : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.MoabEliminatorUpgradeIcon; - public override string WeaponName => "Moab Eliminator"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BombShooter-051").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class IcicleImpale : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.IcicleImpaleUpgradeIcon; - public override string WeaponName => "Icicles Impale"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("IceMonkey-205").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class CrippleMOAB : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.CrippleMoabUpgradeIcon; - public override string WeaponName => "Cripple MOAB"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-520").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SkyShredder : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SkyShredderUpgradeIcon; - public override string WeaponName => "Sky Shredder"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehavior().Duplicate(); - var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehaviors()[1].Duplicate(); - var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehaviors()[2].Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.AddBehavior(wpn); - ace.AddBehavior(wpn2); - ace.AddBehavior(wpn3); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); + public class Legendary + { + public class UltraJuggernaut : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.UltraJuggernautUpgradeIcon; + public override string WeaponName => "Ultra Juggernaut"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-520").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BloonSolver : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.TheBloonSolverUpgradeIcon; + public override string WeaponName => "Bloon Solver"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("GlueGunner-520").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SuperBrittle : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SuperBrittleUpgradeIcon; + public override string WeaponName => "Super Brittle"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("IceMonkey-520").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class TackZone : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.TheTackZoneUpgradeIcon; + public override string WeaponName => "Tack Zone"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("TackShooter-025").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BombBlitz : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.BombBlitzUpgradeIcon; + public override string WeaponName => "Bomb Blitz"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BombShooter-025").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PermaCharge : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.PermaChargeUpgradeIcon; + public override string WeaponName => "Perma Charge"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-052").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class EliteDefender : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.EliteDefenderUpgradeIcon; + public override string WeaponName => "Elite Defender"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-025").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SubCommander : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SubCommanderUpgradeIcon; + public override string WeaponName => "Sub Commander"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("MonkeySub-025").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PlasmaAccelerator : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.PlasmaAcceleratorUpgradeIcon; + public override string WeaponName => "Plasma Accelerator"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-420").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class ArcaneSpike : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.ArcaneSpikeUpgradeIcon; + public override string WeaponName => "Arcane Spike"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-402").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SunAvatar : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SunAvatarUpgradeIcon; + public override string WeaponName => "Sun Avatar"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SuperMonkey-320").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SpikedMines : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SpikedMinesUpgradeIcon; + public override string WeaponName => "Spiked Mines"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-420").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BananaResearchFacility : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.BananaResearchFacilityUpgradeIcon; + public override string WeaponName => "Banana Research Facility"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BananaFarm-420").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SentryChampion : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SentryParagonUpgradeIcon; + public override string WeaponName => "Sentry Champion"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-520").GetAttackModel(1).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SpiritOfTheForest : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SpiritoftheForestUpgradeIcon; + public override string WeaponName => "Spirit of the Forest"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Druid-250").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var vines = Game.instance.model.GetTowerFromId("Druid-250").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(vines); + tower.UpdateRootModel(towerModel); + } + } + public class CrossBowMaster : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.CrossBowMasterUpgradeIcon; + public override string WeaponName => "Cross Bow Master"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-025").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MoabEliminator : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.MoabEliminatorUpgradeIcon; + public override string WeaponName => "Moab Eliminator"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BombShooter-051").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class IcicleImpale : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.IcicleImpaleUpgradeIcon; + public override string WeaponName => "Icicles Impale"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("IceMonkey-205").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class CrippleMOAB : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.CrippleMoabUpgradeIcon; + public override string WeaponName => "Cripple MOAB"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-520").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SkyShredder : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SkyShredderUpgradeIcon; + public override string WeaponName => "Sky Shredder"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehavior().Duplicate(); + var wpn2 = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehaviors()[1].Duplicate(); + var wpn3 = Game.instance.model.GetTowerFromId("MonkeyAce-520").GetBehaviors()[2].Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.AddBehavior(wpn); + ace.AddBehavior(wpn2); + ace.AddBehavior(wpn3); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class TheBiggestOne : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.TheBIggestOneUpgradeIcon; - public override string WeaponName => "The Biggest One"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-502").GetAttackModel().Duplicate(); - wpn.RemoveBehaviors(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class GrandmasterNinja : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.GrandmasterNinjaUpgradeIcon; - public override string WeaponName => "Grandmaster Ninja"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-502").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PermaSpike : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.PermaSpikeUpgradeIcon; - public override string WeaponName => "Perma Spike"; - public override bool IsLead => true; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-205").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class PlasmaTank : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.ArmorPiercingShellsAA; - public override string WeaponName => "Plasma Tank"; - public override Sprite CustomIcon => GetSprite("PlasmaTankIcon"); - public override string Description => "Dart Monkey 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); - seeking.distance = 999; - seeking.constantlyAquireNewTarget = true; + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class TheBiggestOne : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.TheBIggestOneUpgradeIcon; + public override string WeaponName => "The Biggest One"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-502").GetAttackModel().Duplicate(); + wpn.RemoveBehaviors(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class GrandmasterNinja : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.GrandmasterNinjaUpgradeIcon; + public override string WeaponName => "Grandmaster Ninja"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-502").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PermaSpike : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.PermaSpikeUpgradeIcon; + public override string WeaponName => "Perma Spike"; + public override bool IsLead => true; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-205").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class PlasmaTank : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.ArmorPiercingShellsAA; + public override string WeaponName => "Plasma Tank"; + public override Sprite CustomIcon => GetSprite("PlasmaTankIcon"); + public override string Description => "Dart Monkey 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var seeking = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); + seeking.distance = 999; + seeking.constantlyAquireNewTarget = true; - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.AddBehavior(seeking); - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; - wpn.weapons[0].projectile.pierce += 7; - wpn.weapons[0].rate /= 5.6f; - wpn.weapons[0].projectile.GetDamageModel().damage += 4; - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 10, false, false) { name = "CeramicModifier_" }); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.SuperMonkey, 2).GetAttackModel().weapons[0].projectile.display; - wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.AddBehavior(seeking); + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; + wpn.weapons[0].projectile.pierce += 7; + wpn.weapons[0].rate /= 5.6f; + wpn.weapons[0].projectile.GetDamageModel().damage += 4; + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 10, false, false) { name = "CeramicModifier_" }); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.SuperMonkey, 2).GetAttackModel().weapons[0].projectile.display; + wpn.range = tower.towerModel.range; - var missileWeapon = Game.instance.model.GetTower(TowerType.BombShooter, 1, 2).GetAttackModel().Duplicate(); - missileWeapon.weapons[0].rate = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].rate; - missileWeapon.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.DartlingGunner, 0, 3).GetAttackModel().weapons[0].projectile.display; - missileWeapon.GetDescendants().ForEach(model => model.isActive = false); - missileWeapon.weapons[0].projectile.GetBehavior().projectile.GetDescendants().ForEach(model => model.isActive = false); + var missileWeapon = Game.instance.model.GetTower(TowerType.BombShooter, 1, 2).GetAttackModel().Duplicate(); + missileWeapon.weapons[0].rate = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].rate; + missileWeapon.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.DartlingGunner, 0, 3).GetAttackModel().weapons[0].projectile.display; + missileWeapon.GetDescendants().ForEach(model => model.isActive = false); + missileWeapon.weapons[0].projectile.GetBehavior().projectile.GetDescendants().ForEach(model => model.isActive = false); - var missile = missileWeapon.weapons[0].projectile.GetBehavior().projectile; - missile.GetDamageModel().damage = 8; - missile.hasDamageModifiers = true; - missile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 56, false, false) { name = "MoabModifier_" }); - missile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + var missile = missileWeapon.weapons[0].projectile.GetBehavior().projectile; + missile.GetDamageModel().damage = 8; + missile.hasDamageModifiers = true; + missile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 56, false, false) { name = "MoabModifier_" }); + missile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - towerModel.AddBehavior(missileWeapon); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BladeGod : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.BladeMaelstromUpgradeIcon; - public override string WeaponName => "Blade God"; - public override Sprite CustomIcon => GetSprite("BladeGodIcon"); - public override string Description => "Boomerang 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var travel = Game.instance.model.GetTower(TowerType.DartMonkey).GetWeapon().projectile.GetBehavior().Duplicate(); - var seeking = Game.instance.model.GetTower(TowerType.NinjaMonkey, 0, 0, 1).GetWeapon().projectile.GetBehavior().Duplicate(); - var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - bleed.name = "BleedModel"; - bleed.GetBehavior().interval = 1f; + towerModel.AddBehavior(missileWeapon); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BladeGod : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.BladeMaelstromUpgradeIcon; + public override string WeaponName => "Blade God"; + public override Sprite CustomIcon => GetSprite("BladeGodIcon"); + public override string Description => "Boomerang 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var travel = Game.instance.model.GetTower(TowerType.DartMonkey).GetWeapon().projectile.GetBehavior().Duplicate(); + var seeking = Game.instance.model.GetTower(TowerType.NinjaMonkey, 0, 0, 1).GetWeapon().projectile.GetBehavior().Duplicate(); + var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + bleed.name = "BleedModel"; + bleed.GetBehavior().interval = 1f; - seeking.distance = 999; - seeking.constantlyAquireNewTarget = true; + seeking.distance = 999; + seeking.constantlyAquireNewTarget = true; - var superBleed = bleed.Duplicate(); - superBleed.name = "MoabBleedModel"; - superBleed.GetBehavior().damage = 32; - superBleed.filter = new FilterMoabModel("MoabsOnly", false); + var superBleed = bleed.Duplicate(); + superBleed.name = "MoabBleedModel"; + superBleed.GetBehavior().damage = 32; + superBleed.filter = new FilterMoabModel("MoabsOnly", false); - var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(bleed); - wpn.weapons[0].projectile.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Camo", 1, 1, false, false) { name = "CamoModifier_" }); - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.weapons[0].projectile.AddBehavior(travel); - wpn.weapons[0].projectile.AddBehavior(seeking); - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; - wpn.weapons[0].projectile.pierce += 4; - wpn.weapons[0].projectile.AddBehavior(new UseAttackRotationModel("aaa")); - wpn.weapons[0].projectile.GetDamageModel().damage += 14; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.GetBehavior().GetBehavior().interval /= 2f; - wpn.weapons[0].projectile.GetBehavior().GetBehavior().damage += 7; - wpn.weapons[0].projectile.GetBehavior().lifespan *= 2; - wpn.weapons[0].rate /= 1.75f; - wpn.weapons[0].emission = new ArcEmissionModel("aaa", 3, 0, 25, null, false, false); - wpn.weapons[0].projectile.AddBehavior(superBleed); - wpn.weapons[0].projectile.AddBehavior(new AddBonusDamagePerHitToBloonModel("aaa", "bleed_Bonus_Damage", 8f, 3, 15, true, false, false, "bleed")); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SuperNova : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.BallofLightAA; - public override string WeaponName => "Super Nova"; - public override Sprite CustomIcon => GetSprite("SuperNovaIcon"); - public override string Description => "Bomb Shooter 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var super = Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050"); - var techTerror = super.GetDescendants().ToArray().First(a => a.name == "AttackModel_TechTerror_").Duplicate(); - var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. - GetBehavior().projectile.GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(bleed); + wpn.weapons[0].projectile.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Camo", 1, 1, false, false) { name = "CamoModifier_" }); + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.weapons[0].projectile.AddBehavior(travel); + wpn.weapons[0].projectile.AddBehavior(seeking); + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 4; + wpn.weapons[0].projectile.pierce += 4; + wpn.weapons[0].projectile.AddBehavior(new UseAttackRotationModel("aaa")); + wpn.weapons[0].projectile.GetDamageModel().damage += 14; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.GetBehavior().GetBehavior().interval /= 2f; + wpn.weapons[0].projectile.GetBehavior().GetBehavior().damage += 7; + wpn.weapons[0].projectile.GetBehavior().lifespan *= 2; + wpn.weapons[0].rate /= 1.75f; + wpn.weapons[0].emission = new ArcEmissionModel("aaa", 3, 0, 25, null, false, false); + wpn.weapons[0].projectile.AddBehavior(superBleed); + wpn.weapons[0].projectile.AddBehavior(new AddBonusDamagePerHitToBloonModel("aaa", "bleed_Bonus_Damage", 8f, 3, 15, true, false, false, "bleed")); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SuperNova : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.BallofLightAA; + public override string WeaponName => "Super Nova"; + public override Sprite CustomIcon => GetSprite("SuperNovaIcon"); + public override string Description => "Bomb Shooter 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var super = Game.instance.model.GetTowerFromId(TowerType.SuperMonkey + "-050"); + var techTerror = super.GetDescendants().ToArray().First(a => a.name == "AttackModel_TechTerror_").Duplicate(); + var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate().GetBehavior().weapons[0].projectile. + GetBehavior().projectile.GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("BombShooter").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("BombShooter").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); - var charge = techTerror.weapons[0].projectile; - charge.GetBehavior().Lifespan = 0.1f; - charge.radius = 75; - charge.scale = 75; - charge.pierce = 90; - charge.GetDamageModel().damage = 35; - charge.GetDamageModel().immuneBloonProperties = BloonProperties.None; - charge.GetDescendants().ForEach(model => model.isActive = false); - charge.hasDamageModifiers = true; - charge.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 60, false, false) { name = "MoabModifier_" }); - charge.AddBehavior(fire); - var chargeBehavior = new CreateProjectileOnContactModel("", charge, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaBlast_" }; + var charge = techTerror.weapons[0].projectile; + charge.GetBehavior().Lifespan = 0.1f; + charge.radius = 75; + charge.scale = 75; + charge.pierce = 90; + charge.GetDamageModel().damage = 35; + charge.GetDamageModel().immuneBloonProperties = BloonProperties.None; + charge.GetDescendants().ForEach(model => model.isActive = false); + charge.hasDamageModifiers = true; + charge.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 60, false, false) { name = "MoabModifier_" }); + charge.AddBehavior(fire); + var chargeBehavior = new CreateProjectileOnContactModel("", charge, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaBlast_" }; - var lightningVisual = charge.Duplicate(); - lightningVisual.RemoveBehavior(); - lightningVisual.RemoveBehavior(); - lightningVisual.RemoveBehavior(); - lightningVisual.GetBehavior().Lifespan = 0.75f; - lightningVisual.ApplyDisplay(); - var lightningVisualBehavior = new CreateProjectileOnContactModel("", lightningVisual, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaVisual_" }; + var lightningVisual = charge.Duplicate(); + lightningVisual.RemoveBehavior(); + lightningVisual.RemoveBehavior(); + lightningVisual.RemoveBehavior(); + lightningVisual.GetBehavior().Lifespan = 0.75f; + lightningVisual.ApplyDisplay(); + var lightningVisualBehavior = new CreateProjectileOnContactModel("", lightningVisual, new ArcEmissionModel("ArcEmissionModel_", 1, 0, 0, null, false, false), true, false, false) { name = "PlasmaVisual_" }; - var druid = Game.instance.model.GetTower(TowerType.Druid, 2); - var lightningBolt = druid.GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); + var druid = Game.instance.model.GetTower(TowerType.Druid, 2); + var lightningBolt = druid.GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); - var lightning = lightningBolt.projectile; - lightning.GetDamageModel().damage += 2; - lightning.pierce = 45; - lightning.GetBehavior().splitRange = towerModel.range * 10f; - lightning.GetBehavior().splits = 1; - lightning.GetDamageModel().immuneBloonProperties = BloonProperties.None; - lightning.GetDescendants().ForEach(model => model.isActive = false); - lightning.AddBehavior(fire); - var lightningBehavior = new CreateProjectileOnContactModel("", lightning, new ArcEmissionModel("ArcEmissionModel_", 3, 0, 0, null, false, false), true, false, false) { name = "Lightning_" }; + var lightning = lightningBolt.projectile; + lightning.GetDamageModel().damage += 2; + lightning.pierce = 45; + lightning.GetBehavior().splitRange = towerModel.range * 10f; + lightning.GetBehavior().splits = 1; + lightning.GetDamageModel().immuneBloonProperties = BloonProperties.None; + lightning.GetDescendants().ForEach(model => model.isActive = false); + lightning.AddBehavior(fire); + var lightningBehavior = new CreateProjectileOnContactModel("", lightning, new ArcEmissionModel("ArcEmissionModel_", 3, 0, 0, null, false, false), true, false, false) { name = "Lightning_" }; - wpn.weapons[0].projectile.AddBehavior(lightningBehavior); - wpn.weapons[0].projectile.AddBehavior(lightningVisualBehavior); - wpn.weapons[0].projectile.AddBehavior(chargeBehavior); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(fire); - wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; - wpn.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 9, false, false) { name = "CeramicModifier_" }); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 1, 9, false, false) { name = "FortifiedModifier_" }); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 60, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 34; - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Fireworks : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.ClusterBombsUpgradeIcon; - public override string WeaponName => "Fireworks"; - public override Sprite CustomIcon => GetSprite("FireworksIcon"); - public override string Description => "Tack Shooter 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var explosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); - var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); - effect.effectModel = bombEffect; + wpn.weapons[0].projectile.AddBehavior(lightningBehavior); + wpn.weapons[0].projectile.AddBehavior(lightningVisualBehavior); + wpn.weapons[0].projectile.AddBehavior(chargeBehavior); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(fire); + wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; + wpn.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 9, false, false) { name = "CeramicModifier_" }); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 1, 9, false, false) { name = "FortifiedModifier_" }); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 60, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 34; + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Fireworks : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.ClusterBombsUpgradeIcon; + public override string WeaponName => "Fireworks"; + public override Sprite CustomIcon => GetSprite("FireworksIcon"); + public override string Description => "Tack Shooter 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var explosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); + var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); + effect.effectModel = bombEffect; - explosion.GetDescendants().ForEach(model => model.isActive = false); - explosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; - explosion.GetDamageModel().damage = 2; + explosion.GetDescendants().ForEach(model => model.isActive = false); + explosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; + explosion.GetDamageModel().damage = 2; - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("TackShooter-200").GetAttackModel().Duplicate(); - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetBehavior().Lifespan = 0.2f; - wpn.weapons[0].projectile.pierce = 999; - wpn.weapons[0].projectile.GetDamageModel().damage -= 1; - wpn.weapons[0].projectile.RemoveBehavior(); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Explosion", explosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); - wpn.weapons[0].projectile.AddBehavior(effect); - wpn.weapons[0].projectile.AddBehavior(sound); + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("TackShooter-200").GetAttackModel().Duplicate(); + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetBehavior().Lifespan = 0.2f; + wpn.weapons[0].projectile.pierce = 999; + wpn.weapons[0].projectile.GetDamageModel().damage -= 1; + wpn.weapons[0].projectile.RemoveBehavior(); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Explosion", explosion, new ArcEmissionModel("FragmentEmmision_", 1, 0, 0, null, true, false), false)); + wpn.weapons[0].projectile.AddBehavior(effect); + wpn.weapons[0].projectile.AddBehavior(sound); - var firework = wpn.weapons[0].projectile.Duplicate(); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Firework", firework, new ArcEmissionModel("FragmentEmmision_", 8, 0, 360, null, true, false), false)); + var firework = wpn.weapons[0].projectile.Duplicate(); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExpireModel("Firework", firework, new ArcEmissionModel("FragmentEmmision_", 8, 0, 360, null, true, false), false)); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Bloonzooka : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.MissileLauncherUpgradeIcon; - public override string WeaponName => "Bloonzooka"; - public override Sprite CustomIcon => GetSprite("BloonzookaIcon"); - public override string Description => "Sniper 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var rocket = Game.instance.model.GetTower(TowerType.BombShooter, 0, 2).GetAttackModel().weapons[0].Duplicate(); - var homing = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Bloonzooka : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.MissileLauncherUpgradeIcon; + public override string WeaponName => "Bloonzooka"; + public override Sprite CustomIcon => GetSprite("BloonzookaIcon"); + public override string Description => "Sniper 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var rocket = Game.instance.model.GetTower(TowerType.BombShooter, 0, 2).GetAttackModel().weapons[0].Duplicate(); + var homing = Game.instance.model.GetTowerFromId("WizardMonkey-500").GetWeapon().projectile.GetBehavior().Duplicate(); - homing.distance = 999; - homing.constantlyAquireNewTarget = false; + homing.distance = 999; + homing.constantlyAquireNewTarget = false; - rocket.projectile.AddBehavior(homing); - rocket.rate = Game.instance.model.GetTower(TowerType.SniperMonkey, 0, 0, 2).GetAttackModel().weapons[0].rate; - rocket.projectile.GetBehavior().Lifespan *= 3; - rocket.projectile.GetBehavior().Speed /= 1.45f; + rocket.projectile.AddBehavior(homing); + rocket.rate = Game.instance.model.GetTower(TowerType.SniperMonkey, 0, 0, 2).GetAttackModel().weapons[0].rate; + rocket.projectile.GetBehavior().Lifespan *= 3; + rocket.projectile.GetBehavior().Speed /= 1.45f; - var shrapnel = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); - shrapnel.GetBehavior().Speed *= 1.5f; - shrapnel.GetBehavior().Lifespan *= 1.75f; + var shrapnel = Game.instance.model.GetTower(TowerType.TackShooter).GetAttackModel().weapons[0].projectile.Duplicate(); + shrapnel.GetBehavior().Speed *= 1.5f; + shrapnel.GetBehavior().Lifespan *= 1.75f; - var blast = rocket.projectile.GetBehavior().projectile; - blast.GetDamageModel().damage = 7; - blast.radius = 30; - blast.pierce = 65; - blast.GetDamageModel().immuneBloonProperties = BloonProperties.None; + var blast = rocket.projectile.GetBehavior().projectile; + blast.GetDamageModel().damage = 7; + blast.radius = 30; + blast.pierce = 65; + blast.GetDamageModel().immuneBloonProperties = BloonProperties.None; - var explosion = rocket.projectile.GetBehavior().effectModel; - explosion.scale *= 3f; + var explosion = rocket.projectile.GetBehavior().effectModel; + explosion.scale *= 3f; - var fragmentModel = new CreateProjectileOnContactModel("aaa", shrapnel, new ArcEmissionModel("ArcEmissionModel_", 16, 0, 360, null, true, false), true, false, false) { name = "RifleShrapnel_" }; - rocket.projectile.AddBehavior(fragmentModel); + var fragmentModel = new CreateProjectileOnContactModel("aaa", shrapnel, new ArcEmissionModel("ArcEmissionModel_", 16, 0, 360, null, true, false), true, false, false) { name = "RifleShrapnel_" }; + rocket.projectile.AddBehavior(fragmentModel); - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0] = rocket; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class NauticDestroyer : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.RocketStormUpgradeIconAA; - public override string WeaponName => "Nautic Destroyer"; - public override Sprite CustomIcon => GetSprite("NauticDestroyerIcon"); - public override string Description => "Monkey Sub 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MonkeySub").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetBehavior().TurnRate *= 3; - wpn.weapons[0].projectile.GetDamageModel().damage = 8; - wpn.weapons[0].name = "Dart1"; - wpn.weapons[0].rate /= 1.2f; + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0] = rocket; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class NauticDestroyer : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.RocketStormUpgradeIconAA; + public override string WeaponName => "Nautic Destroyer"; + public override Sprite CustomIcon => GetSprite("NauticDestroyerIcon"); + public override string Description => "Monkey Sub 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MonkeySub").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetBehavior().TurnRate *= 3; + wpn.weapons[0].projectile.GetDamageModel().damage = 8; + wpn.weapons[0].name = "Dart1"; + wpn.weapons[0].rate /= 1.2f; - var dart2 = wpn.weapons[0].Duplicate(); - var dart3 = wpn.weapons[0].Duplicate(); - var dart4 = wpn.weapons[0].Duplicate(); - var dart5 = wpn.weapons[0].Duplicate(); + var dart2 = wpn.weapons[0].Duplicate(); + var dart3 = wpn.weapons[0].Duplicate(); + var dart4 = wpn.weapons[0].Duplicate(); + var dart5 = wpn.weapons[0].Duplicate(); - dart2.name = "Dart2"; - dart3.name = "Dart3"; - dart4.name = "Dart4"; - dart5.name = "Dart5"; + dart2.name = "Dart2"; + dart3.name = "Dart3"; + dart4.name = "Dart4"; + dart5.name = "Dart5"; - wpn.AddWeapon(dart2); - wpn.AddWeapon(dart3); - wpn.AddWeapon(dart4); - wpn.AddWeapon(dart5); + wpn.AddWeapon(dart2); + wpn.AddWeapon(dart3); + wpn.AddWeapon(dart4); + wpn.AddWeapon(dart5); - foreach (var weapon in wpn.weapons) - { - if (weapon.name == "Dart1") - { - weapon.ejectX = 10; - } - if (weapon.name == "Dart2") - { - weapon.ejectX = 5; - } - if (weapon.name == "Dart3") - { - weapon.ejectX = 0; - } - if (weapon.name == "Dart4") - { - weapon.ejectX = -5; - } - if (weapon.name == "Dart5") - { - weapon.ejectX = -10; - } - } + foreach (var weapon in wpn.weapons) + { + if (weapon.name == "Dart1") + { + weapon.ejectX = 10; + } + if (weapon.name == "Dart2") + { + weapon.ejectX = 5; + } + if (weapon.name == "Dart3") + { + weapon.ejectX = 0; + } + if (weapon.name == "Dart4") + { + weapon.ejectX = -5; + } + if (weapon.name == "Dart5") + { + weapon.ejectX = -10; + } + } - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); - var torpedo = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().Duplicate(); - torpedo.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter, 0, 2).GetWeapon().projectile.display; - torpedo.weapons[0].projectile.GetBehavior().Lifespan *= 2.5f; - torpedo.weapons[0].rate = towerModel.GetAttackModel().weapons[0].rate * 1.2f; - torpedo.weapons[0].projectile.scale /= 1.65f; - torpedo.range = tower.towerModel.range; - torpedo.weapons[0].emission = new RandomArcEmissionModel("Torpedo Spread", 16, 0, 0, 135, 0, null); - torpedo.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 14; - torpedo.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - torpedo.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; - torpedo.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 24, false, false) { name = "MoabModifier_" }); - towerModel.AddBehavior(torpedo); - tower.UpdateRootModel(towerModel); - } - } - public class SidewinderAce : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.SkyShredderUpgradeIcon; - public override string WeaponName => "Sidewinder Ace"; - public override Sprite CustomIcon => GetSprite("SidewinderAceIcon"); - public override string Description => "Monkey Ace 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTower(TowerType.MonkeyBuccaneer, 5).GetAttackModel(1).Duplicate(); - var plane = wpn.weapons[0].projectile.GetBehavior().tower; - var gatling = Game.instance.model.GetTower(TowerType.HeliPilot, 4).GetAttackModel().weapons[2].Duplicate(); + var torpedo = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().Duplicate(); + torpedo.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BombShooter, 0, 2).GetWeapon().projectile.display; + torpedo.weapons[0].projectile.GetBehavior().Lifespan *= 2.5f; + torpedo.weapons[0].rate = towerModel.GetAttackModel().weapons[0].rate * 1.2f; + torpedo.weapons[0].projectile.scale /= 1.65f; + torpedo.range = tower.towerModel.range; + torpedo.weapons[0].emission = new RandomArcEmissionModel("Torpedo Spread", 16, 0, 0, 135, 0, null); + torpedo.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 14; + torpedo.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + torpedo.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; + torpedo.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 24, false, false) { name = "MoabModifier_" }); + towerModel.AddBehavior(torpedo); + tower.UpdateRootModel(towerModel); + } + } + public class SidewinderAce : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.SkyShredderUpgradeIcon; + public override string WeaponName => "Sidewinder Ace"; + public override Sprite CustomIcon => GetSprite("SidewinderAceIcon"); + public override string Description => "Monkey Ace 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTower(TowerType.MonkeyBuccaneer, 5).GetAttackModel(1).Duplicate(); + var plane = wpn.weapons[0].projectile.GetBehavior().tower; + var gatling = Game.instance.model.GetTower(TowerType.HeliPilot, 4).GetAttackModel().weapons[2].Duplicate(); - plane.GetBehavior().parentTowerUpgradeTier = 0; - plane.GetAttackModel(1).weapons[0].rate = Game.instance.model.GetTower(TowerType.MonkeyAce, 2).GetAttackModel().weapons[0].rate; - plane.GetAttackModel(1).weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - plane.GetAttackModel(0).weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + plane.GetBehavior().parentTowerUpgradeTier = 0; + plane.GetAttackModel(1).weapons[0].rate = Game.instance.model.GetTower(TowerType.MonkeyAce, 2).GetAttackModel().weapons[0].rate; + plane.GetAttackModel(1).weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + plane.GetAttackModel(0).weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - plane.GetAttackModel(0).weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 3, 2, false, false) { name = "MoabModifier_" }); + plane.GetAttackModel(0).weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 3, 2, false, false) { name = "MoabModifier_" }); - plane.GetDescendant().maxSpeed *= 2f; - plane.RemoveBehavior(plane.GetAttackModel(2)); + plane.GetDescendant().maxSpeed *= 2f; + plane.RemoveBehavior(plane.GetAttackModel(2)); - gatling.name = "GatlingGun"; - gatling.projectile.GetBehavior().Lifespan /= 2; - gatling.projectile.pierce = 4; - gatling.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - gatling.projectile.GetDamageModel().damage = 6; - gatling.projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 4, 0, false, false) { name = "MoabModifier_" }); + gatling.name = "GatlingGun"; + gatling.projectile.GetBehavior().Lifespan /= 2; + gatling.projectile.pierce = 4; + gatling.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + gatling.projectile.GetDamageModel().damage = 6; + gatling.projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 4, 0, false, false) { name = "MoabModifier_" }); - plane.GetAttackModel(1).AddWeapon(gatling); - wpn.weapons[0].GetBehavior().maxNumberOfSubTowers = 2; + plane.GetAttackModel(1).AddWeapon(gatling); + wpn.weapons[0].GetBehavior().maxNumberOfSubTowers = 2; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class RollingThunder : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.BombBlitzUpgradeIcon; - public override string WeaponName => "Rolling Thunder"; - public override Sprite CustomIcon => GetSprite("RollingThunderIcon"); - public override string Description => "Mortar 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var bomb = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); - var mortar = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var explosion = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); - var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); - var thunderExplosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); - var thunderEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); - var rollingEffect = effect.Duplicate(); - bombEffect.scale /= 2; - effect.effectModel = bombEffect; - rollingEffect.effectModel = thunderEffect; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class RollingThunder : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.BombBlitzUpgradeIcon; + public override string WeaponName => "Rolling Thunder"; + public override Sprite CustomIcon => GetSprite("RollingThunderIcon"); + public override string Description => "Mortar 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var bomb = Game.instance.model.GetTower(TowerType.DartMonkey).GetAttackModel().weapons[0].projectile.Duplicate(); + var mortar = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var effect = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var sound = Game.instance.model.GetTower(TowerType.MortarMonkey).GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var explosion = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); + var bombEffect = Game.instance.model.GetTower(TowerType.BombShooter, 2).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); + var thunderExplosion = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().projectile.Duplicate(); + var thunderEffect = Game.instance.model.GetTower(TowerType.BombShooter).GetAttackModel().weapons[0].projectile.GetBehavior().effectModel.Duplicate(); + var rollingEffect = effect.Duplicate(); + bombEffect.scale /= 2; + effect.effectModel = bombEffect; + rollingEffect.effectModel = thunderEffect; - explosion.radius /= 2; - explosion.pierce = 32; - explosion.GetDamageModel().damage = 8; - explosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; + explosion.radius /= 2; + explosion.pierce = 32; + explosion.GetDamageModel().damage = 8; + explosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; - thunderExplosion.radius += 4; - thunderExplosion.pierce = 16; - thunderExplosion.GetDamageModel().damage = 5; - thunderExplosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; + thunderExplosion.radius += 4; + thunderExplosion.pierce = 16; + thunderExplosion.GetDamageModel().damage = 5; + thunderExplosion.GetDamageModel().immuneBloonProperties = BloonProperties.None; - bomb.pierce = 9999; - bomb.GetDamageModel().damage = 0; - bomb.GetBehavior().Speed /= 1.75f; - bomb.GetDamageModel().immuneBloonProperties = BloonProperties.None; - bomb.display = Game.instance.model.GetTower(TowerType.DartlingGunner, 5).GetAttackModel().weapons[0].projectile.display; + bomb.pierce = 9999; + bomb.GetDamageModel().damage = 0; + bomb.GetBehavior().Speed /= 1.75f; + bomb.GetDamageModel().immuneBloonProperties = BloonProperties.None; + bomb.display = Game.instance.model.GetTower(TowerType.DartlingGunner, 5).GetAttackModel().weapons[0].projectile.display; - var thunderBomb = bomb.Duplicate(); + var thunderBomb = bomb.Duplicate(); - bomb.AddBehavior(new CreateProjectileOnExpireModel("ThunderExplosion", thunderBomb, new ArcEmissionModel("", 5, 0, 360, null, true, false), false)); - bomb.AddBehavior(new CreateProjectileOnExpireModel("ExpireExplosion", explosion, new ArcEmissionModel("", 1, 0, 0, null, true, false), false)); - thunderBomb.AddBehavior(new CreateProjectileOnExpireModel("ThunderBombs", explosion, new ArcEmissionModel("", 1, 0, 0, null, true, false), false)); + bomb.AddBehavior(new CreateProjectileOnExpireModel("ThunderExplosion", thunderBomb, new ArcEmissionModel("", 5, 0, 360, null, true, false), false)); + bomb.AddBehavior(new CreateProjectileOnExpireModel("ExpireExplosion", explosion, new ArcEmissionModel("", 1, 0, 0, null, true, false), false)); + thunderBomb.AddBehavior(new CreateProjectileOnExpireModel("ThunderBombs", explosion, new ArcEmissionModel("", 1, 0, 0, null, true, false), false)); - bomb.AddBehavior(effect); - bomb.AddBehavior(sound); - thunderBomb.AddBehavior(rollingEffect); - thunderBomb.AddBehavior(sound); + bomb.AddBehavior(effect); + bomb.AddBehavior(sound); + thunderBomb.AddBehavior(rollingEffect); + thunderBomb.AddBehavior(sound); - var bomb2 = bomb.Duplicate(); - var bomb3 = bomb.Duplicate(); + var bomb2 = bomb.Duplicate(); + var bomb3 = bomb.Duplicate(); - bomb2.GetBehavior().Lifespan *= 1.5f; - bomb3.GetBehavior().Lifespan *= 2; + bomb2.GetBehavior().Lifespan *= 1.5f; + bomb3.GetBehavior().Lifespan *= 2; - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-020").GetAttackModel().Duplicate(); - wpn.RemoveBehaviors(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 6; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-1", bomb, new ArcEmissionModel("", 8, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-2", bomb2, new ArcEmissionModel("", 8, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-3", bomb3, new ArcEmissionModel("", 8, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SorcererSupreme : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.ArcaneBlastUpgradeIcon; - public override string WeaponName => "Sorcerer Supreme"; - public override Sprite CustomIcon => GetSprite("SorcererSupremeIcon"); - public override string Description => "Wizard 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-002").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.weapons[0].rate /= 4.68f; - wpn.weapons[0].projectile.pierce += 4; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.GetDamageModel().damage += 5; - wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 8, 0, 65, null, false, false); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class DemonBlade : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; - public override string WeaponName => "Demon Blade"; - public override Sprite CustomIcon => GetSprite("DemonBladeIcon"); - public override string Description => "Ninja 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetDamageModel().damage = 8; - wpn.weapons[0].projectile.scale *= 2; - wpn.weapons[0].projectile.pierce = 6; - wpn.weapons[0].rate = Game.instance.model.GetTowerFromId("NinjaMonkey-200").GetAttackModel().weapons[0].rate * 1.3f; - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 125, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-020").GetAttackModel().Duplicate(); + wpn.RemoveBehaviors(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); + wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 6; + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-1", bomb, new ArcEmissionModel("", 8, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-2", bomb2, new ArcEmissionModel("", 8, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnExhaustFractionModel("CarpetBomb-3", bomb3, new ArcEmissionModel("", 8, 0, 360, null, true, false), mortar.fraction, mortar.durationfraction, true, false, true)); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SorcererSupreme : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.ArcaneBlastUpgradeIcon; + public override string WeaponName => "Sorcerer Supreme"; + public override Sprite CustomIcon => GetSprite("SorcererSupremeIcon"); + public override string Description => "Wizard 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-002").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.weapons[0].rate /= 4.68f; + wpn.weapons[0].projectile.pierce += 4; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.GetDamageModel().damage += 5; + wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 8, 0, 65, null, false, false); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class DemonBlade : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.InfernoRingUpgradeIcon; + public override string WeaponName => "Demon Blade"; + public override Sprite CustomIcon => GetSprite("DemonBladeIcon"); + public override string Description => "Ninja 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetDamageModel().damage = 8; + wpn.weapons[0].projectile.scale *= 2; + wpn.weapons[0].projectile.pierce = 6; + wpn.weapons[0].rate = Game.instance.model.GetTowerFromId("NinjaMonkey-200").GetAttackModel().weapons[0].rate * 1.3f; + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 125, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - var blades = Game.instance.model.GetTower(TowerType.DartMonkey, 0, 0, 2).GetAttackModel().weapons[0].Duplicate(); - blades.rate = wpn.weapons[0].rate; + var blades = Game.instance.model.GetTower(TowerType.DartMonkey, 0, 0, 2).GetAttackModel().weapons[0].Duplicate(); + blades.rate = wpn.weapons[0].rate; - blades.projectile.hasDamageModifiers = true; - blades.projectile.GetDamageModel().damage = 8; - blades.projectile.pierce = 6; - blades.projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 32, false, false) { name = "MoabModifier_" }); - blades.projectile.ApplyDisplay(); - blades.projectile.GetDescendants().ForEach(model => model.isActive = false); - blades.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - blades.emission = new ArcEmissionModel("aaa", 2, 0, 60, null, false, false); + blades.projectile.hasDamageModifiers = true; + blades.projectile.GetDamageModel().damage = 8; + blades.projectile.pierce = 6; + blades.projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 32, false, false) { name = "MoabModifier_" }); + blades.projectile.ApplyDisplay(); + blades.projectile.GetDescendants().ForEach(model => model.isActive = false); + blades.projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + blades.emission = new ArcEmissionModel("aaa", 2, 0, 60, null, false, false); - wpn.AddWeapon(blades); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SuperAcid : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.BloonLiquefierUpgradeIcon; - public override string WeaponName => "Super Acid"; - public override Sprite CustomIcon => GetSprite("SuperAcidIcon"); - public override string Description => "Alchemist 4th path by LynxC"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("Alchemist").GetAttackModel().Duplicate(); - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "AcidFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); - wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; - wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 1; - wpn.weapons[0].rate /= 7.5f; - wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 1; - wpn.weapons[0].projectile.GetBehavior().projectile.GetBehavior().GetBehavior().damage += 9; - wpn.weapons[0].projectile.GetBehavior().projectile.GetBehavior().GetBehavior().interval -= 1f; - wpn.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 18, false, false) { name = "MoabModifier_" }); - wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new AddBonusDamagePerHitToBloonModel("aaa", "Acid_Bonus_Damage", 4f, 5, 999, true, false, false, "bleed")); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class OmegaBeacon : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.BallLightningUpgradeIcon; - public override string WeaponName => "Omega Beacon"; - public override Sprite CustomIcon => GetSprite("OmegaBeaconIcon"); - public override string Description => "Village 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Druid-200").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.RemoveBehavior(); - wpn.RemoveWeapon(wpn.weapons[0]); - wpn.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].rate /= 3; - wpn.weapons[0].projectile.GetDamageModel().damage += 10; - wpn.weapons[0].projectile.pierce += 4; - wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "BeaconStun", 999, "Stun", true, new GrowBlockModel("GrowBlockModel_"), null, 0.5f, true, true)); - wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Overcharge : WeaponTemplate - { - public override int SandboxIndex => 4; - public override Rarity WeaponRarity => Rarity.Legendary; - public override string Icon => VanillaSprites.HeartofThunderUpgradeIcon; - public override string WeaponName => "Overcharge"; - public override Sprite CustomIcon => GetSprite("OverchargeIcon"); - public override string Description => "Engineer 4th path by LynxC"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var ballLightning = Game.instance.model.GetTower(TowerType.Druid, 4).GetAttackModel().weapons[1].Duplicate(); + wpn.AddWeapon(blades); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SuperAcid : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.BloonLiquefierUpgradeIcon; + public override string WeaponName => "Super Acid"; + public override Sprite CustomIcon => GetSprite("SuperAcidIcon"); + public override string Description => "Alchemist 4th path by LynxC"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("Alchemist").GetAttackModel().Duplicate(); + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "AcidFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); + wpn.weapons[0].projectile.GetBehavior().projectile.collisionPasses = new int[] { 0, -1 }; + wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 1; + wpn.weapons[0].rate /= 7.5f; + wpn.weapons[0].projectile.GetBehavior().projectile.GetDamageModel().damage += 1; + wpn.weapons[0].projectile.GetBehavior().projectile.GetBehavior().GetBehavior().damage += 9; + wpn.weapons[0].projectile.GetBehavior().projectile.GetBehavior().GetBehavior().interval -= 1f; + wpn.weapons[0].projectile.GetBehavior().projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moabs", 1, 18, false, false) { name = "MoabModifier_" }); + wpn.weapons[0].projectile.GetBehavior().projectile.AddBehavior(new AddBonusDamagePerHitToBloonModel("aaa", "Acid_Bonus_Damage", 4f, 5, 999, true, false, false, "bleed")); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class OmegaBeacon : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.BallLightningUpgradeIcon; + public override string WeaponName => "Omega Beacon"; + public override Sprite CustomIcon => GetSprite("OmegaBeaconIcon"); + public override string Description => "Village 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Druid-200").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.RemoveBehavior(); + wpn.RemoveWeapon(wpn.weapons[0]); + wpn.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].rate /= 3; + wpn.weapons[0].projectile.GetDamageModel().damage += 10; + wpn.weapons[0].projectile.pierce += 4; + wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "BeaconStun", 999, "Stun", true, new GrowBlockModel("GrowBlockModel_"), null, 0.5f, true, true)); + wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Overcharge : WeaponTemplate + { + public override int SandboxIndex => 4; + public override Rarity WeaponRarity => Rarity.Legendary; + public override string Icon => VanillaSprites.HeartofThunderUpgradeIcon; + public override string WeaponName => "Overcharge"; + public override Sprite CustomIcon => GetSprite("OverchargeIcon"); + public override string Description => "Engineer 4th path by LynxC"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var ballLightning = Game.instance.model.GetTower(TowerType.Druid, 4).GetAttackModel().weapons[1].Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - var sentry = wpn.weapons[0].projectile.GetBehavior().tower; - ballLightning.rate = 2.5f; + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + var sentry = wpn.weapons[0].projectile.GetBehavior().tower; + ballLightning.rate = 2.5f; - sentry.GetAttackModel().weapons[0] = ballLightning; - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); + sentry.GetAttackModel().weapons[0] = ballLightning; + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); - var drones = Game.instance.model.GetTower(TowerType.Etienne).GetBehavior().Duplicate(); - drones.count = 4; + var drones = Game.instance.model.GetTower(TowerType.Etienne).GetBehavior().Duplicate(); + drones.count = 4; - var droneAttackModel = drones.droneModel.GetAttackModel(); - droneAttackModel.weapons[0].projectile.display = Game.instance.model.GetTowerFromId("DartlingGunner-300").GetAttackModel().weapons[0].projectile.display; - droneAttackModel.range = towerModel.range; - droneAttackModel.weapons[0].projectile.pierce = 12; - droneAttackModel.weapons[0].projectile.GetDamageModel().damage = 5; - droneAttackModel.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - droneAttackModel.weapons[0].rate /= 2.8f; + var droneAttackModel = drones.droneModel.GetAttackModel(); + droneAttackModel.weapons[0].projectile.display = Game.instance.model.GetTowerFromId("DartlingGunner-300").GetAttackModel().weapons[0].projectile.display; + droneAttackModel.range = towerModel.range; + droneAttackModel.weapons[0].projectile.pierce = 12; + droneAttackModel.weapons[0].projectile.GetDamageModel().damage = 5; + droneAttackModel.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + droneAttackModel.weapons[0].rate /= 2.8f; - towerModel.AddBehavior(wpn); - towerModel.AddBehavior(drones); - tower.UpdateRootModel(towerModel); - } - } - public static List LegendaryWpn = new List(); - public static List LegendaryImg = new List(); - public static List LegendaryCustomImg = new List(); - } + towerModel.AddBehavior(wpn); + towerModel.AddBehavior(drones); + tower.UpdateRootModel(towerModel); + } + } + public static List LegendaryWpn = new List(); + public static List LegendaryImg = new List(); + public static List LegendaryCustomImg = new List(); + } } diff --git a/Weapons-Ability/Omega.cs b/Weapons-Ability/Omega.cs index 79b31ce..308170d 100644 --- a/Weapons-Ability/Omega.cs +++ b/Weapons-Ability/Omega.cs @@ -1,305 +1,264 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BTD_Mod_Helper.Api.Display; using BTD_Mod_Helper.Api.Enums; +using BTD_Mod_Helper.Api.Towers; +using BTD_Mod_Helper.Extensions; +using Il2Cpp; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.Effects; using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Unity; -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; +using Il2CppAssets.Scripts.Models.TowerSets; +using Il2CppAssets.Scripts.Simulation.Towers; +using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Attack; using Il2CppAssets.Scripts.Unity; -using UnityEngine; +using Il2CppAssets.Scripts.Unity.Display; +using Monkeys; using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using System.Threading; -using Il2CppAssets.Scripts.Simulation.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Abilities; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; -using Il2Cpp; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using BTD_Mod_Helper.Api.Display; -using BTD_Mod_Helper.Api.Towers; -using Il2CppAssets.Scripts.Models.TowerSets; -using Il2CppAssets.Scripts.Unity.Display; -using Monkeys; -using Il2CppAssets.Scripts.Models.Effects; namespace AncientMonkey.Weapons { - public class Bloonarius : WeaponTemplate - { - public override int SandboxIndex => 7; - public override Rarity WeaponRarity => Rarity.Omega; - public override string Icon => VanillaSprites.BloonariusPortrait; - public override string WeaponName => "Bloonarius"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var agemodel = Game.instance.model.GetTowerFromId("SpikeFactory").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var summon = Game.instance.model.GetTowerFromId("WizardMonkey-004").GetAttackModel(2).Duplicate(); - summon.weapons[0].projectile.name = "AttackModel_Summon_"; - summon.weapons[0].emission = new NecromancerEmissionModel("Bloonarius.", 99999999, 999999, 1, 1, 1, 50, 0, null, null, null, 1, 100, 1, 1, 2); - summon.weapons[0].rate = 60; - summon.weapons[0].projectile.GetBehavior().disableRotateWithPathDirection = false; - summon.name = "AttackModel_Summon_"; - summon.weapons[0].projectile.AddBehavior(new ClearHitBloonsModel("Clearhit", 1f)); - summon.weapons[0].projectile.GetDamageModel().damage = 67500; - summon.weapons[0].projectile.display = Game.instance.model.GetBloon(BloonType.Bloonarius5).display; - summon.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - summon.weapons[0].projectile.pierce = 100; - summon.range = 100000; - summon.weapons[0].projectile.GetBehavior().lifespanFrames = 99999; - summon.weapons[0].projectile.GetBehavior().speedFrames *= 0.4f; - summon.weapons[0].projectile.RemoveBehavior(); - agemodel.lifespanFrames = 99999; - agemodel.lifespan = 99999; - agemodel.rounds = 9999; - summon.weapons[0].projectile.AddBehavior(agemodel); - var summon2 = summon.Duplicate(); - summon2.weapons[0].emission = new NecromancerEmissionModel("Bloonarius.", 99999999, 999999, 5, 10, 1, 75, 0, null, null, null, 1, 100, 1, 1, 2); - summon2.weapons[0].rate = 45; - summon2.weapons[0].projectile.GetDamageModel().damage = 250; - summon2.weapons[0].projectile.pierce = 10; - summon2.weapons[0].projectile.GetBehavior().speedFrames *= 2f; - summon2.weapons[0].projectile.display = Game.instance.model.GetBloon(BloonType.Bfb).display; - var summon3 = summon.Duplicate(); - summon3.weapons[0].emission = new NecromancerEmissionModel("Bloonarius.", 99999999, 999999, 25, 50, 1, 75, 0, null, null, null, 1, 100, 1, 1, 2); - summon3.weapons[0].rate = 25; - summon3.weapons[0].projectile.GetDamageModel().damage = 40; - summon3.weapons[0].projectile.pierce = 3; - summon3.weapons[0].projectile.GetBehavior().speedFrames *= 5f; - summon3.weapons[0].projectile.display = Game.instance.model.GetBloon(BloonType.Red).display; - summon3.weapons[0].projectile.GetBehavior().disableRotateWithPathDirection = true; - towerModel.AddBehavior(summon); - towerModel.AddBehavior(summon2); - towerModel.AddBehavior(summon3); - tower.UpdateRootModel(towerModel); + public class Bloonarius : WeaponTemplate + { + public override int SandboxIndex => 7; + public override Rarity WeaponRarity => Rarity.Omega; + public override string Icon => VanillaSprites.BloonariusPortrait; + public override string WeaponName => "Bloonarius"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var agemodel = Game.instance.model.GetTowerFromId("SpikeFactory").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var summon = Game.instance.model.GetTowerFromId("WizardMonkey-004").GetAttackModel(2).Duplicate(); + summon.weapons[0].projectile.name = "AttackModel_Summon_"; + summon.weapons[0].emission = new NecromancerEmissionModel("Bloonarius.", 99999999, 999999, 1, 1, 1, 50, 0, null, null, null, 1, 100, 1, 1, 2); + summon.weapons[0].rate = 60; + summon.weapons[0].projectile.GetBehavior().disableRotateWithPathDirection = false; + summon.name = "AttackModel_Summon_"; + summon.weapons[0].projectile.AddBehavior(new ClearHitBloonsModel("Clearhit", 1f)); + summon.weapons[0].projectile.GetDamageModel().damage = 67500; + summon.weapons[0].projectile.display = Game.instance.model.GetBloon(BloonType.Bloonarius5).display; + summon.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + summon.weapons[0].projectile.pierce = 100; + summon.range = 100000; + summon.weapons[0].projectile.GetBehavior().lifespanFrames = 99999; + summon.weapons[0].projectile.GetBehavior().speedFrames *= 0.4f; + summon.weapons[0].projectile.RemoveBehavior(); + agemodel.lifespanFrames = 99999; + agemodel.lifespan = 99999; + agemodel.rounds = 9999; + summon.weapons[0].projectile.AddBehavior(agemodel); + var summon2 = summon.Duplicate(); + summon2.weapons[0].emission = new NecromancerEmissionModel("Bloonarius.", 99999999, 999999, 5, 10, 1, 75, 0, null, null, null, 1, 100, 1, 1, 2); + summon2.weapons[0].rate = 45; + summon2.weapons[0].projectile.GetDamageModel().damage = 250; + summon2.weapons[0].projectile.pierce = 10; + summon2.weapons[0].projectile.GetBehavior().speedFrames *= 2f; + summon2.weapons[0].projectile.display = Game.instance.model.GetBloon(BloonType.Bfb).display; + var summon3 = summon.Duplicate(); + summon3.weapons[0].emission = new NecromancerEmissionModel("Bloonarius.", 99999999, 999999, 25, 50, 1, 75, 0, null, null, null, 1, 100, 1, 1, 2); + summon3.weapons[0].rate = 25; + summon3.weapons[0].projectile.GetDamageModel().damage = 40; + summon3.weapons[0].projectile.pierce = 3; + summon3.weapons[0].projectile.GetBehavior().speedFrames *= 5f; + summon3.weapons[0].projectile.display = Game.instance.model.GetBloon(BloonType.Red).display; + summon3.weapons[0].projectile.GetBehavior().disableRotateWithPathDirection = true; + towerModel.AddBehavior(summon); + towerModel.AddBehavior(summon2); + towerModel.AddBehavior(summon3); + tower.UpdateRootModel(towerModel); + + } + } + public class Lych : WeaponTemplate + { + public override int SandboxIndex => 7; + public override Rarity WeaponRarity => Rarity.Omega; + public override string Icon => VanillaSprites.LychPortrait; + public override string WeaponName => "Lych"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var agemodel = Game.instance.model.GetTowerFromId("SpikeFactory").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var lych = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); + lych.range = towerModel.range; + lych.name = "Sniper_Weapon"; + lych.weapons[0].Rate = 50; + lych.weapons[0].projectile.RemoveBehavior(); + lych.weapons[0].projectile.ApplyDisplay(); + lych.GetDescendant().rotateTower = false; + lych.weapons[0].projectile.AddBehavior(new CreateTowerModel("LychTower", GetTowerModel().Duplicate(), 0f, true, false, false, true, true)); + towerModel.AddBehavior(lych); + tower.UpdateRootModel(towerModel); + } + } + public class Vortex : WeaponTemplate + { + public override int SandboxIndex => 7; + public override Rarity WeaponRarity => Rarity.Omega; + public override string Icon => VanillaSprites.VortexPortrait; + public override string WeaponName => "Vortex"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var agemodel = Game.instance.model.GetTowerFromId("SpikeFactory").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + var vort = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + vort.weapons[0].rate = 12.5f; + vort.weapons[0].projectile.GetBehavior().lifespan /= 10f; + vort.weapons[0].projectile.radius = 1000000000; + vort.weapons[0].projectile.scale = 0.01f; + vort.weapons[0].projectile.GetDamageModel().damage = 55000; + vort.weapons[0].projectile.GetDamageModel().distributeToChildren = true; + vort.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + vort.weapons[0].projectile.pierce = 999999999; + var stun = Game.instance.model.GetTowerFromId("BombShooter-400").GetDescendant().Duplicate(); + var stuntag = Game.instance.model.GetTowerFromId("BombShooter-400").GetDescendant().Duplicate(); + vort.weapons[0].projectile.collisionPasses = new[] { -1, 0 }; + var moabstun = Game.instance.model.GetTowerFromId("BombShooter-500").GetDescendant().Duplicate(); + moabstun.lifespan = 10f; + stun.lifespan = 15; + vort.weapons[0].projectile.AddBehavior(stun); + vort.weapons[0].projectile.AddBehavior(stuntag); + vort.weapons[0].projectile.AddBehavior(moabstun); + var explosion = Game.instance.model.GetTower(TowerType.MortarMonkey, 5, 0, 0).GetDescendant().Duplicate(); + vort.weapons[0].projectile.AddBehavior(explosion); + + var superbrittle = Game.instance.model.GetTowerFromId("IceMonkey-500").GetDescendant(); + superbrittle.perHitDamageAddition = 10; + vort.weapons[0].projectile.AddBehavior(superbrittle); + vort.fireWithoutTarget = true; + towerModel.AddBehavior(vort); + tower.UpdateRootModel(towerModel); + } + } + public class Dreadbloon : WeaponTemplate + { + public override int SandboxIndex => 7; + public override Rarity WeaponRarity => Rarity.Omega; + public override string Icon => VanillaSprites.DreadbloonPortrait; + public override string WeaponName => "Dreadbloon"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-020").GetBehavior().Duplicate(); + ace.display = Game.instance.model.GetBloon("Dreadbloon5").display; + wpn.weapons[0].projectile.display = Game.instance.model.GetBloon("DreadRockBloonStandard5").display; + wpn.weapons[0].rate = 0.33f; + wpn.weapons[0].projectile.GetDamageModel().damage = 4500; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.pierce = 10; + wpn.weapons[0].emission = new ArcEmissionModel("Arc", 5, 0, 90, null, false, true); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); + ace.AddBehavior(wpn); - } - } - public class Lych : WeaponTemplate - { - public override int SandboxIndex => 7; - public override Rarity WeaponRarity => Rarity.Omega; - public override string Icon => VanillaSprites.LychPortrait; - public override string WeaponName => "Lych"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var agemodel = Game.instance.model.GetTowerFromId("SpikeFactory").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var lych = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); - lych.range = towerModel.range; - lych.name = "Sniper_Weapon"; - lych.weapons[0].Rate = 50; - lych.weapons[0].projectile.RemoveBehavior(); - lych.weapons[0].projectile.ApplyDisplay(); - lych.GetDescendant().rotateTower = false; - lych.weapons[0].projectile.AddBehavior(new CreateTowerModel("LychTower", GetTowerModel().Duplicate(), 0f, true, false, false, true, true)); - towerModel.AddBehavior(lych); - tower.UpdateRootModel(towerModel); - } - } - public class Vortex : WeaponTemplate - { - public override int SandboxIndex => 7; - public override Rarity WeaponRarity => Rarity.Omega; - public override string Icon => VanillaSprites.VortexPortrait; - public override string WeaponName => "Vortex"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var agemodel = Game.instance.model.GetTowerFromId("SpikeFactory").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - var vort = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - vort.weapons[0].rate = 12.5f; - vort.weapons[0].projectile.GetBehavior().lifespan /= 10f; - vort.weapons[0].projectile.radius = 1000000000; - vort.weapons[0].projectile.scale = 0.01f; - vort.weapons[0].projectile.GetDamageModel().damage = 55000; - vort.weapons[0].projectile.GetDamageModel().distributeToChildren = true; - vort.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - vort.weapons[0].projectile.pierce = 999999999; - var stun = Game.instance.model.GetTowerFromId("BombShooter-400").GetDescendant().Duplicate(); - var stuntag = Game.instance.model.GetTowerFromId("BombShooter-400").GetDescendant().Duplicate(); - vort.weapons[0].projectile.collisionPasses = new[] { -1, 0 }; - var moabstun = Game.instance.model.GetTowerFromId("BombShooter-500").GetDescendant().Duplicate(); - moabstun.lifespan = 10f; - stun.lifespan = 15; - vort.weapons[0].projectile.AddBehavior(stun); - vort.weapons[0].projectile.AddBehavior(stuntag); - vort.weapons[0].projectile.AddBehavior(moabstun); - var explosion = Game.instance.model.GetTower(TowerType.MortarMonkey, 5, 0, 0).GetDescendant().Duplicate(); - vort.weapons[0].projectile.AddBehavior(explosion); - - var superbrittle = Game.instance.model.GetTowerFromId("IceMonkey-500").GetDescendant(); - superbrittle.perHitDamageAddition = 10; - vort.weapons[0].projectile.AddBehavior(superbrittle); - vort.fireWithoutTarget = true; - towerModel.AddBehavior(vort); - tower.UpdateRootModel(towerModel); - } - } - public class Dreadbloon : WeaponTemplate - { - public override int SandboxIndex => 7; - public override Rarity WeaponRarity => Rarity.Omega; - public override string Icon => VanillaSprites.DreadbloonPortrait; - public override string WeaponName => "Dreadbloon"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce-Paragon").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-020").GetBehavior().Duplicate(); - ace.display = Game.instance.model.GetBloon("Dreadbloon5").display; - wpn.weapons[0].projectile.display = Game.instance.model.GetBloon("DreadRockBloonStandard5").display; - wpn.weapons[0].rate = 0.33f; - wpn.weapons[0].projectile.GetDamageModel().damage = 4500; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.pierce = 10; - wpn.weapons[0].emission = new ArcEmissionModel("Arc", 5, 0, 90, null, false, true); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); - ace.AddBehavior(wpn); - - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class Phayze : WeaponTemplate - { - public override int SandboxIndex => 7; - public override Rarity WeaponRarity => Rarity.Omega; - public override string Icon => VanillaSprites.PhayzePortrait; - public override string WeaponName => "Phayze"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var orbit = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetBehavior().Duplicate(); - orbit.count = 2; - orbit.projectile.display = Game.instance.model.GetBloon("Phayze5").display; - orbit.projectile.scale *= 0.5f; - orbit.range = 50; - var orbitDamage = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetAttackModel("AttackModel_OrbitAttack_").Duplicate(); - orbitDamage.weapons[0].rate = 0.01f; - orbitDamage.weapons[0].projectile.pierce = 9999999; - orbitDamage.weapons[0].projectile.RemoveBehaviors(); - orbitDamage.weapons[0].projectile.GetDamageModel().damage = 250; - orbitDamage.weapons[0].projectile.GetDamageModel().maxDamage = 999999; - orbitDamage.weapons[0].projectile.radius = 50; - orbitDamage.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - towerModel.AddBehavior(orbitDamage); - towerModel.AddBehavior(orbit); - tower.UpdateRootModel(towerModel); - } - } - public class Omega - { - public static List OmegaWpn = new List(); - public static List OmegaImg = new List(); - public static List OmegaCustomImg = new List(); - } + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class Phayze : WeaponTemplate + { + public override int SandboxIndex => 7; + public override Rarity WeaponRarity => Rarity.Omega; + public override string Icon => VanillaSprites.PhayzePortrait; + public override string WeaponName => "Phayze"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var orbit = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetBehavior().Duplicate(); + orbit.count = 2; + orbit.projectile.display = Game.instance.model.GetBloon("Phayze5").display; + orbit.projectile.scale *= 0.5f; + orbit.range = 50; + var orbitDamage = Game.instance.model.GetTower(TowerType.BoomerangMonkey, 5).GetAttackModel("AttackModel_OrbitAttack_").Duplicate(); + orbitDamage.weapons[0].rate = 0.01f; + orbitDamage.weapons[0].projectile.pierce = 9999999; + orbitDamage.weapons[0].projectile.RemoveBehaviors(); + orbitDamage.weapons[0].projectile.GetDamageModel().damage = 250; + orbitDamage.weapons[0].projectile.GetDamageModel().maxDamage = 999999; + orbitDamage.weapons[0].projectile.radius = 50; + orbitDamage.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + towerModel.AddBehavior(orbitDamage); + towerModel.AddBehavior(orbit); + tower.UpdateRootModel(towerModel); + } + } + public class Omega + { + public static List OmegaWpn = new List(); + public static List OmegaImg = new List(); + public static List OmegaCustomImg = new List(); + } } namespace Monkeys { - public class LychMinion : ModTower - { - public override string Portrait => "Officer"; - public override string Name => "Lych"; - public override TowerSet TowerSet => TowerSet.Military; - public override string BaseTower => TowerType.DartMonkey + "-002"; + public class LychMinion : ModTower + { + public override string Portrait => "Officer"; + public override string Name => "Lych"; + public override TowerSet TowerSet => TowerSet.Military; + public override string BaseTower => TowerType.DartMonkey + "-002"; - public override bool DontAddToShop => true; - public override int Cost => 0; + public override bool DontAddToShop => true; + public override int Cost => 0; - public override int TopPathUpgrades => 0; - public override int MiddlePathUpgrades => 0; - public override int BottomPathUpgrades => 0; + public override int TopPathUpgrades => 0; + public override int MiddlePathUpgrades => 0; + public override int BottomPathUpgrades => 0; - public override string DisplayName => "Lych"; - public override string Description => ""; + public override string DisplayName => "Lych"; + public override string Description => ""; - public override void ModifyBaseTowerModel(TowerModel towerModel) - { - var attackModel = towerModel.GetBehavior(); - var weapons = attackModel.weapons[0]; - var projectile = weapons.projectile; - towerModel.isSubTower = true; - towerModel.AddBehavior(new TowerExpireModel("ExpireModel", 40f, 3, false, false)); - weapons.rate = 0.06f; - projectile.display = Game.instance.model.GetBloon(BloonType.Lych5).display; - projectile.scale *= 0.3f; - projectile.GetDamageModel().damage = 750; - projectile.pierce = 75; - projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - projectile.GetBehavior().lifespan *= 3; - towerModel.range = 50; - attackModel.range = 50; - towerModel.radius = 0; - towerModel.displayScale *= 0.6f; - towerModel.isGlobalRange = false; - var Pops = Game.instance.model.GetTowerFromId("Sentry").GetBehavior().Duplicate(); - towerModel.AddBehavior(Pops); - towerModel.display = Game.instance.model.GetBloon(BloonType.Lych5).display; - towerModel.ignoreTowerForSelection = true; - } + public override void ModifyBaseTowerModel(TowerModel towerModel) + { + var attackModel = towerModel.GetBehavior(); + var weapons = attackModel.weapons[0]; + var projectile = weapons.projectile; + towerModel.isSubTower = true; + towerModel.AddBehavior(new TowerExpireModel("ExpireModel", 40f, 3, false, false)); + weapons.rate = 0.06f; + projectile.display = Game.instance.model.GetBloon(BloonType.Lych5).display; + projectile.scale *= 0.3f; + projectile.GetDamageModel().damage = 750; + projectile.pierce = 75; + projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + projectile.GetBehavior().lifespan *= 3; + towerModel.range = 50; + attackModel.range = 50; + towerModel.radius = 0; + towerModel.displayScale *= 0.6f; + towerModel.isGlobalRange = false; + var Pops = Game.instance.model.GetTowerFromId("Sentry").GetBehavior().Duplicate(); + towerModel.AddBehavior(Pops); + towerModel.display = Game.instance.model.GetBloon(BloonType.Lych5).display; + towerModel.ignoreTowerForSelection = true; + } - } + } } \ No newline at end of file diff --git a/Weapons-Ability/Rare.cs b/Weapons-Ability/Rare.cs index 90a870b..9864285 100644 --- a/Weapons-Ability/Rare.cs +++ b/Weapons-Ability/Rare.cs @@ -1,692 +1,682 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using AncientMonkey.Projectiles; using BTD_Mod_Helper.Api.Enums; +using BTD_Mod_Helper.Extensions; +using Il2Cpp; using Il2CppAssets.Scripts.Data.Gameplay.Mods; +using Il2CppAssets.Scripts.Models.Bloons.Behaviors; using Il2CppAssets.Scripts.Models.Towers; +using Il2CppAssets.Scripts.Models.Towers.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; +using Il2CppAssets.Scripts.Models.Towers.Filters; +using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; +using Il2CppAssets.Scripts.Simulation.Towers; using Il2CppAssets.Scripts.Unity; -using UnityEngine; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using BTD_Mod_Helper.Api.Enums; -using BTD_Mod_Helper.Extensions; -using Il2CppAssets.Scripts.Data.Gameplay.Mods; -using Il2CppAssets.Scripts.Models.Towers; -using Il2CppAssets.Scripts.Simulation.Towers; -using Il2CppAssets.Scripts.Unity; using UnityEngine; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using AncientMonkey.Projectiles; -using Il2Cpp; -using Il2CppAssets.Scripts.Models.Bloons.Behaviors; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions; -using Il2CppAssets.Scripts.Models.Towers.Filters; -using Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors; namespace AncientMonkey.Weapons { - public class SuperMonkey : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.EpicRangeUpgradeIcon; - public override string WeaponName => "Super Monkey"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SuperMonkey").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class HotRang : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.RedHotRangsUpgradeIcon; - public override string WeaponName => "Hot Rang"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-002").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Crossbow : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.CrossBowUpgradeIcon; - public override string WeaponName => "Crossbow"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-003").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Cluster : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.ClusterBombsUpgradeIcon; - public override string WeaponName => "Cluster"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BombShooter-003").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class WhiteHotSpikes : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.WhiteHotSpikesUpgradeIcon; - public override string WeaponName => "White Hot Spikes"; - public override bool IsCamo => true; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-220").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class GreaterProduction : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.GreaterProductionUpgradeIcon; - public override string WeaponName => "Greater Production"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BananaFarm-200").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class HeartOfThunder : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.HeartofThunderUpgradeIcon; - public override string WeaponName => "Heart Of Thunder"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Druid-200").GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.GetAttackModel().AddWeapon(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class DoubleShot : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.DoubleShotUpgradeIcon2; - public override string WeaponName => "Double Shot"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-300").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class WallOfFire : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.WallOfFireUpgradeIcon; - public override string WeaponName => "Wall Of Fire"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-020").GetAttackModel(2).Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class AirburstDarts : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.AirburstDartsUpgradeIcon; - public override string WeaponName => "Airburst Darts"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("MonkeySub-022").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class HotShot : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.HotShotUpgradeIcon; - public override string WeaponName => "Hot Shot"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-020").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - wpn.GetBehavior().additionalRotation = 0; - wpn.weapons[0].emission.RemoveBehavior(); - wpn.weapons[0].ejectX = 0; - wpn.weapons[0].ejectY = 0; - wpn.weapons[0].ejectX = 0; - wpn.weapons[1].ejectX = 0; - wpn.weapons[1].ejectY = 0; - wpn.weapons[1].ejectX = 0; - wpn.weapons[2].ejectX = 0; - wpn.weapons[2].ejectY = 0; - wpn.weapons[2].ejectX = 0; - wpn.weapons[2].emission.RemoveBehavior(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class LargeCalibre : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.LongCalibreUpgradeIcon; - public override string WeaponName => "Large Calibre"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-202").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Churchill : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.CaptainChurchillIcon; - public override string WeaponName => "Churchill"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("CaptainChurchill").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Adora : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.AdoraIcon; - public override string WeaponName => "Adora"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Adora").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Etienne : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.EtienneIcon; - public override string WeaponName => "Etienne"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Etienne").GetBehavior().Duplicate(); - wpn.count = 2; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Psi : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.PsiIcon; - public override string WeaponName => "Psi"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Psi").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class TripleShot : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.TripleShotUpgradeIcon; - public override string WeaponName => "Triple Shot"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-032").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BurnyStuff : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string WeaponName => "Burny Stuff"; - public override string Icon => VanillaSprites.BurnyStuffUpgradeIcon; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-022").GetAttackModel().Duplicate(); - wpn.RemoveBehaviors(); - wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); - wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); - wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); - wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class LotsMoreDarts : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string WeaponName => "Lots More Darts"; - public override string Icon => VanillaSprites.LotsMoreDartsUpgradeIcon; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce-220").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-220").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.AddBehavior(wpn); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); + public class SuperMonkey : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.EpicRangeUpgradeIcon; + public override string WeaponName => "Super Monkey"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SuperMonkey").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class HotRang : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.RedHotRangsUpgradeIcon; + public override string WeaponName => "Hot Rang"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey-002").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Crossbow : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.CrossBowUpgradeIcon; + public override string WeaponName => "Crossbow"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-003").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Cluster : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.ClusterBombsUpgradeIcon; + public override string WeaponName => "Cluster"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BombShooter-003").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class WhiteHotSpikes : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.WhiteHotSpikesUpgradeIcon; + public override string WeaponName => "White Hot Spikes"; + public override bool IsCamo => true; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SpikeFactory-220").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class GreaterProduction : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.GreaterProductionUpgradeIcon; + public override string WeaponName => "Greater Production"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BananaFarm-200").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class HeartOfThunder : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.HeartofThunderUpgradeIcon; + public override string WeaponName => "Heart Of Thunder"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Druid-200").GetAttackModel().weapons.First(w => w.name == "WeaponModel_Lightning").Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.GetAttackModel().AddWeapon(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class DoubleShot : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.DoubleShotUpgradeIcon2; + public override string WeaponName => "Double Shot"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("NinjaMonkey-300").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class WallOfFire : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.WallOfFireUpgradeIcon; + public override string WeaponName => "Wall Of Fire"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("WizardMonkey-020").GetAttackModel(2).Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class AirburstDarts : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.AirburstDartsUpgradeIcon; + public override string WeaponName => "Airburst Darts"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("MonkeySub-022").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class HotShot : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.HotShotUpgradeIcon; + public override string WeaponName => "Hot Shot"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("MonkeyBuccaneer-020").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + wpn.GetBehavior().additionalRotation = 0; + wpn.weapons[0].emission.RemoveBehavior(); + wpn.weapons[0].ejectX = 0; + wpn.weapons[0].ejectY = 0; + wpn.weapons[0].ejectX = 0; + wpn.weapons[1].ejectX = 0; + wpn.weapons[1].ejectY = 0; + wpn.weapons[1].ejectX = 0; + wpn.weapons[2].ejectX = 0; + wpn.weapons[2].ejectY = 0; + wpn.weapons[2].ejectX = 0; + wpn.weapons[2].emission.RemoveBehavior(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class LargeCalibre : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.LongCalibreUpgradeIcon; + public override string WeaponName => "Large Calibre"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("SniperMonkey-202").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Churchill : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.CaptainChurchillIcon; + public override string WeaponName => "Churchill"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("CaptainChurchill").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Adora : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.AdoraIcon; + public override string WeaponName => "Adora"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Adora").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Etienne : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.EtienneIcon; + public override string WeaponName => "Etienne"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Etienne").GetBehavior().Duplicate(); + wpn.count = 2; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Psi : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.PsiIcon; + public override string WeaponName => "Psi"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Psi").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class TripleShot : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.TripleShotUpgradeIcon; + public override string WeaponName => "Triple Shot"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-032").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BurnyStuff : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string WeaponName => "Burny Stuff"; + public override string Icon => VanillaSprites.BurnyStuffUpgradeIcon; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("MortarMonkey-022").GetAttackModel().Duplicate(); + wpn.RemoveBehaviors(); + wpn.AddBehavior(new TargetStrongModel("targetstrong", false, false)); + wpn.AddBehavior(new TargetCloseModel("targetclose", false, false)); + wpn.AddBehavior(new TargetFirstModel("targetfirst", false, false)); + wpn.AddBehavior(new TargetLastModel("targetlast", false, false)); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class LotsMoreDarts : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string WeaponName => "Lots More Darts"; + public override string Icon => VanillaSprites.LotsMoreDartsUpgradeIcon; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce-220").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce-220").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.AddBehavior(wpn); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); + + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class QuadDarts : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string WeaponName => "Quad Darts"; + public override string Icon => VanillaSprites.QuadDartsUpgradeIcon; + public override void EditTower(Tower tower) + { + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var heli = Game.instance.model.GetTowerFromId("HeliPilot-100").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("HeliPilot-100").GetBehavior().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + heli.AddBehavior(wpn); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(heli); - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class QuadDarts : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string WeaponName => "Quad Darts"; - public override string Icon => VanillaSprites.QuadDartsUpgradeIcon; - public override void EditTower(Tower tower) - { - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var heli = Game.instance.model.GetTowerFromId("HeliPilot-100").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("HeliPilot-100").GetBehavior().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - heli.AddBehavior(wpn); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(heli); + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class FasterBarrelSpin : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.FasterBarrelSpinUpgradeIcon; + public override string WeaponName => "Faster Barrel Spin"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-220").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class FasterEngineering : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.FasterEngineeringUpgradeIcon; + public override string WeaponName => "Faster Engineering"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class MissileLauncher : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.MissileLauncherUpgradeIcon; + public override string WeaponName => "Missile Launcher"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("BombShooter-220").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BladeShooter : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.BladeShooterUpgradeIcon; + public override string WeaponName => "Blade Shooter"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("TackShooter-230").GetAttackModel().Duplicate(); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Obyn : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.ObynGreenFootIcon; + public override string WeaponName => "Obyn"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("ObynGreenfoot").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Gwendolin : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.GwendolinIcon; + public override string WeaponName => "Gwendolin"; + public override bool IsLead => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Gwendolin").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Sauda : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.SaudaIcon; + public override string WeaponName => "Sauda"; + public override bool IsCamo => true; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("Sauda").GetAttackModel().Duplicate(); + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Chakrams : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.BladeShooterUpgradeIcon; + public override string WeaponName => "Chakrams"; + public override bool IsCamo => true; + public override Sprite CustomIcon => GetSprite("ChakramIcon"); + public override string Description => "Boomerang 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); + bleed.name = "BleedModel"; + bleed.GetBehavior().interval = 1f; - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class FasterBarrelSpin : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.FasterBarrelSpinUpgradeIcon; - public override string WeaponName => "Faster Barrel Spin"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-220").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class FasterEngineering : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.FasterEngineeringUpgradeIcon; - public override string WeaponName => "Faster Engineering"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey-200").GetAttackModel(1).Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class MissileLauncher : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.MissileLauncherUpgradeIcon; - public override string WeaponName => "Missile Launcher"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("BombShooter-220").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BladeShooter : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.BladeShooterUpgradeIcon; - public override string WeaponName => "Blade Shooter"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("TackShooter-230").GetAttackModel().Duplicate(); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Obyn : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.ObynGreenFootIcon; - public override string WeaponName => "Obyn"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("ObynGreenfoot").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Gwendolin : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.GwendolinIcon; - public override string WeaponName => "Gwendolin"; - public override bool IsLead => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Gwendolin").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Sauda : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.SaudaIcon; - public override string WeaponName => "Sauda"; - public override bool IsCamo => true; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("Sauda").GetAttackModel().Duplicate(); - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Chakrams : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.BladeShooterUpgradeIcon; - public override string WeaponName => "Chakrams"; - public override bool IsCamo => true; - public override Sprite CustomIcon => GetSprite("ChakramIcon"); - public override string Description => "Boomerang 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var bleed = Game.instance.model.GetTowerFromId("Sauda 9").GetAttackModel().weapons[0].projectile.GetBehavior().Duplicate(); - bleed.name = "BleedModel"; - bleed.GetBehavior().interval = 1f; + var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(bleed); + wpn.weapons[0].projectile.GetDescendants().ForEach(model => model.isActive = false); + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Camo", 1, 1, false, false) { name = "CamoModifier_" }); + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.weapons[0].projectile.GetBehavior().Speed *= 2f; + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class Frostbite : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.ShrapnelShotUpgradeIcon; + public override string WeaponName => "Frostbite"; + public override Sprite CustomIcon => GetSprite("FrostbiteIcon"); + public override string Description => "Ice Monkey 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.Lead | BloonProperties.White; + wpn.weapons[0].projectile.scale /= 1.25f; + wpn.weapons[0].rate /= 1.2f; + wpn.weapons[0].projectile.GetDamageModel().damage += 1; + wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); + wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; + wpn.range = tower.towerModel.range; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class CrackShotDarts : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.AirburstDartsUpgradeIcon; + public override string WeaponName => "Crack Shot Darts"; + public override Sprite CustomIcon => GetSprite("CrackShotIcon"); + public override string Description => "Monkey Ace 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var bomb = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); + var effect = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); + var dart = Game.instance.model.GetTower(TowerType.DartMonkey).GetWeapon().projectile.Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("BoomerangMonkey").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.collisionPasses = new[] { -1, 0, 1 }; - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(bleed); - wpn.weapons[0].projectile.GetDescendants().ForEach(model => model.isActive = false); - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Camo", 1, 1, false, false) { name = "CamoModifier_" }); - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.weapons[0].projectile.GetBehavior().Speed *= 2f; - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class Frostbite : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.ShrapnelShotUpgradeIcon; - public override string WeaponName => "Frostbite"; - public override Sprite CustomIcon => GetSprite("FrostbiteIcon"); - public override string Description => "Ice Monkey 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.IceMonkey, 0, 0, 5).GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.Lead | BloonProperties.White; - wpn.weapons[0].projectile.scale /= 1.25f; - wpn.weapons[0].rate /= 1.2f; - wpn.weapons[0].projectile.GetDamageModel().damage += 1; - wpn.weapons[0].projectile.AddBehavior(new FreezeModel("FreezeModel_", 0, 1f, "ShardFreeze", 1, "Ice", true, new GrowBlockModel("GrowBlockModel_"), null, 0, false, false)); - wpn.weapons[0].projectile.collisionPasses = new int[] { 0, -1 }; - wpn.range = tower.towerModel.range; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class CrackShotDarts : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.AirburstDartsUpgradeIcon; - public override string WeaponName => "Crack Shot Darts"; - public override Sprite CustomIcon => GetSprite("CrackShotIcon"); - public override string Description => "Monkey Ace 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var bomb = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); - var effect = Game.instance.model.GetTower(TowerType.BombShooter).GetWeapon().projectile.GetBehavior().Duplicate(); - var dart = Game.instance.model.GetTower(TowerType.DartMonkey).GetWeapon().projectile.Duplicate(); + var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); + var ace = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); + var wpn = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); + wpn.weapons[0].projectile.AddBehavior(bomb); + wpn.weapons[0].projectile.AddBehavior(effect); + wpn.weapons[0].projectile.pierce = 1; + wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("Crackshot", dart, new ArcEmissionModel("ArcEmissionModel_", 3, 0, 25, null, true, false), true, false, false)); + var towerModel = tower.rootModel.Duplicate().Cast(); + ace.AddBehavior(wpn); + phoenix.towerModel.ApplyDisplay(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.RemoveBehavior(); + phoenix.towerModel.AddBehavior(ace); - var phoenix = Game.instance.model.GetTowerFromId("WizardMonkey-050").GetBehavior().Duplicate(); - var ace = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); - var wpn = Game.instance.model.GetTowerFromId("MonkeyAce").GetBehavior().Duplicate(); - wpn.weapons[0].projectile.AddBehavior(bomb); - wpn.weapons[0].projectile.AddBehavior(effect); - wpn.weapons[0].projectile.pierce = 1; - wpn.weapons[0].projectile.AddBehavior(new CreateProjectileOnContactModel("Crackshot", dart, new ArcEmissionModel("ArcEmissionModel_", 3, 0, 25, null, true, false), true, false, false)); - var towerModel = tower.rootModel.Duplicate().Cast(); - ace.AddBehavior(wpn); - phoenix.towerModel.ApplyDisplay(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.RemoveBehavior(); - phoenix.towerModel.AddBehavior(ace); + towerModel.AddBehavior(phoenix); + tower.UpdateRootModel(towerModel); + } + } + public class HighGradeDarts : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.ArmorPiercingDartsUpgradeIcon; + public override string WeaponName => "High-Grade Darts"; + public override Sprite CustomIcon => GetSprite("HighGradeDartsIcon"); + public override string Description => "Dartling 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-100").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 6, 12, 100, false, null, 0, null, 1)); + wpn.weapons[0].projectile.GetDamageModel().damage += 1; + var towerModel = tower.rootModel.Duplicate().Cast(); + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SaiToss : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.VeryQuickShotsUpgradeIcon; + public override string WeaponName => "Sai Toss"; + public override bool IsCamo => true; + public override Sprite CustomIcon => GetSprite("SaiTossIcon"); + public override string Description => "Ninja 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.GetDamageModel().damage = 3; + wpn.weapons[0].projectile.pierce = 4; + wpn.weapons[0].rate = Game.instance.model.GetTowerFromId("NinjaMonkey-200").GetAttackModel().weapons[0].rate * 3f; + wpn.weapons[0].projectile.ApplyDisplay(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class SeaHeart : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.BarracudaUpgradeIcon; + public override string WeaponName => "Heart of the Sea"; + public override bool IsLead => true; + public override Sprite CustomIcon => GetSprite("HeartofSeaIcon"); + public override string Description => "Druid 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BeastHandler, 2).GetBehavior().towerModel.GetAttackModel().weapons[0].projectile.display; + wpn.weapons[0].projectile.GetBehavior().Lifespan *= 3; + wpn.weapons[0].projectile.GetBehavior().Speed /= 2.5f; + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].projectile.GetDamageModel().damage = 3; + wpn.weapons[0].projectile.pierce = 99; + wpn.weapons[0].rate = 3; + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } + public class BananaStock : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.EzCollectUpgradeIcon; + public override string WeaponName => "Banana Stock"; + public override Sprite CustomIcon => GetSprite("BananaStockIcon"); + public override string Description => "Farm 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var towerModel = tower.rootModel.Duplicate().Cast(); + var cash = Game.instance.model.GetTower(TowerType.BananaFarm, 0, 0, 5).GetBehavior().Duplicate(); + cash.cashPerRound = 50; + cash.cashRoundBonusMultiplier = 5; - towerModel.AddBehavior(phoenix); - tower.UpdateRootModel(towerModel); - } - } - public class HighGradeDarts : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.ArmorPiercingDartsUpgradeIcon; - public override string WeaponName => "High-Grade Darts"; - public override Sprite CustomIcon => GetSprite("HighGradeDartsIcon"); - public override string Description => "Dartling 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("DartlingGunner-100").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.AddBehavior(new WindModel("WindModel_", 6, 12, 100, false, null, 0, null, 1)); - wpn.weapons[0].projectile.GetDamageModel().damage += 1; - var towerModel = tower.rootModel.Duplicate().Cast(); - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SaiToss : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.VeryQuickShotsUpgradeIcon; - public override string WeaponName => "Sai Toss"; - public override bool IsCamo => true; - public override Sprite CustomIcon => GetSprite("SaiTossIcon"); - public override string Description => "Ninja 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey-002").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.GetDamageModel().damage = 3; - wpn.weapons[0].projectile.pierce = 4; - wpn.weapons[0].rate = Game.instance.model.GetTowerFromId("NinjaMonkey-200").GetAttackModel().weapons[0].rate * 3f; - wpn.weapons[0].projectile.ApplyDisplay(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class SeaHeart : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.BarracudaUpgradeIcon; - public override string WeaponName => "Heart of the Sea"; - public override bool IsLead => true; - public override Sprite CustomIcon => GetSprite("HeartofSeaIcon"); - public override string Description => "Druid 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var wpn = Game.instance.model.GetTowerFromId("DartMonkey").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.display = Game.instance.model.GetTower(TowerType.BeastHandler, 2).GetBehavior().towerModel.GetAttackModel().weapons[0].projectile.display; - wpn.weapons[0].projectile.GetBehavior().Lifespan *= 3; - wpn.weapons[0].projectile.GetBehavior().Speed /= 2.5f; - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].projectile.GetDamageModel().damage = 3; - wpn.weapons[0].projectile.pierce = 99; - wpn.weapons[0].rate = 3; - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - public class BananaStock : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.EzCollectUpgradeIcon; - public override string WeaponName => "Banana Stock"; - public override Sprite CustomIcon => GetSprite("BananaStockIcon"); - public override string Description => "Farm 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var towerModel = tower.rootModel.Duplicate().Cast(); - var cash = Game.instance.model.GetTower(TowerType.BananaFarm, 0, 0, 5).GetBehavior().Duplicate(); - cash.cashPerRound = 50; - cash.cashRoundBonusMultiplier = 5; + towerModel.AddBehavior(cash); + tower.UpdateRootModel(towerModel); + } + } + public class BurstFire : WeaponTemplate + { + public override int SandboxIndex => 2; + public override Rarity WeaponRarity => Rarity.Rare; + public override string Icon => VanillaSprites.EvenMoreTacksUpgradeIcon; + public override string WeaponName => "Burst Fire"; + public override bool IsLead => true; + public override Sprite CustomIcon => GetSprite("BurstFireIcon"); + public override string Description => "Engineer 4th path by LynxC"; + public override void EditTower(Tower tower) + { + var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey").GetAttackModel().Duplicate(); + wpn.weapons[0].projectile.hasDamageModifiers = true; + wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 3, false, false) { name = "CeramicModifier_" }); + wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; + wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 3, 0, 25, null, false, false); + var towerModel = tower.rootModel.Duplicate().Cast(); + wpn.range = tower.towerModel.range; + towerModel.AddBehavior(wpn); + tower.UpdateRootModel(towerModel); + } + } - towerModel.AddBehavior(cash); - tower.UpdateRootModel(towerModel); - } - } - public class BurstFire : WeaponTemplate - { - public override int SandboxIndex => 2; - public override Rarity WeaponRarity => Rarity.Rare; - public override string Icon => VanillaSprites.EvenMoreTacksUpgradeIcon; - public override string WeaponName => "Burst Fire"; - public override bool IsLead => true; - public override Sprite CustomIcon => GetSprite("BurstFireIcon"); - public override string Description => "Engineer 4th path by LynxC"; - public override void EditTower(Tower tower) - { - var wpn = Game.instance.model.GetTowerFromId("EngineerMonkey").GetAttackModel().Duplicate(); - wpn.weapons[0].projectile.hasDamageModifiers = true; - wpn.weapons[0].projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 3, false, false) { name = "CeramicModifier_" }); - wpn.weapons[0].projectile.GetDamageModel().immuneBloonProperties = BloonProperties.None; - wpn.weapons[0].emission = new ArcEmissionModel("ArcEmissionModel_", 3, 0, 25, null, false, false); - var towerModel = tower.rootModel.Duplicate().Cast(); - wpn.range = tower.towerModel.range; - towerModel.AddBehavior(wpn); - tower.UpdateRootModel(towerModel); - } - } - - public class Rare - { - public static List RareWpn = new List(); - public static List RareImg = new List(); - public static List RareCustomImg = new List(); - } + public class Rare + { + public static List RareWpn = new List(); + public static List RareImg = new List(); + public static List RareCustomImg = new List(); + } } diff --git a/Weapons-Ability/WeaponTemplate.cs b/Weapons-Ability/WeaponTemplate.cs index 71bbdb0..fc00688 100644 --- a/Weapons-Ability/WeaponTemplate.cs +++ b/Weapons-Ability/WeaponTemplate.cs @@ -1,39 +1,39 @@ -using System; +using BTD_Mod_Helper.Api; +using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; +using Il2CppAssets.Scripts.Simulation.Towers; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using BTD_Mod_Helper.Api; -using Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack; -using Il2CppAssets.Scripts.Simulation.Towers; using UnityEngine; namespace AncientMonkey { - - public abstract class WeaponTemplate : ModContent - { - public override void Register(){} - public abstract int SandboxIndex { get; } - public abstract Rarity WeaponRarity { get; } - public abstract string WeaponName { get; } - public abstract string Icon { get; } - public abstract void EditTower(Tower tower); - public enum Rarity - { - Common, - Rare, - Epic, - Legendary, - Exotic, - Godly, - Omega, - } - public float stackIndex = 0; - public virtual bool IsCamo { get; } - public virtual bool IsLead { get; } - public virtual string Description { get; } - public virtual Sprite CustomIcon { get; } - } + public abstract class WeaponTemplate : ModContent + { + public override void Register() { } + public abstract int SandboxIndex { get; } + public abstract Rarity WeaponRarity { get; } + public abstract string WeaponName { get; } + public abstract string Icon { get; } + public abstract void EditTower(Tower tower); + public enum Rarity + { + Common, + Rare, + Epic, + Legendary, + Exotic, + Godly, + Omega, + } + public float stackIndex = 0; + public virtual bool IsCamo { get; } + public virtual bool IsLead { get; } + public virtual string Description { get; } + public virtual Sprite CustomIcon { get; } + + } } From 5d8528515ccf4276c96c2a1ab9b1ca0b3e9c89a3 Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Sun, 23 Jun 2024 21:00:58 +0200 Subject: [PATCH 4/4] fixup the version field --- ModHelperData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ModHelperData.cs b/ModHelperData.cs index 610959e..0cc6a25 100644 --- a/ModHelperData.cs +++ b/ModHelperData.cs @@ -3,7 +3,7 @@ namespace AncientMonkey; public static class ModHelperData { public const string WorksOnVersion = "42.0"; - public const string Version = "4.0.0"; + public const string Version = "4.1.0"; public const string Name = "AncientMonkey"; public const string Description = "Add the Ancient Monkey to Bloons TD6";