All pastes #2123953 Raw Edit

Unnamed

public text v1 · immutable
#2123953 ·published 2012-03-04 07:02 UTC
rendered paste body
/* Define grf */
grf {
    grfid: "NML\00";
    /* GRF name and description strings are defined in the lang files */
    name: string(STR_GRF_NAME);
    desc: string(STR_GRF_DESC);
    /* This is the first version, start numbering at 0. */
    version: 0;
    min_compatible_version: 0;
}

/* Define a rail type table,
 * this allows referring to railtypes
 * irrespective of the grfs loaded.
 */
railtypetable {
    RAIL, ELRL, MONO, MGLV, "3RDR",
}

/* Basic template for 4 vehicle views */
template tmpl_vehicle_basic(x, y) {
    // arguments x, y: coordinates of top-left corner of first sprite
    [x,      y,  8, 24,  -3, -12] //xpos ypos xsize ysize xrel yrel
    [x +  9, y, 22, 20, -14, -12]
    [x + 32, y, 32, 16, -16, -12]
    [x + 65, y, 22, 20,  -6, -12]
}

/* Template for a vehicle with only 4 views (symmetric) */
template tmpl_vehicle_4_views(num) {
    // argument num: Index in the graphics file, assuming vertical ordering of vehicles
    tmpl_vehicle_basic(1, 1 + 32 * num)
}

/* Template for a vehicle with 8 views (non-symmetric) */
template tmpl_vehicle_8_views(num, reversed) {
    // argument num: Index in the graphics file, assuming vertical ordering of vehicles
    // argument reversed: Reverse visible orientation of vehicle, if set to 1
    tmpl_vehicle_basic(reversed ? 89 : 1, 1 + 32 * num)
    tmpl_vehicle_basic(reversed ? 1 : 89, 1 + 32 * num)
}

/* Template for a single vehicle sprite */
template tmpl_vehicle_single(num, xsize, ysize, xoff, yoff) {
    [1, 1 + 32 * num, xsize, ysize, xoff, yoff]
}

/* C1 */

/* Define the spritesets, these allow referring to these sprites later on */
spriteset (set_smetro_c1_front, "gfx/swedish_metro.png") { tmpl_vehicle_8_views(0, 0) }
spriteset (set_smetro_c1_rear,  "gfx/swedish_metro.png") { tmpl_vehicle_8_views(1, 1) }
spriteset (set_smetro_c1_middle,        "gfx/swedish_metro.png") { tmpl_vehicle_4_views(4)    }
spriteset (set_smetro_c1_purchase,      "gfx/swedish_metro.png") { tmpl_vehicle_single(5, 32, 16, -16, -10) }
spriteset (set_smetro_c1_invisible,     "gfx/swedish_metro.png") { tmpl_vehicle_single(6,  1,  1,   0,   0) }

/* Choose between front, middle and back parts */
switch(FEAT_TRAINS, SELF, sw_smetro_c1_graphics_b, position_in_consist_from_end) {
    0:      set_smetro_c1_rear;
    set_smetro_c1_middle;
}

switch(FEAT_TRAINS, SELF, sw_smetro_c1_graphics, position_in_consist) {
    0:      set_smetro_c1_front;
    sw_smetro_c1_graphics_b;
}

switch(FEAT_TRAINS, SELF, sw_smetro_c1_traction, position_in_consist) {
    0: return 0.2;
    return 0.0;
}

/* Define the actual train */
item(FEAT_TRAINS, item_smetro_c1) {
    /* Define properties first, make sure to set all of them */
    property {
        name:                         string(STR_SMETRO_C1_NAME);
        // not available in toyland:
        climates_available:           bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL); 
        introduction_date:            date(1949, 1, 1);
        model_life:                   VEHICLE_NEVER_EXPIRES;
        vehicle_life:                 30;
        reliability_decay:            20;
        refittable_cargo_classes:     bitmask(CC_PASSENGERS);
        non_refittable_cargo_classes: bitmask();
        // refitting is done via cargo classes only, no cargoes need explicit enabling/disabling:
        //refittable_cargo_types:       bitmask(); 
        // It's an intercity train, loading is relatively slow:
        loading_speed:                5; 
        cost_factor:                  10;
        running_cost_factor:          100; // Changed by callback
        sprite_id:                    SPRITE_ID_NEW_TRAIN;
        speed:                        80 km/h;
        misc_flags:                   bitmask(TRAIN_FLAG_2CC, TRAIN_FLAG_MU);
        refit_cost:                   0; //refit costs don't apply to subcargo display 
        // callback flags are not set manually
        track_type:                   railtype("3RDR"); // from rail type table
        ai_special_flag:              AI_FLAG_PASSENGER;
        power:                        324 kW; // Changed by CB
        running_cost_base:            RUNNING_COST_ELECTRIC;
        dual_headed:                  0;
        cargo_capacity:               160; // per part, changed by callback
        weight:                       30 ton; // Total, changed by callback
        ai_engine_rank:               0; // not intended to be used by the ai
        engine_class:                 ENGINE_CLASS_ELECTRIC;
        extra_power_per_wagon:        0 kW;
        // 4/12 of weight on driving wheels, with a default friction coefficient of 0.3:
        tractive_effort_coefficient:  sw_smetro_c1_traction;
        air_drag_coefficient:         0.1;
        //shorten_vehicle:              SHORTEN_TO_8_8;
        length:                       8;
        // Overridden by callback to disable for non-powered wagons:
        visual_effect_and_powered:    visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, ENABLE_WAGON_POWER);
        extra_weight_per_wagon:       0 ton;
        bitmask_vehicle_info:         0;
    }
    /* Define graphics and callbacks
     * Setting all callbacks is not needed, only define what is used */
    graphics {
        default:                      sw_smetro_c1_graphics;
        purchase:                     set_smetro_c1_purchase;
        colour_mapping:               palette_2cc(COLOUR_GREEN, COLOUR_DARK_GREEN);
    }
}


