v2.9.7 Release Commit...

* Added Ammonomicon entries for most custom enemies and bosses. Sprite
work thanks to Lynceus!
* Added new Tree objects to ExpandFloorDecorator for Jungle floor.
Modified sprites courtasy of NeverNamed!
* Improved code in ExpandFloorDecorator for finding valid spawn
locations for objects.
* Bonus chest room on Jungle now has unique room design.
This commit is contained in:
ApacheThunder 2023-04-18 15:05:39 -05:00
parent acd2f9fd98
commit a27eca3ee3
90 changed files with 2706 additions and 953 deletions

View File

@ -1,5 +1,5 @@
ManifestFileVersion: 0
CRC: 3602897831
CRC: 177801858
AssetBundleManifest:
AssetBundleInfos:
Info_0:

View File

@ -1,12 +1,12 @@
ManifestFileVersion: 0
CRC: 3937097182
CRC: 2023508650
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 48c1897f0032b2a33fbef7c72666f38d
Hash: 75a0642d52778f3f56fd3e7d286054b8
TypeTreeHash:
serializedVersion: 2
Hash: 2241b0dac22d22b9de2222ad79842819
Hash: f4241535d4e8d4e11acb786dda0ad105
HashAppended: 0
ClassTypes:
- Class: 1
@ -33,6 +33,8 @@ ClassTypes:
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 77e01a6014b97064fa53925969f884ae, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: dcb4fda0513fcf24a93207e0ed520ae2, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 85a95b2198074e1459671337ed25c270, type: 3}
- Class: 114
@ -49,6 +51,8 @@ ClassTypes:
Script: {fileID: 11500000, guid: 0159916ecce839b46a8148e75dacab83, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1492b7fe0995e1f4b861785c3d23f832, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: c59f4fb058392d745a690e85b4feba5d, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 198
@ -68,6 +72,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon1_TinyPassage1.bytes
- Assets/ExpandPrefabs/Misc/EX_Chest_West.prefab
- Assets/ExpandSerializedData/TilesetData/Nakatomi/Nakatomi_Purple/lavaGrids.txt
- Assets/ExpandTextures/AmmonomiconTextures/cronenberg_big_ammonomicon.png
- Assets/ExpandRooms/RoomFactoryData/MH_Expand_Achievement_Trickshot.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular32.bytes
- Assets/ExpandPrefabs/AIActors/EXCorruptedEnemy.prefab
@ -83,10 +88,12 @@ Assets:
- Assets/ExpandSerializedData/TilesetData/Nakatomi/Nakatomi_Blue/facewallGrids_1.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter12.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_GunFairy.bytes
- Assets/ExpandTextures/AmmonomiconTextures/skusketling_ammonomicon.png
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Animals9.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_Weird1.bytes
- Assets/ExpandPrefabs/Items/Portable Elevator.prefab
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular2.bytes
- Assets/ExpandTextures/AmmonomiconTextures/hotshotcultist_icon.png
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter10.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Jungle_Exit.bytes
- Assets/ExpandPrefabs/Misc/EXSecretRoomGlitchFX.prefab
@ -101,6 +108,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_smol1.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera5.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Mixed22.bytes
- Assets/ExpandSerializedData/AmmonomiconData/BootlegBullat_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate_CellStronghold.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Animals6.bytes
- Assets/ExpandSerializedData/TilesetData/Phobos/Phobos_Gold/carpetGrid.txt
@ -128,16 +136,19 @@ Assets:
- Assets/ExpandRooms/RoomBuilderData/Mines/Neighborino_Pit_Layout.png
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Jungle_SecretDragun.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Owl10.bytes
- Assets/ExpandTextures/AmmonomiconTextures/clownkin_ammonomicon.png
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate2.bytes
- Assets/ExpandRooms/RoomBuilderData/Mines/Neighborino_Hopscoth_Layout.png
- Assets/ExpandPrefabs/Misc/EXSpaceFloorPitBorder_50x50.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera24.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Tribal27.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Skeletal19.bytes
- Assets/ExpandSerializedData/AmmonomiconData/BootlegShotgunManRed_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Skeletal20.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Teleport1.bytes
- Assets/ExpandPrefabs/TilesetPrefabs/ExpandSarco_Pedestal.prefab
- Assets/ExpandPrefabs/AIActors/DoppelGunner/DopplegunnerHand.prefab
- Assets/ExpandTextures/AmmonomiconTextures/chameleon_ammonomicon.png
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Mixed17.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Skeletal22.bytes
- Assets/ExpandRooms/RoomBuilderData/TrapRooms/Expand_Thwomp_Crossing_Vertical_Layout.png
@ -148,6 +159,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular50.bytes
- Assets/ExpandPrefabs/Misc/BootlegRoomBorder_West.prefab
- Assets/ExpandRooms/RoomFactoryData/Expand_Undead4.bytes
- Assets/ExpandSerializedData/AmmonomiconData/ClownKin_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera7.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular4.bytes
- Assets/ExpandRooms/RoomFactoryData/M_Expand_Achievement_Rider.bytes
@ -176,6 +188,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate14.bytes
- Assets/ExpandRooms/RoomFactoryData/BulletHell/BHell_TheReunion.bytes
- Assets/ExpandRooms/RoomBuilderData/Creepy_Glitched_Room_Layout.png
- Assets/ExpandSerializedData/AmmonomiconData/Cronenberg_AmmonomiconData.txt
- Assets/ExpandPrefabs/Items/EXThirdEye.prefab
- Assets/ExpandPrefabs/AIActors/Cultist Companion.prefab
- Assets/ExpandPrefabs/Misc/EX_Trap_Apache.prefab
@ -248,8 +261,10 @@ Assets:
- Assets/ExpandRooms/RoomBuilderData/Castle/Expand_TurtleMelon_Small_Passage_1_Layout.png
- Assets/ExpandPrefabs/TilesetPrefabs/Jungle Tree Frame.prefab
- Assets/ExpandPrefabs/AIActors/HotShotCultist.prefab
- Assets/ExpandTextures/AmmonomiconTextures/cronenberg_tall_ammonomicon.png
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Squareish4.bytes
- Assets/ExpandPrefabs/Foyer/EXArcadeGameScanlineFX.prefab
- Assets/ExpandTextures/AmmonomiconTextures/bootlegbulletman_ammonomicon.png
- Assets/ExpandPrefabs/SpriteCollections/Misc/EXTrapCollection.prefab
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter18.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Mines_Regular50.bytes
@ -291,6 +306,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Connector_04.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Witch6.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Spiralbomb.bytes
- Assets/ExpandSerializedData/AmmonomiconData/WestBrosTuc_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/P_Expand_MasterRound2.bytes
- Assets/ExpandRooms/RoomFactoryData/F_Expand_Obsidian_Shell_Casing.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter13.bytes
@ -378,6 +394,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Boxes1.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed8.bytes
- Assets/ExpandRooms/RoomBuilderData/Hollow/Expand_Neighborino_IceIsNice_Layout.png
- Assets/ExpandSerializedData/AmmonomiconData/Dopplegunner_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Expand_Mines_Regular42.bytes
- Assets/ExpandRooms/RoomFactoryData/K_Expand_MasterRound1.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_BoomLine1.bytes
@ -435,6 +452,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Trap_Expand_Turtlemelon.bytes
- Assets/ExpandPrefabs/SpriteCollections/Misc/BabyGoodHammerCollection.prefab
- Assets/ExpandRooms/RoomFactoryData/MH_Expand_Achievement_Challenger.bytes
- Assets/ExpandSerializedData/AmmonomiconData/Skusketling_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera4.bytes
- Assets/ExpandPrefabs/Foyer/EXArcadeGame_Prop.prefab
- Assets/ExpandPrefabs/Misc/EX_ParadropAnchor.prefab
@ -470,6 +488,7 @@ Assets:
- Assets/ExpandSerializedData/TilesetData/Phobos/Phobos_Blue/pitBorderFlatGrid.txt
- Assets/ExpandSerializedData/TilesetData/West/RedInterior/floorGrid1.txt
- Assets/ExpandSerializedData/TilesetData/Phobos/Phobos_Gold/pitBorderFlatGrid.txt
- Assets/ExpandPrefabs/Breakables/ExpandJungleTree_Medium.prefab
- Assets/ExpandPrefabs/Misc/CronenbergCorpseFragment_03.prefab
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Witch8.bytes
- Assets/ExpandSerializedData/TilesetData/Belly/carpetGrid1.txt
@ -511,6 +530,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_ZookieShroom.bytes
- Assets/ExpandRooms/RoomFactoryData/KP_Expand_Achievement_Historian.bytes
- Assets/ExpandRooms/RoomFactoryData/K_Expand_Achievement_Hedge_Slinger.bytes
- Assets/ExpandPrefabs/Breakables/ExpandJungleTreeMedium_Stump.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Skeletal14.bytes
- Assets/ExpandRooms/RoomFactoryData/K_Expand_BigBird.bytes
- Assets/ExpandTextures/BossCards/MimicInMirror_BossCardBackground.png
@ -527,6 +547,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate_DanglyBits.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Boxes3.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_AP_West.bytes
- Assets/ExpandSerializedData/AmmonomiconData/WestBrosNome_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Animals17.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_LongOdd1.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter25.bytes
@ -546,12 +567,14 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed2.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed9.bytes
- Assets/ExpandSerializedData/TilesetData/Nakatomi/Nakatomi_Purple/carpetGrids_1.txt
- Assets/ExpandTextures/AmmonomiconTextures/bootlegshotgunman_ammonomicon.png
- Assets/ExpandPrefabs/Dungeons/Base_Belly.prefab
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Animals27.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Teleport2_3.bytes
- Assets/ExpandPrefabs/SpriteCollections/Misc/EXJungleCollection.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed7.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter11.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/FloorData/Expand_Jungle_RewardRoom_FloorData.png
- Assets/ExpandPrefabs/TilesetPrefabs/StoneCubeCollection_West.prefab
- Assets/ExpandTextures/SpriteCollections/AIActors/HotShotShotgunMan.png
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera14.bytes
@ -608,6 +631,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Expand_Mines_Regular27.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Squareish2.bytes
- Assets/ExpandRooms/RoomBuilderData/GungeonProper/Expand_Neighborino_Basic_Layout.png
- Assets/ExpandSerializedData/TilesetData/Jungle/Bamboo/carpetGrid2.txt
- Assets/ExpandPrefabs/TilesetPrefabs/ENV_Tileset_West.prefab
- Assets/ExpandSerializedData/TilesetData/Jungle/Woods/facewallGrids_2_grid.txt
- Assets/ExpandTextures/SpriteCollections/Misc/EXTrap_Collection.png
@ -618,6 +642,7 @@ Assets:
- Assets/ExpandSerializedData/TilesetData/Belly/roomCeilingBorderGrid.txt
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed16.bytes
- Assets/ExpandRooms/RoomFactoryData/HB_Expand_Achievement_Hollowed_Out.bytes
- Assets/ExpandSerializedData/TilesetData/Jungle/Woods/facewallGrids_0_grid.txt
- Assets/ExpandPrefabs/Items/Projectiles/EXBootlegMachinePistolProjectile.prefab
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Teleport3.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Mines_Regular14.bytes
@ -659,10 +684,12 @@ Assets:
- Assets/ExpandTextures/SpriteCollections/AIActors/BulletMan_Monochrome.png
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate24.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Roundabout.bytes
- Assets/ExpandSerializedData/AmmonomiconData/HotShotShotgunKin_AmmonomiconData.txt
- Assets/ExpandPrefabs/Breakables/ExpandCactus_Shard_002.prefab
- Assets/ExpandSerializedData/TilesetData/West/WoodInterior/facadeTopGrid.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_SniperTotemBuff.bytes
- Assets/ExpandPrefabs/SpriteCollections/Misc/EXBalloonCollection.prefab
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Jungle_RewardRoom.bytes
- Assets/ExpandPrefabs/Items/Projectiles/WestBrosGoldenRevolverProjectile.prefab
- Assets/ExpandRooms/RoomFactoryData/MHF_Expand_Achievement_Great_Hall.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Oldman7.bytes
@ -675,6 +702,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Oldman6.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_Fight2.bytes
- Assets/ExpandSerializedData/TilesetData/Nakatomi/ENV_Tileset_Nakatomi_MaterialTable.txt
- Assets/ExpandTextures/AmmonomiconTextures/boss_icon_Western_Bros_Angel.png
- Assets/ExpandTextures/BossCards/WesternBrosBossCard.png
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular36.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed10.bytes
@ -685,6 +713,7 @@ Assets:
- Assets/ExpandRooms/RoomBuilderData/TrapRooms/Expand_Apache_SpikeAndPits_Layout.png
- Assets/ExpandSerializedData/SpriteCollections/BootlegBulletManBandanaCollection.txt
- Assets/ExpandPrefabs/Items/EXSonicBox.prefab
- Assets/ExpandTextures/AmmonomiconTextures/hotshotshotgunkin_ammonomicon.png
- Assets/ExpandSerializedData/SpriteCollections/EXBootlegRoomCollection.txt
- Assets/ExpandPrefabs/Foyer/EXCasino_Hub.prefab
- Assets/ExpandPrefabs/Foyer/EXPunchoutArcadeCoin.prefab
@ -699,6 +728,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_RegularSnakeParrot.bytes
- Assets/ExpandPrefabs/TilesetPrefabs/EXOldWestWarp.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera15.bytes
- Assets/ExpandSerializedData/AmmonomiconData/BootlegShotgunManBlue_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular20.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_ArrowCat.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_Fight5.bytes
@ -713,6 +743,7 @@ Assets:
- Assets/ExpandPrefabs/SpriteCollections/GunsAndItems/EXItemCollection.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed5.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter16.bytes
- Assets/ExpandTextures/AmmonomiconTextures/boss_icon_Western_Bros_Nome.png
- Assets/ExpandSerializedData/SpriteCollections/EXSpaceCollection.txt
- Assets/ExpandSerializedData/TilesetData/Jungle/ENV_Tileset_Jungle.txt
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Thin4.bytes
@ -734,6 +765,7 @@ Assets:
- Assets/ExpandPrefabs/Items/EX_ItemParadrop.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate25.bytes
- Assets/ExpandRooms/RoomFactoryData/PMH_Expand_Kyle.bytes
- Assets/ExpandTextures/AmmonomiconTextures/boss_icon_Western_Bros_Tuc.png
- Assets/ExpandPrefabs/Misc/EX_ExplodyBarrelDummy.prefab
- Assets/ExpandRooms/RoomFactoryData/Expand_Mines_Regular32.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Oldman5.bytes
@ -766,6 +798,7 @@ Assets:
- Assets/ExpandPrefabs/Misc/EXElevator_Arrival_Placable.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate3.bytes
- Assets/ExpandRooms/RoomFactoryData/Keep_JungleElevatorRoom.bytes
- Assets/ExpandSerializedData/AmmonomiconData/CronenbergAngry_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/H_Expand_MasterRound4.bytes
- Assets/ExpandRooms/RoomBuilderData/TrapRooms/Expand_Thwomp_Crossing_Horizontal_Layout.png
- Assets/ExpandRooms/RoomFactoryData/PM_Expand_bubblebuddy.bytes
@ -774,6 +807,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular21.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_HunterSporge.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera1.bytes
- Assets/ExpandSerializedData/TilesetData/Jungle/Woods/carpetGrid2.txt
- Assets/ExpandRooms/RoomFactoryData/Expand_Mines_Regular10.bytes
- Assets/ExpandPrefabs/Misc/EXLeadKeyGlitchScreenFX.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera_EyeDiagram.bytes
@ -801,6 +835,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Expand_4wave.bytes
- Assets/ExpandSerializedData/TilesetData/Belly/faceWallGrid1.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Tribal18.bytes
- Assets/ExpandTextures/AmmonomiconTextures/hotshotbulletkin_ammonomicon.png
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular23.bytes
- Assets/ExpandPrefabs/Misc/BootlegRoomBorder_North.prefab
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_CornerBomb1.bytes
@ -866,6 +901,7 @@ Assets:
- Assets/ExpandSerializedData/TilesetData/Jungle/Bamboo/pitLayoutGrid.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Mixed4.bytes
- Assets/ExpandPrefabs/TilesetPrefabs/Belly_PitVFX2.prefab
- Assets/ExpandTextures/AmmonomiconTextures/hotshotcultist_ammonomicon.png
- Assets/ExpandPrefabs/Items/Wooden Crest.prefab
- Assets/ExpandRooms/RoomFactoryData/PM_Expand_Achievement_Case_Closed.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera16.bytes
@ -899,6 +935,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon1_TinyPassage5.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera11.bytes
- Assets/ExpandSerializedData/SpriteCollections/CultistCompanionCollection.txt
- Assets/ExpandSerializedData/AmmonomiconData/BootlegBulletKin_AmmonomiconData.txt
- Assets/ExpandPrefabs/Misc/EXPortableElevator_Departure.prefab
- Assets/ExpandPrefabs/AIActors/WestBros/WestBrosHat_Angel.prefab
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Tribal4.bytes
@ -922,6 +959,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_smol5.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon1_Tiny16.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter4.bytes
- Assets/ExpandSerializedData/AmmonomiconData/HotShotCultist_AmmonomiconData.txt
- Assets/ExpandPrefabs/Misc/EXReward_Pedestal_CorruptionBomb.prefab
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_LongOdd2.bytes
- Assets/ExpandPrefabs/SpriteCollections/Misc/EXBootlegRoomCollection.prefab
@ -964,6 +1002,7 @@ Assets:
- Assets/ExpandPrefabs/Misc/EX_Secret_Door.prefab
- Assets/ExpandPrefabs/AIActors/WestBros/WestBrosAnimations_Tuc.prefab
- Assets/ExpandPrefabs/AIActors/SonicCompanion.prefab
- Assets/ExpandSerializedData/AmmonomiconData/Chameleon_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Tribal13.bytes
- Assets/ExpandPrefabs/Foyer/EXFoyerWarpDoor.prefab
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Thin2.bytes
@ -979,6 +1018,7 @@ Assets:
- Assets/ExpandRooms/RoomBuilderData/Castle/Expand_TurtleMelon_Pit_Jump_Layout.png
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate20.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular49.bytes
- Assets/ExpandTextures/AmmonomiconTextures/hotshotbulletkin_icon.png
- Assets/ExpandPrefabs/Items/Pow Block.prefab
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular6.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter27.bytes
@ -986,8 +1026,10 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Steps4.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Connector_06.bytes
- Assets/ExpandTextures/SpriteCollections/AIActors/SonicCompanion_Collection.png
- Assets/ExpandSerializedData/AmmonomiconData/WestBrosAngel_AmmonomiconData.txt
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate27.bytes
- Assets/ExpandSerializedData/SpriteCollections/EXOfficeCollection.txt
- Assets/ExpandPrefabs/Breakables/ExpandJungleTree_Shard_03.prefab
- Assets/ExpandPrefabs/Misc/BootlegRoomDoorBlocker_South.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera17.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Long.bytes
@ -1018,6 +1060,8 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter2.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Mixed7.bytes
- Assets/ExpandTextures/Misc/ExpandDustFXSprite_001.png
- Assets/ExpandPrefabs/Breakables/ExpandJungleTree_Shard_02.prefab
- Assets/ExpandTextures/AmmonomiconTextures/bootlegbullat_ammonomicon.png
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Mixed24.bytes
- Assets/ExpandPrefabs/Items/Projectiles/EXBootlegShotgunProjectile.prefab
- Assets/ExpandPrefabs/SpriteCollections/AIActors/BootlegBulletManCollection.prefab
@ -1025,11 +1069,11 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Viscera18.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_BIRDS.bytes
- Assets/ExpandTextures/SpriteCollections/Tilesets/ENV_Tileset_West.png
- Assets/ExpandTextures/AmmonomiconTextures/boss_photo_Western_Bros_Angel.png
- Assets/ExpandPrefabs/Misc/Sarcophagus_ShotgunMace_Kaliber.prefab
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_AnimalsFairy.bytes
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Mixed19.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_MushFairy.bytes
- Assets/ExpandSerializedData/TilesetData/Jungle/Woods/facewallGrids_0__grid.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Tribal25.bytes
- Assets/ExpandSerializedData/TilesetData/Phobos/Phobos_Grey/roomFloorBorderGrid.txt
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Brother9.bytes
@ -1039,6 +1083,7 @@ Assets:
- Assets/ExpandTextures/SpriteCollections/AIActors/BootlegBullat_Collection.png
- Assets/ExpandSerializedData/TilesetData/Jungle/Woods/facewallGrids_1_grid.txt
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Hunter7.bytes
- Assets/ExpandTextures/AmmonomiconTextures/boss_photo_Western_Bros_Tuc.png
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular10.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_AnimalSpider.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Witch4.bytes
@ -1057,6 +1102,7 @@ Assets:
- Assets/ExpandSerializedData/SpriteCollections/EXSecretDoorCollection.txt
- Assets/ExpandSerializedData/SpriteCollections/GungeoneerMimicCollection.txt
- Assets/ExpandTextures/SpriteCollections/Misc/EXLargeMonster_Collection.png
- Assets/ExpandTextures/AmmonomiconTextures/boss_photo_Western_Bros_Nome.png
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_BigGap3.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Owl6.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular45.bytes
@ -1084,6 +1130,7 @@ Assets:
- Assets/ExpandRooms/RoomBuilderData/Castle/Expand_TurtleMelon_Singer_Gap_Layout.png
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_ConfirmedSnakes.bytes
- Assets/ExpandRooms/RoomFactoryData/TrapRooms/Expand_PitTraps.bytes
- Assets/ExpandPrefabs/Breakables/ExpandJungleTree_Small.prefab
- Assets/ExpandTextures/SpriteCollections/GunsAndItems/EXGun_Collection.png
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Oldman10.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_CornerBomb4.bytes
@ -1101,6 +1148,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Oldman4.bytes
- Assets/ExpandPrefabs/SpriteCollections/AIActors/CronenbergTallCollection.prefab
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Skeletal7.bytes
- Assets/ExpandTextures/AmmonomiconTextures/hotshotshotgunkin_icon.png
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Witch3.bytes
- Assets/ExpandPrefabs/SpriteCollections/GunsAndItems/EXGunCollection.prefab
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Tribal3.bytes
@ -1109,6 +1157,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Pirate30.bytes
- Assets/ExpandRooms/RoomBuilderData/Secret_MiniElevator_Room_Layout.png
- Assets/ExpandRooms/RoomBuilderData/Secret_Rat_MiniElevator_Room_Layout.png
- Assets/ExpandSerializedData/AmmonomiconData/HotShotBulletKin_AmmonomiconData.txt
- Assets/ExpandSerializedData/SpriteCollections/WestBrosCollection.txt
- Assets/ExpandTextures/SpriteCollections/AIActors/GungeoneerMimic_Collection.png
- Assets/ExpandRooms/RoomFactoryData/Belly/Expand_Belly_Skeletal3.bytes
@ -1141,6 +1190,7 @@ Assets:
- Assets/ExpandRooms/RoomFactoryData/PM_Expand_Achievement_Castle_Crasher.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Secret_Brother8.bytes
- Assets/ExpandPrefabs/Misc/ExpandChallenge_KingsMen.prefab
- Assets/ExpandPrefabs/Breakables/ExpandJungleTree_Shard_01.prefab
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Canyon_Weird4.bytes
- Assets/ExpandRooms/RoomFactoryData/M_Expand_ratkey.bytes
- Assets/ExpandRooms/RoomFactoryData/Jungle/Expand_Forest_Tribal28.bytes
@ -1196,6 +1246,7 @@ Assets:
- Assets/ExpandPrefabs/Foyer/EXCasino_HatRack.prefab
- Assets/ExpandRooms/RoomFactoryData/Expand_Proper_Regular17.bytes
- Assets/ExpandRooms/RoomFactoryData/West/Expand_West_Interior1_Thin1.bytes
- Assets/ExpandPrefabs/Breakables/ExpandJungleTreeSmall_Stump.prefab
- Assets/ExpandPrefabs/TilesetPrefabs/ExpandJungle_ExitLadder.prefab
- Assets/ExpandRooms/RoomFactoryData/Expand_BootlegRoom.bytes
- Assets/ExpandRooms/RoomFactoryData/Expand_Mines_Regular15.bytes

View File

@ -1,9 +1,9 @@
ManifestFileVersion: 0
CRC: 1620197715
CRC: 740429855
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 0a024bbee988145ff8a96ef6a1b60a56
Hash: 98f8a042d84c2e85107dd650e77dfed5
TypeTreeHash:
serializedVersion: 2
Hash: c73412a662fd4e4f36af34cbdf078b85

View File

@ -0,0 +1,127 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1145928303439584}
m_IsPrefabParent: 1
--- !u!1 &1145928303439584
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4923011530492008}
- component: {fileID: 114393448174012060}
- component: {fileID: 114421219494034938}
m_Layer: 22
m_Name: ExpandJungleTreeMedium_Stump
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1655174343259628
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4485090548940776}
m_Layer: 22
m_Name: stump
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1656464728701430
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4391965202308600}
m_Layer: 20
m_Name: shadow
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4391965202308600
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1656464728701430}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.58, y: -1.55, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4923011530492008}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4485090548940776
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1655174343259628}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.55, y: -1.5, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4923011530492008}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4923011530492008
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1145928303439584}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4485090548940776}
- {fileID: 4391965202308600}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &114393448174012060
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1145928303439584}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dcb4fda0513fcf24a93207e0ed520ae2, type: 3}
m_Name:
m_EditorClassIdentifier:
SoundEvent: Play_OBJ_bush_whack_01
--- !u!114 &114421219494034938
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1145928303439584}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c59f4fb058392d745a690e85b4feba5d, type: 3}
m_Name:
m_EditorClassIdentifier:
FadeTime: 0.2
FadeStartAlpha: 0.5
FadeColor: {r: 0, g: 0, b: 0, a: 1}

View File

@ -0,0 +1,127 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1441732104078410}
m_IsPrefabParent: 1
--- !u!1 &1041408840989758
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4388218233542822}
m_Layer: 20
m_Name: shadow
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1395211978865882
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4024534932737566}
m_Layer: 22
m_Name: stump
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1441732104078410
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4725025541201714}
- component: {fileID: 114866844730935112}
- component: {fileID: 114088509076258938}
m_Layer: 22
m_Name: ExpandJungleTreeSmall_Stump
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4024534932737566
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1395211978865882}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.54, y: -1.02, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4725025541201714}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4388218233542822
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1041408840989758}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.62, y: -1.09, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4725025541201714}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4725025541201714
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1441732104078410}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4024534932737566}
- {fileID: 4388218233542822}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &114088509076258938
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1441732104078410}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c59f4fb058392d745a690e85b4feba5d, type: 3}
m_Name:
m_EditorClassIdentifier:
FadeTime: 0.2
FadeStartAlpha: 0.5
FadeColor: {r: 0, g: 0, b: 0, a: 1}
--- !u!114 &114866844730935112
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1441732104078410}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dcb4fda0513fcf24a93207e0ed520ae2, type: 3}
m_Name:
m_EditorClassIdentifier:
SoundEvent: Play_OBJ_bush_whack_01

View File

