map.file = "sell_clothing.sve" scenario.short_description = "Make & Sell Textiles" scenario.author = "Severous (scripting by Dwachs & Freca)" scenario.version = "0.3" // to easily adjust difficulty trawler_target1 <- 6 trawler_target2 <- 12 endyear <- 1940 // texts function get_info_text(pl) { local text = ttextfile("info.txt"); text.endyear = endyear; return text } function get_rule_text(pl) { local text = ttext("You can set up routes anywhere on the map and service any existing industries.") + "

" if (persistent.stage <= 3) text += ttext("-- Only ships all allowed to cross the sound near Coventry. No bridges or tunnels allowed. ") + "

" return text } function get_goal_text(pl) { local text if (persistent.stage < 6) { text = ttextfile("goal" + (persistent.stage+1) + ".txt") } else { text = ttext("You won the scenario!") } switch(persistent.stage) { case 0: text.trawler = trawler_target1 break case 2: text.trawler = trawler_target2 break default: break } return text } /** * Text on the result-tab of the scenario window. * It shows the reason for losing, or a comment on the last state, or what is still missing to complete the next stage. * Depends on the result of "is_scenario_completed(pl)", <0 is indicator for losing. * If game is not lost, text depends on actual stage. * Has to cover all possible returncodes form "is_scenario_completed(pl)". */ function get_result_text(pl) { local percentage = is_scenario_completed(pl) if (percentage == -10) { // time out return ttext("You lost!

You were not able to employ and keep running enough trawlers.") } if (percentage == -11) { // over supply of fish cannery return ttext("You lost!

The is too much fish at the cannery.") } if (percentage == -19) { return ttext("You lost!

You could not finish the goal within the given time frame.") } switch(persistent.stage) { case 0: local text = ttext("You are running {trawler} trawlers, which delivered {fish} tons of fish. Too less, unfortunately.") text.fish = fish_cannery_fish_slot.storage[0] text.trawler = get_trawler_count() return text case 1: return ttext("Your fishing transportation is running well.

No production at the steel works, yet.") case 2: local text = ttext("Steel is produced, your trawlers are running, and there are already {goods} goods at the supermarket in Coventry.") text.goods = get_goods_at_coventry_supermarket() return text case 3: return ttext("The supermarket is selling canned fish quickly.

The textile factory is not yet producing.") case 4: return ttext("The first crates of textiles can now be transported. You can are allowed to build bridges.

The supermarket in London is waiting for the first delivery.") case 5: return ttext("London seems to love canned fish!

The citizens of Salisbury are waiting eagerly to test the fish.") case 6: return ttext("You won!") } // should not happen return "You did not achieve anything. Absolutely." } /** * Heart of the whole scenario * Calculates "stage" and returns the percentage of completion of the scenario. * First part checks for serveral lose-conditions. * Second parts checks the trigger for finishing the actual stage, sets the number for the next stage */ function is_scenario_completed(pl) { local time = get_time() // check for oversupply local fish_in_storage = fish_cannery_fish_slot.storage[0] //if (fish_cannery_fish_slot.storage[0] > fish_cannery_fish_slot.max_storage) return -11 if (fish_in_storage > 14910) return -11 //fabrik nimm nichts an, wenn es über 15000 geht // check for trawlers local trawlers = get_trawler_count() if (persistent.stage == 1 && trawlers < trawler_target1) return -10 if (persistent.stage == 2 && trawlers < trawler_target1) return -10 if (persistent.stage > 2 && trawlers < trawler_target2) return -10 // check for delivered textiles local sold_textiles = 0 //textile_factory_output.slot.delivered[0] if (persistent.stage < 5 && sold_textiles >0) return -12 // .. too late if (time.year >= endyear) return -19 switch(persistent.stage) { case 0: if (time.year > 1930) return -10 // lost at stage 0 if (trawlers >= trawler_target1 && fish_in_storage > 1000) { persistent.stage ++; gui.open_info_win() } return min(10, trawlers) case 1: local stahl = steel_factory_steel_slot.storage[0] if (stahl > 0) { persistent.stage ++; gui.open_info_win() } return 20 case 2: local received = get_goods_at_coventry_supermarket() if (received > 0 && trawlers >= trawler_target2) { persistent.stage ++; gui.open_info_win() } return 40 case 3: if (textile_factory_textile_slot.storage[0] > 0) { // bridge & tunnel allowed set_rule_bridge_coventry_sound( 0 /* allow */ ) persistent.stage ++; gui.open_info_win() } return 60 case 4: if (get_goods_at_london_supermarket() > 0) { persistent.stage++ gui.open_info_win() } return 75 case 5: if (get_goods_at_salisbury_shoppingmall() > 0) { persistent.stage++ gui.open_info_win() } return 95 case 6: return 100 default: return 97 } } fish_cannery_fish_slot <- {} coventry_supermarket_input <- {} london_supermarket_input <- {} textile_factory_output <- {} steel_factory_steel_slot <-{} textile_factory_textile_slot <-{} salisbury_shoppingmall_input <-{} //function to count trawlers, only for this scenario function get_trawler_count() { local trawlers = 0 local fish_catg = good_desc_x("fish").catg_index local list = convoy_list_x() foreach(cnv in list) { if (cnv.waytype == wt_water) { if (cnv.goods_catg_index.find( fish_catg) != null && cnv.transported_goods.reduce(max)>0) { trawlers++ } } } return trawlers } //function to check if there is something in the input slots function get_goods(input) { local received = 0; foreach(slot in input) { received += slot.received[0] } return received } function get_goods_at_coventry_supermarket() { return get_goods(coventry_supermarket_input) } function get_goods_at_london_supermarket() { return get_goods(london_supermarket_input) } function get_goods_at_salisbury_shoppingmall() { return get_goods(salisbury_shoppingmall_input) } // called only when scenario is started function start() { persistent.stage <- 0 set_rule_bridge_coventry_sound( 1 /* forbid */ ) resume_game() } // called when game is loaded function resume_game() { // init factory accessors fish_cannery_fish_slot = factory_x(1600, 21).input.fish coventry_supermarket_input = factory_x(1621, 8).input london_supermarket_input = factory_x(740,79).input salisbury_shoppingmall_input = factory_x(11,58).input textile_factory_output = factory_x(1609,9).output textile_factory_textile_slot = factory_x(1609,9).output.textile steel_factory_steel_slot = factory_x(850,56).output.Stahl if ( !("stage" in persistent)) { persistent.stage <- 0 } } // no bridge across any of these tiles local coventry_sound = [ {x=1536, y=127}, {x=1536, y=97}, {x=1548, y=97}, {x=1548, y=47}, {x=1585, y=47}, {x=1585, y=20}, {x=1598, y=20}, {x=1598, y=0} ] local err_no_bridge = "The fish industry does not allow to interfere with its enterprises in Coventry sound." function set_rule_bridge_coventry_sound(forbid) { for(local i=0; i