Skip to content

Commit

Permalink
Fix for BTD6 v45
Browse files Browse the repository at this point in the history
  • Loading branch information
doombubbles committed Oct 9, 2024
1 parent 88a2a76 commit 6c8ca86
Show file tree
Hide file tree
Showing 53 changed files with 1,411 additions and 1,202 deletions.
Binary file modified Bytes/Alchemists.bytes
Binary file not shown.
Binary file modified Bytes/BananaFarms.bytes
Binary file not shown.
Binary file modified Bytes/BeastHandlers.bytes
Binary file not shown.
Binary file modified Bytes/BombShooters.bytes
Binary file not shown.
Binary file modified Bytes/BoomerangMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/DartMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/DartlingGunners.bytes
Binary file not shown.
Binary file modified Bytes/Druids.bytes
Binary file not shown.
Binary file modified Bytes/EngineerMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/GlueGunners.bytes
Binary file not shown.
Binary file modified Bytes/HeliPilots.bytes
Binary file not shown.
Binary file modified Bytes/IceMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/Mermonkeys.bytes
Binary file not shown.
Binary file modified Bytes/MonkeyAces.bytes
Binary file not shown.
Binary file modified Bytes/MonkeyBuccaneers.bytes
Binary file not shown.
Binary file modified Bytes/MonkeySubs.bytes
Binary file not shown.
Binary file modified Bytes/MonkeyVillages.bytes
Binary file not shown.
Binary file modified Bytes/MortarMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/NinjaMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/SniperMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/SpikeFactorys.bytes
Binary file not shown.
Binary file modified Bytes/SuperMonkeys.bytes
Binary file not shown.
Binary file modified Bytes/TackShooters.bytes
Binary file not shown.
Binary file modified Bytes/WizardMonkeys.bytes
Binary file not shown.
27 changes: 27 additions & 0 deletions Commands.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System;
using BTD_Mod_Helper.Api.Commands;

namespace UltimateCrosspathing;

#if DEBUG
internal class ExportTowerBytesCommands : ModCommand<ExportCommand>
{
public override string Command => "uc";
public override string Help => "Export Ultimate Crosspathing tower bytes";

public override bool Execute(ref string resultText)
{
try
{
LoadInfo.ExportTowers();
}
catch (Exception e)
{
ModHelper.Error<UltimateCrosspathingMod>(e);
}

return true;
}

}
#endif
3 changes: 1 addition & 2 deletions LATEST.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
## See the [BTD Mod Helper Install Guide](https://gurrenm3.github.io/BTD-Mod-Helper/wiki/Install-Guide) if this is your first time downloading, and the [Common Issues](https://github.com/doombubbles/ultimate-crosspathing/blob/1.4.5/HELP.md#common-issues) page for help
<!--Mod Browser Message Start-->
- Updated for BTD6 v44.0
- Includes full crosspathing for the new Mermonkey!
- Fixed for BTD6 v45
100 changes: 53 additions & 47 deletions Loaders/AlchemistLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,17 @@ private void Create_Records<T>() where T : Il2CppObjectBase {

#region Link object records

private void Set_v_EntityModel_Fields(int start, int count) {
Set_v_Model_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Entities.EntityModel)m[i+start];
v.baseId = br.ReadBoolean() ? null : br.ReadString();
v.display = ModContent.CreatePrefabReference(br.ReadString());
v.behaviors = (Il2CppReferenceArray<Il2CppAssets.Scripts.Models.Model>) m[br.ReadInt32()];
v.radius = br.ReadSingle();
}
}

