public ExpandExplodeOnDeath()
        {
            immuneToIBombApp = false;
            deathType        = DeathType.PreDeath;
            preDeathDelay    = 0.1f;

            useDefaultExplosion   = false;
            spawnItemsOnExplosion = false;
            isCorruptedObject     = false;
            ExplosionNotGuranteed = false;
            isCorruptedNPC        = false;
            spawnShardsOnDeath    = false;

            numberOfDefaultItemsToSpawn = 1;

            ExplosionOdds   = 0.3f;
            ExplosionDamage = 120f;

            breakStyle      = MinorBreakable.BreakStyle.BURST;
            direction       = Vector2.zero;
            minAngle        = 0;
            maxAngle        = 0;
            verticalSpeed   = 0.4f;
            minMagnitude    = 0.25f;
            maxMagnitude    = 0.5f;
            heightOffGround = 0.1f;

            m_hasTriggered = false;
            // m_GrenadeGuyPrefab = EnemyDatabase.GetOrLoadByGuid("4d37ce3d666b4ddda8039929225b7ede").gameObject;
            // ExpandExplosionData = m_GrenadeGuyPrefab.gameObject.GetComponent<ExplodeOnDeath>().explosionData;
            // This uses Explosion Data settings from Grenade Kin by default
            ExpandExplosionData = ExpandUtility.GenerateExplosionData();
        }
        public static void Init(AssetBundle expandSharedAssets1)
        {
            TableTechAssassinHook.TableExplosionData = ExpandUtility.GenerateExplosionData(damage: 60);

            TableTechAssasinObject = expandSharedAssets1.LoadAsset <GameObject>("Table Tech Assassin");
            TableTechAssassin tableTechAssassin = TableTechAssasinObject.AddComponent <TableTechAssassin>();

            ItemBuilder.AddSpriteToObject(TableTechAssasinObject, expandSharedAssets1.LoadAsset <Texture2D>("tabletech_assassin"), false, false);

            string shortDesc = "Betray the Flipper";
            string longDesc  = "A forbidden technique thought lost was recoverd in the Gungeon.\n\nAll that was written was this: \n\n 'Do upon the flipper that which the flipper had done to you'";

            ItemBuilder.SetupItem(tableTechAssassin, shortDesc, longDesc, "ex");
            tableTechAssassin.quality = ItemQuality.D;
        }
Ejemplo n.º 3
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            TableTechAssassinHook.TableExplosionData = ExpandUtility.GenerateExplosionData(damage: 60);

            TableTechAssasinObject = expandSharedAssets1.LoadAsset <GameObject>("Table Tech Assassin");
            SpriteSerializer.AddSpriteToObject(TableTechAssasinObject, ExpandPrefabs.EXItemCollection, "tabletech_assassin");

            TableTechAssassin tableTechAssassin = TableTechAssasinObject.AddComponent <TableTechAssassin>();

            string shortDesc = "Betray the Flipper";
            string longDesc  = "A forbidden technique thought lost was recovered in the Gungeon.\n\nAll that was written was this: \n\n 'Do upon the flipper that which the flipper had done to you'";

            ItemBuilder.SetupItem(tableTechAssassin, shortDesc, longDesc, "ex");
            tableTechAssassin.quality = ItemQuality.D;
            if (!ExpandSettings.EnableEXItems)
            {
                tableTechAssassin.quality = ItemQuality.EXCLUDED;
            }
            TableTechAssasinID = tableTechAssassin.PickupObjectId;
        }
Ejemplo n.º 4
0
        public ExpandKickableObject()
        {
            rollSpeed                 = 6f;
            rollAnimations            = null;
            goopFrequency             = 0.05f;
            goopRadius                = 1f;
            breakTimerLength          = 3f;
            RollingDestroysSafely     = false;
            triggersBreakTimer        = false;
            AllowTopWallTraversal     = true;
            explodesOnKick            = true;
            willDefinitelyExplode     = false;
            spawnObjectOnSelfDestruct = false;
            useDefaultExplosion       = false;
            hasRollingAnimations      = false;
            RollingBreakAnim          = "red_barrel_break";
            m_lastOutlineDirection    = (DungeonData.Direction)(-1);
            m_objectSpawned           = false;
            TableExplosionData        = ExpandUtility.GenerateExplosionData();

            m_WasKicked = false;
        }
