syntax = "proto2";

//Attempts to provide a complete framework for reading everything from a fortress needed for vizualization
package AdventureControl;

option optimize_for = LITE_RUNTIME;

import "RemoteFortressReader.proto";

// Plugin: RemoteFortressReader

enum AdvmodeMenu
{
    Default = 0;
    Look = 1;
    ConversationAddress = 2;
    ConversationSelect = 3;
    ConversationSpeak = 4;
    Inventory = 5;
    Drop = 6;
    ThrowItem = 7;
    Wear = 8;
    Remove = 9;
    Interact = 10;
    Put = 11;
    PutContainer = 12;
    Eat = 13;
    ThrowAim = 14;
    Fire = 15;
    Get = 16;
    Unk17 = 17;
    CombatPrefs = 18;
    Companions = 19;
    MovementPrefs = 20;
    SpeedPrefs = 21;
    InteractAction = 22;
    MoveCarefully = 23;
    Announcements = 24;
    UseBuilding = 25;
    Travel = 26;
    Unk27 = 27;
    Unk28 = 28;
    SleepConfirm = 29;
    SelectInteractionTarget = 30;
    Unk31 = 31;
    Unk32 = 32;
    FallAction = 33;
    ViewTracks = 34;
    Jump = 35;
    Unk36 = 36;
    AttackConfirm = 37;
    AttackType = 38;
    AttackBodypart = 39;
    AttackStrike = 40;
    Unk41 = 41;
    Unk42 = 42;
    DodgeDirection = 43;
    Unk44 = 44;
    Unk45 = 45;
    Build = 46;
}

enum CarefulMovementType
{
    DEFAULT_MOVEMENT = 0;
    RELEASE_ITEM_HOLD = 1;
    RELEASE_TILE_HOLD = 2;
    ATTACK_CREATURE = 3;
    HOLD_TILE = 4;
    MOVE = 5;
    CLIMB = 6;
    HOLD_ITEM = 7;
    BUILDING_INTERACT = 8;
    ITEM_INTERACT = 9;
    ITEM_INTERACT_GUIDE = 10;
    ITEM_INTERACT_RIDE = 11;
    ITEM_INTERACT_PUSH = 12;
}

enum MiscMoveType
{
    SET_CLIMB = 0;
    SET_STAND = 1;
    SET_CANCEL = 2;
}

message MoveCommandParams
{
    optional RemoteFortressReader.Coord direction = 1;
}

message MovementOption
{
    optional RemoteFortressReader.Coord dest = 1;
    optional RemoteFortressReader.Coord source = 2;
    optional RemoteFortressReader.Coord grab = 3;
    optional CarefulMovementType movement_type = 4;
}

message MenuContents
{
    optional AdvmodeMenu current_menu = 1;
    repeated MovementOption movements = 2;
}

message MiscMoveParams
{
    optional MiscMoveType type = 1;
}