private void RandomBombSpawn(PlayerController user, int bombToSpawn) { for (int i = 0; i < 10; i++) { Vector3 positionToSpawn3 = user.CurrentRoom.GetRandomVisibleClearSpot(1, 1).ToVector3(); SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>(); GameObject bigbombObject = bigbombPrefab.objectToSpawn.gameObject; GameObject bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, positionToSpawn3, Quaternion.identity); tk2dBaseSprite bombsprite = bigbombObject2.GetComponent <tk2dBaseSprite>(); if (bombsprite) { bombsprite.PlaceAtPositionByAnchor(positionToSpawn3, tk2dBaseSprite.Anchor.MiddleCenter); } if (user.HasPickupID(19) || user.HasPickupID(332)) { RestoreAmmo(user, 10); SpawnObjectPlayerItem secondarybigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>(); GameObject secondarybigbombObject = secondarybigbombPrefab.objectToSpawn.gameObject; GameObject secondarybigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(secondarybigbombObject, positionToSpawn3, Quaternion.identity); tk2dBaseSprite secondarybombsprite = secondarybigbombObject2.GetComponent <tk2dBaseSprite>(); if (secondarybombsprite) { secondarybombsprite.PlaceAtPositionByAnchor(positionToSpawn3, tk2dBaseSprite.Anchor.MiddleCenter); } } } }
private void HandleFlip(FlippableCover table) { bool flag2 = base.Owner.PlayerHasActiveSynergy("Hidden Tech Landmine"); if (flag2) { SpawnObjectPlayerItem component = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>(); GameObject gameObject = component.objectToSpawn.gameObject; GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject, table.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite component2 = gameObject2.GetComponent <tk2dBaseSprite>(); bool flag3 = component2; if (flag3) { component2.PlaceAtPositionByAnchor(table.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } else { int num = 108; SpawnObjectPlayerItem component = PickupObjectDatabase.GetById(num).GetComponent <SpawnObjectPlayerItem>(); GameObject gameObject = component.objectToSpawn.gameObject; GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject, table.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite component2 = gameObject2.GetComponent <tk2dBaseSprite>(); bool flag4 = component2; if (flag4) { component2.PlaceAtPositionByAnchor(table.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } }
public override void OnReloadPressed(PlayerController player, Gun gun, bool bSOMETHING) { base.OnReloadPressed(player, gun, bSOMETHING); if ((gun.ClipCapacity == gun.ClipShotsRemaining) || (gun.CurrentAmmo == gun.ClipShotsRemaining)) { if (gun.CurrentAmmo >= 5) { gun.CurrentAmmo -= 5; SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>(); GameObject bigbombObject = bigbombPrefab.objectToSpawn.gameObject; GameObject bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, player.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite bombsprite = bigbombObject2.GetComponent <tk2dBaseSprite>(); if (bombsprite) { bombsprite.PlaceAtPositionByAnchor(player.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } } else if (gun.ClipShotsRemaining == 0 && gun.CurrentAmmo != 0) { if (player.PlayerHasActiveSynergy("Demolition Man")) { SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>(); GameObject bigbombObject = bigbombPrefab.objectToSpawn.gameObject; GameObject bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, player.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite bombsprite = bigbombObject2.GetComponent <tk2dBaseSprite>(); if (bombsprite) { bombsprite.PlaceAtPositionByAnchor(player.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } } }
public void PlaceBomb(Vector3 position) { SpawnObjectPlayerItem playerItem = PickupObjectDatabase.GetById(LastOwner.PlayerHasActiveSynergy("Cold as Ice") ? 109 : 108).GetComponent <SpawnObjectPlayerItem>(); GameObject bombPrefab = playerItem.objectToSpawn.gameObject; GameObject BombObject = Object.Instantiate <GameObject>(bombPrefab, position, Quaternion.identity); tk2dBaseSprite bombSprite = BombObject.GetComponent <tk2dBaseSprite>(); if (bombSprite) { bombSprite.PlaceAtPositionByAnchor(position, tk2dBaseSprite.Anchor.MiddleCenter); } }
protected override void OnDestroy() { if ((PickupObjectDatabase.GetById(565) as PlayerOrbitalItem).BreakVFX && this.sprite != null) { for (int i = 0; i < 5; i++) { SpawnManager.SpawnVFX((PickupObjectDatabase.GetById(565) as PlayerOrbitalItem).BreakVFX, this.sprite.WorldCenter.ToVector3ZisY(0f), Quaternion.identity); } tk2dBaseSprite sprite = SpawnManager.SpawnVFX((PickupObjectDatabase.GetById(538) as SilverBulletsPassiveItem).SynergyPowerVFX, this.sprite.WorldCenter.ToVector3ZisY(0f), Quaternion.identity).GetComponent <tk2dBaseSprite>(); sprite.PlaceAtPositionByAnchor(this.sprite.WorldCenter.ToVector3ZisY(0f), tk2dBaseSprite.Anchor.MiddleCenter); } base.OnDestroy(); }
public override void PurchaseItem(ShopItemController itemBad, bool actualPurchase = true, bool allowSign = true) { var item = itemBad as CustomShopItemController; float heightOffGround = -1f; if (item && item.sprite) { heightOffGround = item.sprite.HeightOffGround; } if (actualPurchase) { if (giveStatsOnPurchase) { foreach (var stat in statsToGive) { item.LastInteractingPlayer.ownerlessStatModifiers.Add(stat); } item.LastInteractingPlayer.stats.RecalculateStats(item.LastInteractingPlayer, false, false); } if (this.shopkeepFSM != null) { FsmObject fsmObject = this.shopkeepFSM.FsmVariables.FindFsmObject("referencedItem"); if (fsmObject != null) { fsmObject.Value = item; } this.shopkeepFSM.SendEvent("succeedPurchase"); } } if (!item.item.PersistsOnPurchase) { if (allowSign) { GameObject gameObject = (GameObject)UnityEngine.Object.Instantiate(BraveResources.Load("Global Prefabs/Sign_SoldOut", ".prefab")); tk2dBaseSprite component = gameObject.GetComponent <tk2dBaseSprite>(); component.PlaceAtPositionByAnchor(item.sprite.WorldCenter, tk2dBaseSprite.Anchor.MiddleCenter); gameObject.transform.position = gameObject.transform.position.Quantize(0.0625f); component.HeightOffGround = heightOffGround; component.UpdateZDepth(); } GameObject gameObject2 = (GameObject)UnityEngine.Object.Instantiate(ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof")); tk2dBaseSprite component2 = gameObject2.GetComponent <tk2dBaseSprite>(); component2.PlaceAtPositionByAnchor(item.sprite.WorldCenter.ToVector3ZUp(0f), tk2dBaseSprite.Anchor.MiddleCenter); component2.transform.position = component2.transform.position.Quantize(0.0625f); component2.HeightOffGround = 5f; component2.UpdateZDepth(); this.m_room.DeregisterInteractable(item); UnityEngine.Object.Destroy(item.gameObject); } }
//Add the item's functionality down here! I stole most of this from the Stuffed Star active item code! protected override void DoEffect(PlayerController user) { int bombToSpawn = 108; if (user.HasPickupID(109) || user.HasPickupID(364) || user.HasPickupID(170)) { bombToSpawn = 109; } if (user.HasPickupID(118)) { RandomBombSpawn(user, bombToSpawn); } List <AIActor> activeEnemies = user.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All); if (activeEnemies != null) { for (int i = 0; i < activeEnemies.Count; i++) { AIActor enemy = activeEnemies[i]; SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>(); GameObject bigbombObject = bigbombPrefab.objectToSpawn.gameObject; GameObject bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite bombsprite = bigbombObject2.GetComponent <tk2dBaseSprite>(); if (bombsprite) { bombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } if (user.HasPickupID(19) || user.HasPickupID(332)) { RestoreAmmo(user, activeEnemies.Count); SpawnObjectPlayerItem secondarybigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>(); GameObject secondarybigbombObject = secondarybigbombPrefab.objectToSpawn.gameObject; GameObject secondarybigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(secondarybigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite secondarybombsprite = secondarybigbombObject2.GetComponent <tk2dBaseSprite>(); if (secondarybombsprite) { secondarybombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } } } }
public IEnumerator ExplosiveDiarrhea(PlayerController user) { Notify(null, "Explosive Diarrhea"); for (int i = 0; i < 5; i++) { SpawnObjectPlayerItem component3 = PickupObjectDatabase.GetById(108).GetComponent <SpawnObjectPlayerItem>(); GameObject gameObject3 = component3.objectToSpawn.gameObject; GameObject gameObject4 = UnityEngine.Object.Instantiate <GameObject>(gameObject3, user.specRigidbody.UnitCenter, Quaternion.identity); tk2dBaseSprite component4 = gameObject4.GetComponent <tk2dBaseSprite>(); bool flag6 = component4; if (flag6) { component4.PlaceAtPositionByAnchor(user.specRigidbody.UnitCenter, tk2dBaseSprite.Anchor.MiddleCenter); } yield return(new WaitForSeconds(1f)); } yield return(null); }
private void DoSpawn(FlippableCover table) { Vector3 vector = table.transform.position; Vector3 vector2 = table.specRigidbody.UnitCenter; if (vector.y > 0f) { vector2 += Vector3.up * 0.25f; } GameObject gameObject2 = Instantiate <GameObject>(objectToSpawn, vector2, Quaternion.identity); tk2dBaseSprite component4 = gameObject2.GetComponent <tk2dBaseSprite>(); if (component4) { component4.PlaceAtPositionByAnchor(vector2, tk2dBaseSprite.Anchor.MiddleCenter); } Vector2 vector3 = table.transform.position; vector3 = Quaternion.Euler(0f, 0f, 0f) * vector3; DebrisObject debrisObject = LootEngine.DropItemWithoutInstantiating(gameObject2, gameObject2.transform.position, vector3, 0, false, false, true, false); if (gameObject2.GetComponent <BlackHoleDoer>()) { gameObject2.GetComponent <BlackHoleDoer>().coreDuration = 2f; debrisObject.PreventFallingInPits = true; debrisObject.PreventAbsorption = true; } if (vector.y > 0f && debrisObject) { debrisObject.additionalHeightBoost = -1f; if (debrisObject.sprite) { debrisObject.sprite.UpdateZDepth(); } } debrisObject.IsAccurateDebris = true; debrisObject.Priority = EphemeralObject.EphemeralPriority.Critical; debrisObject.bounceCount = 0; }
private void charmAll(PlayerController user) { GameObject shadowPrefab = PickupObjectDatabase.GetById(820).GetComponent <SpawnObjectPlayerItem>().objectToSpawn; GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(shadowPrefab, user.specRigidbody.UnitCenter, Quaternion.identity); tk2dBaseSprite component2 = gameObject.GetComponent <tk2dBaseSprite>(); if (component2 != null) { component2.PlaceAtPositionByAnchor(user.specRigidbody.UnitCenter.ToVector3ZUp(component2.transform.position.z), tk2dBaseSprite.Anchor.MiddleCenter); if (component2.specRigidbody != null) { component2.specRigidbody.RegisterGhostCollisionException(user.specRigidbody); } } KageBunshinController component3 = gameObject.GetComponent <KageBunshinController>(); if (component3) { component3.InitializeOwner(user); } gameObject.transform.position = gameObject.transform.position.Quantize(0.0625f); }
public void ConfigureOnPlacement(RoomHandler room) { m_ParentRoom = room; if (!m_itemDisplaySprite) { if (!contents) { contents = PickupObjectDatabase.GetById(ItemID); } if (!contents) { return; } m_itemDisplaySprite = tk2dSprite.AddComponent(new GameObject("Display Sprite") { transform = { parent = spawnTransform } }, contents.sprite.Collection, contents.sprite.spriteId); if (AddOutline) { SpriteOutlineManager.AddOutlineToSprite(m_itemDisplaySprite, Color.black, 0.1f, 0.05f, SpriteOutlineManager.OutlineType.NORMAL); } sprite.AttachRenderer(m_itemDisplaySprite); m_itemDisplaySprite.HeightOffGround = 0.25f; m_itemDisplaySprite.depthUsesTrimmedBounds = true; m_itemDisplaySprite.PlaceAtPositionByAnchor(spawnTransform.position, tk2dBaseSprite.Anchor.LowerCenter); m_itemDisplaySprite.transform.position = m_itemDisplaySprite.transform.position.Quantize(0.0625f); if (DoSpawnVFX) { GameObject gameObject = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof")); tk2dBaseSprite component = gameObject.GetComponent <tk2dBaseSprite>(); component.PlaceAtPositionByAnchor(m_itemDisplaySprite.WorldCenter.ToVector3ZUp(0f), tk2dBaseSprite.Anchor.MiddleCenter); component.HeightOffGround = 5f; component.UpdateZDepth(); } sprite.UpdateZDepth(); } }
private void HandleBlackHoleEffect(TableTechChaosEffectIdentifier identifier, FlippableCover obj) { if (identifier == TableTechChaosEffectIdentifier.BLACK_HOLE) { Vector3 vector2 = obj.specRigidbody.UnitCenter; GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(SingularityObject, vector2, Quaternion.identity); tk2dBaseSprite component4 = gameObject2.GetComponent <tk2dBaseSprite>(); if (component4) { component4.PlaceAtPositionByAnchor(vector2, tk2dBaseSprite.Anchor.MiddleCenter); } DebrisObject debrisObject = LootEngine.DropItemWithoutInstantiating(gameObject2, gameObject2.transform.position, Vector2.zero, 0f, false, false, true, false); if (gameObject2.GetComponent <BlackHoleDoer>()) { debrisObject.PreventFallingInPits = true; debrisObject.PreventAbsorption = true; } debrisObject.IsAccurateDebris = true; debrisObject.Priority = EphemeralObject.EphemeralPriority.Critical; debrisObject.bounceCount = 0; obj.DestroyCover(); } }
private void HandleHit(Projectile arg1, SpeculativeRigidbody arg2, bool arg3) { if (arg2.aiActor != null && arg2.aiActor.behaviorSpeculator && !arg2.aiActor.IsHarmlessEnemy) { PlayerController player = gun.CurrentOwner as PlayerController; if ((player.HasPickupID(131) || player.HasPickupID(239) || player.HasPickupID(815)) || (gun.DuctTapeMergedGunIDs != null)) { float value2 = UnityEngine.Random.Range(0.0f, 1.0f); if (value2 <= 0.05 && armorCount < 10) { GameManager.Instance.StartCoroutine(this.Clang()); LootEngine.SpawnItem(PickupObjectDatabase.GetById(120).gameObject, arg2.sprite.WorldBottomCenter, Vector2.up, 1f, true, false, true); armorCount += 1; } } float value = UnityEngine.Random.Range(0.0f, 1.0f); if (value <= 0.05) { GameManager.Instance.StartCoroutine(this.Clang()); // TURRET SpawnObjectPlayerItem portableturret = PickupObjectDatabase.GetById(201).GetComponent <SpawnObjectPlayerItem>(); String turretGuid = portableturret.enemyGuidToSpawn; GameObject objectToSpawn = EnemyDatabase.GetOrLoadByGuid(turretGuid).gameObject; GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(objectToSpawn, arg2.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite component4 = gameObject2.GetComponent <tk2dBaseSprite>(); if (component4) { component4.sprite.IsPerpendicular = true; component4.PlaceAtPositionByAnchor(arg2.sprite.WorldBottomCenter.ToVector3ZUp(component4.transform.position.z), tk2dBaseSprite.Anchor.MiddleCenter); } this.spawnedPlayerObject = gameObject2; PortableTurretController component5 = this.spawnedPlayerObject.GetComponent <PortableTurretController>(); if (component5) { component5.sourcePlayer = player; } } else { if (value <= 0.1) { GameManager.Instance.StartCoroutine(this.Clang()); //MINE SpawnObjectPlayerItem proximitymine = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>(); GameObject mineObject = proximitymine.objectToSpawn.gameObject; GameObject mineObject2 = UnityEngine.Object.Instantiate <GameObject>(mineObject, arg2.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite mineSprite = mineObject2.GetComponent <tk2dBaseSprite>(); if (mineSprite) { mineSprite.IsPerpendicular = true; mineSprite.PlaceAtPositionByAnchor(arg2.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } else { if (value <= 0.15) { GameManager.Instance.StartCoroutine(this.Clang()); //TABLE FoldingTableItem foldingtable = PickupObjectDatabase.GetById(644).GetComponent <FoldingTableItem>(); GameObject tableObject = foldingtable.TableToSpawn.gameObject; GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(tableObject.gameObject, arg2.sprite.WorldBottomCenter, Quaternion.identity); SpeculativeRigidbody componentInChildren = gameObject.GetComponentInChildren <SpeculativeRigidbody>(); FlippableCover component = gameObject.GetComponent <FlippableCover>(); component.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(component); component.ConfigureOnPlacement(component.transform.position.XY().GetAbsoluteRoom()); componentInChildren.Initialize(); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(componentInChildren, null, false); } } } } }
private IEnumerator BecomeMimic() { if (m_hands == null) { StartCoroutine(DoIntro()); } if (!ChaosConsole.WallMimicsUseRewardManager) { m_ChaosModeActive = true; } if (m_GlitchModeActive) { m_ItemDropOdds += 0.2f; m_FriendlyMimicOdds += 0.2f; } m_isHidden = false; SpeculativeRigidbody specRigidbody = this.specRigidbody; specRigidbody.OnRigidbodyCollision = (SpeculativeRigidbody.OnRigidbodyCollisionDelegate)Delegate.Remove(specRigidbody.OnRigidbodyCollision, new SpeculativeRigidbody.OnRigidbodyCollisionDelegate(HandleRigidbodyCollision)); SpeculativeRigidbody specRigidbody2 = this.specRigidbody; specRigidbody2.OnBeamCollision = (SpeculativeRigidbody.OnBeamCollisionDelegate)Delegate.Remove(specRigidbody2.OnBeamCollision, new SpeculativeRigidbody.OnBeamCollisionDelegate(HandleBeamCollision)); AIAnimator tongueAnimator = aiAnimator.ChildAnimator; tongueAnimator.renderer.enabled = true; tongueAnimator.spriteAnimator.enabled = true; AIAnimator spitAnimator = tongueAnimator.ChildAnimator; spitAnimator.renderer.enabled = true; spitAnimator.spriteAnimator.enabled = true; tongueAnimator.PlayUntilFinished("spawn", false, null, -1f, false); float delay = tongueAnimator.CurrentClipLength; float timer = 0f; bool hasPlayedVFX = false; while (timer < delay) { yield return(null); timer += BraveTime.DeltaTime; if (!hasPlayedVFX && delay - timer < 0.1f) { hasPlayedVFX = true; if (WallDisappearVFX) { Vector2 zero = Vector2.zero; Vector2 zero2 = Vector2.zero; DungeonData.Direction facingDirection = m_facingDirection; if (facingDirection != DungeonData.Direction.SOUTH) { if (facingDirection != DungeonData.Direction.EAST) { if (facingDirection == DungeonData.Direction.WEST) { zero = new Vector2(0f, -1f); zero2 = new Vector2(0f, 1f); } } else { zero = new Vector2(0f, -1f); zero2 = new Vector2(0f, 1f); } } else { zero = new Vector2(0f, -1f); zero2 = new Vector2(0f, 1f); } Vector2 min = Vector2.Min(pos1.ToVector2(), pos2.ToVector2()) + zero; Vector2 max = Vector2.Max(pos1.ToVector2(), pos2.ToVector2()) + new Vector2(1f, 1f) + zero2; for (int i = 0; i < 5; i++) { Vector2 v = BraveUtility.RandomVector2(min, max, new Vector2(0.25f, 0.25f)) + new Vector2(0f, 1f); GameObject gameObject = SpawnManager.SpawnVFX(WallDisappearVFX, v, Quaternion.identity); tk2dBaseSprite tk2dBaseSprite = (!gameObject) ? null : gameObject.GetComponent <tk2dBaseSprite>(); if (tk2dBaseSprite) { tk2dBaseSprite.HeightOffGround = 8f; tk2dBaseSprite.UpdateZDepth(); } } } } } if (!m_failedWallConfigure && m_GlitchModeActive) { if (aiActor.ParentRoom != null && GlitchEnemyList != null && GlitchEnemyList.Count > 0 && UnityEngine.Random.value <= m_spawnGitchEnemyOdds) { float RandomIntervalFloat = UnityEngine.Random.Range(0.02f, 0.06f); float RandomDispFloat = UnityEngine.Random.Range(0.1f, 0.16f); float RandomDispIntensityFloat = UnityEngine.Random.Range(0.1f, 0.4f); float RandomColorProbFloat = UnityEngine.Random.Range(0.05f, 0.2f); float RandomColorIntensityFloat = UnityEngine.Random.Range(0.1f, 0.25f); int count2 = this.specRigidbody.PixelColliders.Count; this.specRigidbody.PixelColliders.RemoveAt(count2 - 1); this.specRigidbody.PixelColliders.RemoveAt(count2 - 2); StaticReferenceManager.AllShadowSystemDepthHavers.Remove(m_fakeWall.transform); Destroy(m_fakeWall); Destroy(m_fakeCeiling); Vector3 targetPosForSpawn = m_startingPos + DungeonData.GetIntVector2FromDirection(m_facingDirection).ToVector3(); while (timer < delay) { aiAnimator.LockFacingDirection = true; aiAnimator.FacingDirection = DungeonData.GetAngleFromDirection(m_facingDirection); yield return(null); timer += BraveTime.DeltaTime; transform.position = Vector3.Lerp(m_startingPos, targetPosForSpawn, Mathf.InverseLerp(0.42f, 0.58f, timer)); this.specRigidbody.Reinitialize(); } yield return(null); Vector3 FinalSpawnLocation = transform.position; Vector3 VFXExplosionLocation = transform.position; Vector2 VFXExplosionSource = Vector2.zero; DungeonData.Direction CurrentDirection = m_facingDirection; if (CurrentDirection == DungeonData.Direction.WEST) { FinalSpawnLocation += new Vector3(2.5f, 3.5f); VFXExplosionLocation += new Vector3(3.5f, 3.5f); VFXExplosionSource = new Vector2(1, 0); } else if (CurrentDirection == DungeonData.Direction.EAST) { FinalSpawnLocation += new Vector3(4f, 3.5f); VFXExplosionLocation += new Vector3(3f, 3.5f); } else if (CurrentDirection == DungeonData.Direction.NORTH) { FinalSpawnLocation += new Vector3(3.5f, 4f); VFXExplosionLocation += new Vector3(3.5f, 3f); VFXExplosionSource = new Vector2(0, 1); } else if (CurrentDirection == DungeonData.Direction.SOUTH) { FinalSpawnLocation += new Vector3(3.5f, 1.5f); VFXExplosionLocation += new Vector3(3.5f, 2.5f); } yield return(null); string SelectedEnemy = BraveUtility.RandomElement(GlitchEnemyList); ExplosionData wallMimicExplosionData = new ExplosionData(); wallMimicExplosionData.CopyFrom(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData); wallMimicExplosionData.damage = 0f; wallMimicExplosionData.force /= 1.6f; if (SelectedEnemy != "RATCORPSE") { Exploder.Explode(VFXExplosionLocation, wallMimicExplosionData, VFXExplosionSource, ignoreQueues: true, damageTypes: CoreDamageTypes.None); GameObject SpawnVFXObject = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof")); tk2dBaseSprite SpawnVFXObjectComponent = SpawnVFXObject.GetComponent <tk2dBaseSprite>(); SpawnVFXObjectComponent.PlaceAtPositionByAnchor(FinalSpawnLocation + new Vector3(0f, 0.5f, 0f), tk2dBaseSprite.Anchor.MiddleCenter); SpawnVFXObjectComponent.HeightOffGround = 1f; SpawnVFXObjectComponent.UpdateZDepth(); AIActor glitchActor = AIActor.Spawn(EnemyDatabase.GetOrLoadByGuid(SelectedEnemy), FinalSpawnLocation, aiActor.ParentRoom, true, AIActor.AwakenAnimationType.Awaken, true); /*if (aiActor.ParentRoom != null && !aiActor.ParentRoom.IsSealed && !glitchActor.IgnoreForRoomClear) { * if (GameManager.Instance.PrimaryPlayer.CurrentRoom == aiActor.ParentRoom && aiActor.ParentRoom.EverHadEnemies) { * aiActor.ParentRoom.SealRoom(); * } * }*/ PickupObject.ItemQuality targetGlitchEnemyItemQuality = (UnityEngine.Random.value >= 0.2f) ? ((!BraveUtility.RandomBool()) ? PickupObject.ItemQuality.C : PickupObject.ItemQuality.D) : PickupObject.ItemQuality.B; GenericLootTable glitchEnemyLootTable = (!BraveUtility.RandomBool()) ? GameManager.Instance.RewardManager.GunsLootTable : GameManager.Instance.RewardManager.ItemsLootTable; PickupObject glitchEnemyItem = LootEngine.GetItemOfTypeAndQuality <PickupObject>(targetGlitchEnemyItemQuality, glitchEnemyLootTable, false); /*if (BraveUtility.RandomBool()) { * ChaosUtility.MakeCompanion(glitchActor); * } else { * ChaosShaders.Instance.ApplyGlitchShader(glitchActor, glitchActor.sprite, true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorIntensityFloat); * }*/ ChaosShaders.Instance.ApplyGlitchShader(glitchActor, glitchActor.sprite, true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorIntensityFloat); if (glitchEnemyItem) { glitchActor.AdditionalSafeItemDrops.Add(glitchEnemyItem); } } else { Exploder.Explode(VFXExplosionLocation, wallMimicExplosionData, VFXExplosionSource, ignoreQueues: true, damageTypes: CoreDamageTypes.None); GameObject SpawnVFXObject = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof")); tk2dBaseSprite SpawnVFXObjectComponent = SpawnVFXObject.GetComponent <tk2dBaseSprite>(); SpawnVFXObjectComponent.PlaceAtPositionByAnchor(FinalSpawnLocation + new Vector3(0f, 0.5f, 0f), tk2dBaseSprite.Anchor.MiddleCenter); SpawnVFXObjectComponent.HeightOffGround = 1f; SpawnVFXObjectComponent.UpdateZDepth(); GameObject spawnedRatCorpseObject = Instantiate(ChaosPrefabs.RatCorpseNPC, FinalSpawnLocation, Quaternion.identity); TalkDoerLite talkdoerComponent = spawnedRatCorpseObject.GetComponent <TalkDoerLite>(); talkdoerComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(talkdoerComponent); talkdoerComponent.transform.position.XY().GetAbsoluteRoom().TransferInteractableOwnershipToDungeon(talkdoerComponent); talkdoerComponent.playmakerFsm.SetState("Set Mode"); ChaosUtility.AddHealthHaver(talkdoerComponent.gameObject, 60, flashesOnDamage: false, exploderSpawnsItem: true); } yield return(null); Destroy(aiActor.gameObject); yield break; } } PickupObject.ItemQuality targetQuality = (UnityEngine.Random.value >= 0.2f) ? ((!BraveUtility.RandomBool()) ? PickupObject.ItemQuality.C : PickupObject.ItemQuality.D) : PickupObject.ItemQuality.B; GenericLootTable lootTable = (!BraveUtility.RandomBool()) ? GameManager.Instance.RewardManager.GunsLootTable : GameManager.Instance.RewardManager.ItemsLootTable; PickupObject item = LootEngine.GetItemOfTypeAndQuality <PickupObject>(targetQuality, lootTable, false); if (item) { if (m_ChaosModeActive) { if (UnityEngine.Random.value <= m_ItemDropOdds) { aiActor.AdditionalSafeItemDrops.Add(item); } else { aiActor.AdditionalSafeItemDrops.Add(PickupObjectDatabase.GetById(70)); if (BraveUtility.RandomBool()) { aiActor.AdditionalSafeItemDrops.Add(PickupObjectDatabase.GetById(70)); } if (m_GlitchModeActive) { aiActor.AdditionalSafeItemDrops.Add(PickupObjectDatabase.GetById(70)); } } if (UnityEngine.Random.value <= m_FriendlyMimicOdds) { m_isFriendlyMimic = true; } } else { aiActor.AdditionalSafeItemDrops.Add(item); } } else { if (m_ChaosModeActive && UnityEngine.Random.value <= m_FriendlyMimicOdds) { m_isFriendlyMimic = true; } } aiActor.enabled = true; behaviorSpeculator.enabled = true; if (aiActor.ParentRoom != null && aiActor.ParentRoom.IsSealed && !m_isFriendlyMimic) { aiActor.IgnoreForRoomClear = false; } // if (m_isFriendlyMimic) { ChaosUtility.MakeCompanion(aiActor); } if (m_isFriendlyMimic) { aiActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); } if (!m_failedWallConfigure) { int count = this.specRigidbody.PixelColliders.Count; for (int j = 0; j < count - 2; j++) { this.specRigidbody.PixelColliders[j].Enabled = true; } this.specRigidbody.PixelColliders.RemoveAt(count - 1); this.specRigidbody.PixelColliders.RemoveAt(count - 2); StaticReferenceManager.AllShadowSystemDepthHavers.Remove(m_fakeWall.transform); Destroy(m_fakeWall); Destroy(m_fakeCeiling); } else { int count = this.specRigidbody.PixelColliders.Count; for (int j = 0; j < count; j++) { this.specRigidbody.PixelColliders[j].Enabled = true; } } for (int k = 0; k < m_hands.Length; k++) { m_hands[k].gameObject.SetActive(true); } aiActor.ToggleRenderers(true); if (aiShooter) { aiShooter.ToggleGunAndHandRenderers(true, "ChaosWallMimicController"); } aiActor.IsGone = false; healthHaver.IsVulnerable = true; aiActor.State = AIActor.ActorState.Normal; for (int l = 0; l < m_hands.Length; l++) { m_hands[l].gameObject.SetActive(false); } m_isFinished = true; delay = 0.58f; timer = 0f; Vector3 targetPos = m_startingPos + DungeonData.GetIntVector2FromDirection(m_facingDirection).ToVector3(); while (timer < delay) { aiAnimator.LockFacingDirection = true; aiAnimator.FacingDirection = DungeonData.GetAngleFromDirection(m_facingDirection); yield return(null); timer += BraveTime.DeltaTime; transform.position = Vector3.Lerp(m_startingPos, targetPos, Mathf.InverseLerp(0.42f, 0.58f, timer)); this.specRigidbody.Reinitialize(); } aiAnimator.LockFacingDirection = false; knockbackDoer.SetImmobile(false, "ChaosWallMimicController"); aiActor.CollisionDamage = 0.5f; aiActor.CollisionKnockbackStrength = m_collisionKnockbackStrength; yield break; }
//SYNERGY WITH SPARE KEY --> "Spare Keybullet Kin" private void OnEnemyDamaged(float damage, bool fatal, HealthHaver enemy) { try { if (enemy.aiActor && enemy) { if (fatal && Owner.HasPickupID(71)) { if (UnityEngine.Random.value < 0.1f) { SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(71).GetComponent <SpawnObjectPlayerItem>(); GameObject bigbombObject = bigbombPrefab.objectToSpawn.gameObject; GameObject bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite bombsprite = bigbombObject2.GetComponent <tk2dBaseSprite>(); if (bombsprite) { bombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } } float outcomeDamage = damage; if (Owner.HasPickupID(442)) { outcomeDamage *= 2; } RoomHandler absoluteRoom = base.transform.position.GetAbsoluteRoom(); List <AIActor> enemiesInRoom = new List <AIActor>(); if (absoluteRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.RoomClear) != null) { foreach (AIActor m_Enemy in absoluteRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.RoomClear)) { enemiesInRoom.Add(m_Enemy); } } AIActor randomActiveEnemy = null; AIActor randomActiveOTHEREnemy = null; if (enemiesInRoom.Count > 1) { enemiesInRoom.Remove(enemy.aiActor); randomActiveEnemy = BraveUtility.RandomElement(enemiesInRoom); if (enemiesInRoom.Count > 2 && (Owner.HasPickupID(276) || Owner.HasPickupID(149) || Owner.HasPickupID(482) || Owner.HasPickupID(506) || Owner.HasPickupID(172) || Owner.HasPickupID(198) || Owner.HasPickupID(Gungeon.Game.Items["nn:spectre_bullets"].PickupObjectId))) { enemiesInRoom.Remove(randomActiveEnemy); randomActiveOTHEREnemy = BraveUtility.RandomElement(enemiesInRoom); } } if (randomActiveEnemy != null && randomActiveEnemy != enemy.aiActor && randomActiveEnemy.healthHaver && randomActiveEnemy.healthHaver.IsAlive && randomActiveEnemy.healthHaver.IsVulnerable) { if (OnCooldownVoodoo == false) { OnCooldownVoodoo = true; if (Owner.HasPickupID(527) && UnityEngine.Random.value < 0.25f) { randomActiveEnemy.gameActor.ApplyEffect(this.charmEffect, 1f, null); } randomActiveEnemy.healthHaver.ApplyDamage(outcomeDamage, Vector2.zero, "Voodoo Magic", CoreDamageTypes.None, DamageCategory.Normal, true, null, false); if ((Owner.HasPickupID(276) || Owner.HasPickupID(149) || Owner.HasPickupID(482) || Owner.HasPickupID(506) || Owner.HasPickupID(172) || Owner.HasPickupID(198) || Owner.HasPickupID(Gungeon.Game.Items["nn:spectre_bullets"].PickupObjectId)) && randomActiveOTHEREnemy != null && randomActiveOTHEREnemy != enemy.aiActor && randomActiveOTHEREnemy.healthHaver && randomActiveOTHEREnemy.healthHaver.IsAlive && randomActiveOTHEREnemy.healthHaver.IsVulnerable) { if (Owner.HasPickupID(527) && UnityEngine.Random.value < 0.25f) { randomActiveOTHEREnemy.gameActor.ApplyEffect(this.charmEffect, 1f, null); } randomActiveOTHEREnemy.healthHaver.ApplyDamage(outcomeDamage, Vector2.zero, "Voodoo Magic", CoreDamageTypes.None, DamageCategory.Normal, true, null, false); } Invoke("Cooldown", 0.01f); } } } } catch (Exception e) { ETGModConsole.Log(e.Message); ETGModConsole.Log(e.StackTrace); ETGModConsole.Log("IF YOU SEE THIS PLEASE REPORT IT TO NEVERNAMED (WITH SCREENSHOTS)"); } }
public static void RollHook(Action <RatPackItem, Projectile> orig, RatPackItem item, Projectile proj) { PlayerController player = item.LastOwner; if (player.HasPickupID(TrapCardId)) { if (cooldown == false) { float value = UnityEngine.Random.Range(0.0f, 1.0f); bool flag = value < 0.3; if (flag || player.HasPickupID(423)) { AIActor enemy = proj.Owner as AIActor; if (enemy != null) { cooldown = true; GameManager.Instance.StartCoroutine(StartCooldown()); LootEngine.DoDefaultItemPoof(enemy.sprite.WorldBottomCenter, false, true); AkSoundEngine.PostEvent("Play_OBJ_bomb_fuse_01", enemy.gameObject); if (player.HasPickupID(109) || player.HasPickupID(364) || player.HasPickupID(170)) { SpawnObjectPlayerItem icebombPrefab = PickupObjectDatabase.GetById(109).GetComponent <SpawnObjectPlayerItem>(); GameObject icebombObject = icebombPrefab.objectToSpawn.gameObject; GameObject icebombObject2 = UnityEngine.Object.Instantiate <GameObject>(icebombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite icebombsprite = icebombObject2.GetComponent <tk2dBaseSprite>(); if (icebombsprite) { icebombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } else if (!player.HasPickupID(109) || !player.HasPickupID(364) || !player.HasPickupID(170)) { SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(108).GetComponent <SpawnObjectPlayerItem>(); GameObject bigbombObject = bigbombPrefab.objectToSpawn.gameObject; GameObject bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite bombsprite = bigbombObject2.GetComponent <tk2dBaseSprite>(); if (bombsprite) { bombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } } else { RoomHandler absoluteRoom = player.CurrentRoom; if (absoluteRoom.HasActiveEnemies(RoomHandler.ActiveEnemyType.All)) { AIActor randomActiveEnemy = absoluteRoom.GetNearestEnemy(Vector2.zero, out float nearestDistance, true, true); nearestDistance = float.MaxValue; if (randomActiveEnemy != null) { if (player.HasPickupID(109) || player.HasPickupID(364) || player.HasPickupID(170)) { SpawnObjectPlayerItem icebombPrefab = PickupObjectDatabase.GetById(109).GetComponent <SpawnObjectPlayerItem>(); GameObject icebombObject = icebombPrefab.objectToSpawn.gameObject; GameObject icebombObject2 = UnityEngine.Object.Instantiate <GameObject>(icebombObject, randomActiveEnemy.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite icebombsprite = icebombObject2.GetComponent <tk2dBaseSprite>(); if (icebombsprite) { icebombsprite.PlaceAtPositionByAnchor(randomActiveEnemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } else if (!player.HasPickupID(109) || !player.HasPickupID(364) || !player.HasPickupID(170)) { SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(108).GetComponent <SpawnObjectPlayerItem>(); GameObject bigbombObject = bigbombPrefab.objectToSpawn.gameObject; GameObject bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, randomActiveEnemy.sprite.WorldBottomCenter, Quaternion.identity); tk2dBaseSprite bombsprite = bigbombObject2.GetComponent <tk2dBaseSprite>(); if (bombsprite) { bombsprite.PlaceAtPositionByAnchor(randomActiveEnemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); } } } } } } } } orig(item, proj); }
public void InitializeInternal(PickupObject i) { this.item = i; if (this.item && this.item.encounterTrackable) { GameStatsManager.Instance.SingleIncrementDifferentiator(this.item.encounterTrackable); } this.CurrentPrice = this.item.PurchasePrice; if (this.m_baseParentShop != null && this.CurrencyType == ShopCurrencyType.KEYS) { this.CurrentPrice = 1; if (this.item.quality == PickupObject.ItemQuality.A) { this.CurrentPrice = 2; } if (this.item.quality == PickupObject.ItemQuality.S) { this.CurrentPrice = 3; } } if (this.m_baseParentShop != null && this.CurrencyType == ShopCurrencyType.BLANKS) { this.CurrentPrice = 1; if (this.item.quality == PickupObject.ItemQuality.A || this.item.quality == PickupObject.ItemQuality.S) { this.CurrentPrice = 2; } } if (this.m_baseParentShop != null && this.CurrencyType == ShopCurrencyType.CUSTOM) { this.CurrentPrice = 1; if (customPrice != null) { this.CurrentPrice = customPrice(this.m_baseParentShop, this, this.item); } else { ETGModConsole.Log("CustomPrice is sadly null please look into this!"); } } base.gameObject.AddComponent <tk2dSprite>(); tk2dSprite tk2dSprite = i.GetComponent <tk2dSprite>(); if (tk2dSprite == null) { tk2dSprite = i.GetComponentInChildren <tk2dSprite>(); } base.sprite.SetSprite(tk2dSprite.Collection, tk2dSprite.spriteId); base.sprite.IsPerpendicular = true; if (this.UseOmnidirectionalItemFacing) { base.sprite.IsPerpendicular = false; } base.sprite.HeightOffGround = 1f; this.UseOmnidirectionalItemFacing = true; base.sprite.PlaceAtPositionByAnchor(base.transform.parent.position, tk2dBaseSprite.Anchor.MiddleCenter); base.sprite.transform.position = base.sprite.transform.position.Quantize(0.0625f); DepthLookupManager.ProcessRenderer(base.sprite.renderer); tk2dSprite componentInParent = base.transform.parent.gameObject.GetComponentInParent <tk2dSprite>(); if (componentInParent != null) { componentInParent.AttachRenderer(base.sprite); } SpriteOutlineManager.AddOutlineToSprite(base.sprite, Color.black, 0.1f, 0.05f, SpriteOutlineManager.OutlineType.NORMAL); GameObject gameObject = null; if (this.m_parentShop != null && this.m_parentShop.shopItemShadowPrefab != null) { gameObject = this.m_parentShop.shopItemShadowPrefab; } if (this.m_baseParentShop != null && this.m_baseParentShop.shopItemShadowPrefab != null) { gameObject = this.m_baseParentShop.shopItemShadowPrefab; } if (gameObject != null) { if (!this.m_shadowObject) { this.m_shadowObject = UnityEngine.Object.Instantiate <GameObject>(gameObject); } tk2dBaseSprite component = this.m_shadowObject.GetComponent <tk2dBaseSprite>(); component.PlaceAtPositionByAnchor(base.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter); component.transform.position = component.transform.position.Quantize(0.0625f); base.sprite.AttachRenderer(component); component.transform.parent = base.sprite.transform; component.HeightOffGround = -0.5f; } base.sprite.UpdateZDepth(); SpeculativeRigidbody orAddComponent = base.gameObject.GetOrAddComponent <SpeculativeRigidbody>(); orAddComponent.PixelColliders = new List <PixelCollider>(); PixelCollider pixelCollider = new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Circle, CollisionLayer = CollisionLayer.HighObstacle, ManualDiameter = 14 }; Vector2 vector = base.sprite.WorldCenter - base.transform.position.XY(); pixelCollider.ManualOffsetX = PhysicsEngine.UnitToPixel(vector.x) - 7; pixelCollider.ManualOffsetY = PhysicsEngine.UnitToPixel(vector.y) - 7; orAddComponent.PixelColliders.Add(pixelCollider); orAddComponent.Initialize(); orAddComponent.OnPreRigidbodyCollision = null; SpeculativeRigidbody speculativeRigidbody = orAddComponent; speculativeRigidbody.OnPreRigidbodyCollision = (SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate)Delegate.Combine(speculativeRigidbody.OnPreRigidbodyCollision, new SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate(this.ItemOnPreRigidbodyCollision)); base.RegenerateCache(); if (!GameManager.Instance.IsFoyer && this.item is Gun && GameManager.Instance.PrimaryPlayer.CharacterUsesRandomGuns) { this.ForceOutOfStock(); } }