private void Set_v_Model_Fields(int start, int count) {
var t = Il2CppType.Of<Il2CppAssets.Scripts.Models.Model>();
var _nameField = t.GetField("_name", bindFlags);
Expand All @@ -192,27 +203,23 @@ private void Set_v_Model_Fields(int start, int count) {
}

private void Set_v_TowerModel_Fields(int start, int count) {
Set_v_Model_Fields(start, count);
Set_v_EntityModel_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.TowerModel)m[i+start];
v.display = ModContent.CreatePrefabReference(br.ReadString());
v.baseId = br.ReadBoolean() ? null : br.ReadString();
v.cost = br.ReadSingle();
v.radius = br.ReadSingle();
v.radiusSquared = br.ReadSingle();
v.range = br.ReadSingle();
v.ignoreBlockers = br.ReadBoolean();
v.isGlobalRange = br.ReadBoolean();
v.tier = br.ReadInt32();
v.tiers = (Il2CppStructArray<int>) m[br.ReadInt32()];
v.towerSet = (Il2CppAssets.Scripts.Models.TowerSets.TowerSet) (br.ReadInt32());
v.icon = ModContent.CreateSpriteReference(br.ReadString());
v.icon3D = ModContent.CreatePrefabReference(br.ReadString());
v.portrait = ModContent.CreateSpriteReference(br.ReadString());
v.instaIcon = ModContent.CreateSpriteReference(br.ReadString());
v.areaTypes = (Il2CppAssets.Scripts.Models.Map.AreaType[]) m[br.ReadInt32()];
v.mods = (Il2CppReferenceArray<Il2CppAssets.Scripts.Models.Towers.Mods.ApplyModModel>) m[br.ReadInt32()];
v.ignoreTowerForSelection = br.ReadBoolean();
v.behaviors = (Il2CppReferenceArray<Il2CppAssets.Scripts.Models.Model>) m[br.ReadInt32()];
v.footprint = (Il2CppAssets.Scripts.Models.Towers.Behaviors.FootprintModel) m[br.ReadInt32()];
v.dontDisplayUpgrades = br.ReadBoolean();
v.emoteSpriteSmall = ModContent.CreateSpriteReference(br.ReadString());
Expand All @@ -239,9 +246,9 @@ private void Set_v_TowerModel_Fields(int start, int count) {
v.sellbackModifierAdd = br.ReadSingle();
v.skinName = br.ReadBoolean() ? null : br.ReadString();
v.dontAddMutatorsFromParent = br.ReadBoolean();
v.displayScale = br.ReadSingle();
v.showBuffs = br.ReadBoolean();
v.destroyTowerOnRedistribution = br.ReadBoolean();
v.displayScale = br.ReadSingle();
}
}

Expand All @@ -254,6 +261,16 @@ private void Set_v_ApplyModModel_Fields(int start, int count) {
}
}

private void Set_v_FootprintModel_Fields(int start, int count) {
Set_v_TowerBehaviorModel_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.Behaviors.FootprintModel)m[i+start];
v.doesntBlockTowerPlacement = br.ReadBoolean();
v.ignoresPlacementCheck = br.ReadBoolean();
v.ignoresTowerOverlap = br.ReadBoolean();
}
}

private void Set_v_TowerBehaviorModel_Fields(int start, int count) {
Set_v_EntityBehaviorModel_Fields(start, count);
for (var i=0; i<count; i++) {
Expand All @@ -268,6 +285,23 @@ private void Set_v_EntityBehaviorModel_Fields(int start, int count) {
}
}

private void Set_v_CircleFootprintModel_Fields(int start, int count) {
Set_v_FootprintModel_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.Behaviors.CircleFootprintModel)m[i+start];
v.radius = br.ReadSingle();
}
}

private void Set_v_UpgradePathModel_Fields(int start, int count) {
Set_v_Model_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel)m[i+start];
v.tower = br.ReadBoolean() ? null : br.ReadString();
v.upgrade = br.ReadBoolean() ? null : br.ReadString();
}
}

private void Set_v_CreateEffectOnPlaceModel_Fields(int start, int count) {
Set_v_TowerBehaviorModel_Fields(start, count);
for (var i=0; i<count; i++) {
Expand Down Expand Up @@ -338,7 +372,7 @@ private void Set_v_SoundModel_Fields(int start, int count) {
Set_v_Model_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Audio.SoundModel)m[i+start];
v.assetId = ModContent.CreateAudioSourceReference(br.ReadString());
v.assetId = ModContent.CreateAudioClipReference(br.ReadString());
}
}

Expand Down Expand Up @@ -490,11 +524,12 @@ private void Set_v_ProjectileModel_Fields(int start, int count) {
v.ignoreNonTargetable = br.ReadBoolean();
v.ignorePierceExhaustion = br.ReadBoolean();
v.saveId = br.ReadBoolean() ? null : br.ReadString();
v.displayModel = (Il2CppAssets.Scripts.Models.GenericBehaviors.DisplayModel) m[br.ReadInt32()];
}
}

private void Set_v_ProjectileBehaviorModel_Fields(int start, int count) {
Set_v_Model_Fields(start, count);
Set_v_EntityBehaviorModel_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.Projectiles.ProjectileBehaviorModel)m[i+start];
v.collisionPass = br.ReadInt32();
Expand Down Expand Up @@ -937,35 +972,6 @@ private void Set_v_CollideExtraPierceReductionModel_Fields(int start, int count)
}
}

private void Set_v_FootprintModel_Fields(int start, int count) {
Set_v_TowerBehaviorModel_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.Behaviors.FootprintModel)m[i+start];
v.doesntBlockTowerPlacement = br.ReadBoolean();
v.ignoresPlacementCheck = br.ReadBoolean();
v.ignoresTowerOverlap = br.ReadBoolean();
}
}

private void Set_v_CircleFootprintModel_Fields(int start, int count) {
Set_v_FootprintModel_Fields(start, count);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.Behaviors.CircleFootprintModel)m[i+start];
v.radius = br.ReadSingle();
}
}

private void Set_v_UpgradePathModel_Fields(int start, int count) {
var t = Il2CppType.Of<Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel>();
var towerField = t.GetField("tower", bindFlags);
var upgradeField = t.GetField("upgrade", bindFlags);
for (var i=0; i<count; i++) {
var v = (Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel)m[i+start];
towerField.SetValue(v,br.ReadBoolean() ? null : br.ReadString());
upgradeField.SetValue(v,br.ReadBoolean() ? null : br.ReadString());
}
}

private void Set_v_FilterOutTagModel_Fields(int start, int count) {
Set_v_FilterModel_Fields(start, count);
for (var i=0; i<count; i++) {
Expand Down Expand Up @@ -1317,19 +1323,19 @@ protected override Il2CppAssets.Scripts.Models.Towers.TowerModel Load(byte[] byt
m = new object[totalCount];

//## Step 1: create empty collections
Read_a_AreaType_Array();
CreateArraySet<Il2CppAssets.Scripts.Models.Model>();
Read_a_Int32_Array();
Read_a_AreaType_Array();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Mods.ApplyModModel>();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel>();
Read_a_String_Array();
Read_a_TargetType_Array();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Weapons.WeaponModel>();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.EmissionBehaviorModel>();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Filters.FilterModel>();
CreateArraySet<Il2CppAssets.Scripts.Models.Bloons.BloonBehaviorModel>();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Projectiles.DamageModifierModel>();
Read_a_String_Array();
Read_a_Single_Array();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel>();
Read_a_TargetType_Array();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.AttackModel>();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.Weapons.WeaponBehaviorModel>();
CreateArraySet<Il2CppAssets.Scripts.Models.Towers.TowerBehaviorModel>();
Expand All @@ -1340,6 +1346,8 @@ protected override Il2CppAssets.Scripts.Models.Towers.TowerModel Load(byte[] byt
//## Step 2: create empty objects
Create_Records<Il2CppAssets.Scripts.Models.Towers.TowerModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Mods.ApplyModModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Behaviors.CircleFootprintModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Behaviors.CreateEffectOnPlaceModel>();
Create_Records<Il2CppAssets.Scripts.Models.Effects.EffectModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Behaviors.CanBuffIndicatorModel>();
Expand Down Expand Up @@ -1387,8 +1395,6 @@ protected override Il2CppAssets.Scripts.Models.Towers.TowerModel Load(byte[] byt
Create_Records<Il2CppAssets.Scripts.Models.Bloons.Behaviors.UnstableConcoctionSplashModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors.DamageModifierUnstableConcoctionModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors.CollideExtraPierceReductionModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Behaviors.CircleFootprintModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Filters.FilterOutTagModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors.CreateSoundOnProjectileExhaustModel>();
Create_Records<Il2CppAssets.Scripts.Models.Towers.Projectiles.Behaviors.MorphBloonModel>();
Expand Down Expand Up @@ -1417,6 +1423,8 @@ protected override Il2CppAssets.Scripts.Models.Towers.TowerModel Load(byte[] byt

Set_v_TowerModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_ApplyModModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_CircleFootprintModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_UpgradePathModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_CreateEffectOnPlaceModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_EffectModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_CanBuffIndicatorModel_Fields(br.ReadInt32(), br.ReadInt32());
Expand Down Expand Up @@ -1464,8 +1472,6 @@ protected override Il2CppAssets.Scripts.Models.Towers.TowerModel Load(byte[] byt
Set_v_UnstableConcoctionSplashModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_DamageModifierUnstableConcoctionModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_CollideExtraPierceReductionModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_CircleFootprintModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_UpgradePathModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_FilterOutTagModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_CreateSoundOnProjectileExhaustModel_Fields(br.ReadInt32(), br.ReadInt32());
Set_v_MorphBloonModel_Fields(br.ReadInt32(), br.ReadInt32());
Expand Down Expand Up @@ -1495,12 +1501,12 @@ protected override Il2CppAssets.Scripts.Models.Towers.TowerModel Load(byte[] byt
//## Step 4: link object collections e.g Product[]. Note: requires object data e.g dictionary<string, value> where string = model.name
LinkArray<Il2CppAssets.Scripts.Models.Model>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Mods.ApplyModModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Weapons.WeaponModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Behaviors.Emissions.EmissionBehaviorModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Filters.FilterModel>();
LinkArray<Il2CppAssets.Scripts.Models.Bloons.BloonBehaviorModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Projectiles.DamageModifierModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Upgrades.UpgradePathModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Behaviors.Attack.AttackModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.Weapons.WeaponBehaviorModel>();
LinkArray<Il2CppAssets.Scripts.Models.Towers.TowerBehaviorModel>();
Expand Down
Loading

0 comments on commit 6c8ca86

Please sign in to comment.