Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
ef7d696935
32 changed files with 1041 additions and 1157 deletions
|
@ -36,7 +36,9 @@
|
|||
* Prevent hero death from triggering new corpse recruitable dialog (issue #4503)
|
||||
* Fix last breath dialog for bats firing multiple times in the campaign
|
||||
* Fix bug of regular WC appearing in recruit list in S05 Blackwater
|
||||
* Fix special plauge attack making rats when spiders are called for
|
||||
* Fix special plague attack making rats when spiders are called for
|
||||
* Tutorial:
|
||||
* Redraw S2 and reduce difficulty
|
||||
### Editor
|
||||
### Language and i18n
|
||||
* Updated translations: Ancient Greek, Chinese (Traditional), Dutch, French,
|
||||
|
|
|
@ -1260,19 +1260,36 @@ function ai_helper.get_closest_enemy(loc, side, cfg)
|
|||
return closest_enemy, closest_distance
|
||||
end
|
||||
|
||||
function ai_helper.has_ability(unit, ability)
|
||||
function ai_helper.has_ability(unit, ability, exact_match)
|
||||
-- Returns true/false depending on whether unit has the given ability
|
||||
local has_ability = false
|
||||
local abilities = wml.get_child(unit.__cfg, "abilities")
|
||||
if abilities then
|
||||
if wml.get_child(abilities, ability) then has_ability = true end
|
||||
-- OPTIONAL INPUT:
|
||||
-- - exact_match=true: (boolean) If set to true (the default), the ability id
|
||||
-- has to match @ability exactly, otherwise it is sufficient if @ability appears
|
||||
-- in the id. This is done so that, for example, regeneration abilities with
|
||||
-- ids 'regenerates' and 'regenerates_4' can be matched simultaneously.
|
||||
|
||||
if (exact_match == nil) then exact_match = true end
|
||||
|
||||
for _,ability_id in ipairs(unit.abilities) do
|
||||
if exact_match then
|
||||
if (ability == ability_id) then
|
||||
return true
|
||||
end
|
||||
else
|
||||
if string.find(ability_id, ability) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return has_ability
|
||||
return false
|
||||
end
|
||||
|
||||
function ai_helper.has_weapon_special(unit, special)
|
||||
-- Returns true/false depending on whether @unit has a weapon with special @special
|
||||
-- Also returns the number of the first weapon with this special
|
||||
|
||||
wesnoth.deprecated_message('ai_helper.has_weapon_special', 3, '1.17.0', "Use unit:find_attack() instead, noting that the argument needs to be a filter, such as { special_id = 'poison' }.")
|
||||
|
||||
for weapon_number,att in ipairs(unit.attacks) do
|
||||
for _,sp in ipairs(att.specials) do
|
||||
if (sp[1] == special) then
|
||||
|
@ -1501,12 +1518,12 @@ function ai_helper.next_hop(unit, x, y, cfg)
|
|||
unit_in_way:to_map()
|
||||
|
||||
local terrain = wesnoth.get_terrain(next_hop_ideal[1], next_hop_ideal[2])
|
||||
local move_cost_endpoint = wesnoth.units.movement_on(unit, terrain)
|
||||
local move_cost_endpoint = unit:movement_on(terrain)
|
||||
local inverse_reach_map = LS.create()
|
||||
for _,r in pairs(inverse_reach) do
|
||||
-- We want the moves left for moving into the opposite direction in which the reach map was calculated
|
||||
local terrain = wesnoth.get_terrain(r[1], r[2])
|
||||
local move_cost = wesnoth.units.movement_on(unit, terrain)
|
||||
local move_cost = unit:movement_on(terrain)
|
||||
local inverse_cost = r[3] + move_cost - move_cost_endpoint
|
||||
inverse_reach_map:insert(r[1], r[2], inverse_cost)
|
||||
end
|
||||
|
@ -1709,7 +1726,7 @@ function ai_helper.custom_cost_with_avoid(x, y, prev_cost, unit, avoid_map, ally
|
|||
|
||||
local max_moves = unit.max_moves
|
||||
local terrain = wesnoth.get_terrain(x, y)
|
||||
local move_cost = wesnoth.units.movement_on(unit, terrain)
|
||||
local move_cost = unit:movement_on(terrain)
|
||||
|
||||
if (move_cost > max_moves) then
|
||||
return ai_helper.no_path
|
||||
|
@ -1795,7 +1812,7 @@ function ai_helper.custom_cost_with_avoid(x, y, prev_cost, unit, avoid_map, ally
|
|||
defense = H.round(defense / 10) * 10
|
||||
if (defense > 90) then defense = 90 end
|
||||
if (defense < 10) then defense = 10 end
|
||||
move_cost_int = move_cost_int + defense
|
||||
move_cost_int = move_cost_int + (100 - defense)
|
||||
-- And finally we add a (very small) penalty for this hex if it is to be avoided
|
||||
-- This is used for the next hex to determine whether the previous hex was to be
|
||||
-- avoided via avoid_penalty above.
|
||||
|
|
|
@ -14,10 +14,10 @@ local battle_calcs = {}
|
|||
function battle_calcs.unit_attack_info(unit, cache)
|
||||
-- Return a table containing information about attack-related properties of @unit
|
||||
-- The result can be cached if variable @cache is given
|
||||
-- This is done in order to avoid duplication of slow processes, such as access to unit.__cfg
|
||||
-- This is done in order to avoid duplication of slow processes
|
||||
|
||||
-- Return table has fields:
|
||||
-- - attacks: the attack tables from unit.__cfg
|
||||
-- - attacks: the attack tables
|
||||
-- - resist_mod: resistance modifiers (multiplicative factors) index by attack type
|
||||
-- - alignment: just that
|
||||
|
||||
|
@ -32,11 +32,10 @@ function battle_calcs.unit_attack_info(unit, cache)
|
|||
end
|
||||
|
||||
-- Otherwise collect the information
|
||||
local unit_cfg = unit.__cfg
|
||||
local unit_info = {
|
||||
attacks = {},
|
||||
resist_mod = {},
|
||||
alignment = unit_cfg.alignment
|
||||
alignment = unit.alignment
|
||||
}
|
||||
local attacks = unit.attacks
|
||||
for i_a = 1,#attacks do
|
||||
|
@ -73,7 +72,7 @@ function battle_calcs.unit_attack_info(unit, cache)
|
|||
|
||||
local attack_types = { "arcane", "blade", "cold", "fire", "impact", "pierce" }
|
||||
for _,attack_type in ipairs(attack_types) do
|
||||
unit_info.resist_mod[attack_type] = unit:resistance_against(attack_type) / 100.
|
||||
unit_info.resist_mod[attack_type] = 1 - unit:resistance_against(attack_type) / 100.
|
||||
end
|
||||
|
||||
if cache then cache[cind] = unit_info end
|
||||
|
@ -118,6 +117,7 @@ function battle_calcs.strike_damage(attacker, defender, att_weapon, def_weapon,
|
|||
-- Opponent resistance modifier
|
||||
local att_multiplier = defender_info.resist_mod[attacker_info.attacks[att_weapon].type] or 1
|
||||
|
||||
|
||||
-- TOD modifier
|
||||
att_multiplier = att_multiplier * AH.get_unit_time_of_day_bonus(attacker_info.alignment, att_lawful_bonus)
|
||||
|
||||
|
@ -677,8 +677,8 @@ function battle_calcs.battle_outcome(attacker, defender, cfg, cache)
|
|||
if (def_max_hits > att_strikes) then def_max_hits = att_strikes end
|
||||
|
||||
-- Probability of landing a hit
|
||||
local att_hit_prob = defender:defense_on(wesnoth.get_terrain(defender.x, defender.y)) / 100.
|
||||
local def_hit_prob = attacker:defense_on(wesnoth.get_terrain(dst[1], dst[2])) / 100.
|
||||
local att_hit_prob = 1 - defender:defense_on(wesnoth.get_terrain(defender.x, defender.y)) / 100.
|
||||
local def_hit_prob = 1 - attacker:defense_on(wesnoth.get_terrain(dst[1], dst[2])) / 100.
|
||||
|
||||
-- Magical: attack and defense, and under all circumstances
|
||||
if att_attack.magical then att_hit_prob = 0.7 end
|
||||
|
@ -924,7 +924,7 @@ function battle_calcs.attack_rating(attacker, defender, dst, cfg, cache)
|
|||
-- We don't need a bonus for good terrain for the attacker, as that is covered in the damage calculation
|
||||
-- However, we add a small bonus for good terrain defense of the _defender_ on the _attack_ hex
|
||||
-- This is in order to take good terrain away from defender on next move, all else being equal
|
||||
local defender_defense = - defender:defense_on(wesnoth.get_terrain(dst[1], dst[2])) / 100.
|
||||
local defender_defense = - (100 - defender:defense_on(wesnoth.get_terrain(dst[1], dst[2]))) / 100.
|
||||
defender_value = defender_value + defender_defense * defense_weight
|
||||
|
||||
-- Get a very small bonus for hexes in between defender and AI leader
|
||||
|
@ -1019,7 +1019,7 @@ function battle_calcs.attack_combo_stats(tmp_attackers, tmp_dsts, defender, cach
|
|||
-- If attacker has attack with 'slow' special, it should always go first
|
||||
-- Almost, bonus should not be quite as high as a really high CTK
|
||||
-- This isn't quite true in reality, but can be refined later
|
||||
if AH.has_weapon_special(attacker, "slow") then
|
||||
if attacker:find_attack { special_id = "slow" } then
|
||||
rating = rating + defender.cost / 2.
|
||||
end
|
||||
|
||||
|
@ -1316,7 +1316,7 @@ function battle_calcs.best_defense_map(units, cfg)
|
|||
if max_moves then unit.moves = old_moves end
|
||||
|
||||
for _,loc in ipairs(reach) do
|
||||
local defense = 100 - unit:defense_on(wesnoth.get_terrain(loc[1], loc[2]))
|
||||
local defense = unit:defense_on(wesnoth.get_terrain(loc[1], loc[2]))
|
||||
|
||||
if (defense > (defense_map:get(loc[1], loc[2]) or - math.huge)) then
|
||||
defense_map:insert(loc[1], loc[2], defense)
|
||||
|
@ -1524,7 +1524,7 @@ function battle_calcs.get_attack_combos_subset(units, enemy, cfg)
|
|||
-- Store information about it in 'loc' and add this to 'locs'
|
||||
-- Want coordinates (dst) and terrain defense (for sorting)
|
||||
loc.dst = xa * 1000 + ya
|
||||
loc.hit_prob = unit:defense_on(wesnoth.get_terrain(xa, ya))
|
||||
loc.hit_prob = 100 - unit:defense_on(wesnoth.get_terrain(xa, ya))
|
||||
table.insert(locs, loc)
|
||||
|
||||
-- Also mark this hex as usable
|
||||
|
|
|
@ -16,7 +16,7 @@ function ca_spread_poison:evaluation(cfg, data, filter_own)
|
|||
|
||||
local poisoners = {}
|
||||
for _,unit in ipairs(attacks_aspect.own) do
|
||||
if (unit.attacks_left > 0) and (#unit.attacks > 0) and AH.has_weapon_special(unit, "poison")
|
||||
if (unit.attacks_left > 0) and (#unit.attacks > 0) and unit:find_attack { special_id = "poison" }
|
||||
and (not unit.canrecruit) and unit:matches(filter_own)
|
||||
then
|
||||
table.insert(poisoners, unit)
|
||||
|
@ -61,7 +61,7 @@ function ca_spread_poison:evaluation(cfg, data, filter_own)
|
|||
local about_to_level = defender.max_experience - defender.experience <= (attacker.level * 2 * wesnoth.game_config.combat_experience)
|
||||
|
||||
if (not cant_poison) and (healing == 0) and (not about_to_level) then
|
||||
local _, poison_weapon = AH.has_weapon_special(attacker, "poison")
|
||||
local _, poison_weapon = attacker:find_attack { special_id = "poison" }
|
||||
local dst = { a.dst.x, a.dst.y }
|
||||
local att_stats, def_stats = BC.simulate_combat_loc(attacker, dst, defender, poison_weapon)
|
||||
local _, defender_rating, attacker_rating = BC.attack_rating(attacker, defender, dst, { att_stats = att_stats, def_stats = def_stats })
|
||||
|
@ -75,7 +75,7 @@ function ca_spread_poison:evaluation(cfg, data, filter_own)
|
|||
end
|
||||
|
||||
-- More priority to enemies on strong terrain
|
||||
local defense_rating = (100 - defender:defense_on(defender_terrain)) / 100
|
||||
local defense_rating = defender:defense_on(defender_terrain) / 100
|
||||
|
||||
attacker_rating = attacker_rating * (1 - aggression)
|
||||
local combat_rating = attacker_rating + defender_rating + additional_poison_rating
|
||||
|
@ -102,7 +102,7 @@ end
|
|||
function ca_spread_poison:execution(cfg, data)
|
||||
local attacker = wesnoth.units.get(SP_attack.src.x, SP_attack.src.y)
|
||||
-- If several attacks have poison, this will always find the last one
|
||||
local is_poisoner, poison_weapon = AH.has_weapon_special(attacker, "poison")
|
||||
local is_poisoner, poison_weapon = attacker:find_attack { special_id = "poison" }
|
||||
|
||||
if AH.print_exec() then AH.print_ts(' Executing spread_poison CA') end
|
||||
if AH.show_messages() then wesnoth.wml_actions.message { speaker = attacker.id, message = 'Poison attack' } end
|
||||
|
|
|
@ -85,7 +85,7 @@ return {
|
|||
local best_defense = 100
|
||||
|
||||
for i, terrain in ipairs(terrain_archetypes) do
|
||||
local defense = unit:defense_on(terrain)
|
||||
local defense = 100 - unit:defense_on(terrain)
|
||||
if defense < best_defense then
|
||||
best_defense = defense
|
||||
end
|
||||
|
@ -196,7 +196,7 @@ return {
|
|||
-- TODO: calculate chance to hit
|
||||
-- currently assumes 50% chance to hit using supplied constant
|
||||
local attacker_resistance = attacker:resistance_against(defender_attack.type)
|
||||
drain_recovery = (defender_attack.damage*defender_attack.number*attacker_resistance*attacker_defense/2)/10000
|
||||
drain_recovery = (defender_attack.damage*defender_attack.number*(100-attacker_resistance)*attacker_defense/2)/10000
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -204,14 +204,14 @@ return {
|
|||
|
||||
defense = defense/100.0
|
||||
local resistance = defender:resistance_against(attack.type)
|
||||
if steadfast and (resistance < 100) then
|
||||
resistance = 100 - ((100 - resistance) * 2)
|
||||
if (resistance < 50) then
|
||||
if steadfast and (resistance > 0) then
|
||||
resistance = resistance * 2
|
||||
if (resistance > 50) then
|
||||
resistance = 50
|
||||
end
|
||||
end
|
||||
local base_damage = (weapon_damage+damage_bonus)*resistance*damage_multiplier
|
||||
if (resistance > 100) then
|
||||
local base_damage = (weapon_damage+damage_bonus)*(100-resistance)*damage_multiplier
|
||||
if (resistance < 0) then
|
||||
base_damage = base_damage-1
|
||||
end
|
||||
base_damage = math.floor(base_damage/100 + 0.5)
|
||||
|
@ -257,7 +257,7 @@ return {
|
|||
random_gender = false
|
||||
}
|
||||
local can_poison = poisonable(unit) and (not unit:ability('regenerate'))
|
||||
local flat_defense = unit:defense_on("Gt")
|
||||
local flat_defense = 100 - unit:defense_on("Gt")
|
||||
local best_defense = get_best_defense(unit)
|
||||
|
||||
local recruit = wesnoth.units.create {
|
||||
|
@ -266,7 +266,7 @@ return {
|
|||
name = "X",
|
||||
random_gender = false
|
||||
}
|
||||
local recruit_flat_defense = recruit:defense_on("Gt")
|
||||
local recruit_flat_defense = 100 - recruit:defense_on("Gt")
|
||||
local recruit_best_defense = get_best_defense(recruit)
|
||||
|
||||
local can_poison_retaliation = poisonable(recruit) and (not recruit:ability('regenerate'))
|
||||
|
@ -758,7 +758,7 @@ return {
|
|||
if eta_turn <= wesnoth.game_config.last_turn then
|
||||
lawful_bonus = wesnoth.get_time_of_day(wesnoth.current.turn + eta).lawful_bonus / eta^2
|
||||
end
|
||||
local damage_bonus = AH.get_unit_time_of_day_bonus(recruit_unit.__cfg.alignment, lawful_bonus)
|
||||
local damage_bonus = AH.get_unit_time_of_day_bonus(recruit_unit.alignment, lawful_bonus)
|
||||
-- Estimate effectiveness on offense and defense
|
||||
local offense_score =
|
||||
(recruit_effectiveness[recruit_id].damage*damage_bonus+recruit_effectiveness[recruit_id].poison_damage)
|
||||
|
@ -847,7 +847,7 @@ return {
|
|||
for attack_range, count in pairs(unit_attack_range_count[recruit_id]) do
|
||||
bonus = bonus + 0.02 * most_common_range_count / (attack_range_count[attack_range]+1)
|
||||
end
|
||||
local race = wesnoth.races[wesnoth.unit_types[recruit_id].__cfg.race]
|
||||
local race = wesnoth.races[wesnoth.unit_types[recruit_id].race]
|
||||
local num_traits = race and race.num_traits or 0
|
||||
bonus = bonus + 0.03 * num_traits^2
|
||||
if target_hex[1] then
|
||||
|
|
|
@ -21,7 +21,7 @@ function retreat_functions.min_hp(unit)
|
|||
if (caution_factor < 0) then caution_factor = 0 end
|
||||
caution_factor = math.sqrt(caution_factor) * 2
|
||||
|
||||
local hp_per_level = unit:defense_on(wesnoth.get_terrain(unit.x, unit.y))/15 * caution_factor
|
||||
local hp_per_level = (100 - unit:defense_on(wesnoth.get_terrain(unit.x, unit.y)))/15 * caution_factor
|
||||
local level = unit.level
|
||||
|
||||
-- Leaders are considered to be higher level because of their value
|
||||
|
@ -212,7 +212,7 @@ function retreat_functions.get_retreat_injured_units(healees, regen_amounts, avo
|
|||
rating = rating - enemy_count * 100000
|
||||
|
||||
-- Penalty based on terrain defense for unit
|
||||
rating = rating - u:defense_on(wesnoth.get_terrain(loc[1], loc[2]))/10
|
||||
rating = rating - (100 - u:defense_on(wesnoth.get_terrain(loc[1], loc[2])))/10
|
||||
|
||||
if (loc[1] == u.x) and (loc[2] == u.y) and (not u.status.poisoned) then
|
||||
if is_healthy or enemy_count == 0 then
|
||||
|
|
|
@ -95,7 +95,7 @@ function ca_assassin_move:execution(cfg)
|
|||
-- Penalties for damage by enemies
|
||||
local enemy_rating_map = LS.create()
|
||||
enemy_damage_map:iter(function(x, y, enemy_damage)
|
||||
local hit_chance = (unit:defense_on(wesnoth.get_terrain(x, y))) / 100.
|
||||
local hit_chance = (100 - unit:defense_on(wesnoth.get_terrain(x, y))) / 100.
|
||||
|
||||
local rating = hit_chance * enemy_damage
|
||||
rating = rating / unit.max_hitpoints
|
||||
|
|
|
@ -7,6 +7,7 @@ local ca_bottleneck_attack = {}
|
|||
function ca_bottleneck_attack:evaluation(cfg, data)
|
||||
local attackers = AH.get_units_with_attacks {
|
||||
side = wesnoth.current.side,
|
||||
{ "and", wml.get_child(cfg, "filter") },
|
||||
{ "filter_adjacent", {
|
||||
{ "filter_side", { { "enemy_of", {side = wesnoth.current.side} } } }
|
||||
} }
|
||||
|
@ -63,7 +64,7 @@ end
|
|||
|
||||
function ca_bottleneck_attack:execution(cfg, data)
|
||||
if BD_bottleneck_attacks_done then
|
||||
local units = AH.get_units_with_attacks { side = wesnoth.current.side }
|
||||
local units = AH.get_units_with_attacks { side = wesnoth.current.side, { "and", wml.get_child(cfg, "filter") } }
|
||||
for _,unit in ipairs(units) do
|
||||
AH.checked_stopunit_attacks(ai, unit)
|
||||
end
|
||||
|
|
|
@ -141,7 +141,7 @@ local function bottleneck_get_rating(unit, x, y, has_leadership, is_healer, on_m
|
|||
if (unit.hitpoints < unit.max_hitpoints) then
|
||||
for xa,ya in H.adjacent_tiles(x, y) do
|
||||
local adjacent_unit = wesnoth.units.get(xa, ya)
|
||||
if adjacent_unit and (adjacent_unit.__cfg.usage == "healer") then
|
||||
if adjacent_unit and (adjacent_unit.usage == "healer") then
|
||||
leadership_rating = leadership_rating + 100
|
||||
break
|
||||
end
|
||||
|
@ -230,9 +230,9 @@ function ca_bottleneck_move:evaluation(cfg, data)
|
|||
|
||||
local units = {}
|
||||
if MAISD.get_mai_self_data(data, cfg.ai_id, "side_leader_activated") then
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side }
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side, { "and", wml.get_child(cfg, "filter") } }
|
||||
else
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side, canrecruit = 'no' }
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side, canrecruit = 'no', { "and", wml.get_child(cfg, "filter") } }
|
||||
end
|
||||
if (not units[1]) then return 0 end
|
||||
|
||||
|
@ -306,7 +306,7 @@ function ca_bottleneck_move:evaluation(cfg, data)
|
|||
|
||||
for _,unit in ipairs(all_units) do
|
||||
-- Is this a healer or leadership unit?
|
||||
local is_healer = (unit.__cfg.usage == "healer")
|
||||
local is_healer = (unit.usage == "healer")
|
||||
local has_leadership = AH.has_ability(unit, "leadership")
|
||||
local on_my_territory = BD_is_my_territory:get(unit.x, unit.y)
|
||||
|
||||
|
@ -355,7 +355,7 @@ function ca_bottleneck_move:evaluation(cfg, data)
|
|||
|
||||
local max_rating, best_unit, best_hex = 0
|
||||
for _,unit in ipairs(units) do
|
||||
local is_healer = (unit.__cfg.usage == "healer")
|
||||
local is_healer = (unit.usage == "healer")
|
||||
local has_leadership = AH.has_ability(unit, "leadership")
|
||||
local on_my_territory = BD_is_my_territory:get(unit.x, unit.y)
|
||||
|
||||
|
@ -469,9 +469,9 @@ function ca_bottleneck_move:execution(cfg, data)
|
|||
if BD_bottleneck_moves_done then
|
||||
local units = {}
|
||||
if MAISD.get_mai_self_data(data, cfg.ai_id, "side_leader_activated") then
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side }
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side, { "and", wml.get_child(cfg, "filter") } }
|
||||
else
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side, canrecruit = 'no' }
|
||||
units = AH.get_units_with_moves { side = wesnoth.current.side, canrecruit = 'no', { "and", wml.get_child(cfg, "filter") } }
|
||||
end
|
||||
|
||||
for _,unit in ipairs(units) do
|
||||
|
|
|
@ -157,7 +157,7 @@ function ca_fast_attack_utils.get_unit_defense(unit_copy, x, y, defense_maps)
|
|||
if (not defense_maps[unit_copy.id][x]) then defense_maps[unit_copy.id][x] = {} end
|
||||
|
||||
if (not defense_maps[unit_copy.id][x][y]) then
|
||||
local defense = (100. - unit_copy:defense_on(wesnoth.get_terrain(x, y))) / 100.
|
||||
local defense = unit_copy:defense_on(wesnoth.get_terrain(x, y)) / 100.
|
||||
defense_maps[unit_copy.id][x][y] = { defense = defense }
|
||||
end
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ function ca_healer_move:evaluation(cfg, data)
|
|||
local is_village = wesnoth.get_terrain_info(terrain).village
|
||||
if is_village then rating = rating + 2 end
|
||||
|
||||
local defense = 100 - healer:defense_on(terrain)
|
||||
local defense = healer:defense_on(terrain)
|
||||
rating = rating + defense / 10.
|
||||
end
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ function ca_protect_unit_move:execution(cfg, data)
|
|||
|
||||
local terrain_defense_map = LS.create()
|
||||
reach_map:iter(function(x, y, data)
|
||||
terrain_defense_map:insert(x, y, 100 - unit:defense_on(wesnoth.get_terrain(x, y)))
|
||||
terrain_defense_map:insert(x, y, unit:defense_on(wesnoth.get_terrain(x, y)))
|
||||
end)
|
||||
|
||||
local goal_distance_map = LS.create()
|
||||
|
|
|
@ -61,7 +61,7 @@ function ca_stationed_guardian:execution(cfg)
|
|||
if (not AH.is_visible_unit(wesnoth.current.side, unit_in_way))
|
||||
or (unit_in_way == guardian)
|
||||
then
|
||||
local defense = 100 - guardian:defense_on(wesnoth.get_terrain(xa, ya))
|
||||
local defense = guardian:defense_on(wesnoth.get_terrain(xa, ya))
|
||||
local nh = AH.next_hop(guardian, xa, ya)
|
||||
if nh then
|
||||
if (nh[1] == xa) and (nh[2] == ya) and (defense > best_defense) then
|
||||
|
|
|
@ -46,7 +46,7 @@ function ca_zone_guardian:execution(cfg)
|
|||
if (not AH.is_visible_unit(wesnoth.current.side, unit_in_way))
|
||||
or (unit_in_way == guardian)
|
||||
then
|
||||
local defense = 100 - guardian:defense_on(wesnoth.get_terrain(xa, ya))
|
||||
local defense = guardian:defense_on(wesnoth.get_terrain(xa, ya))
|
||||
local nh = AH.next_hop(guardian, xa, ya)
|
||||
if nh then
|
||||
if (nh[1] == xa) and (nh[2] == ya) and (defense > best_defense) then
|
||||
|
|
|
@ -7,7 +7,7 @@ function wesnoth.micro_ais.bottleneck_defense(cfg)
|
|||
end
|
||||
|
||||
local required_keys = {}
|
||||
local optional_keys = { "location_id", "x", "y", "enemy_loc", "enemy_x", "enemy_y",
|
||||
local optional_keys = { "location_id", "x", "y", "enemy_loc", "enemy_x", "enemy_y", "[filter]",
|
||||
"healer_loc", "healer_x", "healer_y", "leadership_loc","leadership_x", "leadership_y", "active_side_leader"
|
||||
}
|
||||
local score = cfg.ca_score or 300000
|
||||
|
|
|
@ -20,9 +20,9 @@
|
|||
|
||||
" + _"(Novice level, 23 scenarios.)"
|
||||
|
||||
{CAMPAIGN_DIFFICULTY EASY "units/elves-wood/fighter.png~RC(magenta>red)" ( _ "Fighter") ( _ "Beginner")}
|
||||
{CAMPAIGN_DIFFICULTY NORMAL "units/elves-wood/hero.png~RC(magenta>red)" ( _ "Hero") ( _ "Normal")} {DEFAULT_DIFFICULTY}
|
||||
{CAMPAIGN_DIFFICULTY HARD "units/elves-wood/champion.png~RC(magenta>red)" ( _ "Champion") ( _ "Challenging")}
|
||||
{CAMPAIGN_DIFFICULTY EASY "data/campaigns/Heir_To_The_Throne/images/units/konrad-fighter.png~RC(magenta>red)" ( _ "Fighter") ( _ "Beginner")}
|
||||
{CAMPAIGN_DIFFICULTY NORMAL "data/campaigns/Heir_To_The_Throne/images/units/konrad-commander.png~RC(magenta>red)" ( _ "Commander") ( _ "Normal")} {DEFAULT_DIFFICULTY}
|
||||
{CAMPAIGN_DIFFICULTY HARD "data/campaigns/Heir_To_The_Throne/images/units/konrad-lord.png~RC(magenta>red)" ( _ "Lord") ( _ "Challenging")}
|
||||
|
||||
[about]
|
||||
images = story/httt_story1.jpg,story/httt_story2.jpg,story/httt_story3.jpg,story/httt_story4.jpg,story/httt_story5.jpg,story/httt_story6.jpg,story/httt_story7.jpg,story/httt_story8.jpg
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
# wmllint: local spelling marchlanders
|
||||
description= _ "As the shadow of civil war lengthens across Wesnoth, a band of hardy marchlanders revolts against the tyranny of Queen Asheviere. To win their way to freedom, they must defeat not just the trained blades of Wesnothian troops but darker foes including orcs and undead.
|
||||
|
||||
" + _"(Novice level, 8 scenarios.)"
|
||||
" + _"(Novice level, 7 scenarios.)"
|
||||
|
||||
[about]
|
||||
title = _ "Campaign Design"
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
Re, Re, Rr, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ww, Gg, Gg, Gs, Gd^Fp, Gd^Fp, Gd^Fp, Gd^Fp, Gd^Fp, Gd^Fp, Gs^Fp, Hh, Mm, Mm, Hh, Mm, Hh, Mm, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Re, Re, 1 Rr, Gs^Fds, Rr, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fmw, Gs^Fms, Gs^Fds, Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ww, Gg, Gs, Gd, Gd^Fp, Gd^Fp, Gd^Fmw, Gs^Fds, Gd^Fp, Gs^Fp, Gs^Fp, Hh, Mm, Mm, Hh, Mm, Hh, Mm, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Gs^Fds, Gs^Fds, Gs^Fms, Rr, Gs^Fms, Rr, Gs^Fms, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Vh, Gs^Fp, Ww, Ww, Gs^Fp, Gs, Gd^Fp, Gd^Fp, Gs^Fp, Gs^Fp, Mm, Mm, Hh, Gs^Fp, Gs^Fp, Mm, Hh, Qxe, Qxe, Mm, Mm, Mm, Hh, Gs^Fds, Gs^Fp, Gs^Fp
|
||||
Gs^Fms, Gs^Fds, Gs^Fms, Gs^Fds, Gs^Fms, Rr, Rr, Gs^Fds, Ce, Ce, Gs, Gs^Vh, Gs, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Wo, Ww, Gs^Fp, Gs^Fp, Gs^Fp, Mm, Gs^Fp, Mm, Hh, Mm, Mm, Mm, Mm, Mm, Gs^Fp, Mm^Xm, Mm, Gs^Fp, Mm, Qxe, Mm, Hh, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Gg, Gg, Gs^Fms, Gs^Fmw, Gs^Fds, Gs^Fms, Ce, Ke, Rr, Gs, Gs^Vl, Gs, Gs, Gs, Gs^Fp, Gs^Fds, Gs^Fp, Wo, Ww, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Mm, Qxe, Mm, Qxe, Mm, Mm^Xm, Mm^Xm, Mm^Xm, Mm^Xm, Xu, Mm^Xm, Mm^Xm, Mm, Qxe, Mm, Hh, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Gg, Gg, Gs^Fms, Gs^Fp, Gs^Fds, Ce, Gs^Vh, Gs, Gs, Rr, Rr, Gs, Gs^Fp, Gs^Vh, Ce, Gs^Fp, Gs^Fp, Ww, Gs^Fp, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fmw, Hh, Mm, Qxe, Qxe, Qxe, Xu, Xu, Xu, Xu, Ql, Xu, Xu, Mm^Xm, Mm, Hhd, Gs^Fp, Gs^Fmw, Gs^Fp, Gs^Fp
|
||||
Gg, Gg, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fms, Gs, Gs, Gs, Gs, Gs^Fp, Rr, 2 Ke, Ce, Gs^Fp, Gs^Fp, Ww, Ww, Gs^Vh, Gg, Gg, Gs^Fp, Gg, Gs^Fp, Hh, Hh, Qxe, Xu, Uu^Uf, Uu^Vu, Uu, Uu, Uu, Uu, Mm, Mm^Xm, Qxe, Mm, Hh, Gs^Fp, Gs^Fds, Gs^Fp
|
||||
Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Vh, Gs^Fp, Gs, Gs^Fp, Ce, Ce, Rr, Rr, Ww^Bw\, Ww, Ww, Gs^Fp, Gs^Fp, Gg, Gg, Gs^Fp, Gs^Fp, Gs^Fp, Hh, Mm, Mm^Xm, Xu, Uu, Uu, Ce, Ce, 3 Kud, Ce, Xu, Mm, Gs^Fp, Qxe, Hh, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Gs^Fms, Gs^Fms, Gs^Fmw, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Vh, Gs^Fp, Gs^Fds, Ww, Ww, Ww^Bw|, Ww, Gs^Fp, Re, Re, Ww, Ww, Gs^Fp, Ds, Ds, Ds, Hh, Mm, Mm, Hhd, Uu, Xu, Uu, Uh, Cud, Uu, Cud, Xu, Mm^Xm, Hh, Hh, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fp, Ww, Gs^Fp, Ww, Ww, Gs^Fms, Ww, Re, Gs^Fp, Gs^Fp, Gg, Gg^Vh, Re, Re, Ww, Ww, Ds, Ds, Re^Fp, Re^Fp, Hhd, Hhd, Qxe, Mm^Xm, Xu, Xu, Uu, Uu, Xu, Mm^Xm, Mm^Xm, Gd^Fp, Mm, Gs^Fp, Gs^Fp, Re, Re
|
||||
Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fp, Ww, Ww, Gs^Fds, Ww, Gs^Fds, Gs^Fms, Re, Re, Gg, Gg, Gg, Gg, Gs^Fp, Gs^Fp, Re, Gs^Fp, Gs^Fp, Ww, Ds, Re^Fp, Re^Fp, Re, Qxe, Qxe, Mm, Mm^Xm, Hhd, Re, Re^Fp, Mm^Xm, Re^Fmw, Mm, Mm, Gs^Fp, Re, Gs^Fp, Re, Re
|
||||
Gs^Fp, Gs^Fp, Ww, Ww, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Re, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fp, Hh, Gs^Fp, Gs^Fp, Re, Gs^Fp, Gs^Fp, Gs^Fp, Ww, Ww, Ds, Re^Fp, Qxe, Qxe, Gll^Fp, Gll^Fp, Mm, Mm, Re^Fmw, Re, Re^Fp, Mm, Mm, Re, Re, Gll^Fp, Re, Gll^Fp, Gll^Fp
|
||||
Ww, Ww, Ww, Gs^Fds, Gg, Gs^Vl, Gs^Fds, Gs^Fds, Re, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fp, Gg^Vh, Hh, Hh, Hh, Re, Hh, Hh, Hh, Ds, Ds, Ww, Re^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Re^Fp, Gll^Fp, Re, Re, Re, Hh, Hh, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp
|
||||
Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Re, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fmw, Hh, Hh, Re, Re, Hh, Gs^Fp, Gs^Fp, Ww, Ww, Re^Fp, Re^Fp, Re, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Re, Re, Gll^Fp, Hh, Gll^Fmw, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp
|
||||
Gs^Fds, Gs^Fmw, Re, Gs^Fds, Gs^Fds, Gs^Fms, Gg, Gs^Fmw, Re, Re, Re, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fmw, Hh, Re, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ss, Re, Re, Gll^Fp, Re, Gll^Fp, Re, Gll^Fp, Re, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp
|
||||
Re, Re, Gs^Fds, Re, Re, Gg, Re, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Re, Re, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Re, Gs^Fms, Gs^Fp, Gs^Fmw, Re, Ww^Bw/, Ss, Gll^Fp, Hh, Gll^Fp, Gll^Fp, Re, Re, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gg, Gs, Gs, Gs^Vl, Gll^Fp, Gll^Fp
|
||||
Gs^Fds, Gs^Fds, Gs^Vh, Gs^Fds, Gs^Fds, Re, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Re, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Re, Re, Re, Gs^Fp, Ss, Ss, Hh, Hh, Gll^Fp, Gs^Vl, Gll^Fp, Gll^Fp, Re, Re, Gll^Fmw, Gll^Fp, Gll^Fp, Gg, Gg, Gg, Gs, Gll^Fp, Gll^Fp
|
||||
Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Rd, Re, Re, Gs^Fms, Gs^Fp, Re, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fmw, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Re, Gs^Fp, Gs^Fp, Gs^Fp, Ww, Gll^Fp, Gs, Gll^Fp, Gll^Fp, Re, Re, Gg, Gll^Fp, Re, Gll^Fp, Gg, Gg, Gll^Fmw, Gll^Fp, Gll^Fp, Gll^Fp
|
||||
Gs^Fds, Gs^Fmw, Rd, Rd, Rd^Fds, Rd, Rd^Fp, Rd^Fp, Gll^Fds, Re, Re, Re, Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fmw, Gs^Fp, Gs^Fp, Gs^Fp, Hh, Hh, Gs^Fp, Hh, Hh, Gs^Fp, Ww, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Re, Gg, Gg, Gll^Fp, Gll^Fp, Re, Re, Gll^Fp, Gll^Fp, Gll^Fp, Re, Re
|
||||
Gs^Fds, Gs^Fds, Rd, Gs^Fms, Gs^Fms, Rd, Rd, Rd^Fdw, Gll, Gll^Fp, Gll^Fms, Re, Re, Gs^Fms, Gs^Fp, Gs^Fp, Re, Gs^Fp, Gs^Fp, Gs^Vh, Gs^Vh, Hh, Hh, Gs^Fp, Gs^Fp, Ww, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gs^Fmw, Re, Gg, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Re, Re, Re, Gll^Fp, Gll^Fp
|
||||
Rd, Rd, Gs^Fms, Gs^Fdw, Mm, Hhd, Rd, Rd^Fp, Hhd, Hhd, Ss, Re^Fdw, Gll^Fp, Re, Re, Re, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Ww, Ww, Gll^Fp, Gll^Fp, Hh, Gll^Fp, Gll^Fp, Re, Gg, Gll^Fp, Gll^Fmw, Hh, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fp
|
||||
Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Mm, Mm, Rd^Fp, Hhd, Rd, Mm, Ss, Ss, Re^Fdw, Gll^Fp, Re, Gs^Fmw, Gs^Fms, Gs^Fmw, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ww, Ww, Gg, Gs^Fp, Gll^Fp, Gll^Fp, Gs^Vl, Hh, Gll^Fp, Re, Re, Gg, Gg, Gll^Fp, Gll^Fms, Gll^Fmw, Hh, Hh, Gll^Fmw, Gll^Fp
|
||||
Gs^Fp, Gs^Fdw, Hhd, Mm, Hhd, Rd, Ds, Rd, Ce, Ss, Re, Hhd, Mm, Re^Fp, Gs^Fp, Re, Re^Fp, Gs^Fp, Gs^Fdw, Gs^Fp, Gs^Fp, Gs^Fms, Ww, Gs^Fp, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Re, Re, Re, Gg, Gll^Fp, Gll^Fp, Gll^Fp, Hh, Gll^Fp, Gll^Fp
|
||||
Gs^Fms, Gs^Fms, Mm, Gs, Ss, Ss, Ds, Ce, 4 Ke, Ce, Re^Uf, Mm, Mm, Gs^Fms, Hh, Hh, Re, Gs^Fp, Gs^Fp, Wo, Gs^Fp, Gs^Fp, Ww, Gs^Fp, Gs^Vh, Gg, Gg, Gg, Hh, Gll^Fp, Re, Re, Gll^Fp, Gll^Fp, Gll^Fp, Re, Re^Fp, Re^Fmw, Gll^Fmw, Gll^Fp, Gll^Fds, Gll^Fp
|
||||
Gs^Fms, Gs^Fms, Mm, Gs, Ss, Re^Uf, Re^Uf, Ce, Ce, Ce, Re^Uf, Hhd, Mm, Gs^Fms, Gs^Fms, Hh, Re, Gs^Fms, Gs^Fmw, Gs^Fms, Gs^Fms, Gs^Fms, Ww, Gs^Fp, Gs^Fp, Gs^Fp, Gll^Fmw, Hh, Gll^Fmw, Gll^Fp, Re^Fp, Gll^Fp, Gll^Fdw, Gll^Fmw, Gs^Fmw, Gll^Fdw, Gll^Fmw, Re, Re, Gll^Fp, Gll^Fmw, Gll^Fp
|
||||
Gs^Fms, Gs^Fdw, Gs^Fds, Mm, Mm, Mm, Gll^Fp, Re, Ds, Ss, Ss, Ss, Mm, Mm, Gs^Fms, Gs^Fdw, Re, Gs^Fms, Gs^Fms, Gs^Fmw, Gs^Fms, Gs^Fms, Gs^Fms, Ww, Ww, Ds, Ds, Gll^Fp, Gll^Fmw, Re, Gll^Fmw, Gll^Fms, Gs, Gll^Fp, Gll^Fmw, Gll^Fp, Gll^Fp, Gll^Fp, Re, Gll^Fp, Gll^Fdw, Gll^Fp
|
||||
Gs^Fms, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Mm, Mm, Gll^Fdw, Mm, Ds, Mm, Mm, Mm, Gs^Fms, Re, Re^Fds, Gs^Fds, Re, Re, Re, Re, Gs^Fmw, Gs^Fms, Ds, Ds, Ww, Ds, Gll^Fp, Re^Fp, Re, Gs, Gs, Gs, Gs, Gll^Fp, Gll^Fp, Mm, Gs^Fmw, Gs^Fp, Re, Re, Re
|
||||
Gs^Fms, Gs^Fds, Gs^Fds, Gs^Fdw, Gs^Fds, Hh, Gs, Hh, Gs, Ds, Mm, Mm, Gs^Fds, Gs^Fdw, Re, Gs^Fms, Gs^Fmw, Gs^Fds, Gs^Fds, Gs^Fmw, Gs^Fds, Re^Fds, Re, Gs^Fmw, Gs^Fms, Ww, Ds, Gll^Fmw, Re, Gd, Gs, Gs, Gd^Fp, Gd^Fdw, Mm, Mm, Gs, Gs^Fdw, Gs, Gd^Fp, Gd^Fp, Gd^Fp
|
||||
Gs^Fms, Gs^Fms, Gg, Gs^Fds, Gg, Gg, Gs, Hh, Hh, Hh, Gs^Fms, Gs^Fms, Gs^Fms, Re, Gs^Fms, Gs^Fds, Gs^Fds, Hh, Mm, Hh, Mm, Gs^Fds, Gs^Fds, Re, Re^Fds, Ww, Ds, Gll^Fp, Re, Gs, Gll^Fmw, Gll^Fp, Mm, Mm, Gs, Mm, Gs, Gd, Gd, Mm, Gd^Fmw, Gd^Fp
|
||||
Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gg, Gs, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fms, Re, Re, Gs^Fds, Hh, Mm, Mm, Mm, Mm, Mm, Mm, Hh, Gs^Fds, Gs^Fds, Ww, Ww, Gs^Fp, Gll^Fp, Gll^Fp, Gs^Fmw, Mm, Mm, Gs, Gd, Gd, Gd, Gd^Fdw, Mm, Mm, Gd^Fmw, Gd^Fp
|
||||
Gs^Fms, Gs^Fms, Gs^Fms, Gg, Gs^Fms, Gg, Gs^Fp, Gs^Fp, Gs^Fmw, Gs^Fds, Re, Gs^Fds, Gs^Fms, Gs^Fds, Mm, Mm, Mm, Mm^Xm, Mm^Xm, Mm^Xm, Mm^Xm, Mm, Mm, Hh, Gs^Fds, Ds, Ww, Gs^Fp, Ss^Vhs, Gs^Fmw, Gs^Fdw, Hh, Mm, Mm, Mm, Gd^Fmw, Re^Fdw, Re, Rb^Uf, Mm, Mm, Mm
|
||||
Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fms, Gg, Gg, Gs^Fp, Gs^Fms, Re, Re, Gs^Fms, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Mm, Mm, Mm, Mm^Xm, Mm, Mm, Mm, Mm, Gs^Fds, Ds, Ww, Ss, Ss, Ss, Ss, Gs^Fdw, Mm, Gs^Fdw, Mm, Re, Mm, Rb, Rb^Uf, Mm, Mm, Mm
|
||||
Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gs^Fp, Gg, Gs^Fp, Re, Gs^Fms, Re, Gs^Fms, Gs^Fds, Gs^Fmw, Gs^Fds, Gs^Fds, Mm, Hh, Mm, Mm, Mm, Mm, Hh, Hh, Hh, Gs^Fds, Gs^Fms, Ww, Gs^Fdw, Ss, Mm, Hh, Hh, Mm, Mm^Xm, Mm, Mm, Hhd, Hhd, Hhd, Mm, Hh, Hh
|
||||
Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fmw, Gs^Fp, Gs^Fp, Re, Re, Gs^Fds, Re, Re, Gs^Fds, Gs^Vl, Gs^Fds, Gs^Fms, Gg, Gg, Gg, Mm, Mm, Mm, Mm, Gs^Fds, Gs^Fdw, Gs^Fds, Gs^Fmw, Ww, Gs^Fdw, Hh^Fdw, Mm, Mm, Hhd^Fdw, Mm, Mm^Xm, Hhd, Mm, Mm^Xm, Mm, Mm, Hhd, Hhd, Hhd
|
||||
Re, Re, Re, Gs^Fp, Re, Gs^Fp, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fms, Re, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fms, Gs^Fdw, Gs^Fds, Mm, Gs^Fds, Gs^Fdw, Ww, Gs^Fms, Ww, Ww, Ss, Gs^Fdw, Gs^Fdw, Hh^Fdw, Mm, Gd^Fdw, Hhd^Fdw, Hhd, Qxe, Mm, Cud, Uu^Vu, Rb^Uf, Mm, Mm^Xm, Mm^Xm
|
||||
Gs^Fp, Gs^Fp, Hh, Re, Gs^Fp, Gs^Fp, Mm, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fds, Re, Re, Gs^Fms, Gs^Fds, Gs^Fms, Gs^Vh, Gs^Fds, Ss, Gs^Fds, Ww, Ww, Ss, Ww, Gs^Fdw, Gs^Fp, Ss, Ss, Ss^Vhs, Gs^Fdw, Gd^Fdw, Hhd^Fdw, Qxe, Rb^Uf, Qxe, Cud, 5 Kud, Cud, Mm^Xm, Mm^Xm, Mm^Xm, Mm^Xm
|
||||
Gs^Fp, Gs^Fp, Gs^Vh, Re, Hh, Hh, Hh, Mm, Mm, Gs^Fp, Gs^Fp, Gs^Fdw, Gs^Fms, Re, Re, Gs^Fds, Gs^Fds, Gs^Fds, Ww, Ww, Ss, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ss^Vhs, Gs^Fmw, Gs^Fdw, Gg, Gg, Gd^Fdw, Hhd^Fdw, Mm, Qxe, Rb^Uf, Cud, Cud, Cud, Mm, Mm^Xm, Mm^Xm, Mm^Xm
|
||||
Gs^Fp, Gs^Fp, Re, Re, Re, Gs^Fp, Gs^Vh, Hh, Hh, Mm, Mm, Gs^Fms, Gs^Fms, Gs^Fds, Re, Gs^Fms, Gs^Fds, Ww, Gs^Fp, Ss, Ss^Vhs, Gs^Fp, Gs^Fp, Gs^Fmw, Gg, Gs^Fmw, Gg, Gd^Fdw, Gd^Fdw, Gg, Gd^Fdw, Mm, Hhd, Qxe, Hhd, Hhd, Mm, Mm, Mm, Mm, Rb^Uf, Rb^Uf
|
||||
Gs^Fp, Gs^Fp, Gs^Fp, Gg, Re, Re, Re, Gs^Fp, Hh, Mm, Mm, Mm, Gs^Fms, Gs^Fms, Gs^Fms, Re, Ww^Bw\, Ww, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Hh, Gg, Gg, Gs^Fmw, Gd^Fdw, Mm, Hhd^Fdw, Rb, Rb, Mm, Mm, Mm^Xm, Rb^Uf, Qxe, Qxe, Qxe, Rb^Uf, Rb^Uf
|
||||
Gs^Fp, Gs^Fp, Gs^Fp, Gs^Vl, Gs^Fp, Gg, Gg, Re, Re, Mm, Mm, Gs^Fp, Ww, Ww, Ww, Ww, Gs^Fp, Re, Re, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gg, Gg, Hh, Gg, Gg, Gd^Fmw, Rb^Uf, Rb^Uf, Hhd, Mm, Hhd, Mm, Hhd, Rb^Uf, Rb^Uf, Mm, Mm, Mm, Mm
|
||||
Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gs^Fp, Gg, Re, Gs^Vh, Hh, Gs^Fp, Ww, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Vh, Gs^Fp, Re, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gs^Fmw, Gg, Gs^Fp, Gs^Fdw, Gs^Fp, Gd^Fmw, Gd^Fdw, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm
|
||||
Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gs^Fp, Gg, Re, Gg, Hh, Gs^Fp, Ww, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs, Gs^Fp, Re, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gs^Fp, Gs^Fmw, Gs^Fp, Gs^Fp, Gd^Fp, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm
|
29
data/campaigns/Liberty/maps/06_The_Hunters.map
Normal file
29
data/campaigns/Liberty/maps/06_The_Hunters.map
Normal file
|
@ -0,0 +1,29 @@
|
|||
Gg, Gg, Gs, Gg, Gg^Es, Re, Re, Re, Gg^Efm, Gg, Gg, Gg, Gs, Hh, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fds, Gs^Fms, Gs^Fms, Gll^Fp, Gll^Fmw, Gs^Fds, Hhd, Hhd, Rb^Fdw, Rb, Hhd^Fmw, Hhd, Hhd^Fp, Gll^Fp, Gll^Fdw, Wwg, Wwg, Gll^Fdw, Gll^Fdw, Sm, Sm, Gll^Fp, Gll^Fp
|
||||
Gg^Efm, Gs, Re^Gvs, Gs, Gs, Hh, Hh^Es, Rr, Hh, Gg, Gg^Efm, Gs^Es, Gs, Gs, Gg, Gg^Em, Gs^Fp, Gs^Fms, Gs^Vc, Gs^Fms, Gll^Fmw, Gll^Fp, Gll^Fmw, Md, Ss^Emf, Hhd^Fmw, Sm, Sm^Edb, Ss^Edb, Hhd^Emf, Gll^Fmw, Gll^Fdw, Ss^Em, Wwg, Rb^Fdw, Gll^Fmw, Gll^Fmw, Sm, Gll^Fdw, Gll^Fmf, Gll^Fmw
|
||||
Gs, Re^Gvs, Re^Gvs, Re^Gvs, Hh^Fms, Rr, Gs^Fms, Ce, Gs^Fms, Rr, Hh, Gg, Hh, Gs^Fms, Re, Gg, Re, Re, Gs^Fms, Gs^Fms, Gs^Fp, Gll^Fmw, Hhd^Em, Rb^Fdw, Ss^Em, Ss^Em, Sm, Sm^Edb, Rb, Ss^Em, Rb^Fdw, Gll^Fmw, Ss^Tf, Ss^Emf, Ss^Em, Rb^Fdw, Gll^Fp, Rb^Fdw, Rb^Fdw, Ss, Ss
|
||||
Gg, Gs, Gs^Vh, Gs^Es, Rr, Gs^Fms, 4 Ke, Mm, Ce, Gs^Fms, Hh, Hh, Gs, Re, Gg^Efm, Gs, Gs^Fp, Re, Re, Gs^Fp, Gs^Vl, Gll^Fmw, Hhd, Hhd, Gll^Fmw, Ss^Edb, Ss, Ss, Hhd^Em, Rb, Sm, Ss, Ss^Em, Ss^Em, Gll^Fdw, Gll^Fmw, Gll^Fmw, Gll^Fmw, Gll^Fmw, Gll^Fmw, Gll^Fp
|
||||
Gg^Es, Gg, Gs^Fp, Gs^Fp, Gs^Fms, Rr^Es, Ce, Ce, Ke, Rr, Hh, Gg, Gg^Em, Gg^Vh, Gs, Gs, Gs^Fp, Gs, Gs^Fp, Gs^Em, Gll^Fmw, Gs^Fp, Re, Re, Rb^Fdw, Sm, Sm, Hhd, Re, Sm^Emf, Sm^Em, Rb^Fdw, Wwg, Rb^Fdw, Rb^Fmw, Gll^Fmw, Gll^Em, Gll^Fp, Gll^Emf, Gll^Fmw, Re
|
||||
Gg, Hh, Hh^Fms, Gs^Fds, Rr, Hh, Gs^Fms, Rp, Gs^Fms, Hh^Fds, Hh, Gg, Gs^Fp, Gs^Fp, Gs, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp, Gll^Fmw, Rb^Fdw, Gll^Fmw, Gll^Fmw, Re, Gd^Fmw, Gd^Fdw, Sm^Em, Ss^Vhs, Rb^Fdw, Sm, Sm, Ss^Edb, Ss, Ss^Em, Ss, Gll^Fmw, Gll^Fp, Gll^Fdw
|
||||
Re, Hh, Gg^Efm, Gs^Fp, Gs, Rp, Hh^Es, Ce, Hh^Es, Gs^Fms, Rp^Es, Re, Re, Re, Gs, Gs, Re, Gs^Em, Gs^Fms, Gll^Fp, Gll^Fmf, Gll^Fmw, Gll^Fmw, Gll^Fp, Gll^Fmw, Ww^Ewl, Gll^Fdw, Gd^Fmw, Gd^Fdw, Ss, Sm, Ss^Tf, Ss, Sm^Edb, Ss^Edb, Sm^Edb, Sm, Wwg, Ss, Ss, Ss
|
||||
Gg, Re, Re, Gg, Gs, Gs, Gs, Gs^Fp, Re, Re^Es, Re, Rp, Re, Re, Re, Re, Gs^Fp, Gs^Fp, Gs^Fp, Gll^Fp, Gs^Fp, Gg, Gll^Fp, Gll^Fp, Gll^Fmw, Gll^Fp, Gll^Fp, Gll^Fdw, Rb^Fmw, Ss, Sm, Sm^Emf, Rb^Fdw, Wwg, Wwg, Sm, Ss^Em, Wwg, Wwg^Ewl, Gll^Fdw, Gll^Fdw
|
||||
Gg^Efm, Re, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Em, Gs^Fp, Gg, Gs, Re, Gs^Fmw, Rp, Re, Rp^Es, Rp, Re, Gs, Gs^Fp, Re, Gs^Fms, Gll^Fmf, Gll^Fmf, Gll^Fp, Gll^Fp, Gll^Fmw, Gll^Fp, Gll^Fmw, Ss, Gll^Fp, Rb^Fmw, Gll^Fp, Gll^Fp, Ke, Ce, Re^Vct, Ss^Em, Ss^Tf, Ss^Emf, Gll^Fdw, Gll^Fmw, Ss
|
||||
Gll, Gg^Es, Gg, Gs^Fms, Gs^Fms, Re, Re, Gs, Gs, Gs, Gs^Fp, Gs^Fp, Re, Re, Rp^Es, Gs^Fp, Rp^Es, Re, Re, Gll^Fp, Gll^Fp, Gs^Fp, Gll^Fp, Gll^Fp, Gll^Fmw, Gll^Fmf, Gll^Fp, Gll^Em, Ss, Gll^Fdw, Rb, Ce, Ce, Ce, Gll^Fp, Gll^Fdw, Ss, Gll^Fdw, Gd^Fmw, Gll^Fmw, Gll^Fmf
|
||||
Gll, Gs^Fp, Gll, Gs^Fp, Gg, Gs^Fp, Gs^Fms, Gs, Re, Gs^Fp, Gs, Gs, Gll^Fp, Gs^Fmw, Gll, Rp^Es, Re, Rp, Gll^Fdw, Rp, Rp, Gll^Fp, Re, Gll, Gll^Fdw, Gd^Fmf, Gd^Fmf, Gd^Fmw, Gll^Fmw, Gll^Fmw, Rb, Re^Vct, Re^Es, Hhd, Gll^Fp, Gll^Fmw, Gll^Fdw, Gll^Fmw, Gd^Fp, Gd^Fmf, Gll^Fmw
|
||||
Gll, Gs^Em, Gs, Gll^Em, Gll^Emf, Gs^Fp, Gll^Fmw, Gs^Fms, Gll^Fmw, Gs, Gll^Fp, Gs^Vc, Gll^Fp, Gll, Gll^Fmw, Re, Gll^Fp, Hhd, Hhd^Fdw, Re, Gll^Fdw, Gll, Re^Fdw, Re, Gd, Gd^Fmf, Gd^Fmw, Gll^Fmw, Gll^Fp, Gll^Fmw, Hhd, Hhd^Fmw, Hhd^Vhhr, Hhd^Fmw, Re, Re, Hhd, Gd^Fp, Gll^Fmw, Gll^Fdw, Gll^Fdw
|
||||
Gll^Fp, Gll^Fp, Gll^Fmw, Gll^Fmw, Gs^Fmw, Gs^Fp, Gll^Fmw, Gll^Fmw, Gll, Gll^Fp, Re, Gll^Fp, Gs^Fmw, Gll^Fp, Gll^Fp, Gll^Fp, Hhd^Fp, Gll^Fmw, Gll^Fmw, Re, Gll^Fmw, Rp, Re, Re^Es, Re, Gll^Fdw, Gll^Fdw, Gd^Fdw, Gll^Fmw, Hhd^Fp, Gll^Fmw, Gll^Fp, Gll^Fmw, Gll^Fmf, Gll^Fmw, Hhd, Gll^Fp, Gll^Fdw, Gll, Gll^Fp, Gll^Fmw
|
||||
Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Gll^Fp, Gs^Fms, Gll^Emf, Gll^Fp, Gll^Fp, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fds, Gs^Fms, Hhd^Fms, Hhd^Fms, Gll^Fmw, Re, Re, Re^Es, Rp, Re, Gll^Fdw, Gll, Re, Rp, Re, Gll^Em, Re, Gll^Fmw, Hhd^Fp, Gll^Fmw, Hhd^Fmw, Gll^Fp, Gg^Fmf, Hhd^Fp, Hhd, Gll^Fmw, Gll^Fmw
|
||||
Gll^Fp, Gs^Fms, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fms, Gll^Fmw, Gs^Fms, Gll^Fp, Hhd^Fms, Hhd^Fms, Gs^Fms, Gs^Fms, Gs^Fds, Gll^Fp, Hhd^Fmw, Gs^Fms, Gll^Fp, Gll^Fmw, Gll^Fmw, Gll^Fp, Gll^Fdw, Gll^Fdw, Rp, Re, Re^Es, Gll^Fmw, Re, Rp, Re^Es, Gll^Fp, Hhd^Fmw, Hhd^Fmw, Gll^Fmw, Gd^Fp, Hhd^Fmf, Gll^Fdf, Hhd^Fmw, Hhd^Fmw, Hhd^Fdw, Hhd
|
||||
Gll^Fmw, Gll^Fmw, Gs^Fds, Gll^Fp, Gll^Fp, Gll^Fmw, Gll^Fp, Gll^Fp, Gll^Fmw, Hhd^Fp, Gll^Emf, Gll^Fp, Gll^Fp, Gs^Fms, Gll^Fmw, Gll^Emf, Gll, Hhd^Fp, Gll^Fp, Gll^Fp, Hhd, Gll^Fmw, Gll^Fmw, Re, Hhd^Fp, Re, Gll^Fp, Re, Rp, Re, Gll^Fdw, Gll^Fmw, Gll^Fmw, Gll^Fdw, Gll^Fmw, Gd^Fmf, Gd^Fmf, Gd^Fp, Gll^Fp, Gll^Fmw, Gll^Fp
|
||||
Gll^Fp, Gs^Fms, Gs^Fms, Gs^Fms, Re^Em, Gll^Fmw, Gll^Fp, Hhd^Fp, Re^Fmw, Gll^Fmw, Gll^Fp, Gll^Fp, Gll^Em, Gll^Fmw, Gll^Fp, Gll^Em, Gd^Fmw, Gd^Fp, Gll, Gll^Fmw, Gll^Fp, Gll^Fmw, Gll^Fp, Gll^Fmf, Hhd^Fmf, Hhd^Fp, Hhd^Fmf, Gll^Fmw, Rp, Re, Re, Hhd^Fmf, Gll^Em, Gll^Emf, Gll^Fmw, Hhd^Fp, Gll^Fmf, Gd^Fp, Hhd^Fp, Gll^Fmf, Gs^Fms
|
||||
Gs^Fms, Gs^Fms, Gll^Fp, Gll^Fp, Hhd^Fmw, Re, Hhd, Re, Re^Fdw, Gll, Hhd^Fdw, Gll^Fmw, Ss, Gll^Vht, Gll^Fmw, Gll^Fp, Gd^Fmw, Gll^Fmw, Gll, Gll^Fmf, Gd^Fmf, Gll^Fmw, Hhd^Fmf, Gll^Fmf, Gll^Fmf, Gll^Fdf, Gd^Fmf, Gd^Fmw, Gll^Fmw, Rp, Rp, Re^Es, Gll^Fmw, Hhd^Fmw, Md, Hhd^Fmf, Gll^Fmf, Gll^Fdf, Gll^Fmw, Hhd^Fp, Hhd^Fp
|
||||
Gll^Fmw, Gll^Fp, Gll^Fmw, Hhd^Fmw, Hhd^Fdw, Md, Md, Re, Hhd, Hhd, Re^Vct, Gll^Fdw, Ce, Ss, Gll^Fdw, Gd^Fmw, Gd^Fmw, Gll^Fmf, Hhd^Fmf, Gd^Fp, Gll^Fdf, Hhd^Fmf, Gd^Fmw, Gd^Fmw, Gll, Gll^Fp, Hhd^Fp, Gll^Fmf, Gd^Fp, Hhd^Fp, Re, Re^Es, Re^Es, Rp, Hhd^Fmw, Hhd^Fp, Hhd^Fp, Gd^Fp, Gll^Fp, Hhd^Fmf, Gs^Fp
|
||||
Gll^Fp, Gll^Fmw, Gll^Fdw, Sm^Em, Sm, Md, Hhd^Fdw, Hhd^Fmw, Gll^Fmw, Gll^Fmw, Re^Em, Ce, 1 Ke, Ce, Gll, Gll^Em, Gd^Fmw, Hhd^Fmf, Hhd^Fp, Gll^Fdf, Gll^Fdf, Gd^Fp, Gll^Fmw, Gll^Fmf, Gll^Fp, Hhd^Em, Hhd, Gll^Fmf, Gll^Fmw, Gd^Fmw, Gd, Gll^Fdw, Re, Re, Re, Hhd^Es, Hhd^Em, Gd^Fmw, Gll^Fmw, Hhd^Fmf, Md
|
||||
Re, Gll^Fp, Ss^Tf, Sm^Em, Rb^Fdw, Wwg, Wwg^Ewl, Gll^Fdw, Ss, Gll^Fp, Gll^Fp, Gll^Fp, Ce, Ce, Re^Vct, Gd^Fmw, Gd^Fmf, Gd^Fmf, Gd^Fmf, Hhd^Fmf, Hhd^Fmf, Gd^Fdf, Gll^Fmf, Gll^Fmf, Gll^Fmw, Hhd^Fmw, Gll^Fp, Hhd, Gll^Fmw, Gll^Fmf, Gll^Fmf, Gd^Fmw, Gll^Fdw, Re, Rb, Rp, Gll^Fdw, Gll^Fmw, Hhd^Fmw, Hhd^Fp, Hhd
|
||||
Rb^Fdw, Gll^Fmw, Ss^Emf, Ss^Emf, Wwg, Wwg, Sm, Ss^Em, Ss, Gll^Fmw, Gll^Fmw, Gll^Fp, Gll^Fp, Ce, Gll^Fp, Gll^Fp, Ce, Gll^Fp, Ce, Gll^Fp, Hhd^Fmf, Hhd^Fmf, Gll^Fp, Re, Gll^Fp, Gll^Fmf, Hhd^Fdf, Gll^Fmf, Gd^Fmf, Gll^Fdf, Gll^Fmf, Gd^Fp, Gll^Fmw, Rp, Hhd, Rb, Rb, Re^Es, Re, Hhd^Em, Hhd
|
||||
Sm, Ss^Em, Ss^Em, Ss^Em, Gll^Fdw, Gll^Fmw, Sm, Sm, Gll^Fmw, Gll, Ss, Gll^Fdw, Gll, Gll^Fp, Wwg, Rb, Gll^Vht, 2 Ke, Ce, Re, Hhd^Fp, Gll^Fmf, Gll^Fp, Re^Emf, Gll^Fp, Gll^Fmf, Hhd^Fmw, Hhd^Fmf, Gd^Fp, Gd^Fmf, Gd^Fmf, Gd^Fmw, Gll^Fp, Hhd, Gll^Fmw, Hhd^Fmw, Rb, 3 Re^Es, Rp, Re, Rp
|
||||
Sm, Rb^Fdw, Wwg^Ewl, Rb^Fdw, Rb^Fmw, Gll^Fmw, Gll, Gll^Fp, Gll, Gll^Fmw, Gll^Fdw, Ss^Em, Ss^Emf, Ss^Em, Sm, Wwg^Ewl, Rb^Em, Gll^Fp, Gll^Fp, Re^Es, Re, Gll^Fp, Ss, Re^Fdw, Gll^Fmw, Gll^Fmw, Re, Gd^Fp, Hhd^Fmf, Hhd^Fdf, Gll^Fp, Gll^Fmf, Gll^Em, Gll^Fp, Gll^Fmw, Hhd, Hhd^Fmw, Re, Re, Rp, Rp
|
||||
Ss, Rb^Fdw, Sm^Em, Sm^Em, Ss, Ss, Ss, Ss^Vhs, Gll^Fmw, Gll^Fp, Gll^Fmw, Ss, Wwg^Edb, Wwg^Edb, Sm^Emf, Sm^Em, Rb, Gll^Fp, Gll^Fmf, Gll^Fmw, Ss, Ss, Ss, Ss, Gll^Fmw, Gll^Fp, Re^Em, Gd^Fp, Hhd^Fmf, Gd^Fmf, Gs^Fmw, Hhd^Fmw, Md, Gll^Fmw, Gll^Fmw, Hhd^Fp, Hhd^Fmf, Hhd^Fmw, Hhd, Hhd^Fp, Hhd
|
||||
Gll^Fms, Ss, Ss^Tf, Sm^Emf, Ss^Edb, Sm^Edb, Sm, Wwg, Gll^Fmw, Gll^Fp, Gll^Fmw, Gll^Fdw, Rb^Fdw, Ss^Edb, Ss^Em, Ss^Em, Ss^Em, Gll^Fdw, Gll^Fmw, Gll^Fmw, Hhd^Fdw, Sm, Hhd^Es, Hhd^Fdw, Wwg, Gll^Fdw, Gll^Fp, Gll^Fmw, Gll^Fmw, Gll^Fmf, Gs^Fp, Hhd^Fmw, Gll^Emf, Hhd^Fmw, Gll^Fp, Hhd^Fp, Hhd^Fmf, Re, Hhd, Md, Md
|
||||
Ss, Re^Fdw, Sm, Wwg, Gll, Sm^Edb, Rb^Fmw, Gll^Fmw, Gll, Gll^Fp, Gll, Re, Rb, Ss^Em, Ss^Tf, Sm^Emf, Ss, Gll^Fdw, Gll^Fp, Gll^Em, Sm, Sm, Wwg, Sm, Wwg, Gll^Fdw, Hhd, Hhd^Fmw, Re, Gll^Fp, Re, Gll^Fmw, Gll^Fmf, Gll^Fmw, Gll^Fdf, Gll^Fmw, Hhd, Gll^Fp, Re^Em, Gll^Fp, Hhd^Fp
|
||||
Ss, Ss, Ss, Rb^Fdw, Gll^Fdw, Sm, Ss, Ss, Ss, Ss^Vhs, Gll^Fdw, Rb^Fdw, Gll^Fmw, Sm, Sm, Sm, Hhd^Fmw, Gll^Fmw, Gll^Fmw, Gll^Fp, Rb, Rb^Fdw, Rb^Fmw, Sm, Sm, Ss, Ss, Gll^Fdw, Gll^Fdw, Re, Gll^Fdw, Gll^Fp, Gll^Fdf, Gll^Fmf, Gll^Fmf, Gll^Fmf, Gll^Fp, Hhd^Fp, Gll^Fmf, Gll^Fmf, Gll^Fp
|
||||
Gg, Rb^Fdw, Gg, Ss, Ss, Sm, Ss, Sm, Sm, Wwg, Gll^Fdw, Gll^Fmw, Re^Fp, Gll^Fdw, Gll^Fmw, Hhd, Gll^Fp, Gll^Fp, Gll^Fp, Gll^Fmw, Rb^Fmw, Rb^Fmw, Rb^Fmw, Rb, Gg, Ss, Hhd, Re, Re, Re, Re, Gll^Fmw, Gs^Fp, Gll^Fmf, Gs^Fds, Gll^Fmw, Gll^Fmw, Gll^Fdf, Gll^Fp, Gll^Fdf, Gll^Fmw
|
|
@ -1,7 +1,7 @@
|
|||
Gg, Gg, Gg, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fp, Gs^Fms, Ww, Ww, Gs^Fp, Gg, Gs^Fp, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Gg, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fp, Gs^Fp, Gs^Fp, Ww, Gs^Fms, Gg^Vh, Gs^Fp, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Re, Re, Gg, Gg, Gg, Gg, Hh, Hh, Hh, Hh, Gg^Vh, Gg, Gg, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fms, Gs^Fms, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg^Vh, Hh, Gg, Ce, Ce, 3 Ke, Ce, Gg, Gs^Fds, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Re, Gg, Gg, 5 Gg, Gg, Gg, Gg, Hh, Gg, Hh, Gg, Gg, Gg, Gg, Gg, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Gg, Ce, Ce, Ce, Gg, Gg^Vh, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Re, Gg, Gg, 4 Gg, Gg, Gg, Gg, Hh, Gg, Hh, Gg, Gg, Gg, Gg, Gg, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Gg, Ce, Ce, Ce, Gg, Gg^Vh, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fp, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Hh, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg
|
||||
Gg, Gg, Gg, Re, Hh, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Hh, Gg, Hh, Gg, Gg, Gg, Gg, Hh, Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gg, Gg
|
||||
Gg, Gg, Gg^Vh, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Hh, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg^Vh, Hh, Gg, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg
|
||||
|
@ -35,8 +35,8 @@ Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg,
|
|||
Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Re, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg
|
||||
Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Re, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gs^Fds, Gs^Fds, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg
|
||||
Gg, Gg, Gg, Gg, Gg^Vh, Gs^Fds, Hh^Fds, Hh^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg^Vh, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fms
|
||||
Gg, Gg, Gg, Gg, Gs^Fds, Hh, Hh^Fds, Hh^Fds, Hh, Gg^Vh, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Re, Gg, Gg, Gg, Ce, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fms
|
||||
Hh, Hh, Hh^Fds, Gs^Fds, Hh^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Re, Gg, Gs^Fds, Gs^Fds, 4 Ke, Ce, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fms, Gg, Gg
|
||||
Gs^Fds, Hh^Fds, Hh^Fds, Hh, Hh^Fds, Hh^Fds, Gs^Fds, Gs^Fds, Hh^Fds, Hh^Fds, Hh^Fds, Gs^Fds, Gg, Gs^Fds, Ce, Ce, Ce, 1 Ke, Ce, Gg, Ce, Gg^Vh, Re, Gs^Fds, Gs^Fds, Ce, Ce, Ce, Ce, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gg, Gs^Fms, Gs^Fms, Gg, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp
|
||||
Gg, Gg, Gg, Gg, Gs^Fds, Hh, Hh^Fds, Hh^Fds, Hh, Gg^Vh, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Re, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fms
|
||||
Hh, Hh, Hh^Fds, Gs^Fds, Hh^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Re, Gg, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fms, Gg, Gg
|
||||
Gs^Fds, Hh^Fds, Hh^Fds, Hh, Hh^Fds, Hh^Fds, Gs^Fds, Gs^Fds, Hh^Fds, Hh^Fds, Hh^Fds, Gs^Fds, Gg, Gs^Fds, Ce, Ce, Ce, 1 Ke, Ce, Gg, Ce, Gg^Vh, Re, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gg, Gs^Fms, Gs^Fms, Gg, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp
|
||||
Gs^Fds, Gs^Fds, Hh^Fds, Hh^Fds, Hh^Fds, Hh, Hh, Hh^Fds, Hh^Fds, Hh^Fds, Hh^Fds, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Ce, Gs^Fds, Gs^Fds, Re, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fms, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fp
|
||||
Gs^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Hh, Hh, Hh^Fds, Hh^Fds, Hh^Fds, Hh^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Re, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fp
|
|
@ -1,29 +0,0 @@
|
|||
Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Hh, Hh, Gs^Fds, Gs^Fds, Ww, Ww, Wo, Wo, Ww, Gs^Fds, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Gg, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Vh, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Hh, Hh, Gs^Fds, Gs^Fds, Ww, Gs^Fds, Wo, Wo, Ww, Gs^Fds, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Re^Gvs, Gg^Vh, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fds, Hh, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Ww, Ww, Ww^Bw\, Gs^Fds, Ww, Ww, Ww
|
||||
Gg, Re^Gvs, Re^Gvs, Gg, Gs^Fds, Gg, Gs^Fds, Gg^Vh, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Vh, Re, Gs^Fds, Re, Gs^Fds, Gs^Fds, Wo, Gs^Fms, Hh, Gs^Fds, Gs^Fds, Re, Gs^Fds, Re, Gs^Fds, Gs^Fds, Gs^Fds, Re, Gs^Fds, Gs^Fds, Gs^Fds
|
||||
Gg, Re^Gvs, Re^Gvs, Gg, Gs^Fds, Gs^Fds, Ww, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Re, Gs^Fds, Re, Gs^Vh, Re, Re^Fds, Gs^Fds, Re, Re, Re, Re, Gs^Fds, Re, Gs^Fds, Re, Re^Fds, Re, Gs^Fds, Re, Re, Re
|
||||
Gg, Gg, Gg^Vh, Gg, Gs^Fds, Ww, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Ww, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Re, Gs^Fds, Gs^Fds, Gs^Fmw, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Ss^Vhs, Ss, Gs^Fds, Ss^Vhs, Gs^Fds, Gs^Fds, Gs^Fds
|
||||
Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Ww, Gs^Fds, Gs^Fds, Ww, Gs^Fds, Gs^Fmw, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Ww, Ww, Ss, Ss, Ss, Ww, Ww, Ww, Ww
|
||||
Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg^Vh, Re^Gvs, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Ww, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Ww, Ww^Bw/, Gs^Fp, Ww, Ww, Gs^Fms, Ww, Gs^Fms, Gs^Fms
|
||||
Gg, Gg, Hh, Hh, Hh, Hh, Hh, Gg, Gg, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fds, Ss, Gs^Fds, Gs^Fds, Gs^Fmw, Gs^Fds, Gs^Fds, Gs^Fds, Ww, Ss, Ss, Ss, Gs^Fms, Gs^Fp, Gs^Fp
|
||||
Hh, Hh, Gs^Fds, Gg, Gg, Gg, Gg, Hh, Hh, Gg, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Ss, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fms, Ss, Gs^Fms, Ss^Vhs, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fp
|
||||
Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg^Vh, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Hh, Hh, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Gg, Gg, Hh, Hh, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gs^Fms, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fp, Gs^Fmw, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Hh, Hh, Gs^Fds, Rr, Gs^Fds, Hh, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fp, Gs^Fp
|
||||
Rr, Rr, Kh, Ch, Ch, Rr, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Vl, Hh, Gs^Fp, Gs^Fp, Gs^Fp
|
||||
Gs^Fds, Gs^Fds, Ch, Mm, 2 Kh, Gs^Fds, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg^Vh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fds, Gs^Fds, Gs^Fmw, Gs^Fds, Gs^Fms, Hh, Hh, Hh, Hh, Hh, Hh
|
||||
Rr, Rr, Gs^Fds, Ch, Gs^Fds, Rr, Hh, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fms, Gs^Fms
|
||||
Hh, Hh, Hh, Rp, Hh, Hh, Gs, Gs, Gg, Gg, Gg, Gg, Gg, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Gs^Fmw, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fms, Gs^Fms, Gs^Fp, Gs^Fp, Gs^Fms
|
||||
Gs, Gs, Rp, Rp, Rp, Gs^Fds, Rp, Gs, Gs, Gg, Gg, Gg, Gg, Gg, Gg, Re^Gvs, Gg^Vh, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Ce, 1 Ke, Ce, Gs^Fms, Gs^Fms, Gs^Vl, Gs^Fp, Gs^Fp
|
||||
Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Gs, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fds, Hh, Hh, Ce, Gs^Ecf, Ce, Hh, Gs^Fms, Gs^Fp, Gs^Fms, Gs^Fp
|
||||
Rp, Rp, Gg, Rp, Gg, Gs, Rp, Rp, Gs, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Rp, Gg, Hh, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Gs^Fds, Gs^Fds, Gs^Fds, Hh, Hh, Gs^Fms, Gs^Fms, Hh, Hh
|
||||
Gg, Gg, Gg, Gg, Gg, Rp, Rp, Gs^Vh, Gs, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Rp, Rp, Rp, Rp, Rp, Hh, Hh, Gs^Fds, Hh, Gs^Fds, Mm, Mm, Mm, Hh, Hh, Gs^Fds, Gs^Fds, Hh, Hh, Hh
|
||||
Gg, Gg, Gg, Gg, Gg, Rp, Rp, Rp, Gs, Gs, Gs, Gg, Gg, Gg, Gg, Gg, Rp, Rp, Rp, Rp, Gs, Rp, Rp, Gs, Hh, Gs, Gs, Mm, Mm, Hh, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm
|
||||
Gg, Gg, Gg, Gg, Gg, Gg, Rp, Rp, Rp, Rp, Rp, Gs, Gs, Gs, Rp, Rp, Rp, Rp, Gs, Gs, Gs, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, 3 Rp, Rp, Rp, Mm, Mm, Mm
|
||||
Gg, Gg, Hh, Gg, Gg, Gg, Gg, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Hh, Gs, Gg, Gg, Gg, Gs, Gs, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp, Rp
|
||||
Hh, Hh, Hh, Gg, Gg, Gg, Gg, Gg, Gs, Gs, Gs^Vh, Rp, Rp, Rp, Gs^Fds, Hh, Hh, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gs^Vh, Hh, Gs, Hh, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Mm, Rp, Rp, Rp
|
||||
Gg, Gg^Vh, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gs, Gs, Hh, Hh, Hh, Gs, Gs, Gg, Gg, Gg, Gg, Gg, Gg, Hh, Gg, Hh, Gg, Gs^Fds, Gs^Fds, Mm, Mm, Gs^Fds, Gs^Fds, Hh, Hh, Gs, Gs^Fds, Gs, Gs^Fds, Mm, Mm, Mm
|
||||
Gg, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gs, Gg, Gs, Gs, Gs, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fms, Hh, Hh, Gs^Fds, Gs^Fds
|
||||
Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gs^Fds, Gg, Gs^Fds, Gg, Gs^Fds, Gg, Gs^Fds, Gs^Fds, Gs, Gg, Gs^Fds, Gg, Gs^Fms, Gg, Gs^Fds, Gg, Gg, Gg, Gg, Gg, Gg, Gs^Fds, Gg, Gs^Fds, Gg, Gg, Gs^Fds, Gs^Fms, Gs^Fds, Gg, Gg, Gg, Gg, Gg
|
||||
Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fms, Gs^Fms, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gs^Fds, Gs^Fds, Gs^Fds, Gg, Gg, Gg, Gg, Gg
|
|
@ -1,7 +1,7 @@
|
|||
#textdomain wesnoth-l
|
||||
[scenario]
|
||||
id=05_Hide_and_Seek
|
||||
next_scenario=06_The_Grey_Woods
|
||||
next_scenario=06_The_Hunters
|
||||
victory_when_enemies_defeated=no
|
||||
name= _ "Hide and Seek"
|
||||
map_file=campaigns/Liberty/maps/05_Hide_and_Seek.map
|
||||
|
|
|
@ -1,454 +0,0 @@
|
|||
#textdomain wesnoth-l
|
||||
[scenario]
|
||||
id=06_The_Grey_Woods
|
||||
name= _ "The Grey Woods"
|
||||
next_scenario=07_The_Hunters
|
||||
victory_when_enemies_defeated=yes
|
||||
map_file=campaigns/Liberty/maps/06_The_Grey_Woods.map
|
||||
{TURNS 50 44 42}
|
||||
{DEFAULT_SCHEDULE_SECOND_WATCH}
|
||||
|
||||
# terrain=* only works inside an event.
|
||||
[event]
|
||||
name=prestart
|
||||
[time_area]
|
||||
terrain=U*,U*^*,Ce,Cud,Kud,Ql,Xu
|
||||
x,y=27-34,4-9
|
||||
{UNDERGROUND}
|
||||
[/time_area]
|
||||
[/event]
|
||||
|
||||
{INTRO_AND_SCENARIO_MUSIC "underground.ogg" "the_deep_path.ogg"}
|
||||
{EXTRA_SCENARIO_MUSIC "elvish-theme.ogg"}
|
||||
{EXTRA_SCENARIO_MUSIC "suspense.ogg"}
|
||||
{EXTRA_SCENARIO_MUSIC "knalgan_theme.ogg"}
|
||||
|
||||
{LIBERTY_BIGMAP {JOURNEY_06_NEW} }
|
||||
|
||||
[side]
|
||||
type=Bandit
|
||||
id=Baldras
|
||||
side=1
|
||||
canrecruit=yes
|
||||
controller=human
|
||||
recruit=Thug,Footpad,Poacher
|
||||
{GOLD 200 150 100}
|
||||
#ifdef EASY
|
||||
shroud=no
|
||||
fog=yes
|
||||
share_vision=all
|
||||
#endif
|
||||
#ifdef NORMAL
|
||||
shroud=yes
|
||||
fog=yes
|
||||
share_vision=all
|
||||
#endif
|
||||
#ifdef HARD
|
||||
shroud=yes
|
||||
fog=yes
|
||||
share_vision=shroud
|
||||
#endif
|
||||
team_name=good_guys
|
||||
user_team_name=_"Rebels"
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
type=Shadow Lord
|
||||
id=Helicrom
|
||||
name= _ "Helicrom"
|
||||
profile=portraits/helicrom.png
|
||||
facing=sw
|
||||
side=2
|
||||
canrecruit=yes
|
||||
recruit=Rogue Mage,Shadow Mage,Thief,Trapper,Huntsman,Outlaw,Fugitive
|
||||
{GOLD 300 250 200}
|
||||
controller=ai
|
||||
[ai]
|
||||
recruitment_pattern=mixed fighter,mixed fighter,fighter,mixed fighter,archer
|
||||
[/ai]
|
||||
shroud=yes
|
||||
fog=yes
|
||||
share_vision=all
|
||||
team_name=good_guys
|
||||
user_team_name=_"Rebels"
|
||||
|
||||
[ai]
|
||||
village_value=0.5
|
||||
leader_value=1
|
||||
[goal]
|
||||
name=protect_unit
|
||||
[criteria]
|
||||
side=1
|
||||
[/criteria]
|
||||
protect_radius=8
|
||||
value=2.0
|
||||
[/goal]
|
||||
[/ai]
|
||||
[/side]
|
||||
|
||||
{STARTING_VILLAGES 2 9}
|
||||
|
||||
[side]
|
||||
type=Necromancer
|
||||
id=Mal-Jarrof
|
||||
name= _ "Mal-Jarrof"
|
||||
side=3
|
||||
canrecruit=yes
|
||||
recruit=Skeleton,Skeleton Archer,Ghost,Walking Corpse,Ghoul
|
||||
controller=ai
|
||||
{GOLD 80 100 100}
|
||||
shroud=no
|
||||
fog=no
|
||||
team_name=evil_ones
|
||||
user_team_name=_"Evil"
|
||||
{FLAG_VARIANT undead}
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
type=Necromancer
|
||||
id=Mal-Jerod
|
||||
name= _ "Mal-Jerod"
|
||||
side=4
|
||||
canrecruit=yes
|
||||
recruit=Skeleton,Revenant,Skeleton Archer,Ghost,Walking Corpse
|
||||
controller=ai
|
||||
{GOLD 80 100 100}
|
||||
shroud=no
|
||||
fog=no
|
||||
team_name=evil_ones
|
||||
user_team_name=_"Evil"
|
||||
{FLAG_VARIANT undead}
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
type=Lich
|
||||
id=Sel-Mana
|
||||
name= _ "Sel-Mana"
|
||||
facing=sw
|
||||
side=5
|
||||
canrecruit=yes
|
||||
recruit=Skeleton,Dark Adept,Skeleton Archer,Soulless,Vampire Bat
|
||||
controller=ai
|
||||
{GOLD 80 100 100}
|
||||
shroud=no
|
||||
fog=no
|
||||
team_name=evil_ones
|
||||
user_team_name=_"Evil"
|
||||
{FLAG_VARIANT undead}
|
||||
[/side]
|
||||
#
|
||||
# Prestart events
|
||||
#
|
||||
[event]
|
||||
name=prestart
|
||||
|
||||
[objectives]
|
||||
side=1
|
||||
[objective]
|
||||
description= _ "Defeat the lich and its minions"
|
||||
condition=win
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Baldras"
|
||||
condition=lose
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Harper"
|
||||
condition=lose
|
||||
[/objective]
|
||||
|
||||
{TURNS_RUN_OUT}
|
||||
|
||||
[gold_carryover]
|
||||
bonus=yes
|
||||
carryover_percentage=40
|
||||
[/gold_carryover]
|
||||
[/objectives]
|
||||
|
||||
#Initialize switch
|
||||
{VARIABLE Helicrom_dead 0}
|
||||
|
||||
#
|
||||
# Give Helicrom some free underlings and the villages in his camp
|
||||
#
|
||||
{GENERIC_UNIT 2 (Rogue Mage) 13 6}
|
||||
{GENERIC_UNIT 2 (Shadow Mage) 11 7}
|
||||
|
||||
#
|
||||
# Give the SE Lich some baddies to shake things up
|
||||
#
|
||||
{GENERIC_UNIT 5 Wraith 37 36}
|
||||
#ifdef HARD
|
||||
{GENERIC_UNIT 5 Shadow 36 36}
|
||||
#endif
|
||||
|
||||
[item]
|
||||
x,y=8,19
|
||||
image=items/burial.png
|
||||
[/item]
|
||||
[item]
|
||||
x,y=37,39
|
||||
image=items/bonestack.png
|
||||
[/item]
|
||||
[item]
|
||||
x,y=35,31
|
||||
image=items/burial.png
|
||||
[/item]
|
||||
[item]
|
||||
x,y=33,35
|
||||
image=items/bones.png
|
||||
[/item]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Starting conversation and actions
|
||||
#
|
||||
[event]
|
||||
name=start
|
||||
{MOVE_UNIT id=Baldras 7 4}
|
||||
[recall]
|
||||
id=Harper
|
||||
[/recall]
|
||||
[redraw]
|
||||
side=1
|
||||
[/redraw]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "The leader, I presume."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "I am Helicrom, and you should not be so glib. I control dangerous men. My henchmen can slip unseen through any city, rob a man while he sleeps, or attack a caravan head-on. It’s not noble work, but our pursuits require plenty of gold."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Your pursuits?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "The former King’s magic ministry kept a tight control on the training and employment of mages in Wesnoth. Those of us who dared to... depart from the curriculum, you might say, were dealt with harshly. We are outcasts because we seek to master shadow magic. Our secrecy and security are not cheap."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "I have heard of you. Necromancers. Barely-human scum, I say."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Wrong. Necromancers become slaves to their lich masters and eventually lose their humanity. We have proven that practicing the dark arts need not lead down that path to damnation. We remain human, and seek the mystical secret of balance between the ways of light and darkness. We dance between both ways, adhering to neither."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "I... see, I think. Why do you want to help us?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "We don’t. You have sought us out. But, I do know of your situation and am willing to help. Any weakening of the Throne of Wesnoth, whether it be occupied by King or Queen, aids us."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Carcyn is always foggy as of late because these woods have recently become home to a lich and two of its underling necromancers. Our experiments may have actually aroused it from sleep... We’re not sure."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "So now you need to defend your rear as well as your front... I see your predicament. My men will wipe this land clean if you can help us defend our homeland."
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=die
|
||||
[filter]
|
||||
id=Sel-Mana
|
||||
[/filter]
|
||||
[if]
|
||||
[have_unit]
|
||||
side=3
|
||||
canrecruit=yes
|
||||
[/have_unit]
|
||||
|
||||
[or]
|
||||
[have_unit]
|
||||
side=4
|
||||
canrecruit=yes
|
||||
[/have_unit]
|
||||
[/or]
|
||||
|
||||
[then]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Finally, that creature is dead, yet its foolish minions resist."
|
||||
[/message]
|
||||
[/then]
|
||||
|
||||
[else]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "The lich is destroyed and its minions dead."
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=enemies defeated
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=Helicrom_dead
|
||||
numerical_equals=1
|
||||
[/variable]
|
||||
[then]
|
||||
[message]
|
||||
speaker=narrator
|
||||
message= _ "The defeat of the evil lich infesting the Grey Woods was a bittersweet victory. With Helicrom dead, the guild of shadow magic was thrown into disarray."
|
||||
image="wesnoth-icon.png"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=narrator
|
||||
message= _ "The remaining members were very grateful and offered Baldras a sizable sum of gold for his help. It was not the help he was hoping for, but he knew it would have to be enough for the coming conflict."
|
||||
image="wesnoth-icon.png"
|
||||
[/message]
|
||||
[sound]
|
||||
name=gold.ogg
|
||||
[/sound]
|
||||
[gold]
|
||||
side=1
|
||||
amount=500
|
||||
[/gold]
|
||||
[set_variable]
|
||||
name=Helicrom_status
|
||||
value=1
|
||||
[/set_variable]
|
||||
[/then]
|
||||
|
||||
[else]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "With the undead driven out, we may live here in relative peace and pursue our studies. For this, Baldras, I am grateful."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Studies? Peace? You mean to continue feeding on the lawful citizens of Wesnoth. There will be no peace for them."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "No one here is in a position to be dispensing moral judgments. Regardless, you have done great service to us today, and we owe you a debt. I will help you to the utmost of my ability."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "I was planning on giving you gold. Any good army is well financed, and with the lich gone we can now spare it."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "But, I think it would help you more if I lent you some of my men to join you on your adventures. The Queen has been sending mages out here, and my men are itching for some payback."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "On the other hand, if I keep the full force of my organization here, we might be able to regroup and join you on the battlefield when the time comes."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "I leave it to you to decide."
|
||||
[option]
|
||||
label= _ "I will take the gold. How does 500 sound?"
|
||||
[command]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Agreed. Good luck and farewell to you, Master Baldras."
|
||||
[/message]
|
||||
|
||||
[sound]
|
||||
name=gold.ogg
|
||||
[/sound]
|
||||
|
||||
[gold]
|
||||
side=1
|
||||
amount=500
|
||||
[/gold]
|
||||
|
||||
[set_variable]
|
||||
name=Helicrom_status
|
||||
value=1
|
||||
[/set_variable]
|
||||
[/command]
|
||||
[/option]
|
||||
|
||||
# Note: don't mess with the alignment in the next message key.
|
||||
[option]
|
||||
label= _ "Send your men with us. They will be valuable help as we prepare for the assault from the Wesnoth army garrison."
|
||||
[command]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Done. My finest mages and thieves are at your disposal. Use them well."
|
||||
[/message]
|
||||
|
||||
[allow_recruit]
|
||||
side=1
|
||||
type=Thief,Rogue Mage,Shadow Mage
|
||||
[/allow_recruit]
|
||||
|
||||
[set_variable]
|
||||
name=Helicrom_status
|
||||
value=2
|
||||
[/set_variable]
|
||||
[/command]
|
||||
[/option]
|
||||
[option]
|
||||
label= _ "I wish you to join us in battle against the Queen’s forces."
|
||||
[command]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "All right. I need time to clean up this forest and recall my men from the countryside. We will be ready to march in seven days. All now hinges on you! Until then..."
|
||||
[/message]
|
||||
|
||||
[set_variable]
|
||||
name=Helicrom_status
|
||||
value=3
|
||||
[/set_variable]
|
||||
[/command]
|
||||
[/option]
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
|
||||
{CLEAR_VARIABLE Helicrom_dead}
|
||||
|
||||
[endlevel]
|
||||
result=victory
|
||||
bonus=yes
|
||||
{NEW_GOLD_CARRYOVER 40}
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Loss conditions - turns run out
|
||||
#
|
||||
[event]
|
||||
name=time over
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "We have spent too much time here. Surely the Queen’s forces have returned to Dallben. Our mission is unfinished, but we must return to fight a suicide battle."
|
||||
[/message]
|
||||
[endlevel]
|
||||
result=defeat
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
{LIBERTY_DEATHS}
|
||||
|
||||
{VILLAGE_BURNED}
|
||||
|
||||
#
|
||||
# Helicrom dies - you don't lose but your benefits are not so good.
|
||||
#
|
||||
[event]
|
||||
name=last breath
|
||||
[filter]
|
||||
id=Helicrom
|
||||
[/filter]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "My men... have failed to protect me! I perish..."
|
||||
[/message]
|
||||
{VARIABLE Helicrom_dead 1}
|
||||
[/event]
|
||||
[/scenario]
|
836
data/campaigns/Liberty/scenarios/06_The_Hunters.cfg
Normal file
836
data/campaigns/Liberty/scenarios/06_The_Hunters.cfg
Normal file
|
@ -0,0 +1,836 @@
|
|||
#textdomain wesnoth-l
|
||||
[scenario]
|
||||
id=06_The_Hunters
|
||||
name= _ "The Hunters"
|
||||
victory_when_enemies_defeated=no
|
||||
next_scenario=07_Glory
|
||||
map_file=campaigns/Liberty/maps/06_The_Hunters.map
|
||||
turns=27
|
||||
{FIRST_WATCH}
|
||||
{FIRST_WATCH}
|
||||
{FIRST_WATCH}
|
||||
{MIDNIGHT}
|
||||
{MIDNIGHT}
|
||||
{MIDNIGHT}
|
||||
{SECOND_WATCH}
|
||||
{SECOND_WATCH}
|
||||
{SECOND_WATCH}
|
||||
{DAWN}
|
||||
{MORNING}
|
||||
{MORNING}
|
||||
{MORNING}
|
||||
{AFTERNOON}
|
||||
{AFTERNOON}
|
||||
{AFTERNOON}
|
||||
{DUSK}
|
||||
{FIRST_WATCH}
|
||||
{FIRST_WATCH}
|
||||
{FIRST_WATCH}
|
||||
{MIDNIGHT}
|
||||
{MIDNIGHT}
|
||||
{MIDNIGHT}
|
||||
{SECOND_WATCH}
|
||||
{SECOND_WATCH}
|
||||
{SECOND_WATCH}
|
||||
{DAWN}
|
||||
{MORNING}
|
||||
|
||||
{INTRO_AND_SCENARIO_MUSIC "underground.ogg" "the_deep_path.ogg"}
|
||||
{EXTRA_SCENARIO_MUSIC siege_of_laurelmor.ogg}
|
||||
{EXTRA_SCENARIO_MUSIC "suspense.ogg"}
|
||||
{EXTRA_SCENARIO_MUSIC knalgan_theme.ogg}
|
||||
|
||||
{LIBERTY_BIGMAP {JOURNEY_06_NEW} }
|
||||
|
||||
[side]
|
||||
side=1
|
||||
type=Highwayman
|
||||
id=Baldras
|
||||
canrecruit=yes
|
||||
controller=human
|
||||
fog=yes
|
||||
recruit=Thug,Footpad,Poacher
|
||||
{GOLD 150 125 100}
|
||||
village_gold=1
|
||||
team_name=good_guys
|
||||
user_team_name=_"Rebels"
|
||||
[/side]
|
||||
|
||||
{STARTING_VILLAGES 1 10}
|
||||
|
||||
[side]
|
||||
type=Shadow Lord
|
||||
id=Helicrom
|
||||
name= _ "Helicrom"
|
||||
profile=portraits/helicrom.png
|
||||
facing=sw
|
||||
side=2
|
||||
canrecruit=yes
|
||||
recruit=Rogue Mage,Shadow Mage,Thief,Rogue
|
||||
{GOLD 100 75 50}
|
||||
village_gold=1
|
||||
controller=human
|
||||
fog=yes
|
||||
share_vision=all
|
||||
team_name=good_guys
|
||||
user_team_name=_"Rebels"
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
side=3
|
||||
type=Shock Trooper
|
||||
id=Linneus
|
||||
name= _ "Linneus"
|
||||
facing=sw
|
||||
canrecruit=yes
|
||||
recruit=
|
||||
gold=100
|
||||
controller=ai
|
||||
shroud=yes
|
||||
fog=yes
|
||||
share_vision=none
|
||||
team_name=bad_guys
|
||||
user_team_name=_"Asheviere"
|
||||
{FLAG_VARIANT loyalist}
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
side=4
|
||||
type=Lieutenant
|
||||
id=Archarel
|
||||
name= _ "Archarel"
|
||||
canrecruit=yes
|
||||
recruit=
|
||||
gold=0
|
||||
income=-2
|
||||
controller=ai
|
||||
shroud=yes
|
||||
fog=yes
|
||||
share_vision=none
|
||||
team_name=bad_guys
|
||||
user_team_name=_"Asheviere"
|
||||
{FLAG_VARIANT loyalist}
|
||||
[/side]
|
||||
|
||||
{STARTING_VILLAGES 4 10}
|
||||
|
||||
[event]
|
||||
name=prestart
|
||||
|
||||
[micro_ai]
|
||||
side=3
|
||||
ai_type=messenger_escort
|
||||
action=add
|
||||
|
||||
[filter]
|
||||
side=3
|
||||
canrecruit=yes
|
||||
[/filter]
|
||||
waypoint_x,waypoint_y=7,4
|
||||
[/micro_ai]
|
||||
|
||||
{PLACE_IMAGE scenery/signpost.png 11 7}
|
||||
|
||||
[objectives]
|
||||
side=1,2
|
||||
[objective]
|
||||
description= _ "Kill all enemy patrols before they reach the outpost"
|
||||
condition=win
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Baldras"
|
||||
condition=lose
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Harper"
|
||||
condition=lose
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Helicrom"
|
||||
condition=lose
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Any patrol units survive when turns run out"
|
||||
condition=lose
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Any allied unit is sighted by the outpost guards"
|
||||
condition=lose
|
||||
[/objective]
|
||||
|
||||
[gold_carryover]
|
||||
bonus=no
|
||||
carryover_percentage=40
|
||||
[/gold_carryover]
|
||||
[/objectives]
|
||||
|
||||
[store_unit]
|
||||
variable=stored_Linneus
|
||||
kill=yes
|
||||
[filter]
|
||||
id=Linneus
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
#set up units
|
||||
|
||||
{GENERIC_UNIT 2 (Rogue Mage) 18 21}
|
||||
{GENERIC_UNIT 2 (Shadow Mage) 18 22}
|
||||
{GENERIC_UNIT 4 (Heavy Infantryman) 7 2} {GUARDIAN}
|
||||
{GENERIC_UNIT 4 (Heavy Infantryman) 7 6} {GUARDIAN}
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Starting conversation and actions
|
||||
#
|
||||
|
||||
#define TROOPER TYPE TO_X TO_Y
|
||||
[move_unit_fake]
|
||||
type={TYPE}
|
||||
side=3
|
||||
x=39,{TO_X}
|
||||
y=23,{TO_Y}
|
||||
[/move_unit_fake]
|
||||
{GENERIC_UNIT 3 {TYPE} {TO_X} {TO_Y}}
|
||||
[+unit]
|
||||
facing=sw
|
||||
[/unit]
|
||||
#enddef
|
||||
|
||||
[event]
|
||||
name=start
|
||||
|
||||
[recall]
|
||||
id=Harper
|
||||
[/recall]
|
||||
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "The leader, I presume."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "I am Helicrom, and you should not be so glib. I control dangerous men. My henchmen can slip unseen through any city, rob a man while he sleeps, or attack a caravan head-on. It’s not noble work, but our pursuits require plenty of gold."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Your pursuits?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "The former King’s magic ministry kept a tight control on the training and employment of mages in Wesnoth. Those of us who dared to... depart from the curriculum, you might say, were dealt with harshly. We are outcasts because we seek to master shadow magic. Our secrecy and security are not cheap."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Why do you want to help us?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "You are the ones who have sought us out. But, I do know of your situation and am willing to help. Any weakening of the Throne of Wesnoth, whether it be occupied by King or Queen, aids us. Do you know of Halstead?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "The great fort standing between Aldril and Elensefar? It is an bastion of central importance, second only to Elensefar itself. Of course I know of it."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Then you should also know this. During the past week, several patrols have again ventured across the Great River into Annuvin. A woman named Relana opposed them with a small militia and was victorious. The Crown, however, has begun to take notice of this rebellion. Asheviere has begun to mass her forces within Halstead. Should she manage to raise a full army, even Elensefar would be threatened, nevermind our band of rogues."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Well, what can we do? It seems to me that we can never win. It is impossible for us to face the entire forces of Weldyn by ourselves. Idiocy! If the noble lord of Elensefar is unwilling to resist the Queen, how can we expect to?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "A direct fight against the Crown would be undoubtedly foolish, but we have other means within our grasp. From Dan Tonk to Halstead, the fastest path lies through the pass between the Brown Hills and the Gryphon Mountains followed by the trek through these Grey Woods. We are in prime position to gnaw away at their troops, crippling their forces before they ever arrive at their destination."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "There’s no way we can fight them all... can we?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "We... cannot just surrender either. Helicrom is right. It’s this or nothing. All we can do is see it through to the end."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "My scouts have counted five platoons of troops marching towards the garrison in the last day. We must eliminate them all before they reach the outpost at the end of the woods. The outpost also must not be alerted to our presence, or we will have the bulk of their foces upon us."
|
||||
[/message]
|
||||
|
||||
{SCROLL_TO 7 4}
|
||||
|
||||
[delay]
|
||||
time=1500
|
||||
[/delay]
|
||||
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "Another platoon approaches..."
|
||||
[/message]
|
||||
|
||||
{SCROLL_TO 39 23}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1
|
||||
[/filter_side]
|
||||
x,y=37,22
|
||||
radius=3
|
||||
[/lift_fog]
|
||||
|
||||
{TROOPER "Heavy Infantryman" 38 22}
|
||||
{TROOPER "Heavy Infantryman" 38 21}
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Heavy Infantryman" 37 23}
|
||||
#else
|
||||
{TROOPER "Shock Trooper" 37 23}
|
||||
#endif
|
||||
|
||||
#ifdef HARD
|
||||
{TROOPER "Shock Trooper" 38 23}
|
||||
#else
|
||||
{TROOPER "Heavy Infantryman" 38 23}
|
||||
#endif
|
||||
|
||||
[move_unit_fake]
|
||||
type=$stored_Linneus.type
|
||||
side=$stored_Linneus.side
|
||||
x=39,37
|
||||
y=23,22
|
||||
[/move_unit_fake]
|
||||
[unstore_unit]
|
||||
variable=stored_Linneus
|
||||
[/unstore_unit]
|
||||
{CLEAR_VARIABLE stored_Linneus}
|
||||
|
||||
[delay]
|
||||
time=750
|
||||
[/delay]
|
||||
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "My henchmen and I shall pincer them from the other side of this path. When we are done, no one will fear the open roads and night sky more than the army of the usurper. Strike fast, strike silently... and leave no one alive."
|
||||
[/message]
|
||||
|
||||
[store_unit]
|
||||
[filter]
|
||||
id=Helicrom
|
||||
[/filter]
|
||||
variable=Helicrom
|
||||
kill=yes
|
||||
[/store_unit]
|
||||
[move_unit_fake]
|
||||
type=Shadow Lord
|
||||
side=2
|
||||
x=17,20
|
||||
y=22,18
|
||||
[/move_unit_fake]
|
||||
[kill]
|
||||
x,y=18,21
|
||||
[/kill]
|
||||
[move_unit_fake]
|
||||
type=Rogue Mage
|
||||
side=2
|
||||
x=18,20
|
||||
y=21,18
|
||||
[/move_unit_fake]
|
||||
[kill]
|
||||
x,y=18,22
|
||||
[/kill]
|
||||
[move_unit_fake]
|
||||
type=Shadow Mage
|
||||
side=2
|
||||
x=18,20
|
||||
y=22,18
|
||||
[/move_unit_fake]
|
||||
|
||||
[terrain]
|
||||
x=16
|
||||
y=21
|
||||
terrain=Rb
|
||||
[/terrain]
|
||||
[terrain]
|
||||
x=17,18
|
||||
y=22,22
|
||||
terrain=Gll^Em
|
||||
[/terrain]
|
||||
[terrain]
|
||||
x=18
|
||||
y=21
|
||||
terrain=Re
|
||||
[/terrain]
|
||||
[redraw][/redraw]
|
||||
|
||||
{SCROLL_TO 32 8}
|
||||
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1
|
||||
[/filter_side]
|
||||
x,y=32,8
|
||||
radius=4
|
||||
[/lift_fog]
|
||||
|
||||
[move_unit_fake]
|
||||
type=Shadow Lord
|
||||
side=2
|
||||
x=28,32
|
||||
y=11,8
|
||||
[/move_unit_fake]
|
||||
[unstore_unit]
|
||||
variable=Helicrom
|
||||
x,y=32,8
|
||||
[/unstore_unit]
|
||||
[move_unit_fake]
|
||||
type=Rogue Mage
|
||||
side=2
|
||||
x=28,31
|
||||
y=11,9
|
||||
[/move_unit_fake]
|
||||
{GENERIC_UNIT 2 (Rogue Mage) 31 9}
|
||||
[move_unit_fake]
|
||||
type=Shadow Mage
|
||||
side=2
|
||||
x=28,31
|
||||
y=11,9
|
||||
[/move_unit_fake]
|
||||
{GENERIC_UNIT 2 (Shadow Mage) 32 9}
|
||||
|
||||
[capture_village]
|
||||
[filter_side]
|
||||
side=2
|
||||
[/filter_side]
|
||||
x=26-39
|
||||
y=4-12
|
||||
[/capture_village]
|
||||
|
||||
[redraw]
|
||||
side=2
|
||||
clear_shroud=yes
|
||||
[/redraw]
|
||||
{CLEAR_VARIABLE Helicrom}
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - when you attack the bad guys for the first time they react
|
||||
#
|
||||
[event]
|
||||
name=attack
|
||||
[filter_second]
|
||||
side=3
|
||||
[/filter_second]
|
||||
[message]
|
||||
speaker=Linneus
|
||||
message= _ "It’s an ambush! Run!"
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - after 5 turns, send the second patrol
|
||||
#
|
||||
[event]
|
||||
name=turn 5
|
||||
|
||||
{SCROLL_TO 39 23}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1
|
||||
[/filter_side]
|
||||
x,y=37,22
|
||||
radius=3
|
||||
[/lift_fog]
|
||||
|
||||
{TROOPER "Spearman" 38 22}
|
||||
{TROOPER "Heavy Infantryman" 38 21}
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Spearman" 37 23}
|
||||
#else
|
||||
{TROOPER "Javelineer" 37 23}
|
||||
#endif
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Bowman" 39 23}
|
||||
#else
|
||||
{TROOPER "Longbowman" 39 23}
|
||||
#endif
|
||||
|
||||
#ifdef HARD
|
||||
{TROOPER "Shock Trooper" 38 23}
|
||||
#else
|
||||
{TROOPER "Heavy Infantryman" 38 23}
|
||||
#endif
|
||||
|
||||
[move_unit_fake]
|
||||
type=Swordsman
|
||||
side=3
|
||||
x=39,37
|
||||
y=23,22
|
||||
[/move_unit_fake]
|
||||
[unit]
|
||||
side=3
|
||||
type=Swordsman
|
||||
facing=sw
|
||||
canrecruit=yes
|
||||
x,y=37,22
|
||||
[/unit]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - after 11 turns, send the third patrol
|
||||
#
|
||||
[event]
|
||||
name=turn 11
|
||||
|
||||
{SCROLL_TO 39 23}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1
|
||||
[/filter_side]
|
||||
x,y=37,22
|
||||
radius=3
|
||||
[/lift_fog]
|
||||
|
||||
{TROOPER "Spearman" 38 22}
|
||||
{TROOPER "Heavy Infantryman" 38 21}
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Spearman" 37 23}
|
||||
#else
|
||||
{TROOPER "Javelineer" 37 23}
|
||||
#endif
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Heavy Infantryman" 39 23}
|
||||
#else
|
||||
{TROOPER "Shock Trooper" 39 23}
|
||||
#endif
|
||||
|
||||
#ifdef HARD
|
||||
{TROOPER "Longbowman" 38 23}
|
||||
#else
|
||||
{TROOPER "Bowman" 38 23}
|
||||
#endif
|
||||
|
||||
[move_unit_fake]
|
||||
type=Pikeman
|
||||
side=3
|
||||
x=39,37
|
||||
y=23,22
|
||||
[/move_unit_fake]
|
||||
[unit]
|
||||
side=3
|
||||
type=Pikeman
|
||||
facing=sw
|
||||
canrecruit=yes
|
||||
x,y=37,22
|
||||
[/unit]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - after 17 turns, send the fourth patrol
|
||||
#
|
||||
[event]
|
||||
name=turn 17
|
||||
|
||||
{SCROLL_TO 39 23}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1
|
||||
[/filter_side]
|
||||
x,y=37,22
|
||||
radius=3
|
||||
[/lift_fog]
|
||||
|
||||
{TROOPER "Shock Trooper" 38 22}
|
||||
{TROOPER "Heavy Infantryman" 38 21}
|
||||
{TROOPER "Swordsman" 37 23}
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Bowman" 39 23}
|
||||
#else
|
||||
{TROOPER "Longbowman" 39 23}
|
||||
#endif
|
||||
|
||||
#ifdef HARD
|
||||
{TROOPER "Shock Trooper" 38 23}
|
||||
#else
|
||||
{TROOPER "Heavy Infantryman" 38 23}
|
||||
#endif
|
||||
{TROOPER "Spearman" 39 22}
|
||||
|
||||
[move_unit_fake]
|
||||
type=Lieutenant
|
||||
side=3
|
||||
x=39,37
|
||||
y=23,22
|
||||
[/move_unit_fake]
|
||||
[unit]
|
||||
side=3
|
||||
type=Lieutenant
|
||||
facing=sw
|
||||
canrecruit=yes
|
||||
x,y=37,22
|
||||
[/unit]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - after 21 turns, send the fifth patrol
|
||||
# this one is a bit faster than the other patrols, so it'll be a bit more challenging
|
||||
#
|
||||
[event]
|
||||
name=turn 21
|
||||
|
||||
{SCROLL_TO 39 23}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1
|
||||
[/filter_side]
|
||||
x,y=37,22
|
||||
radius=3
|
||||
[/lift_fog]
|
||||
|
||||
{TROOPER "Duelist" 38 22}
|
||||
{TROOPER "Swordsman" 38 21}
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Fencer" 37 23}
|
||||
#else
|
||||
{TROOPER "Duelist" 37 23}
|
||||
#endif
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Spearman" 39 23}
|
||||
#else
|
||||
{TROOPER "Javelineer" 39 23}
|
||||
#endif
|
||||
|
||||
#ifdef HARD
|
||||
{TROOPER "Longbowman" 38 23}
|
||||
#else
|
||||
{TROOPER "Bowman" 38 23}
|
||||
#endif
|
||||
|
||||
{TROOPER "Duelist" 39 22}
|
||||
|
||||
[move_unit_fake]
|
||||
type=Master at Arms
|
||||
side=3
|
||||
x=39,37
|
||||
y=23,22
|
||||
[/move_unit_fake]
|
||||
[unit]
|
||||
side=3
|
||||
type=Master at Arms
|
||||
facing=sw
|
||||
canrecruit=yes
|
||||
x,y=37,22
|
||||
[/unit]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - Archarel says some stuff
|
||||
#
|
||||
[event]
|
||||
name=turn 10
|
||||
|
||||
{SCROLL_TO 7 4}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1,2
|
||||
[/filter_side]
|
||||
x,y=7,4
|
||||
radius=5
|
||||
[/lift_fog]
|
||||
|
||||
[message]
|
||||
speaker=Archarel
|
||||
message= _ "Several platoons of troops were supposed to arrive today. I wonder if something has happened to them."
|
||||
[/message]
|
||||
[/event]
|
||||
[event]
|
||||
name=turn 18
|
||||
|
||||
{SCROLL_TO 7 4}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1,2
|
||||
[/filter_side]
|
||||
x,y=7,4
|
||||
radius=5
|
||||
[/lift_fog]
|
||||
|
||||
[message]
|
||||
speaker=Archarel
|
||||
message= _ "Something about these woods seems quite unnatural. Perhaps we should stop sending our soldiers this way."
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
#define DEFEAT_TEXT
|
||||
{SCROLL_TO 7 4}
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1,2
|
||||
[/filter_side]
|
||||
x,y=7,4
|
||||
radius=5
|
||||
[/lift_fog]
|
||||
|
||||
[message]
|
||||
speaker=Archarel
|
||||
message= _ "Troops, to arms! These fugitive scum think they are above the law. We will show them the law!"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "With the outpost aware of our presence, we can no longer harry their reinforcements. I fear their forces will soon grow too powerful for us to resist."
|
||||
[/message]
|
||||
#enddef
|
||||
|
||||
#
|
||||
# End condition
|
||||
#
|
||||
[event]
|
||||
name=time over
|
||||
[if]
|
||||
[have_unit]
|
||||
side=3
|
||||
[/have_unit]
|
||||
[then]
|
||||
[message]
|
||||
speaker=narrator
|
||||
message= _ "The next morning, the local night patrol returned to the nearby outpost. They were surprised to see their fellow soldiers engaged in combat with the band of thugs of which they had heard so much."
|
||||
image="wesnoth-icon.png"
|
||||
[/message]
|
||||
|
||||
{DEFEAT_TEXT}
|
||||
|
||||
[endlevel]
|
||||
result=defeat
|
||||
[/endlevel]
|
||||
[/then]
|
||||
[else]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "What a bloody mess, but it is done. Their patrols are shattered and broken."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "A job well done, but the fight is far from over. We have only sacked a few of their platoons, but more will come. These tactics will not work forever."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "It seems to me that our only choice is to attack Halstead itself. If we wait, their armies will become invincible. If we can burn it to the ground before the Queen’s forces rally, we may yet be able to break their foothold in this province."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "Attack them directly? I thought you said there was no way we could fight them head on."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "The only other option is to flee, but just as you have chosen to fight to protect your village, we are not so keen on abandoning our home in these woods."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "So you’ll join us?"
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "We will."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Then it’s decided. We will attack the fort and raze it. Rest well tonight. Tomorrow’s battle will be a difficult one."
|
||||
[/message]
|
||||
|
||||
[modify_unit]
|
||||
[filter]
|
||||
side=2
|
||||
[/filter]
|
||||
side=1
|
||||
[/modify_unit]
|
||||
|
||||
[endlevel]
|
||||
result=victory
|
||||
bonus=yes
|
||||
{NEW_GOLD_CARRYOVER 40}
|
||||
[/endlevel]
|
||||
[/else]
|
||||
[/if]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Loss conditions
|
||||
#
|
||||
[event]
|
||||
name=moveto
|
||||
[filter]
|
||||
side=3
|
||||
x=1-10
|
||||
y=1-6
|
||||
[/filter]
|
||||
|
||||
[lift_fog]
|
||||
[filter_side]
|
||||
side=1,2
|
||||
[/filter_side]
|
||||
x,y=7,4
|
||||
radius=5
|
||||
[/lift_fog]
|
||||
|
||||
[message]
|
||||
speaker=unit
|
||||
message= _ "Lieutenant, we were assaulted by a band of outlaws en route to the outpost. We were only barely able to evade them and make it here!"
|
||||
[/message]
|
||||
|
||||
{DEFEAT_TEXT}
|
||||
|
||||
[endlevel]
|
||||
result=defeat
|
||||
[/endlevel]
|
||||
[/event]
|
||||
[event]
|
||||
name=sighted
|
||||
[filter]
|
||||
side=1
|
||||
[/filter]
|
||||
[filter_second]
|
||||
side=4
|
||||
[/filter_second]
|
||||
|
||||
[message]
|
||||
speaker=second_unit
|
||||
message= _ "Look there! Outlaws and bandits roam these woods, harrying our patrols!"
|
||||
[/message]
|
||||
|
||||
{DEFEAT_TEXT}
|
||||
|
||||
[endlevel]
|
||||
result=defeat
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=last breath
|
||||
[filter]
|
||||
id=Helicrom
|
||||
[/filter]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "This is the end for me..."
|
||||
[/message]
|
||||
[endlevel]
|
||||
result=defeat
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
{LIBERTY_DEATHS}
|
||||
[/scenario]
|
||||
|
||||
#undef TROOPER
|
||||
#undef DEFEAT_TEXT
|
|
@ -1,10 +1,10 @@
|
|||
#textdomain wesnoth-l
|
||||
[scenario]
|
||||
id=08_Glory
|
||||
id=07_Glory
|
||||
name= _ "Glory"
|
||||
next_scenario=09_Epilogue
|
||||
next_scenario=08_Epilogue
|
||||
victory_when_enemies_defeated=no
|
||||
map_file=campaigns/Liberty/maps/08_Glory.map
|
||||
map_file=campaigns/Liberty/maps/07_Glory.map
|
||||
{TURNS 48 45 40}
|
||||
{DEFAULT_SCHEDULE_AFTERNOON}
|
||||
|
||||
|
@ -36,15 +36,16 @@
|
|||
[/part]
|
||||
[/story]
|
||||
|
||||
{LIBERTY_BIGMAP {JOURNEY_08_NEW} }
|
||||
{LIBERTY_BIGMAP {JOURNEY_07_NEW} }
|
||||
|
||||
[side]
|
||||
side=1
|
||||
type=Highwayman
|
||||
id=Baldras
|
||||
recruit=Thug,Footpad,Poacher,Rogue Mage,Shadow Mage,Thief,Rogue
|
||||
canrecruit=yes
|
||||
controller=human
|
||||
gold=200
|
||||
{GOLD 450 350 250}
|
||||
team_name=good_guys
|
||||
user_team_name=_"Rebels"
|
||||
[/side]
|
||||
|
@ -139,36 +140,6 @@
|
|||
|
||||
[side]
|
||||
side=4
|
||||
type=Shadow Lord
|
||||
id=Helicrom
|
||||
name= _ "Helicrom"
|
||||
profile=portraits/helicrom.png
|
||||
canrecruit=yes
|
||||
facing=sw
|
||||
recruit=Shadow Mage,Fugitive,Rogue Mage,Rogue,Huntsman
|
||||
{GOLD 700 600 500}
|
||||
controller=ai
|
||||
[ai]
|
||||
recruitment_pattern=mixed fighter,mixed fighter,fighter,mixed fighter,archer
|
||||
[goal]
|
||||
[criteria]
|
||||
side=2
|
||||
[/criteria]
|
||||
value=10
|
||||
[/goal]
|
||||
|
||||
# Don't let side 4 accidentally move to a trapdoor
|
||||
[avoid]
|
||||
x=16,16,24,24
|
||||
y=13,19,13,19
|
||||
[/avoid]
|
||||
[/ai]
|
||||
team_name=good_guys
|
||||
user_team_name=_"Rebels"
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
side=5
|
||||
no_leader=yes
|
||||
{GOLD 380 260 160}
|
||||
controller=ai
|
||||
|
@ -277,36 +248,20 @@
|
|||
|
||||
{MODIFY_TERRAIN Gg (5) (3)}
|
||||
|
||||
#If the shadow gang is supposed to come help, then leave things
|
||||
# otherwise kill the shadow lord and erase his castle
|
||||
[if]
|
||||
[variable]
|
||||
name=Helicrom_status
|
||||
numerical_equals=3
|
||||
[/variable]
|
||||
[then]
|
||||
[objectives]
|
||||
side=1
|
||||
[objective]
|
||||
description= _ "Destroy the stronghold of Halstead"
|
||||
condition=win
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Baldras"
|
||||
condition=lose
|
||||
[/objective]
|
||||
[objectives]
|
||||
side=1
|
||||
[objective]
|
||||
description= _ "Destroy the stronghold of Halstead"
|
||||
condition=win
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Baldras"
|
||||
condition=lose
|
||||
[/objective]
|
||||
|
||||
{TURNS_RUN_OUT}
|
||||
{IS_LAST_SCENARIO}
|
||||
[/objectives]
|
||||
[/then]
|
||||
[else]
|
||||
[kill]
|
||||
side=4
|
||||
[/kill]
|
||||
{MODIFY_TERRAIN Gs^Fds (25-28) (37-40)}
|
||||
[/else]
|
||||
[/if]
|
||||
{TURNS_RUN_OUT}
|
||||
{IS_LAST_SCENARIO}
|
||||
[/objectives]
|
||||
[/event]
|
||||
|
||||
#
|
||||
|
@ -319,6 +274,9 @@
|
|||
[recall]
|
||||
id=Harper
|
||||
[/recall]
|
||||
[recall]
|
||||
id=Helicrom
|
||||
[/recall]
|
||||
|
||||
{MAKE_LOYAL_NORMAL Harper}
|
||||
|
||||
|
@ -349,61 +307,26 @@
|
|||
speaker=Harper
|
||||
message= _ "I don’t see how we can bring it down. They are already invincible in there!"
|
||||
[/message]
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=Helicrom_status
|
||||
numerical_equals=3
|
||||
[/variable]
|
||||
[then]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "No, my young friend. Halstead indeed has a weakness. Among my many assets is access to a wealth of secrets few in Wesnoth are privy to."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "You see, the mountain on which the fort was built is solid, but the castle on top has been built and rebuilt many times over the ages. It is not as indestructible as you might think."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Beneath the structure is a system of catacombs that connects all four towers to the central keep. Over time, after many wars, supports were required to hold up the middle."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "So... we can knock out the supports and bring down the stronghold of Halstead. Would it really work?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "I believe it will. Each tower has a passage down to the catacombs. If we can reach the center of each tower, one of our men can escape down to the bowels of the mountain and destroy its support. I am sure we will need to demolish no less than all four supports to raze the fortress."
|
||||
[/message]
|
||||
[/then]
|
||||
[else]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "No, young one. Halstead indeed has a weakness."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "How do you know?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "When I was a boy, my father — your grandfather — brought your mother and me to live in Aldril after orcs massacred many in our village. We grew up around here, and we learned many things."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Beneath the structure is a system of catacombs that connects all four towers to the central keep. The catacombs growing over time, combined with centuries of war, made it necessary to install supports to hold up the middle."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "So... we can knock out the supports and bring down the stronghold of Halstead. Would it really work?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "I believe it will. Each tower has a passage down to the catacombs. If we can reach the center of each tower, one of our men can escape down to the bowels of the mountain and destroy its support. I am sure we will need to demolish no less than all four supports to raze the fortress."
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "No, my young friend. Halstead indeed has a weakness. Among my many assets is access to a wealth of secrets few in Wesnoth are privy to."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "You see, the mountain on which the fort was built is solid, but the castle on top has been built and rebuilt many times over the ages. It is not as indestructible as you might think."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "Beneath the structure is a system of catacombs that connects all four towers to the central keep. Over time, after many wars, supports were required to hold up the middle."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "So... we can knock out the supports and bring down the stronghold of Halstead. Would it really work?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Helicrom
|
||||
message= _ "I believe it will. Each tower has a passage down to the catacombs. If we can reach the center of each tower, one of our men can escape down to the bowels of the mountain and destroy its support. I am sure we will need to demolish no less than all four supports to raze the fortress."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "I hope you’re right. In a few hours, night will fall, and we will find out."
|
||||
|
@ -457,7 +380,7 @@
|
|||
[/if]
|
||||
|
||||
[unit]
|
||||
side=5
|
||||
side=4
|
||||
type=Paladin
|
||||
id=Sir Gwydion
|
||||
name= _ "Sir Gwydion"
|
||||
|
@ -467,10 +390,10 @@
|
|||
|
||||
{MOVE_UNIT (id=Sir Gwydion) 5 3}
|
||||
|
||||
{GENERIC_UNIT 5 (Lancer) 4 3}
|
||||
{GENERIC_UNIT 5 (Lancer) 6 2}
|
||||
{GENERIC_UNIT 5 (Knight) 4 2}
|
||||
{GENERIC_UNIT 5 (Knight) 5 2}
|
||||
{GENERIC_UNIT 4 (Lancer) 4 3}
|
||||
{GENERIC_UNIT 4 (Lancer) 6 2}
|
||||
{GENERIC_UNIT 4 (Knight) 4 2}
|
||||
{GENERIC_UNIT 4 (Knight) 5 2}
|
||||
#
|
||||
#
|
||||
[message]
|
||||
|
@ -486,7 +409,7 @@
|
|||
{MODIFY_TERRAIN Ke (5) (3)}
|
||||
|
||||
[set_recruit]
|
||||
side=5
|
||||
side=4
|
||||
recruit=Knight,Lancer
|
||||
[/set_recruit]
|
||||
|
||||
|
@ -572,7 +495,7 @@
|
|||
side=2
|
||||
[/filter]
|
||||
[filter_second]
|
||||
side=1,4,5
|
||||
side=1,4
|
||||
[/filter_second]
|
||||
[message]
|
||||
speaker=Dommel
|
||||
|
@ -592,7 +515,7 @@
|
|||
radius=4
|
||||
[/filter_location]
|
||||
|
||||
side=1,3,4,5
|
||||
side=1,3,4
|
||||
[/filter]
|
||||
[message]
|
||||
speaker=Dommel
|
||||
|
@ -895,7 +818,7 @@ Uu, Uu, Chr, Uh, Re, Uu, Uu, Uh, Uu, Chr, Chr
|
|||
# Deaths - Dommel
|
||||
#
|
||||
|
||||
# If either the orcs or Helicrom's guys happen to kill Dommel, we pretend
|
||||
# If the orcs happen to kill Dommel, we pretend
|
||||
# that Baldras killed him so that the dialogue makes more sense
|
||||
[event]
|
||||
name=last breath
|
||||
|
@ -905,7 +828,7 @@ Uu, Uu, Chr, Uh, Re, Uu, Uu, Uh, Uu, Chr, Chr
|
|||
[/filter]
|
||||
|
||||
[filter_second]
|
||||
side=3,4
|
||||
side=3
|
||||
[/filter_second]
|
||||
|
||||
[fire_event]
|
||||
|
@ -929,7 +852,7 @@ Uu, Uu, Chr, Uh, Re, Uu, Uu, Uh, Uu, Chr, Chr
|
|||
[/filter]
|
||||
|
||||
[filter_second]
|
||||
side=1,5
|
||||
side=1,4
|
||||
[/filter_second]
|
||||
|
||||
[message]
|
|
@ -1,370 +0,0 @@
|
|||
#textdomain wesnoth-l
|
||||
[scenario]
|
||||
id=07_The_Hunters
|
||||
name= _ "The Hunters"
|
||||
next_scenario=08_Glory
|
||||
map_file=campaigns/Liberty/maps/07_The_Hunters.map
|
||||
{TURNS 36 31 26}
|
||||
{DEFAULT_SCHEDULE_DUSK}
|
||||
|
||||
{INTRO_AND_SCENARIO_MUSIC breaking_the_chains.ogg vengeful.ogg}
|
||||
{EXTRA_SCENARIO_MUSIC battle.ogg}
|
||||
{EXTRA_SCENARIO_MUSIC siege_of_laurelmor.ogg}
|
||||
{EXTRA_SCENARIO_MUSIC wanderer.ogg}
|
||||
{EXTRA_SCENARIO_MUSIC knalgan_theme.ogg}
|
||||
|
||||
[story]
|
||||
[part]
|
||||
story= _ "Baldras and his men quickly left the Grey Woods, not entirely convinced of their safety even after eradicating the lich."
|
||||
[/part]
|
||||
[part]
|
||||
story= _ "As they marched, many men and women from the small hamlets peppering the area around Carcyn and the Grey Woods approached the group, asking to join them. The ascent of the Queen had cast an uneasy pall over the citizens of Wesnoth, and some of them were willing to resist it."
|
||||
[/part]
|
||||
[part]
|
||||
story= _ "Knowing they too would be labeled criminals, he reluctantly accepted their help.
|
||||
<b>Note:</b> Baldras is now able to recruit Outlaws."
|
||||
[/part]
|
||||
[part]
|
||||
story= _ "Camped at the edge of the forest, they quietly observed substantial troop movements coming from the direction of Aldril, a nearby city, and marching to the northwest. Unsure what to make of it, they debated their next course of action..."
|
||||
[/part]
|
||||
[/story]
|
||||
|
||||
{LIBERTY_BIGMAP {JOURNEY_07_NEW} }
|
||||
|
||||
[side]
|
||||
side=1
|
||||
type=Highwayman
|
||||
id=Baldras
|
||||
canrecruit=yes
|
||||
controller=human
|
||||
recruit=Thug,Footpad,Poacher,Outlaw
|
||||
{GOLD 200 150 100}
|
||||
team_name=good_guys
|
||||
user_team_name=_"Rebels"
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
side=2
|
||||
type=Royal Guard
|
||||
id=Archarel
|
||||
name= _ "Archarel"
|
||||
canrecruit=yes
|
||||
recruit=Swordsman,Red Mage,Horseman,Bowman,Cavalryman
|
||||
{GOLD 200 250 300}
|
||||
controller=ai
|
||||
[ai]
|
||||
recruitment_pattern=mixed fighter,fighter,fighter,archer,scout
|
||||
village_value=0
|
||||
[/ai]
|
||||
team_name=bad_guys
|
||||
user_team_name=_"Asheviere"
|
||||
{FLAG_VARIANT loyalist}
|
||||
defeat_condition=no_units_left
|
||||
[/side]
|
||||
|
||||
[side]
|
||||
side=3
|
||||
type=Iron Mauler
|
||||
id=Linneus
|
||||
name= _ "Linneus"
|
||||
facing=sw
|
||||
canrecruit=yes
|
||||
recruit=Heavy Infantryman,Mage,Spearman
|
||||
gold=100
|
||||
controller=ai
|
||||
team_name=bad_guys
|
||||
user_team_name=_"Asheviere"
|
||||
{FLAG_VARIANT loyalist}
|
||||
defeat_condition=no_units_left
|
||||
[/side]
|
||||
|
||||
[event]
|
||||
name=prestart
|
||||
|
||||
{PLACE_IMAGE scenery/rock1.png 12 22}
|
||||
|
||||
[objectives]
|
||||
side=1
|
||||
[objective]
|
||||
description= _ "Kill all enemy forces"
|
||||
condition=win
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Baldras"
|
||||
condition=lose
|
||||
[/objective]
|
||||
[objective]
|
||||
description= _ "Death of Harper"
|
||||
condition=lose
|
||||
[/objective]
|
||||
|
||||
{TURNS_RUN_OUT}
|
||||
|
||||
[gold_carryover]
|
||||
bonus=yes
|
||||
carryover_percentage=40
|
||||
[/gold_carryover]
|
||||
[/objectives]
|
||||
|
||||
#Hide both leaders initially
|
||||
[store_unit]
|
||||
variable=stored_Archarel
|
||||
kill=yes
|
||||
[filter]
|
||||
id=Archarel
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
[store_unit]
|
||||
variable=stored_Linneus
|
||||
kill=yes
|
||||
[filter]
|
||||
id=Linneus
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
#set up units
|
||||
[recall]
|
||||
id=Harper
|
||||
[/recall]
|
||||
{NAMED_LOYAL_UNIT 1 Outlaw 30 17 Jingo ( _ "Jingo")}
|
||||
{NAMED_LOYAL_UNIT 1 Outlaw 32 17 Majel ( _ "Majel")}
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Starting conversation and actions
|
||||
#
|
||||
[event]
|
||||
name=start
|
||||
|
||||
[allow_recruit]
|
||||
side=1
|
||||
type=Outlaw
|
||||
[/allow_recruit]
|
||||
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "The words of Lord Maddock have weighed heavy on me these past few days. It has dawned on me that we can never win. We will never defeat the entire army of Wesnoth. Idiocy! If the noble lord of Elensefar is unwilling to resist the Queen, how should I ever expect to?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "What’s worse is that she appears to have taken notice. We have counted five platoons of heavy infantry marching towards the garrison in just the last two hours."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "The garrison. The towers of Halstead are more than a garrison, nephew, they are a fortress. They used to protect this area from the enemies of Wesnoth; I never imagined they would house its enemies."
|
||||
[/message]
|
||||
|
||||
{NAMED_LOYAL_UNIT 1 Dragoon 11 1 (Pitcher) ( _ "Pitcher")}
|
||||
|
||||
{MOVE_UNIT id=Pitcher 20 14}
|
||||
|
||||
[message]
|
||||
speaker=Pitcher
|
||||
message={WHISPER _"whisper^<i>Baldras!</i>"}
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "Uncle, he wears the crest of the Elense. We should answer."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Rider, hush before we are discovered! Come to us, but quietly!"
|
||||
[/message]
|
||||
|
||||
{MOVE_UNIT id=Pitcher 28 18}
|
||||
|
||||
[message]
|
||||
speaker=Pitcher
|
||||
message= _ "Master Baldras, I bring news from the north. During the past week, several patrols have again ventured across the Great River into Annuvin. A woman named Relana opposed them with a small militia. She was victorious."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Majel
|
||||
message= _ "This is surely good news!"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Pitcher
|
||||
message= _ "I am afraid it is not. The Queen is sending a branch of her main field army directly from Weldyn. As soon as they arrive, they will burn every village to the ground. No one will live."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "The troop movements all make sense now. We must stop this army from reaching the garrison. We cannot swallow them whole, but we can gnaw away at them. They mustn’t take one step without us being there to harass and delay them. When they reach Halstead they must be exhausted or dying."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Harper
|
||||
message= _ "You just said we can’t beat their entire army!"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Do you propose surrender? It’s this or nothing. All we can do is see it through to the end."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Pitcher
|
||||
message= _ "May you prevail in peace and war. I must depart before I am seen so far from my Lord’s borders."
|
||||
[/message]
|
||||
|
||||
{MOVE_UNIT id=Pitcher 20 14}
|
||||
|
||||
[kill]
|
||||
id=Pitcher
|
||||
[/kill]
|
||||
|
||||
[message]
|
||||
speaker=Jingo
|
||||
message= _ "Another platoon approaches..."
|
||||
[/message]
|
||||
|
||||
#define TROOPER TYPE TO_X TO_Y
|
||||
[move_unit_fake]
|
||||
type={TYPE}
|
||||
side=3
|
||||
x=36,{TO_X}
|
||||
y=23,{TO_Y}
|
||||
[/move_unit_fake]
|
||||
{GENERIC_UNIT 3 {TYPE} {TO_X} {TO_Y}}
|
||||
[+unit]
|
||||
facing=sw
|
||||
[/unit]
|
||||
#enddef
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Heavy Infantryman" 34 23}
|
||||
#else
|
||||
{TROOPER "Shock Trooper" 34 23}
|
||||
#endif
|
||||
|
||||
{TROOPER "Heavy Infantryman" 35 23}
|
||||
{TROOPER "Heavy Infantryman" 35 24}
|
||||
|
||||
#ifdef EASY
|
||||
{TROOPER "Heavy Infantryman" 34 22}
|
||||
#else
|
||||
{TROOPER "Shock Trooper" 34 22}
|
||||
#endif
|
||||
|
||||
{TROOPER "Heavy Infantryman" 36 24}
|
||||
|
||||
#ifdef HARD
|
||||
{TROOPER "Shock Trooper" 36 23}
|
||||
#else
|
||||
{TROOPER "Heavy Infantryman" 36 23}
|
||||
#endif
|
||||
|
||||
[move_unit_fake]
|
||||
type=$stored_Linneus.type
|
||||
side=$stored_Linneus.side
|
||||
x=36,32
|
||||
y=23,22
|
||||
[/move_unit_fake]
|
||||
[unstore_unit]
|
||||
variable=stored_Linneus
|
||||
[/unstore_unit]
|
||||
{CLEAR_VARIABLE stored_Linneus}
|
||||
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "When we are done, no one will fear the open roads and night sky more than the army of the usurper. Strike fast, strike silently... and leave no one alive."
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - when you attack the bad guys for the first time they react
|
||||
#
|
||||
[event]
|
||||
name=attack
|
||||
[filter_second]
|
||||
side=3
|
||||
[/filter_second]
|
||||
[message]
|
||||
speaker=Linneus
|
||||
message= _ "It’s an ambush! Hold your ground!"
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - after 4 turns, the outpost detachment returns to fight you
|
||||
#
|
||||
[event]
|
||||
name=turn 4
|
||||
[message]
|
||||
speaker=narrator
|
||||
message= _ "The next morning, the local night patrol returned to the nearby outpost. They were surprised to see their fellow soldiers engaged in combat with the band of thugs of which they had heard so much."
|
||||
image="wesnoth-icon.png"
|
||||
[/message]
|
||||
[unstore_unit]
|
||||
variable=stored_Archarel
|
||||
[/unstore_unit]
|
||||
[message]
|
||||
speaker=Archarel
|
||||
message= _ "Troops, to arms! These peasant scum think they are above the law. We will show them the law!"
|
||||
[/message]
|
||||
{CLEAR_VARIABLE stored_Archarel}
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Special Event - don't step on the fire
|
||||
#
|
||||
[event]
|
||||
name=moveto
|
||||
[allow_undo]
|
||||
[/allow_undo]
|
||||
[filter]
|
||||
x,y=31,18
|
||||
[/filter]
|
||||
[message]
|
||||
speaker=unit
|
||||
message= _ "Ow! Fire hot! No step in fire!"
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Victory
|
||||
#
|
||||
[event]
|
||||
name=enemies defeated
|
||||
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "What a bloody mess. We must attack Halstead next. If we wait, they will become invincible. If we can burn it to the ground before that happens, our people may have a chance. Rest well tonight, because tomorrow’s battle will decide the fate of our homes, our families, and our freedom."
|
||||
[/message]
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=Helicrom_status
|
||||
numerical_equals=3
|
||||
[/variable]
|
||||
[then]
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "Send word to Helicrom that we are ready. It is time for him to repay his debt."
|
||||
[/message]
|
||||
[/then]
|
||||
[/if]
|
||||
|
||||
{CLEAR_VARIABLE stored_Archarel}
|
||||
|
||||
[endlevel]
|
||||
result=victory
|
||||
bonus=yes
|
||||
{NEW_GOLD_CARRYOVER 40}
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
#
|
||||
# Loss conditions - turns run out
|
||||
#
|
||||
[event]
|
||||
name=time over
|
||||
[message]
|
||||
speaker=Baldras
|
||||
message= _ "We have spent too much time here. Surely the entire Wesnoth army marches on our position. We are done for!"
|
||||
[/message]
|
||||
[endlevel]
|
||||
result=defeat
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
{LIBERTY_DEATHS}
|
||||
|
||||
{VILLAGE_BURNED}
|
||||
[/scenario]
|
||||
|
||||
#undef TROOPER
|
|
@ -1,6 +1,6 @@
|
|||
#textdomain wesnoth-l
|
||||
[scenario]
|
||||
id=09_Epilogue
|
||||
id=08_Epilogue
|
||||
name= _ "Liberty — Epilogue"
|
||||
{NO_MAP_DATA}
|
||||
turns=10
|
|
@ -114,9 +114,12 @@
|
|||
{NEW_JOURNEY 685 417}
|
||||
{NEW_JOURNEY 687 438}
|
||||
{NEW_JOURNEY 688 458}
|
||||
{NEW_JOURNEY 695 478}
|
||||
{NEW_JOURNEY 710 491}
|
||||
{NEW_BATTLE 729 499}
|
||||
{NEW_JOURNEY 689 477}
|
||||
{NEW_JOURNEY 685 496}
|
||||
{NEW_JOURNEY 676 515}
|
||||
{NEW_JOURNEY 665 528}
|
||||
{NEW_JOURNEY 650 540}
|
||||
{NEW_BATTLE 630 543}
|
||||
#enddef
|
||||
|
||||
#define JOURNEY_06_OLD
|
||||
|
@ -124,44 +127,20 @@
|
|||
{OLD_JOURNEY 685 417}
|
||||
{OLD_JOURNEY 687 438}
|
||||
{OLD_JOURNEY 688 458}
|
||||
{OLD_JOURNEY 695 478}
|
||||
{OLD_JOURNEY 710 491}
|
||||
{OLD_BATTLE 729 499}
|
||||
{OLD_JOURNEY 689 477}
|
||||
{OLD_JOURNEY 685 496}
|
||||
{OLD_JOURNEY 676 515}
|
||||
{OLD_JOURNEY 665 528}
|
||||
{OLD_JOURNEY 648 540}
|
||||
{OLD_BATTLE 626 543}
|
||||
#enddef
|
||||
|
||||
#define JOURNEY_07_NEW
|
||||
{JOURNEY_06_OLD}
|
||||
{NEW_JOURNEY 710 491}
|
||||
{NEW_JOURNEY 695 478}
|
||||
{NEW_JOURNEY 677 470}
|
||||
{NEW_JOURNEY 657 466}
|
||||
{NEW_JOURNEY 638 467}
|
||||
{NEW_JOURNEY 621 474}
|
||||
{NEW_JOURNEY 607 487}
|
||||
{NEW_JOURNEY 597 504}
|
||||
{NEW_JOURNEY 593 524}
|
||||
{NEW_BATTLE 598 543}
|
||||
#enddef
|
||||
|
||||
#define JOURNEY_07_OLD
|
||||
{JOURNEY_06_OLD}
|
||||
{OLD_JOURNEY 710 491}
|
||||
{OLD_JOURNEY 695 478}
|
||||
{OLD_JOURNEY 677 470}
|
||||
{OLD_JOURNEY 657 466}
|
||||
{OLD_JOURNEY 638 467}
|
||||
{OLD_JOURNEY 621 474}
|
||||
{OLD_JOURNEY 607 487}
|
||||
{OLD_JOURNEY 597 504}
|
||||
{OLD_JOURNEY 593 524}
|
||||
{OLD_BATTLE 598 543}
|
||||
#enddef
|
||||
|
||||
#define JOURNEY_08_NEW
|
||||
{JOURNEY_07_OLD}
|
||||
{NEW_JOURNEY 593 524}
|
||||
{NEW_JOURNEY 576 511}
|
||||
{NEW_JOURNEY 555 501}
|
||||
{NEW_JOURNEY 533 492}
|
||||
{NEW_JOURNEY 608 534}
|
||||
{NEW_JOURNEY 591 524}
|
||||
{NEW_JOURNEY 574 511}
|
||||
{NEW_JOURNEY 553 501}
|
||||
{NEW_JOURNEY 531 492}
|
||||
{NEW_BATTLE 520 476}
|
||||
#enddef
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
id=2_Tutorial
|
||||
name= _ "Wesnoth Tutorial — Part II"
|
||||
map_file=campaigns/tutorial/maps/02_Tutorial_part_2.map
|
||||
turns=30
|
||||
turns=36
|
||||
experience_modifier=100
|
||||
|
||||
{DEFAULT_SCHEDULE}
|
||||
|
@ -19,7 +19,7 @@
|
|||
side=1
|
||||
controller=human
|
||||
recruit=Elvish Fighter,Elvish Archer,Elvish Shaman
|
||||
gold=123
|
||||
gold=120
|
||||
save_id=human_player
|
||||
persistent=yes
|
||||
team_name=player
|
||||
|
@ -38,7 +38,7 @@
|
|||
side=2
|
||||
controller=ai
|
||||
recruit=Orcish Grunt,Wolf Rider,Orcish Archer
|
||||
gold=123
|
||||
gold=100
|
||||
team_name=orcs
|
||||
user_team_name= _ "team_name^Orcs"
|
||||
|
||||
|
@ -56,10 +56,7 @@
|
|||
x,y=15,12
|
||||
ai_special=guardian
|
||||
facing=nw
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_INTELLIGENT}
|
||||
[/modifications]
|
||||
random_traits=no
|
||||
[/unit]
|
||||
|
||||
[ai]
|
||||
|
@ -828,7 +825,7 @@ Please report the bug."
|
|||
[/event]
|
||||
|
||||
[event]
|
||||
name=turn 18
|
||||
name=turn 28
|
||||
|
||||
[message]
|
||||
speaker=Galdrad
|
||||
|
@ -1128,7 +1125,7 @@ Please report the bug."
|
|||
side=1
|
||||
[filter_location]
|
||||
x,y=38,5
|
||||
radius=5
|
||||
radius=6
|
||||
[/filter_location]
|
||||
[/filter]
|
||||
|
||||
|
|
|
@ -556,7 +556,7 @@ if wesnoth.kernel_type() == "Game Lua Kernel" then
|
|||
end
|
||||
|
||||
--[========[Units module]========]
|
||||
|
||||
|
||||
wesnoth.units.scroll_to = wesnoth.interface.scroll_to_hex
|
||||
|
||||
--! Modifies all the units satisfying the given @a filter.
|
||||
|
@ -576,7 +576,7 @@ if wesnoth.kernel_type() == "Game Lua Kernel" then
|
|||
|
||||
function wesnoth.units.find_attack(unit, filter)
|
||||
for i, atk in ipairs(unit.attacks) do
|
||||
if atk:matches(filter) then return atk end
|
||||
if atk:matches(filter) then return atk, i end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -588,18 +588,18 @@ if wesnoth.kernel_type() == "Game Lua Kernel" then
|
|||
end
|
||||
return res
|
||||
end
|
||||
|
||||
|
||||
function wesnoth.units.chance_to_be_hit(...)
|
||||
return 100 - wesnoth.units.defense_on(...)
|
||||
end
|
||||
|
||||
|
||||
-- Deprecated function
|
||||
function wesnoth.units.resistance(...)
|
||||
return 100 - wesnoth.units.resistance_against(...)
|
||||
end
|
||||
|
||||
--[========[Sides module]========]
|
||||
|
||||
|
||||
local sides_mt = {
|
||||
__metatable = "sides",
|
||||
__index = function(_, key)
|
||||
|
@ -613,7 +613,7 @@ if wesnoth.kernel_type() == "Game Lua Kernel" then
|
|||
end
|
||||
}
|
||||
setmetatable(wesnoth.sides, sides_mt)
|
||||
|
||||
|
||||
-- Deprecated functions
|
||||
function wesnoth.set_side_variable(side, var, val)
|
||||
wesnoth.sides[side].variables[var] = val
|
||||
|
@ -636,12 +636,12 @@ else
|
|||
return self[key]
|
||||
end
|
||||
}
|
||||
|
||||
|
||||
local function tovconfig_fake(cfg)
|
||||
ensure_config(cfg)
|
||||
return setmetatable(cfg, fake_vconfig_mt)
|
||||
end
|
||||
|
||||
|
||||
wesnoth.tovconfig = wesnoth.deprecate_api('wesnoth.tovconfig', 'wml.valid or wml.interpolate', 1, nil, tovconfig_fake, 'tovconfig is now deprecated in plugin or map generation contexts; if you need to check whether a table is valid as a WML object, use wml.valid instead, and use wml.interpolate if you need to substitute variables into a WML object.')
|
||||
wml.tovconfig = wesnoth.deprecate_api('wml.tovconfig', 'wml.valid', 1, nil, tovconfig_fake, 'tovconfig is now deprecated in plugin or map generation contexts; if you need to check whether a table is valid as a WML object, use wml.valid instead.')
|
||||
wml.literal = wesnoth.deprecate_api('wml.literal', '(no replacement)', 1, nil, wml.literal, 'Since vconfigs are not supported outside of the game kernel, this function is redundant and will be removed from plugin and map generation contexts. It will continue to work in the game kernel.')
|
||||
|
@ -709,7 +709,7 @@ if wesnoth.kernel_type() == "Game Lua Kernel" then
|
|||
-- No deprecation for these since since they're not actually public API yet
|
||||
wesnoth.color_adjust = wesnoth.interface.color_adjust
|
||||
wesnoth.set_menu_item = wesnoth.interface.set_menu_item
|
||||
wesnoth.clear_menu_item = wesnoth.interface.clear_menu_item
|
||||
wesnoth.clear_menu_item = wesnoth.interface.clear_menu_item
|
||||
-- Units module
|
||||
wesnoth.match_unit = wesnoth.deprecate_api('wesnoth.match_unit', 'wesnoth.units.matches', 1, nil, wesnoth.units.matches)
|
||||
wesnoth.put_recall_unit = wesnoth.deprecate_api('wesnoth.put_recall_unit', 'wesnoth.units.to_recall', 1, nil, wesnoth.units.to_recall)
|
||||
|
|
|
@ -205,8 +205,7 @@ if __name__ == "__main__":
|
|||
return uploads, version
|
||||
|
||||
def fixup(column):
|
||||
column = column.replace("\n", "\\n")
|
||||
return column
|
||||
return column.replace("\n", "\\n").replace("\t", "\\t")
|
||||
|
||||
campaign_list = None
|
||||
|
||||
|
@ -219,7 +218,6 @@ if __name__ == "__main__":
|
|||
for campaign in campaigns.get_all(tag = "campaign"):
|
||||
print(campaign.debug())
|
||||
else:
|
||||
column_sizes = [10, 5, 10, 7, 8, 8, 10, 5, 10, 13]
|
||||
columns = [["type", "name", "title", "author",
|
||||
"version", "uploads", "downloads",
|
||||
"size", "timestamp", "translate"]]
|
||||
|
@ -236,13 +234,8 @@ if __name__ == "__main__":
|
|||
time.ctime(int(campaign.get_text_val("timestamp", "0"))),
|
||||
campaign.get_text_val("translate", "?")]
|
||||
columns.append(column)
|
||||
for i, s in enumerate(column_sizes):
|
||||
if 1 + len(column[i]) > s:
|
||||
column_sizes[i] = 1 + len(column[i])
|
||||
for c in columns:
|
||||
for i, f in enumerate(c):
|
||||
sys.stdout.write(fixup(f).ljust(column_sizes[i]))
|
||||
sys.stdout.write("\n")
|
||||
print(*map(fixup, c), sep="\t", end="\n")
|
||||
print_messages(data)
|
||||
else:
|
||||
sys.stderr.write("Could not connect.\n")
|
||||
|
|
|
@ -219,11 +219,13 @@ namespace
|
|||
}
|
||||
|
||||
std::vector<std::string> allowed = ai_advancement.get_advancements(u);
|
||||
if(!allowed.empty()){
|
||||
std::string pick = allowed[randomness::generator->get_random_int(0, allowed.size() - 1)];
|
||||
int res_new = get_advancement_index(*u, pick);
|
||||
for(const auto& adv_id : allowed) {
|
||||
int res_new = get_advancement_index(*u, adv_id);
|
||||
if(res_new != -1) {
|
||||
// if the advancement ids were really unique we could also make this function return the
|
||||
// advancements id instead of its index. But i dont think there are guaraenteed to be unique.
|
||||
res = res_new;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue