Loading

Paste #pne7eyxue

  1. /* ******************************************************************
  2.  * Definition of the industry tile, its callbacks, and graphics chain
  3.  * ******************************************************************/
  4.             spriteset(blast_furnace_spriteset_0_0, "src/graphics/industries/groundtiles.png") {
  5.                     tmpl_ground_tile(360, 10)
  6.             }
  7.             spriteset(blast_furnace_spriteset_0_0_snow, "src/graphics/industries/groundtiles.png") {
  8.                     tmpl_ground_tile(220, 10)
  9.             }
  10.             spriteset(blast_furnace_spriteset_1_0) {
  11.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  12.             }
  13.             spriteset(blast_furnace_spriteset_1_0_snow) {
  14.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  15.             }
  16.             spriteset(blast_furnace_spriteset_2_0) {
  17.                         [150, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  18.             }
  19.             spriteset(blast_furnace_spriteset_2_0_snow) {
  20.                             [150, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  21.             }
  22.             spriteset(blast_furnace_spriteset_3_0) {
  23.                         [10, 10, 64, 144, -31, -114, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  24.             }
  25.             spriteset(blast_furnace_spriteset_3_0_snow) {
  26.                             [10, 10, 64, 144, -31, -114, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  27.             }
  28.             spriteset(blast_furnace_spriteset_4_0) {
  29.                         [80, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  30.             }
  31.             spriteset(blast_furnace_spriteset_4_0_snow) {
  32.                             [80, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  33.             }
  34.             spriteset(blast_furnace_spriteset_5_0) {
  35.                         [220, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  36.             }
  37.             spriteset(blast_furnace_spriteset_5_0_snow) {
  38.                             [220, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  39.             }
  40.             spriteset(blast_furnace_spriteset_6_0) {
  41.                         [290, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  42.             }
  43.             spriteset(blast_furnace_spriteset_6_0_snow) {
  44.                             [290, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  45.             }
  46.             spriteset(blast_furnace_spriteset_7_0) {
  47.                         [360, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  48.             }
  49.             spriteset(blast_furnace_spriteset_7_0_snow) {
  50.                             [360, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  51.             }
  52.             spriteset(blast_furnace_spriteset_8_0) {
  53.                         [430, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  54.             }
  55.             spriteset(blast_furnace_spriteset_8_0_snow) {
  56.                             [430, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  57.             }
  58.             spriteset(blast_furnace_spriteset_9_0) {
  59.                         [570, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  60.             }
  61.             spriteset(blast_furnace_spriteset_9_0_snow) {
  62.                             [570, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  63.             }
  64.             spriteset(blast_furnace_spriteset_10_0) {
  65.                         [10, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  66.                         [80, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  67.                         [150, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  68.                         [220, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  69.                         [290, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  70.                         [360, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  71.                         [430, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  72.                         [500, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  73.                         [570, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  74.                         [640, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  75.             }
  76.             spriteset(blast_furnace_spriteset_10_0_snow) {
  77.                             [10, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  78.                             [80, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  79.                             [150, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  80.                             [220, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  81.                             [290, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  82.                             [360, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  83.                             [430, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  84.                             [500, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  85.                             [570, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  86.                             [640, 160, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  87.             }
  88.             spriteset(blast_furnace_spriteset_11_0) {
  89.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  90.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  91.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  92.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  93.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  94.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  95.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  96.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  97.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  98.                         [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  99.             }
  100.             spriteset(blast_furnace_spriteset_11_0_snow) {
  101.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  102.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  103.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  104.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  105.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  106.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  107.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  108.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  109.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  110.                             [500, 10, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  111.             }
  112.             spriteset(blast_furnace_spriteset_12_0) {
  113.                         [10, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  114.                         [80, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  115.                         [150, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  116.                         [220, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  117.                         [290, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  118.                         [360, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  119.                         [430, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  120.                         [500, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  121.                         [570, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  122.                         [640, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1.png"]
  123.             }
  124.             spriteset(blast_furnace_spriteset_12_0_snow) {
  125.                             [10, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  126.                             [80, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  127.                             [150, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  128.                             [220, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  129.                             [290, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  130.                             [360, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  131.                             [430, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  132.                             [500, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  133.                             [570, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  134.                             [640, 310, 64, 122, -31, -91, ANIM | NOCROP, "src/graphics/industries/blast_furnace_1_snow.png"]
  135.             }
  136.         spritelayout blast_furnace_spritelayout_empty {
  137.             // Industry-specific ground (snow aware)
  138.             // non-snow
  139.             childsprite {
  140.                 sprite: 2022;
  141.                 recolour_mode: RECOLOUR_REMAP;
  142.                 palette: PALETTE_USE_DEFAULT;
  143.                 hide_sprite: (LOAD_TEMP(13));
  144.                 always_draw: 1;
  145.             }
  146.             childsprite {
  147.                 sprite: blast_furnace_spriteset_0_0(0);
  148.                 recolour_mode: RECOLOUR_REMAP;
  149.                 palette: PALETTE_USE_DEFAULT;
  150.                 hide_sprite: (LOAD_TEMP(13));
  151.                 always_draw: 1;
  152.             }
  153.             // snow
  154.             childsprite {
  155.                 sprite: 2022;
  156.                 recolour_mode: RECOLOUR_REMAP;
  157.                 palette: PALETTE_USE_DEFAULT;
  158.                 hide_sprite: (!LOAD_TEMP(13));
  159.                 always_draw: 1;
  160.             }
  161.             childsprite {
  162.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  163.                 recolour_mode: RECOLOUR_REMAP;
  164.                 palette: PALETTE_USE_DEFAULT;
  165.                 hide_sprite: (!LOAD_TEMP(13));
  166.                 always_draw: 1;
  167.             }
  168.         }
  169.         spritelayout blast_furnace_spritelayout_greeble {
  170.             // Industry-specific ground (snow aware)
  171.             // non-snow
  172.             childsprite {
  173.                 sprite: 2022;
  174.                 recolour_mode: RECOLOUR_REMAP;
  175.                 palette: PALETTE_USE_DEFAULT;
  176.                 hide_sprite: (LOAD_TEMP(13));
  177.                 always_draw: 1;
  178.             }
  179.             childsprite {
  180.                 sprite: blast_furnace_spriteset_0_0(0);
  181.                 recolour_mode: RECOLOUR_REMAP;
  182.                 palette: PALETTE_USE_DEFAULT;
  183.                 hide_sprite: (LOAD_TEMP(13));
  184.                 always_draw: 1;
  185.             }
  186.             // snow
  187.             childsprite {
  188.                 sprite: 2022;
  189.                 recolour_mode: RECOLOUR_REMAP;
  190.                 palette: PALETTE_USE_DEFAULT;
  191.                 hide_sprite: (!LOAD_TEMP(13));
  192.                 always_draw: 1;
  193.             }
  194.             childsprite {
  195.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  196.                 recolour_mode: RECOLOUR_REMAP;
  197.                 palette: PALETTE_USE_DEFAULT;
  198.                 hide_sprite: (!LOAD_TEMP(13));
  199.                 always_draw: 1;
  200.             }
  201.                     // buildings (snow aware)
  202.                     building {
  203.                         sprite: blast_furnace_spriteset_2_0(0);
  204.                         recolour_mode: RECOLOUR_REMAP;
  205.                         palette: PALETTE_USE_DEFAULT;
  206.                         xoffset: 0;
  207.                         yoffset: 0;
  208.                         zoffset: 0;
  209.                         xextent: 16;
  210.                         yextent: 16;
  211.                         zextent: 32;
  212.                         always_draw: 0;
  213.                         hide_sprite: (LOAD_TEMP(255));
  214.                     }
  215.                     building {
  216.                         sprite: blast_furnace_spriteset_2_0_snow(0);
  217.                         recolour_mode: RECOLOUR_REMAP;
  218.                         palette: PALETTE_USE_DEFAULT;
  219.                         xoffset: 0;
  220.                         yoffset: 0;
  221.                         zoffset: 0;
  222.                         xextent: 16;
  223.                         yextent: 16;
  224.                         zextent: 32;
  225.                         always_draw: 0;
  226.                         hide_sprite: (LOAD_TEMP(245));
  227.                     }
  228.         }
  229.         spritelayout blast_furnace_spritelayout_blast_furnace_1 {
  230.             // Industry-specific ground (snow aware)
  231.             // non-snow
  232.             childsprite {
  233.                 sprite: 2022;
  234.                 recolour_mode: RECOLOUR_REMAP;
  235.                 palette: PALETTE_USE_DEFAULT;
  236.                 hide_sprite: (LOAD_TEMP(13));
  237.                 always_draw: 1;
  238.             }
  239.             childsprite {
  240.                 sprite: blast_furnace_spriteset_0_0(0);
  241.                 recolour_mode: RECOLOUR_REMAP;
  242.                 palette: PALETTE_USE_DEFAULT;
  243.                 hide_sprite: (LOAD_TEMP(13));
  244.                 always_draw: 1;
  245.             }
  246.             // snow
  247.             childsprite {
  248.                 sprite: 2022;
  249.                 recolour_mode: RECOLOUR_REMAP;
  250.                 palette: PALETTE_USE_DEFAULT;
  251.                 hide_sprite: (!LOAD_TEMP(13));
  252.                 always_draw: 1;
  253.             }
  254.             childsprite {
  255.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  256.                 recolour_mode: RECOLOUR_REMAP;
  257.                 palette: PALETTE_USE_DEFAULT;
  258.                 hide_sprite: (!LOAD_TEMP(13));
  259.                 always_draw: 1;
  260.             }
  261.                     // buildings (snow aware)
  262.                     building {
  263.                         sprite: blast_furnace_spriteset_4_0(0);
  264.                         recolour_mode: RECOLOUR_REMAP;
  265.                         palette: PALETTE_USE_DEFAULT;
  266.                         xoffset: 0;
  267.                         yoffset: 0;
  268.                         zoffset: 0;
  269.                         xextent: 16;
  270.                         yextent: 16;
  271.                         zextent: 32;
  272.                         always_draw: 0;
  273.                         hide_sprite: (LOAD_TEMP(255));
  274.                     }
  275.                     building {
  276.                         sprite: blast_furnace_spriteset_4_0_snow(0);
  277.                         recolour_mode: RECOLOUR_REMAP;
  278.                         palette: PALETTE_USE_DEFAULT;
  279.                         xoffset: 0;
  280.                         yoffset: 0;
  281.                         zoffset: 0;
  282.                         xextent: 16;
  283.                         yextent: 16;
  284.                         zextent: 32;
  285.                         always_draw: 0;
  286.                         hide_sprite: (LOAD_TEMP(245));
  287.                     }
  288.                 // smoke sprites
  289.                 building {
  290.                     sprite: 3701 + ((animation_frame + 0)%8);
  291.                     recolour_mode: RECOLOUR_REMAP;
  292.                     palette: PALETTE_USE_DEFAULT;
  293.                     xoffset: 5;
  294.                     yoffset: 6;
  295.                     zoffset: 68;
  296.                     xextent: 15;
  297.                     yextent: 7;
  298.                     zextent: 7;
  299.                     hide_sprite: 0;
  300.                 }
  301.         }
  302.         spritelayout blast_furnace_spritelayout_blast_furnace_2 {
  303.             // Industry-specific ground (snow aware)
  304.             // non-snow
  305.             childsprite {
  306.                 sprite: 2022;
  307.                 recolour_mode: RECOLOUR_REMAP;
  308.                 palette: PALETTE_USE_DEFAULT;
  309.                 hide_sprite: (LOAD_TEMP(13));
  310.                 always_draw: 1;
  311.             }
  312.             childsprite {
  313.                 sprite: blast_furnace_spriteset_0_0(0);
  314.                 recolour_mode: RECOLOUR_REMAP;
  315.                 palette: PALETTE_USE_DEFAULT;
  316.                 hide_sprite: (LOAD_TEMP(13));
  317.                 always_draw: 1;
  318.             }
  319.             // snow
  320.             childsprite {
  321.                 sprite: 2022;
  322.                 recolour_mode: RECOLOUR_REMAP;
  323.                 palette: PALETTE_USE_DEFAULT;
  324.                 hide_sprite: (!LOAD_TEMP(13));
  325.                 always_draw: 1;
  326.             }
  327.             childsprite {
  328.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  329.                 recolour_mode: RECOLOUR_REMAP;
  330.                 palette: PALETTE_USE_DEFAULT;
  331.                 hide_sprite: (!LOAD_TEMP(13));
  332.                 always_draw: 1;
  333.             }
  334.                     // buildings (snow aware)
  335.                     building {
  336.                         sprite: blast_furnace_spriteset_3_0(0);
  337.                         recolour_mode: RECOLOUR_REMAP;
  338.                         palette: PALETTE_USE_DEFAULT;
  339.                         xoffset: 0;
  340.                         yoffset: 0;
  341.                         zoffset: 0;
  342.                         xextent: 16;
  343.                         yextent: 16;
  344.                         zextent: 32;
  345.                         always_draw: 0;
  346.                         hide_sprite: (LOAD_TEMP(255));
  347.                     }
  348.                     building {
  349.                         sprite: blast_furnace_spriteset_3_0_snow(0);
  350.                         recolour_mode: RECOLOUR_REMAP;
  351.                         palette: PALETTE_USE_DEFAULT;
  352.                         xoffset: 0;
  353.                         yoffset: 0;
  354.                         zoffset: 0;
  355.                         xextent: 16;
  356.                         yextent: 16;
  357.                         zextent: 32;
  358.                         always_draw: 0;
  359.                         hide_sprite: (LOAD_TEMP(245));
  360.                     }
  361.         }
  362.         spritelayout blast_furnace_spritelayout_small_shed {
  363.             // Industry-specific ground (snow aware)
  364.             // non-snow
  365.             childsprite {
  366.                 sprite: 2022;
  367.                 recolour_mode: RECOLOUR_REMAP;
  368.                 palette: PALETTE_USE_DEFAULT;
  369.                 hide_sprite: (LOAD_TEMP(13));
  370.                 always_draw: 1;
  371.             }
  372.             childsprite {
  373.                 sprite: blast_furnace_spriteset_0_0(0);
  374.                 recolour_mode: RECOLOUR_REMAP;
  375.                 palette: PALETTE_USE_DEFAULT;
  376.                 hide_sprite: (LOAD_TEMP(13));
  377.                 always_draw: 1;
  378.             }
  379.             // snow
  380.             childsprite {
  381.                 sprite: 2022;
  382.                 recolour_mode: RECOLOUR_REMAP;
  383.                 palette: PALETTE_USE_DEFAULT;
  384.                 hide_sprite: (!LOAD_TEMP(13));
  385.                 always_draw: 1;
  386.             }
  387.             childsprite {
  388.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  389.                 recolour_mode: RECOLOUR_REMAP;
  390.                 palette: PALETTE_USE_DEFAULT;
  391.                 hide_sprite: (!LOAD_TEMP(13));
  392.                 always_draw: 1;
  393.             }
  394.                     // buildings (snow aware)
  395.                     building {
  396.                         sprite: blast_furnace_spriteset_5_0(0);
  397.                         recolour_mode: RECOLOUR_REMAP;
  398.                         palette: PALETTE_USE_DEFAULT;
  399.                         xoffset: 0;
  400.                         yoffset: 0;
  401.                         zoffset: 0;
  402.                         xextent: 16;
  403.                         yextent: 16;
  404.                         zextent: 32;
  405.                         always_draw: 0;
  406.                         hide_sprite: (LOAD_TEMP(255));
  407.                     }
  408.                     building {
  409.                         sprite: blast_furnace_spriteset_5_0_snow(0);
  410.                         recolour_mode: RECOLOUR_REMAP;
  411.                         palette: PALETTE_USE_DEFAULT;
  412.                         xoffset: 0;
  413.                         yoffset: 0;
  414.                         zoffset: 0;
  415.                         xextent: 16;
  416.                         yextent: 16;
  417.                         zextent: 32;
  418.                         always_draw: 0;
  419.                         hide_sprite: (LOAD_TEMP(245));
  420.                     }
  421.         }
  422.         spritelayout blast_furnace_spritelayout_ladle_transporter {
  423.             // Industry-specific ground (snow aware)
  424.             // non-snow
  425.             childsprite {
  426.                 sprite: 2022;
  427.                 recolour_mode: RECOLOUR_REMAP;
  428.                 palette: PALETTE_USE_DEFAULT;
  429.                 hide_sprite: (LOAD_TEMP(13));
  430.                 always_draw: 1;
  431.             }
  432.             childsprite {
  433.                 sprite: blast_furnace_spriteset_0_0(0);
  434.                 recolour_mode: RECOLOUR_REMAP;
  435.                 palette: PALETTE_USE_DEFAULT;
  436.                 hide_sprite: (LOAD_TEMP(13));
  437.                 always_draw: 1;
  438.             }
  439.             // snow
  440.             childsprite {
  441.                 sprite: 2022;
  442.                 recolour_mode: RECOLOUR_REMAP;
  443.                 palette: PALETTE_USE_DEFAULT;
  444.                 hide_sprite: (!LOAD_TEMP(13));
  445.                 always_draw: 1;
  446.             }
  447.             childsprite {
  448.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  449.                 recolour_mode: RECOLOUR_REMAP;
  450.                 palette: PALETTE_USE_DEFAULT;
  451.                 hide_sprite: (!LOAD_TEMP(13));
  452.                 always_draw: 1;
  453.             }
  454.                     // buildings (snow aware)
  455.                     building {
  456.                         sprite: blast_furnace_spriteset_6_0(0);
  457.                         recolour_mode: RECOLOUR_REMAP;
  458.                         palette: PALETTE_USE_DEFAULT;
  459.                         xoffset: 0;
  460.                         yoffset: 0;
  461.                         zoffset: 0;
  462.                         xextent: 16;
  463.                         yextent: 16;
  464.                         zextent: 32;
  465.                         always_draw: 0;
  466.                         hide_sprite: (LOAD_TEMP(255));
  467.                     }
  468.                     building {
  469.                         sprite: blast_furnace_spriteset_6_0_snow(0);
  470.                         recolour_mode: RECOLOUR_REMAP;
  471.                         palette: PALETTE_USE_DEFAULT;
  472.                         xoffset: 0;
  473.                         yoffset: 0;
  474.                         zoffset: 0;
  475.                         xextent: 16;
  476.                         yextent: 16;
  477.                         zextent: 32;
  478.                         always_draw: 0;
  479.                         hide_sprite: (LOAD_TEMP(245));
  480.                     }
  481.         }
  482.         spritelayout blast_furnace_spritelayout_brick_building {
  483.             // Industry-specific ground (snow aware)
  484.             // non-snow
  485.             childsprite {
  486.                 sprite: 2022;
  487.                 recolour_mode: RECOLOUR_REMAP;
  488.                 palette: PALETTE_USE_DEFAULT;
  489.                 hide_sprite: (LOAD_TEMP(13));
  490.                 always_draw: 1;
  491.             }
  492.             childsprite {
  493.                 sprite: blast_furnace_spriteset_0_0(0);
  494.                 recolour_mode: RECOLOUR_REMAP;
  495.                 palette: PALETTE_USE_DEFAULT;
  496.                 hide_sprite: (LOAD_TEMP(13));
  497.                 always_draw: 1;
  498.             }
  499.             // snow
  500.             childsprite {
  501.                 sprite: 2022;
  502.                 recolour_mode: RECOLOUR_REMAP;
  503.                 palette: PALETTE_USE_DEFAULT;
  504.                 hide_sprite: (!LOAD_TEMP(13));
  505.                 always_draw: 1;
  506.             }
  507.             childsprite {
  508.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  509.                 recolour_mode: RECOLOUR_REMAP;
  510.                 palette: PALETTE_USE_DEFAULT;
  511.                 hide_sprite: (!LOAD_TEMP(13));
  512.                 always_draw: 1;
  513.             }
  514.                     // buildings (snow aware)
  515.                     building {
  516.                         sprite: blast_furnace_spriteset_7_0(0);
  517.                         recolour_mode: RECOLOUR_REMAP;
  518.                         palette: PALETTE_USE_DEFAULT;
  519.                         xoffset: 0;
  520.                         yoffset: 0;
  521.                         zoffset: 0;
  522.                         xextent: 16;
  523.                         yextent: 16;
  524.                         zextent: 32;
  525.                         always_draw: 0;
  526.                         hide_sprite: (LOAD_TEMP(255));
  527.                     }
  528.                     building {
  529.                         sprite: blast_furnace_spriteset_7_0_snow(0);
  530.                         recolour_mode: RECOLOUR_REMAP;
  531.                         palette: PALETTE_USE_DEFAULT;
  532.                         xoffset: 0;
  533.                         yoffset: 0;
  534.                         zoffset: 0;
  535.                         xextent: 16;
  536.                         yextent: 16;
  537.                         zextent: 32;
  538.                         always_draw: 0;
  539.                         hide_sprite: (LOAD_TEMP(245));
  540.                     }
  541.         }
  542.         spritelayout blast_furnace_spritelayout_small_tanks {
  543.             // Industry-specific ground (snow aware)
  544.             // non-snow
  545.             childsprite {
  546.                 sprite: 2022;
  547.                 recolour_mode: RECOLOUR_REMAP;
  548.                 palette: PALETTE_USE_DEFAULT;
  549.                 hide_sprite: (LOAD_TEMP(13));
  550.                 always_draw: 1;
  551.             }
  552.             childsprite {
  553.                 sprite: blast_furnace_spriteset_0_0(0);
  554.                 recolour_mode: RECOLOUR_REMAP;
  555.                 palette: PALETTE_USE_DEFAULT;
  556.                 hide_sprite: (LOAD_TEMP(13));
  557.                 always_draw: 1;
  558.             }
  559.             // snow
  560.             childsprite {
  561.                 sprite: 2022;
  562.                 recolour_mode: RECOLOUR_REMAP;
  563.                 palette: PALETTE_USE_DEFAULT;
  564.                 hide_sprite: (!LOAD_TEMP(13));
  565.                 always_draw: 1;
  566.             }
  567.             childsprite {
  568.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  569.                 recolour_mode: RECOLOUR_REMAP;
  570.                 palette: PALETTE_USE_DEFAULT;
  571.                 hide_sprite: (!LOAD_TEMP(13));
  572.                 always_draw: 1;
  573.             }
  574.                     // buildings (snow aware)
  575.                     building {
  576.                         sprite: blast_furnace_spriteset_8_0(0);
  577.                         recolour_mode: RECOLOUR_REMAP;
  578.                         palette: PALETTE_USE_DEFAULT;
  579.                         xoffset: 0;
  580.                         yoffset: 0;
  581.                         zoffset: 0;
  582.                         xextent: 16;
  583.                         yextent: 16;
  584.                         zextent: 32;
  585.                         always_draw: 0;
  586.                         hide_sprite: (LOAD_TEMP(255));
  587.                     }
  588.                     building {
  589.                         sprite: blast_furnace_spriteset_8_0_snow(0);
  590.                         recolour_mode: RECOLOUR_REMAP;
  591.                         palette: PALETTE_USE_DEFAULT;
  592.                         xoffset: 0;
  593.                         yoffset: 0;
  594.                         zoffset: 0;
  595.                         xextent: 16;
  596.                         yextent: 16;
  597.                         zextent: 32;
  598.                         always_draw: 0;
  599.                         hide_sprite: (LOAD_TEMP(245));
  600.                     }
  601.         }
  602.         spritelayout blast_furnace_spritelayout_large_shed_rear_part {
  603.             // Industry-specific ground (snow aware)
  604.             // non-snow
  605.             childsprite {
  606.                 sprite: 2022;
  607.                 recolour_mode: RECOLOUR_REMAP;
  608.                 palette: PALETTE_USE_DEFAULT;
  609.                 hide_sprite: (LOAD_TEMP(13));
  610.                 always_draw: 1;
  611.             }
  612.             childsprite {
  613.                 sprite: blast_furnace_spriteset_0_0(0);
  614.                 recolour_mode: RECOLOUR_REMAP;
  615.                 palette: PALETTE_USE_DEFAULT;
  616.                 hide_sprite: (LOAD_TEMP(13));
  617.                 always_draw: 1;
  618.             }
  619.             // snow
  620.             childsprite {
  621.                 sprite: 2022;
  622.                 recolour_mode: RECOLOUR_REMAP;
  623.                 palette: PALETTE_USE_DEFAULT;
  624.                 hide_sprite: (!LOAD_TEMP(13));
  625.                 always_draw: 1;
  626.             }
  627.             childsprite {
  628.                 sprite: blast_furnace_spriteset_0_0_snow(0);
  629.                 recolour_mode: RECOLOUR_REMAP;
  630.                 palette: PALETTE_USE_DEFAULT;
  631.                 hide_sprite: (!LOAD_TEMP(13));
  632.                 always_draw: 1;
  633.             }
  634.                     // buildings (snow aware)
  635.                     building {
  636.                         sprite: blast_furnace_spriteset_9_0(0);
  637.                         recolour_mode: RECOLOUR_REMAP;
  638.                         palette: PALETTE_USE_DEFAULT;
  639.                         xoffset: 0;
  640.                         yoffset: 0;
  641.                         zoffset: 0;
  642.                         xextent: 16;
  643.                         yextent: 16;
  644.                         zextent: 32;
  645.                         always_draw: 0;
  646.                         hide_sprite: (LOAD_TEMP(255));
  647.                     }
  648.                     building {
  649.                         sprite: blast_furnace_spriteset_9_0_snow(0);
  650.                         recolour_mode: RECOLOUR_REMAP;
  651.                         palette: PALETTE_USE_DEFAULT;
  652.                         xoffset: 0;
  653.                         yoffset: 0;
  654.                         zoffset: 0;
  655.                         xextent: 16;
  656.                         yextent: 16;
  657.                         zextent: 32;
  658.                         always_draw: 0;
  659.                         hide_sprite: (LOAD_TEMP(245));
  660.                     }
  661.         }
  662.         spritelayout blast_furnace_spritelayout_large_shed_front_part {
  663.             // Industry-specific ground (snow aware)
  664.             // non-snow
  665.             childsprite {
  666.                 sprite: blast_furnace_spriteset_11_0(0);
  667.                 recolour_mode: RECOLOUR_REMAP;
  668.                 palette: PALETTE_USE_DEFAULT;
  669.                 hide_sprite: (LOAD_TEMP(13));
  670.                 always_draw: 1;
  671.             }
  672.             childsprite {
  673.                 sprite: blast_furnace_spriteset_11_0(0);
  674.                 recolour_mode: RECOLOUR_REMAP;
  675.                 palette: PALETTE_USE_DEFAULT;
  676.                 hide_sprite: (LOAD_TEMP(13));
  677.                 always_draw: 1;
  678.             }
  679.             // snow
  680.             childsprite {
  681.                 sprite: blast_furnace_spriteset_11_0_snow(0);
  682.                 recolour_mode: RECOLOUR_REMAP;
  683.                 palette: PALETTE_USE_DEFAULT;
  684.                 hide_sprite: (!LOAD_TEMP(13));
  685.                 always_draw: 1;
  686.             }
  687.             childsprite {
  688.                 sprite: blast_furnace_spriteset_11_0_snow(0);
  689.                 recolour_mode: RECOLOUR_REMAP;
  690.                 palette: PALETTE_USE_DEFAULT;
  691.                 hide_sprite: (!LOAD_TEMP(13));
  692.                 always_draw: 1;
  693.             }
  694.                     // buildings (snow aware)
  695.                     building {
  696.                         sprite: blast_furnace_spriteset_10_0(1*(animation_frame < 10) ? (animation_frame % 10) : 0);
  697.                         recolour_mode: RECOLOUR_REMAP;
  698.                         palette: PALETTE_USE_DEFAULT;
  699.                         xoffset: 0;
  700.                         yoffset: 0;
  701.                         zoffset: 0;
  702.                         xextent: 16;
  703.                         yextent: 16;
  704.                         zextent: 32;
  705.                         always_draw: 0;
  706.                         hide_sprite: (LOAD_TEMP(255));
  707.                     }
  708.                     building {
  709.                         sprite: blast_furnace_spriteset_10_0_snow(1*(animation_frame < 10) ? (animation_frame % 10) : 0);
  710.                         recolour_mode: RECOLOUR_REMAP;
  711.                         palette: PALETTE_USE_DEFAULT;
  712.                         xoffset: 0;
  713.                         yoffset: 0;
  714.                         zoffset: 0;
  715.                         xextent: 16;
  716.                         yextent: 16;
  717.                         zextent: 32;
  718.                         always_draw: 0;
  719.                         hide_sprite: (LOAD_TEMP(245));
  720.                     }
  721.         }
  722.         spritelayout blast_furnace_spritelayout_casting_shed {
  723.             // Industry-specific ground (snow aware)
  724.             // non-snow
  725.             childsprite {
  726.                 sprite: blast_furnace_spriteset_11_0(0);
  727.                 recolour_mode: RECOLOUR_REMAP;
  728.                 palette: PALETTE_USE_DEFAULT;
  729.                 hide_sprite: (LOAD_TEMP(13));
  730.                 always_draw: 1;
  731.             }
  732.             childsprite {
  733.                 sprite: blast_furnace_spriteset_11_0(0);
  734.                 recolour_mode: RECOLOUR_REMAP;
  735.                 palette: PALETTE_USE_DEFAULT;
  736.                 hide_sprite: (LOAD_TEMP(13));
  737.                 always_draw: 1;
  738.             }
  739.             // snow
  740.             childsprite {
  741.                 sprite: blast_furnace_spriteset_11_0_snow(0);
  742.                 recolour_mode: RECOLOUR_REMAP;
  743.                 palette: PALETTE_USE_DEFAULT;
  744.                 hide_sprite: (!LOAD_TEMP(13));
  745.                 always_draw: 1;
  746.             }
  747.             childsprite {
  748.                 sprite: blast_furnace_spriteset_11_0_snow(0);
  749.                 recolour_mode: RECOLOUR_REMAP;
  750.                 palette: PALETTE_USE_DEFAULT;
  751.                 hide_sprite: (!LOAD_TEMP(13));
  752.                 always_draw: 1;
  753.             }
  754.                     // buildings (snow aware)
  755.                     building {
  756.                         sprite: blast_furnace_spriteset_12_0(1*(animation_frame < 10) ? (animation_frame % 10) : 0);
  757.                         recolour_mode: RECOLOUR_REMAP;
  758.                         palette: PALETTE_USE_DEFAULT;
  759.                         xoffset: 0;
  760.                         yoffset: 0;
  761.                         zoffset: 0;
  762.                         xextent: 16;
  763.                         yextent: 16;
  764.                         zextent: 32;
  765.                         always_draw: 0;
  766.                         hide_sprite: (LOAD_TEMP(255));
  767.                     }
  768.                     building {
  769.                         sprite: blast_furnace_spriteset_12_0_snow(1*(animation_frame < 10) ? (animation_frame % 10) : 0);
  770.                         recolour_mode: RECOLOUR_REMAP;
  771.                         palette: PALETTE_USE_DEFAULT;
  772.                         xoffset: 0;
  773.                         yoffset: 0;
  774.                         zoffset: 0;
  775.                         xextent: 16;
  776.                         yextent: 16;
  777.                         zextent: 32;
  778.                         always_draw: 0;
  779.                         hide_sprite: (LOAD_TEMP(245));
  780.                     }
  781.         }
  782.         switch(FEAT_INDUSTRYTILES, SELF, blast_furnace_industry_layout_1_graphics_switch, relative_pos) {
  783.                 relative_coord(0, 0): blast_furnace_spritelayout_small_shed;
  784.                 relative_coord(0, 1): blast_furnace_spritelayout_empty;
  785.                 relative_coord(0, 2): blast_furnace_spritelayout_large_shed_rear_part;
  786.                 relative_coord(1, 0): blast_furnace_spritelayout_small_tanks;
  787.                 relative_coord(1, 1): blast_furnace_spritelayout_casting_shed;
  788.                 relative_coord(1, 2): blast_furnace_spritelayout_large_shed_front_part;
  789.                 relative_coord(2, 0): blast_furnace_spritelayout_blast_furnace_1;
  790.                 relative_coord(2, 1): blast_furnace_spritelayout_blast_furnace_2;
  791.                 relative_coord(2, 2): blast_furnace_spritelayout_ladle_transporter;
  792.                 relative_coord(3, 0): blast_furnace_spritelayout_blast_furnace_1;
  793.                 relative_coord(3, 1): blast_furnace_spritelayout_blast_furnace_2;
  794.                 relative_coord(3, 2): blast_furnace_spritelayout_small_shed;
  795.                 relative_coord(4, 0): blast_furnace_spritelayout_small_tanks;
  796.                 relative_coord(4, 1): blast_furnace_spritelayout_brick_building;
  797.                 relative_coord(4, 2): blast_furnace_spritelayout_greeble;
  798.             blast_furnace_spritelayout_small_shed; // a default is needed, but should never be reached, layout definitions are explicit
  799.         }
  800.         switch(FEAT_INDUSTRYTILES, SELF, blast_furnace_industry_layout_2_graphics_switch, relative_pos) {
  801.                 relative_coord(0, 0): blast_furnace_spritelayout_small_tanks;
  802.                 relative_coord(0, 1): blast_furnace_spritelayout_large_shed_rear_part;
  803.                 relative_coord(0, 2): blast_furnace_spritelayout_small_shed;
  804.                 relative_coord(0, 3): blast_furnace_spritelayout_blast_furnace_1;
  805.                 relative_coord(0, 4): blast_furnace_spritelayout_blast_furnace_2;
  806.                 relative_coord(1, 0): blast_furnace_spritelayout_casting_shed;
  807.                 relative_coord(1, 1): blast_furnace_spritelayout_large_shed_front_part;
  808.                 relative_coord(1, 2): blast_furnace_spritelayout_blast_furnace_1;
  809.                 relative_coord(1, 3): blast_furnace_spritelayout_blast_furnace_2;
  810.                 relative_coord(1, 4): blast_furnace_spritelayout_brick_building;
  811.                 relative_coord(2, 0): blast_furnace_spritelayout_empty;
  812.                 relative_coord(2, 1): blast_furnace_spritelayout_large_shed_rear_part;
  813.                 relative_coord(2, 2): blast_furnace_spritelayout_blast_furnace_1;
  814.                 relative_coord(2, 3): blast_furnace_spritelayout_blast_furnace_2;
  815.                 relative_coord(2, 4): blast_furnace_spritelayout_small_shed;
  816.                 relative_coord(3, 0): blast_furnace_spritelayout_casting_shed;
  817.                 relative_coord(3, 1): blast_furnace_spritelayout_large_shed_front_part;
  818.                 relative_coord(3, 2): blast_furnace_spritelayout_ladle_transporter;
  819.                 relative_coord(3, 3): blast_furnace_spritelayout_empty;
  820.                 relative_coord(3, 4): blast_furnace_spritelayout_greeble;
  821.             blast_furnace_spritelayout_small_tanks; // a default is needed, but should never be reached, layout definitions are explicit
  822.         }
  823.     switch(FEAT_INDUSTRYTILES, PARENT, blast_furnace_industry_graphics_switch_layouts, layout_num) {
  824.             1: blast_furnace_industry_layout_1_graphics_switch;
  825.             2: blast_furnace_industry_layout_2_graphics_switch;
  826.         blast_furnace_industry_layout_1_graphics_switch; // default
  827.     }
  828.     switch(FEAT_INDUSTRYTILES, SELF, blast_furnace_industry_construction_state_graphics_switch, construction_state) {
  829.         0..2: spritelayout_default_construction_states;
  830.         blast_furnace_industry_graphics_switch_layouts; // default
  831.     }
  832.     switch(FEAT_INDUSTRYTILES, SELF, blast_furnace_store_temp_vars,
  833.             [STORE_TEMP(terrain_type == TILETYPE_SNOW, 13)
  834.                     , STORE_TEMP(0,
  835.                                  255)
  836.                     , STORE_TEMP(construction_state != 3 ? 1 : LOAD_TEMP(255),
  837.                                  255)
  838.                     , STORE_TEMP(LOAD_TEMP(13) == 0 ? 1 : LOAD_TEMP(255),
  839.                                  245)
  840.                     , STORE_TEMP(LOAD_TEMP(13) == 1 ? 1 : LOAD_TEMP(255),
  841.                                  255)
  842.             ]) {
  843.         blast_furnace_industry_construction_state_graphics_switch; // default
  844.     }
  845.     switch(FEAT_INDUSTRYTILES, PARENT, blast_furnace_industry_master_graphics_switch, STORE_TEMP(random_bits, 14)) {
  846.         blast_furnace_store_temp_vars; // default
  847.     }
  848.     switch (FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_fence_station, [
  849.                 STORE_TEMP(LOAD_TEMP(9) * (nearby_tile_class(-1,  0) != TILE_CLASS_STATION), 9),
  850.                 STORE_TEMP(LOAD_TEMP(10) * (nearby_tile_class( 0, -1) != TILE_CLASS_STATION), 10),
  851.                 STORE_TEMP(LOAD_TEMP(11) * (nearby_tile_class( 0,  1) != TILE_CLASS_STATION), 11),
  852.                 STORE_TEMP(LOAD_TEMP(12) * (nearby_tile_class( 1,  0) != TILE_CLASS_STATION), 12),
  853.             ]) {
  854.         blast_furnace_industry_master_graphics_switch;
  855.     }
  856.     switch (FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_fence_industry, [
  857.                 STORE_TEMP(LOAD_TEMP(9) * !nearby_tile_is_same_industry(-1,  0), 9),
  858.                 STORE_TEMP(LOAD_TEMP(10) * !nearby_tile_is_same_industry( 0, -1), 10),
  859.                 STORE_TEMP(LOAD_TEMP(11) * !nearby_tile_is_same_industry( 0,  1), 11),
  860.                 STORE_TEMP(LOAD_TEMP(12) * !nearby_tile_is_same_industry( 1,  0), 12),
  861.             ]) {
  862.         blast_furnace_tile_fence_station;
  863.     }
  864.     switch (FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_fences, [
  865.                 STORE_TEMP(0, 1),
  866.                 STORE_TEMP(0, 2),
  867.                 STORE_TEMP(0, 3),
  868.                 STORE_TEMP(0, 4),
  869.                 STORE_TEMP(1, 9),
  870.                 STORE_TEMP(1, 10),
  871.                 STORE_TEMP(1, 11),
  872.                 STORE_TEMP(1, 12),
  873.                 STORE_TEMP(0, 5),
  874.                 STORE_TEMP(0, 6),
  875.                 STORE_TEMP(0, 7),
  876.                 STORE_TEMP(0, 8),
  877.                 ]) {
  878.         blast_furnace_tile_fence_industry;
  879.     }
  880.     switch(FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_1_lc_2,
  881.         (nearby_tile_class( 1,  1) == TILE_CLASS_INDUSTRY) |
  882.         (nearby_tile_class( 1,  0) == TILE_CLASS_INDUSTRY) |
  883.         (nearby_tile_class( 1, -1) == TILE_CLASS_INDUSTRY) |
  884.         (nearby_tile_class( 0, -1) == TILE_CLASS_INDUSTRY) |
  885.         (nearby_tile_class(-1, -1) == TILE_CLASS_INDUSTRY) |
  886.         (nearby_tile_class(-1,  0) == TILE_CLASS_INDUSTRY) |
  887.         (nearby_tile_class(-1,  1) == TILE_CLASS_INDUSTRY) |
  888.         (nearby_tile_class( 0,  1) == TILE_CLASS_INDUSTRY)) {
  889.         1: return CB_RESULT_LOCATION_DISALLOW;
  890.         return CB_RESULT_LOCATION_ALLOW;
  891.     }
  892.     switch (FEAT_INDUSTRYTILES, PARENT, blast_furnace_tile_1_lc_1, (
  893.                 (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_FUND) ||
  894.                 (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_PROSPECT)
  895.                 )
  896.             ) {
  897.         1: return CB_RESULT_LOCATION_ALLOW;
  898.         blast_furnace_tile_1_lc_2;
  899.     }
  900.     switch (FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_1_lc_0,
  901.                 (
  902.                 nearby_tile_height(-relative_x, -relative_y)
  903.                 + (nearby_tile_slope(-relative_x, -relative_y)
  904.                 == SLOPE_FLAT ? 0 :
  905.                 nearby_tile_slope(-relative_x, -relative_y) == bitmask(IS_STEEP_SLOPE) ? 2 : 1
  906.                 )) == (nearby_tile_height(0, 0)
  907.                 + (nearby_tile_slope(0, 0)
  908.                 == SLOPE_FLAT ? 0 :
  909.                 nearby_tile_slope(0, 0) == bitmask(IS_STEEP_SLOPE) ? 2 : 1))
  910.                 ) {
  911.         1: blast_furnace_tile_1_lc_1;
  912.         return CB_RESULT_LOCATION_DISALLOW;
  913.     }
  914.     switch(FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_2_lc_2,
  915.         (nearby_tile_class( 1,  1) == TILE_CLASS_INDUSTRY) |
  916.         (nearby_tile_class( 1,  0) == TILE_CLASS_INDUSTRY) |
  917.         (nearby_tile_class( 1, -1) == TILE_CLASS_INDUSTRY) |
  918.         (nearby_tile_class( 0, -1) == TILE_CLASS_INDUSTRY) |
  919.         (nearby_tile_class(-1, -1) == TILE_CLASS_INDUSTRY) |
  920.         (nearby_tile_class(-1,  0) == TILE_CLASS_INDUSTRY) |
  921.         (nearby_tile_class(-1,  1) == TILE_CLASS_INDUSTRY) |
  922.         (nearby_tile_class( 0,  1) == TILE_CLASS_INDUSTRY)) {
  923.         1: return CB_RESULT_LOCATION_DISALLOW;
  924.         return CB_RESULT_LOCATION_ALLOW;
  925.     }
  926.     switch (FEAT_INDUSTRYTILES, PARENT, blast_furnace_tile_2_lc_1, (
  927.                 (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_FUND) ||
  928.                 (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_PROSPECT)
  929.                 )
  930.             ) {
  931.         1: return CB_RESULT_LOCATION_ALLOW;
  932.         blast_furnace_tile_2_lc_2;
  933.     }
  934.     switch (FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_2_lc_0,
  935.                 (
  936.                 nearby_tile_height(-relative_x, -relative_y)
  937.                 + (nearby_tile_slope(-relative_x, -relative_y)
  938.                 == SLOPE_FLAT ? 0 :
  939.                 nearby_tile_slope(-relative_x, -relative_y) == bitmask(IS_STEEP_SLOPE) ? 2 : 1
  940.                 )) == (nearby_tile_height(0, 0)
  941.                 + (nearby_tile_slope(0, 0)
  942.                 == SLOPE_FLAT ? 0 :
  943.                 nearby_tile_slope(0, 0) == bitmask(IS_STEEP_SLOPE) ? 2 : 1))
  944.                 ) {
  945.         1: blast_furnace_tile_2_lc_1;
  946.         return CB_RESULT_LOCATION_DISALLOW;
  947.     }
  948.     switch(FEAT_INDUSTRYTILES, SELF, blast_furnace_tile_1_anim_control, (extra_callback_info1 % 7)) {
  949.             0: return 0;
  950.             1: return 1;
  951.             2: return 2;
  952.             3: return 3;
  953.             4: return 4;
  954.             5: return 5;
  955.             6: return 6;
  956.         return CB_RESULT_NEXT_FRAME;
  957.     }
  958.     item(FEAT_INDUSTRYTILES, blast_furnace_tile_1, 158) {
  959.         property {
  960.             substitute:         0;
  961.             land_shape_flags:   0;
  962.             special_flags: bitmask(INDTILE_FLAG_ACCEPT_ALL);
  963.                 animation_info: [ANIMATION_LOOPING, 7];
  964.                 animation_speed: 3;
  965.             animation_triggers: bitmask(ANIM_TRIGGER_INDTILE_CONSTRUCTION_STATE);
  966.         }
  967.         graphics {
  968.                 tile_check: blast_furnace_tile_1_lc_0;
  969.                 anim_control: blast_furnace_tile_1_anim_control;
  970.             blast_furnace_tile_fences;
  971.         }
  972.     }
  973.     item(FEAT_INDUSTRYTILES, blast_furnace_tile_2, 159) {
  974.         property {
  975.             substitute:         0;
  976.             land_shape_flags:   0;
  977.             special_flags: bitmask(INDTILE_FLAG_ACCEPT_ALL);
  978.                 animation_info: [ANIMATION_LOOPING, 30];
  979.                 animation_speed: 4;
  980.             animation_triggers: bitmask();
  981.         }
  982.         graphics {
  983.                 tile_check: blast_furnace_tile_2_lc_0;
  984.             blast_furnace_tile_fences;
  985.         }
  986.     }
  987. /* *************************************************
  988.  * Definition of the industry
  989.  * *************************************************/
  990.     tilelayout blast_furnace_industry_layout_1_tilelayout {
  991.             0, 0: blast_furnace_tile_1;
  992.             0, 1: blast_furnace_tile_1;
  993.             0, 2: blast_furnace_tile_1;
  994.             1, 0: blast_furnace_tile_1;
  995.             1, 1: blast_furnace_tile_2;
  996.             1, 2: blast_furnace_tile_2;
  997.             2, 0: blast_furnace_tile_1;
  998.             2, 1: blast_furnace_tile_1;
  999.             2, 2: blast_furnace_tile_1;
  1000.             3, 0: blast_furnace_tile_1;
  1001.             3, 1: blast_furnace_tile_1;
  1002.             3, 2: blast_furnace_tile_1;
  1003.             4, 0: blast_furnace_tile_1;
  1004.             4, 1: blast_furnace_tile_1;
  1005.             4, 2: blast_furnace_tile_1;
  1006.     }
  1007.     tilelayout blast_furnace_industry_layout_2_tilelayout {
  1008.             0, 0: blast_furnace_tile_1;
  1009.             0, 1: blast_furnace_tile_1;
  1010.             0, 2: blast_furnace_tile_1;
  1011.             0, 3: blast_furnace_tile_1;
  1012.             0, 4: blast_furnace_tile_1;
  1013.             1, 0: blast_furnace_tile_1;
  1014.             1, 1: blast_furnace_tile_2;
  1015.             1, 2: blast_furnace_tile_2;
  1016.             1, 3: blast_furnace_tile_1;
  1017.             1, 4: blast_furnace_tile_1;
  1018.             2, 0: blast_furnace_tile_1;
  1019.             2, 1: blast_furnace_tile_1;
  1020.             2, 2: blast_furnace_tile_1;
  1021.             2, 3: blast_furnace_tile_1;
  1022.             2, 4: blast_furnace_tile_1;
  1023.             3, 0: blast_furnace_tile_2;
  1024.             3, 1: blast_furnace_tile_2;
  1025.             3, 2: blast_furnace_tile_1;
  1026.             3, 3: blast_furnace_tile_1;
  1027.             3, 4: blast_furnace_tile_1;
  1028.     }
  1029.     produce (blast_furnace_produce_0,
  1030.         [
  1031.                 IORE: incoming_cargo_waiting("IORE");
  1032.                 COAL: incoming_cargo_waiting("COAL");
  1033.                 SCMT: incoming_cargo_waiting("SCMT");
  1034.         ],
  1035.         [
  1036.                 STEL: (LOAD_PERM(2) * 8) / 8;
  1037.         ],
  1038.     0)
  1039.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_produce_calculation_0,
  1040.             [
  1041.                 STORE_PERM(0, 1),
  1042.                 STORE_PERM(0, 2),
  1043.                     STORE_PERM(
  1044.                         max(LOAD_PERM(3), (incoming_cargo_waiting("IORE") > 0) * current_date),
  1045.                         3
  1046.                     ),
  1047.                     STORE_PERM(
  1048.                         LOAD_PERM(1)
  1049.                         + (
  1050.                             (current_date - LOAD_PERM(3)) <= 90
  1051.                             ? 3 : 0
  1052.                         ),
  1053.                         1
  1054.                     ),
  1055.                     STORE_PERM(
  1056.                         max(LOAD_PERM(4), (incoming_cargo_waiting("COAL") > 0) * current_date),
  1057.                         4
  1058.                     ),
  1059.                     STORE_PERM(
  1060.                         LOAD_PERM(1)
  1061.                         + (
  1062.                             (current_date - LOAD_PERM(4)) <= 90
  1063.                             ? 2 : 0
  1064.                         ),
  1065.                         1
  1066.                     ),
  1067.                     STORE_PERM(
  1068.                         max(LOAD_PERM(5), (incoming_cargo_waiting("SCMT") > 0) * current_date),
  1069.                         5
  1070.                     ),
  1071.                     STORE_PERM(
  1072.                         LOAD_PERM(1)
  1073.                         + (
  1074.                             (current_date - LOAD_PERM(5)) <= 90
  1075.                             ? 3 : 0
  1076.                         ),
  1077.                         1
  1078.                     ),
  1079.                     STORE_PERM(
  1080.                         LOAD_PERM(2)
  1081.                         + ((incoming_cargo_waiting("IORE") * LOAD_PERM(1)) / 8),
  1082.                         2
  1083.                     ),
  1084.                     STORE_PERM(
  1085.                         LOAD_PERM(2)
  1086.                         + ((incoming_cargo_waiting("COAL") * LOAD_PERM(1)) / 8),
  1087.                         2
  1088.                     ),
  1089.                     STORE_PERM(
  1090.                         LOAD_PERM(2)
  1091.                         + ((incoming_cargo_waiting("SCMT") * LOAD_PERM(1)) / 8),
  1092.                         2
  1093.                     ),
  1094.                 STORE_PERM(
  1095.                     (LOAD_PERM(2) == 0)
  1096.                     ? LOAD_PERM(0) : 0,
  1097.                     0
  1098.                 ),
  1099.             ]) {
  1100.         blast_furnace_produce_0;
  1101.     }
  1102.     produce (blast_furnace_produce_1,
  1103.         [
  1104.                 IORE: incoming_cargo_waiting("IORE");
  1105.                 COAL: incoming_cargo_waiting("COAL");
  1106.                 SCMT: incoming_cargo_waiting("SCMT");
  1107.         ],
  1108.         [
  1109.                 METL: (LOAD_PERM(2) * 8) / 8;
  1110.         ],
  1111.     0)
  1112.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_produce_calculation_1,
  1113.             [
  1114.                 STORE_PERM(0, 1),
  1115.                 STORE_PERM(0, 2),
  1116.                     STORE_PERM(
  1117.                         max(LOAD_PERM(3), (incoming_cargo_waiting("IORE") > 0) * current_date),
  1118.                         3
  1119.                     ),
  1120.                     STORE_PERM(
  1121.                         LOAD_PERM(1)
  1122.                         + (
  1123.                             (current_date - LOAD_PERM(3)) <= 90
  1124.                             ? 3 : 0
  1125.                         ),
  1126.                         1
  1127.                     ),
  1128.                     STORE_PERM(
  1129.                         max(LOAD_PERM(4), (incoming_cargo_waiting("COAL") > 0) * current_date),
  1130.                         4
  1131.                     ),
  1132.                     STORE_PERM(
  1133.                         LOAD_PERM(1)
  1134.                         + (
  1135.                             (current_date - LOAD_PERM(4)) <= 90
  1136.                             ? 2 : 0
  1137.                         ),
  1138.                         1
  1139.                     ),
  1140.                     STORE_PERM(
  1141.                         max(LOAD_PERM(5), (incoming_cargo_waiting("SCMT") > 0) * current_date),
  1142.                         5
  1143.                     ),
  1144.                     STORE_PERM(
  1145.                         LOAD_PERM(1)
  1146.                         + (
  1147.                             (current_date - LOAD_PERM(5)) <= 90
  1148.                             ? 3 : 0
  1149.                         ),
  1150.                         1
  1151.                     ),
  1152.                     STORE_PERM(
  1153.                         LOAD_PERM(2)
  1154.                         + ((incoming_cargo_waiting("IORE") * LOAD_PERM(1)) / 8),
  1155.                         2
  1156.                     ),
  1157.                     STORE_PERM(
  1158.                         LOAD_PERM(2)
  1159.                         + ((incoming_cargo_waiting("COAL") * LOAD_PERM(1)) / 8),
  1160.                         2
  1161.                     ),
  1162.                     STORE_PERM(
  1163.                         LOAD_PERM(2)
  1164.                         + ((incoming_cargo_waiting("SCMT") * LOAD_PERM(1)) / 8),
  1165.                         2
  1166.                     ),
  1167.                 STORE_PERM(
  1168.                     (LOAD_PERM(2) == 0)
  1169.                     ? LOAD_PERM(0) : 0,
  1170.                     0
  1171.                 ),
  1172.             ]) {
  1173.         blast_furnace_produce_1;
  1174.     }
  1175.     produce (blast_furnace_produce_4,
  1176.         [
  1177.                 IORE: incoming_cargo_waiting("IORE");
  1178.                 COAL: incoming_cargo_waiting("COAL");
  1179.                 SCMT: incoming_cargo_waiting("SCMT");
  1180.         ],
  1181.         [
  1182.                 METL: (LOAD_PERM(2) * 8) / 8;
  1183.         ],
  1184.     0)
  1185.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_produce_calculation_4,
  1186.             [
  1187.                 STORE_PERM(0, 1),
  1188.                 STORE_PERM(0, 2),
  1189.                     STORE_PERM(
  1190.                         max(LOAD_PERM(3), (incoming_cargo_waiting("IORE") > 0) * current_date),
  1191.                         3
  1192.                     ),
  1193.                     STORE_PERM(
  1194.                         LOAD_PERM(1)
  1195.                         + (
  1196.                             (current_date - LOAD_PERM(3)) <= 90
  1197.                             ? 3 : 0
  1198.                         ),
  1199.                         1
  1200.                     ),
  1201.                     STORE_PERM(
  1202.                         max(LOAD_PERM(4), (incoming_cargo_waiting("COAL") > 0) * current_date),
  1203.                         4
  1204.                     ),
  1205.                     STORE_PERM(
  1206.                         LOAD_PERM(1)
  1207.                         + (
  1208.                             (current_date - LOAD_PERM(4)) <= 90
  1209.                             ? 2 : 0
  1210.                         ),
  1211.                         1
  1212.                     ),
  1213.                     STORE_PERM(
  1214.                         max(LOAD_PERM(5), (incoming_cargo_waiting("SCMT") > 0) * current_date),
  1215.                         5
  1216.                     ),
  1217.                     STORE_PERM(
  1218.                         LOAD_PERM(1)
  1219.                         + (
  1220.                             (current_date - LOAD_PERM(5)) <= 90
  1221.                             ? 3 : 0
  1222.                         ),
  1223.                         1
  1224.                     ),
  1225.                     STORE_PERM(
  1226.                         LOAD_PERM(2)
  1227.                         + ((incoming_cargo_waiting("IORE") * LOAD_PERM(1)) / 8),
  1228.                         2
  1229.                     ),
  1230.                     STORE_PERM(
  1231.                         LOAD_PERM(2)
  1232.                         + ((incoming_cargo_waiting("COAL") * LOAD_PERM(1)) / 8),
  1233.                         2
  1234.                     ),
  1235.                     STORE_PERM(
  1236.                         LOAD_PERM(2)
  1237.                         + ((incoming_cargo_waiting("SCMT") * LOAD_PERM(1)) / 8),
  1238.                         2
  1239.                     ),
  1240.                 STORE_PERM(
  1241.                     (LOAD_PERM(2) == 0)
  1242.                     ? LOAD_PERM(0) : 0,
  1243.                     0
  1244.                 ),
  1245.             ]) {
  1246.         blast_furnace_produce_4;
  1247.     }
  1248.     produce (blast_furnace_produce_5,
  1249.         [
  1250.                 IORE: incoming_cargo_waiting("IORE");
  1251.                 COKE: incoming_cargo_waiting("COKE");
  1252.                 LIME: incoming_cargo_waiting("LIME");
  1253.         ],
  1254.         [
  1255.                 IRON: (LOAD_PERM(2) * 4) / 8;
  1256.                 CSTI: (LOAD_PERM(2) * 2) / 8;
  1257.                 SLAG: (LOAD_PERM(2) * 2) / 8;
  1258.         ],
  1259.     0)
  1260.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_produce_calculation_5,
  1261.             [
  1262.                 STORE_PERM(0, 1),
  1263.                 STORE_PERM(0, 2),
  1264.                     STORE_PERM(
  1265.                         max(LOAD_PERM(3), (incoming_cargo_waiting("IORE") > 0) * current_date),
  1266.                         3
  1267.                     ),
  1268.                     STORE_PERM(
  1269.                         LOAD_PERM(1)
  1270.                         + (
  1271.                             (current_date - LOAD_PERM(3)) <= 90
  1272.                             ? 3 : 0
  1273.                         ),
  1274.                         1
  1275.                     ),
  1276.                     STORE_PERM(
  1277.                         max(LOAD_PERM(4), (incoming_cargo_waiting("COKE") > 0) * current_date),
  1278.                         4
  1279.                     ),
  1280.                     STORE_PERM(
  1281.                         LOAD_PERM(1)
  1282.                         + (
  1283.                             (current_date - LOAD_PERM(4)) <= 90
  1284.                             ? 3 : 0
  1285.                         ),
  1286.                         1
  1287.                     ),
  1288.                     STORE_PERM(
  1289.                         max(LOAD_PERM(5), (incoming_cargo_waiting("LIME") > 0) * current_date),
  1290.                         5
  1291.                     ),
  1292.                     STORE_PERM(
  1293.                         LOAD_PERM(1)
  1294.                         + (
  1295.                             (current_date - LOAD_PERM(5)) <= 90
  1296.                             ? 2 : 0
  1297.                         ),
  1298.                         1
  1299.                     ),
  1300.                     STORE_PERM(
  1301.                         LOAD_PERM(2)
  1302.                         + ((incoming_cargo_waiting("IORE") * LOAD_PERM(1)) / 8),
  1303.                         2
  1304.                     ),
  1305.                     STORE_PERM(
  1306.                         LOAD_PERM(2)
  1307.                         + ((incoming_cargo_waiting("COKE") * LOAD_PERM(1)) / 8),
  1308.                         2
  1309.                     ),
  1310.                     STORE_PERM(
  1311.                         LOAD_PERM(2)
  1312.                         + ((incoming_cargo_waiting("LIME") * LOAD_PERM(1)) / 8),
  1313.                         2
  1314.                     ),
  1315.                 STORE_PERM(
  1316.                     (LOAD_PERM(2) == 0)
  1317.                     ? LOAD_PERM(0) : 0,
  1318.                     0
  1319.                 ),
  1320.             ]) {
  1321.         blast_furnace_produce_5;
  1322.     }
  1323.     produce (blast_furnace_produce_3,
  1324.         [
  1325.                 IORE: incoming_cargo_waiting("IORE");
  1326.                 COAL: incoming_cargo_waiting("COAL");
  1327.                 SCMT: incoming_cargo_waiting("SCMT");
  1328.         ],
  1329.         [
  1330.                 METL: (LOAD_PERM(2) * 8) / 8;
  1331.         ],
  1332.     0)
  1333.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_produce_calculation_3,
  1334.             [
  1335.                 STORE_PERM(0, 1),
  1336.                 STORE_PERM(0, 2),
  1337.                     STORE_PERM(
  1338.                         max(LOAD_PERM(3), (incoming_cargo_waiting("IORE") > 0) * current_date),
  1339.                         3
  1340.                     ),
  1341.                     STORE_PERM(
  1342.                         LOAD_PERM(1)
  1343.                         + (
  1344.                             (current_date - LOAD_PERM(3)) <= 90
  1345.                             ? 3 : 0
  1346.                         ),
  1347.                         1
  1348.                     ),
  1349.                     STORE_PERM(
  1350.                         max(LOAD_PERM(4), (incoming_cargo_waiting("COAL") > 0) * current_date),
  1351.                         4
  1352.                     ),
  1353.                     STORE_PERM(
  1354.                         LOAD_PERM(1)
  1355.                         + (
  1356.                             (current_date - LOAD_PERM(4)) <= 90
  1357.                             ? 2 : 0
  1358.                         ),
  1359.                         1
  1360.                     ),
  1361.                     STORE_PERM(
  1362.                         max(LOAD_PERM(5), (incoming_cargo_waiting("SCMT") > 0) * current_date),
  1363.                         5
  1364.                     ),
  1365.                     STORE_PERM(
  1366.                         LOAD_PERM(1)
  1367.                         + (
  1368.                             (current_date - LOAD_PERM(5)) <= 90
  1369.                             ? 3 : 0
  1370.                         ),
  1371.                         1
  1372.                     ),
  1373.                     STORE_PERM(
  1374.                         LOAD_PERM(2)
  1375.                         + ((incoming_cargo_waiting("IORE") * LOAD_PERM(1)) / 8),
  1376.                         2
  1377.                     ),
  1378.                     STORE_PERM(
  1379.                         LOAD_PERM(2)
  1380.                         + ((incoming_cargo_waiting("COAL") * LOAD_PERM(1)) / 8),
  1381.                         2
  1382.                     ),
  1383.                     STORE_PERM(
  1384.                         LOAD_PERM(2)
  1385.                         + ((incoming_cargo_waiting("SCMT") * LOAD_PERM(1)) / 8),
  1386.                         2
  1387.                     ),
  1388.                 STORE_PERM(
  1389.                     (LOAD_PERM(2) == 0)
  1390.                     ? LOAD_PERM(0) : 0,
  1391.                     0
  1392.                 ),
  1393.             ]) {
  1394.         blast_furnace_produce_3;
  1395.     }
  1396.     produce (blast_furnace_produce_2,
  1397.         [
  1398.                 IORE: incoming_cargo_waiting("IORE");
  1399.                 COAL: incoming_cargo_waiting("COAL");
  1400.                 SCMT: incoming_cargo_waiting("SCMT");
  1401.         ],
  1402.         [
  1403.                 METL: (LOAD_PERM(2) * 8) / 8;
  1404.         ],
  1405.     0)
  1406.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_produce_calculation_2,
  1407.             [
  1408.                 STORE_PERM(0, 1),
  1409.                 STORE_PERM(0, 2),
  1410.                     STORE_PERM(
  1411.                         max(LOAD_PERM(3), (incoming_cargo_waiting("IORE") > 0) * current_date),
  1412.                         3
  1413.                     ),
  1414.                     STORE_PERM(
  1415.                         LOAD_PERM(1)
  1416.                         + (
  1417.                             (current_date - LOAD_PERM(3)) <= 90
  1418.                             ? 3 : 0
  1419.                         ),
  1420.                         1
  1421.                     ),
  1422.                     STORE_PERM(
  1423.                         max(LOAD_PERM(4), (incoming_cargo_waiting("COAL") > 0) * current_date),
  1424.                         4
  1425.                     ),
  1426.                     STORE_PERM(
  1427.                         LOAD_PERM(1)
  1428.                         + (
  1429.                             (current_date - LOAD_PERM(4)) <= 90
  1430.                             ? 2 : 0
  1431.                         ),
  1432.                         1
  1433.                     ),
  1434.                     STORE_PERM(
  1435.                         max(LOAD_PERM(5), (incoming_cargo_waiting("SCMT") > 0) * current_date),
  1436.                         5
  1437.                     ),
  1438.                     STORE_PERM(
  1439.                         LOAD_PERM(1)
  1440.                         + (
  1441.                             (current_date - LOAD_PERM(5)) <= 90
  1442.                             ? 3 : 0
  1443.                         ),
  1444.                         1
  1445.                     ),
  1446.                     STORE_PERM(
  1447.                         LOAD_PERM(2)
  1448.                         + ((incoming_cargo_waiting("IORE") * LOAD_PERM(1)) / 8),
  1449.                         2
  1450.                     ),
  1451.                     STORE_PERM(
  1452.                         LOAD_PERM(2)
  1453.                         + ((incoming_cargo_waiting("COAL") * LOAD_PERM(1)) / 8),
  1454.                         2
  1455.                     ),
  1456.                     STORE_PERM(
  1457.                         LOAD_PERM(2)
  1458.                         + ((incoming_cargo_waiting("SCMT") * LOAD_PERM(1)) / 8),
  1459.                         2
  1460.                     ),
  1461.                 STORE_PERM(
  1462.                     (LOAD_PERM(2) == 0)
  1463.                     ? LOAD_PERM(0) : 0,
  1464.                     0
  1465.                 ),
  1466.             ]) {
  1467.         blast_furnace_produce_2;
  1468.     }
  1469. switch (FEAT_INDUSTRIES, SELF, blast_furnace_produce_cargo_arrival, economy) {
  1470.         0: blast_furnace_produce_calculation_0;
  1471.         1: blast_furnace_produce_calculation_1;
  1472.         4: blast_furnace_produce_calculation_4;
  1473.         5: blast_furnace_produce_calculation_5;
  1474.         3: blast_furnace_produce_calculation_3;
  1475.         2: blast_furnace_produce_calculation_2;
  1476. }
  1477. switch (FEAT_INDUSTRIES, SELF, blast_furnace_extra_text, economy) {
  1478.             0: return string(STR_EXTRA_TEXT_SECONDARY_COMBINATORY);
  1479.             5: return string(STR_EXTRA_TEXT_SECONDARY_COMBINATORY);
  1480.             2: return string(STR_EXTRA_TEXT_SECONDARY_COMBINATORY);
  1481. }
  1482.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_IORE_economy_0, [
  1483.                     current_date - LOAD_PERM(3) > 90
  1484.                 ]) {
  1485.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1486.                 1: return 0x3800 + string(STR_EMPTY);
  1487.             }
  1488.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_COAL_economy_0, [
  1489.                     current_date - LOAD_PERM(4) > 90
  1490.                 ]) {
  1491.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1492.                 1: return 0x3800 + string(STR_EMPTY);
  1493.             }
  1494.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_SCMT_economy_0, [
  1495.                     current_date - LOAD_PERM(5) > 90
  1496.                 ]) {
  1497.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1498.                 1: return 0x3800 + string(STR_EMPTY);
  1499.             }
  1500.         switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_switch_cargo_economy_0, getbits(extra_callback_info2, 16, 23)) {
  1501.                 IORE: blast_furnace_cargo_subtype_display_cargo_IORE_economy_0;
  1502.                 COAL: blast_furnace_cargo_subtype_display_cargo_COAL_economy_0;
  1503.                 SCMT: blast_furnace_cargo_subtype_display_cargo_SCMT_economy_0;
  1504.             return CB_RESULT_NO_TEXT;
  1505.         }
  1506.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_IORE_economy_5, [
  1507.                     current_date - LOAD_PERM(3) > 90
  1508.                 ]) {
  1509.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1510.                 1: return 0x3800 + string(STR_EMPTY);
  1511.             }
  1512.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_COKE_economy_5, [
  1513.                     current_date - LOAD_PERM(4) > 90
  1514.                 ]) {
  1515.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1516.                 1: return 0x3800 + string(STR_EMPTY);
  1517.             }
  1518.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_LIME_economy_5, [
  1519.                     current_date - LOAD_PERM(5) > 90
  1520.                 ]) {
  1521.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1522.                 1: return 0x3800 + string(STR_EMPTY);
  1523.             }
  1524.         switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_switch_cargo_economy_5, getbits(extra_callback_info2, 16, 23)) {
  1525.                 IORE: blast_furnace_cargo_subtype_display_cargo_IORE_economy_5;
  1526.                 COKE: blast_furnace_cargo_subtype_display_cargo_COKE_economy_5;
  1527.                 LIME: blast_furnace_cargo_subtype_display_cargo_LIME_economy_5;
  1528.             return CB_RESULT_NO_TEXT;
  1529.         }
  1530.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_IORE_economy_2, [
  1531.                     current_date - LOAD_PERM(3) > 90
  1532.                 ]) {
  1533.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1534.                 1: return 0x3800 + string(STR_EMPTY);
  1535.             }
  1536.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_COAL_economy_2, [
  1537.                     current_date - LOAD_PERM(4) > 90
  1538.                 ]) {
  1539.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1540.                 1: return 0x3800 + string(STR_EMPTY);
  1541.             }
  1542.             switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_cargo_SCMT_economy_2, [
  1543.                     current_date - LOAD_PERM(5) > 90
  1544.                 ]) {
  1545.                 0: return 0x3800 + string(STR_CARGO_SUBTYPE_DISPLAY_SECONDARY_CARGO_DELIVERED);
  1546.                 1: return 0x3800 + string(STR_EMPTY);
  1547.             }
  1548.         switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_switch_cargo_economy_2, getbits(extra_callback_info2, 16, 23)) {
  1549.                 IORE: blast_furnace_cargo_subtype_display_cargo_IORE_economy_2;
  1550.                 COAL: blast_furnace_cargo_subtype_display_cargo_COAL_economy_2;
  1551.                 SCMT: blast_furnace_cargo_subtype_display_cargo_SCMT_economy_2;
  1552.             return CB_RESULT_NO_TEXT;
  1553.         }
  1554. switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display_switch_economy, economy) {
  1555.             0:  blast_furnace_cargo_subtype_display_switch_cargo_economy_0;
  1556.             5:  blast_furnace_cargo_subtype_display_switch_cargo_economy_5;
  1557.             2:  blast_furnace_cargo_subtype_display_switch_cargo_economy_2;
  1558. }
  1559. switch (FEAT_INDUSTRIES, SELF, blast_furnace_cargo_subtype_display, getbits(extra_callback_info2, 8, 8)) {
  1560.     1: blast_furnace_cargo_subtype_display_switch_economy;
  1561.     return CB_RESULT_NO_TEXT;
  1562. }
  1563. switch(FEAT_INDUSTRIES, SELF, blast_furnace_check_availability_param, restrict_open_during_gameplay) {
  1564.     1..255: return CB_RESULT_IND_NO_CONSTRUCTION;         // disallow when restrictions in place
  1565.     return CB_RESULT_IND_PROBABILITY_FROM_PROPERTY;       // we may build
  1566. }
  1567. switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_map_gen, extra_callback_info2 == IND_CREATION_GENERATION) {
  1568.     1: return CB_RESULT_IND_PROBABILITY_FROM_PROPERTY;
  1569.     blast_furnace_check_availability_param;
  1570. }
  1571. switch (FEAT_INDUSTRIES, SELF, blast_furnace_available_game_mode, game_mode == GAMEMODE_GAME) {
  1572.     1: blast_furnace_check_map_gen;
  1573.     return CB_RESULT_IND_PROBABILITY_FROM_PROPERTY;
  1574. }
  1575.     /* 1800 */
  1576.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_availability_0, current_date) {
  1577.         date(1800,1,1) .. date(5000000,12,31): blast_furnace_available_game_mode;
  1578.         return CB_RESULT_IND_NO_CONSTRUCTION;
  1579.     }
  1580.     /* 1850 */
  1581.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_availability_1, current_date) {
  1582.         date(1850,1,1) .. date(5000000,12,31): blast_furnace_available_game_mode;
  1583.         return CB_RESULT_IND_NO_CONSTRUCTION;
  1584.     }
  1585.     /* 1850 */
  1586.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_availability_4, current_date) {
  1587.         date(1850,1,1) .. date(5000000,12,31): blast_furnace_available_game_mode;
  1588.         return CB_RESULT_IND_NO_CONSTRUCTION;
  1589.     }
  1590.     /* 1850 */
  1591.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_availability_5, current_date) {
  1592.         date(1850,1,1) .. date(5000000,12,31): blast_furnace_available_game_mode;
  1593.         return CB_RESULT_IND_NO_CONSTRUCTION;
  1594.     }
  1595.     /* 1850 */
  1596.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_availability_3, current_date) {
  1597.         date(1850,1,1) .. date(5000000,12,31): blast_furnace_available_game_mode;
  1598.         return CB_RESULT_IND_NO_CONSTRUCTION;
  1599.     }
  1600.     /* 1850 */
  1601.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_availability_2, current_date) {
  1602.         date(1850,1,1) .. date(5000000,12,31): blast_furnace_available_game_mode;
  1603.         return CB_RESULT_IND_NO_CONSTRUCTION;
  1604.     }
  1605. switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_availability, economy) {
  1606.         0: blast_furnace_check_availability_0;
  1607.         1: blast_furnace_check_availability_1;
  1608.         4: blast_furnace_check_availability_4;
  1609.         5: blast_furnace_check_availability_5;
  1610.         3: blast_furnace_check_availability_3;
  1611.         2: blast_furnace_check_availability_2;
  1612. }
  1613.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_80, industry_distance(80)) {
  1614.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1615.         return CB_RESULT_LOCATION_ALLOW;
  1616.     }
  1617.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_10, industry_distance(10)) {
  1618.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1619.         blast_furnace_min_distance_80;
  1620.     }
  1621.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_38, industry_distance(38)) {
  1622.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1623.         blast_furnace_min_distance_10;
  1624.     }
  1625.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_9, industry_distance(9)) {
  1626.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1627.         blast_furnace_min_distance_38;
  1628.     }
  1629.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_77, industry_distance(77)) {
  1630.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1631.         blast_furnace_min_distance_9;
  1632.     }
  1633.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_0, industry_distance(0)) {
  1634.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1635.         blast_furnace_min_distance_77;
  1636.     }
  1637.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_23, industry_distance(23)) {
  1638.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1639.         blast_furnace_min_distance_0;
  1640.     }
  1641.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_25, industry_distance(25)) {
  1642.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1643.         blast_furnace_min_distance_23;
  1644.     }
  1645.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_6, industry_distance(6)) {
  1646.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1647.         blast_furnace_min_distance_25;
  1648.     }
  1649.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_2, industry_distance(2)) {
  1650.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1651.         blast_furnace_min_distance_6;
  1652.     }
  1653.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_4, industry_distance(4)) {
  1654.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1655.         blast_furnace_min_distance_2;
  1656.     }
  1657.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_54, industry_distance(54)) {
  1658.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1659.         blast_furnace_min_distance_4;
  1660.     }
  1661.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_81, industry_distance(81)) {
  1662.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1663.         blast_furnace_min_distance_54;
  1664.     }
  1665.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_78, industry_distance(78)) {
  1666.         0 .. 16: return CB_RESULT_LOCATION_DISALLOW;
  1667.         blast_furnace_min_distance_81;
  1668.     }
  1669.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_min_distance_7, industry_distance(7)) {
  1670.         0 .. 56: return CB_RESULT_LOCATION_DISALLOW;
  1671.         blast_furnace_min_distance_78;
  1672.     }
  1673.     switch (FEAT_INDUSTRIES, SELF, blast_furnace_check_location, (
  1674.                 (extra_callback_info2 == IND_CREATION_FUND) ||
  1675.                 (extra_callback_info2 == IND_CREATION_PROSPECT)
  1676.                 )
  1677.             ) {
  1678.         1: return CB_RESULT_LOCATION_ALLOW;
  1679.         blast_furnace_min_distance_7;
  1680.     }
  1681.         if (economy==0) {
  1682.             item(FEAT_INDUSTRIES, blast_furnace, 7) {
  1683.                 property {
  1684.                     substitute: 0;
  1685.                     override: 0;
  1686.                     map_colour: 10;
  1687.                     life_type: IND_LIFE_TYPE_PROCESSING;
  1688.                     min_cargo_distr: 1;
  1689.                     layouts: [blast_furnace_industry_layout_1_tilelayout,blast_furnace_industry_layout_2_tilelayout];
  1690.                     spec_flags: bitmask(IND_FLAG_LONG_CARGO_TYPE_LISTS);
  1691.                     conflicting_ind_types: []; // set this prop empty, FIRS has it's own better checks for this
  1692.                    random_sound_effects: []; // set this empty to avoid spurious default industry sounds (as of May 2017 FIRS does not yet use sound effects)
  1693.                    name: TTD_STR_INDUSTRY_NAME_STEEL_MILL;
  1694.                    prob_random: 5;
  1695.                    prob_in_game: 3;
  1696.                    fund_cost_multiplier: 190;
  1697.                    remove_cost_multiplier: 0;
  1698.                    remove_cost_multiplier: 0;
  1699.                    cargo_types: [accept_cargo("IORE"),accept_cargo("COAL"),accept_cargo("SCMT"),produce_cargo("STEL",0)];
  1700.                    nearby_station_name: string(STR_STATION, string(STR_TOWN),string(STR_STATION_FURNACE));
  1701.                }
  1702.            }
  1703.        }
  1704.        if (economy==5) {
  1705.            item(FEAT_INDUSTRIES, blast_furnace, 7) {
  1706.                property {
  1707.                    substitute: 0;
  1708.                    override: 0;
  1709.                    map_colour: 10;
  1710.                    life_type: IND_LIFE_TYPE_PROCESSING;
  1711.                    min_cargo_distr: 1;
  1712.                    layouts: [blast_furnace_industry_layout_1_tilelayout,blast_furnace_industry_layout_2_tilelayout];
  1713.                    spec_flags: bitmask(IND_FLAG_LONG_CARGO_TYPE_LISTS);
  1714.                    conflicting_ind_types: []; // set this prop empty, FIRS has it's own better checks for this
  1715.                     random_sound_effects: []; // set this empty to avoid spurious default industry sounds (as of May 2017 FIRS does not yet use sound effects)
  1716.                     name: string(STR_IND_BLAST_FURNACE);
  1717.                     prob_random: 3;
  1718.                     prob_in_game: 3;
  1719.                     fund_cost_multiplier: 190;
  1720.                     remove_cost_multiplier: 0;
  1721.                     remove_cost_multiplier: 0;
  1722.                     cargo_types: [accept_cargo("IORE"),accept_cargo("COKE"),accept_cargo("LIME"),produce_cargo("IRON",0),produce_cargo("CSTI",0),produce_cargo("SLAG",0)];
  1723.                     nearby_station_name: string(STR_STATION, string(STR_TOWN),string(STR_STATION_FURNACE));
  1724.                 }
  1725.             }
  1726.         }
  1727.         if (economy==2) {
  1728.             item(FEAT_INDUSTRIES, blast_furnace, 7) {
  1729.                 property {
  1730.                     substitute: 0;
  1731.                     override: 0;
  1732.                     map_colour: 10;
  1733.                     life_type: IND_LIFE_TYPE_PROCESSING;
  1734.                     min_cargo_distr: 1;
  1735.                     layouts: [blast_furnace_industry_layout_1_tilelayout,blast_furnace_industry_layout_2_tilelayout];
  1736.                     spec_flags: bitmask(IND_FLAG_LONG_CARGO_TYPE_LISTS);
  1737.                     conflicting_ind_types: []; // set this prop empty, FIRS has it's own better checks for this
  1738.                    random_sound_effects: []; // set this empty to avoid spurious default industry sounds (as of May 2017 FIRS does not yet use sound effects)
  1739.                    name: TTD_STR_INDUSTRY_NAME_STEEL_MILL;
  1740.                    prob_random: 5;
  1741.                    prob_in_game: 3;
  1742.                    fund_cost_multiplier: 190;
  1743.                    remove_cost_multiplier: 0;
  1744.                    remove_cost_multiplier: 0;
  1745.                    cargo_types: [accept_cargo("IORE"),accept_cargo("COAL"),accept_cargo("SCMT"),produce_cargo("METL",0)];
  1746.                    nearby_station_name: string(STR_STATION, string(STR_TOWN),string(STR_STATION_FURNACE));
  1747.                }
  1748.            }
  1749.        }
  1750.        if (economy==0) {
  1751.            item(FEAT_INDUSTRIES, blast_furnace, 7) {
  1752.                graphics {
  1753.                    construction_probability: blast_furnace_check_availability;
  1754.                    produce_cargo_arrival:    blast_furnace_produce_cargo_arrival;
  1755.                    monthly_prod_change:      CB_RESULT_IND_PROD_NO_CHANGE;
  1756.                    random_prod_change:       CB_RESULT_IND_PROD_NO_CHANGE;
  1757.                    location_check:           blast_furnace_check_location;
  1758.                    extra_text_fund:          return string(STR_FUND_AVAILABLE_FROM, 1800);
  1759.                    extra_text_industry:      blast_furnace_extra_text;
  1760.                    cargo_subtype_display:    blast_furnace_cargo_subtype_display;
  1761.                    colour:                   switch_colour;
  1762.                }
  1763.            }
  1764.        }
  1765.        if (economy==5) {
  1766.            item(FEAT_INDUSTRIES, blast_furnace, 7) {
  1767.                graphics {
  1768.                    construction_probability: blast_furnace_check_availability;
  1769.                    produce_cargo_arrival:    blast_furnace_produce_cargo_arrival;
  1770.                    monthly_prod_change:      CB_RESULT_IND_PROD_NO_CHANGE;
  1771.                    random_prod_change:       CB_RESULT_IND_PROD_NO_CHANGE;
  1772.                    location_check:           blast_furnace_check_location;
  1773.                    extra_text_fund:          return string(STR_FUND_AVAILABLE_FROM, 1850);
  1774.                    extra_text_industry:      blast_furnace_extra_text;
  1775.                    cargo_subtype_display:    blast_furnace_cargo_subtype_display;
  1776.                    colour:                   switch_colour;
  1777.                }
  1778.            }
  1779.        }
  1780.        if (economy==2) {
  1781.            item(FEAT_INDUSTRIES, blast_furnace, 7) {
  1782.                graphics {
  1783.                    construction_probability: blast_furnace_check_availability;
  1784.                    produce_cargo_arrival:    blast_furnace_produce_cargo_arrival;
  1785.                    monthly_prod_change:      CB_RESULT_IND_PROD_NO_CHANGE;
  1786.                    random_prod_change:       CB_RESULT_IND_PROD_NO_CHANGE;
  1787.                    location_check:           blast_furnace_check_location;
  1788.                    extra_text_fund:          return string(STR_FUND_AVAILABLE_FROM, 1850);
  1789.                    extra_text_industry:      blast_furnace_extra_text;
  1790.                    cargo_subtype_display:    blast_furnace_cargo_subtype_display;
  1791.                    colour:                   switch_colour;
  1792.                }
  1793.            }
  1794.        }

Comments