//
// _Misc.gol
//

class ZoomGame
{
    CoPilot dozer;
    CoPilot flaco;
    CoPilot niki;
    CoPilot quiverly;
    Ship dozer_ship;
    Ship flaco_ship;
    Ship niki_ship;
    Ship quiverly_ship;
    Level capitol_city;
    Level calgary;
    Level detroit;
    Level florida;
    Level new_york;
    Level mexico;
    Level california;
    Level test_level;
	List< Surface > surfaces;
    VRMLWorldBuilder vrml_world_builder;
    string global_palette_name;
    RLEProportionalFont big_font;
    RLEProportionalFont comc_font;
    SoundSource good_event_sound_source;
    SoundSource bad_event_sound_source;
    SoundSource player_won_sound_source;
    SoundSource player_lost_sound_source;
    SoundSource fanfare_sound_source;
    AnimSequence2D bucket_splat_anim;
    AnimSequence2D squeegee_guy_anim;
    PiecewiseLinearFloatToFloatMapping ship_speed_to_delta_squeegee_stim_mapping;
    PiecewiseLinearFloatToFloatMapping stim_to_squeegee_prob_mapping;
    PigClassInitData pig_class_init_data;
    NitroClassInitData nitro_class_init_data;
    CheeseShotClassInitData cheese_shot_class_init_data;
    HomingShotClassInitData homing_shot_class_init_data;
	ShipMotionModel bad_boy_2000;
	ShipMotionModel bad_boy_4000;
    string dplay_ipx_connection_name;
    string dplay_modem_connection_name;
    string dplay_serial_connection_name;
    string dplay_tcp_connection_name;
    UIManager ui_manager;
}

class RLEProportionalFont
{
    string font_name;
}

class Ship
{
    string sprite_name;
    SoundSource acceleration_sound_source;
    SoundSource side_thrust_sound_source;
    SoundSource cheese_firing_sound_source;
    SoundSource homing_firing_sound_source;
    SoundSource spinout_sound_source;
    SoundSource nitro_boost_sound_source;
    SoundSource topping_get_sound_source;
    SoundSource collision_with_ship_sound_source;
	ShipMotionModel ship_motion_model;
}

class PigClassInitData
{
    string animation_prototype_name;
    SoundSource collision_sound_source_prototype;
    SoundSource engine_sound_source_prototype;
}

class NitroClassInitData
{
    string animation_prototype_name;
    SoundSource homing_sound_source_prototype;
}

class CheeseShotClassInitData
{
    string animation_prototype_name;
    SoundSource collision_sound_source_prototype;
}

class HomingShotClassInitData
{
    string animation_prototype_name;
    SoundSource collision_sound_source_prototype;
}

class SoundSource
{
    string sound_name;
    float intensity = 0.0;
}

class Level
{
	int    id;
    bool   included_in_limited_version_flag = 0;
	string name;
	string backdrop_name;
	string dxf_tube_file;
	string vrml_world_file;
	string palette_file;
	float  tube_slice_radius = 20;
	bool   back_face_cull_flag = 1;
	int    cd_track = 1;
    Customer customer;
	int    marker_color = 81;
}

class Customer
{
    SoundSource plain_pizza_order_sound_source;
    SoundSource pepperoni_pizza_order_sound_source;
    SoundSource mushroom_pizza_order_sound_source;
    SoundSource anchovy_pizza_order_sound_source;
    SoundSource the_works_pizza_order_sound_source;
    SoundSource accept_pizza_sound_source;
    SoundSource reject_pizza_sound_source;
    SoundSource low_tip_sound_source;
    SoundSource slow_delivery_sound_source;
    SoundSource wrong_toppings_sound_source;
    SoundSource damaged_pizza_sound_source;

    Anim2DCast cast;

    AnimSequence2D plain_pizza_order_anim;
    AnimSequence2D pepperoni_pizza_order_anim;
    AnimSequence2D mushroom_pizza_order_anim;
    AnimSequence2D anchovy_pizza_order_anim;
    AnimSequence2D the_works_pizza_order_anim;
    AnimSequence2D accept_pizza_anim;
    AnimSequence2D reject_pizza_anim;
    AnimSequence2D low_tip_anim;
    AnimSequence2D slow_delivery_anim;
    AnimSequence2D wrong_toppings_anim;
    AnimSequence2D damaged_pizza_anim;

    string backdrop_file = "gengo"; // FIX - get rid of this default value
}

class VRMLWorldBuilder
{
    List< VRMLObjectClass > vrml_object_classes;
}

class VRMLObjectClass
{
    string class_name;
    bool visible_flag = 1;
    bool collidable_flag = 1;
    bool floor_flag = 0;
    bool two_sided_flag = 0;
    bool sprite_flag = 0;
    bool enable_loose_polygons_flag = 1;
    bool needs_ai_repulsor_flag = 0;
    bool shootable_flag = 0;
    bool looped_flag = 1;
    float magnetic_intensity = 0.0;
    float post_collision_velocity_multiplier = 0.75;
    StationaryEntity stationary_entity;
}

class StationaryEntity
{
    SoundSource ship_collision_sound_source_prototype;
}

class Anim2DCast
{
    string cast_name;
    List< BitmapCastMember > bitmap_cast;
    List< SoundCastMember > sound_cast;
}

class BitmapCastMember
{
    int id;
    string bitmap_name;
}

class SoundCastMember
{
    int id;
    string sound_name;
}

class SoundAttachment
{
    int frame_index;
    int sound_cast_member_id;
}

class AnimSequence2D
{
    Anim2DCast cast;
    string script;
    float frame_rate;
    List< int > score;
    SoundAttachment primary_sound_attachment;
    List< SoundAttachment > secondary_sound_attachments;
}

class AnimCollection2D
{
    List< AnimSequence2D > anims;
}

class ReactionCollection
{
    Anim2DCast cast;
    AnimCollection2D anim_collection;
    PiecewiseLinearFloatToFloatMapping stim_to_prob_component_mapping;
}

class Vector2
{
	float x;
	float y;
}

class PiecewiseLinearFloatToFloatMapping
{
	List< Vector2 > points;
}

class NamedColor
{
    float red;
    float green;
    float blue;
    string name;
}

class UIManager
{
    List< NamedColor > shades;
}
