public override void Update(bool eu)
        {
            if (this.timeSinceSeenPlayer >= 0)
            {
                this.timeSinceSeenPlayer++;
            }

            this.restartConversationAfterCurrentDialoge = false;

            base.Update(eu); //Noting Important :P
            for (int j = 0; j < this.oracle.room.game.cameras.Length; j++)
            {
                if (this.oracle.room.game.cameras[j].room == this.oracle.room)
                {
                    this.oracle.room.game.cameras[j].virtualMicrophone.volumeGroups[2] = 1f - this.oracle.room.gravity;
                }
                else
                {
                    this.oracle.room.game.cameras[j].virtualMicrophone.volumeGroups[2] = 1f;
                }
            }

            this.currSubBehavior.Update();

            if (!this.currSubBehavior.CurrentlyCommunicating)
            {
                this.pathProgression = Mathf.Min(1f, this.pathProgression + 1f / Mathf.Lerp(40f + this.pathProgression * 80f, Vector2.Distance(this.lastPos, this.nextPos) / 5f, 0.5f));
            }

            //Debug.Log(string.Concat((this.oracle as MaxOracle).arm.cornerPositions[0], (this.oracle as MaxOracle).arm.cornerPositions[1], (this.oracle as MaxOracle).arm.cornerPositions[2], (this.oracle as MaxOracle).arm.cornerPositions[3]));
            this.currentGetTo      = Custom.Bezier(this.lastPos, this.ClampVectorInRoom(this.lastPos + this.lastPosHandle), this.nextPos, this.ClampVectorInRoom(this.nextPos + this.nextPosHandle), this.pathProgression);
            this.floatyMovement    = false;
            this.investigateAngle += this.invstAngSpeed;
            this.inActionCounter++;

            if (this.pathProgression >= 1f && this.consistentBasePosCounter > 100 && !this.oracle.arm.baseMoving)
            {
                this.allStillCounter++;
            }
            else
            {
                this.allStillCounter = 0;
            }
            this.lastKillFac = this.killFac;

            this.action = Action.General_Idle;

            switch (this.action)
            {
            case Action.General_Idle:
                if (this.movementBehavior != MovementBehavior.Idle && this.movementBehavior != MovementBehavior.Meditate)
                {
                    this.movementBehavior = MovementBehavior.Idle;
                }
                this.throwOutCounter = 0;
                if (false)
                {
                    this.discoverCounter++;
                    if (this.oracle.room.GetTilePosition(this.player.mainBodyChunk.pos).y < 32 && (this.discoverCounter > 220 || Custom.DistLess(this.player.mainBodyChunk.pos, this.oracle.firstChunk.pos, 150f) || !Custom.DistLess(this.player.mainBodyChunk.pos, this.oracle.room.MiddleOfTile(this.oracle.room.ShortcutLeadingToNode(1).StartTile), 150f)))
                    {
                        this.SeePlayer();
                    }
                }
                break;

            case Action.General_GiveMark:
                this.movementBehavior = MovementBehavior.KeepDistance;
                if (this.inActionCounter > 30 && this.inActionCounter < 300)
                {
                    this.player.Stun(20);
                    this.player.mainBodyChunk.vel += Vector2.ClampMagnitude(this.oracle.room.MiddleOfTile(24, 14) - this.player.mainBodyChunk.pos, 40f) / 40f * 2.8f * Mathf.InverseLerp(30f, 160f, (float)this.inActionCounter);
                }
                if (this.inActionCounter == 30)
                {
                    this.oracle.room.PlaySound(SoundID.SS_AI_Give_The_Mark_Telekenisis, 0f, 1f, 1f);
                }
                if (this.inActionCounter == 300)
                {
                    this.player.mainBodyChunk.vel += Custom.RNV() * 10f;
                    this.player.bodyChunks[1].vel += Custom.RNV() * 10f;
                    this.player.Stun(40);
                    (this.oracle.room.game.session as StoryGameSession).saveState.deathPersistentSaveData.theMark = true;
                    if (this.player.slugcatStats.name == SlugcatStats.Name.Red)
                    {
                        this.oracle.room.game.GetStorySession.saveState.redExtraCycles = true;
                        if (this.oracle.room.game.cameras[0].hud != null)
                        {
                            if (this.oracle.room.game.cameras[0].hud.textPrompt != null)
                            {
                                this.oracle.room.game.cameras[0].hud.textPrompt.cycleTick = 0;
                            }
                            if (this.oracle.room.game.cameras[0].hud.map != null && this.oracle.room.game.cameras[0].hud.map.cycleLabel != null)
                            {
                                this.oracle.room.game.cameras[0].hud.map.cycleLabel.UpdateCycleText();
                            }
                        }
                        if (this.player.redsIllness != null)
                        {
                            this.player.redsIllness.GetBetter();
                        }
                        if (!this.oracle.room.game.GetStorySession.saveState.deathPersistentSaveData.pebblesHasIncreasedRedsKarmaCap)
                        {
                            this.oracle.room.game.GetStorySession.saveState.IncreaseKarmaCapOneStep();
                            this.oracle.room.game.GetStorySession.saveState.deathPersistentSaveData.pebblesHasIncreasedRedsKarmaCap = true;
                        }
                        else
                        {
                            Debug.Log("PEBBLES HAS ALREADY GIVEN RED ONE KARMA CAP STEP");
                        }
                    }
                    else
                    {
                        (this.oracle.room.game.session as StoryGameSession).saveState.deathPersistentSaveData.karmaCap = 9;
                    }
                    (this.oracle.room.game.session as StoryGameSession).saveState.deathPersistentSaveData.karma = (this.oracle.room.game.session as StoryGameSession).saveState.deathPersistentSaveData.karmaCap;
                    for (int l = 0; l < this.oracle.room.game.cameras.Length; l++)
                    {
                        if (this.oracle.room.game.cameras[l].hud.karmaMeter != null)
                        {
                            this.oracle.room.game.cameras[l].hud.karmaMeter.UpdateGraphic();
                        }
                    }
                    for (int m = 0; m < 20; m++)
                    {
                        this.oracle.room.AddObject(new Spark(this.player.mainBodyChunk.pos, Custom.RNV() * UnityEngine.Random.value * 40f, new Color(1f, 1f, 1f), null, 30, 120));
                    }
                }
                if (this.inActionCounter > 300 && this.player.graphicsModule != null)
                {
                    (this.player.graphicsModule as PlayerGraphics).markAlpha = Mathf.Max((this.player.graphicsModule as PlayerGraphics).markAlpha, Mathf.InverseLerp(500f, 300f, (float)this.inActionCounter));
                }
                if (this.inActionCounter >= 500)
                {
                    this.NewAction(this.afterGiveMarkAction);
                }
                break;
            }
            this.Move();
            if (this.working != this.getToWorking)
            {
                this.working = Custom.LerpAndTick(this.working, this.getToWorking, 0.05f, 0.0333333351f);
            }

            if (!this.currSubBehavior.Gravity)
            {
                this.oracle.room.gravity = Custom.LerpAndTick(this.oracle.room.gravity, 0f, 0.05f, 0.02f);
            }
            else
            {
                this.oracle.room.gravity = 1f - this.working;
            }
        }