Ejemplo n.º 5
0
        private void Start()
        {
            // Delay initial configuration for ItemCrate version to avoid possible misalignment since GameObjects get instantiated initially from zero position.
            // Item crate object comes with this controller pre-attached. So position may not be correct frame 1. ;)
            if (!Configured && IsItemCrate)
            {
                StartCoroutine(DelayedAutoConfiguration());
                return;
            }
            m_ParentEnemy        = aiActor;
            m_CachedRotation     = transform.rotation;
            m_cachedPosition     = transform.position;
            m_CachedLayer        = gameObject.layer;
            m_CachedSpriteZDepth = sprite.HeightOffGround;
            m_maxSway            = MaxSwayAngle;

            if (knockbackDoer)
            {
                knockbackDoer.SetImmobile(true, "Paradrop Protection");
            }

            if (m_ParentEnemy)
            {
                m_cachedScale = m_ParentEnemy.EnemyScale;
            }
            else
            {
                m_cachedScale = Vector2.one;
            }

            if (m_ParentEnemy && m_ParentEnemy.HasShadow && m_ParentEnemy.ShadowObject)
            {
                m_ParentEnemy.ShadowObject.GetComponent <tk2dSprite>().renderer.enabled = false;
            }

            if (m_ParentEnemy)
            {
                m_ParentEnemy.behaviorSpeculator.enabled = false;
                if (m_ParentEnemy.aiAnimator)
                {
                    m_ParentEnemy.aiAnimator.FacingDirection = -90;
                }
                if (m_ParentEnemy.aiShooter)
                {
                    m_ParentEnemy.aiShooter.AimAtPoint(m_ParentEnemy.CenterPosition - new Vector2(0, 2));
                    m_ParentEnemy.aiShooter.ToggleGunAndHandRenderers(false, "ParaDrop");
                }
            }

            if (specRigidbody && !IsItemCrate)
            {
                specRigidbody.CollideWithOthers = false;
            }
            if (healthHaver)
            {
                healthHaver.PreventAllDamage = true;
                healthHaver.IsVulnerable     = false;
            }

            if (ParentObjectExplodyBarrel && !IsItemCrate)
            {
                m_CachedExplosionData = ExpandUtility.GenerateExplosionData();
            }

            // MeshRenderer pre-disabled via added components in Unity Editor for The Item Drop host object.
            if (!IsItemCrate)
            {
                sprite.renderer.enabled = false;
            }

            m_Parachute = Instantiate(ExpandPrefabs.EX_Parachute, Vector3.zero, Quaternion.identity);
            m_ParachuteSpriteAnimator          = m_Parachute.GetComponent <tk2dSpriteAnimator>();
            m_ParachuteSprite                  = m_Parachute.GetComponent <tk2dSprite>();
            m_ParachuteSprite.renderer.enabled = false;
            if (IsItemCrate)
            {
                m_ParachuteSprite.HeightOffGround += 3f;
                m_ParachuteSprite.UpdateZDepth();
            }


            // Despite my absolute shit math skills I somehow got this right. :P
            // (this correctly sets the parachute above the host object's sprite)
            float ParachuteXSize    = (m_ParachuteSprite.GetBounds().size.x / 2);
            float ObjectUnitCenterX = m_cachedPosition.x;
            float ObjectUnitCenterY = m_cachedPosition.y;

            if (UseObjectSizeOverride)
            {
                ObjectUnitCenterX += OverrideObjectSize.x;
                ObjectUnitCenterY += OverrideObjectSize.y;
            }
            else if (specRigidbody)
            {
                specRigidbody.Reinitialize(); // Make sure rigidbody colliders are at current object's position
                ObjectUnitCenterX = specRigidbody.GetPixelCollider(ColliderType.HitBox).UnitCenter.x;
                ObjectUnitCenterY = specRigidbody.GetPixelCollider(ColliderType.HitBox).UnitTopCenter.y;
            }

            m_Parachute.transform.position = new Vector2((ObjectUnitCenterX - ParachuteXSize), ObjectUnitCenterY);

            m_Parachute.layer = gameObject.layer;

            if (IsItemCrate)
            {
                GameObject EXItemBoxAnchor = new GameObject("EX ItemBox Anchor")
                {
                    layer = gameObject.layer
                };
                EXItemBoxAnchor.transform.position = m_ParachuteSprite.WorldBottomCenter;
                m_ItemBoxAnchor = EXItemBoxAnchor;
                EXItemBoxAnchor.transform.SetParent(m_Parachute.transform);
                gameObject.transform.SetParent(EXItemBoxAnchor.transform);
            }
            else
            {
                gameObject.transform.SetParent(m_Parachute.transform);
            }

            // m_Anchor = Instantiate(ExpandPrefabs.EX_ParadropAnchor, m_ParachuteSprite.WorldBottomCenter, Quaternion.identity).transform;
            m_Anchor = new GameObject("EXParaDropAnchor")
            {
                layer = gameObject.layer
            }.transform;
            m_Anchor.transform.position = m_ParachuteSprite.WorldBottomCenter;
            m_Parachute.transform.SetParent(m_Anchor);

            m_CachedPositionOffset = (m_Anchor.position - m_cachedPosition.ToVector3ZUp());

            switchState   = State.PopIntoAir;
            m_Initialized = true;
        }