/* C14 */

/* Define the spritesets, these allow referring to these sprites later on */
spriteset (set_smetro_c14_front, "gfx/swedish_metro.png") { tmpl_vehicle_8_views(7, 0) }
spriteset (set_smetro_c14_rear,  "gfx/swedish_metro.png") { tmpl_vehicle_8_views(8, 1) }
spriteset (set_smetro_c14_middle,        "gfx/swedish_metro.png") { tmpl_vehicle_4_views(11)    }
spriteset (set_smetro_c14_purchase,      "gfx/swedish_metro.png") { tmpl_vehicle_single(12, 32, 16, -16, -10) }
spriteset (set_smetro_c14_invisible,     "gfx/swedish_metro.png") { tmpl_vehicle_single(13,  1,  1,   0,   0) }

/* Choose between front, middle and back parts 
switch(FEAT_TRAINS, SELF, sw_smetro_c14_graphics, position_in_consist) {
    7:      set_smetro_c14_front;
    8:      set_smetro_c14_rear;
    set_smetro_c14_middle;
}
*/

/* Choose between front, middle and back parts */
switch(FEAT_TRAINS, SELF, sw_smetro_c14_graphics_b, position_in_consist_from_end) {
    0:      set_smetro_c14_rear;
    set_smetro_c14_middle;
}

switch(FEAT_TRAINS, SELF, sw_smetro_c14_graphics, position_in_consist) {
    0:      set_smetro_c14_front;
    sw_smetro_c14_graphics_b;
}

/* Define the actual train */
item(FEAT_TRAINS, item_smetro_c14) {
    /* Define properties first, make sure to set all of them */
    property {
        name:                         string(STR_SMETRO_C14_NAME);
        // not available in toyland:
        climates_available:           bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL); 
        introduction_date:            date(1985, 1, 1);
        model_life:                   VEHICLE_NEVER_EXPIRES;
        vehicle_life:                 30;
        reliability_decay:            20;
        refittable_cargo_classes:     bitmask(CC_PASSENGERS);
        non_refittable_cargo_classes: bitmask();
        // refitting is done via cargo classes only, no cargoes need explicit enabling/disabling:
        //refittable_cargo_types:       bitmask(); 
        // It's an intercity train, loading is relatively slow:
        loading_speed:                5; 
        cost_factor:                  20;
        running_cost_factor:          50; // Changed by callback
        sprite_id:                    SPRITE_ID_NEW_TRAIN;
        speed:                        80 km/h;
        misc_flags:                   bitmask(TRAIN_FLAG_2CC, TRAIN_FLAG_MU);
        refit_cost:                   0; //refit costs don't apply to subcargo display 
        // callback flags are not set manually
        track_type:                   railtype("3RDR"); // from rail type table
        ai_special_flag:              AI_FLAG_PASSENGER;
        power:                        440 kW; // Changed by CB
        running_cost_base:            RUNNING_COST_ELECTRIC;
        dual_headed:                  0;
        cargo_capacity:               156; // per part, changed by callback
        weight:                       25 ton; // Total, changed by callback
        ai_engine_rank:               0; // not intended to be used by the ai
        engine_class:                 ENGINE_CLASS_ELECTRIC;
        extra_power_per_wagon:        0 kW;
        // 4/12 of weight on driving wheels, with a default friction coefficient of 0.3:
        tractive_effort_coefficient:  0.3;
        air_drag_coefficient:         0.1;
        //shorten_vehicle:              SHORTEN_TO_8_8;
        length:                       8;
        // Overridden by callback to disable for non-powered wagons:
        visual_effect_and_powered:    visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, ENABLE_WAGON_POWER);
        extra_weight_per_wagon:       0 ton;
        bitmask_vehicle_info:         0;
    }
    /* Define graphics and callbacks
     * Setting all callbacks is not needed, only define what is used */
    graphics {
        default:                      sw_smetro_c14_graphics;
        purchase:                     set_smetro_c14_purchase;
        colour_mapping:               palette_2cc(COLOUR_BLUE, COLOUR_DARK_BLUE);
    }
}