@ -0,0 +1,70 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1091896740447222}
m_IsPrefabParent: 1
--- !u!1 &1091896740447222
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4961511601201636}
m_Layer: 22
m_Name: ExpandJungleTree_Medium
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1938347378220462
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4478284814871498}
m_Layer: 20
m_Name: shadow
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4478284814871498
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1938347378220462}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: -1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4961511601201636}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4961511601201636
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1091896740447222}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4478284814871498}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -0,0 +1,41 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1579334081326930}
m_IsPrefabParent: 1
--- !u!1 &1579334081326930
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4891313054720286}
m_Layer: 22
m_Name: ExpandJungleTree_Shard_01
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4891313054720286
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1579334081326930}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -0,0 +1,41 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1732255563853130}
m_IsPrefabParent: 1
--- !u!1 &1732255563853130
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4592820774996424}
m_Layer: 22
m_Name: ExpandJungleTree_Shard_02
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4592820774996424
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1732255563853130}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -0,0 +1,41 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1562625379222856}
m_IsPrefabParent: 1
--- !u!1 &1562625379222856
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4415692026004770}
m_Layer: 22
m_Name: ExpandJungleTree_Shard_03
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4415692026004770
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1562625379222856}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -0,0 +1,70 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1408625252495124}
m_IsPrefabParent: 1
--- !u!1 &1408625252495124
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4648819970681010}
m_Layer: 22
m_Name: ExpandJungleTree_Small
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1427681307695434
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4109954329750062}
m_Layer: 20
m_Name: shadow
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4109954329750062
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1427681307695434}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: -0.25, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4648819970681010}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4648819970681010
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1408625252495124}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4109954329750062}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 70,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "bullat_idle_001",
"FullArtSprite": "bootlegbullat_ammonomicon",
"EnemyName": "Bootleg Bullat",
"smallDescription": "Pixel Rated",
"bigDescription": "I have stumbled upon a place that defies all logic known to me.\nIt seems barely as though a real place! Everything is flat, as though every furniture, torch or detail were painted upon the floors and walls...\n\nViktor Nogov"
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 0,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "bulletman_run_down_001",
"FullArtSprite": "bootlegbulletman_ammonomicon",
"EnemyName": "Bootleg Bullet Kin",
"smallDescription": "8 Bit Bullet",
"bigDescription": "This bullet kin is not supposed to exist. It does not belong to the Gungeon, and even less so to this dimension.\n\nIts body is composed of but a few, indivisible atoms, squared and jagged, unlike anything I've ever seen. What is happening?\n\nViktor Nogov"
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 19,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "shotgunman_blue_move_down_001",
"FullArtSprite": "bootlegshotgunman_ammonomicon",
"EnemyName": "Bootleg Shotgun Kin (Blue)",
"smallDescription": "Sprite Right",
"bigDescription": "I can take this no longer! This... this is an infection!\n\nThe Gungeon itself is infected with something, with this plague, that is devouring it, remaking it! Even my own guns have degenerated into one of these squared, resolutionless things...\n\nI fear if I remain in this place any longer, I will myself become like these unfortunate gundead!\n\nViktor Nogov"
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 19,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "shotgunman_red_move_down_001",
"FullArtSprite": "bootlegshotgunman_ammonomicon",
"EnemyName": "Bootleg Shotgun Kin (Red)",
"smallDescription": "Sprite Right",
"bigDescription": "I can take this no longer! This... this is an infection!\n\nThe Gungeon itself is infected with something, with this plague, that is devouring it, remaking it! Even my own guns have degenerated into one of these squared, resolutionless things...\n\nI fear if I remain in this place any longer, I will myself become like these unfortunate gundead!\n\nViktor Nogov"
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 78,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "chameleon_idle_right_001",
"FullArtSprite": "chameleon_ammonomicon",
"EnemyName": "Chameleon",
"smallDescription": "Chammoeleon",
"bigDescription": "Well adapted to prey on the smaller bullat species native to the Gungeon, the Chameleon is able to store their prey's shells inside their multi-chambered stomachs, so as to vomit them at anything that threatens them.\n\nThis is an important step of the Gungeon's bulletrient cycle, allowing ammunition to be reused, making them easier to break down.\n\nUnfortunately, they are extremely skittish, and the novel sight of a Gungeoneer is more than enough to prompt them to defend themselves."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 0,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "clownkin_idle_right_001",
"FullArtSprite": "clownkin_ammonomicon",
"EnemyName": "Clown Kin",
"smallDescription": "All the world's a circus",
"bigDescription": "Although few in number, some Gundead choose to lay down their arms in favour of the deadliest weapon of them all: contagious laughter.\n\nHighly valued at Gundead parties."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 80,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "berg_tall_idle_front_001",
"FullArtSprite": "cronenberg_tall_ammonomicon",
"EnemyName": "Cronenberg (Angry)",
"smallDescription": "Of the Flesh",
"bigDescription": "A strange, mutated creature in the vague similitude of a shotgun kin.\n\nWrought entirely of flesh, it is known for charging at its enemies with mindless abandon and unbridled ferocity, with surprising agility for its misshapen body and unsteady gait.\n\nA horrible growl is often heard at its time of death, as though a last, pitiful cry before its body combusts under its own metabolism."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 80,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "Cronenberg_Idle_001",
"FullArtSprite": "cronenberg_big_ammonomicon",
"EnemyName": "Cronenberg",
"smallDescription": "Bullet Horror",
"bigDescription": "A vile abomination of flesh and lead, far too large to maintain any semblance of a proper shape as its mass shifts and contorts under the strain of its senseless musculature.\n\nShould any consciousness remain in the few heads whose forms are yet recognizable, then such a consciousness knows little more than pain."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 2,
"IsNormalEnemy": true,
"IsInBossTab": true,
"TabSpriteIsTexture": true,
"EnemyDifficulty": 3,
"TabSprite": "boss_icon_Western_Bros_Angel",
"FullArtSprite": "boss_photo_Western_Bros_Angel",
"EnemyName": "Dopplegunner",
"smallDescription": "TBD",
"bigDescription": "TBD"
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 0,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": true,
"EnemyDifficulty": 0,
"TabSprite": "hotshotbulletkin_icon",
"FullArtSprite": "hotshotbulletkin_ammonomicon",
"EnemyName": "HotShot Bullet Kin",
"smallDescription": "9000 .cal",
"bigDescription": "Equipped with state-of-the-art power analysers, these hotshots are able to duel-wield revolvers and fire them with pin-point accuracy.\n\nFew are able to beat them in a duel."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 79,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": true,
"EnemyDifficulty": 0,
"TabSprite": "hotshotcultist_icon",
"FullArtSprite": "hotshotcultist_ammonomicon",
"EnemyName": "HotShot Cultist",
"smallDescription": "Rest of the Order",
"bigDescription": "Even among the Gungeoneers that have descended into insanity and fallen to the worship of the Gun, some still manage to become more fanatical than the rest.\n\nDonning skulls in the likeness of their new Master, these Cultists have mastered not only the art of the dodge roll, but that of dual-wielding too.\n\nFeared by even their fellows, these zealots will indiscriminately attack any that poses a threat to the Gungeon and its relics."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 19,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": true,
"EnemyDifficulty": 0,
"TabSprite": "hotshotshotgunkin_icon",
"FullArtSprite": "hotshotshotgunkin_ammonomicon",
"EnemyName": "HotShot Shotgun Kin",
"smallDescription": "Bullet Hell's Aimgels",
"bigDescription": "These dangerous and rowdy shotgun kin are shunned by most of the Gungeon society, and are often found picking fights against other gundead or consuming copious amounts of shotga-cola in loud estabilishments.\n\nThough they stylise themselves after the imagery of hot lead, they are not, in fact, resistant to actual fire."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 45,
"IsNormalEnemy": true,
"IsInBossTab": false,
"TabSpriteIsTexture": false,
"EnemyDifficulty": 0,
"TabSprite": "powderskull_skull_move_front_002",
"FullArtSprite": "skusketling_ammonomicon",
"EnemyName": "Skusketling",
"smallDescription": "Bone to pick",
"bigDescription": "The skulls of age-old inhabitants and victims of the Gungeon.\n\nOnce crushed into ashes and dust, the latent magic of the Mines' gunpowder has reformed and reanimated them for an existence of grim servitude."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 2,
"IsNormalEnemy": true,
"IsInBossTab": true,
"TabSpriteIsTexture": true,
"EnemyDifficulty": 3,
"TabSprite": "boss_icon_Western_Bros_Angel",
"FullArtSprite": "boss_photo_Western_Bros_Angel",
"EnemyName": "West Brothers (Angel)",
"smallDescription": "Follow the job through",
"bigDescription": "A cruel and ruthless mercenary, willing to stop at nothing in his search for profit.\n\nFinding great pleasure in hunting his prey, his search for buried gold offers but another opportunity for the spilling of blood; if for a profit margin that could never be ignored."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 2,
"IsNormalEnemy": true,
"IsInBossTab": true,
"TabSpriteIsTexture": true,
"EnemyDifficulty": 3,
"TabSprite": "boss_icon_Western_Bros_Nome",
"FullArtSprite": "boss_photo_Western_Bros_Nome",
"EnemyName": "West Brothers (Nome)",
"smallDescription": "Every gun makes its own tune",
"bigDescription": "A mysterious and taciturn bounty hunter, searching for buried gold in a grave somewhere in the westernmost chamber of the Gungeon.\n\nCompassionate, though unyielding, many men and Gundead have been felled by the draw of his revolver."
}

View File

@ -0,0 +1,12 @@
{
"ForcedPositionInAmmonomicon": 2,
"IsNormalEnemy": true,
"IsInBossTab": true,
"TabSpriteIsTexture": true,
"EnemyDifficulty": 3,
"TabSprite": "boss_icon_Western_Bros_Tuc",
"FullArtSprite": "boss_photo_Western_Bros_Tuc",
"EnemyName": "West Brothers (Tuc)",
"smallDescription": "There's two kinds of people",
"bigDescription": "A mysterious and taciturn bounty hunter, searching for buried gold in a grave somewhere in the westernmost chamber of the Gungeon.\n\nCompassionate, though unyielding, many men and Gundead have been felled by the draw of his revolver."
}

View File

