예제 #1
0
void StateControl_RaptorSetKeyAnim(struct entity_s *ent, struct ss_animation_s *ss_anim, int key_anim)
{
    uint16_t current_state = Anim_GetCurrentState(ss_anim);

    switch(key_anim)
    {
        case ANIMATION_KEY_INIT:
            Anim_SetAnimation(ss_anim, TR_ANIMATION_RAPTOR_STAY, 0);
            break;

        case ANIMATION_KEY_DEAD:
            if(current_state == TR_STATE_RAPTOR_STAY)
            {
                Anim_SetAnimation(ss_anim, TR_ANIMATION_RAPTOR_DEAD1, 0);
            }
            else
            {
                Anim_SetAnimation(ss_anim, TR_ANIMATION_RAPTOR_DEAD2, 0);
            }
            break;
    }
}
예제 #2
0
int StateControl_Bear(struct entity_s *ent, struct ss_animation_s *ss_anim)
{
    character_command_p cmd = &ent->character->cmd;
    character_state_p state = &ent->character->state;
    uint16_t current_state = Anim_GetCurrentState(ss_anim);

    ent->character->rotate_speed_mult = 1.0f;
    ent->dir_flag = ENT_STAY;
    ss_anim->anim_frame_flags = ANIM_NORMAL_CONTROL;

    state->sprint = 0x00;
    state->crouch = 0x00;
    state->attack = 0x00;

    switch(current_state)
    {
        case TR_STATE_BEAR_STAY:    // -> 0 -> 3 -> 4 -> 5 -> 8 -> 9
            if(state->dead)
            {
                ss_anim->target_state = TR_STATE_BEAR_DEAD;
            }
            else if(cmd->move[0] > 0)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = (cmd->shift) ? (TR_STATE_BEAR_WALK) : (TR_STATE_BEAR_RUN);
            }
            else if(cmd->jump)
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY_HIGH;
            }
            else if(cmd->action)
            {
                ss_anim->target_state = TR_STATE_BEAR_ATTACK;
            }
            else if(cmd->move[0] < 0)
            {
                ss_anim->target_state = TR_STATE_BEAR_EAT;
            }
            else
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY;
            }
            break;

        case TR_STATE_BEAR_STAY_HIGH: // -> 1 -> 2 -> 5 -> 7 -> 9
            if(state->dead)
            {
                ss_anim->target_state = TR_STATE_BEAR_DEAD;
            }
            else if(cmd->move[0] < 0)
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY;
            }
            else if(cmd->move[0] > 0)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_BEAR_WALK_HIGH;
            }
            else if(cmd->action)
            {
                ss_anim->target_state = (cmd->jump) ? (TR_STATE_BEAR_ATTACK_HIGH) : (TR_STATE_BEAR_ATTACK);
            }
            else
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY_HIGH;
            }
            break;

        case TR_STATE_BEAR_WALK:
            ent->dir_flag = ENT_MOVE_FORWARD;
            if(!state->dead && cmd->shift && (cmd->move[0] > 0))
            {
                ss_anim->target_state = TR_STATE_BEAR_WALK;
            }
            else
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY;
            }
            break;

        case TR_STATE_BEAR_WALK_HIGH:
            ent->dir_flag = ENT_MOVE_FORWARD;
            if(!state->dead && cmd->shift && (cmd->move[0] > 0))
            {
                ss_anim->target_state = TR_STATE_BEAR_WALK_HIGH;
            }
            else
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY_HIGH;
            }
            break;

        case TR_STATE_BEAR_RUN:
            ent->dir_flag = ENT_MOVE_FORWARD;
            if(state->dead)
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY;
            }
            else if(cmd->action)
            {
                ss_anim->target_state = TR_STATE_BEAR_RUN_ATTACK;
            }
            else if(!cmd->shift && (cmd->move[0] > 0))
            {
                ss_anim->target_state = TR_STATE_BEAR_RUN;
            }
            else
            {
                ss_anim->target_state = TR_STATE_BEAR_STAY;
            }
            break;

        case TR_STATE_BEAR_ATTACK:
        case TR_STATE_BEAR_ATTACK_HIGH:
        case TR_STATE_BEAR_RUN_ATTACK:
            state->attack = 0x01;
            break;

        case TR_STATE_BEAR_DEAD:
            state->dead = 0x02;
            break;            
            
        default:
            cmd->rot[0] = 0;
            break;
    };

    return 0;
}
예제 #3
0
int StateControl_Raptor(struct entity_s *ent, struct ss_animation_s *ss_anim)
{
    character_command_p cmd = &ent->character->cmd;
    character_state_p state = &ent->character->state;
    uint16_t current_state = Anim_GetCurrentState(ss_anim);

    ent->character->rotate_speed_mult = 1.0f;
    ss_anim->anim_frame_flags = ANIM_NORMAL_CONTROL;

    state->sprint = 0x00;
    state->crouch = 0x00;
    state->attack = 0x00;

    switch(current_state)
    {
        case TR_STATE_RAPTOR_STAY: // -> 2 -> 3 -> 4 -> 6 -> 8
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_RAPTOR_DEAD1, 0, NULL);
            }
            else if(cmd->action)
            {
                ss_anim->target_state = TR_STATE_RAPTOR_STAY_ATTACK;
            }
            else if(cmd->jump)
            {
                ss_anim->target_state = TR_STATE_RAPTOR_JUMP_ATTACK;
            }
            else if(cmd->move[0] < 0)
            {
                ss_anim->target_state = TR_STATE_RAPTOR_ARRRR;
            }
            else if(cmd->move[0] > 0)
            {
                ss_anim->target_state = (cmd->shift) ? (TR_STATE_RAPTOR_WALK) : (TR_STATE_RAPTOR_RUN);
            }
            else
            {
                ss_anim->target_state = TR_STATE_RAPTOR_STAY;
            }
            break;

        case TR_STATE_RAPTOR_WALK: // -> 1
            ent->dir_flag = ENT_MOVE_FORWARD;
            if(!state->dead && cmd->shift && (cmd->move[0] > 0))
            {
                ss_anim->target_state = TR_STATE_RAPTOR_WALK;
            }
            else
            {
                ss_anim->target_state = TR_STATE_RAPTOR_STAY;
            }
            break;

        case TR_STATE_RAPTOR_RUN: // -> 1 -> 7
            ent->dir_flag = ENT_MOVE_FORWARD;
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_RAPTOR_DEAD2, 0, NULL);
            }
            else if(cmd->action)
            {
                ss_anim->target_state = TR_STATE_RAPTOR_RUN_ATTACK;
            }
            else if(!cmd->shift && (cmd->move[0] > 0))
            {
                ss_anim->target_state = TR_STATE_RAPTOR_RUN;
            }
            else
            {
                ss_anim->target_state = TR_STATE_RAPTOR_STAY;
            }
            break;

        case TR_STATE_RAPTOR_JUMP_ATTACK:
        case TR_STATE_RAPTOR_RUN_ATTACK:
        case TR_STATE_RAPTOR_STAY_ATTACK:
            state->attack = 0x01;
            break;
            
        case TR_STATE_RAPTOR_DEAD:
            state->dead = 0x02;
            break;
    };

    return 0;
}
예제 #4
0
int StateControl_Wolf(struct entity_s *ent, struct ss_animation_s *ss_anim)
{
    character_command_p cmd = &ent->character->cmd;
    character_state_p state = &ent->character->state;
    uint16_t current_state = Anim_GetCurrentState(ss_anim);

    ent->character->rotate_speed_mult = 1.0f;
    ent->dir_flag = ENT_STAY;
    ss_anim->anim_frame_flags = ANIM_NORMAL_CONTROL;

    state->sprint = 0x00;
    state->crouch = 0x00;
    state->attack = 0x00;
    state->can_attack = 0x00;

    if(!state->dead && (ent->character->target_id != ENTITY_ID_NONE))
    {
        entity_p target = World_GetEntityByID(ent->character->target_id);
        if(target && Room_IsInNearRoomsList(ent->self->room, target->self->room))
        {
            float pos[3], *v = ent->bf->bone_tags[ent->character->bone_head].current_transform + 12;
            Mat4_vec3_mul_macro(pos, ent->transform.M4x4, v);
            pos[0] -= target->obb->centre[0];
            pos[1] -= target->obb->centre[1];
            pos[2] -= target->obb->centre[2];
            if((pos[2] > -target->obb->extent[2]) && (pos[2] < target->obb->extent[2]) &&
               (pos[0] * pos[0] + pos[1] * pos[1] < 400.0f * 400.0f))
            {
                state->can_attack = 0x01;
            }
        }
    }

    switch(current_state)
    {
        case TR_STATE_WOLF_STAY:// 1    // -> 2 -> 7 -> 8 -> 9
            cmd->rot[0] = 0;
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD1, 0, NULL);
            }
            else if(cmd->move[0] > 0)
            {
                ss_anim->target_state = TR_STATE_WOLF_WALK;
                ent->dir_flag = ENT_MOVE_FORWARD;
            }
            else if(cmd->shift)
            {
                ss_anim->target_state = TR_STATE_WOLF_STAY_CROUCH;
            }
            else if(cmd->action)
            {
                ss_anim->target_state = TR_STATE_WOLF_WOOOO;
            }
            else if(cmd->move[0] < 0)
            {
                ss_anim->target_state = TR_STATE_WOLF_IDLE;
            }
            else
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
            }
            break;

        case TR_STATE_WOLF_STAY_CROUCH:// 9 // -> 1 -> 3 -> 5 -> 7 -> 12
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD1, 0, NULL);
            }
            else if(cmd->move[0] > 0)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = (cmd->shift) ? (TR_STATE_WOLF_CROUCH) : (TR_STATE_WOLF_RUN);
            }
            else if(cmd->action)
            {
                cmd->rot[0] = 0;
                ss_anim->target_state = TR_STATE_WOLF_STAY_ATTACK;
            }
            else if(cmd->jump)
            {
                cmd->rot[0] = 0;
                ss_anim->target_state = TR_STATE_WOLF_WOOOO;
            }
            else if(cmd->shift)
            {
                ss_anim->target_state = TR_STATE_WOLF_STAY_CROUCH;
            }
            else
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_WOLF_STAY;
            }
            break;

        case TR_STATE_WOLF_WALK:// 2    // -> 1 -> 5
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD1, 0, NULL);
            }
            else if(cmd->move[0] > 0)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = (cmd->shift) ? (TR_STATE_WOLF_WALK) : (TR_STATE_WOLF_CROUCH);
            }
            else
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_WOLF_STAY;
            }
            break;

        case TR_STATE_WOLF_RUN:// 3     // -> 6 -> 9 -> 10
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD1, 0, NULL);
            }
            else if(cmd->action)
            {
                ss_anim->target_state = TR_STATE_WOLF_JUMP_ATTACK;
            }
            else if(cmd->move[0] > 0)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = (cmd->shift) ? (TR_STATE_WOLF_RUN) : (TR_STATE_WOLF_CROUCH);
            }
            else if(cmd->roll)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_WOLF_RUN_RIGHT;
            }
            else
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_WOLF_STAY_CROUCH;
            }
            break;

        case TR_STATE_WOLF_CROUCH:// 5  // -> 3 -> 9 -> 12
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD1, 0, NULL);
            }
            else if(cmd->action)
            {
                cmd->rot[0] = 0;
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_WOLF_JUMP_ATTACK;
            }
            else if(cmd->move[0] > 0)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = (cmd->shift) ? (TR_STATE_WOLF_CROUCH) : (TR_STATE_WOLF_RUN);
            }
            else
            {
                cmd->rot[0] = 0;
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_WOLF_STAY_CROUCH;
            }
            break;

        case TR_STATE_WOLF_STAY_ATTACK:// 12
            state->attack = 0x01;
            break;

        case TR_STATE_WOLF_JUMP_ATTACK:// 6   // -> 3
            ent->dir_flag = ENT_MOVE_FORWARD;
            state->attack = 0x01;
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD3, 0, NULL);
            }
            else if(cmd->action)
            {
                ss_anim->target_state = TR_STATE_WOLF_JUMP_ATTACK;
            }
            else
            {
                ss_anim->target_state = TR_STATE_WOLF_RUN;
            }
            break;

        case TR_STATE_WOLF_WOOOO:// 7
            cmd->rot[0] = 0;
            break;

        case TR_STATE_WOLF_IDLE:// 8    // -> 1
            cmd->rot[0] = 0;
            ent->no_move = 0x01;
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD1, 0, NULL);
            }
            else if(cmd->move[0] > 0)
            {
                ent->dir_flag = ENT_MOVE_FORWARD;
                ss_anim->target_state = TR_STATE_WOLF_STAY;
            }
            else
            {
                ss_anim->target_state = TR_STATE_WOLF_IDLE;
            }
            break;

        case TR_STATE_WOLF_RUN_RIGHT:// 10
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_WOLF_DEAD2, 0, NULL);
            }
            else
            {
                cmd->rot[0] = -1;
                ent->dir_flag = ENT_MOVE_FORWARD;
            }
            break;

        case TR_STATE_WOLF_DEAD:// 11
            state->dead = 0x01;
            if(ss_anim->model->animations[ss_anim->current_animation].max_frame <= ss_anim->current_frame + 1)
            {
                state->dead = 0x02;
                state->ragdoll = 0x01;
            }
            break;

        default:
            cmd->rot[0] = 0;
            break;
    };

    return 0;
}
int StateControl_Crocodile(struct entity_s *ent, struct ss_animation_s *ss_anim)
{
    character_command_p cmd = &ent->character->cmd;
    character_state_p state = &ent->character->state;
    skeletal_model_p sm = ss_anim->model;
    uint16_t current_state = Anim_GetCurrentState(ss_anim);

    ent->character->rotate_speed_mult = 1.0f;
    ss_anim->anim_frame_flags = ANIM_NORMAL_CONTROL;

    state->sprint = 0x00;
    state->crouch = 0x00;
    state->attack = 0x00;

    switch(ent->move_type)
    {
        case MOVE_ON_WATER:
            ent->move_type = MOVE_UNDERWATER;
        case MOVE_UNDERWATER:
            sm = World_GetModelByID(TR_MODEL_CROCODILE_UW_TR1);
            if(sm && ss_anim->model->id != TR_MODEL_CROCODILE_UW_TR1)
            {
                ss_anim->model = sm;
                Anim_SetAnimation(ss_anim, TR_ANIMATION_CROCODILE_UW_FLOW, 0);
            }
            break;

        case MOVE_ON_FLOOR:
            sm = World_GetModelByID(TR_MODEL_CROCODILE_OF_TR1);
            if(sm && ss_anim->model->id != TR_MODEL_CROCODILE_OF_TR1)
            {
                ss_anim->model = sm;
                Anim_SetAnimation(ss_anim, TR_ANIMATION_CROCODILE_OF_STAY, 0);
            }
            break;
    }

    if(ss_anim->model->id == TR_MODEL_CROCODILE_UW_TR1)
    {
        ent->character->parameters.param[PARAM_AIR] = 1000;
        ent->character->parameters.maximum[PARAM_AIR] = 1000;

        switch(current_state)
        {
            case TR_STATE_CROCODILE_UW_FLOW: // -> 2
                if(state->dead)
                {
                    Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_CROCODILE_UW_DEAD, 0, NULL);
                }
                else if(cmd->action)
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_UW_ATTACK;
                }
                else
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_UW_FLOW;
                }
                break;

            case TR_STATE_CROCODILE_UW_ATTACK: // -> 1
                state->attack = 0x01;
                ent->dir_flag = ENT_MOVE_FORWARD;
                if(!state->dead && cmd->action)
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_UW_ATTACK;
                }
                else
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_UW_FLOW;
                }
                break;
                
        case TR_STATE_CROCODILE_DEAD:
            state->dead = 0x02;
            break;
        };
    }
    else if(ss_anim->model->id == TR_MODEL_CROCODILE_OF_TR1)
    {
        switch(current_state)
        {
            case TR_STATE_CROCODILE_STAY: // -> 2 -> 3 -> 4 -> 5
                if(state->dead)
                {
                    Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_CROCODILE_OF_DEAD, 0, NULL);
                }
                else if(cmd->action)
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_ATTACK;
                }
                else if(cmd->move[0] > 0)
                {
                    ss_anim->next_state = (cmd->shift) ? (TR_STATE_CROCODILE_WALK) : (TR_STATE_CROCODILE_RUN);
                }
                else if(cmd->roll)
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_RUN_RIGHT;
                }
                else
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_STAY;
                }
                break;

            case TR_STATE_CROCODILE_WALK: // -> 1 -> 2
                ent->dir_flag = ENT_MOVE_FORWARD;
                if(!state->dead && (cmd->move[0] > 0))
                {
                    ss_anim->next_state = (cmd->shift) ? (TR_STATE_CROCODILE_WALK) : (TR_STATE_CROCODILE_RUN);
                }
                else
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_STAY;
                }
                break;

            case TR_STATE_CROCODILE_RUN: // -> 1 -> 3
                ent->dir_flag = ENT_MOVE_FORWARD;
                if(!state->dead && (cmd->move[0] > 0))
                {
                    ss_anim->next_state = (cmd->shift) ? (TR_STATE_CROCODILE_WALK) : (TR_STATE_CROCODILE_RUN);
                }
                else
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_STAY;
                }
                break;

            case TR_STATE_CROCODILE_RUN_RIGHT:
                ent->dir_flag = ENT_MOVE_FORWARD;
                cmd->rot[0] = -1;
                if(!state->dead && cmd->roll)
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_RUN_RIGHT;
                }
                else
                {
                    ss_anim->next_state = TR_STATE_CROCODILE_WALK;
                }
                break;

            case TR_STATE_CROCODILE_ATTACK:
                state->attack = 0x01;
                break;
                
            case TR_STATE_CROCODILE_DEAD:
                state->dead = 0x02;
                break;
        };
    }

    return 0;
}
int StateControl_TorsoBoss(struct entity_s *ent, struct ss_animation_s *ss_anim)
{
    character_command_p cmd = &ent->character->cmd;
    character_state_p state = &ent->character->state;
    uint16_t current_state = Anim_GetCurrentState(ss_anim);

    ent->character->rotate_speed_mult = 1.0f;
    ss_anim->anim_frame_flags = ANIM_NORMAL_CONTROL;

    state->sprint = 0x00;
    state->crouch = 0x00;
    state->attack = 0x00;

    ent->character->rotate_speed_mult = 0.33;
    switch(current_state)
    {
        case TR_STATE_TORSO_BOSS_STAY: // -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
            cmd->rot[0] = 0;
            ent->dir_flag = ENT_MOVE_FORWARD;
            if(state->dead)
            {
                Entity_SetAnimation(ent, ANIM_TYPE_BASE, TR_ANIMATION_TORSO_BOSS_DEAD, 0, NULL);
            }
            else if(cmd->action)
            {
                ss_anim->target_state = (cmd->shift) ? (TR_STATE_TORSO_BOSS_ATTACK_BIG) : (TR_STATE_TORSO_BOSS_ATTACK);
            }
            else if(cmd->jump)
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_ATTACK_KILL;
            }
            else if(cmd->move[1] < 0)
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_TURN_RIGHT;
            }
            else if(cmd->move[1] > 0)
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_TURN_LEFT;
            }
            else if(cmd->move[0] > 0)
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_MOVE;
            }
            else
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_STAY;
            }
            break;

        case TR_STATE_TORSO_BOSS_MOVE: // -> 1
            if(!state->dead && (cmd->move[1] > 0))
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_MOVE;
            }
            else
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_STAY;
            }
            break;

        case TR_STATE_TORSO_BOSS_TURN_RIGHT: // -> 1
            cmd->rot[0] = 1;
            if(!state->dead && (cmd->move[1] < 0))
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_TURN_RIGHT;
            }
            else
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_STAY;
            }
            break;

        case TR_STATE_TORSO_BOSS_TURN_LEFT: // -> 1
            cmd->rot[0] = -1;
            if(!state->dead && (cmd->move[1] > 0))
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_TURN_LEFT;
            }
            else
            {
                ss_anim->target_state = TR_STATE_TORSO_BOSS_STAY;
            }
            break;

        case TR_STATE_TORSO_BOSS_ATTACK_KILL:
        case TR_STATE_TORSO_BOSS_ATTACK:
        case TR_STATE_TORSO_BOSS_ATTACK_BIG:
        case TR_STATE_TORSO_BOSS_ATTACK_JUMP:
            state->attack = 0x01;
            cmd->rot[0] = 0;
            break;

        case TR_STATE_TORSO_BOSS_DEAD:
            state->dead = 0x02;
            break;
            
        default:
            cmd->rot[0] = 0;
            break;
    };

    return 0;
}