syntax = "proto2";

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

option optimize_for = LITE_RUNTIME;

// Plugin: RemoteFortressReader

message InstrumentFlags
 {
     optional bool indefinite_pitch = 1;
     optional bool placed_as_building = 2;
     optional bool metal_mat = 3;
     optional bool stone_mat = 4;
     optional bool wood_mat = 5;
     optional bool glass_mat = 6;
     optional bool ceramic_mat = 7;
     optional bool shell_mat = 8;
     optional bool bone_mat = 9;
}

enum PitchChoiceType
{
    MEMBRANE_POSITION = 0;
    SUBPART_CHOICE = 1;
    KEYBOARD = 2;
    STOPPING_FRET = 3;
    STOPPING_AGAINST_BODY = 4;
    STOPPING_HOLE = 5;
    STOPPING_HOLE_KEY = 6;
    SLIDE = 7;
    HARMONIC_SERIES = 8;
    VALVE_ROUTES_AIR = 9;
    BP_IN_BELL = 10;
    FOOT_PEDALS = 11;
}

enum SoundProductionType
{
    PLUCKED_BY_BP = 0;
    PLUCKED = 1;
    BOWED = 2;
    STRUCK_BY_BP = 3;
    STRUCK = 4;
    VIBRATE_BP_AGAINST_OPENING = 5;
    BLOW_AGAINST_FIPPLE = 6;
    BLOW_OVER_OPENING_SIDE = 7;
    BLOW_OVER_OPENING_END = 8;
    BLOW_OVER_SINGLE_REED = 9;
    BLOW_OVER_DOUBLE_REED = 10;
    BLOW_OVER_FREE_REED = 11;
    STRUCK_TOGETHER = 12;
    SHAKEN = 13;
    SCRAPED = 14;
    FRICTION = 15;
    RESONATOR = 16;
    BAG_OVER_REED = 17;
    AIR_OVER_REED = 18;
    AIR_OVER_FREE_REED = 19;
    AIR_AGAINST_FIPPLE = 20;
}

enum TuningType
{
    PEGS = 0;
    ADJUSTABLE_BRIDGES = 1;
    CROOKS = 2;
    TIGHTENING = 3;
    LEVERS = 4;
}

message InstrumentPiece
{
    optional string type = 1;
    optional string id = 2;
    optional string name = 3;
    optional string name_plural = 4;
}

message InstrumentRegister
{
    optional int32 pitch_range_min = 1;
    optional int32 pitch_range_max = 2;
}

message InstrumentDef
{
    optional InstrumentFlags flags = 1;
    optional int32 size = 2;
    optional int32 value = 3;
    optional int32 material_size = 4;
    repeated InstrumentPiece pieces = 5;
    optional int32 pitch_range_min = 6;
    optional int32 pitch_range_max = 7;
    optional int32 volume_mb_min = 8;
    optional int32 volume_mb_max = 9;
    repeated SoundProductionType sound_production = 10;
    repeated string sound_production_parm1 = 11;
    repeated string sound_production_parm2 = 12;
    repeated PitchChoiceType pitch_choice = 13;
    repeated string pitch_choice_parm1 = 14;
    repeated string pitch_choice_parm2 = 15;
    repeated TuningType tuning = 16;
    repeated string tuning_parm = 17;
    repeated InstrumentRegister registers = 18;
    optional string description = 19;
}