/* C20 */

/* Define the spritesets, these allow referring to these sprites later on */
spriteset (set_smetro_c20_front, "gfx/swedish_metro.png") { tmpl_vehicle_8_views(14, 0) }
spriteset (set_smetro_c20_rear,  "gfx/swedish_metro.png") { tmpl_vehicle_8_views(15, 1) }
spriteset (set_smetro_c20_middle,        "gfx/swedish_metro.png") { tmpl_vehicle_4_views(18)    }
spriteset (set_smetro_c20_purchase,      "gfx/swedish_metro.png") { tmpl_vehicle_single(19, 32, 16, -16, -10) }
spriteset (set_smetro_c20_invisible,     "gfx/swedish_metro.png") { tmpl_vehicle_single(20,  1,  1,   0,   0) }

/* Choose between front, middle and back parts 
switch(FEAT_TRAINS, SELF, sw_smetro_c20_graphics, position_in_consist) {
    7:      set_smetro_c20_front;
    8:      set_smetro_c20_rear;
    set_smetro_c20_middle;
}
*/

switch(FEAT_TRAINS, SELF, sw_smetro_c20_graphics, position_in_consist % 3) {
    0:      set_smetro_c20_front;
    2:      set_smetro_c20_rear;
    set_smetro_c20_middle;
}

switch (FEAT_TRAINS, SELF, sw_smetro_c20_articulated, extra_callback_info1) {
    1..2: return item_smetro_c20;
    return CB_RESULT_NO_MORE_ARTICULATED_PARTS; //stop adding vehicle parts
}

/* Define the actual train */
item(FEAT_TRAINS, item_smetro_c20) {
    /* Define properties first, make sure to set all of them */
    property {
        name:                         string(STR_SMETRO_C20_NAME);
        // not available in toyland:
        climates_available:           bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL); 
        introduction_date:            date(1999, 1, 1);
        model_life:                   VEHICLE_NEVER_EXPIRES;
        vehicle_life:                 30;
        reliability_decay:            20;
        refittable_cargo_classes:     bitmask(CC_PASSENGERS);
        non_refittable_cargo_classes: bitmask();
        // refitting is done via cargo classes only, no cargoes need explicit enabling/disabling:
        //refittable_cargo_types:       bitmask(); 
        // It's an intercity train, loading is relatively slow:
        loading_speed:                8; 
        cost_factor:                  50;
        running_cost_factor:          30; // Changed by callback
        sprite_id:                    SPRITE_ID_NEW_TRAIN;
        speed:                        90 km/h;
        misc_flags:                   bitmask(TRAIN_FLAG_2CC, TRAIN_FLAG_MU);
        refit_cost:                   0; //refit costs don't apply to subcargo display 
        // callback flags are not set manually
        track_type:                   railtype("3RDR"); // from rail type table
        ai_special_flag:              AI_FLAG_PASSENGER;
        power:                        1000 kW; // Changed by CB
        running_cost_base:            RUNNING_COST_ELECTRIC;
        dual_headed:                  0;
        cargo_capacity:               330; // per part, changed by callback
        weight:                       22 ton; // Total, changed by callback
        ai_engine_rank:               0; // not intended to be used by the ai
        engine_class:                 ENGINE_CLASS_ELECTRIC;
        extra_power_per_wagon:        0 kW;
        // 4/12 of weight on driving wheels, with a default friction coefficient of 0.3:
        tractive_effort_coefficient:  2 / 3;
        air_drag_coefficient:         0.05;
        //shorten_vehicle:              SHORTEN_TO_8_8;
        length:                       6;
        // Overridden by callback to disable for non-powered wagons:
        visual_effect_and_powered:    visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, ENABLE_WAGON_POWER);
        extra_weight_per_wagon:       0 ton;
        bitmask_vehicle_info:         0;
    }
    /* Define graphics and callbacks
     * Setting all callbacks is not needed, only define what is used */
    graphics {
        default:                      sw_smetro_c20_graphics;
        purchase:                     set_smetro_c20_purchase;
        colour_mapping:               palette_2cc(COLOUR_GREY, COLOUR_DARK_BLUE);
        articulated_part:             sw_smetro_c20_articulated;
    }
}