@ -0,0 +1 @@
{"roomTypeRestriction":-1,"topLeftIndices":{"indices":[230],"indexWeights":[1.0]},"topIndices":{"indices":[231],"indexWeights":[1.0]},"topRightIndices":{"indices":[232],"indexWeights":[1.0]},"leftIndices":{"indices":[252],"indexWeights":[1.0]},"centerIndices":{"indices":[253],"indexWeights":[0.10000000149011612]},"rightIndices":{"indices":[254],"indexWeights":[1.0]},"bottomLeftIndices":{"indices":[274],"indexWeights":[1.0]},"bottomIndices":{"indices":[275],"indexWeights":[1.0]},"bottomRightIndices":{"indices":[276],"indexWeights":[1.0]},"horizontalIndices":{"indices":[-1],"indexWeights":[1.0]},"verticalIndices":{"indices":[-1],"indexWeights":[1.0]},"topCapIndices":{"indices":[-1],"indexWeights":[1.0]},"rightCapIndices":{"indices":[-1],"indexWeights":[1.0]},"bottomCapIndices":{"indices":[-1],"indexWeights":[1.0]},"leftCapIndices":{"indices":[-1],"indexWeights":[1.0]},"allSidesIndices":{"indices":[-1],"indexWeights":[1.0]},"topLeftNubIndices":{"indices":[278],"indexWeights":[1.0]},"topRightNubIndices":{"indices":[277],"indexWeights":[1.0]},"bottomLeftNubIndices":{"indices":[256],"indexWeights":[1.0]},"bottomRightNubIndices":{"indices":[255],"indexWeights":[1.0]},"extendedSet":false,"topCenterLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"topCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"topCenterRightIndices":{"indices":[-1],"indexWeights":[1.0]},"thirdTopRowLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"thirdTopRowCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"thirdTopRowRightIndices":{"indices":[-1],"indexWeights":[1.0]},"internalBottomLeftCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"internalBottomCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"internalBottomRightCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"borderTopNubLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"borderTopNubRightIndices":{"indices":[-1],"indexWeights":[1.0]},"borderTopNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"borderRightNubTopIndices":{"indices":[-1],"indexWeights":[1.0]},"borderRightNubBottomIndices":{"indices":[-1],"indexWeights":[1.0]},"borderRightNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"borderBottomNubLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"borderBottomNubRightIndices":{"indices":[-1],"indexWeights":[1.0]},"borderBottomNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"borderLeftNubTopIndices":{"indices":[-1],"indexWeights":[1.0]},"borderLeftNubBottomIndices":{"indices":[-1],"indexWeights":[1.0]},"borderLeftNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"diagonalNubsTopLeftBottomRight":{"indices":[-1],"indexWeights":[1.0]},"diagonalNubsTopRightBottomLeft":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsTop":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsRight":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsBottom":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsLeft":{"indices":[-1],"indexWeights":[1.0]},"quadNubs":{"indices":[-1],"indexWeights":[1.0]},"topRightWithNub":{"indices":[-1],"indexWeights":[1.0]},"topLeftWithNub":{"indices":[-1],"indexWeights":[1.0]},"bottomRightWithNub":{"indices":[-1],"indexWeights":[1.0]},"bottomLeftWithNub":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderNE":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderSE":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderSW":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderNW":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingNE":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingSE":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingSW":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingNW":{"indices":[-1],"indexWeights":[1.0]},"CenterCheckerboard":false,"CheckerboardDimension":1,"CenterIndicesAreStrata":false,"PitInternalSquareGrids":[],"PitInternalSquareOptions":{"PitSquareChance":0.10000000149011612,"CanBeFlushLeft":false,"CanBeFlushRight":false,"CanBeFlushBottom":false},"PitBorderIsInternal":false,"PitBorderOverridesFloorTile":false,"CeilingBorderUsesDistancedCenters":false,"PathFacewallStamp":{"m_FileID":0,"m_PathID":0},"PathSidewallStamp":{"m_FileID":0,"m_PathID":0},"PathPitPosts":{"indices":[],"indexWeights":[]},"PathPitPostsBL":{"indices":[],"indexWeights":[]},"PathPitPostsBR":{"indices":[],"indexWeights":[]},"PathStubNorth":{"m_FileID":0,"m_PathID":0},"PathStubEast":{"m_FileID":0,"m_PathID":0},"PathStubSouth":{"m_FileID":0,"m_PathID":0},"PathStubWest":{"m_FileID":0,"m_PathID":0}}

File diff suppressed because one or more lines are too long

View File

@ -701,4 +701,4 @@ lit cutout perp
lit cutout perp
lit cutout perp
lit cutout perp
lit cutout perp
lit cutout perp

View File

@ -0,0 +1 @@
{"roomTypeRestriction":-1,"topLeftIndices":{"indices":[230],"indexWeights":[1.0]},"topIndices":{"indices":[231],"indexWeights":[1.0]},"topRightIndices":{"indices":[232],"indexWeights":[1.0]},"leftIndices":{"indices":[252],"indexWeights":[1.0]},"centerIndices":{"indices":[253],"indexWeights":[0.10000000149011612]},"rightIndices":{"indices":[254],"indexWeights":[1.0]},"bottomLeftIndices":{"indices":[274],"indexWeights":[1.0]},"bottomIndices":{"indices":[275],"indexWeights":[1.0]},"bottomRightIndices":{"indices":[276],"indexWeights":[1.0]},"horizontalIndices":{"indices":[-1],"indexWeights":[1.0]},"verticalIndices":{"indices":[-1],"indexWeights":[1.0]},"topCapIndices":{"indices":[-1],"indexWeights":[1.0]},"rightCapIndices":{"indices":[-1],"indexWeights":[1.0]},"bottomCapIndices":{"indices":[-1],"indexWeights":[1.0]},"leftCapIndices":{"indices":[-1],"indexWeights":[1.0]},"allSidesIndices":{"indices":[-1],"indexWeights":[1.0]},"topLeftNubIndices":{"indices":[278],"indexWeights":[1.0]},"topRightNubIndices":{"indices":[277],"indexWeights":[1.0]},"bottomLeftNubIndices":{"indices":[256],"indexWeights":[1.0]},"bottomRightNubIndices":{"indices":[255],"indexWeights":[1.0]},"extendedSet":false,"topCenterLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"topCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"topCenterRightIndices":{"indices":[-1],"indexWeights":[1.0]},"thirdTopRowLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"thirdTopRowCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"thirdTopRowRightIndices":{"indices":[-1],"indexWeights":[1.0]},"internalBottomLeftCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"internalBottomCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"internalBottomRightCenterIndices":{"indices":[-1],"indexWeights":[1.0]},"borderTopNubLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"borderTopNubRightIndices":{"indices":[-1],"indexWeights":[1.0]},"borderTopNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"borderRightNubTopIndices":{"indices":[-1],"indexWeights":[1.0]},"borderRightNubBottomIndices":{"indices":[-1],"indexWeights":[1.0]},"borderRightNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"borderBottomNubLeftIndices":{"indices":[-1],"indexWeights":[1.0]},"borderBottomNubRightIndices":{"indices":[-1],"indexWeights":[1.0]},"borderBottomNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"borderLeftNubTopIndices":{"indices":[-1],"indexWeights":[1.0]},"borderLeftNubBottomIndices":{"indices":[-1],"indexWeights":[1.0]},"borderLeftNubBothIndices":{"indices":[-1],"indexWeights":[1.0]},"diagonalNubsTopLeftBottomRight":{"indices":[-1],"indexWeights":[1.0]},"diagonalNubsTopRightBottomLeft":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsTop":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsRight":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsBottom":{"indices":[-1],"indexWeights":[1.0]},"doubleNubsLeft":{"indices":[-1],"indexWeights":[1.0]},"quadNubs":{"indices":[-1],"indexWeights":[1.0]},"topRightWithNub":{"indices":[-1],"indexWeights":[1.0]},"topLeftWithNub":{"indices":[-1],"indexWeights":[1.0]},"bottomRightWithNub":{"indices":[-1],"indexWeights":[1.0]},"bottomLeftWithNub":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderNE":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderSE":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderSW":{"indices":[-1],"indexWeights":[1.0]},"diagonalBorderNW":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingNE":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingSE":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingSW":{"indices":[-1],"indexWeights":[1.0]},"diagonalCeilingNW":{"indices":[-1],"indexWeights":[1.0]},"CenterCheckerboard":false,"CheckerboardDimension":1,"CenterIndicesAreStrata":false,"PitInternalSquareGrids":[],"PitInternalSquareOptions":{"PitSquareChance":0.10000000149011612,"CanBeFlushLeft":false,"CanBeFlushRight":false,"CanBeFlushBottom":false},"PitBorderIsInternal":false,"PitBorderOverridesFloorTile":false,"CeilingBorderUsesDistancedCenters":false,"PathFacewallStamp":{"m_FileID":0,"m_PathID":0},"PathSidewallStamp":{"m_FileID":0,"m_PathID":0},"PathPitPosts":{"indices":[],"indexWeights":[]},"PathPitPostsBL":{"indices":[],"indexWeights":[]},"PathPitPostsBR":{"indices":[],"indexWeights":[]},"PathStubNorth":{"m_FileID":0,"m_PathID":0},"PathStubEast":{"m_FileID":0,"m_PathID":0},"PathStubSouth":{"m_FileID":0,"m_PathID":0},"PathStubWest":{"m_FileID":0,"m_PathID":0}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,17 @@
using UnityEngine;
namespace ExpandTheGungeon.ExpandComponents {
public class ExpandPlaySoundOnSpawn : BraveBehaviour {
[SerializeField]
public string SoundEvent;
public void Start() { }
public void Update() { }
protected override void OnDestroy() { base.OnDestroy(); }
}
}

View File

@ -0,0 +1,48 @@
using System;
using System.Collections;
using UnityEngine;
namespace ExpandTheGungeon.ExpandComponents {
public class ExpandSpriteFadeOnSpawn : BraveBehaviour {
[SerializeField]
public float FadeTime;
[SerializeField]
public float FadeStartAlpha;
[SerializeField]
public Color FadeColor;
[NonSerialized]
private Renderer m_Renderer;
public ExpandSpriteFadeOnSpawn() {
FadeTime = 0.2f;
FadeStartAlpha = 0.5f;
FadeColor = Color.black;
}
public void Start() {
m_Renderer = renderer;
StartCoroutine(HandleOverrideColorFade(FadeColor, FadeTime, FadeStartAlpha));
}
private IEnumerator HandleOverrideColorFade(Color targetColor, float duration, float startAlpha = 0f) {
if (!m_Renderer) { yield break; }
Color startColor = new Color(targetColor.r, targetColor.g, targetColor.b, startAlpha);
float elapsed = 0f;
while (elapsed < duration) {
elapsed += BraveTime.DeltaTime;
float t = Mathf.SmoothStep(0f, 1f, Mathf.Clamp01(elapsed / duration));
Color current = Color.Lerp(startColor, targetColor, t);
m_Renderer.material.SetColor("_OverrideColor", current);
yield return null;
}
m_Renderer.material.SetColor("_OverrideColor", targetColor);
yield break;
}
protected override void OnDestroy() { base.OnDestroy(); }
}
}

View File

@ -60,8 +60,10 @@
<Compile Include="Assets\Scripts\ExpandComponents\ExpandInteractableDoor.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandInteractableLock.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandNoteDoer.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandPlaySoundOnSpawn.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandPunchoutArcadeController.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandScreenFXController.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandSpriteFadeOnSpawn.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandThunderStormPlacable.cs" />
<Compile Include="Assets\Scripts\ExpandComponents\ExpandWarpManager.cs" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\roomCeilingBorderGrid.txt" />
@ -70,18 +72,22 @@
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\facewallGrids_1.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\carpetGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\Canyon\lavaGrid.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\BootlegBullat_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Gold\carpetGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\facewallGrids_2.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\lavaGrid.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXLargeMonsterCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Gold\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\BootlegShotgunManRed_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\SecretElevatorExitTilesetCollection.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\ClownKin_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\carpetGrids_1.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\lavaGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\facewallGrids_2_grid.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\BootlegBulletManCollection.txt" />
<None Include="Assets\ExpandPrefabs\Shaders\ExpandScanlines.shader" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\roomFloorBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\Cronenberg_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Belly\pitBorderFlatGrid.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\BootlegShotgunManBlueCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\ENV_Tileset_West.txt" />
@ -93,6 +99,7 @@
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXMonsterCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\lavaGrids.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\RedInterior\lavaGrid.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\WestBrosTuc_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\ENV_Tileset_Phobos_MaterialTable.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Belly\ENV_Tileset_Belly.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\RedInterior\exteriorFacadeBorderGrid.txt" />
@ -103,12 +110,14 @@
<None Include="Assets\ExpandSerializedData\SpriteCollections\CronenbergTallCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\outerCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\RedInterior\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\Dopplegunner_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\facewallGrids_0.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\Canyon\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\Canyon\carpetGrid1.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXBalloonCollection.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXTrapCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\roomFloorBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\Skusketling_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Belly\pitLayoutGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\RedInterior\carpetGrid1.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\BootlegBullatCollection.txt" />
@ -120,13 +129,16 @@
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\carpetGrids_0.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\facewallGrids_0_grid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Gold\roomFloorBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\WestBrosNome_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\carpetGrids_1.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Blue\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\facewallGrids_1_grid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\facewallGrids_2.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\pitLayoutGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\carpetGrid2.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\facewallGrids_2_grid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Belly\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\facewallGrids_0_grid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\Canyon\floorGrid1.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\carpetGrid.txt" />
<None Include="Assets\ExpandPrefabs\Shaders\ExpandCRT.shader" />
@ -134,6 +146,7 @@
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\ENV_Tileset_Jungle_MaterialTable.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Belly\lavaGrid.txt" />
<None Include="Assets\ExpandPrefabs\Shaders\ExpandGlitchScreen.shader" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\HotShotShotgunKin_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\WoodInterior\facadeTopGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Grey\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\ENV_Tileset_Nakatomi_MaterialTable.txt" />
@ -141,12 +154,15 @@
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXBootlegRoomCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\WoodInterior\floorGrid1.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\BootlegShotgunManBlue_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\facewallGrids_0_grid.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXSpaceCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\ENV_Tileset_Jungle.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Blue\carpetGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\facewallGrids_2.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\ENV_Tileset_Nakatomi.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\CronenbergAngry_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\carpetGrid2.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXFoyerCollection.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXItemCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Belly\faceWallGrid1.txt" />
@ -159,21 +175,24 @@
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\pitLayoutGrid.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\ClownkinCollection.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\CultistCompanionCollection.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\BootlegBulletKin_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\pitLayoutGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Gold\floorSquares.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\WoodInterior\carpetGrid1.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\HotShotCultist_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\outerCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Belly\ENV_Tileset_Belly_MaterialTable.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\facewallGrids_1_grid.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\SonicCompanionCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\facewallGrids_0.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\Chameleon_AmmonomiconData.txt" />
<None Include="Assets\ExpandTheGungeon.asmdef" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\WestBrosAngel_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\EXOfficeCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\WoodInterior\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandPrefabs\Shaders\ExpandGlitchBasic.shader" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\roomCeilingBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Bamboo\facewallGrids_0_grid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\facewallGrids_0__grid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Grey\roomFloorBorderGrid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Jungle\Woods\facewallGrids_1_grid.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Blue\facewallGrids_2_grid.txt" />
@ -182,6 +201,7 @@
<None Include="Assets\ExpandSerializedData\SpriteCollections\GungeoneerMimicCollection.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Nakatomi\Nakatomi_Purple\facewallGrids_0.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\Phobos\Phobos_Grey\floorSquares.txt" />
<None Include="Assets\ExpandSerializedData\AmmonomiconData\HotShotBulletKin_AmmonomiconData.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\WestBrosCollection.txt" />
<None Include="Assets\ExpandSerializedData\SpriteCollections\StoneCubeCollection_West.txt" />
<None Include="Assets\ExpandSerializedData\TilesetData\West\ENV_Tileset_West_MaterialTable.txt" />

View File

@ -155,7 +155,7 @@ public class ExpandCorruptedEnemyEngageDoer : CustomEngageDoer {
GameObject newEnemy = null;
try {
newEnemy = ExpandGlitchedEnemies.Instance.SpawnRandomGlitchEnemy(currentRoom, cachedPosition, true);
newEnemy = ExpandEnemyCorruptor.Instance.SpawnRandomGlitchEnemy(currentRoom, cachedPosition, true);
} catch (Exception) {
// If something broke, destroy broken Enemy (if it exist) to prevent possible softlocks.
if (newEnemy) {

View File

@ -0,0 +1,22 @@
using UnityEngine;
namespace ExpandTheGungeon.ExpandComponents {
public class ExpandPlaySoundOnSpawn : BraveBehaviour {
[SerializeField]
public string SoundEvent;
public void Start() {
if (!string.IsNullOrEmpty(SoundEvent)) {
AkSoundEngine.PostEvent(SoundEvent, gameObject);
Destroy(this);
}
}
public void Update() { }
protected override void OnDestroy() { base.OnDestroy(); }
}
}

View File

@ -108,7 +108,7 @@ public enum SpawnPosition { InsideCollider, ScreenEdge, InsideRadius = 20 }
if (transform.position.GetAbsoluteRoom() != null) {
RoomHandler CurrentRoom = transform.position.GetAbsoluteRoom();
IntVector2 actorPosition = specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor) - CurrentRoom.area.basePosition;
ExpandGlitchedEnemies.Instance.SpawnGlitchedSuperReaper(CurrentRoom, actorPosition);
ExpandEnemyCorruptor.Instance.SpawnGlitchedSuperReaper(CurrentRoom, actorPosition);
return;
}
} else {
@ -120,7 +120,7 @@ public enum SpawnPosition { InsideCollider, ScreenEdge, InsideRadius = 20 }
bool spawnsGlitchedObjectOnDeath = false;
if (UnityEngine.Random.value <= 0.25f) { ExplodesOnDeath = true; }
if (UnityEngine.Random.value <= 0.15f) { spawnsGlitchedObjectOnDeath = true; }
aiactor = AIActor.Spawn(ExpandGlitchedEnemies.Instance.GenerateGlitchedActorPrefab(CachedTargetActorObject, ActorOverrideSource, ExplodesOnDeath, spawnsGlitchedObjectOnDeath), specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor), roomFromPosition, true, AnimationType, true);
aiactor = AIActor.Spawn(ExpandEnemyCorruptor.Instance.GenerateGlitchedActorPrefab(CachedTargetActorObject, ActorOverrideSource, ExplodesOnDeath, spawnsGlitchedObjectOnDeath), specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor), roomFromPosition, true, AnimationType, true);
if (aiactor == null) { return; }
if (aiActor.IsBlackPhantom) { aiactor.BecomeBlackPhantom(); }
if (aiactor) {

View File

@ -0,0 +1,48 @@
using System;
using System.Collections;
using UnityEngine;
namespace ExpandTheGungeon.ExpandComponents {
public class ExpandSpriteFadeOnSpawn : BraveBehaviour {
[SerializeField]
public float FadeTime;
[SerializeField]
public float FadeStartAlpha;
[SerializeField]
public Color FadeColor;
[NonSerialized]
private Renderer m_Renderer;
public ExpandSpriteFadeOnSpawn() {
FadeTime = 0.2f;
FadeStartAlpha = 0.5f;
FadeColor = Color.black;
}
public void Start() {
m_Renderer = renderer;
StartCoroutine(HandleOverrideColorFade(FadeColor, FadeTime, FadeStartAlpha));
}
private IEnumerator HandleOverrideColorFade(Color targetColor, float duration, float startAlpha = 0f) {
if (!m_Renderer) { yield break; }
Color startColor = new Color(targetColor.r, targetColor.g, targetColor.b, startAlpha);
float elapsed = 0f;
while (elapsed < duration) {
elapsed += BraveTime.DeltaTime;
float t = Mathf.SmoothStep(0f, 1f, Mathf.Clamp01(elapsed / duration));
Color current = Color.Lerp(startColor, targetColor, t);
m_Renderer.material.SetColor("_OverrideColor", current);
yield return null;
}
m_Renderer.material.SetColor("_OverrideColor", targetColor);
yield break;
}
protected override void OnDestroy() { base.OnDestroy(); }
}
}

View File

@ -633,7 +633,7 @@ public class ExpandDungeonFlow {
ProceduralFlowModifierData.FlowModifierPlacementType.END_OF_CHAIN
},
roomTable = null,
exactRoom = ExpandPrefabs.gungeon_rewardroom_1,
exactRoom = ExpandRoomPrefabs.Expand_Jungle_RewardRoom,
IsWarpWing = false,
RequiresMasteryToken = false,
chanceToLock = 0,

View File

@ -16,6 +16,7 @@ public class ExpandFloorDecorator {
public static void PlaceFloorDecoration(Dungeon dungeon, List<RoomHandler> roomListOverride = null, bool ignoreTilesetType = false) {
List<GlobalDungeonData.ValidTilesets> ValidTilesets = new List<GlobalDungeonData.ValidTilesets>() {
GlobalDungeonData.ValidTilesets.JUNGLEGEON,
GlobalDungeonData.ValidTilesets.BELLYGEON,
GlobalDungeonData.ValidTilesets.WESTGEON,
GlobalDungeonData.ValidTilesets.MINEGEON,
@ -30,69 +31,14 @@ public class ExpandFloorDecorator {
if (roomListOverride != null) { DungeonRooms = roomListOverride; }
if (dungeon.gameObject.name.ToLower().StartsWith("base_office")) {
FlippableCover[] AllTables = Object.FindObjectsOfType<FlippableCover>();
if (AllTables != null && AllTables.Length > 0) {
for (int i = 0; i < AllTables.Length; i++) {
Vector3 CachedTablePosition = AllTables[i].gameObject.transform.position;
List<GameObject> m_surfaceObjects = new List<GameObject>();
bool ReplaceThisTable = false;
bool IsVerticalTable = false;
bool TableHadDecoration = false;
bool TableWasDecorated = false;
float ChanceToDecorate = 1;
GameObject Table = null;
RoomHandler parentRoom = AllTables[i].transform.position.GetAbsoluteRoom();
if (AllTables[i].gameObject.name.ToLower().Contains("table_vertical") | AllTables[i].gameObject.name.ToLower().Contains("coffin_vertical")) {
ReplaceThisTable = true;
IsVerticalTable = true;
} else if (AllTables[i].gameObject.name.ToLower().Contains("table_horizontal") | AllTables[i].gameObject.name.ToLower().Contains("coffin_horizontal")) {
ReplaceThisTable = true;
}
if (ReplaceThisTable) {
SurfaceDecorator m_TableDecorator = AllTables[i].gameObject.GetComponent<SurfaceDecorator>();
if (m_TableDecorator) {
m_surfaceObjects = ReflectionHelpers.ReflectGetField<List<GameObject>>(typeof(SurfaceDecorator), "m_surfaceObjects", m_TableDecorator);
if (m_surfaceObjects != null && m_surfaceObjects.Count > 0) {
TableWasDecorated = true;
for (int I = 0; I < m_surfaceObjects.Count; I++) { Object.Destroy(m_surfaceObjects[I]); }
}
ChanceToDecorate = m_TableDecorator.chanceToDecorate;
TableHadDecoration = true;
}
parentRoom.DeregisterInteractable(AllTables[i]);
Object.Destroy(AllTables[i].gameObject);
if (IsVerticalTable) {
Table = Object.Instantiate(ExpandObjectDatabase.TableVerticalSteel, CachedTablePosition, Quaternion.identity);
} else {
Table = Object.Instantiate(ExpandObjectDatabase.TableHorizontalSteel, CachedTablePosition, Quaternion.identity);
}
if (Table) {
FlippableCover NewTable = Table.GetComponent<FlippableCover>();
Table.transform.parent = parentRoom.hierarchyParent;
NewTable.ConfigureOnPlacement(parentRoom);
if (TableHadDecoration) {
SurfaceDecorator newDecorator = Table.GetComponent<SurfaceDecorator>();
if (newDecorator) {
if (TableWasDecorated) {
newDecorator.chanceToDecorate = 1;
} else {
newDecorator.chanceToDecorate = ChanceToDecorate;
}
newDecorator.Decorate(parentRoom);
}
}
parentRoom.RegisterInteractable(NewTable);
}
}
}
}
}
if (dungeon.gameObject.name.ToLower().StartsWith("base_office")) { ReplaceTables(); }
foreach (RoomHandler currentRoom in DungeonRooms) {
try {
switch (dungeon.tileIndices.tilesetId) {
case GlobalDungeonData.ValidTilesets.JUNGLEGEON:
PlaceRandomTrees(dungeon, currentRoom);
break;
case GlobalDungeonData.ValidTilesets.WESTGEON:
PlaceRandomCacti(dungeon, currentRoom);
break;
@ -123,12 +69,102 @@ public class ExpandFloorDecorator {
ETGModConsole.Log("[DEBUG] Number of floor decoration objects skipped: " + RandomObjectsSkipped, DebugMode);
if (RandomObjectsPlaced <= 0) { ETGModConsole.Log("[DEBUG] Warning: No decoration objects have been placed!", DebugMode); }
}
RandomObjectsPlaced = 0;
RandomObjectsSkipped = 0;
return;
}
private static void PlaceRandomTrees(Dungeon dungeon, RoomHandler currentRoom) {
if (currentRoom.area == null) { return; }
PrototypeDungeonRoom.RoomCategory roomCategory = currentRoom.area.PrototypeRoomCategory;
if (currentRoom == null | roomCategory == PrototypeDungeonRoom.RoomCategory.REWARD | currentRoom.IsMaintenanceRoom() |
string.IsNullOrEmpty(currentRoom.GetRoomName()) | currentRoom.GetRoomName().StartsWith("Boss Foyer") |
!currentRoom.HasActiveEnemies(RoomHandler.ActiveEnemyType.RoomClear) | currentRoom.PrecludeTilemapDrawing |
roomCategory == PrototypeDungeonRoom.RoomCategory.BOSS | roomCategory == PrototypeDungeonRoom.RoomCategory.ENTRANCE |
roomCategory == PrototypeDungeonRoom.RoomCategory.EXIT)
{
return;
}
if (Random.value < 0.2f) { return; }
List<IntVector2> ValidLocations = ExpandUtility.FindAllValidLocations(dungeon, currentRoom, 3, 9, true);
List<FlippableCover> Tables = new List<FlippableCover>();
if (ValidLocations.Count <= 0) { return; }
ValidLocations = ValidLocations.Shuffle();
if (currentRoom.hierarchyParent) {
for (int i = 0; i < currentRoom.hierarchyParent.childCount; i++) {
if (currentRoom.hierarchyParent.GetChild(i).gameObject && currentRoom.hierarchyParent.GetChild(i).gameObject.GetComponent<FlippableCover>()) {
Tables.Add(currentRoom.hierarchyParent.GetChild(i).gameObject.GetComponent<FlippableCover>());
}
}
}
List<GameObject> TreeList = new List<GameObject>() { ExpandPrefabs.ExpandJungleTree_Medium, ExpandPrefabs.ExpandJungleTree_Small };
TreeList = TreeList.Shuffle();
int MinTreeCount = 2;
int MaxTreeCount = 5;
int X = currentRoom.area.dimensions.x;
int Y = currentRoom.area.dimensions.y;
if (X < 10 | Y < 10 | (X * Y) < 225) {
MinTreeCount = 1;
MaxTreeCount = 3;
} else if ((X * Y) >= 800 & X > 15 & Y > 15) {
MinTreeCount = 4;
MaxTreeCount = 7;
}
int TreeCount = Random.Range(MinTreeCount, MaxTreeCount);
for (int i = 0; i < TreeCount; i++) {
if (ValidLocations.Count > 0) {
IntVector2 RandomVector = BraveUtility.RandomElement(ValidLocations);
ValidLocations.Remove(RandomVector);
GameObject Tree = Object.Instantiate(BraveUtility.RandomElement(TreeList), RandomVector.ToVector3(), Quaternion.identity);
MajorBreakable m_TreeBreakable = Tree.GetComponent<MajorBreakable>();
Tree.transform.parent = currentRoom.hierarchyParent;
if (Random.value < 0.35f) {
m_TreeBreakable.SpawnItemOnBreak = true;
if (Random.value > 0.3f) {
m_TreeBreakable.ItemIdToSpawnOnBreak = 70;
} else {
m_TreeBreakable.ItemIdToSpawnOnBreak = 73;
}
}
RandomObjectsPlaced++;
if (ValidLocations.Count > 1) { ValidLocations = ValidLocations.Shuffle(); }
if (Tables.Count > 0) {
for (int I = 0; I < Tables.Count; I++) {
FlippableCover currentTable = Tables[I];
if (Vector2.Distance(currentTable.specRigidbody.UnitCenter, m_TreeBreakable.specRigidbody.UnitCenter) < 4) {
Tables.Remove(currentTable);
currentRoom.DeregisterInteractable(currentTable.gameObject.GetComponent<FlippableCover>());
RemoveTableDecorations(currentTable, currentRoom);
Object.Destroy(currentTable.gameObject);
}
}
}
if (currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All).Count > 0) {
foreach (AIActor enemy in currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All)) {
if (Vector2.Distance(enemy.specRigidbody.UnitCenter, m_TreeBreakable.specRigidbody.UnitCenter) < 3) {
PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(enemy.specRigidbody);
}
}
}
} else {
RandomObjectsSkipped++;
}
}
}
private static void PlaceRandomCorpses(Dungeon dungeon, RoomHandler currentRoom) {
PrototypeDungeonRoom.RoomCategory roomCategory = currentRoom.area.PrototypeRoomCategory;
@ -139,7 +175,14 @@ public class ExpandFloorDecorator {
{
if (Random.value <= 0.6f && roomCategory != PrototypeDungeonRoom.RoomCategory.ENTRANCE && roomCategory != PrototypeDungeonRoom.RoomCategory.REWARD) {
List<IntVector2> m_CachedPositions = new List<IntVector2>();
List<IntVector2> m_CachedPositions = ExpandUtility.FindAllValidLocations(dungeon, currentRoom, 2);
if (m_CachedPositions.Count <= 0) {
return;
} else if (m_CachedPositions.Count > 1) {
m_CachedPositions = m_CachedPositions.Shuffle();
}
int MaxCorpseCount = MaxObjectsPerRoom;
if (Random.value <= 0.3f){
MaxCorpseCount = 20;
@ -150,22 +193,22 @@ public class ExpandFloorDecorator {
int CorpseCount = Random.Range(6, MaxObjectsPerRoom);
for (int i = 0; i < CorpseCount; i++) {
IntVector2? RandomVector = GetRandomAvailableCell(dungeon, currentRoom, m_CachedPositions);
if (RandomVector.HasValue) {
if (m_CachedPositions.Count > 0) {
IntVector2 RandomVector = BraveUtility.RandomElement(m_CachedPositions);
m_CachedPositions.Remove(RandomVector);
if (m_CachedPositions.Count > 1) { m_CachedPositions = m_CachedPositions.Shuffle(); }
if (Random.value <= 0.08f) {
GameObject SkeletonCorpse = Object.Instantiate(ExpandPrefabs.Sarco_Skeleton, RandomVector.Value.ToVector3(), Quaternion.identity);
GameObject SkeletonCorpse = Object.Instantiate(ExpandPrefabs.Sarco_Skeleton, RandomVector.ToVector3(), Quaternion.identity);
SkeletonCorpse.GetComponent<tk2dSprite>().HeightOffGround = -1;
SkeletonCorpse.GetComponent<tk2dSprite>().UpdateZDepth();
if (BraveUtility.RandomBool()) { SkeletonCorpse.GetComponent<tk2dSprite>().FlipX = true; }
SkeletonCorpse.transform.parent = currentRoom.hierarchyParent;
RandomObjectsPlaced++;
} else {
GameObject WrithingBulletManCorpse = ExpandObjectDatabase.WrithingBulletman.InstantiateObject(currentRoom, (RandomVector.Value - currentRoom.area.basePosition));
GameObject WrithingBulletManCorpse = ExpandObjectDatabase.WrithingBulletman.InstantiateObject(currentRoom, (RandomVector - currentRoom.area.basePosition));
WrithingBulletManCorpse.transform.parent = currentRoom.hierarchyParent;
RandomObjectsPlaced++;
}
if (m_CachedPositions.Count <= 0) { break; }
} else {
RandomObjectsSkipped++;
}
@ -184,9 +227,48 @@ public class ExpandFloorDecorator {
{
return;
}
List<GameObject> CactiList = new List<GameObject>() { ExpandPrefabs.Cactus_A, ExpandPrefabs.Cactus_B };
CactiList = CactiList.Shuffle();
if (Random.value <= 0.8f | currentRoom.GetRoomName().ToLower().StartsWith("expand_west_entrance")) {
List<IntVector2> m_CachedPositions = new List<IntVector2>();
List<IntVector2> m_CachedPositions = new List<IntVector2>() {
new IntVector2(34, 49),
new IntVector2(29, 43),
new IntVector2(16, 43),
new IntVector2(2, 19),
new IntVector2(49, 17),
new IntVector2(9, 23),
new IntVector2(40, 23),
new IntVector2(30, 20),
new IntVector2(22, 29),
new IntVector2(31, 31),
new IntVector2(14, 14),
new IntVector2(14, 37),
new IntVector2(37, 14),
new IntVector2(37, 37),
new IntVector2(33, 2),
new IntVector2(33, 10),
new IntVector2(3, 17),
new IntVector2(2, 34),
new IntVector2(14, 20),
new IntVector2(16, 39),
new IntVector2(31, 38),
new IntVector2(49, 34),
new IntVector2(38, 29),
new IntVector2(21, 21),
new IntVector2(20, 32),
new IntVector2(31, 22),
};
if (!currentRoom.GetRoomName().ToLower().StartsWith("expand_west_entrance")) {
m_CachedPositions = ExpandUtility.FindAllValidLocations(dungeon, currentRoom, 2, 4, true);
}
if (!currentRoom.GetRoomName().ToLower().StartsWith("expand_west_entrance") && m_CachedPositions.Count <= 0) { return; }
if (m_CachedPositions.Count > 1) { m_CachedPositions = m_CachedPositions.Shuffle(); }
int MaxCactiCount = 12;
int MinCactiCount = 6;
int X = currentRoom.area.dimensions.x;
@ -205,64 +287,33 @@ public class ExpandFloorDecorator {
}
int CactusCount = Random.Range(MinCactiCount, MaxCactiCount);
if (!currentRoom.GetRoomName().ToLower().StartsWith("expand_west_entrance")) {
for (int i = 0; i < CactusCount; i++) {
IntVector2? RandomVector = GetRandomAvailableCell(dungeon, currentRoom, m_CachedPositions, ExitClearence: 4, avoidExits: true);
List<GameObject> CactiList = new List<GameObject>() { ExpandPrefabs.Cactus_A, ExpandPrefabs.Cactus_B };
CactiList = CactiList.Shuffle();
if (RandomVector.HasValue) {
GameObject Cactus = Object.Instantiate(BraveUtility.RandomElement(CactiList), RandomVector.Value.ToVector3(), Quaternion.identity);
if (m_CachedPositions.Count > 0) {
IntVector2 RandomVector = BraveUtility.RandomElement(m_CachedPositions);
m_CachedPositions.Remove(RandomVector);
if (m_CachedPositions.Count > 1) { m_CachedPositions = m_CachedPositions.Shuffle(); }
GameObject Cactus = Object.Instantiate(BraveUtility.RandomElement(CactiList), RandomVector.ToVector3(), Quaternion.identity);
Cactus.transform.parent = currentRoom.hierarchyParent;
RandomObjectsPlaced++;
if (m_CachedPositions.Count <= 0) { break; }
} else {
RandomObjectsSkipped++;
}
}
} else {
for (int i = 0; i < 14; i++) {
if (m_CachedPositions.Count > 0) {
IntVector2 selectedPosition = BraveUtility.RandomElement(m_CachedPositions);
m_CachedPositions.Remove(selectedPosition);
if (m_CachedPositions.Count > 0) { m_CachedPositions = m_CachedPositions.Shuffle(); }
GameObject Cactus = Object.Instantiate(BraveUtility.RandomElement(CactiList), (selectedPosition + currentRoom.area.basePosition).ToVector3(), Quaternion.identity);
Cactus.transform.SetParent(currentRoom.hierarchyParent);
RandomObjectsPlaced++;
} else {
RandomObjectsSkipped++;
}
}
} else {
List<GameObject> CactiList = new List<GameObject>() { ExpandPrefabs.Cactus_A, ExpandPrefabs.Cactus_B };
CactiList = CactiList.Shuffle();
m_CachedPositions = new List<IntVector2>() {
new IntVector2(34, 49),
new IntVector2(29, 43),
new IntVector2(16, 43),
new IntVector2(2, 19),
new IntVector2(49, 17),
new IntVector2(9, 23),
new IntVector2(40, 23),
new IntVector2(30, 20),
new IntVector2(22, 29),
new IntVector2(31, 31),
new IntVector2(14, 14),
new IntVector2(14, 37),
new IntVector2(37, 14),
new IntVector2(37, 37),
new IntVector2(33, 2),
new IntVector2(33, 10),
new IntVector2(3, 17),
new IntVector2(2, 34),
new IntVector2(14, 20),
new IntVector2(16, 39),
new IntVector2(31, 38),
new IntVector2(49, 34),
new IntVector2(38, 29),
new IntVector2(21, 21),
new IntVector2(20, 32),
new IntVector2(31, 22),
};
m_CachedPositions = m_CachedPositions.Shuffle();
for (int i = 0; i < 14; i++) {
IntVector2 selectedPosition = BraveUtility.RandomElement(m_CachedPositions);
m_CachedPositions.Remove(selectedPosition);
m_CachedPositions = m_CachedPositions.Shuffle();
GameObject Cactus = Object.Instantiate(BraveUtility.RandomElement(CactiList), (selectedPosition + currentRoom.area.basePosition).ToVector3(), Quaternion.identity);
Cactus.transform.SetParent(currentRoom.hierarchyParent);
RandomObjectsPlaced++;
}
}
}
}
@ -281,8 +332,15 @@ public class ExpandFloorDecorator {
!currentRoom.GetRoomName().StartsWith("Boss Foyer"))
{
if (Random.value <= 0.6f) {
List<IntVector2> m_CachedPositions = new List<IntVector2>();
List<IntVector2> m_CachedPositions = ExpandUtility.FindAllValidLocations(dungeon, currentRoom, 2, 6, true, PositionRelativeToRoom: true);
if (m_CachedPositions.Count <= 0) {
return;
} else if (m_CachedPositions.Count > 1) {
m_CachedPositions = m_CachedPositions.Shuffle();
}
int MinMushroomCount = 4;
int MaxMushroomCount = 8;
int X = currentRoom.area.dimensions.x;
@ -291,7 +349,7 @@ public class ExpandFloorDecorator {
if (X * Y <= 225) {
MinMushroomCount = 3;
MaxMushroomCount = 5;
} else if (X * Y >= 400 && Random.value <= 0.3f) {
} else if ((X * Y) >= 400 && Random.value <= 0.3f) {
MinMushroomCount = 8;
MaxMushroomCount = 18;
}
@ -299,15 +357,18 @@ public class ExpandFloorDecorator {
int MushroomCount = Random.Range(MinMushroomCount, MaxMushroomCount);
for (int i = 0; i < MushroomCount; i++) {
if (DebugMode) { Debug.Log("[ExpandTheGungeon] Test Mushroom Iteration: " + i.ToString()); }
if (DebugMode) { if (!string.IsNullOrEmpty(currentRoom.GetRoomName())) { ETGModConsole.Log("[ExpandTheGungeon] On Room: " + currentRoom.GetRoomName()); } }
if (m_CachedPositions.Count > 0) {
if (DebugMode) { Debug.Log("[ExpandTheGungeon] Test Mushroom Iteration: " + i.ToString()); }
if (DebugMode) { if (!string.IsNullOrEmpty(currentRoom.GetRoomName())) { ETGModConsole.Log("[ExpandTheGungeon] On Room: " + currentRoom.GetRoomName()); } }
IntVector2? RandomVector = GetRandomAvailableCell(dungeon, currentRoom, m_CachedPositions, 1, 6, avoidExits: true, PositionRelativeToRoom: true);
IntVector2 RandomVector = BraveUtility.RandomElement(m_CachedPositions);
m_CachedPositions.Remove(RandomVector);
if (m_CachedPositions.Count > 1) { m_CachedPositions = m_CachedPositions.Shuffle(); }
if (RandomVector.HasValue) {
if (DebugMode) { ETGModConsole.Log("[ExpandTheGungeon] Valid Location found. Placing Mushroom..."); }
try {
GameObject alarmMushroomObject = ExpandPrefabs.EXAlarmMushroom.GetComponent<ExpandAlarmMushroomPlacable>().InstantiateObject(currentRoom, RandomVector.Value, true);
GameObject alarmMushroomObject = ExpandPrefabs.EXAlarmMushroom.GetComponent<ExpandAlarmMushroomPlacable>().InstantiateObject(currentRoom, RandomVector, true);
alarmMushroomObject.transform.parent = currentRoom.hierarchyParent;
ExpandAlarmMushroomPlacable m_AlarmMushRoomPlacable = ExpandPrefabs.EXAlarmMushroom.GetComponent<ExpandAlarmMushroomPlacable>();
m_AlarmMushRoomPlacable.ConfigureOnPlacement(currentRoom);
@ -319,9 +380,8 @@ public class ExpandFloorDecorator {
}
RandomObjectsPlaced++;
if (DebugMode) { Debug.Log("[ExpandTheGungeon] Mushroom successfully placed!"); }
if (m_CachedPositions.Count <= 0) { break; }
} else {
if (DebugMode) { Debug.Log("[ExpandTheGungeon] No valid cells found. Mushroom skipped!"); }
if (DebugMode) { Debug.Log("[ExpandTheGungeon] No more valid cells found. Mushroom skipped!"); }
RandomObjectsSkipped++;
}
}
@ -331,23 +391,6 @@ public class ExpandFloorDecorator {
private static void PlaceRandomOfficeSupplies(Dungeon dungeon, RoomHandler currentRoom) {
PrototypeDungeonRoom.RoomCategory roomCategory = currentRoom.area.PrototypeRoomCategory;
Dungeon NakatomiPrefab = ExpandDungeonPrefabs.LoadOfficialDungeonPrefab("Base_Nakatomi");
List<GameObject> m_ObjectList = new List<GameObject>();
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[6].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[9].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[10].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[11].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[12].objectReference);
m_ObjectList.Add(ExpandObjectDatabase.KitchenChair_Front);
m_ObjectList.Add(ExpandObjectDatabase.KitchenChair_Left);
m_ObjectList.Add(ExpandObjectDatabase.KitchenChair_Right);
m_ObjectList.Add(ExpandObjectDatabase.KitchenCounter);
m_ObjectList = m_ObjectList.Shuffle();
NakatomiPrefab = null;
int MaxObjectsPerRoom = 8;
@ -355,7 +398,27 @@ public class ExpandFloorDecorator {
!currentRoom.IsMaintenanceRoom() && !currentRoom.GetRoomName().StartsWith("Boss Foyer") && !currentRoom.PrecludeTilemapDrawing &&
roomCategory != PrototypeDungeonRoom.RoomCategory.REWARD && Random.value <= 0.6f)
{
List<IntVector2> m_CachedPositions = new List<IntVector2>();
List<IntVector2> m_CachedPositions = ExpandUtility.FindAllValidLocations(dungeon, currentRoom, 2);
if (m_CachedPositions.Count <= 0) {
return;
} else if (m_CachedPositions.Count > 1) {
m_CachedPositions = m_CachedPositions.Shuffle();
}
Dungeon NakatomiPrefab = ExpandDungeonPrefabs.LoadOfficialDungeonPrefab("Base_Nakatomi");
List<GameObject> m_ObjectList = new List<GameObject>();
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[6].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[9].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[10].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[11].objectReference);
m_ObjectList.Add(NakatomiPrefab.stampData.objectStamps[12].objectReference);
m_ObjectList.Add(ExpandObjectDatabase.KitchenChair_Front);
m_ObjectList.Add(ExpandObjectDatabase.KitchenChair_Left);
m_ObjectList.Add(ExpandObjectDatabase.KitchenChair_Right);
m_ObjectList.Add(ExpandObjectDatabase.KitchenCounter);
m_ObjectList = m_ObjectList.Shuffle();
NakatomiPrefab = null;
int MaxObjectCount = MaxObjectsPerRoom;
if (Random.value <= 0.3f){
MaxObjectCount = 16;
@ -366,13 +429,13 @@ public class ExpandFloorDecorator {
int ObjectCount = Random.Range(6, MaxObjectsPerRoom);
for (int i = 0; i < ObjectCount; i++) {
IntVector2? RandomVector = GetRandomAvailableCell(dungeon, currentRoom, m_CachedPositions);
if (RandomVector.HasValue) {
GameObject selectedObject = Object.Instantiate(BraveUtility.RandomElement(m_ObjectList), RandomVector.Value.ToVector3(), Quaternion.identity);
if (m_CachedPositions.Count > 0) {
IntVector2 RandomVector = BraveUtility.RandomElement(m_CachedPositions);
m_CachedPositions.Remove(RandomVector);
if (m_CachedPositions.Count > 1) { m_CachedPositions = m_CachedPositions.Shuffle(); }
GameObject selectedObject = Object.Instantiate(BraveUtility.RandomElement(m_ObjectList), RandomVector.ToVector3(), Quaternion.identity);
selectedObject.transform.parent = currentRoom.hierarchyParent;
RandomObjectsPlaced++;
if (m_CachedPositions.Count <= 0) { break; }
} else {
RandomObjectsSkipped++;
}
@ -380,56 +443,76 @@ public class ExpandFloorDecorator {
}
}
private static IntVector2? GetRandomAvailableCell(Dungeon dungeon, RoomHandler currentRoom, List<IntVector2> validCellsCached, int Clearence = 1, int ExitClearence = 10, bool avoidExits = false, bool avoidPits = true, bool PositionRelativeToRoom = false, bool isCactusDecoration = false) {
if (dungeon == null | currentRoom == null | validCellsCached == null) { return null; }
try {
if (validCellsCached.Count == 0) {
for (int X = 0; X < currentRoom.area.dimensions.x; X++) {
for (int Y = 0; Y < currentRoom.area.dimensions.y; Y++) {
bool isInvalid = false;
IntVector2 TargetPosition = new IntVector2(currentRoom.area.basePosition.x + X, currentRoom.area.basePosition.y + Y);
if (!validCellsCached.Contains(TargetPosition)) {
RoomHandler ActualRoom = dungeon.data.GetAbsoluteRoomFromPosition(TargetPosition);
for (int x = 0; x < Clearence; x++) {
for (int y = 0; y < Clearence; y++) {
IntVector2 intVector = (TargetPosition + new IntVector2(x, y));
if (dungeon.data.CheckInBoundsAndValid(intVector)) {
CellData cellData = dungeon.data[intVector];
if (cellData.parentRoom == null | cellData.type != CellType.FLOOR | cellData.isOccupied | !cellData.IsPassable ) { isInvalid = true; }
if (ActualRoom != currentRoom | cellData.HasPitNeighbor(dungeon.data)) { isInvalid = true; }
if (cellData.cellVisualData.floorType == CellVisualData.CellFloorType.Water/*| cellData.cellVisualData.floorTileOverridden*/) { isInvalid = true; }
if (cellData.HasWallNeighbor()) { isInvalid = true; }
} else {
isInvalid = true;
}
}
}
if (!isInvalid && avoidExits) {
for (int x = 0; x < ExitClearence; x++) {
for (int y = 0; y < ExitClearence; y++) {
IntVector2 intVector = (TargetPosition + new IntVector2(x, y));
if (dungeon.data.CheckInBoundsAndValid(intVector)) {
CellData cellData = dungeon.data[intVector];
if (cellData.isExitCell) { isInvalid = true; }
}
}
}
}
if (!isInvalid) { validCellsCached.Add(TargetPosition); }
private static void ReplaceTables() {
FlippableCover[] AllTables = Object.FindObjectsOfType<FlippableCover>();
if (AllTables != null && AllTables.Length > 0) {
for (int i = 0; i < AllTables.Length; i++) {
Vector3 CachedTablePosition = AllTables[i].gameObject.transform.position;
List<GameObject> m_surfaceObjects = new List<GameObject>();
bool ReplaceThisTable = false;
bool IsVerticalTable = false;
bool TableHadDecoration = false;
bool TableWasDecorated = false;
float ChanceToDecorate = 1;
GameObject Table = null;
RoomHandler parentRoom = AllTables[i].transform.position.GetAbsoluteRoom();
if (AllTables[i].gameObject.name.ToLower().Contains("table_vertical") | AllTables[i].gameObject.name.ToLower().Contains("coffin_vertical")) {
ReplaceThisTable = true;
IsVerticalTable = true;
} else if (AllTables[i].gameObject.name.ToLower().Contains("table_horizontal") | AllTables[i].gameObject.name.ToLower().Contains("coffin_horizontal")) {
ReplaceThisTable = true;
}
if (ReplaceThisTable) {
SurfaceDecorator m_TableDecorator = AllTables[i].gameObject.GetComponent<SurfaceDecorator>();
if (m_TableDecorator) {
m_surfaceObjects = ReflectionHelpers.ReflectGetField<List<GameObject>>(typeof(SurfaceDecorator), "m_surfaceObjects", m_TableDecorator);
if (m_surfaceObjects != null && m_surfaceObjects.Count > 0) {
TableWasDecorated = true;
for (int I = 0; I < m_surfaceObjects.Count; I++) { Object.Destroy(m_surfaceObjects[I]); }
}
ChanceToDecorate = m_TableDecorator.chanceToDecorate;
TableHadDecoration = true;
}
parentRoom.DeregisterInteractable(AllTables[i]);
Object.Destroy(AllTables[i].gameObject);
if (IsVerticalTable) {
Table = Object.Instantiate(ExpandObjectDatabase.TableVerticalSteel, CachedTablePosition, Quaternion.identity);
} else {
Table = Object.Instantiate(ExpandObjectDatabase.TableHorizontalSteel, CachedTablePosition, Quaternion.identity);
}
if (Table) {
FlippableCover NewTable = Table.GetComponent<FlippableCover>();
Table.transform.parent = parentRoom.hierarchyParent;
NewTable.ConfigureOnPlacement(parentRoom);
if (TableHadDecoration) {
SurfaceDecorator newDecorator = Table.GetComponent<SurfaceDecorator>();
if (newDecorator) {
if (TableWasDecorated) {
newDecorator.chanceToDecorate = 1;
} else {
newDecorator.chanceToDecorate = ChanceToDecorate;
}
newDecorator.Decorate(parentRoom);
}
}
parentRoom.RegisterInteractable(NewTable);
}
}
}
} catch (System.Exception){
if (DebugMode) { Debug.Log("GetRandomAvailableCell Exception while looking for valid cells in current room."); }
}
if (validCellsCached.Count > 0) {
IntVector2 SelectedCell = BraveUtility.RandomElement(validCellsCached);
validCellsCached.Remove(SelectedCell);
if (PositionRelativeToRoom) { SelectedCell -= currentRoom.area.basePosition; }
return SelectedCell;
} else {
return null;
}
private static void RemoveTableDecorations(FlippableCover table, RoomHandler currentRoom) {
for (int i = 0; i < StaticReferenceManager.AllMinorBreakables.Count; i++) {
if (!StaticReferenceManager.AllMinorBreakables[i].IsBroken && !StaticReferenceManager.AllMinorBreakables[i].debris && StaticReferenceManager.AllMinorBreakables[i].transform.position.GetAbsoluteRoom() == currentRoom) {
SpeculativeRigidbody specRigidbody = StaticReferenceManager.AllMinorBreakables[i].specRigidbody;
if (specRigidbody && table.specRigidbody) {
if (BraveMathCollege.DistBetweenRectangles(specRigidbody.UnitBottomLeft, specRigidbody.UnitDimensions, table.specRigidbody.UnitBottomLeft, table.specRigidbody.UnitDimensions) < 0.5f) {
StaticReferenceManager.AllMinorBreakables.Remove(StaticReferenceManager.AllMinorBreakables[i]);
Object.Destroy(StaticReferenceManager.AllMinorBreakables[i].gameObject);
}
}
}
}
}
}

View File

@ -49,9 +49,9 @@ public class ExpandJunkEnemySpawneer {
if (RandomGlitchEnemyVector.HasValue) {
if (Random.value <= 0.5f) {
ExpandGlitchedEnemies.Instance.SpawnGlitchedRaccoon(currentRoom, RandomGlitchEnemyVector.Value, false, AIActor.AwakenAnimationType.Spawn, true);
ExpandEnemyCorruptor.Instance.SpawnGlitchedRaccoon(currentRoom, RandomGlitchEnemyVector.Value, false, AIActor.AwakenAnimationType.Spawn, true);
} else {
ExpandGlitchedEnemies.Instance.SpawnGlitchedTurkey(currentRoom, RandomGlitchEnemyVector.Value, false, AIActor.AwakenAnimationType.Spawn, true);
ExpandEnemyCorruptor.Instance.SpawnGlitchedTurkey(currentRoom, RandomGlitchEnemyVector.Value, false, AIActor.AwakenAnimationType.Spawn, true);
}
} else { RandomEnemiesSkipped++; }

View File

@ -61,22 +61,22 @@ public class ExpandPlaceGlitchedEnemies {
if (RandomGlitchEnemyVector.HasValue) {
ExpandGlitchedEnemies.Instance.SpawnRandomGlitchEnemy(currentRoom, RandomGlitchEnemyVector.Value, false, AIActor.AwakenAnimationType.Spawn);
ExpandEnemyCorruptor.Instance.SpawnRandomGlitchEnemy(currentRoom, RandomGlitchEnemyVector.Value, false, AIActor.AwakenAnimationType.Spawn);
} else { RandomEnemiesSkipped++; }
if (RandomGlitchEnemyVector2.HasValue && Random.value <= BonusGlitchEnemyOdds) {
ExpandGlitchedEnemies.Instance.SpawnRandomGlitchEnemy(currentRoom, RandomGlitchEnemyVector2.Value, false, AIActor.AwakenAnimationType.Spawn);
ExpandEnemyCorruptor.Instance.SpawnRandomGlitchEnemy(currentRoom, RandomGlitchEnemyVector2.Value, false, AIActor.AwakenAnimationType.Spawn);
} else { RandomEnemiesSkipped++; }
if (RandomGlitchEnemyVector3.HasValue && Random.value <= GlitchedBossOdds) {
ExpandGlitchedEnemies.Instance.SpawnRandomGlitchBoss(currentRoom, RandomGlitchEnemyVector3.Value, false, AIActor.AwakenAnimationType.Spawn);
ExpandEnemyCorruptor.Instance.SpawnRandomGlitchBoss(currentRoom, RandomGlitchEnemyVector3.Value, false, AIActor.AwakenAnimationType.Spawn);
}
if (RandomGlitchEnemyVector4.HasValue && Random.value <= GlitchedBossOdds) {
if (Random.value <= 0.65f) {
ExpandGlitchedEnemies.Instance.SpawnGlitchedObjectAsEnemy(currentRoom, RandomGlitchEnemyVector4.Value, false, AIActor.AwakenAnimationType.Spawn);
ExpandEnemyCorruptor.Instance.SpawnGlitchedObjectAsEnemy(currentRoom, RandomGlitchEnemyVector4.Value, false, AIActor.AwakenAnimationType.Spawn);
} else {
ExpandGlitchedEnemies.Instance.SpawnGlitchedPlayerAsEnemy(currentRoom, RandomGlitchEnemyVector4.Value, false, AIActor.AwakenAnimationType.Spawn);
ExpandEnemyCorruptor.Instance.SpawnGlitchedPlayerAsEnemy(currentRoom, RandomGlitchEnemyVector4.Value, false, AIActor.AwakenAnimationType.Spawn);
}
}

View File

@ -561,7 +561,7 @@ public class ExpandPlaceWallMimic {
if (targetActor.GetComponent<ExpandSpawnGlitchObjectOnDeath>() == null) {
if (UnityEngine.Random.value <= 0.25) { targetActor.gameObject.AddComponent<ExpandSpawnGlitchObjectOnDeath>(); }
}
ExpandGlitchedEnemies.GlitchExistingEnemy(targetActor);
ExpandEnemyCorruptor.GlitchExistingEnemy(targetActor);
if (UnityEngine.Random.value <= 0.1f && targetActor.EnemyGuid != "4d37ce3d666b4ddda8039929225b7ede" && targetActor.EnemyGuid != "19b420dec96d4e9ea4aebc3398c0ba7a" && targetActor.GetComponent<ExplodeOnDeath>() == null && targetActor.GetComponent<ExpandSpawnGlitchObjectOnDeath>() == null && targetActor.GetComponent<ExpandSpawnGlitchEnemyOnDeath>() == null) {
try { targetActor.gameObject.AddComponent<ExpandExplodeOnDeath>(); } catch (Exception) { }

View File

@ -14,6 +14,7 @@
using ExpandTheGungeon.ExpandUtilities;
using ExpandTheGungeon.ExpandDungeonFlows;
using static ExpandTheGungeon.ExpandUtilities.ReflectionHelpers;
using tk2dRuntime.TileMap;
// using Pathfinding;
namespace ExpandTheGungeon.ExpandMain {
@ -390,6 +391,7 @@ public class ExpandSharedHooks {
typeof(ExpandSharedHooks).GetMethod(nameof(PixelatorStartHook), BindingFlags.NonPublic | BindingFlags.Instance),
typeof(Pixelator)
);*/
return;
}
@ -1191,53 +1193,30 @@ public class ExpandSharedHooks {
}
private bool IsValidJungleBorderCell(CellData current, Dungeon d, int ix, int iy) {
bool isValid = false;
try {
isValid = !current.cellVisualData.ceilingHasBeenProcessed && !IsCardinalBorder(current, d, ix, iy) && current.type == CellType.WALL && (iy < 2 || !d.data.isFaceWallLower(ix, iy)) && !d.data.isTopDiagonalWall(ix, iy);
} catch (Exception ex) {
if (ExpandSettings.debugMode) {
Debug.Log("[ExpandTheGungeon] Excpetion caught in TK2DDungeonAssembler.IsValidJungleBorderCell!");
Debug.LogException(ex);
}
return false;
}
return isValid;
return !current.cellVisualData.ceilingHasBeenProcessed && !IsCardinalBorder(current, d, ix, iy) && current.type == CellType.WALL && (iy < 2 || !d.data.isFaceWallLower(ix, iy)) && !d.data.isTopDiagonalWall(ix, iy);
}
private bool IsValidJungleOcclusionCell(TK2DDungeonAssembler assembler, CellData current, Dungeon d, int ix, int iy) {
bool isValid = false;
try {
isValid = assembler.BCheck(d, ix, iy, 1) && (!current.cellVisualData.ceilingHasBeenProcessed && !current.cellVisualData.occlusionHasBeenProcessed) && (current.type != CellType.WALL || IsCardinalBorder(current, d, ix, iy) || (iy > 2 && (d.data.isFaceWallLower(ix, iy) || d.data.isFaceWallHigher(ix, iy))));
} catch (Exception ex) {
if (ExpandSettings.debugMode) {
Debug.Log("[ExpandTheGungeon] Excpetion caught in TK2DDungeonAssembler.IsValidJungleOcclusionCell!");
Debug.LogException(ex);
}
return false;
}
return isValid;
return assembler.BCheck(d, ix, iy, 1) && (!current.cellVisualData.ceilingHasBeenProcessed && !current.cellVisualData.occlusionHasBeenProcessed) && (current.type != CellType.WALL || IsCardinalBorder(current, d, ix, iy) || (iy > 2 && (d.data.isFaceWallLower(ix, iy) || d.data.isFaceWallHigher(ix, iy))));
}
private bool IsCardinalBorder(CellData current, Dungeon d, int ix, int iy) {
try {
bool flag = d.data.isTopWall(ix, iy);
flag = (flag && !d.data[ix, iy + 1].cellVisualData.shouldIgnoreBorders);
bool flag2 = (!d.data.isWallRight(ix, iy) && !d.data.isRightTopWall(ix, iy)) || d.data.isFaceWallHigher(ix + 1, iy) || d.data.isFaceWallLower(ix + 1, iy);
flag2 = (flag2 && !d.data[ix + 1, iy].cellVisualData.shouldIgnoreBorders);
bool flag3 = iy > 3 && d.data.isFaceWallHigher(ix, iy - 1);
flag3 = (flag3 && !d.data[ix, iy - 1].cellVisualData.shouldIgnoreBorders);
bool flag4 = (!d.data.isWallLeft(ix, iy) && !d.data.isLeftTopWall(ix, iy)) || d.data.isFaceWallHigher(ix - 1, iy) || d.data.isFaceWallLower(ix - 1, iy);
flag4 = (flag4 && !d.data[ix - 1, iy].cellVisualData.shouldIgnoreBorders);
return flag || flag2 || flag3 || flag4;
} catch (Exception ex) {
if (ExpandSettings.debugMode) {
Debug.Log("[ExpandTheGungeon] Excpetion caught in TK2DDungeonAssembler.IsCardinalBorder!");
Debug.LogException(ex);
}
return false;
}
// Something changed in AG&D floor generation. Some of these border cells are null on Jungle for unknown reasons.
// Returning true if any are null avoids future exceptions in IsValidJungleBorderCell!
// Seems to impact hidden tree top ceiling sprites at the edge of the tilemap.
// The visual difference is subtle and impossible for the player to even see if the occlusion system is active.
if (d.data[ix, iy + 1] == null | d.data[ix + 1, iy] == null | d.data[ix, iy - 1] == null | d.data[ix - 1, iy] == null) { return true; }
bool Cell1 = d.data.isTopWall(ix, iy);
bool Cell2 = (!d.data.isWallRight(ix, iy) && !d.data.isRightTopWall(ix, iy)) || d.data.isFaceWallHigher(ix + 1, iy) || d.data.isFaceWallLower(ix + 1, iy);
bool Cell3 = iy > 3 && d.data.isFaceWallHigher(ix, iy - 1);
bool Cell4 = (!d.data.isWallLeft(ix, iy) && !d.data.isLeftTopWall(ix, iy)) || d.data.isFaceWallHigher(ix - 1, iy) || d.data.isFaceWallLower(ix - 1, iy);
Cell1 = (Cell1 && !d.data[ix, iy + 1].cellVisualData.shouldIgnoreBorders);
Cell2 = (Cell2 && !d.data[ix + 1, iy].cellVisualData.shouldIgnoreBorders);
Cell3 = (Cell3 && !d.data[ix, iy - 1].cellVisualData.shouldIgnoreBorders);
Cell4 = (Cell4 && !d.data[ix - 1, iy].cellVisualData.shouldIgnoreBorders);
return Cell1 || Cell2 || Cell3 || Cell4;
}
private TileIndexGrid GetTypeBorderGridForBorderIndexHook(TK2DDungeonAssembler self, CellData current, Dungeon d, out int usedVisualType) {
TileIndexGrid roomCeilingBorderGrid;
@ -1831,7 +1810,7 @@ public class ExpandSharedHooks {
m_activeTraps.Clear();
}
}
/*private void PixelatorStartHook(Action<Pixelator>orig, Pixelator self) {
if (GameManager.Instance.Dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.JUNGLEGEON) {
// self.UseTexturedOcclusion = true;

View File

@ -91,7 +91,7 @@ public class ExpandObjectMods {
if (!ExpandLists.DontGlitchMeList.Contains(enemy.EnemyGuid) && enemy.GetAbsoluteParentRoom() != null && !string.IsNullOrEmpty(enemy.GetAbsoluteParentRoom().GetRoomName()) && enemy.GetAbsoluteParentRoom().GetRoomName().ToLower().StartsWith("corrupted")) {
if (Random.value <= 0.6f) {
ExpandShaders.Instance.BecomeGlitched(enemy, 0.04f, 0.07f, 0.05f, 0.07f, 0.05f);
ExpandGlitchedEnemies.GlitchExistingEnemy(enemy);
ExpandEnemyCorruptor.GlitchExistingEnemy(enemy);
}
if (Random.value <= 0.25f && !ExpandLists.blobsAndCritters.Contains(enemy.EnemyGuid) && enemy.GetComponent<ExpandSpawnGlitchObjectOnDeath>() == null) {
enemy.gameObject.AddComponent<ExpandSpawnGlitchObjectOnDeath>();
@ -124,7 +124,7 @@ public class ExpandObjectMods {
if (!ExpandLists.DontGlitchMeList.Contains(enemy.EnemyGuid)) {
if (Random.value <= 0.6f) {
ExpandShaders.Instance.BecomeGlitched(enemy, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorIntensityFloat);
ExpandGlitchedEnemies.GlitchExistingEnemy(enemy);
ExpandEnemyCorruptor.GlitchExistingEnemy(enemy);
}
if (Random.value <= 0.25f && !ExpandLists.blobsAndCritters.Contains(enemy.EnemyGuid) && enemy.GetComponent<ExpandSpawnGlitchObjectOnDeath>() == null) {
enemy.gameObject.AddComponent<ExpandSpawnGlitchObjectOnDeath>();

View File

@ -0,0 +1,56 @@
using UnityEngine;
namespace ExpandTheGungeon.ExpandPrefab {
public class ExpandAmmonomiconDatabase {
public struct EnemyEntryData {
public int ForcedPositionInAmmonomicon;
public bool IsNormalEnemy;
public bool IsInBossTab;
public bool TabSpriteIsTexture;
public DungeonPlaceableBehaviour.PlaceableDifficulty EnemyDifficulty;
public string TabSprite;
public string FullArtSprite;
public string EnemyName;
public string smallDescription;
public string bigDescription;
}
public static EnemyEntryData BootlegBullat;
public static EnemyEntryData BootlegBulletKin;
public static EnemyEntryData BootlegShotgunKinRed;
public static EnemyEntryData BootlegShotgunKinBlue;
public static EnemyEntryData HotShotBulletKin;
public static EnemyEntryData HotShotShotgunKin;
public static EnemyEntryData HotShotCultist;
public static EnemyEntryData Cronenberg;
public static EnemyEntryData CronenbergAngry;
public static EnemyEntryData ClownKin;
public static EnemyEntryData Chameleon;
public static EnemyEntryData Skusketling;
public static EnemyEntryData WestBrosAngel;
public static EnemyEntryData WestBrosNome;
public static EnemyEntryData WestBrosTuc;
public static void Init(AssetBundle expandSharedAssets1) {
BootlegBullat = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("BootlegBullat_AmmonomiconData").text);
BootlegBulletKin = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("BootlegBulletKin_AmmonomiconData").text);
BootlegShotgunKinRed = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("BootlegShotgunManRed_AmmonomiconData").text);
BootlegShotgunKinBlue = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("BootlegShotgunManBlue_AmmonomiconData").text);
HotShotBulletKin = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("HotShotBulletKin_AmmonomiconData").text);
HotShotShotgunKin = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("HotShotShotgunKin_AmmonomiconData").text);
HotShotCultist = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("HotShotCultist_AmmonomiconData").text);
Cronenberg = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("Cronenberg_AmmonomiconData").text);
CronenbergAngry = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("CronenbergAngry_AmmonomiconData").text);
ClownKin = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("ClownKin_AmmonomiconData").text);
Chameleon = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("Chameleon_AmmonomiconData").text);
Skusketling = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("Skusketling_AmmonomiconData").text);
WestBrosAngel = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("WestBrosAngel_AmmonomiconData").text);
WestBrosNome = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("WestBrosNome_AmmonomiconData").text);
WestBrosTuc = JsonUtility.FromJson<EnemyEntryData>(expandSharedAssets1.LoadAsset<TextAsset>("WestBrosTuc_AmmonomiconData").text);
}
}
}

View File

@ -1,218 +0,0 @@
using System.Collections.Generic;
using UnityEngine;
namespace ExpandTheGungeon.ExpandPrefab {
public class ExpandDungeonCollections {
public static tk2dSpriteCollectionData ENV_Tileset_Jungle(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Jungle/ENV_Tileset_Jungle"), m_NewDungeonCollection);
Material m_LitCutoutPerp = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
m_LitCutoutPerp.mainTexture = tileSetTexture;
m_LitCutoutPerp.SetFloat("_Cutoff", 0.5f);
m_LitCutoutPerp.SetFloat("_MaxValue", 1);
m_LitCutoutPerp.SetFloat("_Perpendicular", 1);
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_NewDungeonCollection.materials = new Material[] { m_LitCutoutPerp, m_LitBlend };
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
string[] m_MaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Jungle/ENV_Tileset_Jungle_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_MaterialTable[i].Contains("lit cutout perp")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutoutPerp;
} else if (m_MaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutoutPerp;
}
}
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_Belly(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
Material m_UnlitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_UnlitCutout.mainTexture = tileSetTexture;
m_UnlitCutout.SetFloat("_Cutoff", 0.5f);
m_UnlitCutout.SetFloat("_Perpendicular", 1);
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Belly/ENV_Tileset_Belly"), m_NewDungeonCollection);
string[] m_BellyMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Belly/ENV_Tileset_Belly_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_BellyMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_BellyMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_BellyMaterialTable[i].Contains("unlit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_UnlitCutout;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_UnlitCutout };
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_West(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/West/ENV_Tileset_West"), m_NewDungeonCollection);
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
Material m_UnlitTransparent = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_UnlitTransparent.mainTexture = tileSetTexture;
m_UnlitTransparent.SetFloat("_Cutoff", 0.5f);
m_UnlitTransparent.SetFloat("_Perpendicular", 1);
string[] m_WestMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/West/ENV_Tileset_West_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_WestMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_WestMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_WestMaterialTable[i].Contains("unlit transparent")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_UnlitTransparent;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_UnlitTransparent };
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_Phobos(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Phobos/ENV_Tileset_Phobos"), m_NewDungeonCollection);
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
Material m_Unlit = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_Unlit.mainTexture = tileSetTexture;
m_Unlit.SetFloat("_Cutoff", 0.5f);
m_Unlit.SetFloat("_Perpendicular", 1);
string[] m_WestMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Phobos/ENV_Tileset_Phobos_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_WestMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_WestMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_WestMaterialTable[i].Contains("unlit")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_Unlit;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_Unlit};
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_Office(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Nakatomi/ENV_Tileset_Nakatomi"), m_NewDungeonCollection);
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
Material m_Unlit = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_Unlit.mainTexture = tileSetTexture;
m_Unlit.SetFloat("_Cutoff", 0.5f);
m_Unlit.SetFloat("_Perpendicular", 1);
string[] m_WestMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Nakatomi/ENV_Tileset_Nakatomi_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_WestMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_WestMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_WestMaterialTable[i].Contains("unlit")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_Unlit;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_Unlit};
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
}
}

View File

@ -19,6 +19,218 @@ public class ExpandDungeonPrefabs {
public static GameObject Base_Phobos;
public static GameObject Base_Office;
public static Hook getOrLoadByName_Hook;
public static Hook dungeonStartHook;
public static tk2dSpriteCollectionData ENV_Tileset_Jungle(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Jungle/ENV_Tileset_Jungle"), m_NewDungeonCollection);
Material m_LitCutoutPerp = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
m_LitCutoutPerp.mainTexture = tileSetTexture;
m_LitCutoutPerp.SetFloat("_Cutoff", 0.5f);
m_LitCutoutPerp.SetFloat("_MaxValue", 1);
m_LitCutoutPerp.SetFloat("_Perpendicular", 1);
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_NewDungeonCollection.materials = new Material[] { m_LitCutoutPerp, m_LitBlend };
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
string[] m_MaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Jungle/ENV_Tileset_Jungle_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_MaterialTable[i].Contains("lit cutout perp")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutoutPerp;
} else if (m_MaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutoutPerp;
}
}
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_Belly(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
Material m_UnlitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_UnlitCutout.mainTexture = tileSetTexture;
m_UnlitCutout.SetFloat("_Cutoff", 0.5f);
m_UnlitCutout.SetFloat("_Perpendicular", 1);
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Belly/ENV_Tileset_Belly"), m_NewDungeonCollection);
string[] m_BellyMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Belly/ENV_Tileset_Belly_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_BellyMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_BellyMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_BellyMaterialTable[i].Contains("unlit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_UnlitCutout;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_UnlitCutout };
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_West(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/West/ENV_Tileset_West"), m_NewDungeonCollection);
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
Material m_UnlitTransparent = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_UnlitTransparent.mainTexture = tileSetTexture;
m_UnlitTransparent.SetFloat("_Cutoff", 0.5f);
m_UnlitTransparent.SetFloat("_Perpendicular", 1);
string[] m_WestMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/West/ENV_Tileset_West_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_WestMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_WestMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_WestMaterialTable[i].Contains("unlit transparent")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_UnlitTransparent;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_UnlitTransparent };
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_Phobos(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Phobos/ENV_Tileset_Phobos"), m_NewDungeonCollection);
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
Material m_Unlit = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_Unlit.mainTexture = tileSetTexture;
m_Unlit.SetFloat("_Cutoff", 0.5f);
m_Unlit.SetFloat("_Perpendicular", 1);
string[] m_WestMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Phobos/ENV_Tileset_Phobos_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_WestMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_WestMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_WestMaterialTable[i].Contains("unlit")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_Unlit;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_Unlit};
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
public static tk2dSpriteCollectionData ENV_Tileset_Office(GameObject TargetObject, Texture2D tileSetTexture, AssetBundle sharedAssets, AssetBundle expandSharedAssets1) {
tk2dSpriteCollectionData m_NewDungeonCollection = TargetObject.AddComponent<tk2dSpriteCollectionData>();
JsonUtility.FromJsonOverwrite(ExpandAssets.DeserializeJSONDataFromAssetBundle(expandSharedAssets1, "TilesetData/Nakatomi/ENV_Tileset_Nakatomi"), m_NewDungeonCollection);
Material m_LitCutout = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTk2dCustomFalloffCutout"));
Material m_LitBlend = new Material(sharedAssets.LoadAsset<Shader>("BraveLitTK2dCustomFalloff"));
Material m_Unlit = new Material(sharedAssets.LoadAsset<Shader>("BraveUnlitCutout"));
m_LitCutout.mainTexture = tileSetTexture;
m_LitCutout.SetFloat("_Cutoff", 0.5f);
m_LitCutout.SetFloat("_MaxValue", 1);
m_LitCutout.SetFloat("_Perpendicular", 1);
m_LitBlend.mainTexture = tileSetTexture;
m_LitBlend.SetFloat("_Cutoff", 0.5f);
m_LitBlend.SetFloat("_Perpendicular", 1);
m_Unlit.mainTexture = tileSetTexture;
m_Unlit.SetFloat("_Cutoff", 0.5f);
m_Unlit.SetFloat("_Perpendicular", 1);
string[] m_WestMaterialTable = ExpandAssets.GetLinesFromAssetBundle(expandSharedAssets1, "ExpandSerializedData/TilesetData/Nakatomi/ENV_Tileset_Nakatomi_MaterialTable");
for (int i = 0; i < m_NewDungeonCollection.spriteDefinitions.Length; i++) {
if (m_WestMaterialTable[i].Contains("lit cutout")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
} else if (m_WestMaterialTable[i].Contains("lit blend")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitBlend;
} else if (m_WestMaterialTable[i].Contains("unlit")) {
m_NewDungeonCollection.spriteDefinitions[i].material = m_Unlit;
} else {
Debug.Log("[ExpandTheGungeon] ERROR: sprite id " + i + " did not have a matching material name in lookup table!");
m_NewDungeonCollection.spriteDefinitions[i].material = m_LitCutout;
}
}
m_NewDungeonCollection.materials = new Material[] { m_LitCutout, m_LitBlend, m_Unlit};
m_NewDungeonCollection.textures = new Texture[] { tileSetTexture };
sharedAssets = null;
return m_NewDungeonCollection;
}
public static Dungeon GetOrLoadByNameHook(Func<string, Dungeon>orig, string name) {
switch (name.ToLower()) {
case "base_space":
@ -59,9 +271,6 @@ public class ExpandDungeonPrefabs {
return component;
}
public static Hook getOrLoadByName_Hook;
public static Hook dungeonStartHook;
public static void InitDungoenPrefabs(AssetBundle expandSharedAuto1, AssetBundle sharedAssets1, AssetBundle sharedAssets2, AssetBundle braveResources) {
Base_Space = expandSharedAuto1.LoadAsset<GameObject>("Base_Space");
Base_Jungle = expandSharedAuto1.LoadAsset<GameObject>("Base_Jungle");
@ -71,7 +280,7 @@ public class ExpandDungeonPrefabs {
Base_Office = expandSharedAuto1.LoadAsset<GameObject>("Base_Office");
InitSpaceDungeon(Base_Space, LoadOfficialDungeonPrefab("Base_ResourcefulRat"));
InitJungleDungeon(expandSharedAuto1, braveResources, Base_Jungle, LoadOfficialDungeonPrefab("Base_ResourcefulRat"));
InitJungleDungeon(expandSharedAuto1, braveResources, sharedAssets2, Base_Jungle, LoadOfficialDungeonPrefab("Base_ResourcefulRat"));
InitBellyDungeon(expandSharedAuto1, sharedAssets1, sharedAssets2, Base_Belly, LoadOfficialDungeonPrefab("Base_ResourcefulRat"));
InitWestDungeon(expandSharedAuto1, sharedAssets2, Base_West, LoadOfficialDungeonPrefab("Base_Gungeon"));
InitPhobosDungeon(expandSharedAuto1, sharedAssets2, Base_Phobos, LoadOfficialDungeonPrefab("Base_Gungeon"));
@ -494,7 +703,7 @@ public class ExpandDungeonPrefabs {
MinesDungeonPrefab = null;
}
public static void InitJungleDungeon(AssetBundle expandSharedAuto1, AssetBundle braveResources, GameObject targetObject, Dungeon dungeonTemplate) {
public static void InitJungleDungeon(AssetBundle expandSharedAuto1, AssetBundle braveResources, AssetBundle sharedAssets2, GameObject targetObject, Dungeon dungeonTemplate) {
Dungeon MinesDungeonPrefab = LoadOfficialDungeonPrefab("Base_Mines");
Dungeon GungeonPrefab = LoadOfficialDungeonPrefab("Base_Gungeon");
Dungeon SewersPrefab = LoadOfficialDungeonPrefab("Base_Sewer");
@ -525,7 +734,8 @@ public class ExpandDungeonPrefabs {
Jungle_Woods.supportsUpholstery = false;
Jungle_Woods.carpetIsMainFloor = false;
Jungle_Woods.carpetGrids = new TileIndexGrid[] {
ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/carpetGrid")
ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/carpetGrid"),
// ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/carpetGrid2")
};
Jungle_Woods.supportsChannels = false;
Jungle_Woods.minChannelPools = 0;
@ -549,9 +759,11 @@ public class ExpandDungeonPrefabs {
Jungle_Woods.facewallGrids = new FacewallIndexGridDefinition[] {
ExpandAssets.DeserializeFacewallGridDefinitionFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_0"),
ExpandAssets.DeserializeFacewallGridDefinitionFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_1"),
ExpandAssets.DeserializeFacewallGridDefinitionFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_2"),
};
Jungle_Woods.facewallGrids[0].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_1_grid");
Jungle_Woods.facewallGrids[1].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_2_grid");
Jungle_Woods.facewallGrids[0].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_0_grid");
Jungle_Woods.facewallGrids[1].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_1_grid");
Jungle_Woods.facewallGrids[2].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Woods/facewallGrids_2_grid");
Jungle_Woods.usesInternalMaterialTransitions = false;
Jungle_Woods.usesProceduralMaterialTransitions = false;
Jungle_Woods.internalMaterialTransitions = new RoomInternalMaterialTransition[0];
@ -608,7 +820,8 @@ public class ExpandDungeonPrefabs {
Jungle_Bamboo.supportsUpholstery = false;
Jungle_Bamboo.carpetIsMainFloor = false;
Jungle_Bamboo.carpetGrids = new TileIndexGrid[] {
ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/carpetGrid")
ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/carpetGrid"),
// ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/carpetGrid2"),
};
Jungle_Bamboo.supportsChannels = false;
Jungle_Bamboo.minChannelPools = 0;
@ -632,9 +845,11 @@ public class ExpandDungeonPrefabs {
Jungle_Bamboo.facewallGrids = new FacewallIndexGridDefinition[] {
ExpandAssets.DeserializeFacewallGridDefinitionFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_0"),
ExpandAssets.DeserializeFacewallGridDefinitionFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_1"),
ExpandAssets.DeserializeFacewallGridDefinitionFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_2"),
};
Jungle_Bamboo.facewallGrids[0].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_1_grid");
Jungle_Bamboo.facewallGrids[1].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_2_grid");
Jungle_Bamboo.facewallGrids[0].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_0_grid");
Jungle_Bamboo.facewallGrids[1].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_1_grid");
Jungle_Bamboo.facewallGrids[2].grid = ExpandAssets.DeserializeTileIndexGridFromAssetBundle(expandSharedAuto1, "Jungle/Bamboo/facewallGrids_2_grid");
Jungle_Bamboo.usesInternalMaterialTransitions = false;
Jungle_Bamboo.usesProceduralMaterialTransitions = false;
Jungle_Bamboo.internalMaterialTransitions = new RoomInternalMaterialTransition[0];
@ -776,7 +991,6 @@ public class ExpandDungeonPrefabs {
dungeon.tileIndices = new TileIndices() {
tilesetId = GlobalDungeonData.ValidTilesets.JUNGLEGEON,
// dungeonCollection = braveResources.LoadAsset<GameObject>("TallGrassStrip").GetComponent<tk2dTiledSprite>().Collection,
dungeonCollection = ExpandPrefabs.ENV_Tileset_Jungle.GetComponent<tk2dSpriteCollectionData>(),
dungeonCollectionSupportsDiagonalWalls = false,
aoTileIndices = new AOTileIndices() {
@ -825,9 +1039,17 @@ public class ExpandDungeonPrefabs {
edgeDecorationTiles = null
};
dungeon.roomMaterialDefinitions = new DungeonMaterial[] { Jungle_Woods, Jungle_Bamboo, Jungle_Woods, Jungle_Woods, Jungle_Woods };
dungeon.roomMaterialDefinitions = new DungeonMaterial[] {
Jungle_Woods,
Jungle_Bamboo,
Jungle_Woods,
Jungle_Woods,
Jungle_Woods,
sharedAssets2.LoadAsset<DungeonMaterial>("Boss_Cathedral_StainedGlass_Lights")
};
dungeon.dungeonWingDefinitions = new DungeonWingDefinition[0];
dungeon.pathGridDefinitions = new List<TileIndexGrid>() { MinesDungeonPrefab.pathGridDefinitions[0] };
// dungeon.pathGridDefinitions = new List<TileIndexGrid>() { MinesDungeonPrefab.pathGridDefinitions[0] };
dungeon.pathGridDefinitions = new List<TileIndexGrid>(0);
dungeon.dungeonDustups = new DustUpVFX() {
runDustup = GungeonPrefab.dungeonDustups.runDustup,
waterDustup = GungeonPrefab.dungeonDustups.waterDustup,

View File

@ -8,19 +8,19 @@
namespace ExpandTheGungeon.ExpandPrefab {
public class ExpandGlitchedEnemies {
public class ExpandEnemyCorruptor {
public static ExpandGlitchedEnemies Instance {
public static ExpandEnemyCorruptor Instance {
get {
if (m_instance == null) { m_instance = new ExpandGlitchedEnemies(); }
if (m_instance == null) { m_instance = new ExpandEnemyCorruptor(); }
return m_instance;
}
}
private static ExpandGlitchedEnemies m_instance;
private static ExpandEnemyCorruptor m_instance;
public ExpandGlitchedEnemies() {
public ExpandEnemyCorruptor() {
GrenadeGuyPrefab = EnemyDatabase.GetOrLoadByGuid("4d37ce3d666b4ddda8039929225b7ede").gameObject;
IceCubeGuyPrefab = EnemyDatabase.GetOrLoadByGuid("f155fd2759764f4a9217db29dd21b7eb").gameObject;
KeybulletManPrefab = EnemyDatabase.GetOrLoadByGuid("699cd24270af4cd183d671090d8323a1").gameObject;

View File

@ -208,9 +208,10 @@ public static class ExpandEnemyDatabase {
BuildMetalCubeGuyWestPrefab(expandSharedAssets1, out MetalCubeGuyWestPrefab);
BuildParasiteBossPrefab(out MonsterParasitePrefab);
BuildJungleBossPrefab(out com4nd0BossPrefab);
// Add R&G enemies to MTG spawn command because Zatherz hasn't done it. :P
// UpdateMTGSpawnPool();
// Add some existing enemies to Ammonomicon
AddEnemyToAmmonomicon(GetOfficialEnemyByGuid("c2f902b7cbe745efb3db4399927eab34"), ExpandAmmonomiconDatabase.Skusketling);
AddEnemyToAmmonomicon(GetOfficialEnemyByGuid("80ab6cd15bfc46668a8844b2975c6c26"), ExpandAmmonomiconDatabase.Chameleon);
}
public static AIActor GetOrLoadByGuidHook(Func<string, AIActor> orig, string guid) {
@ -220,49 +221,6 @@ public static class ExpandEnemyDatabase {
public static AIActor GetOfficialEnemyByGuid(string guid) { return EnemyDatabase.Instance.InternalGetByGuid(guid); }
public static void UpdateMTGSpawnPool() {
// This entry doesn't work. Forge hammers do not have AIActor components.
if (Game.Enemies.ContainsID("hammer")) { Game.Enemies.Remove("hammer"); }
List<Tuple<string, string>> FTAEnemyPool = new List<Tuple<string, string>>() {
new Tuple<string, string>("226fd90be3a64958a5b13cb0a4f43e97", "musket_kin"),
new Tuple<string, string>("df4e9fedb8764b5a876517431ca67b86", "bullet_kin_gal_titan_boss"),
new Tuple<string, string>("1f290ea06a4c416cabc52d6b3cf47266", "bullet_kin_titan_boss"),
new Tuple<string, string>("c4cf0620f71c4678bb8d77929fd4feff", "bullet_kin_titan"),
new Tuple<string, string>("6f818f482a5c47fd8f38cce101f6566c", "bullet_kin_pirate"),
new Tuple<string, string>("143be8c9bbb84e3fb3ab98bcd4cf5e5b", "bullet_kin_fish"),
new Tuple<string, string>("06f5623a351c4f28bc8c6cda56004b80", "bullet_kin_fish_blue"),
new Tuple<string, string>("ff4f54ce606e4604bf8d467c1279be3e", "bullet_kin_broccoli"),
new Tuple<string, string>("39e6f47a16ab4c86bec4b12984aece4c", "bullet_kin_knight"),
new Tuple<string, string>("f020570a42164e2699dcf57cac8a495c", "bullet_kin_kaliber"),
new Tuple<string, string>("37de0df92697431baa47894a075ba7e9", "bullet_kin_candle"),
new Tuple<string, string>("5861e5a077244905a8c25c2b7b4d6ebb", "bullet_kin_cowboy"),
new Tuple<string, string>("906d71ccc1934c02a6f4ff2e9c07c9ec", "bullet_kin_officetie"),
new Tuple<string, string>("9eba44a0ea6c4ea386ff02286dd0e6bd", "bullet_kin_officesuit"),
new Tuple<string, string>("2b6854c0849b4b8fb98eb15519d7db1c", "bullet_kin_mech"),
new Tuple<string, string>("05cb719e0178478685dc610f8b3e8bfc", "bullet_kin_vest"),
new Tuple<string, string>("5f15093e6f684f4fb09d3e7e697216b4", "dynamite_kin_office"),
new Tuple<string, string>("d4f4405e0ff34ab483966fd177f2ece3", "cylinder"),
new Tuple<string, string>("534f1159e7cf4f6aa00aeea92459065e", "cylinder_red"),
new Tuple<string, string>("80ab6cd15bfc46668a8844b2975c6c26", "gunzookie_office"),
new Tuple<string, string>("981d358ffc69419bac918ca1bdf0c7f7", "bullat_gargoyle"),
new Tuple<string, string>("e861e59012954ab2b9b6977da85cb83c", "snake_office"),
new Tuple<string, string>("41ee1c8538e8474a82a74c4aff99c712", "agunim_helicopter"),
new Tuple<string, string>("3b0bd258b4c9432db3339665cc61c356", "cactus_kin"),
new Tuple<string, string>("4b21a913e8c54056bc05cafecf9da880", "gigi_parrot"),
new Tuple<string, string>("78e0951b097b46d89356f004dda27c42", "tablet_bookllet"),
new Tuple<string, string>("216fd3dfb9da439d9bd7ba53e1c76462", "necronomicon_bookllet"),
new Tuple<string, string>("ddf12a4881eb43cfba04f36dd6377abb", "cowboy_shotgun_kin"),
new Tuple<string, string>("86dfc13486ee4f559189de53cfb84107", "pirate_shotgun_kin"),
new Tuple<string, string>("9215d1a221904c7386b481a171e52859", "lead_maiden_fridge"),
new Tuple<string, string>("3f40178e10dc4094a1565cd4fdc4af56", "baby_shelleton")
};
foreach (Tuple<string, string> tuple in FTAEnemyPool) {
if (!Game.Enemies.ContainsID(tuple.Second)) { Game.Enemies.Add(tuple.Second, GetOfficialEnemyByGuid(tuple.First)); }
}
}
public static void PaletteFixEnemies(AssetBundle expandSharedAssets1) {
RedShotGunMan = EnemyDatabase.GetOrLoadByGuid("128db2f0781141bcb505d8f00f9e4d47").gameObject;
@ -341,7 +299,146 @@ public static class ExpandEnemyDatabase {
if (!Game.Enemies.ContainsID(EnemyName)) { Game.Enemies.Add(EnemyName, EnemyPrefab.GetComponent<AIActor>()); }
}
}
public static void AddEnemyToDatabaseAndAmmonomicon(AIActor targetEnemy, string EnemyGUID, ExpandAmmonomiconDatabase.EnemyEntryData enemyEntryData, bool AddToMTGSpawnPool = true) {
if (!targetEnemy) { return; }
if (enemyEntryData.TabSpriteIsTexture) {
SpriteBuilder.AddToAmmonomicon(ExpandAssets.LoadAsset<Texture2D>(enemyEntryData.TabSprite));
} else if (targetEnemy.sprite.Collection.GetSpriteDefinition(enemyEntryData.TabSprite) != null) {
SpriteBuilder.AddToAmmonomicon(targetEnemy.sprite.Collection.GetSpriteDefinition(enemyEntryData.TabSprite));
}
// if (targetEnemy.GetComponent<EncounterTrackable>()) { UnityEngine.Object.Destroy(targetEnemy.GetComponent<EncounterTrackable>()); }
string m_EnemyNameCode = string.Empty;
if (!string.IsNullOrEmpty(targetEnemy.ActorName)) { m_EnemyNameCode = targetEnemy.ActorName.Replace(" ", "_").Replace("(", "_").Replace(")", string.Empty).ToLower(); }
targetEnemy.encounterTrackable = targetEnemy.gameObject.GetOrAddComponent<EncounterTrackable>();
targetEnemy.encounterTrackable.EncounterGuid = EnemyGUID;
targetEnemy.encounterTrackable.prerequisites = new DungeonPrerequisite[0];
targetEnemy.encounterTrackable.ProxyEncounterGuid = string.Empty;
targetEnemy.encounterTrackable.journalData = new JournalEntry() {
AmmonomiconSprite = enemyEntryData.TabSprite,
enemyPortraitSprite = ExpandAssets.LoadAsset<Texture2D>(enemyEntryData.FullArtSprite),
PrimaryDisplayName = "#THE_" + m_EnemyNameCode,
NotificationPanelDescription = "#THE_" + m_EnemyNameCode + "_SHORTDESC",
AmmonomiconFullEntry = "#THE_" + m_EnemyNameCode + "_LONGDESC",
SpecialIdentifier = JournalEntry.CustomJournalEntryType.NONE,
SuppressKnownState = false,
SuppressInAmmonomicon = false,
IsEnemy = true,
DisplayOnLoadingScreen = false,
RequiresLightBackgroundInLoadingScreen = false
};
ExpandTheGungeon.Strings.Enemies.Set("#THE_" + m_EnemyNameCode, enemyEntryData.EnemyName);
ExpandTheGungeon.Strings.Enemies.Set("#THE_" + m_EnemyNameCode + "_SHORTDESC", enemyEntryData.smallDescription);
ExpandTheGungeon.Strings.Enemies.Set("#THE_" + m_EnemyNameCode + "_LONGDESC", enemyEntryData.bigDescription);
EnemyDatabaseEntry item = new EnemyDatabaseEntry {
path = EnemyGUID,
encounterGuid = EnemyGUID,
difficulty = enemyEntryData.EnemyDifficulty,
myGuid = EnemyGUID,
placeableWidth = 2,
placeableHeight = 2,
isNormalEnemy = enemyEntryData.IsNormalEnemy,
ForcedPositionInAmmonomicon = enemyEntryData.ForcedPositionInAmmonomicon,
isInBossTab = enemyEntryData.IsInBossTab,
};
EnemyDatabase.Instance.Entries.Add(item);
enemyPrefabDictionary.Add(EnemyGUID, targetEnemy);
EncounterDatabaseEntry item2 = new EncounterDatabaseEntry(targetEnemy.encounterTrackable) {
path = EnemyGUID,
myGuid = targetEnemy.encounterTrackable.EncounterGuid,
};
EncounterDatabase.Instance.Entries.Add(item2);
if (AddToMTGSpawnPool && !string.IsNullOrEmpty(m_EnemyNameCode)) {
if (!Game.Enemies.ContainsID(m_EnemyNameCode)) { Game.Enemies.Add(m_EnemyNameCode, targetEnemy); }
}
}
public static void AddEnemyToAmmonomicon(AIActor targetEnemy, ExpandAmmonomiconDatabase.EnemyEntryData enemyEntryData) {
if (!targetEnemy) { return; }
if (enemyEntryData.TabSpriteIsTexture) {
SpriteBuilder.AddToAmmonomicon(ExpandAssets.LoadAsset<Texture2D>(enemyEntryData.TabSprite));
} else if (targetEnemy.sprite.Collection.GetSpriteDefinition(enemyEntryData.TabSprite) != null) {
SpriteBuilder.AddToAmmonomicon(targetEnemy.sprite.Collection.GetSpriteDefinition(enemyEntryData.TabSprite));
}
string m_EnemyNameCode = string.Empty;
if (!string.IsNullOrEmpty(targetEnemy.ActorName)) { m_EnemyNameCode = targetEnemy.ActorName.Replace(" ", "_").Replace("(", "_").Replace(")", string.Empty).ToLower(); }
bool AlreadyHasEncounterTrackable = true;
bool AlreadyHasJournalData = true;
if (!targetEnemy.gameObject.GetComponent<EncounterTrackable>()) {
AlreadyHasEncounterTrackable = false;
targetEnemy.gameObject.AddComponent<EncounterTrackable>();
targetEnemy.encounterTrackable.EncounterGuid = targetEnemy.EnemyGuid;
targetEnemy.encounterTrackable.prerequisites = new DungeonPrerequisite[0];
targetEnemy.encounterTrackable.ProxyEncounterGuid = string.Empty;
}
if (targetEnemy.encounterTrackable.journalData == null) {
AlreadyHasJournalData = false;
targetEnemy.encounterTrackable.journalData = new JournalEntry() {
PrimaryDisplayName = "#THE_" + m_EnemyNameCode,
NotificationPanelDescription = "#THE_" + m_EnemyNameCode + "_SHORTDESC",
AmmonomiconFullEntry = "#THE_" + m_EnemyNameCode + "_LONGDESC",
SpecialIdentifier = JournalEntry.CustomJournalEntryType.NONE,
SuppressKnownState = false,
SuppressInAmmonomicon = false,
IsEnemy = true,
DisplayOnLoadingScreen = false,
RequiresLightBackgroundInLoadingScreen = false
};
}
targetEnemy.encounterTrackable.journalData.AmmonomiconSprite = enemyEntryData.TabSprite;
targetEnemy.encounterTrackable.journalData.enemyPortraitSprite = ExpandAssets.LoadAsset<Texture2D>(enemyEntryData.FullArtSprite);
targetEnemy.encounterTrackable.journalData.SuppressKnownState = false;
targetEnemy.encounterTrackable.journalData.SuppressInAmmonomicon = false;
if (!AlreadyHasJournalData) {
targetEnemy.encounterTrackable.journalData.PrimaryDisplayName = "#THE_" + m_EnemyNameCode;
targetEnemy.encounterTrackable.journalData.NotificationPanelDescription = "#THE_" + m_EnemyNameCode + "_SHORTDESC";
targetEnemy.encounterTrackable.journalData.AmmonomiconFullEntry = "#THE_" + m_EnemyNameCode + "_LONGDESC";
}
if (!AlreadyHasEncounterTrackable) {
ExpandTheGungeon.Strings.Enemies.Set("#THE_" + m_EnemyNameCode, enemyEntryData.EnemyName);
ExpandTheGungeon.Strings.Enemies.Set("#THE_" + m_EnemyNameCode + "_SHORTDESC", enemyEntryData.smallDescription);
ExpandTheGungeon.Strings.Enemies.Set("#THE_" + m_EnemyNameCode + "_LONGDESC", enemyEntryData.bigDescription);
}
EnemyDatabaseEntry existingEntry = EnemyDatabase.GetEntry(targetEnemy.EnemyGuid);
if (existingEntry != null) {
existingEntry.difficulty = enemyEntryData.EnemyDifficulty;
existingEntry.isNormalEnemy = enemyEntryData.IsNormalEnemy;
existingEntry.ForcedPositionInAmmonomicon = enemyEntryData.ForcedPositionInAmmonomicon;
existingEntry.isInBossTab = enemyEntryData.IsInBossTab;
}
if (EncounterDatabase.GetEntry(targetEnemy.encounterTrackable.EncounterGuid) == null) {
EncounterDatabase.Instance.Entries.Add(
new EncounterDatabaseEntry(targetEnemy.encounterTrackable) {
path = targetEnemy.EnemyGuid,
myGuid = targetEnemy.encounterTrackable.EncounterGuid
}
);
}
}
public static void BuildHotShotCultistPrefab(AssetBundle expandSharedAssets1, out GameObject m_CachedTargetObject) {
AIActor m_CachedEnemyActor = GetOfficialEnemyByGuid("57255ed50ee24794b7aac1ac3cfb8a95");
@ -629,7 +726,7 @@ public static class ExpandEnemyDatabase {
m_TargetBehaviorSpeculatorSerialized.SerializedStateKeys = new List<string>() { "OverrideBehaviors", "TargetBehaviors", "MovementBehaviors", "AttackBehaviors", "OtherBehaviors" };
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, HotShotCultistGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, HotShotCultistGUID, ExpandAmmonomiconDatabase.HotShotCultist);
m_CachedEnemyActor = null;
return;
@ -827,7 +924,7 @@ public static class ExpandEnemyDatabase {
m_TargetBehaviorSpeculatorSerialized.SerializedStateKeys = new List<string>() { "OverrideBehaviors", "TargetBehaviors", "MovementBehaviors", "AttackBehaviors", "OtherBehaviors" };
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, HotShotShotgunKinGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, HotShotShotgunKinGUID, ExpandAmmonomiconDatabase.HotShotShotgunKin);
m_CachedEnemyActor = null;
return;
@ -1007,7 +1104,7 @@ public static class ExpandEnemyDatabase {
m_TargetBehaviorSpeculatorSerialized.SerializedStateKeys = new List<string>() { "OverrideBehaviors", "TargetBehaviors", "MovementBehaviors", "AttackBehaviors", "OtherBehaviors" };
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, HotShotBulletKinGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, HotShotBulletKinGUID, ExpandAmmonomiconDatabase.HotShotBulletKin);
m_CachedEnemyActor = null;
return;
@ -1405,7 +1502,7 @@ public static class ExpandEnemyDatabase {
// Loading a custom script from text file in place of one from an existing prefab..
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, BootlegBullatGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, BootlegBullatGUID, ExpandAmmonomiconDatabase.BootlegBullat);
return;
}
@ -1837,8 +1934,8 @@ public static class ExpandEnemyDatabase {
m_TargetBehaviorSpeculatorSerialized.SerializedObjectReferences = new List<UnityEngine.Object>(0);
m_TargetBehaviorSpeculatorSerialized.SerializedStateKeys = new List<string>() { "OverrideBehaviors", "TargetBehaviors", "MovementBehaviors", "AttackBehaviors", "OtherBehaviors" };
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, BootlegBulletManGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, BootlegBulletManGUID, ExpandAmmonomiconDatabase.BootlegBulletKin);
m_CachedEnemyActor = null;
return;
@ -2602,8 +2699,8 @@ public static class ExpandEnemyDatabase {
// Loading a custom script from text file in place of one from an existing prefab..
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, BootlegShotgunManRedGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, BootlegShotgunManRedGUID, ExpandAmmonomiconDatabase.BootlegShotgunKinRed);
m_CachedEnemyActor = null;
return;
}
@ -2951,7 +3048,7 @@ public static class ExpandEnemyDatabase {
// Loading a custom script from text file in place of one from an existing prefab..
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, BootlegShotgunManBlueGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, BootlegShotgunManBlueGUID, ExpandAmmonomiconDatabase.BootlegShotgunKinBlue);
m_CachedEnemyActor = null;
return;
}
@ -3223,8 +3320,8 @@ public static class ExpandEnemyDatabase {
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
CronenbergBullets.m_CachedCronenbergBulletsItem.TransmogTargetGuid = CronenbergGUID;
AddEnemyToDatabase(m_CachedTargetObject, CronenbergGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, CronenbergGUID, ExpandAmmonomiconDatabase.Cronenberg);
return;
}
@ -3559,7 +3656,7 @@ public static class ExpandEnemyDatabase {
// Loading a custom script from text file in place of one from an existing prefab..
m_TargetBehaviorSpeculatorSerialized.SerializedStateValues = new List<string>(0);
AddEnemyToDatabase(m_CachedTargetObject, AggressiveCronenbergGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, AggressiveCronenbergGUID, ExpandAmmonomiconDatabase.CronenbergAngry);
return;
}
@ -4657,7 +4754,7 @@ public static class ExpandEnemyDatabase {
m_WigTosser.helmetForce = 5;
AddEnemyToDatabase(m_CachedTargetObject, ClownkinGUID, true);
AddEnemyToDatabaseAndAmmonomicon(m_CachedAIActor, ClownkinGUID, ExpandAmmonomiconDatabase.ClownKin);
m_CachedEnemyActor = null;
return;

View File

@ -1,364 +0,0 @@
using System.Collections.Generic;
using UnityEngine;
using Dungeonator;
using ExpandTheGungeon.ExpandUtilities;
using ExpandTheGungeon.SpriteAPI;
namespace ExpandTheGungeon.ExpandPrefab {
public class ExpandMorePrefabs : ExpandPrefabs {
public static void InitMoreCustomPrefabs(AssetBundle expandSharedAssets1, AssetBundle sharedAssets, AssetBundle sharedAssets2, AssetBundle braveResources, AssetBundle enemiesBase) {
Dungeon ratDungeon = DungeonDatabase.GetOrLoadByName("base_resourcefulrat");
EXFoyerWarpDoor = expandSharedAssets1.LoadAsset<GameObject>("EXFoyerWarpDoor");
tk2dSprite m_EXFoyerWarpDoorSprite = SpriteSerializer.AddSpriteToObject(EXFoyerWarpDoor, EXFoyerCollection, "foyerdoor_open_01");
m_EXFoyerWarpDoorSprite.HeightOffGround = -2.25f;
tk2dSpriteAnimator m_FoyerWarpDoorAnimator = ExpandUtility.GenerateSpriteAnimator(EXFoyerWarpDoor);
List<string> m_FoyerDoorOpen = new List<string>() {
"foyerdoor_open_01",
"foyerdoor_open_02",
"foyerdoor_open_03",
"foyerdoor_open_04",
"foyerdoor_open_05",
"foyerdoor_open_06",
"foyerdoor_open_07",
"foyerdoor_open_08",
"foyerdoor_open_09",
"foyerdoor_open_10",
"foyerdoor_open_11",
"foyerdoor_open_12",
"foyerdoor_open_13",
};
List<string> m_FoyerDoorClose = new List<string>() {
"foyerdoor_open_13",
"foyerdoor_open_12",
"foyerdoor_open_11",
"foyerdoor_open_10",
"foyerdoor_open_09",
"foyerdoor_open_08",
"foyerdoor_open_07",
"foyerdoor_open_06",
"foyerdoor_open_05",
"foyerdoor_open_04",
"foyerdoor_open_03",
"foyerdoor_open_02",
"foyerdoor_open_01",
};
ExpandUtility.AddAnimation(m_FoyerWarpDoorAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_FoyerDoorOpen, "open", frameRate: 12);
ExpandUtility.AddAnimation(m_FoyerWarpDoorAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_FoyerDoorClose, "close", frameRate: 12);
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(17, 24));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(17, 24), offset: new IntVector2(48, 0));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 8), offset: new IntVector2(0, 24));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 8), offset: new IntVector2(48, 24));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.Trap, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(31, 13), offset: new IntVector2(17, 18));
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().HasTriggerCollisions = true;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[4].IsTrigger = true;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[0].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[1].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[2].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[3].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[4].Enabled = false;
EXFoyerTrigger = expandSharedAssets1.LoadAsset<GameObject>("EXFoyerTrigger");
tk2dSprite m_FoyerTriggerSprite = SpriteSerializer.AddSpriteToObject(EXFoyerTrigger, EXFoyerCollection, "floortrigger_idle_01", tk2dBaseSprite.PerpendicularState.FLAT);
m_FoyerTriggerSprite.HeightOffGround = -1.74f;
// EXFoyerTrigger.AddComponent<ExpandCasinoWarpTrigger>();
EXCasinoHub = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_Hub");
EXPunchoutArcadeCoin = expandSharedAssets1.LoadAsset<GameObject>("EXPunchoutArcadeCoin");
EXCasino_HatRack = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_HatRack");
EXCasino_Litter_Cans = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_Litter_Cans");
EXCasino_Litter_Paper = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_Litter_Paper");
GameObject m_EXCasinoHubRoomPrefab = EXCasinoHub.transform.Find("Room_Prefab").gameObject;
GameObject m_CasinoFloor = m_EXCasinoHubRoomPrefab.transform.Find("casino_hub_floor").gameObject;
GameObject m_CasinoWalls = m_EXCasinoHubRoomPrefab.transform.Find("casino_hub_backwall").gameObject;
GameObject m_CasinoBorder = m_EXCasinoHubRoomPrefab.transform.Find("casino_hub_border").gameObject;
GameObject m_CasinoPokerTable_01 = EXCasinoHub.transform.Find("casino_poker_table_01").gameObject;
GameObject m_CasinoPokerTable_02 = EXCasinoHub.transform.Find("casino_poker_table_02").gameObject;
GameObject m_CasinoPokerTableProps = m_CasinoPokerTable_01.transform.Find("tableprops").gameObject;
GameObject m_CasinoPokerTableProps2 = m_CasinoPokerTable_02.transform.Find("tableprops").gameObject;
GameObject m_CasinoPokerTableShadow = m_CasinoPokerTable_01.transform.Find("shadow").gameObject;
GameObject m_CasinoPokerTableShadow2 = m_CasinoPokerTable_02.transform.Find("shadow").gameObject;
GameObject m_CasinoCarpet1 = EXCasinoHub.transform.Find("casino_carpet_01").gameObject;
GameObject m_CasinoCarpet2 = EXCasinoHub.transform.Find("casino_carpet_02").gameObject;
SpriteSerializer.AddSpriteToObject(EXPunchoutArcadeCoin, EXFoyerCollection, "punchout_coin_left");
ExpandUtility.DuplicateComponent(EXPunchoutArcadeCoin.AddComponent<PunchoutDroppedItem>(), MetalGearRatPrefab.GetComponent<MetalGearRatDeathController>().PunchoutMinigamePrefab.GetComponent<PunchoutController>().Opponent.DroppedItemPrefab.GetComponent<PunchoutDroppedItem>());
tk2dSprite m_CasinoFloorSprite = SpriteSerializer.AddSpriteToObject(m_CasinoFloor, EXFoyerCollection, "casino_hub_floor_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoFloorSprite.HeightOffGround = -1.75f;
tk2dSprite m_CasinoWallsSprite = SpriteSerializer.AddSpriteToObject(m_CasinoWalls, EXFoyerCollection, "casino_hub_backwall_001");
m_CasinoWallsSprite.HeightOffGround = -1.73f;
tk2dSprite m_CasinoBorderSprite = SpriteSerializer.AddSpriteToObject(m_CasinoBorder, EXFoyerCollection, "casino_hub_border_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoBorderSprite.HeightOffGround = 4;
tk2dSprite m_CasinoCarpet1Sprite = SpriteSerializer.AddSpriteToObject(m_CasinoCarpet1, EXFoyerCollection, "casino_carpet_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoCarpet2Sprite = SpriteSerializer.AddSpriteToObject(m_CasinoCarpet2, EXFoyerCollection, "casino_carpet_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoCarpet1Sprite.HeightOffGround = -1.74f;
m_CasinoCarpet2Sprite.HeightOffGround = -1.74f;
tk2dSprite m_CasinoPokerTableSprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTable_01, EXFoyerCollection, "casino_poker_table_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableSprite2 = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTable_02, EXFoyerCollection, "casino_poker_table_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTablePropsSprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableProps, EXFoyerCollection, "casino_poker_table_props_002", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableProps2Sprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableProps2, EXFoyerCollection, "casino_poker_table_props_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableShadowSprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableShadow, EXFoyerCollection, "casino_poker_table_shadow", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableShadowSprite2 = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableShadow2, EXFoyerCollection, "casino_poker_table_shadow", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoPokerTableSprite.HeightOffGround = 0;
m_CasinoPokerTableSprite2.HeightOffGround = 0;
m_CasinoPokerTablePropsSprite.HeightOffGround = 0.2f;
m_CasinoPokerTableProps2Sprite.HeightOffGround = 0.2f;
m_CasinoPokerTableShadowSprite.HeightOffGround = -1.73f;
m_CasinoPokerTableShadowSprite2.HeightOffGround = -1.73f;
m_CasinoPokerTableShadowSprite.usesOverrideMaterial = true;
m_CasinoPokerTableShadowSprite2.usesOverrideMaterial = true;
m_CasinoPokerTableShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
m_CasinoPokerTableShadowSprite2.renderer.material.shader = m_CasinoPokerTableShadowSprite.renderer.material.shader;
tk2dSprite m_EXCasino_HatRackSprite = SpriteSerializer.AddSpriteToObject(EXCasino_HatRack, EXFoyerCollection, "casino_hatrack_001");
tk2dSprite m_EXCasino_LitterCansSprite = SpriteSerializer.AddSpriteToObject(EXCasino_Litter_Cans, EXFoyerCollection, "casino_litter_cans_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_EXCasino_LitterPaperSprite = SpriteSerializer.AddSpriteToObject(EXCasino_Litter_Paper, EXFoyerCollection, "casino_litter_paper_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXCasino_HatRackSprite.HeightOffGround = -1.25f;
m_EXCasino_LitterCansSprite.HeightOffGround = -1.7f;
m_EXCasino_LitterPaperSprite.HeightOffGround = -1.7f;
m_EXCasino_HatRackSprite.usesOverrideMaterial = true;
m_EXCasino_HatRackSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
m_EXCasino_LitterCansSprite.usesOverrideMaterial = true;
m_EXCasino_LitterCansSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
m_EXCasino_LitterPaperSprite.usesOverrideMaterial = true;
m_EXCasino_LitterPaperSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 304), offset: new IntVector2(-10, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 304), offset: new IntVector2(262, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(111, 48), offset: new IntVector2(151, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(111, 48), offset: new IntVector2(6, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(256, 16), offset: new IntVector2(6, 256));
ExpandUtility.GenerateOrAddToRigidBody(EXCasino_HatRack, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(12, 13), offset: new IntVector2(5, 2));
ExpandUtility.GenerateOrAddToRigidBody(EXCasino_HatRack, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(12, 9), offset: new IntVector2(5, 15));
ExpandUtility.GenerateOrAddToRigidBody(m_CasinoPokerTable_01, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(41, 45), offset: new IntVector2(2, 0));
ExpandUtility.GenerateOrAddToRigidBody(m_CasinoPokerTable_02, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(41, 45), offset: new IntVector2(2, 0));
GameObject m_EXCasinoGame_Punchout = EXCasinoHub.transform.Find("casinogame_punchout").gameObject;
tk2dSprite m_EXCasinoGamePunchoutSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_Punchout, EXFoyerCollection, "cabinet_covered_001");
m_EXCasinoGamePunchoutSprite.HeightOffGround = -1.65f;
GameObject m_EXCasinoGame_PunchoutShadow = m_EXCasinoGame_Punchout.transform.Find("shadow").gameObject;
tk2dSprite m_EXCasinoGamePunchoutShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_PunchoutShadow, EXFoyerCollection, "cabinet_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXCasinoGamePunchoutShadowSprite.HeightOffGround = -1.7f;
m_EXCasinoGamePunchoutShadowSprite.usesOverrideMaterial = true;
m_EXCasinoGamePunchoutShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Punchout, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 15), offset: new IntVector2(4, 0));
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Punchout, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(23, 9), offset: new IntVector2(6, 15));
List<string> m_PunchoutArcade_Idle = new List<string>() {
"cabinet_idle_001",
"cabinet_idle_002",
"cabinet_idle_003",
"cabinet_idle_004",
"cabinet_idle_005",
"cabinet_idle_006",
"cabinet_idle_007",
"cabinet_idle_008",
"cabinet_idle_009",
"cabinet_idle_010",
"cabinet_idle_011",
"cabinet_idle_012",
};
List<string> m_PunchoutArcade_Sleep = new List<string>() {
"cabinet_sleep_001",
"cabinet_sleep_002",
"cabinet_sleep_003",
"cabinet_sleep_004",
"cabinet_sleep_005",
"cabinet_sleep_006",
"cabinet_sleep_007",
"cabinet_sleep_008",
"cabinet_sleep_009",
"cabinet_sleep_010",
"cabinet_sleep_011",
"cabinet_sleep_012",
"cabinet_sleep_013",
"cabinet_sleep_014",
};
List<string> m_PunchoutArcade_Interact = new List<string>() {
"cabinet_interact_001",
"cabinet_interact_002",
"cabinet_interact_003",
"cabinet_interact_004",
};
List<string> m_PunchoutArcade_Fight = new List<string>() {
"cabinet_fight_001",
"cabinet_fight_002",
"cabinet_fight_003",
"cabinet_fight_004",
"cabinet_fight_005",
"cabinet_fight_006",
"cabinet_fight_007",
"cabinet_fight_008",
"cabinet_fight_009",
"cabinet_fight_010",
"cabinet_fight_011",
"cabinet_fight_012",
"cabinet_fight_013",
"cabinet_fight_014"
};
List<string> m_PunchoutArcade_FightIdle = new List<string>() { "cabinet_fight_014", "cabinet_fight_014", };
tk2dSpriteAnimator m_EXCasinoArcadeGameAnimator = ExpandUtility.GenerateSpriteAnimator(m_EXCasinoGame_Punchout, playAutomatically: true);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Idle, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 10);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Interact, "interact", tk2dSpriteAnimationClip.WrapMode.Once, 6);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Fight, "fight", tk2dSpriteAnimationClip.WrapMode.Once, 10);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_FightIdle, "idle2", tk2dSpriteAnimationClip.WrapMode.Loop, 1);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Sleep, "sleep", tk2dSpriteAnimationClip.WrapMode.Loop, 10);
EXArcadeGame_Prop = expandSharedAssets1.LoadAsset<GameObject>("EXArcadeGame_Prop");
GameObject m_EXArcadeGamePropShadow = EXArcadeGame_Prop.transform.Find("shadow").gameObject;
tk2dSprite m_EXArcadeGamePropSprite = SpriteSerializer.AddSpriteToObject(EXArcadeGame_Prop, EXFoyerCollection, "cabinet_decorative_001");
tk2dSprite m_EXArcadeGamePropShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXArcadeGamePropShadow, EXFoyerCollection, "cabinet_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXArcadeGamePropSprite.HeightOffGround = -1.65f;
m_EXArcadeGamePropShadowSprite.HeightOffGround = -1.7f;
m_EXArcadeGamePropShadowSprite.usesOverrideMaterial = true;
m_EXArcadeGamePropShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 15), offset: new IntVector2(4, 0));
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(23, 9), offset: new IntVector2(6, 15));
EXArcadeGame_Prop_Depressed = expandSharedAssets1.LoadAsset<GameObject>("EXArcadeGame_Prop_Depressed");
GameObject m_EXArcadeGamePropDepressedShadow = EXArcadeGame_Prop.transform.Find("shadow").gameObject;
tk2dSprite m_EXArcadeGamePropDepressedSprite = SpriteSerializer.AddSpriteToObject(EXArcadeGame_Prop_Depressed, EXFoyerCollection, "cabinet_decorative_001");
tk2dSprite m_EXArcadeGamePropDepressedShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXArcadeGamePropDepressedShadow, EXFoyerCollection, "cabinet_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXArcadeGamePropDepressedSprite.HeightOffGround = -1.65f;
m_EXArcadeGamePropDepressedShadowSprite.HeightOffGround = -1.7f;
m_EXArcadeGamePropDepressedShadowSprite.usesOverrideMaterial = true;
m_EXArcadeGamePropDepressedShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop_Depressed, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 15), offset: new IntVector2(4, 0));
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop_Depressed, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(23, 9), offset: new IntVector2(6, 15));
List<string> m_Cabinet_Blink = new List<string>() { "depressedcabinet_blink_001" , "depressedcabinet_blink_002", "depressedcabinet_blink_003" };
List<string> m_Cabinet_Idle = new List<string>() { "depressedcabinet_idle_001", "depressedcabinet_idle_001" };
List<string> m_Cabinet_Sigh = new List<string>() {
"depressedcabinet_sigh_001",
"depressedcabinet_sigh_002",
"depressedcabinet_sigh_003",
"depressedcabinet_sigh_004",
"depressedcabinet_sigh_005",
"depressedcabinet_sigh_006",
"depressedcabinet_sigh_007",
};
tk2dSpriteAnimator m_EXArcadeGamePropDepressedAnimator = ExpandUtility.GenerateSpriteAnimator(EXArcadeGame_Prop_Depressed, playAutomatically: true);
ExpandUtility.AddAnimation(m_EXArcadeGamePropDepressedAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Cabinet_Idle, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 1);
ExpandUtility.AddAnimation(m_EXArcadeGamePropDepressedAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Cabinet_Blink, "blink", tk2dSpriteAnimationClip.WrapMode.Once, 8);
ExpandUtility.AddAnimation(m_EXArcadeGamePropDepressedAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Cabinet_Sigh, "sigh", tk2dSpriteAnimationClip.WrapMode.Once, 10);
GameObject m_EXCasinoGame_Gunball = EXCasinoHub.transform.Find("casinogame_gunball").gameObject;
tk2dSprite m_EXCasinoGameGunballSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_Gunball, EXFoyerCollection, "gunball_idle_001");
m_EXCasinoGameGunballSprite.HeightOffGround = -1.6f;
GameObject m_EXCasinoGame_GunballShadow = m_EXCasinoGame_Gunball.transform.Find("shadow").gameObject;
tk2dSprite m_EXCasinoGame_GunballShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_GunballShadow, EXFoyerCollection, "gunball_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXCasinoGame_GunballShadowSprite.HeightOffGround = -1.7f;
m_EXCasinoGame_GunballShadowSprite.usesOverrideMaterial = true;
m_EXCasinoGame_GunballShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Gunball, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 17), offset: new IntVector2(2, 0));
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Gunball, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 13), offset: new IntVector2(2, 17));
List<string> m_Gunball_Idle = new List<string>() { "gunball_idle_001", "gunball_idle_002", "gunball_idle_003", "gunball_idle_004" };
List<string> m_Gunball_Interact = new List<string>() {
"gunball_interact_001",
"gunball_interact_002",
"gunball_interact_003",
"gunball_interact_004",
"gunball_interact_005",
"gunball_interact_006"
};
List<string> m_Gunball_Spin = new List<string>() {
"gunball_use_001",
"gunball_use_002",
"gunball_use_003",
"gunball_use_004",
"gunball_use_005",
"gunball_use_006",
"gunball_use_007",
"gunball_use_008",
"gunball_use_009",
"gunball_use_010",
"gunball_use_011",
"gunball_use_012",
"gunball_use_013",
"gunball_use_014",
"gunball_use_015",
"gunball_use_016",
"gunball_use_017",
"gunball_use_018",
"gunball_use_019",
"gunball_use_020",
"gunball_use_021",
"gunball_use_022",
"gunball_use_023",
"gunball_use_024",
"gunball_use_025",
"gunball_use_026",
"gunball_use_027",
"gunball_use_028",
};
tk2dSpriteAnimator m_EXCasinoGameGunBallAnimator = ExpandUtility.GenerateSpriteAnimator(m_EXCasinoGame_Gunball, playAutomatically: true);
ExpandUtility.AddAnimation(m_EXCasinoGameGunBallAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Gunball_Idle, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 10);
ExpandUtility.AddAnimation(m_EXCasinoGameGunBallAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Gunball_Interact, "interact", tk2dSpriteAnimationClip.WrapMode.Once, 6);
tk2dSpriteAnimationClip m_GunBallUseAnimation = ExpandUtility.AddAnimation(m_EXCasinoGameGunBallAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Gunball_Spin, "spin", tk2dSpriteAnimationClip.WrapMode.Once, 10);
m_GunBallUseAnimation.frames[23].triggerEvent = true;
m_GunBallUseAnimation.frames[23].eventInfo = "itempop";
EXRatDoor_4xLocks = expandSharedAssets1.LoadAsset<GameObject>("EXRatJailDoor4x");
tk2dSprite EXRatDoor4xLocksSprite = SpriteSerializer.AddSpriteToObject(EXRatDoor_4xLocks, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<tk2dSprite>().Collection, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<tk2dSprite>().spriteId, tk2dBaseSprite.PerpendicularState.PERPENDICULAR);
EXRatDoor4xLocksSprite.HeightOffGround = -1.5f;
ExpandUtility.GenerateSpriteAnimator(EXRatDoor_4xLocks, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<tk2dSpriteAnimator>().Library, 143);
SpeculativeRigidbody m_EXRatDoor4xLocksRigidBody = EXRatDoor_4xLocks.AddComponent<SpeculativeRigidbody>();
ExpandUtility.DuplicateComponent(m_EXRatDoor4xLocksRigidBody, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<SpeculativeRigidbody>());
m_EXRatDoor4xLocksRigidBody.PixelColliders = new List<PixelCollider>();
ExpandUtility.GenerateOrAddToRigidBody(EXRatDoor_4xLocks, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 16), offset: IntVector2.Zero);
ExpandUtility.GenerateOrAddToRigidBody(EXRatDoor_4xLocks, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 16), offset: new IntVector2(0, 16));
for (int i = 0; i < 4; i++) {
GameObject m_ChildLock = EXRatDoor_4xLocks.transform.Find("Lock" + i).gameObject;
tk2dSprite m_ChildLockSprite = SpriteSerializer.AddSpriteToObject(m_ChildLock, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.transform.Find("Lock").gameObject.GetComponent<tk2dSprite>().Collection, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.transform.Find("Lock").gameObject.GetComponent<tk2dSprite>().spriteId, tk2dBaseSprite.PerpendicularState.PERPENDICULAR);
if (i == 0 | i == 2) {
m_ChildLockSprite.HeightOffGround = 1;
} else {
m_ChildLockSprite.HeightOffGround = -1.5f;
}
ExpandUtility.GenerateSpriteAnimator(m_ChildLock, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.transform.Find("Lock").gameObject.GetComponent<tk2dSpriteAnimator>().Library, 53, playAutomatically: true);
}
ratDungeon = null;
}
}
}

View File

@ -306,7 +306,21 @@ public class ExpandPrefabs {
public static GameObject EXSpaceFloorPitBorder_50x50;
public static GameObject DoorOneWay_Vertical_Office;
public static GameObject DoorOneWay_Horizontal_Office;
// Custom Objects for Jungle
public static GameObject ExpandJungleTree_Medium;
public static GameObject ExpandJungleTree_Small;
public static GameObject ExpandJungleTreeMedium_Stump;
public static GameObject ExpandJungleTreeSmall_Stump;
public static GameObject ExpandJungleTree_Shard_01;
public static GameObject ExpandJungleTree_Shard_02;
public static GameObject ExpandJungleTree_Shard_03;
// Sarcophagus Objects with Kaliber sprites set.
public static GameObject Sarcophagus_ShotgunBook_Kaliber;
public static GameObject Sarcophagus_ShotgunMace_Kaliber;
@ -417,11 +431,11 @@ public class ExpandPrefabs {
ENV_Tileset_West = expandSharedAssets1.LoadAsset<GameObject>("ENV_Tileset_West");
ENV_Tileset_Phobos = expandSharedAssets1.LoadAsset<GameObject>("ENV_Tileset_Phobos");
ENV_Tileset_Office = expandSharedAssets1.LoadAsset<GameObject>("ENV_Tileset_Office");
ExpandDungeonCollections.ENV_Tileset_Jungle(ENV_Tileset_Jungle, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Jungle"), sharedAssets, expandSharedAssets1);
ExpandDungeonCollections.ENV_Tileset_Belly(ENV_Tileset_Belly, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Belly"), sharedAssets, expandSharedAssets1);
ExpandDungeonCollections.ENV_Tileset_Phobos(ENV_Tileset_Phobos, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Phobos"), sharedAssets, expandSharedAssets1);
ExpandDungeonCollections.ENV_Tileset_West(ENV_Tileset_West, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_West"), sharedAssets, expandSharedAssets1);
ExpandDungeonCollections.ENV_Tileset_Office(ENV_Tileset_Office, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Nakatomi"), sharedAssets, expandSharedAssets1);
ExpandDungeonPrefabs.ENV_Tileset_Jungle(ENV_Tileset_Jungle, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Jungle"), sharedAssets, expandSharedAssets1);
ExpandDungeonPrefabs.ENV_Tileset_Belly(ENV_Tileset_Belly, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Belly"), sharedAssets, expandSharedAssets1);
ExpandDungeonPrefabs.ENV_Tileset_Phobos(ENV_Tileset_Phobos, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Phobos"), sharedAssets, expandSharedAssets1);
ExpandDungeonPrefabs.ENV_Tileset_West(ENV_Tileset_West, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_West"), sharedAssets, expandSharedAssets1);
ExpandDungeonPrefabs.ENV_Tileset_Office(ENV_Tileset_Office, expandSharedAssets1.LoadAsset<Texture2D>("ENV_Tileset_Nakatomi"), sharedAssets, expandSharedAssets1);
EXItemCollection = SpriteSerializer.DeserializeSpriteCollectionFromAssetBundle(expandSharedAssets1, "EXItemCollection", "EXItem_Collection", "EXItemCollection");
EXGunCollection = SpriteSerializer.DeserializeSpriteCollectionFromAssetBundle(expandSharedAssets1, "EXGunCollection", "EXGun_Collection", "EXGunCollection");
@ -444,7 +458,7 @@ public class ExpandPrefabs {
gunCollection.DefineProjectileCollision("bootleg_pistol_projectile_001", 8, 8, 4, 4, 0, 0);
}
public static void InitCustomPrefabs(AssetBundle expandSharedAssets1, AssetBundle sharedAssets, AssetBundle sharedAssets2, AssetBundle braveResources, AssetBundle enemiesBase) {
public static void InitPrefabs(AssetBundle expandSharedAssets1, AssetBundle sharedAssets, AssetBundle sharedAssets2, AssetBundle braveResources, AssetBundle enemiesBase) {
Dungeon TutorialDungeonPrefab = DungeonDatabase.GetOrLoadByName("Base_Tutorial");
Dungeon CastleDungeonPrefab = DungeonDatabase.GetOrLoadByName("Base_Castle");
@ -3077,12 +3091,383 @@ public class ExpandPrefabs {
ExpandUtility.BuildNewCustomSign(Jungle_BlobLostSign, Teleporter_Info_Sign, "Lost Blob Note", "This poor fella got lost on his way home.");
Jungle_ItemStump = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungle_ItemStump");
tk2dSprite m_jungleItemStumpSprite = SpriteSerializer.AddSpriteToObject(Jungle_ItemStump, EXJungleCollection, "Jungle_TreeStump");
tk2dSprite m_jungleItemStumpSprite = SpriteSerializer.AddSpriteToObject(Jungle_ItemStump, EXJungleCollection, "Jungle_TreeStump", HeightOffGround: -1f);
ExpandUtility.GenerateOrAddToRigidBody(Jungle_ItemStump, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(3, 2), dimensions: new IntVector2(26, 24));
ExpandUtility.GenerateOrAddToRigidBody(Jungle_ItemStump, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(3, 2), dimensions: new IntVector2(26, 24));
ExpandJungleTreeStumpItemPedestal StumpPedestal = Jungle_ItemStump.AddComponent<ExpandJungleTreeStumpItemPedestal>();
StumpPedestal.ItemID = WoodenCrest.WoodCrestID;
ExpandJungleTree_Shard_01 = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungleTree_Shard_01");
ExpandJungleTree_Shard_02 = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungleTree_Shard_02");
ExpandJungleTree_Shard_03 = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungleTree_Shard_03");
SpriteSerializer.AddSpriteToObject(ExpandJungleTree_Shard_01, EXJungleCollection, "Jungle_Tree_Debris_01", tk2dBaseSprite.PerpendicularState.FLAT, -1);
SpriteSerializer.AddSpriteToObject(ExpandJungleTree_Shard_02, EXJungleCollection, "Jungle_Tree_Debris_02", tk2dBaseSprite.PerpendicularState.FLAT, -1);
SpriteSerializer.AddSpriteToObject(ExpandJungleTree_Shard_03, EXJungleCollection, "Jungle_Tree_Debris_03", tk2dBaseSprite.PerpendicularState.FLAT, -1);
ExpandJungleTree_Shard_01.AddComponent<DebrisObject>();
ExpandJungleTree_Shard_02.AddComponent<DebrisObject>();
ExpandJungleTree_Shard_03.AddComponent<DebrisObject>();
DebrisObject ExpandJungleTreeChard1Debris = ExpandJungleTree_Shard_01.GetComponent<DebrisObject>();
ExpandJungleTreeChard1Debris.Priority = EphemeralObject.EphemeralPriority.Minor;
ExpandJungleTreeChard1Debris.audioEventName = string.Empty;
ExpandJungleTreeChard1Debris.playAnimationOnTrigger = false;
ExpandJungleTreeChard1Debris.usesDirectionalFallAnimations = false;
ExpandJungleTreeChard1Debris.directionalAnimationData = new DebrisDirectionalAnimationInfo() {
fallUp = string.Empty,
fallRight = string.Empty,
fallDown = string.Empty,
fallLeft = string.Empty
};
ExpandJungleTreeChard1Debris.breaksOnFall = true;
ExpandJungleTreeChard1Debris.breakOnFallChance = 1;
ExpandJungleTreeChard1Debris.changesCollisionLayer = false;
ExpandJungleTreeChard1Debris.groundedCollisionLayer = CollisionLayer.LowObstacle;
ExpandJungleTreeChard1Debris.followupBehavior = DebrisObject.DebrisFollowupAction.None;
ExpandJungleTreeChard1Debris.collisionStopsBullets = false;
ExpandJungleTreeChard1Debris.animatePitFall = false;
ExpandJungleTreeChard1Debris.pitFallSplash = false;
ExpandJungleTreeChard1Debris.inertialMass = 1;
ExpandJungleTreeChard1Debris.motionMultiplier = 1;
ExpandJungleTreeChard1Debris.canRotate = true;
ExpandJungleTreeChard1Debris.angularVelocity = 1080;
ExpandJungleTreeChard1Debris.angularVelocityVariance = 0;
ExpandJungleTreeChard1Debris.bounceCount = 1;
ExpandJungleTreeChard1Debris.additionalBounceEnglish = 0;
ExpandJungleTreeChard1Debris.decayOnBounce = 0.5f;
ExpandJungleTreeChard1Debris.killTranslationOnBounce = false;
ExpandJungleTreeChard1Debris.usesLifespan = false;
ExpandJungleTreeChard1Debris.lifespanMin = 1;
ExpandJungleTreeChard1Debris.lifespanMax = 1;
ExpandJungleTreeChard1Debris.shouldUseSRBMotion = false;
ExpandJungleTreeChard1Debris.placementOptions = new DebrisObject.DebrisPlacementOptions() {
canBeRotated = false,
canBeFlippedHorizontally = false,
canBeFlippedVertically = false
};
ExpandJungleTreeChard1Debris.DoesGoopOnRest = false;
ExpandJungleTreeChard1Debris.GoopRadius = 1;
ExpandJungleTreeChard1Debris.additionalHeightBoost = 0;
ExpandJungleTreeChard1Debris.AssignFinalWorldDepth(-1.5f);
DebrisObject ExpandJungleTreeChard2Debris = ExpandJungleTree_Shard_02.GetComponent<DebrisObject>();
ExpandJungleTreeChard2Debris.Priority = EphemeralObject.EphemeralPriority.Minor;
ExpandJungleTreeChard2Debris.audioEventName = string.Empty;
ExpandJungleTreeChard2Debris.playAnimationOnTrigger = false;
ExpandJungleTreeChard2Debris.usesDirectionalFallAnimations = false;
ExpandJungleTreeChard2Debris.directionalAnimationData = new DebrisDirectionalAnimationInfo() {
fallUp = string.Empty,
fallRight = string.Empty,
fallDown = string.Empty,
fallLeft = string.Empty
};
ExpandJungleTreeChard2Debris.breaksOnFall = true;
ExpandJungleTreeChard2Debris.breakOnFallChance = 1;
ExpandJungleTreeChard2Debris.changesCollisionLayer = false;
ExpandJungleTreeChard2Debris.groundedCollisionLayer = CollisionLayer.LowObstacle;
ExpandJungleTreeChard2Debris.followupBehavior = DebrisObject.DebrisFollowupAction.None;
ExpandJungleTreeChard2Debris.collisionStopsBullets = false;
ExpandJungleTreeChard2Debris.animatePitFall = false;
ExpandJungleTreeChard2Debris.pitFallSplash = false;
ExpandJungleTreeChard2Debris.inertialMass = 1;
ExpandJungleTreeChard2Debris.motionMultiplier = 1;
ExpandJungleTreeChard2Debris.canRotate = true;
ExpandJungleTreeChard2Debris.angularVelocity = 1080;
ExpandJungleTreeChard2Debris.angularVelocityVariance = 0;
ExpandJungleTreeChard2Debris.bounceCount = 1;
ExpandJungleTreeChard2Debris.additionalBounceEnglish = 0;
ExpandJungleTreeChard2Debris.decayOnBounce = 0.5f;
ExpandJungleTreeChard2Debris.killTranslationOnBounce = false;
ExpandJungleTreeChard2Debris.usesLifespan = false;
ExpandJungleTreeChard2Debris.lifespanMin = 1;
ExpandJungleTreeChard2Debris.lifespanMax = 1;
ExpandJungleTreeChard2Debris.shouldUseSRBMotion = false;
ExpandJungleTreeChard2Debris.placementOptions = new DebrisObject.DebrisPlacementOptions() {
canBeRotated = false,
canBeFlippedHorizontally = false,
canBeFlippedVertically = false
};
ExpandJungleTreeChard2Debris.DoesGoopOnRest = false;
ExpandJungleTreeChard2Debris.GoopRadius = 1;
ExpandJungleTreeChard2Debris.additionalHeightBoost = 0;
ExpandJungleTreeChard2Debris.AssignFinalWorldDepth(-1.5f);
DebrisObject ExpandJungleTreeChard3Debris = ExpandJungleTree_Shard_03.GetComponent<DebrisObject>();
ExpandJungleTreeChard3Debris.Priority = EphemeralObject.EphemeralPriority.Minor;
ExpandJungleTreeChard3Debris.audioEventName = string.Empty;
ExpandJungleTreeChard3Debris.playAnimationOnTrigger = false;
ExpandJungleTreeChard3Debris.usesDirectionalFallAnimations = false;
ExpandJungleTreeChard3Debris.directionalAnimationData = new DebrisDirectionalAnimationInfo() {
fallUp = string.Empty,
fallRight = string.Empty,
fallDown = string.Empty,
fallLeft = string.Empty
};
ExpandJungleTreeChard3Debris.breaksOnFall = true;
ExpandJungleTreeChard3Debris.breakOnFallChance = 1;
ExpandJungleTreeChard3Debris.changesCollisionLayer = false;
ExpandJungleTreeChard3Debris.groundedCollisionLayer = CollisionLayer.LowObstacle;
ExpandJungleTreeChard3Debris.followupBehavior = DebrisObject.DebrisFollowupAction.None;
ExpandJungleTreeChard3Debris.collisionStopsBullets = false;
ExpandJungleTreeChard3Debris.animatePitFall = false;
ExpandJungleTreeChard3Debris.pitFallSplash = false;
ExpandJungleTreeChard3Debris.inertialMass = 1;
ExpandJungleTreeChard3Debris.motionMultiplier = 1;
ExpandJungleTreeChard3Debris.canRotate = true;
ExpandJungleTreeChard3Debris.angularVelocity = 1080;
ExpandJungleTreeChard3Debris.angularVelocityVariance = 0;
ExpandJungleTreeChard3Debris.bounceCount = 1;
ExpandJungleTreeChard3Debris.additionalBounceEnglish = 0;
ExpandJungleTreeChard3Debris.decayOnBounce = 0.5f;
ExpandJungleTreeChard3Debris.killTranslationOnBounce = false;
ExpandJungleTreeChard3Debris.usesLifespan = false;
ExpandJungleTreeChard3Debris.lifespanMin = 1;
ExpandJungleTreeChard3Debris.lifespanMax = 1;
ExpandJungleTreeChard3Debris.shouldUseSRBMotion = false;
ExpandJungleTreeChard3Debris.placementOptions = new DebrisObject.DebrisPlacementOptions() {
canBeRotated = false,
canBeFlippedHorizontally = false,
canBeFlippedVertically = false
};
ExpandJungleTreeChard3Debris.DoesGoopOnRest = false;
ExpandJungleTreeChard3Debris.GoopRadius = 1;
ExpandJungleTreeChard3Debris.additionalHeightBoost = 0;
ExpandJungleTreeChard3Debris.AssignFinalWorldDepth(-1.5f);
ExpandJungleTreeMedium_Stump = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungleTreeMedium_Stump");
ExpandJungleTreeSmall_Stump = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungleTreeSmall_Stump");
SpriteSerializer.AddSpriteToObject(ExpandJungleTreeMedium_Stump.transform.Find("stump").gameObject, EXJungleCollection, "Jungle_Tree_Medium_Stump", tk2dBaseSprite.PerpendicularState.FLAT, -1.65f);
SpriteSerializer.AddSpriteToObject(ExpandJungleTreeSmall_Stump.transform.Find("stump").gameObject, EXJungleCollection, "Jungle_Tree_Medium_Stump", tk2dBaseSprite.PerpendicularState.FLAT, -1.65f);
GameObject m_exJungleTreeMediumStump_Shadow = ExpandJungleTreeMedium_Stump.transform.Find("shadow").gameObject;
GameObject m_exJungleTreeSmallStump_Shadow = ExpandJungleTreeSmall_Stump.transform.Find("shadow").gameObject;
tk2dSprite m_exJungleTreeMediumStump_ShadowSprite = SpriteSerializer.AddSpriteToObject(m_exJungleTreeMediumStump_Shadow, EXJungleCollection, "Jungle_Tree_Medium_Stump_Shadow", tk2dBaseSprite.PerpendicularState.FLAT, -1.7f);
m_exJungleTreeMediumStump_ShadowSprite.usesOverrideMaterial = true;
m_exJungleTreeMediumStump_ShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
tk2dSprite m_exJungleTreeSmallStump_ShadowSprite = SpriteSerializer.AddSpriteToObject(m_exJungleTreeSmallStump_Shadow, EXJungleCollection, "Jungle_Tree_Medium_Stump_Shadow", tk2dBaseSprite.PerpendicularState.FLAT, -1.7f);
m_exJungleTreeSmallStump_ShadowSprite.usesOverrideMaterial = true;
m_exJungleTreeSmallStump_ShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandJungleTree_Medium = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungleTree_Medium");
SpriteSerializer.AddSpriteToObject(ExpandJungleTree_Medium, EXJungleCollection, "Jungle_Tree_Medium", HeightOffGround: -1);
GameObject m_exJungleTreeMedium_Shadow = ExpandJungleTree_Medium.transform.Find("shadow").gameObject;
tk2dSprite m_exJungleTreeMedium_ShadowSprite = SpriteSerializer.AddSpriteToObject(m_exJungleTreeMedium_Shadow, EXJungleCollection, "Jungle_Tree_Medium_Shadow", tk2dBaseSprite.PerpendicularState.FLAT, -1.7f);
m_exJungleTreeMedium_ShadowSprite.usesOverrideMaterial = true;
m_exJungleTreeMedium_ShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandJungleTree_Small = expandSharedAssets1.LoadAsset<GameObject>("ExpandJungleTree_Small");
SpriteSerializer.AddSpriteToObject(ExpandJungleTree_Small, EXJungleCollection, "Jungle_Tree_Small", HeightOffGround: -1);
GameObject m_exJungleTreeSmall_Shadow = ExpandJungleTree_Small.transform.Find("shadow").gameObject;
tk2dSprite m_exJungleTreeSmall_ShadowSprite = SpriteSerializer.AddSpriteToObject(m_exJungleTreeSmall_Shadow, EXJungleCollection, "Jungle_Tree_Small_Shadow", tk2dBaseSprite.PerpendicularState.FLAT, -1.7f);
m_exJungleTreeSmall_ShadowSprite.usesOverrideMaterial = true;
m_exJungleTreeSmall_ShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(ExpandJungleTree_Medium, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(17, 2), dimensions: new IntVector2(12, 10));
ExpandUtility.GenerateOrAddToRigidBody(ExpandJungleTree_Medium, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(17, 12), dimensions: new IntVector2(12, 23));
ExpandUtility.GenerateOrAddToRigidBody(ExpandJungleTree_Small, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(9, 2), dimensions: new IntVector2(13, 8));
ExpandUtility.GenerateOrAddToRigidBody(ExpandJungleTree_Small, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(9, 10), dimensions: new IntVector2(13, 13));
MajorBreakable ExpandJungleTree_MediumBreakable = ExpandJungleTree_Medium.AddComponent<MajorBreakable>();
ExpandJungleTree_MediumBreakable.HitPoints = 40;
ExpandJungleTree_MediumBreakable.MinHits = 2;
ExpandJungleTree_MediumBreakable.EnemyDamageOverride = -1;
ExpandJungleTree_MediumBreakable.ImmuneToBeastMode = false;
ExpandJungleTree_MediumBreakable.ScaleWithEnemyHealth = false;
ExpandJungleTree_MediumBreakable.OnlyExplosions = false;
ExpandJungleTree_MediumBreakable.IgnoreExplosions = false;
ExpandJungleTree_MediumBreakable.GameActorMotionBreaks = false;
ExpandJungleTree_MediumBreakable.PlayerRollingBreaks = false;
ExpandJungleTree_MediumBreakable.spawnShards = true;
ExpandJungleTree_MediumBreakable.distributeShards = true;
ExpandJungleTree_MediumBreakable.shardClusters = new ShardCluster[] {
new ShardCluster() {
minFromCluster = 2,
maxFromCluster = 4,
forceMultiplier = 1f,
rotationMultiplier = 1,
forceAxialMultiplier = Vector3.one,
clusterObjects = new DebrisObject[] {
ExpandObjectDatabase.Bush.variantTiers[0].nonDatabasePlaceable.transform.Find("default bush").gameObject.GetComponent<MinorBreakable>().shardClusters[0].clusterObjects[0],
ExpandJungleTreeChard1Debris,
ExpandJungleTreeChard2Debris,
ExpandJungleTreeChard3Debris
}
},
new ShardCluster() {
minFromCluster = 3,
maxFromCluster = 6,
forceMultiplier = 1f,
rotationMultiplier = 1,
forceAxialMultiplier = Vector3.one,
clusterObjects = new DebrisObject[] {
ExpandObjectDatabase.Bush.variantTiers[0].nonDatabasePlaceable.transform.Find("default bush").gameObject.GetComponent<MinorBreakable>().shardClusters[0].clusterObjects[0]
}
},
new ShardCluster() {
minFromCluster = 3,
maxFromCluster = 6,
forceMultiplier = 1f,
forceAxialMultiplier = Vector3.one,
rotationMultiplier = 1,
clusterObjects = new DebrisObject[] {
ExpandObjectDatabase.Bush.variantTiers[0].nonDatabasePlaceable.transform.Find("default bush").gameObject.GetComponent<MinorBreakable>().shardClusters[1].clusterObjects[0]
}
}
};
ExpandJungleTree_MediumBreakable.minShardPercentSpeed = 0.01f;
ExpandJungleTree_MediumBreakable.maxShardPercentSpeed = 0.03f;
ExpandJungleTree_MediumBreakable.shardBreakStyle = MinorBreakable.BreakStyle.BURST;
ExpandJungleTree_MediumBreakable.usesTemporaryZeroHitPointsState = false;
ExpandJungleTree_MediumBreakable.spriteNameToUseAtZeroHP = string.Empty;
ExpandJungleTree_MediumBreakable.destroyedOnBreak = true;
ExpandJungleTree_MediumBreakable.childrenToDestroy = new List<GameObject>(0);
ExpandJungleTree_MediumBreakable.playsAnimationOnNotBroken = false;
ExpandJungleTree_MediumBreakable.notBreakAnimation = string.Empty;
ExpandJungleTree_MediumBreakable.handlesOwnBreakAnimation = false;
ExpandJungleTree_MediumBreakable.breakAnimation = string.Empty;
ExpandJungleTree_MediumBreakable.handlesOwnPrebreakFrames = false;
ExpandJungleTree_MediumBreakable.prebreakFrames = new BreakFrame[0];
ExpandJungleTree_MediumBreakable.damageVfx = new VFXPool() { type = VFXPoolType.None, effects = new VFXComplex[0] };
ExpandJungleTree_MediumBreakable.damageVfxMinTimeBetween = 0.2f;
ExpandJungleTree_MediumBreakable.breakVfx = new VFXPool() {
type = VFXPoolType.Single,
effects = new VFXComplex[] {
new VFXComplex() {
effects = new VFXObject[] {
new VFXObject() {
effect = ExpandJungleTreeMedium_Stump,
alignment = VFXAlignment.Fixed,
attached = true,
destructible = false,
orphaned = true,
persistsOnDeath = true,
usesZHeight = true,
zHeight = -1f
},
new VFXObject() {
effect = sharedAssets.LoadAsset<GameObject>("VFX_Big_Dust_Poof"),
alignment = VFXAlignment.Fixed,
attached = false,
destructible = false,
orphaned = true,
persistsOnDeath = false,
usesZHeight = false,
zHeight = 1
}
},
}
}
};
ExpandJungleTree_MediumBreakable.delayDamageVfx = false;
ExpandJungleTree_MediumBreakable.SpawnItemOnBreak = false;
ExpandJungleTree_MediumBreakable.HandlePathBlocking = false;
MajorBreakable ExpandJungleTree_SmallBreakable = ExpandJungleTree_Small.AddComponent<MajorBreakable>();
ExpandJungleTree_SmallBreakable.HitPoints = 35;
ExpandJungleTree_SmallBreakable.MinHits = 2;
ExpandJungleTree_SmallBreakable.EnemyDamageOverride = -1;
ExpandJungleTree_SmallBreakable.ImmuneToBeastMode = false;
ExpandJungleTree_SmallBreakable.ScaleWithEnemyHealth = false;
ExpandJungleTree_SmallBreakable.OnlyExplosions = false;
ExpandJungleTree_SmallBreakable.IgnoreExplosions = false;
ExpandJungleTree_SmallBreakable.GameActorMotionBreaks = false;
ExpandJungleTree_SmallBreakable.PlayerRollingBreaks = false;
ExpandJungleTree_SmallBreakable.spawnShards = true;
ExpandJungleTree_SmallBreakable.distributeShards = true;
ExpandJungleTree_SmallBreakable.shardClusters = new ShardCluster[] {
new ShardCluster() {
minFromCluster = 1,
maxFromCluster = 3,
forceMultiplier = 1f,
rotationMultiplier = 1,
forceAxialMultiplier = Vector3.one,
clusterObjects = new DebrisObject[] {
ExpandObjectDatabase.Bush.variantTiers[0].nonDatabasePlaceable.transform.Find("default bush").gameObject.GetComponent<MinorBreakable>().shardClusters[0].clusterObjects[0],
ExpandJungleTreeChard1Debris,
ExpandJungleTreeChard2Debris,
ExpandJungleTreeChard3Debris
}
},
new ShardCluster() {
minFromCluster = 2,
maxFromCluster = 5,
forceMultiplier = 1f,
rotationMultiplier = 1,
forceAxialMultiplier = Vector3.one,
clusterObjects = new DebrisObject[] {
ExpandObjectDatabase.Bush.variantTiers[0].nonDatabasePlaceable.transform.Find("default bush").gameObject.GetComponent<MinorBreakable>().shardClusters[0].clusterObjects[0]
}
},
new ShardCluster() {
minFromCluster = 2,
maxFromCluster = 5,
forceMultiplier = 1f,
forceAxialMultiplier = Vector3.one,
rotationMultiplier = 1,
clusterObjects = new DebrisObject[] {
ExpandObjectDatabase.Bush.variantTiers[0].nonDatabasePlaceable.transform.Find("default bush").gameObject.GetComponent<MinorBreakable>().shardClusters[1].clusterObjects[0]
}
}
};
ExpandJungleTree_SmallBreakable.minShardPercentSpeed = 0.01f;
ExpandJungleTree_SmallBreakable.maxShardPercentSpeed = 0.03f;
ExpandJungleTree_SmallBreakable.shardBreakStyle = MinorBreakable.BreakStyle.BURST;
ExpandJungleTree_SmallBreakable.usesTemporaryZeroHitPointsState = false;
ExpandJungleTree_SmallBreakable.spriteNameToUseAtZeroHP = string.Empty;
ExpandJungleTree_SmallBreakable.destroyedOnBreak = true;
ExpandJungleTree_SmallBreakable.childrenToDestroy = new List<GameObject>(0);
ExpandJungleTree_SmallBreakable.playsAnimationOnNotBroken = false;
ExpandJungleTree_SmallBreakable.notBreakAnimation = string.Empty;
ExpandJungleTree_SmallBreakable.handlesOwnBreakAnimation = false;
ExpandJungleTree_SmallBreakable.breakAnimation = string.Empty;
ExpandJungleTree_SmallBreakable.handlesOwnPrebreakFrames = false;
ExpandJungleTree_SmallBreakable.prebreakFrames = new BreakFrame[0];
ExpandJungleTree_SmallBreakable.damageVfx = new VFXPool() { type = VFXPoolType.None, effects = new VFXComplex[0] };
ExpandJungleTree_SmallBreakable.damageVfxMinTimeBetween = 0.2f;
ExpandJungleTree_SmallBreakable.breakVfx = new VFXPool() {
type = VFXPoolType.Single,
effects = new VFXComplex[] {
new VFXComplex() {
effects = new VFXObject[] {
new VFXObject() {
effect = ExpandJungleTreeSmall_Stump,
alignment = VFXAlignment.Fixed,
attached = true,
destructible = false,
orphaned = true,
persistsOnDeath = true,
usesZHeight = true,
zHeight = -1f
},
new VFXObject() {
effect = sharedAssets.LoadAsset<GameObject>("VFX_Big_Dust_Poof"),
alignment = VFXAlignment.Fixed,
attached = false,
destructible = false,
orphaned = true,
persistsOnDeath = false,
usesZHeight = false,
zHeight = 1
}
},
}
}
};
ExpandJungleTree_SmallBreakable.delayDamageVfx = false;
ExpandJungleTree_SmallBreakable.SpawnItemOnBreak = false;
ExpandJungleTree_SmallBreakable.HandlePathBlocking = false;
Door_Horizontal_Belly = UnityEngine.Object.Instantiate(NakatomiDungeonPrefab.doorObjects.variantTiers[0].nonDatabasePlaceable);
Door_Vertical_Belly = UnityEngine.Object.Instantiate(NakatomiDungeonPrefab.doorObjects.variantTiers[1].nonDatabasePlaceable);
@ -4620,10 +5005,351 @@ public class ExpandPrefabs {
UnityEngine.Object.Destroy(ChamberGun.gameObject.GetComponent<ChamberGunProcessor>());
ChamberGun.gameObject.AddComponent<ExpandChamberGunProcessor>();
}
// Foyer Prefabs
EXFoyerWarpDoor = expandSharedAssets1.LoadAsset<GameObject>("EXFoyerWarpDoor");
tk2dSprite m_EXFoyerWarpDoorSprite = SpriteSerializer.AddSpriteToObject(EXFoyerWarpDoor, EXFoyerCollection, "foyerdoor_open_01");
m_EXFoyerWarpDoorSprite.HeightOffGround = -2.25f;
tk2dSpriteAnimator m_FoyerWarpDoorAnimator = ExpandUtility.GenerateSpriteAnimator(EXFoyerWarpDoor);
List<string> m_FoyerDoorOpen = new List<string>() {
"foyerdoor_open_01",
"foyerdoor_open_02",
"foyerdoor_open_03",
"foyerdoor_open_04",
"foyerdoor_open_05",
"foyerdoor_open_06",
"foyerdoor_open_07",
"foyerdoor_open_08",
"foyerdoor_open_09",
"foyerdoor_open_10",
"foyerdoor_open_11",
"foyerdoor_open_12",
"foyerdoor_open_13",
};
List<string> m_FoyerDoorClose = new List<string>() {
"foyerdoor_open_13",
"foyerdoor_open_12",
"foyerdoor_open_11",
"foyerdoor_open_10",
"foyerdoor_open_09",
"foyerdoor_open_08",
"foyerdoor_open_07",
"foyerdoor_open_06",
"foyerdoor_open_05",
"foyerdoor_open_04",
"foyerdoor_open_03",
"foyerdoor_open_02",
"foyerdoor_open_01",
};
ExpandUtility.AddAnimation(m_FoyerWarpDoorAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_FoyerDoorOpen, "open", frameRate: 12);
ExpandUtility.AddAnimation(m_FoyerWarpDoorAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_FoyerDoorClose, "close", frameRate: 12);
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(17, 24));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(17, 24), offset: new IntVector2(48, 0));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 8), offset: new IntVector2(0, 24));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 8), offset: new IntVector2(48, 24));
ExpandUtility.GenerateOrAddToRigidBody(EXFoyerWarpDoor, CollisionLayer.Trap, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(31, 13), offset: new IntVector2(17, 18));
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().HasTriggerCollisions = true;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[4].IsTrigger = true;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[0].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[1].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[2].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[3].Enabled = false;
EXFoyerWarpDoor.GetComponent<SpeculativeRigidbody>().PixelColliders[4].Enabled = false;
EXFoyerTrigger = expandSharedAssets1.LoadAsset<GameObject>("EXFoyerTrigger");
tk2dSprite m_FoyerTriggerSprite = SpriteSerializer.AddSpriteToObject(EXFoyerTrigger, EXFoyerCollection, "floortrigger_idle_01", tk2dBaseSprite.PerpendicularState.FLAT);
m_FoyerTriggerSprite.HeightOffGround = -1.74f;
// EXFoyerTrigger.AddComponent<ExpandCasinoWarpTrigger>();
EXCasinoHub = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_Hub");
EXPunchoutArcadeCoin = expandSharedAssets1.LoadAsset<GameObject>("EXPunchoutArcadeCoin");
EXCasino_HatRack = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_HatRack");
EXCasino_Litter_Cans = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_Litter_Cans");
EXCasino_Litter_Paper = expandSharedAssets1.LoadAsset<GameObject>("EXCasino_Litter_Paper");
GameObject m_EXCasinoHubRoomPrefab = EXCasinoHub.transform.Find("Room_Prefab").gameObject;
GameObject m_CasinoFloor = m_EXCasinoHubRoomPrefab.transform.Find("casino_hub_floor").gameObject;
GameObject m_CasinoWalls = m_EXCasinoHubRoomPrefab.transform.Find("casino_hub_backwall").gameObject;
GameObject m_CasinoBorder = m_EXCasinoHubRoomPrefab.transform.Find("casino_hub_border").gameObject;
GameObject m_CasinoPokerTable_01 = EXCasinoHub.transform.Find("casino_poker_table_01").gameObject;
GameObject m_CasinoPokerTable_02 = EXCasinoHub.transform.Find("casino_poker_table_02").gameObject;
GameObject m_CasinoPokerTableProps = m_CasinoPokerTable_01.transform.Find("tableprops").gameObject;
GameObject m_CasinoPokerTableProps2 = m_CasinoPokerTable_02.transform.Find("tableprops").gameObject;
GameObject m_CasinoPokerTableShadow = m_CasinoPokerTable_01.transform.Find("shadow").gameObject;
GameObject m_CasinoPokerTableShadow2 = m_CasinoPokerTable_02.transform.Find("shadow").gameObject;
GameObject m_CasinoCarpet1 = EXCasinoHub.transform.Find("casino_carpet_01").gameObject;
GameObject m_CasinoCarpet2 = EXCasinoHub.transform.Find("casino_carpet_02").gameObject;
SpriteSerializer.AddSpriteToObject(EXPunchoutArcadeCoin, EXFoyerCollection, "punchout_coin_left");
ExpandUtility.DuplicateComponent(EXPunchoutArcadeCoin.AddComponent<PunchoutDroppedItem>(), MetalGearRatPrefab.GetComponent<MetalGearRatDeathController>().PunchoutMinigamePrefab.GetComponent<PunchoutController>().Opponent.DroppedItemPrefab.GetComponent<PunchoutDroppedItem>());
tk2dSprite m_CasinoFloorSprite = SpriteSerializer.AddSpriteToObject(m_CasinoFloor, EXFoyerCollection, "casino_hub_floor_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoFloorSprite.HeightOffGround = -1.75f;
tk2dSprite m_CasinoWallsSprite = SpriteSerializer.AddSpriteToObject(m_CasinoWalls, EXFoyerCollection, "casino_hub_backwall_001");
m_CasinoWallsSprite.HeightOffGround = -1.73f;
tk2dSprite m_CasinoBorderSprite = SpriteSerializer.AddSpriteToObject(m_CasinoBorder, EXFoyerCollection, "casino_hub_border_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoBorderSprite.HeightOffGround = 4;
tk2dSprite m_CasinoCarpet1Sprite = SpriteSerializer.AddSpriteToObject(m_CasinoCarpet1, EXFoyerCollection, "casino_carpet_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoCarpet2Sprite = SpriteSerializer.AddSpriteToObject(m_CasinoCarpet2, EXFoyerCollection, "casino_carpet_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoCarpet1Sprite.HeightOffGround = -1.74f;
m_CasinoCarpet2Sprite.HeightOffGround = -1.74f;
tk2dSprite m_CasinoPokerTableSprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTable_01, EXFoyerCollection, "casino_poker_table_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableSprite2 = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTable_02, EXFoyerCollection, "casino_poker_table_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTablePropsSprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableProps, EXFoyerCollection, "casino_poker_table_props_002", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableProps2Sprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableProps2, EXFoyerCollection, "casino_poker_table_props_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableShadowSprite = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableShadow, EXFoyerCollection, "casino_poker_table_shadow", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_CasinoPokerTableShadowSprite2 = SpriteSerializer.AddSpriteToObject(m_CasinoPokerTableShadow2, EXFoyerCollection, "casino_poker_table_shadow", tk2dBaseSprite.PerpendicularState.FLAT);
m_CasinoPokerTableSprite.HeightOffGround = 0;
m_CasinoPokerTableSprite2.HeightOffGround = 0;
m_CasinoPokerTablePropsSprite.HeightOffGround = 0.2f;
m_CasinoPokerTableProps2Sprite.HeightOffGround = 0.2f;
m_CasinoPokerTableShadowSprite.HeightOffGround = -1.73f;
m_CasinoPokerTableShadowSprite2.HeightOffGround = -1.73f;
m_CasinoPokerTableShadowSprite.usesOverrideMaterial = true;
m_CasinoPokerTableShadowSprite2.usesOverrideMaterial = true;
m_CasinoPokerTableShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
m_CasinoPokerTableShadowSprite2.renderer.material.shader = m_CasinoPokerTableShadowSprite.renderer.material.shader;
tk2dSprite m_EXCasino_HatRackSprite = SpriteSerializer.AddSpriteToObject(EXCasino_HatRack, EXFoyerCollection, "casino_hatrack_001");
tk2dSprite m_EXCasino_LitterCansSprite = SpriteSerializer.AddSpriteToObject(EXCasino_Litter_Cans, EXFoyerCollection, "casino_litter_cans_001", tk2dBaseSprite.PerpendicularState.FLAT);
tk2dSprite m_EXCasino_LitterPaperSprite = SpriteSerializer.AddSpriteToObject(EXCasino_Litter_Paper, EXFoyerCollection, "casino_litter_paper_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXCasino_HatRackSprite.HeightOffGround = -1.25f;
m_EXCasino_LitterCansSprite.HeightOffGround = -1.7f;
m_EXCasino_LitterPaperSprite.HeightOffGround = -1.7f;
m_EXCasino_HatRackSprite.usesOverrideMaterial = true;
m_EXCasino_HatRackSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
m_EXCasino_LitterCansSprite.usesOverrideMaterial = true;
m_EXCasino_LitterCansSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
m_EXCasino_LitterPaperSprite.usesOverrideMaterial = true;
m_EXCasino_LitterPaperSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 304), offset: new IntVector2(-10, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(16, 304), offset: new IntVector2(262, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(111, 48), offset: new IntVector2(151, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(111, 48), offset: new IntVector2(6, -32));
ExpandUtility.GenerateOrAddToRigidBody(EXCasinoHub, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(256, 16), offset: new IntVector2(6, 256));
ExpandUtility.GenerateOrAddToRigidBody(EXCasino_HatRack, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(12, 13), offset: new IntVector2(5, 2));
ExpandUtility.GenerateOrAddToRigidBody(EXCasino_HatRack, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(12, 9), offset: new IntVector2(5, 15));
ExpandUtility.GenerateOrAddToRigidBody(m_CasinoPokerTable_01, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(41, 45), offset: new IntVector2(2, 0));
ExpandUtility.GenerateOrAddToRigidBody(m_CasinoPokerTable_02, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(41, 45), offset: new IntVector2(2, 0));
GameObject m_EXCasinoGame_Punchout = EXCasinoHub.transform.Find("casinogame_punchout").gameObject;
tk2dSprite m_EXCasinoGamePunchoutSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_Punchout, EXFoyerCollection, "cabinet_covered_001");
m_EXCasinoGamePunchoutSprite.HeightOffGround = -1.65f;
GameObject m_EXCasinoGame_PunchoutShadow = m_EXCasinoGame_Punchout.transform.Find("shadow").gameObject;
tk2dSprite m_EXCasinoGamePunchoutShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_PunchoutShadow, EXFoyerCollection, "cabinet_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXCasinoGamePunchoutShadowSprite.HeightOffGround = -1.7f;
m_EXCasinoGamePunchoutShadowSprite.usesOverrideMaterial = true;
m_EXCasinoGamePunchoutShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Punchout, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 15), offset: new IntVector2(4, 0));
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Punchout, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(23, 9), offset: new IntVector2(6, 15));
List<string> m_PunchoutArcade_Idle = new List<string>() {
"cabinet_idle_001",
"cabinet_idle_002",
"cabinet_idle_003",
"cabinet_idle_004",
"cabinet_idle_005",
"cabinet_idle_006",
"cabinet_idle_007",
"cabinet_idle_008",
"cabinet_idle_009",
"cabinet_idle_010",
"cabinet_idle_011",
"cabinet_idle_012",
};
List<string> m_PunchoutArcade_Sleep = new List<string>() {
"cabinet_sleep_001",
"cabinet_sleep_002",
"cabinet_sleep_003",
"cabinet_sleep_004",
"cabinet_sleep_005",
"cabinet_sleep_006",
"cabinet_sleep_007",
"cabinet_sleep_008",
"cabinet_sleep_009",
"cabinet_sleep_010",
"cabinet_sleep_011",
"cabinet_sleep_012",
"cabinet_sleep_013",
"cabinet_sleep_014",
};
List<string> m_PunchoutArcade_Interact = new List<string>() {
"cabinet_interact_001",
"cabinet_interact_002",
"cabinet_interact_003",
"cabinet_interact_004",
};
List<string> m_PunchoutArcade_Fight = new List<string>() {
"cabinet_fight_001",
"cabinet_fight_002",
"cabinet_fight_003",
"cabinet_fight_004",
"cabinet_fight_005",
"cabinet_fight_006",
"cabinet_fight_007",
"cabinet_fight_008",
"cabinet_fight_009",
"cabinet_fight_010",
"cabinet_fight_011",
"cabinet_fight_012",
"cabinet_fight_013",
"cabinet_fight_014"
};
List<string> m_PunchoutArcade_FightIdle = new List<string>() { "cabinet_fight_014", "cabinet_fight_014", };
tk2dSpriteAnimator m_EXCasinoArcadeGameAnimator = ExpandUtility.GenerateSpriteAnimator(m_EXCasinoGame_Punchout, playAutomatically: true);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Idle, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 10);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Interact, "interact", tk2dSpriteAnimationClip.WrapMode.Once, 6);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Fight, "fight", tk2dSpriteAnimationClip.WrapMode.Once, 10);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_FightIdle, "idle2", tk2dSpriteAnimationClip.WrapMode.Loop, 1);
ExpandUtility.AddAnimation(m_EXCasinoArcadeGameAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_PunchoutArcade_Sleep, "sleep", tk2dSpriteAnimationClip.WrapMode.Loop, 10);
/*ExpandLists.CustomChests.Add(RickRollChestObject);
ExpandLists.CustomChests.Add(SurpriseChestObject);
ExpandLists.CustomChestsWithoutRickRoll.Add(SurpriseChestObject);*/
EXArcadeGame_Prop = expandSharedAssets1.LoadAsset<GameObject>("EXArcadeGame_Prop");
GameObject m_EXArcadeGamePropShadow = EXArcadeGame_Prop.transform.Find("shadow").gameObject;
tk2dSprite m_EXArcadeGamePropSprite = SpriteSerializer.AddSpriteToObject(EXArcadeGame_Prop, EXFoyerCollection, "cabinet_decorative_001");
tk2dSprite m_EXArcadeGamePropShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXArcadeGamePropShadow, EXFoyerCollection, "cabinet_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXArcadeGamePropSprite.HeightOffGround = -1.65f;
m_EXArcadeGamePropShadowSprite.HeightOffGround = -1.7f;
m_EXArcadeGamePropShadowSprite.usesOverrideMaterial = true;
m_EXArcadeGamePropShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 15), offset: new IntVector2(4, 0));
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(23, 9), offset: new IntVector2(6, 15));
EXArcadeGame_Prop_Depressed = expandSharedAssets1.LoadAsset<GameObject>("EXArcadeGame_Prop_Depressed");
GameObject m_EXArcadeGamePropDepressedShadow = EXArcadeGame_Prop.transform.Find("shadow").gameObject;
tk2dSprite m_EXArcadeGamePropDepressedSprite = SpriteSerializer.AddSpriteToObject(EXArcadeGame_Prop_Depressed, EXFoyerCollection, "cabinet_decorative_001");
tk2dSprite m_EXArcadeGamePropDepressedShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXArcadeGamePropDepressedShadow, EXFoyerCollection, "cabinet_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXArcadeGamePropDepressedSprite.HeightOffGround = -1.65f;
m_EXArcadeGamePropDepressedShadowSprite.HeightOffGround = -1.7f;
m_EXArcadeGamePropDepressedShadowSprite.usesOverrideMaterial = true;
m_EXArcadeGamePropDepressedShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop_Depressed, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 15), offset: new IntVector2(4, 0));
ExpandUtility.GenerateOrAddToRigidBody(EXArcadeGame_Prop_Depressed, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(23, 9), offset: new IntVector2(6, 15));
List<string> m_Cabinet_Blink = new List<string>() { "depressedcabinet_blink_001" , "depressedcabinet_blink_002", "depressedcabinet_blink_003" };
List<string> m_Cabinet_Idle = new List<string>() { "depressedcabinet_idle_001", "depressedcabinet_idle_001" };
List<string> m_Cabinet_Sigh = new List<string>() {
"depressedcabinet_sigh_001",
"depressedcabinet_sigh_002",
"depressedcabinet_sigh_003",
"depressedcabinet_sigh_004",
"depressedcabinet_sigh_005",
"depressedcabinet_sigh_006",
"depressedcabinet_sigh_007",
};
tk2dSpriteAnimator m_EXArcadeGamePropDepressedAnimator = ExpandUtility.GenerateSpriteAnimator(EXArcadeGame_Prop_Depressed, playAutomatically: true);
ExpandUtility.AddAnimation(m_EXArcadeGamePropDepressedAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Cabinet_Idle, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 1);
ExpandUtility.AddAnimation(m_EXArcadeGamePropDepressedAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Cabinet_Blink, "blink", tk2dSpriteAnimationClip.WrapMode.Once, 8);
ExpandUtility.AddAnimation(m_EXArcadeGamePropDepressedAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Cabinet_Sigh, "sigh", tk2dSpriteAnimationClip.WrapMode.Once, 10);
GameObject m_EXCasinoGame_Gunball = EXCasinoHub.transform.Find("casinogame_gunball").gameObject;
tk2dSprite m_EXCasinoGameGunballSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_Gunball, EXFoyerCollection, "gunball_idle_001");
m_EXCasinoGameGunballSprite.HeightOffGround = -1.6f;
GameObject m_EXCasinoGame_GunballShadow = m_EXCasinoGame_Gunball.transform.Find("shadow").gameObject;
tk2dSprite m_EXCasinoGame_GunballShadowSprite = SpriteSerializer.AddSpriteToObject(m_EXCasinoGame_GunballShadow, EXFoyerCollection, "gunball_shadow_001", tk2dBaseSprite.PerpendicularState.FLAT);
m_EXCasinoGame_GunballShadowSprite.HeightOffGround = -1.7f;
m_EXCasinoGame_GunballShadowSprite.usesOverrideMaterial = true;
m_EXCasinoGame_GunballShadowSprite.renderer.material.shader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent<tk2dSprite>().renderer.material.shader;
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Gunball, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 17), offset: new IntVector2(2, 0));
ExpandUtility.GenerateOrAddToRigidBody(m_EXCasinoGame_Gunball, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(27, 13), offset: new IntVector2(2, 17));
List<string> m_Gunball_Idle = new List<string>() { "gunball_idle_001", "gunball_idle_002", "gunball_idle_003", "gunball_idle_004" };
List<string> m_Gunball_Interact = new List<string>() {
"gunball_interact_001",
"gunball_interact_002",
"gunball_interact_003",
"gunball_interact_004",
"gunball_interact_005",
"gunball_interact_006"
};
List<string> m_Gunball_Spin = new List<string>() {
"gunball_use_001",
"gunball_use_002",
"gunball_use_003",
"gunball_use_004",
"gunball_use_005",
"gunball_use_006",
"gunball_use_007",
"gunball_use_008",
"gunball_use_009",
"gunball_use_010",
"gunball_use_011",
"gunball_use_012",
"gunball_use_013",
"gunball_use_014",
"gunball_use_015",
"gunball_use_016",
"gunball_use_017",
"gunball_use_018",
"gunball_use_019",
"gunball_use_020",
"gunball_use_021",
"gunball_use_022",
"gunball_use_023",
"gunball_use_024",
"gunball_use_025",
"gunball_use_026",
"gunball_use_027",
"gunball_use_028",
};
tk2dSpriteAnimator m_EXCasinoGameGunBallAnimator = ExpandUtility.GenerateSpriteAnimator(m_EXCasinoGame_Gunball, playAutomatically: true);
ExpandUtility.AddAnimation(m_EXCasinoGameGunBallAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Gunball_Idle, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 10);
ExpandUtility.AddAnimation(m_EXCasinoGameGunBallAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Gunball_Interact, "interact", tk2dSpriteAnimationClip.WrapMode.Once, 6);
tk2dSpriteAnimationClip m_GunBallUseAnimation = ExpandUtility.AddAnimation(m_EXCasinoGameGunBallAnimator, EXFoyerCollection.GetComponent<tk2dSpriteCollectionData>(), m_Gunball_Spin, "spin", tk2dSpriteAnimationClip.WrapMode.Once, 10);
m_GunBallUseAnimation.frames[23].triggerEvent = true;
m_GunBallUseAnimation.frames[23].eventInfo = "itempop";
EXRatDoor_4xLocks = expandSharedAssets1.LoadAsset<GameObject>("EXRatJailDoor4x");
tk2dSprite EXRatDoor4xLocksSprite = SpriteSerializer.AddSpriteToObject(EXRatDoor_4xLocks, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<tk2dSprite>().Collection, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<tk2dSprite>().spriteId, tk2dBaseSprite.PerpendicularState.PERPENDICULAR);
EXRatDoor4xLocksSprite.HeightOffGround = -1.5f;
ExpandUtility.GenerateSpriteAnimator(EXRatDoor_4xLocks, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<tk2dSpriteAnimator>().Library, 143);
SpeculativeRigidbody m_EXRatDoor4xLocksRigidBody = EXRatDoor_4xLocks.AddComponent<SpeculativeRigidbody>();
ExpandUtility.DuplicateComponent(m_EXRatDoor4xLocksRigidBody, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.GetComponent<SpeculativeRigidbody>());
m_EXRatDoor4xLocksRigidBody.PixelColliders = new List<PixelCollider>();
ExpandUtility.GenerateOrAddToRigidBody(EXRatDoor_4xLocks, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 16), offset: IntVector2.Zero);
ExpandUtility.GenerateOrAddToRigidBody(EXRatDoor_4xLocks, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 16), offset: new IntVector2(0, 16));
for (int i = 0; i < 4; i++) {
GameObject m_ChildLock = EXRatDoor_4xLocks.transform.Find("Lock" + i).gameObject;
tk2dSprite m_ChildLockSprite = SpriteSerializer.AddSpriteToObject(m_ChildLock, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.transform.Find("Lock").gameObject.GetComponent<tk2dSprite>().Collection, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.transform.Find("Lock").gameObject.GetComponent<tk2dSprite>().spriteId, tk2dBaseSprite.PerpendicularState.PERPENDICULAR);
if (i == 0 | i == 2) {
m_ChildLockSprite.HeightOffGround = 1;
} else {
m_ChildLockSprite.HeightOffGround = -1.5f;
}
ExpandUtility.GenerateSpriteAnimator(m_ChildLock, ratDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.transform.Find("Lock").gameObject.GetComponent<tk2dSpriteAnimator>().Library, 53, playAutomatically: true);
}
m_gungeon_rewardroom_1 = null;
// Null any Dungeon prefabs you call up when done else you'll break level generation for that prefab on future level loads!
@ -4638,8 +5364,6 @@ public class ExpandPrefabs {
ForgeDungeonPrefab = null;
CatacombsDungeonPrefab = null;
NakatomiDungeonPrefab = null;
ExpandMorePrefabs.InitMoreCustomPrefabs(expandSharedAssets1, sharedAssets, sharedAssets2, braveResources, enemiesBase);
}
}
}

View File

@ -399,6 +399,7 @@ public class ExpandRoomPrefabs {
public static PrototypeDungeonRoom Expand_Jungle_Exit;
public static PrototypeDungeonRoom Expand_Jungle_SecretDragun;
public static PrototypeDungeonRoom Expand_Jungle_Boss;
public static PrototypeDungeonRoom Expand_Jungle_RewardRoom;
// All jungle rooms except special ones will be stored here
public static PrototypeDungeonRoom[] Expand_Jungle_Rooms;
public static List<string> Expand_Jungle_RoomList;
@ -915,8 +916,16 @@ public class ExpandRoomPrefabs {
Expand_Jungle_OldCrest.associatedMinimapIcon = ExpandPrefabs.EXJungleCrest_MinimapIcon;
RoomBuilder.AddObjectToRoom(Expand_Jungle_OldCrest, new Vector2(5, 7), ExpandObjectDatabase.GodRays);
RoomBuilder.AddObjectToRoom(Expand_Jungle_OldCrest, new Vector2(7, 8), ExpandUtility.GenerateDungeonPlacable(ExpandPrefabs.Jungle_ItemStump, useExternalPrefab: true), xOffset: 6);
Expand_Jungle_RewardRoom = RoomFactory.BuildFromAssetBundle(AssetBundles, "Expand_Jungle_RewardRoom", true, false, true);
RoomBuilder.AddObjectToRoom(Expand_Jungle_RewardRoom, new Vector2(4, 7), ExpandObjectDatabase.GodRays);
RoomBuilder.AddObjectToRoom(Expand_Jungle_RewardRoom, new Vector2(4, 6), ExpandPrefabs.ExpandJungleTree_Medium);
RoomBuilder.AddObjectToRoom(Expand_Jungle_RewardRoom, new Vector2(4, 11), ExpandPrefabs.ExpandJungleTree_Medium);
RoomBuilder.AddObjectToRoom(Expand_Jungle_RewardRoom, new Vector2(9, 6), ExpandPrefabs.ExpandJungleTree_Medium);
RoomBuilder.AddObjectToRoom(Expand_Jungle_RewardRoom, new Vector2(9, 11), ExpandPrefabs.ExpandJungleTree_Medium);
Expand_Jungle_Exit = RoomFactory.BuildFromAssetBundle(AssetBundles, "Expand_Jungle_Exit", true);
Expand_Jungle_Exit.associatedMinimapIcon = ExpandPrefabs.exit_room_basic.associatedMinimapIcon;
RoomBuilder.AddObjectToRoom(Expand_Jungle_Exit, new Vector2(4, 7), ExpandUtility.GenerateDungeonPlacable(ExpandPrefabs.Jungle_ExitLadder, useExternalPrefab: true), xOffset: 8, yOffset: 13);

View File

@ -481,8 +481,19 @@ private static void BuildWestBrosBossPrefab(AssetBundle assetBundle, out GameObj
actor.healthHaver.SetHealthMaximum(600);
actor.RegenerateCache();
ExpandEnemyDatabase.AddEnemyToDatabase(outObject, actor.EnemyGuid, true);
switch (whichBro)
{
case WestBros.Angel:
ExpandEnemyDatabase.AddEnemyToDatabaseAndAmmonomicon(actor, actor.EnemyGuid, ExpandAmmonomiconDatabase.WestBrosAngel);
break;
case WestBros.Nome:
ExpandEnemyDatabase.AddEnemyToDatabaseAndAmmonomicon(actor, actor.EnemyGuid, ExpandAmmonomiconDatabase.WestBrosNome);
break;
case WestBros.Tuc:
ExpandEnemyDatabase.AddEnemyToDatabaseAndAmmonomicon(actor, actor.EnemyGuid, ExpandAmmonomiconDatabase.WestBrosTuc);
break;
}
FakePrefab.MarkAsFakePrefab(outObject);
UnityEngine.Object.DontDestroyOnLoad(outObject);
}

View File

@ -42,7 +42,8 @@ public class ExpandTheGungeon : BaseUnityPlugin {
public const string ModSoundBankName = "EX_SFX";
public const string ConsoleCommandName = "expand";
public static AdvancedStringDB Strings;
private static List<string> itemList;
private enum WaitType { ShotgunSecret, LanguageFix, DebugFlow };
@ -117,6 +118,8 @@ private enum WaitType { ShotgunSecret, LanguageFix, DebugFlow };
public void GMStart(GameManager gameManager) {
try {
Strings = new AdvancedStringDB();
ExpandSharedHooks.InstallMidGameSaveHooks();
if (ExpandSettings.EnableLogo) {
MainMenuFoyerUpdateHook = new Hook(
@ -166,7 +169,9 @@ private enum WaitType { ShotgunSecret, LanguageFix, DebugFlow };
try {
// Init Prefab Databases
ExpandPrefabs.InitCustomPrefabs(expandSharedAssets1, sharedAssets, sharedAssets2, braveResources, enemiesBase);
ExpandPrefabs.InitPrefabs(expandSharedAssets1, sharedAssets, sharedAssets2, braveResources, enemiesBase);
// Init Custom Enemy Ammonomicon Data
ExpandAmmonomiconDatabase.Init(expandSharedAssets1);
// Init Custom Enemy Prefabs
ExpandEnemyDatabase.InitPrefabs(expandSharedAssets1);
// Init Custom Room Prefabs
@ -284,6 +289,15 @@ private enum WaitType { ShotgunSecret, LanguageFix, DebugFlow };
return;
}
/*private void ExpandTestCommand(string[] consoleText) {
// Tools.ExportTexture((GameManager.Instance.PrimaryPlayer.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.RoomClear)[0].sprite.Collection.materials[0].mainTexture as Texture2D).GetRW());
// Tools.DumpSpecificSpriteCollection(ExpandWesternBrosPrefabBuilder.Collection);
GameObject NewChestTest = Instantiate(ExpandObjectDatabase.EndTimesChest, (GameManager.Instance.PrimaryPlayer.transform.position + new Vector3(0, 2, 0)), Quaternion.identity);
GameManager.Instance.PrimaryPlayer.CurrentRoom.RegisterInteractable(NewChestTest.GetComponent<ArkController>());
}*/
private void ExpandConsoleInfo(string[] consoleText) {
if (ETGModConsole.Commands.GetGroup(ConsoleCommandName) != null && ETGModConsole.Commands.GetGroup(ConsoleCommandName).GetAllUnitNames() != null) {
List<string> m_CommandList = new List<string>();
@ -307,14 +321,14 @@ private enum WaitType { ShotgunSecret, LanguageFix, DebugFlow };
}
private void ExpandDebug(string[] consoleText) {
string validSubCommands = "toggledebugstats\nclearroom\nunsealroom\nfixplayerinput";
string validSubCommands = "stats\nclearroom\nunsealroom\nfixplayerinput";
if (!m_IsCommandValid(consoleText, validSubCommands, "debug")) { return; }
RoomHandler currentRoom = GameManager.Instance.PrimaryPlayer.CurrentRoom;
switch (consoleText[0].ToLower()) {
case "toggledebugstats":
case "stats":
if (!ExpandSettings.debugMode) {
ExpandSettings.debugMode = true;
ETGModConsole.Log("[ExpandTheGungeon] Installing RoomHandler.OnEntered Hook....");
@ -503,13 +517,6 @@ private enum WaitType { ShotgunSecret, LanguageFix, DebugFlow };
SpriteSerializer.SerializeSpriteCollection(CollectionName, SpriteList, X, Y, OverridePath);
ETGModConsole.Log("[ExpandTheGungeon] Sprite collection successfully built and exported!");
}
/*private void ExpandTestCommand(string[] consoleText) {
// Tools.ExportTexture((GameManager.Instance.PrimaryPlayer.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.RoomClear)[0].sprite.Collection.materials[0].mainTexture as Texture2D).GetRW());
GameObject NewChestTest = Instantiate(ExpandObjectDatabase.EndTimesChest, (GameManager.Instance.PrimaryPlayer.transform.position + new Vector3(0,2,0)), Quaternion.identity);
GameManager.Instance.PrimaryPlayer.CurrentRoom.RegisterInteractable(NewChestTest.GetComponent<ArkController>());
}*/
}
}

View File

@ -114,10 +114,12 @@
<Compile Include="ExpandComponents\ExpandInteractableDoor.cs" />
<Compile Include="ExpandComponents\ExpandInteractableLock.cs" />
<Compile Include="ExpandComponents\ExpandNewElevatorController.cs" />
<Compile Include="ExpandComponents\ExpandPlaySoundOnSpawn.cs" />
<Compile Include="ExpandComponents\ExpandPunchoutArcadeController.cs" />
<Compile Include="ExpandComponents\ExpandRandomVarGenerator.cs" />
<Compile Include="ExpandComponents\ExpandReticleRiserEffect.cs" />
<Compile Include="ExpandComponents\ExpandSpawnBowlerNoteOnDeath.cs" />
<Compile Include="ExpandComponents\ExpandSpriteFadeOnSpawn.cs" />
<Compile Include="ExpandComponents\ExpandTK2DDungeonAssembler.cs" />
<Compile Include="ExpandComponents\ExpandChargeBehavior.cs" />
<Compile Include="ExpandComponents\ExpandCompanionManager.cs" />
@ -173,18 +175,18 @@
<Compile Include="ExpandDungeonFlows\DungeonFlows\f2b_belly_flow_01.cs" />
<Compile Include="ExpandDungeonFlows\DungeonFlows\f4c_west_flow_01.cs" />
<Compile Include="ExpandFoyer.cs" />
<Compile Include="ExpandUtilities\AdvancedStringDB.cs" />
<Compile Include="ExpandMain\ExpandDungeonDoorManager.cs" />
<Compile Include="ExpandMain\ExpandDungeonMusicAPI.cs" />
<Compile Include="ExpandMain\ExpandFloorDecorator.cs" />
<Compile Include="ExpandMain\ExpandStaticReferenceManager.cs" />
<Compile Include="ExpandMain\ExpandSynergies.cs" />
<Compile Include="ExpandPrefab\ExpandAlarmMushroomPlacable.cs" />
<Compile Include="ExpandPrefab\ExpandAmmonomiconDatabase.cs" />
<Compile Include="ExpandPrefab\ExpandBootlegRoomPlaceable.cs" />
<Compile Include="ExpandPrefab\ExpandEnemyDatabase.cs" />
<Compile Include="ExpandPrefab\ExpandDungeonPrefabs.cs" />
<Compile Include="ExpandPrefab\ExpandDungeonCollections.cs" />
<Compile Include="ExpandPrefab\ExpandGungeoneerMimicBossPlacable.cs" />
<Compile Include="ExpandPrefab\ExpandMorePrefabs.cs" />
<Compile Include="ExpandPrefab\ExpandSawBladeTrapPlaceable.cs" />
<Compile Include="ExpandPrefab\ExpandSecretDoorPlacable.cs" />
<Compile Include="ExpandPrefab\ExpandWesternBrosPrefabBuilder.cs" />
@ -242,7 +244,7 @@
<Compile Include="ExpandComponents\ExpandSpawnGlitchedObjectOnDeath.cs" />
<Compile Include="ExpandComponents\ExpandWeatherController.cs" />
<Compile Include="ExpandComponents\ExpandExplodeOnDeath.cs" />
<Compile Include="ExpandPrefab\ExpandGlitchedEnemies.cs" />
<Compile Include="ExpandPrefab\ExpandEnemyCorruptor.cs" />
<Compile Include="ExpandMain\ExpandPlaceGlitchedEnemies.cs" />
<Compile Include="ExpandSettings.cs" />
<Compile Include="ExpandPrefab\ExpandLists.cs" />

View File

@ -0,0 +1,157 @@
using System;
using System.Collections.Generic;
using System.Reflection;
namespace ExpandTheGungeon.ExpandUtilities {
public class AdvancedStringDB {
public readonly AdvancedStringDBTable Core;
public readonly AdvancedStringDBTable Items;
public readonly AdvancedStringDBTable Enemies;
public readonly AdvancedStringDBTable Intro;
public readonly AdvancedStringDBTable Synergies;
public static FieldInfo m_synergyTable = typeof(StringTableManager).GetField("m_synergyTable", BindingFlags.Static | BindingFlags.NonPublic);
public Action<StringTableManager.GungeonSupportedLanguages> OnLanguageChanged;
public StringTableManager.GungeonSupportedLanguages CurrentLanguage {
get { return GameManager.Options.CurrentLanguage; }
set { StringTableManager.SetNewLanguage(value, true); }
}
public AdvancedStringDB() {
StringDB strings = ETGMod.Databases.Strings;
strings.OnLanguageChanged = (Action<StringTableManager.GungeonSupportedLanguages>)Delegate.Combine(strings.OnLanguageChanged, new Action<StringTableManager.GungeonSupportedLanguages>(this.LanguageChanged));
Core = new AdvancedStringDBTable(() => StringTableManager.CoreTable);
Items = new AdvancedStringDBTable(() => StringTableManager.ItemTable);
Enemies = new AdvancedStringDBTable(() => StringTableManager.EnemyTable);
Intro = new AdvancedStringDBTable(() => StringTableManager.IntroTable);
Synergies = new AdvancedStringDBTable(() => AdvancedStringDB.SynergyTable);
}
public void LanguageChanged(StringTableManager.GungeonSupportedLanguages newLang) {
Core.LanguageChanged();
Items.LanguageChanged();
Enemies.LanguageChanged();
Intro.LanguageChanged();
Synergies.LanguageChanged();
Action<StringTableManager.GungeonSupportedLanguages> onLanguageChanged = this.OnLanguageChanged;
bool flag = onLanguageChanged == null;
bool flag2 = !flag;
if (flag2) { onLanguageChanged(newLang); }
}
public static Dictionary<string, StringTableManager.StringCollection> SynergyTable {
get {
StringTableManager.GetSynergyString("ThisExistsOnlyToLoadTables", -1);
return (Dictionary<string, StringTableManager.StringCollection>)m_synergyTable.GetValue(null);
}
}
}
public sealed class AdvancedStringDBTable {
private readonly Func<Dictionary<string, StringTableManager.StringCollection>> _GetTable;
private Dictionary<string, StringTableManager.StringCollection> _CachedTable;
private readonly List<string> _ChangeKeys;
private readonly List<StringTableManager.StringCollection> _ChangeValues;
public Dictionary<string, StringTableManager.StringCollection> Table {
get {
Dictionary<string, StringTableManager.StringCollection> result;
bool flag = (result = _CachedTable) == null;
if (flag) {
return (_CachedTable = _GetTable());
} else {
return result;
}
}
}
public StringTableManager.StringCollection this[string key] {
get { return Table[key]; }
set {
Table[key] = value;
int num = _ChangeKeys.IndexOf(key);;
if (num > 0) {
_ChangeValues[num] = value;
} else {
_ChangeKeys.Add(key);
_ChangeValues.Add(value);
}
JournalEntry.ReloadDataSemaphore++;
}
}
public AdvancedStringDBTable(Func<Dictionary<string, StringTableManager.StringCollection>> _getTable) {
_ChangeKeys = new List<string>();
_ChangeValues = new List<StringTableManager.StringCollection>();
_GetTable = _getTable;
}
public bool ContainsKey(string key) { return Table.ContainsKey(key); }
public void Set(string key, string value) {
StringTableManager.StringCollection stringCollection = new StringTableManager.SimpleStringCollection();
stringCollection.AddString(value, 1f);
bool flag = Table.ContainsKey(key);
if (flag) { Table[key] = stringCollection; } else { Table.Add(key, stringCollection); }
int num = _ChangeKeys.IndexOf(key);
bool flag2 = num > 0;
if (flag2) {
_ChangeValues[num] = stringCollection;
} else {
_ChangeKeys.Add(key);
_ChangeValues.Add(stringCollection);
}
JournalEntry.ReloadDataSemaphore++;
}
public void SetComplex(string key, params string[] values) {
StringTableManager.StringCollection stringCollection = new StringTableManager.ComplexStringCollection();
foreach (string text in values) { stringCollection.AddString(text, 1f); }
Table[key] = stringCollection;
int num = _ChangeKeys.IndexOf(key);
bool flag = num > 0;
if (flag) {
_ChangeValues[num] = stringCollection;
} else {
_ChangeKeys.Add(key);
_ChangeValues.Add(stringCollection);
}
JournalEntry.ReloadDataSemaphore++;
}
public void SetComplex(string key, List<string> values, List<float> weights) {
StringTableManager.StringCollection stringCollection = new StringTableManager.ComplexStringCollection();
for (int i = 0; i < values.Count; i++) {
string text = values[i];
float num = weights[i];
stringCollection.AddString(text, num);
}
Table[key] = stringCollection;
int num2 = _ChangeKeys.IndexOf(key);
bool flag = num2 > 0;
if (flag) {
_ChangeValues[num2] = stringCollection;
} else {
_ChangeKeys.Add(key);
_ChangeValues.Add(stringCollection);
}
JournalEntry.ReloadDataSemaphore++;
}
public string Get(string key) { return StringTableManager.GetString(key); }
public void LanguageChanged() {
_CachedTable = null;
Dictionary<string, StringTableManager.StringCollection> table = Table;
for (int i = 0; i < _ChangeKeys.Count; i++) { table[_ChangeKeys[i]] = _ChangeValues[i]; }
}
}
}

View File

@ -17,6 +17,72 @@ namespace ExpandTheGungeon.ExpandUtilities {
public class ExpandUtility {
public static List<IntVector2> FindAllValidLocations(Dungeon dungeon, RoomHandler currentRoom, int Clearence = 1, int ExitClearence = 10, bool avoidExits = false, bool avoidPits = true, bool PositionRelativeToRoom = false) {
List<IntVector2> m_ValidCellsCached = new List<IntVector2>();
if (dungeon == null | currentRoom == null) { return m_ValidCellsCached; }
for (int X = 0; X < currentRoom.area.dimensions.x; X++) {
for (int Y = 0; Y < currentRoom.area.dimensions.y; Y++) {
try {
bool isInvalid = false;
IntVector2 TargetPosition = new IntVector2(currentRoom.area.basePosition.x + X, currentRoom.area.basePosition.y + Y);
if (!m_ValidCellsCached.Contains(TargetPosition)) {
RoomHandler ActualRoom = dungeon.data.GetAbsoluteRoomFromPosition(TargetPosition);
for (int x = 0; x < Clearence; x++) {
for (int y = 0; y < Clearence; y++) {
IntVector2 intVector = (TargetPosition + new IntVector2(x, y));
if (dungeon.data.CheckInBoundsAndValid(intVector)) {
CellData cellData = dungeon.data[intVector];
if (cellData.parentRoom == null | cellData.type != CellType.FLOOR | cellData.isOccupied | !cellData.IsPassable) { isInvalid = true; }
if (ActualRoom != currentRoom | cellData.HasPitNeighbor(dungeon.data)) { isInvalid = true; }
if (cellData.cellVisualData.floorType == CellVisualData.CellFloorType.Water) { isInvalid = true; }
if (cellData.HasWallNeighbor()) { isInvalid = true; }
} else {
isInvalid = true;
}
}
}
if (!isInvalid && avoidExits) {
for (int x = 0; x < ExitClearence; x++) {
for (int y = 0; y < ExitClearence; y++) {
IntVector2 intVector = (TargetPosition + new IntVector2(x, y));
if (dungeon.data.CheckInBoundsAndValid(intVector)) {
CellData cellData = dungeon.data[intVector];
if (cellData.isExitCell) { isInvalid = true; }
}
}
}
}
if (!isInvalid) {
if (PositionRelativeToRoom) {
m_ValidCellsCached.Add(new IntVector2(X, Y));
} else {
m_ValidCellsCached.Add(TargetPosition);
}
}
}
} catch (Exception EX) {
if (ExpandSettings.debugMode) {
Debug.Log("[ExpandFloorDecorator.FindAllValidLocations] Exception while looking for valid cells in current room.");
Debug.LogException(EX);
}
}
}
}
if (m_ValidCellsCached.Count > 1) {
for (int I = 0; I < m_ValidCellsCached.Count; I++) {
Vector2 m_Position1 = m_ValidCellsCached[I].ToVector2();
for (int I2 = (I + 1); I2 < m_ValidCellsCached.Count; I2++) {
Vector2 m_Position2 = m_ValidCellsCached[I2].ToVector2();
if (Vector2.Distance(m_Position1, m_Position2) < Clearence) {
m_ValidCellsCached.Remove(m_ValidCellsCached[I2]);
}
}
}
}
return m_ValidCellsCached;
}
public static DungeonPlaceable DuplicateDungoenPlaceable(DungeonPlaceable sourcePlaceable) {
DungeonPlaceable m_cachedPlaceable = ScriptableObject.CreateInstance<DungeonPlaceable>();
m_cachedPlaceable.width = sourcePlaceable.width;

View File

@ -725,7 +725,7 @@ public class CorruptionBomb : PlayerItem {
}
if (enemy.EnemyGuid == "0239c0680f9f467dbe5c4aab7dd1eca6" | enemy.EnemyGuid == "e61cab252cfb435db9172adc96ded75f" | enemy.EnemyGuid == "1a4872dafdb34fd29fe8ac90bd2cea67") {
ExpandGlitchedEnemies.GlitchExistingEnemy(enemy);
ExpandEnemyCorruptor.GlitchExistingEnemy(enemy);
} else {
if (enemy.gameObject.GetComponent<SpawnEnemyOnDeath>() != null) { Destroy(enemy.gameObject.GetComponent<SpawnEnemyOnDeath>()); }

View File

@ -56,6 +56,10 @@ public static class SpriteBuilder {
return AddSpriteToCollection(spriteDefinition, ammonomiconCollection);
}
public static int AddToAmmonomicon(Texture2D spriteTexture) {
return AddSpriteToCollection(spriteTexture, ammonomiconCollection);
}
public static int AddToAmmonomicon(tk2dSpriteDefinition spriteDefinition, Material overrideMaterial) {
int m_spriteDefinition = AddSpriteToCollection(spriteDefinition, ammonomiconCollection);
ammonomiconCollection.GetSpriteDefinition(spriteDefinition.name).material = overrideMaterial;

View File

@ -92,11 +92,12 @@ public static class SpriteSerializer {
}
// Use this to add a sprite to your object instead of the one from ItemBuilder/SpriteBuilder!
public static tk2dSprite AddSpriteToObject(GameObject obj, GameObject existingSpriteCollectionObject, string mainSpriteDefinitionName, tk2dBaseSprite.PerpendicularState spriteAlignment = tk2dBaseSprite.PerpendicularState.UNDEFINED) {
public static tk2dSprite AddSpriteToObject(GameObject obj, GameObject existingSpriteCollectionObject, string mainSpriteDefinitionName, tk2dBaseSprite.PerpendicularState spriteAlignment = tk2dBaseSprite.PerpendicularState.UNDEFINED, float HeightOffGround = 1) {
tk2dSprite m_tk2dSprite = obj.AddComponent<tk2dSprite>();
m_tk2dSprite.SetSprite(existingSpriteCollectionObject.GetComponent<tk2dSpriteCollectionData>(), mainSpriteDefinitionName);
m_tk2dSprite.SortingOrder = 0;
if (spriteAlignment != tk2dBaseSprite.PerpendicularState.UNDEFINED) { m_tk2dSprite.CachedPerpState = spriteAlignment; }
if (HeightOffGround != 1) { m_tk2dSprite.HeightOffGround = HeightOffGround; }
obj.GetComponent<BraveBehaviour>().sprite = m_tk2dSprite;
return m_tk2dSprite;
}