Ramaraunt1

Untitled

Jan 16th, 2017
505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 MB | None | 0 0
  1. # -*- coding: cp1254 -*-
  2. from header_common import *
  3. from header_operations import *
  4. from module_constants import *
  5. from module_constants import *
  6. from header_parties import *
  7. from header_skills import *
  8. from header_mission_templates import *
  9. from header_items import *
  10. from header_triggers import *
  11. from header_terrain_types import *
  12. from header_music import *
  13. from header_map_icons import *
  14. from header_presentations import *
  15. from ID_animations import *
  16.  
  17.  
  18. ####################################################################################################################
  19. # scripts is a list of script records.
  20. # Each script record contns the following two fields:
  21. # 1) Script id: The prefix "script_" will be inserted when referencing scripts.
  22. # 2) Operation block: This must be a valid operation block. See header_operations.py for reference.
  23. ####################################################################################################################
  24.  
  25. scripts = [
  26.  
  27.  
  28. #script_game_start:
  29. # This script is called when a new game is started
  30. # INPUT: none
  31. ("game_start",
  32. [
  33. (faction_set_slot, "fac_player_supporters_faction", slot_faction_state, sfs_inactive),
  34. (assign, "$g_player_luck", 200),
  35. (assign, "$g_player_luck", 200),
  36. (troop_set_slot, "trp_player", slot_troop_occupation, slto_kingdom_hero),
  37. (store_random_in_range, ":starting_training_ground", training_grounds_begin, training_grounds_end),
  38. (party_relocate_near_party, "p_main_party", ":starting_training_ground", 3),
  39. (str_store_troop_name, s5, "trp_player"),
  40. (party_set_name, "p_main_party", s5),
  41. (call_script, "script_update_party_creation_random_limits"),
  42. (assign, "$g_player_party_icon", -1),
  43.  
  44. #Warband changes begin -- set this early
  45. (try_for_range, ":npc", 0, kingdom_ladies_end),
  46. (this_or_next|eq, ":npc", "trp_player"),
  47. (is_between, ":npc", active_npcs_begin, kingdom_ladies_end),
  48. (troop_set_slot, ":npc", slot_troop_father, -1),
  49. (troop_set_slot, ":npc", slot_troop_mother, -1),
  50. (troop_set_slot, ":npc", slot_troop_guardian, -1),
  51. (troop_set_slot, ":npc", slot_troop_spouse, -1),
  52. (troop_set_slot, ":npc", slot_troop_betrothed, -1),
  53. (troop_set_slot, ":npc", slot_troop_prisoner_of_party, -1),
  54. (troop_set_slot, ":npc", slot_lady_last_suitor, -1),
  55. (troop_set_slot, ":npc", slot_troop_stance_on_faction_issue, -1),
  56.  
  57. (store_random_in_range, ":decision_seed", 0, 10000),
  58. (troop_set_slot, ":npc", slot_troop_set_decision_seed, ":decision_seed"), #currently not used
  59. (troop_set_slot, ":npc", slot_troop_temp_decision_seed, ":decision_seed"), #currently not used, holds for at least 24 hours
  60. (try_end),
  61.  
  62. (assign, "$g_lord_long_term_count", 0),
  63.  
  64. (call_script, "script_initialize_banner_info"),
  65. (call_script, "script_initialize_item_info"),
  66. (call_script, "script_initialize_aristocracy"),
  67. (call_script, "script_initialize_npcs"),
  68. (assign, "$disable_npc_complaints", 0),
  69. #NPC companion changes end
  70.  
  71. # Setting random feast time
  72. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  73. (store_random_in_range, ":last_feast_time", 0, 312), #240 + 72
  74. (val_mul, ":last_feast_time", -1),
  75. (faction_set_slot, ":faction_no", slot_faction_last_feast_start_time, ":last_feast_time"),
  76. (try_end),
  77.  
  78. # Setting the random town sequence:
  79. (store_sub, ":num_towns", towns_end, towns_begin),
  80. (assign, ":num_iterations", ":num_towns"),
  81. (try_for_range, ":cur_town_no", 0, ":num_towns"),
  82. (troop_set_slot, "trp_random_town_sequence", ":cur_town_no", -1),
  83. (try_end),
  84. (assign, ":cur_town_no", 0),
  85. (try_for_range, ":unused", 0, ":num_iterations"),
  86. (store_random_in_range, ":random_no", 0, ":num_towns"),
  87. (assign, ":is_unique", 1),
  88. (try_for_range, ":cur_town_no_2", 0, ":num_towns"),
  89. (troop_slot_eq, "trp_random_town_sequence", ":cur_town_no_2", ":random_no"),
  90. (assign, ":is_unique", 0),
  91. (try_end),
  92. (try_begin),
  93. (eq, ":is_unique", 1),
  94. (troop_set_slot, "trp_random_town_sequence", ":cur_town_no", ":random_no"),
  95. (val_add, ":cur_town_no", 1),
  96. (else_try),
  97. (val_add, ":num_iterations", 1),
  98. (try_end),
  99. (try_end),
  100.  
  101. # Cultures:
  102. (faction_set_slot, "fac_culture_1", slot_faction_tier_1_troop, "trp_swadian_recruit"),
  103. (faction_set_slot, "fac_culture_1", slot_faction_tier_2_troop, "trp_swadian_militia"),
  104. (faction_set_slot, "fac_culture_1", slot_faction_tier_3_troop, "trp_swadian_footman"),
  105. (faction_set_slot, "fac_culture_1", slot_faction_tier_4_troop, "trp_swadian_infantry"),
  106. (faction_set_slot, "fac_culture_1", slot_faction_tier_5_troop, "trp_swadian_knight"),
  107.  
  108. (faction_set_slot, "fac_culture_2", slot_faction_tier_1_troop, "trp_vaegir_recruit"),
  109. (faction_set_slot, "fac_culture_2", slot_faction_tier_2_troop, "trp_vaegir_footman"),
  110. (faction_set_slot, "fac_culture_2", slot_faction_tier_3_troop, "trp_vaegir_veteran"),
  111. (faction_set_slot, "fac_culture_2", slot_faction_tier_4_troop, "trp_vaegir_infantry"),
  112. (faction_set_slot, "fac_culture_2", slot_faction_tier_5_troop, "trp_vaegir_knight"),
  113.  
  114. (faction_set_slot, "fac_culture_3", slot_faction_tier_1_troop, "trp_khergit_tribesman"),
  115. (faction_set_slot, "fac_culture_3", slot_faction_tier_2_troop, "trp_khergit_skirmisher"),
  116. (faction_set_slot, "fac_culture_3", slot_faction_tier_3_troop, "trp_khergit_horseman"),
  117. (faction_set_slot, "fac_culture_3", slot_faction_tier_4_troop, "trp_khergit_horse_archer"),
  118. (faction_set_slot, "fac_culture_3", slot_faction_tier_5_troop, "trp_khergit_veteran_horse_archer"),
  119.  
  120. (faction_set_slot, "fac_culture_4", slot_faction_tier_1_troop, "trp_nord_recruit"),
  121. (faction_set_slot, "fac_culture_4", slot_faction_tier_2_troop, "trp_nord_footman"),
  122. (faction_set_slot, "fac_culture_4", slot_faction_tier_3_troop, "trp_nord_trained_footman"),
  123. (faction_set_slot, "fac_culture_4", slot_faction_tier_4_troop, "trp_nord_warrior"),
  124. (faction_set_slot, "fac_culture_4", slot_faction_tier_5_troop, "trp_nord_veteran"),
  125.  
  126. (faction_set_slot, "fac_culture_5", slot_faction_tier_1_troop, "trp_rhodok_tribesman"),
  127. (faction_set_slot, "fac_culture_5", slot_faction_tier_2_troop, "trp_rhodok_spearman"),
  128. (faction_set_slot, "fac_culture_5", slot_faction_tier_3_troop, "trp_rhodok_trained_spearman"),
  129. (faction_set_slot, "fac_culture_5", slot_faction_tier_4_troop, "trp_rhodok_veteran_spearman"),
  130. (faction_set_slot, "fac_culture_5", slot_faction_tier_5_troop, "trp_rhodok_sergeant"),
  131.  
  132. (faction_set_slot, "fac_culture_6", slot_faction_tier_1_troop, "trp_sarranid_recruit"),
  133. (faction_set_slot, "fac_culture_6", slot_faction_tier_2_troop, "trp_sarranid_footman"),
  134. (faction_set_slot, "fac_culture_6", slot_faction_tier_3_troop, "trp_sarranid_archer"),
  135. (faction_set_slot, "fac_culture_6", slot_faction_tier_4_troop, "trp_sarranid_horseman"),
  136. (faction_set_slot, "fac_culture_6", slot_faction_tier_5_troop, "trp_sarranid_mamluke"),
  137.  
  138. (faction_set_slot, "fac_culture_1", slot_faction_town_walker_male_troop, "trp_town_walker_1"),
  139. (faction_set_slot, "fac_culture_1", slot_faction_town_walker_female_troop, "trp_town_walker_2"),
  140. (faction_set_slot, "fac_culture_1", slot_faction_village_walker_male_troop, "trp_village_walker_1"),
  141. (faction_set_slot, "fac_culture_1", slot_faction_village_walker_female_troop, "trp_village_walker_2"),
  142. (faction_set_slot, "fac_culture_1", slot_faction_town_spy_male_troop, "trp_spy_walker_1"),
  143. (faction_set_slot, "fac_culture_1", slot_faction_town_spy_female_troop, "trp_spy_walker_2"),
  144.  
  145. (faction_set_slot, "fac_culture_2", slot_faction_town_walker_male_troop, "trp_town_walker_1"),
  146. (faction_set_slot, "fac_culture_2", slot_faction_town_walker_female_troop, "trp_town_walker_2"),
  147. (faction_set_slot, "fac_culture_2", slot_faction_village_walker_male_troop, "trp_village_walker_1"),
  148. (faction_set_slot, "fac_culture_2", slot_faction_village_walker_female_troop, "trp_village_walker_2"),
  149. (faction_set_slot, "fac_culture_2", slot_faction_town_spy_male_troop, "trp_spy_walker_1"),
  150. (faction_set_slot, "fac_culture_2", slot_faction_town_spy_female_troop, "trp_spy_walker_2"),
  151.  
  152. (faction_set_slot, "fac_culture_3", slot_faction_town_walker_male_troop, "trp_khergit_townsman"),
  153. (faction_set_slot, "fac_culture_3", slot_faction_town_walker_female_troop, "trp_khergit_townswoman"),
  154. (faction_set_slot, "fac_culture_3", slot_faction_village_walker_male_troop, "trp_khergit_townsman"),
  155. (faction_set_slot, "fac_culture_3", slot_faction_village_walker_female_troop, "trp_khergit_townswoman"),
  156. (faction_set_slot, "fac_culture_3", slot_faction_town_spy_male_troop, "trp_spy_walker_1"),
  157. (faction_set_slot, "fac_culture_3", slot_faction_town_spy_female_troop, "trp_spy_walker_2"),
  158.  
  159. (faction_set_slot, "fac_culture_4", slot_faction_town_walker_male_troop, "trp_town_walker_1"),
  160. (faction_set_slot, "fac_culture_4", slot_faction_town_walker_female_troop, "trp_town_walker_2"),
  161. (faction_set_slot, "fac_culture_4", slot_faction_village_walker_male_troop, "trp_village_walker_1"),
  162. (faction_set_slot, "fac_culture_4", slot_faction_village_walker_female_troop, "trp_village_walker_2"),
  163. (faction_set_slot, "fac_culture_4", slot_faction_town_spy_male_troop, "trp_spy_walker_1"),
  164. (faction_set_slot, "fac_culture_4", slot_faction_town_spy_female_troop, "trp_spy_walker_2"),
  165.  
  166. (faction_set_slot, "fac_culture_5", slot_faction_town_walker_male_troop, "trp_town_walker_1"),
  167. (faction_set_slot, "fac_culture_5", slot_faction_town_walker_female_troop, "trp_town_walker_2"),
  168. (faction_set_slot, "fac_culture_5", slot_faction_village_walker_male_troop, "trp_village_walker_1"),
  169. (faction_set_slot, "fac_culture_5", slot_faction_village_walker_female_troop, "trp_village_walker_2"),
  170. (faction_set_slot, "fac_culture_5", slot_faction_town_spy_male_troop, "trp_spy_walker_1"),
  171. (faction_set_slot, "fac_culture_5", slot_faction_town_spy_female_troop, "trp_spy_walker_2"),
  172.  
  173. (faction_set_slot, "fac_culture_6", slot_faction_town_walker_male_troop, "trp_sarranid_townsman"),
  174. (faction_set_slot, "fac_culture_6", slot_faction_town_walker_female_troop, "trp_sarranid_townswoman"),
  175. (faction_set_slot, "fac_culture_6", slot_faction_village_walker_male_troop, "trp_sarranid_townsman"),
  176. (faction_set_slot, "fac_culture_6", slot_faction_village_walker_female_troop, "trp_sarranid_townswoman"),
  177. (faction_set_slot, "fac_culture_6", slot_faction_town_spy_male_troop, "trp_spy_walker_1"),
  178. (faction_set_slot, "fac_culture_6", slot_faction_town_spy_female_troop, "trp_spy_walker_2"),
  179.  
  180. (try_begin),
  181. (eq, "$cheat_mode", 1),
  182. (assign, reg3, "$cheat_mode"),
  183. (display_message, "@{!}DEBUG : Completed faction troop assignments, cheat mode: {reg3}"),
  184. (try_end),
  185.  
  186. # Factions:
  187. (faction_set_slot, "fac_kingdom_1", slot_faction_culture, "fac_culture_1"),
  188. (faction_set_slot, "fac_kingdom_1", slot_faction_leader, "trp_kingdom_1_lord"),
  189. (troop_set_slot, "trp_kingdom_1_lord", slot_troop_renown, 1200),
  190.  
  191. (faction_set_slot, "fac_kingdom_2", slot_faction_culture, "fac_culture_2"),
  192. (faction_set_slot, "fac_kingdom_2", slot_faction_leader, "trp_kingdom_2_lord"),
  193. (troop_set_slot, "trp_kingdom_2_lord", slot_troop_renown, 1200),
  194.  
  195. (faction_set_slot, "fac_kingdom_3", slot_faction_culture, "fac_culture_3"),
  196. (faction_set_slot, "fac_kingdom_3", slot_faction_leader, "trp_kingdom_3_lord"),
  197. (troop_set_slot, "trp_kingdom_3_lord", slot_troop_renown, 1200),
  198.  
  199. (faction_set_slot, "fac_kingdom_4", slot_faction_culture, "fac_culture_4"),
  200. (faction_set_slot, "fac_kingdom_4", slot_faction_leader, "trp_kingdom_4_lord"),
  201. (troop_set_slot, "trp_kingdom_4_lord", slot_troop_renown, 1200),
  202.  
  203. (faction_set_slot, "fac_kingdom_5", slot_faction_culture, "fac_culture_5"),
  204. (faction_set_slot, "fac_kingdom_5", slot_faction_leader, "trp_kingdom_5_lord"),
  205. (troop_set_slot, "trp_kingdom_5_lord", slot_troop_renown, 1200),
  206.  
  207. (faction_set_slot, "fac_kingdom_6", slot_faction_culture, "fac_culture_6"),
  208. (faction_set_slot, "fac_kingdom_6", slot_faction_leader, "trp_kingdom_6_lord"),
  209. (troop_set_slot, "trp_kingdom_6_lord", slot_troop_renown, 1200),
  210.  
  211. (assign, ":player_faction_culture", "fac_culture_1"),
  212. (faction_set_slot, "fac_player_supporters_faction", slot_faction_culture, ":player_faction_culture"),
  213. (faction_set_slot, "fac_player_faction", slot_faction_culture, ":player_faction_culture"),
  214.  
  215. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  216. (faction_set_slot, ":faction_no", slot_faction_marshall, -1),
  217. (try_end),
  218. (faction_set_slot, "fac_player_supporters_faction", slot_faction_marshall, "trp_player"),
  219. (call_script, "script_initialize_faction_troop_types"),
  220.  
  221.  
  222. # Towns:
  223. (try_for_range, ":item_no", trade_goods_begin, trade_goods_end),
  224. (store_sub, ":offset", ":item_no", trade_goods_begin),
  225. (val_add, ":offset", slot_town_trade_good_prices_begin),
  226. (try_for_range, ":center_no", centers_begin, centers_end),
  227. (party_set_slot, ":center_no", ":offset", average_price_factor), #1000
  228. (try_end),
  229. (try_end),
  230.  
  231. (call_script, "script_initialize_trade_routes"),
  232. (call_script, "script_initialize_town_arena_info"),
  233. #start some tournaments
  234. (try_for_range, ":town_no", towns_begin, towns_end),
  235. (store_random_in_range, ":rand", 0, 100),
  236. (lt, ":rand", 20),
  237. (store_random_in_range, ":random_days", 12, 15),
  238. (party_set_slot, ":town_no", slot_town_has_tournament, ":random_days"),
  239. (try_end),
  240.  
  241. #village products -- at some point we might make it so that the villages supply raw materials to towns, and the towns produce manufactured goods
  242. #village products designate the raw materials produced in the vicinity
  243. #right now, just doing a test for grain produced in the swadian heartland
  244.  
  245.  
  246. # fill_village_bound_centers
  247. #pass 1: Give one village to each castle
  248. (try_for_range, ":cur_center", castles_begin, castles_end),
  249. (assign, ":min_dist", 999999),
  250. (assign, ":min_dist_village", -1),
  251. (try_for_range, ":cur_village", villages_begin, villages_end),
  252. (neg|party_slot_ge, ":cur_village", slot_village_bound_center, 1), #skip villages which are already bound.
  253. (store_distance_to_party_from_party, ":cur_dist", ":cur_village", ":cur_center"),
  254. (lt, ":cur_dist", ":min_dist"),
  255. (assign, ":min_dist", ":cur_dist"),
  256. (assign, ":min_dist_village", ":cur_village"),
  257. (try_end),
  258. (party_set_slot, ":min_dist_village", slot_village_bound_center, ":cur_center"),
  259. (store_faction_of_party, ":town_faction", ":cur_center"),
  260. (call_script, "script_give_center_to_faction_aux", ":min_dist_village", ":town_faction"),
  261. (try_end),
  262.  
  263.  
  264. #pass 2: Give other villages to closest town.
  265. (try_for_range, ":cur_village", villages_begin, villages_end),
  266. (neg|party_slot_ge, ":cur_village", slot_village_bound_center, 1), #skip villages which are already bound.
  267. (assign, ":min_dist", 999999),
  268. (assign, ":min_dist_town", -1),
  269. (try_for_range, ":cur_town", towns_begin, towns_end),
  270. (store_distance_to_party_from_party, ":cur_dist", ":cur_village", ":cur_town"),
  271. (lt, ":cur_dist", ":min_dist"),
  272. (assign, ":min_dist", ":cur_dist"),
  273. (assign, ":min_dist_town", ":cur_town"),
  274. (try_end),
  275. (party_set_slot, ":cur_village", slot_village_bound_center, ":min_dist_town"),
  276. (store_faction_of_party, ":town_faction", ":min_dist_town"),
  277. (call_script, "script_give_center_to_faction_aux", ":cur_village", ":town_faction"),
  278. (try_end),
  279.  
  280.  
  281. # Towns (loop)
  282. (try_for_range, ":town_no", towns_begin, towns_end),
  283. (store_sub, ":offset", ":town_no", towns_begin),
  284. (party_set_slot,":town_no", slot_party_type, spt_town),
  285. #(store_add, ":cur_object_no", "trp_town_1_seneschal", ":offset"),
  286. #(party_set_slot,":town_no", slot_town_seneschal, ":cur_object_no"),
  287. (store_add, ":cur_object_no", "scn_town_1_center", ":offset"),
  288. (party_set_slot,":town_no", slot_town_center, ":cur_object_no"),
  289. (store_add, ":cur_object_no", "scn_town_1_castle", ":offset"),
  290. (party_set_slot,":town_no", slot_town_castle, ":cur_object_no"),
  291. (store_add, ":cur_object_no", "scn_town_1_prison", ":offset"),
  292. (party_set_slot,":town_no", slot_town_prison, ":cur_object_no"),
  293. (store_add, ":cur_object_no", "scn_town_1_walls", ":offset"),
  294. (party_set_slot,":town_no", slot_town_walls, ":cur_object_no"),
  295. (store_add, ":cur_object_no", "scn_town_1_tavern", ":offset"),
  296. (party_set_slot,":town_no", slot_town_tavern, ":cur_object_no"),
  297. (store_add, ":cur_object_no", "scn_town_1_store", ":offset"),
  298. (party_set_slot,":town_no", slot_town_store, ":cur_object_no"),
  299. (store_add, ":cur_object_no", "scn_town_1_arena", ":offset"),
  300. (party_set_slot,":town_no", slot_town_arena, ":cur_object_no"),
  301. (store_add, ":cur_object_no", "scn_town_1_alley", ":offset"),
  302. (party_set_slot,":town_no", slot_town_alley, ":cur_object_no"),
  303. (store_add, ":cur_object_no", "trp_town_1_mayor", ":offset"),
  304. (party_set_slot,":town_no", slot_town_elder, ":cur_object_no"),
  305. (store_add, ":cur_object_no", "trp_town_1_tavernkeeper", ":offset"),
  306. (party_set_slot,":town_no", slot_town_tavernkeeper, ":cur_object_no"),
  307. (store_add, ":cur_object_no", "trp_town_1_weaponsmith", ":offset"),
  308. (party_set_slot,":town_no", slot_town_weaponsmith, ":cur_object_no"),
  309. (store_add, ":cur_object_no", "trp_town_1_armorer", ":offset"),
  310. (party_set_slot,":town_no", slot_town_armorer, ":cur_object_no"),
  311. (store_add, ":cur_object_no", "trp_town_1_merchant", ":offset"),
  312. (party_set_slot,":town_no", slot_town_merchant, ":cur_object_no"),
  313. (store_add, ":cur_object_no", "trp_town_1_horse_merchant", ":offset"),
  314. (party_set_slot,":town_no", slot_town_horse_merchant, ":cur_object_no"),
  315. (store_add, ":cur_object_no", "scn_town_1_center", ":offset"),
  316. (party_set_slot,":town_no", slot_town_center, ":cur_object_no"),
  317. (party_set_slot,":town_no", slot_town_reinforcement_party_template, "pt_center_reinforcements"),
  318. (try_end),
  319.  
  320. # Castles
  321. (try_for_range, ":castle_no", castles_begin, castles_end),
  322. (store_sub, ":offset", ":castle_no", castles_begin),
  323. (val_mul, ":offset", 3),
  324.  
  325. # (store_add, ":senechal_troop_no", "trp_castle_1_seneschal", ":offset"),
  326. # (party_set_slot,":castle_no", slot_town_seneschal, ":senechal_troop_no"),
  327. (store_add, ":exterior_scene_no", "scn_castle_1_exterior", ":offset"),
  328. (party_set_slot,":castle_no", slot_castle_exterior, ":exterior_scene_no"),
  329. (store_add, ":interior_scene_no", "scn_castle_1_interior", ":offset"),
  330. (party_set_slot,":castle_no", slot_town_castle, ":interior_scene_no"),
  331. (store_add, ":interior_scene_no", "scn_castle_1_prison", ":offset"),
  332. (party_set_slot,":castle_no", slot_town_prison, ":interior_scene_no"),
  333.  
  334. (party_set_slot,":castle_no", slot_town_reinforcement_party_template, "pt_center_reinforcements"),
  335. (party_set_slot,":castle_no", slot_party_type, spt_castle),
  336. (party_set_slot,":castle_no", slot_center_is_besieged_by, -1),
  337. (try_end),
  338.  
  339. # Set which castles need to be attacked with siege towers.
  340. (party_set_slot,"p_town_13", slot_center_siege_with_belfry, 1),
  341. (party_set_slot,"p_town_16", slot_center_siege_with_belfry, 1),
  342.  
  343. (party_set_slot,"p_castle_1", slot_center_siege_with_belfry, 1),
  344. (party_set_slot,"p_castle_2", slot_center_siege_with_belfry, 1),
  345. (party_set_slot,"p_castle_4", slot_center_siege_with_belfry, 1),
  346. (party_set_slot,"p_castle_7", slot_center_siege_with_belfry, 1),
  347. (party_set_slot,"p_castle_8", slot_center_siege_with_belfry, 1),
  348. (party_set_slot,"p_castle_9", slot_center_siege_with_belfry, 1),
  349. (party_set_slot,"p_castle_11", slot_center_siege_with_belfry, 1),
  350. (party_set_slot,"p_castle_13", slot_center_siege_with_belfry, 1),
  351. (party_set_slot,"p_castle_21", slot_center_siege_with_belfry, 1),
  352. (party_set_slot,"p_castle_25", slot_center_siege_with_belfry, 1),
  353. (party_set_slot,"p_castle_34", slot_center_siege_with_belfry, 1),
  354. (party_set_slot,"p_castle_35", slot_center_siege_with_belfry, 1),
  355. (party_set_slot,"p_castle_38", slot_center_siege_with_belfry, 1),
  356. (party_set_slot,"p_castle_40", slot_center_siege_with_belfry, 1),
  357. (party_set_slot,"p_castle_41", slot_center_siege_with_belfry, 1),
  358. (party_set_slot,"p_castle_42", slot_center_siege_with_belfry, 1),
  359. (party_set_slot,"p_castle_43", slot_center_siege_with_belfry, 1),
  360.  
  361. # Villages characters
  362. (try_for_range, ":village_no", villages_begin, villages_end),
  363. (store_sub, ":offset", ":village_no", villages_begin),
  364.  
  365. (store_add, ":exterior_scene_no", "scn_village_1", ":offset"),
  366. (party_set_slot,":village_no", slot_castle_exterior, ":exterior_scene_no"),
  367.  
  368. (store_add, ":store_troop_no", "trp_village_1_elder", ":offset"),
  369. (party_set_slot,":village_no", slot_town_elder, ":store_troop_no"),
  370.  
  371. (party_set_slot,":village_no", slot_party_type, spt_village),
  372. (party_set_slot,":village_no", slot_village_raided_by, -1),
  373.  
  374. (call_script, "script_refresh_village_defenders", ":village_no"),
  375. (call_script, "script_refresh_village_defenders", ":village_no"),
  376. (call_script, "script_refresh_village_defenders", ":village_no"),
  377. (call_script, "script_refresh_village_defenders", ":village_no"),
  378. (try_end),
  379.  
  380. (try_for_range, ":center_no", centers_begin, centers_end),
  381. (party_set_slot, ":center_no", slot_center_last_spotted_enemy, -1),
  382. (party_set_slot, ":center_no", slot_center_is_besieged_by, -1),
  383. (party_set_slot, ":center_no", slot_center_last_taken_by_troop, -1),
  384. (try_end),
  385.  
  386. # Troops:
  387.  
  388. # Assign banners and renown.
  389. # We assume there are enough banners for all kingdom heroes.
  390.  
  391. #faction banners
  392. (faction_set_slot, "fac_kingdom_1", slot_faction_banner, "mesh_banner_kingdom_f"),
  393. (faction_set_slot, "fac_kingdom_2", slot_faction_banner, "mesh_banner_kingdom_b"),
  394. (faction_set_slot, "fac_kingdom_3", slot_faction_banner, "mesh_banner_kingdom_c"),
  395. (faction_set_slot, "fac_kingdom_4", slot_faction_banner, "mesh_banner_kingdom_a"),
  396. (faction_set_slot, "fac_kingdom_5", slot_faction_banner, "mesh_banner_kingdom_d"),
  397. (faction_set_slot, "fac_kingdom_6", slot_faction_banner, "mesh_banner_kingdom_e"),
  398.  
  399. (try_for_range, ":cur_faction", npc_kingdoms_begin, npc_kingdoms_end),
  400. (faction_get_slot, ":cur_faction_king", ":cur_faction", slot_faction_leader),
  401. (faction_get_slot, ":cur_faction_banner", ":cur_faction", slot_faction_banner),
  402. (val_sub, ":cur_faction_banner", banner_meshes_begin),
  403. (val_add, ":cur_faction_banner", banner_scene_props_begin),
  404. (troop_set_slot, ":cur_faction_king", slot_troop_banner_scene_prop, ":cur_faction_banner"),
  405. (try_end),
  406. (assign, ":num_khergit_lords_assigned", 0),
  407. (assign, ":num_sarranid_lords_assigned", 0),
  408. (assign, ":num_other_lords_assigned", 0),
  409.  
  410. (try_for_range, ":kingdom_hero", active_npcs_begin, active_npcs_end),
  411. (this_or_next|troop_slot_eq, ":kingdom_hero", slot_troop_occupation, slto_kingdom_hero),
  412. (troop_slot_eq, ":kingdom_hero", slot_troop_occupation, slto_inactive_pretender),
  413.  
  414. (store_troop_faction, ":kingdom_hero_faction", ":kingdom_hero"),
  415. (neg|faction_slot_eq, ":kingdom_hero_faction", slot_faction_leader, ":kingdom_hero"),
  416. (try_begin),
  417. (eq, ":kingdom_hero_faction", "fac_kingdom_3"), #Khergit Khanate
  418. (store_add, ":kingdom_3_banners_begin", banner_scene_props_begin, khergit_banners_begin_offset),
  419. (store_add, ":banner_id", ":kingdom_3_banners_begin", ":num_khergit_lords_assigned"),
  420. (troop_set_slot, ":kingdom_hero", slot_troop_banner_scene_prop, ":banner_id"),
  421. (val_add, ":num_khergit_lords_assigned", 1),
  422. (else_try),
  423. (eq, ":kingdom_hero_faction", "fac_kingdom_6"), #Sarranid Sultanate
  424. (store_add, ":kingdom_6_banners_begin", banner_scene_props_begin, sarranid_banners_begin_offset),
  425. (store_add, ":banner_id", ":kingdom_6_banners_begin", ":num_sarranid_lords_assigned"),
  426. (troop_set_slot, ":kingdom_hero", slot_troop_banner_scene_prop, ":banner_id"),
  427. (val_add, ":num_sarranid_lords_assigned", 1),
  428. (else_try),
  429. (assign, ":hero_offset", ":num_other_lords_assigned"),
  430. (try_begin),
  431. (gt, ":hero_offset", khergit_banners_begin_offset),#Do not add khergit banners to other lords
  432. (val_add, ":hero_offset", khergit_banners_end_offset),
  433. (val_sub, ":hero_offset", khergit_banners_begin_offset),
  434. (try_end),
  435. (try_begin),
  436. (gt, ":hero_offset", sarranid_banners_begin_offset),#Do not add sarranid banners to other lords
  437. (val_add, ":hero_offset", sarranid_banners_end_offset),
  438. (val_sub, ":hero_offset", sarranid_banners_begin_offset),
  439. (try_end),
  440. (store_add, ":banner_id", banner_scene_props_begin, ":hero_offset"),
  441. (troop_set_slot, ":kingdom_hero", slot_troop_banner_scene_prop, ":banner_id"),
  442. (val_add, ":num_other_lords_assigned", 1),
  443. (try_end),
  444. (try_begin),
  445. (this_or_next|lt, ":banner_id", banner_scene_props_begin),
  446. (gt, ":banner_id", banner_scene_props_end_minus_one),
  447. (display_message, "@{!}ERROR: Not enough banners for heroes!"),
  448. (try_end),
  449.  
  450. (store_character_level, ":level", ":kingdom_hero"),
  451. (store_mul, ":renown", ":level", ":level"),
  452. (val_div, ":renown", 4), #for top lord, is about 400
  453.  
  454. (troop_get_slot, ":age", ":kingdom_hero", slot_troop_age),
  455. (store_mul, ":age_addition", ":age", ":age"),
  456. (val_div, ":age_addition", 8), #for top lord, is about 400
  457. (val_add, ":renown", ":age_addition"),
  458.  
  459. (try_begin),
  460. (faction_slot_eq, ":kingdom_hero_faction", slot_faction_leader, ":kingdom_hero"),
  461. (store_random_in_range, ":random_renown", 250, 400),
  462. (else_try),
  463. (store_random_in_range, ":random_renown", 0, 100),
  464. (try_end),
  465. (val_add, ":renown", ":random_renown"),
  466.  
  467. (troop_set_slot, ":kingdom_hero", slot_troop_renown, ":renown"),
  468. (try_end),
  469.  
  470. (try_for_range, ":troop_no", "trp_player", "trp_merchants_end"),
  471. (add_troop_note_tableau_mesh, ":troop_no", "tableau_troop_note_mesh"),
  472. (try_end),
  473.  
  474. (try_for_range, ":center_no", centers_begin, centers_end),
  475. (add_party_note_tableau_mesh, ":center_no", "tableau_center_note_mesh"),
  476. (try_end),
  477.  
  478. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  479. (is_between, ":faction_no", "fac_kingdom_1", kingdoms_end), #Excluding player kingdom
  480. (add_faction_note_tableau_mesh, ":faction_no", "tableau_faction_note_mesh"),
  481. (else_try),
  482. (add_faction_note_tableau_mesh, ":faction_no", "tableau_faction_note_mesh_banner"),
  483. (try_end),
  484.  
  485. #Give centers to factions first, to ensure more equal distributions
  486. (call_script, "script_give_center_to_faction_aux", "p_town_1", "fac_kingdom_4"),
  487. (call_script, "script_give_center_to_faction_aux", "p_town_2", "fac_kingdom_4"),
  488. (call_script, "script_give_center_to_faction_aux", "p_town_3", "fac_kingdom_5"),
  489. (call_script, "script_give_center_to_faction_aux", "p_town_4", "fac_kingdom_1"),
  490. (call_script, "script_give_center_to_faction_aux", "p_town_5", "fac_kingdom_5"),
  491. (call_script, "script_give_center_to_faction_aux", "p_town_6", "fac_kingdom_1"),
  492. (call_script, "script_give_center_to_faction_aux", "p_town_7", "fac_kingdom_1"),
  493. (call_script, "script_give_center_to_faction_aux", "p_town_8", "fac_kingdom_2"),
  494. (call_script, "script_give_center_to_faction_aux", "p_town_9", "fac_kingdom_2"),
  495. (call_script, "script_give_center_to_faction_aux", "p_town_10", "fac_kingdom_3"),
  496. (call_script, "script_give_center_to_faction_aux", "p_town_11", "fac_kingdom_2"),
  497. (call_script, "script_give_center_to_faction_aux", "p_town_12", "fac_kingdom_4"),
  498. (call_script, "script_give_center_to_faction_aux", "p_town_13", "fac_kingdom_2"),
  499. (call_script, "script_give_center_to_faction_aux", "p_town_14", "fac_kingdom_3"),
  500. (call_script, "script_give_center_to_faction_aux", "p_town_15", "fac_kingdom_5"),
  501. (call_script, "script_give_center_to_faction_aux", "p_town_16", "fac_kingdom_1"),
  502. (call_script, "script_give_center_to_faction_aux", "p_town_17", "fac_kingdom_3"),
  503. (call_script, "script_give_center_to_faction_aux", "p_town_18", "fac_kingdom_3"),
  504. (call_script, "script_give_center_to_faction_aux", "p_town_19", "fac_kingdom_6"),
  505. (call_script, "script_give_center_to_faction_aux", "p_town_20", "fac_kingdom_6"),
  506. (call_script, "script_give_center_to_faction_aux", "p_town_21", "fac_kingdom_6"),
  507. (call_script, "script_give_center_to_faction_aux", "p_town_22", "fac_kingdom_6"),
  508.  
  509. (call_script, "script_give_center_to_faction_aux", "p_castle_1", "fac_kingdom_5"),
  510. (call_script, "script_give_center_to_faction_aux", "p_castle_2", "fac_kingdom_3"),
  511. (call_script, "script_give_center_to_faction_aux", "p_castle_3", "fac_kingdom_2"),
  512. (call_script, "script_give_center_to_faction_aux", "p_castle_4", "fac_kingdom_2"),
  513. (call_script, "script_give_center_to_faction_aux", "p_castle_5", "fac_kingdom_4"),
  514. (call_script, "script_give_center_to_faction_aux", "p_castle_6", "fac_kingdom_1"),
  515. (call_script, "script_give_center_to_faction_aux", "p_castle_7", "fac_kingdom_3"),
  516. (call_script, "script_give_center_to_faction_aux", "p_castle_8", "fac_kingdom_2"),
  517. (call_script, "script_give_center_to_faction_aux", "p_castle_9", "fac_kingdom_5"),
  518. (call_script, "script_give_center_to_faction_aux", "p_castle_10", "fac_kingdom_4"),
  519. (call_script, "script_give_center_to_faction_aux", "p_castle_11", "fac_kingdom_4"),
  520.  
  521. (call_script, "script_give_center_to_faction_aux", "p_castle_12", "fac_kingdom_4"),
  522. (call_script, "script_give_center_to_faction_aux", "p_castle_13", "fac_kingdom_1"),
  523. (call_script, "script_give_center_to_faction_aux", "p_castle_14", "fac_kingdom_5"),
  524. (call_script, "script_give_center_to_faction_aux", "p_castle_15", "fac_kingdom_5"),
  525. (call_script, "script_give_center_to_faction_aux", "p_castle_16", "fac_kingdom_5"),
  526. (call_script, "script_give_center_to_faction_aux", "p_castle_17", "fac_kingdom_3"),
  527. (call_script, "script_give_center_to_faction_aux", "p_castle_18", "fac_kingdom_2"),
  528. (call_script, "script_give_center_to_faction_aux", "p_castle_19", "fac_kingdom_2"),
  529. (call_script, "script_give_center_to_faction_aux", "p_castle_20", "fac_kingdom_1"),
  530.  
  531. (call_script, "script_give_center_to_faction_aux", "p_castle_21", "fac_kingdom_5"),
  532. (call_script, "script_give_center_to_faction_aux", "p_castle_22", "fac_kingdom_3"),
  533. (call_script, "script_give_center_to_faction_aux", "p_castle_23", "fac_kingdom_1"),
  534. (call_script, "script_give_center_to_faction_aux", "p_castle_24", "fac_kingdom_1"),
  535.  
  536. (call_script, "script_give_center_to_faction_aux", "p_castle_25", "fac_kingdom_1"),
  537. (call_script, "script_give_center_to_faction_aux", "p_castle_26", "fac_kingdom_1"),
  538. (call_script, "script_give_center_to_faction_aux", "p_castle_27", "fac_kingdom_1"),
  539. (call_script, "script_give_center_to_faction_aux", "p_castle_28", "fac_kingdom_5"),
  540.  
  541. (call_script, "script_give_center_to_faction_aux", "p_castle_29", "fac_kingdom_2"),
  542. (call_script, "script_give_center_to_faction_aux", "p_castle_30", "fac_kingdom_3"),
  543. (call_script, "script_give_center_to_faction_aux", "p_castle_31", "fac_kingdom_1"),
  544.  
  545. (call_script, "script_give_center_to_faction_aux", "p_castle_32", "fac_kingdom_4"),
  546. (call_script, "script_give_center_to_faction_aux", "p_castle_33", "fac_kingdom_5"),
  547. (call_script, "script_give_center_to_faction_aux", "p_castle_34", "fac_kingdom_4"),
  548. (call_script, "script_give_center_to_faction_aux", "p_castle_35", "fac_kingdom_1"),
  549.  
  550. (call_script, "script_give_center_to_faction_aux", "p_castle_36", "fac_kingdom_4"),
  551. (call_script, "script_give_center_to_faction_aux", "p_castle_37", "fac_kingdom_2"),
  552. (call_script, "script_give_center_to_faction_aux", "p_castle_38", "fac_kingdom_3"),
  553. (call_script, "script_give_center_to_faction_aux", "p_castle_39", "fac_kingdom_2"),
  554. (call_script, "script_give_center_to_faction_aux", "p_castle_40", "fac_kingdom_3"),
  555.  
  556. (call_script, "script_give_center_to_faction_aux", "p_castle_41", "fac_kingdom_6"),
  557. (call_script, "script_give_center_to_faction_aux", "p_castle_42", "fac_kingdom_6"),
  558. (call_script, "script_give_center_to_faction_aux", "p_castle_43", "fac_kingdom_6"),
  559. (call_script, "script_give_center_to_faction_aux", "p_castle_44", "fac_kingdom_6"),
  560. (call_script, "script_give_center_to_faction_aux", "p_castle_45", "fac_kingdom_6"),
  561. (call_script, "script_give_center_to_faction_aux", "p_castle_46", "fac_kingdom_6"),
  562. (call_script, "script_give_center_to_faction_aux", "p_castle_47", "fac_kingdom_6"),
  563. (call_script, "script_give_center_to_faction_aux", "p_castle_48", "fac_kingdom_6"),
  564.  
  565.  
  566. #Now give towns to great lords
  567. (call_script, "script_give_center_to_lord", "p_town_1", "trp_kingdom_4_lord", 0),
  568. (call_script, "script_give_center_to_lord", "p_town_2", "trp_knight_4_1", 0),
  569. (call_script, "script_give_center_to_lord", "p_town_3", "trp_knight_5_1", 0),
  570. (call_script, "script_give_center_to_lord", "p_town_4", "trp_knight_1_1", 0),
  571. (call_script, "script_give_center_to_lord", "p_town_5", "trp_kingdom_5_lord", 0),
  572. (call_script, "script_give_center_to_lord", "p_town_6", "trp_kingdom_1_lord", 0),
  573. (call_script, "script_give_center_to_lord", "p_town_7", "trp_knight_1_2", 0),
  574.  
  575. (call_script, "script_give_center_to_lord", "p_town_8", "trp_kingdom_2_lord", 0),
  576. (call_script, "script_give_center_to_lord", "p_town_9", "trp_knight_2_1", 0),
  577. (call_script, "script_give_center_to_lord", "p_town_10", "trp_kingdom_3_lord", 0),
  578. (call_script, "script_give_center_to_lord", "p_town_11", "trp_knight_2_2", 0),
  579. (call_script, "script_give_center_to_lord", "p_town_12", "trp_knight_4_2", 0),
  580. (call_script, "script_give_center_to_lord", "p_town_13", "trp_knight_2_3", 0),
  581. (call_script, "script_give_center_to_lord", "p_town_14", "trp_knight_3_1", 0),
  582.  
  583. (call_script, "script_give_center_to_lord", "p_town_15", "trp_knight_5_2", 0),
  584. (call_script, "script_give_center_to_lord", "p_town_16", "trp_knight_1_4", 0), #changed from 1_3
  585. (call_script, "script_give_center_to_lord", "p_town_17", "trp_knight_3_2", 0),
  586. (call_script, "script_give_center_to_lord", "p_town_18", "trp_knight_3_3", 0),
  587.  
  588. (call_script, "script_give_center_to_lord", "p_town_19", "trp_kingdom_6_lord", 0),
  589. (call_script, "script_give_center_to_lord", "p_town_20", "trp_knight_6_1", 0),
  590. (call_script, "script_give_center_to_lord", "p_town_21", "trp_knight_6_2", 0),
  591. (call_script, "script_give_center_to_lord", "p_town_22", "trp_knight_6_3", 0),
  592.  
  593. # Give family castles to certain nobles.
  594. (call_script, "script_give_center_to_lord", "p_castle_29", "trp_knight_2_10", 0), #Nelag_Castle
  595. (call_script, "script_give_center_to_lord", "p_castle_30", "trp_knight_3_4", 0), #Asugan_Castle
  596. (call_script, "script_give_center_to_lord", "p_castle_35", "trp_knight_1_3", 0), #Haringoth_Castle
  597.  
  598. (call_script, "script_assign_lords_to_empty_centers"),
  599.  
  600. #set original factions
  601. (try_for_range, ":center_no", centers_begin, centers_end),
  602. (store_faction_of_party, ":original_faction", ":center_no"),
  603. (faction_get_slot, ":culture", ":original_faction", slot_faction_culture),
  604. (party_set_slot, ":center_no", slot_center_culture, ":culture"),
  605. (party_set_slot, ":center_no", slot_center_original_faction, ":original_faction"),
  606. (party_set_slot, ":center_no", slot_center_ex_faction, ":original_faction"),
  607. (try_end),
  608.  
  609. #set territorial disputes/outstanding border issues
  610. (party_set_slot, "p_castle_10", slot_center_ex_faction, "fac_kingdom_2"), #vaegirs claim nord-held alburq
  611. (party_set_slot, "p_castle_13", slot_center_ex_faction, "fac_kingdom_4"), #nords claim swadian-held kelredan
  612. (party_set_slot, "p_castle_15", slot_center_ex_faction, "fac_kingdom_1"), #swadians claim rhodok-held ergelon
  613. (party_set_slot, "p_castle_46", slot_center_ex_faction, "fac_kingdom_5"), #rhodoks claim sarranid-held weyyah
  614. (party_set_slot, "p_castle_40", slot_center_ex_faction, "fac_kingdom_6"), #sarranids claim khergit-held uhhun
  615. (party_set_slot, "p_town_11", slot_center_ex_faction, "fac_kingdom_3"), #Khergits claim vaegir-held curaw
  616.  
  617. #Swadians, being in the middle, will have additional claims on two of their neighhbors
  618. (party_set_slot, "p_castle_15", slot_center_ex_faction, "fac_kingdom_1"), #swadians claim vaegir-held tilbault
  619. (party_set_slot, "p_castle_22", slot_center_ex_faction, "fac_kingdom_1"), #swadians claim khergit-held unuzdaq
  620.  
  621. (call_script, "script_update_village_market_towns"),
  622.  
  623. #this should come after assignment of territorial grievances
  624. (try_for_range, ":unused", 0, 70),
  625. (try_begin),
  626. (eq, "$cheat_mode", 1),
  627. (display_message, "@{!}DEBUG -- initial war/peace check begins"),
  628. (try_end),
  629. (call_script, "script_randomly_start_war_peace_new", 0),
  630. (try_end),
  631.  
  632.  
  633. #Initialize walkers
  634. (try_for_range, ":center_no", centers_begin, centers_end),
  635. (this_or_next|party_slot_eq, ":center_no", slot_party_type, spt_town),
  636. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  637. (try_for_range, ":walker_no", 0, num_town_walkers),
  638. (call_script, "script_center_set_walker_to_type", ":center_no", ":walker_no", walkert_default),
  639. (try_end),
  640. (try_end),
  641.  
  642.  
  643. #This needs to be after market towns
  644. (call_script, "script_initialize_economic_information"),
  645.  
  646. (try_for_range, ":village_no", villages_begin, villages_end),
  647. (call_script, "script_refresh_village_merchant_inventory", ":village_no"),
  648. (try_end),
  649.  
  650. (try_for_range, ":troop_id", original_kingdom_heroes_begin, active_npcs_end),
  651. (try_begin),
  652. (store_troop_faction, ":faction_id", ":troop_id"),
  653. (is_between, ":faction_id", kingdoms_begin, kingdoms_end),
  654. (troop_set_slot, ":troop_id", slot_troop_original_faction, ":faction_id"),
  655. (try_begin),
  656. (is_between, ":troop_id", pretenders_begin, pretenders_end),
  657. (faction_set_slot, ":faction_id", slot_faction_has_rebellion_chance, 1),
  658. (try_end),
  659. (try_end),
  660. (assign, ":initial_wealth", 6000),
  661. (try_begin),
  662. (store_troop_faction, ":faction", ":troop_id"),
  663. (faction_slot_eq, ":faction", slot_faction_leader, ":troop_id"),
  664. (assign, ":initial_wealth", 20000),
  665. (try_end),
  666. (troop_set_slot, ":troop_id", slot_troop_wealth, ":initial_wealth"),
  667. (try_end),
  668.  
  669. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),#add town garrisons
  670. #Add initial center wealth
  671. (assign, ":initial_wealth", 2000),
  672. (try_begin),
  673. (is_between, ":center_no", towns_begin, towns_end),
  674. (val_mul, ":initial_wealth", 2),
  675. (try_end),
  676. (party_set_slot, ":center_no", slot_town_wealth, ":initial_wealth"),
  677.  
  678. (assign, ":garrison_strength", 15),
  679. (try_begin),
  680. (party_slot_eq, ":center_no", slot_party_type, spt_town),
  681. (assign, ":garrison_strength", 40),
  682. (try_end),
  683. (try_for_range, ":unused", 0, ":garrison_strength"),
  684. (call_script, "script_cf_reinforce_party", ":center_no"),
  685. (try_end),
  686. ## ADD some XP initially
  687. (store_div, ":xp_rounds", ":garrison_strength", 5),
  688. (val_add, ":xp_rounds", 2),
  689.  
  690. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  691.  
  692. (try_begin), #hard
  693. (eq, ":reduce_campaign_ai", 0),
  694. (assign, ":xp_addition_for_centers", 7500),
  695. (else_try), #moderate
  696. (eq, ":reduce_campaign_ai", 1),
  697. (assign, ":xp_addition_for_centers", 5000),
  698. (else_try), #easy
  699. (eq, ":reduce_campaign_ai", 2),
  700. (assign, ":xp_addition_for_centers", 2500),
  701. (try_end),
  702.  
  703. (try_for_range, ":unused", 0, ":xp_rounds"),
  704. (party_upgrade_with_xp, ":center_no", ":xp_addition_for_centers", 0),
  705. (try_end),
  706.  
  707. #Fill town food stores upto half the limit
  708. (call_script, "script_center_get_food_store_limit", ":center_no"),
  709. (assign, ":food_store_limit", reg0),
  710. (val_div, ":food_store_limit", 2),
  711. (party_set_slot, ":center_no", slot_party_food_store, ":food_store_limit"),
  712.  
  713. #create lord parties
  714. (party_get_slot, ":center_lord", ":center_no", slot_town_lord),
  715. (ge, ":center_lord", 1),
  716. (troop_slot_eq, ":center_lord", slot_troop_leaded_party, 0),
  717. (assign, "$g_there_is_no_avaliable_centers", 0),
  718. (call_script, "script_create_kingdom_hero_party", ":center_lord", ":center_no"),
  719. (assign, ":lords_party", "$pout_party"),
  720. (party_attach_to_party, ":lords_party", ":center_no"),
  721. (party_set_slot, ":center_no", slot_town_player_odds, 1000),
  722. (try_end),
  723.  
  724. #More pre-Warband family structures removed here
  725.  
  726. #Warband changes begin - set companions relations
  727. (try_for_range, ":companion", companions_begin, companions_end),
  728. (try_for_range, ":other_companion", companions_begin, companions_end),
  729. (neq, ":other_companion", ":companion"),
  730. (neg|troop_slot_eq, ":companion", slot_troop_personalityclash_object, ":other_companion"),
  731. (neg|troop_slot_eq, ":companion", slot_troop_personalityclash2_object, ":other_companion"),
  732. (call_script, "script_troop_change_relation_with_troop", ":companion", ":other_companion", 7), #companions have a starting relation of 14, unless they are rivals
  733. (try_end),
  734. (try_end),
  735.  
  736. #Warband changes continue - sets relations in the same faction
  737. (try_for_range, ":lord", original_kingdom_heroes_begin, active_npcs_end),
  738. (troop_slot_eq, ":lord", slot_troop_occupation, slto_kingdom_hero),
  739. (troop_get_slot, ":lord_faction", ":lord", slot_troop_original_faction),
  740.  
  741. (try_for_range, ":other_hero", original_kingdom_heroes_begin, active_npcs_end),
  742. (this_or_next|troop_slot_eq, ":other_hero", slot_troop_occupation, slto_kingdom_hero),
  743. (troop_slot_eq, ":other_hero", slot_troop_occupation, slto_inactive_pretender),
  744. (troop_get_slot, ":other_hero_faction", ":other_hero", slot_troop_original_faction),
  745. (eq, ":other_hero_faction", ":lord_faction"),
  746. (call_script, "script_troop_get_family_relation_to_troop", ":lord", ":other_hero"),
  747. (call_script, "script_troop_change_relation_with_troop", ":lord", ":other_hero", reg0),
  748.  
  749. (store_random_in_range, ":random", 0, 11), #this will be scored twice between two kingdom heroes, so starting relation will average 10. Between lords and pretenders it will average 7.5
  750. (call_script, "script_troop_change_relation_with_troop", ":lord", ":other_hero", ":random"),
  751. (try_end),
  752. (try_end),
  753.  
  754. #do about 5 years' worth of political history (assuming 3 random checks a day)
  755. (try_for_range, ":unused", 0, 5000),
  756. (call_script, "script_cf_random_political_event"),
  757. (try_end),
  758. (assign, "$total_random_quarrel_changes", 0),
  759. (assign, "$total_relation_adds", 0),
  760. (assign, "$total_relation_subs", 0),
  761.  
  762. (try_for_range, ":kingdom", kingdoms_begin, kingdoms_end),
  763. (call_script, "script_evaluate_realm_stability", ":kingdom"),
  764. (try_end),
  765. #Warband changes end
  766.  
  767. (try_begin),
  768. (eq, "$cheat_mode", 1),
  769. (assign, reg3, "$cheat_mode"),
  770. (display_message, "@{!}DEBUG : Completed political events, cheat mode: {reg3}"),
  771. (try_end),
  772.  
  773. #assign love interests to unmarried male lords
  774. (try_for_range, ":cur_troop", lords_begin, lords_end),
  775. (troop_slot_eq, ":cur_troop", slot_troop_spouse, -1),
  776. (neg|is_between, ":cur_troop", kings_begin, kings_end),
  777. (neg|is_between, ":cur_troop", pretenders_begin, pretenders_end),
  778.  
  779. (call_script, "script_assign_troop_love_interests", ":cur_troop"),
  780. (try_end),
  781.  
  782. (store_random_in_range, "$romantic_attraction_seed", 0, 5),
  783.  
  784. (try_begin),
  785. (eq, "$cheat_mode", 1),
  786. (assign, reg3, "$romantic_attraction_seed"),
  787. (display_message, "@{!}DEBUG : Assigned love interests. Attraction seed: {reg3}"),
  788. (try_end),
  789.  
  790. #we need to spawn more bandits in warband, because map is bigger.
  791. #(try_for_range, ":unused", 0, 7),
  792. # (call_script, "script_spawn_bandits"),
  793. #(try_end),
  794.  
  795. #(set_spawn_radius, 50),
  796. #(try_for_range, ":unused", 0, 25),
  797. # (spawn_around_party, "p_main_party", "pt_looters"),
  798. #(try_end),
  799.  
  800. (try_for_range, ":unused", 0, 10),
  801. (call_script, "script_spawn_bandits"),
  802. (try_end),
  803.  
  804. #we are adding looter parties around each village with 1/5 probability.
  805. (set_spawn_radius, 5),
  806. (try_for_range, ":cur_village", villages_begin, villages_end),
  807. (store_random_in_range, ":random_value", 0, 5),
  808. (eq, ":random_value", 0),
  809. (spawn_around_party, ":cur_village", "pt_looters"),
  810. (try_end),
  811.  
  812. (call_script, "script_update_mercenary_units_of_towns"),
  813. (call_script, "script_update_companion_candidates_in_taverns"),
  814. (call_script, "script_update_ransom_brokers"),
  815. (call_script, "script_update_tavern_travellers"),
  816. (call_script, "script_update_tavern_minstrels"),
  817. (call_script, "script_update_booksellers"),
  818.  
  819. (try_for_range, ":village_no", villages_begin, villages_end),
  820. (call_script, "script_update_volunteer_troops_in_village", ":village_no"),
  821. (try_end),
  822.  
  823. (try_for_range, ":cur_kingdom", kingdoms_begin, kingdoms_end),
  824. (call_script, "script_update_faction_notes", ":cur_kingdom"),
  825. (store_random_in_range, ":random_no", -60, 0),
  826. (faction_set_slot, ":faction_no", slot_faction_last_offensive_concluded, ":random_no"),
  827. (try_end),
  828.  
  829. (try_for_range, ":cur_troop", original_kingdom_heroes_begin, active_npcs_end),
  830. (call_script, "script_update_troop_notes", ":cur_troop"),
  831. (try_end),
  832.  
  833. (try_for_range, ":cur_center", centers_begin, centers_end),
  834. (call_script, "script_update_center_notes", ":cur_center"),
  835. (try_end),
  836.  
  837. (call_script, "script_update_troop_notes", "trp_player"),
  838.  
  839. #Place kingdom ladies
  840. (try_for_range, ":troop_id", kingdom_ladies_begin, kingdom_ladies_end),
  841. (call_script, "script_get_kingdom_lady_social_determinants", ":troop_id"),
  842. (troop_set_slot, ":troop_id", slot_troop_cur_center, reg1),
  843. (try_end),
  844.  
  845. (try_begin),
  846. (eq, "$cheat_mode", 1),
  847. (assign, reg3, "$cheat_mode"),
  848. (display_message, "@{!}DEBUG : Located kingdom ladies, cheat mode: {reg3}"),
  849. (try_end),
  850.  
  851. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  852. (call_script, "script_faction_recalculate_strength", ":faction_no"),
  853. (try_end),
  854.  
  855. (faction_set_slot, "fac_kingdom_1", slot_faction_adjective, "str_kingdom_1_adjective"),
  856. (faction_set_slot, "fac_kingdom_2", slot_faction_adjective, "str_kingdom_2_adjective"),
  857. (faction_set_slot, "fac_kingdom_3", slot_faction_adjective, "str_kingdom_3_adjective"),
  858. (faction_set_slot, "fac_kingdom_4", slot_faction_adjective, "str_kingdom_4_adjective"),
  859. (faction_set_slot, "fac_kingdom_5", slot_faction_adjective, "str_kingdom_5_adjective"),
  860. (faction_set_slot, "fac_kingdom_6", slot_faction_adjective, "str_kingdom_6_adjective"),
  861.  
  862. ## (assign, "$players_kingdom", "fac_kingdom_1"),
  863. ## (call_script, "script_give_center_to_lord", "p_town_7", "trp_player", 0),
  864. ## (call_script, "script_give_center_to_lord", "p_town_16", "trp_player", 0),
  865. #### (call_script, "script_give_center_to_lord", "p_castle_10", "trp_player", 0),
  866. ## (assign, "$g_castle_requested_by_player", "p_castle_10"),
  867. (call_script, "script_get_player_party_morale_values"),
  868. (party_set_morale, "p_main_party", reg0),
  869.  
  870. (troop_set_note_available, "trp_player", 1),
  871.  
  872. (try_for_range, ":troop_no", kings_begin, kings_end),
  873. (troop_set_note_available, ":troop_no", 1),
  874. (try_end),
  875.  
  876. (try_for_range, ":troop_no", lords_begin, lords_end),
  877. (troop_set_note_available, ":troop_no", 1),
  878. (try_end),
  879.  
  880. (try_for_range, ":troop_no", kingdom_ladies_begin, kingdom_ladies_end),
  881. (troop_set_note_available, ":troop_no", 1),
  882. (try_end),
  883. (troop_set_note_available, "trp_knight_1_1_wife", 0),
  884.  
  885. (try_for_range, ":troop_no", pretenders_begin, pretenders_end),
  886. (troop_set_note_available, ":troop_no", 1),
  887. (try_end),
  888.  
  889. #Lady and companion notes become available as you meet/recruit them
  890.  
  891. (try_for_range, ":faction_no", npc_kingdoms_begin, npc_kingdoms_end),
  892. (faction_set_note_available, ":faction_no", 1),
  893. (try_end),
  894. (faction_set_note_available, "fac_neutral", 0),
  895.  
  896. (try_for_range, ":party_no", centers_begin, centers_end),
  897. (party_set_note_available, ":party_no", 1),
  898. (try_end),
  899. ]),
  900.  
  901. #script_game_get_use_string
  902. # This script is called from the game engine for getting using information text
  903. # INPUT: used_scene_prop_id
  904. # OUTPUT: s0
  905. ("game_get_use_string",
  906. [
  907. (store_script_param, ":instance_id", 1),
  908.  
  909. (prop_instance_get_scene_prop_kind, ":scene_prop_id", ":instance_id"),
  910.  
  911. (try_begin),
  912. (this_or_next|eq, ":scene_prop_id", "spr_winch_b"),
  913. (eq, ":scene_prop_id", "spr_winch"),
  914. (assign, ":effected_object", "spr_portcullis"),
  915. (else_try),
  916. (this_or_next|eq, ":scene_prop_id", "spr_door_destructible"),
  917. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_door_b"),
  918. (this_or_next|eq, ":scene_prop_id", "spr_castle_e_sally_door_a"),
  919. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_sally_door_a"),
  920. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_left"),
  921. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_right"),
  922. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_left"),
  923. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_right"),
  924. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_door_a"),
  925. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_6m"),
  926. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_8m"),
  927. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_10m"),
  928. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_12m"),
  929. (eq, ":scene_prop_id", "spr_siege_ladder_move_14m"),
  930. (assign, ":effected_object", ":scene_prop_id"),
  931. (try_end),
  932.  
  933. (scene_prop_get_slot, ":item_situation", ":instance_id", scene_prop_open_or_close_slot),
  934.  
  935. (try_begin), #opening/closing portcullis
  936. (eq, ":effected_object", "spr_portcullis"),
  937.  
  938. (try_begin),
  939. (eq, ":item_situation", 0),
  940. (str_store_string, s0, "str_open_gate"),
  941. (else_try),
  942. (str_store_string, s0, "str_close_gate"),
  943. (try_end),
  944. (else_try), #opening/closing door
  945. (this_or_next|eq, ":effected_object", "spr_door_destructible"),
  946. (this_or_next|eq, ":effected_object", "spr_castle_f_door_b"),
  947. (this_or_next|eq, ":effected_object", "spr_castle_e_sally_door_a"),
  948. (this_or_next|eq, ":effected_object", "spr_castle_f_sally_door_a"),
  949. (this_or_next|eq, ":effected_object", "spr_earth_sally_gate_left"),
  950. (this_or_next|eq, ":effected_object", "spr_earth_sally_gate_right"),
  951. (this_or_next|eq, ":effected_object", "spr_viking_keep_destroy_sally_door_left"),
  952. (this_or_next|eq, ":effected_object", "spr_viking_keep_destroy_sally_door_right"),
  953. (eq, ":effected_object", "spr_castle_f_door_a"),
  954.  
  955. (try_begin),
  956. (eq, ":item_situation", 0),
  957. (str_store_string, s0, "str_open_door"),
  958. (else_try),
  959. (str_store_string, s0, "str_close_door"),
  960. (try_end),
  961. #INVASION MODE START
  962. (else_try),
  963. #(display_message, "@could it be?"),
  964. (eq, ":scene_prop_id", "spr_multiplayer_coop_item_drop"),
  965. #(display_message, "@one of those!"),
  966. (str_store_string, s0, "str_coop_open_chest"),
  967. (multiplayer_get_my_player, ":player_no"),
  968. (try_for_range, ":cur_slot", slot_player_coop_opened_chests_begin, slot_player_coop_opened_chests_end),
  969. (player_get_slot, ":cur_instance", ":player_no", ":cur_slot"),
  970. (try_begin),
  971. (eq, ":cur_instance", ":instance_id"),
  972. (neg|is_presentation_active, "prsnt_coop_assign_drop_to_group_member"),
  973. (str_store_string, s0, "str_coop_already_opened"),
  974. (try_end),
  975. (try_end),
  976. #INVASION MODE END
  977. (else_try), #raising/dropping ladder
  978. (try_begin),
  979. (eq, ":item_situation", 0),
  980. (str_store_string, s0, "str_raise_ladder"),
  981. (else_try),
  982. (str_store_string, s0, "str_drop_ladder"),
  983. (try_end),
  984. (try_end),
  985. ]),
  986.  
  987. #script_game_quick_start
  988. # This script is called from the game engine for initializing the global variables for tutorial, multiplayer and custom battle modes.
  989. # INPUT:
  990. # none
  991. # OUTPUT:
  992. # none
  993. ("game_quick_start",
  994. [
  995. #for quick battle mode
  996. (assign, "$g_is_quick_battle", 0),
  997. (assign, "$g_quick_battle_game_type", 0),
  998. (assign, "$g_quick_battle_troop", quick_battle_troops_begin),
  999. (assign, "$g_quick_battle_map", quick_battle_scenes_begin),
  1000. (assign, "$g_quick_battle_team_1_faction", "fac_kingdom_1"),
  1001. (assign, "$g_quick_battle_team_2_faction", "fac_kingdom_2"),
  1002. (assign, "$g_quick_battle_army_1_size", 25),
  1003. (assign, "$g_quick_battle_army_2_size", 25),
  1004.  
  1005. (faction_set_slot, "fac_outlaws", slot_faction_quick_battle_tier_1_infantry, "trp_mountain_bandit"),
  1006. (faction_set_slot, "fac_outlaws", slot_faction_quick_battle_tier_2_infantry, "trp_sea_raider"),
  1007. (faction_set_slot, "fac_outlaws", slot_faction_quick_battle_tier_1_archer, "trp_forest_bandit"),
  1008. (faction_set_slot, "fac_outlaws", slot_faction_quick_battle_tier_2_archer, "trp_taiga_bandit"),
  1009. (faction_set_slot, "fac_outlaws", slot_faction_quick_battle_tier_1_cavalry, "trp_steppe_bandit"),
  1010. (faction_set_slot, "fac_outlaws", slot_faction_quick_battle_tier_2_cavalry, "trp_desert_bandit"),
  1011. (faction_set_slot, "fac_kingdom_1", slot_faction_quick_battle_tier_1_infantry, "trp_swadian_footman"),
  1012. (faction_set_slot, "fac_kingdom_1", slot_faction_quick_battle_tier_2_infantry, "trp_swadian_infantry"),
  1013. (faction_set_slot, "fac_kingdom_1", slot_faction_quick_battle_tier_1_archer, "trp_swadian_skirmisher"),
  1014. (faction_set_slot, "fac_kingdom_1", slot_faction_quick_battle_tier_2_archer, "trp_swadian_crossbowman"),
  1015. (faction_set_slot, "fac_kingdom_1", slot_faction_quick_battle_tier_1_cavalry, "trp_swadian_man_at_arms"),
  1016. (faction_set_slot, "fac_kingdom_1", slot_faction_quick_battle_tier_2_cavalry, "trp_swadian_knight"),
  1017. (faction_set_slot, "fac_kingdom_2", slot_faction_quick_battle_tier_1_infantry, "trp_vaegir_footman"),
  1018. (faction_set_slot, "fac_kingdom_2", slot_faction_quick_battle_tier_2_infantry, "trp_vaegir_infantry"),
  1019. (faction_set_slot, "fac_kingdom_2", slot_faction_quick_battle_tier_1_archer, "trp_vaegir_skirmisher"),
  1020. (faction_set_slot, "fac_kingdom_2", slot_faction_quick_battle_tier_2_archer, "trp_vaegir_archer"),
  1021. (faction_set_slot, "fac_kingdom_2", slot_faction_quick_battle_tier_1_cavalry, "trp_vaegir_horseman"),
  1022. (faction_set_slot, "fac_kingdom_2", slot_faction_quick_battle_tier_2_cavalry, "trp_vaegir_knight"),
  1023. (faction_set_slot, "fac_kingdom_3", slot_faction_quick_battle_tier_1_infantry, "trp_khergit_dismounted_lancer_multiplayer_ai"),
  1024. (faction_set_slot, "fac_kingdom_3", slot_faction_quick_battle_tier_2_infantry, "trp_khergit_dismounted_lancer_multiplayer_ai"),
  1025. (faction_set_slot, "fac_kingdom_3", slot_faction_quick_battle_tier_1_archer, "trp_khergit_horse_archer"),
  1026. (faction_set_slot, "fac_kingdom_3", slot_faction_quick_battle_tier_2_archer, "trp_khergit_veteran_horse_archer"),
  1027. (faction_set_slot, "fac_kingdom_3", slot_faction_quick_battle_tier_1_cavalry, "trp_khergit_lancer"),
  1028. (faction_set_slot, "fac_kingdom_3", slot_faction_quick_battle_tier_2_cavalry, "trp_khergit_lancer"),
  1029. (faction_set_slot, "fac_kingdom_4", slot_faction_quick_battle_tier_1_infantry, "trp_nord_warrior"),
  1030. (faction_set_slot, "fac_kingdom_4", slot_faction_quick_battle_tier_2_infantry, "trp_nord_champion"),
  1031. (faction_set_slot, "fac_kingdom_4", slot_faction_quick_battle_tier_1_archer, "trp_nord_archer"),
  1032. (faction_set_slot, "fac_kingdom_4", slot_faction_quick_battle_tier_2_archer, "trp_nord_veteran_archer"),
  1033. (faction_set_slot, "fac_kingdom_4", slot_faction_quick_battle_tier_1_cavalry, "trp_nord_scout_multiplayer_ai"),
  1034. (faction_set_slot, "fac_kingdom_4", slot_faction_quick_battle_tier_2_cavalry, "trp_nord_scout_multiplayer_ai"),
  1035. (faction_set_slot, "fac_kingdom_5", slot_faction_quick_battle_tier_1_infantry, "trp_rhodok_veteran_spearman"),
  1036. (faction_set_slot, "fac_kingdom_5", slot_faction_quick_battle_tier_2_infantry, "trp_rhodok_sergeant"),
  1037. (faction_set_slot, "fac_kingdom_5", slot_faction_quick_battle_tier_1_archer, "trp_rhodok_crossbowman"),
  1038. (faction_set_slot, "fac_kingdom_5", slot_faction_quick_battle_tier_2_archer, "trp_rhodok_veteran_crossbowman"),
  1039. (faction_set_slot, "fac_kingdom_5", slot_faction_quick_battle_tier_1_cavalry, "trp_rhodok_scout_multiplayer_ai"),
  1040. (faction_set_slot, "fac_kingdom_5", slot_faction_quick_battle_tier_2_cavalry, "trp_rhodok_scout_multiplayer_ai"),
  1041. (faction_set_slot, "fac_kingdom_6", slot_faction_quick_battle_tier_1_infantry, "trp_sarranid_veteran_footman"),
  1042. (faction_set_slot, "fac_kingdom_6", slot_faction_quick_battle_tier_2_infantry, "trp_sarranid_infantry"),
  1043. (faction_set_slot, "fac_kingdom_6", slot_faction_quick_battle_tier_1_archer, "trp_sarranid_skirmisher"),
  1044. (faction_set_slot, "fac_kingdom_6", slot_faction_quick_battle_tier_2_archer, "trp_sarranid_archer"),
  1045. (faction_set_slot, "fac_kingdom_6", slot_faction_quick_battle_tier_1_cavalry, "trp_sarranid_horseman"),
  1046. (faction_set_slot, "fac_kingdom_6", slot_faction_quick_battle_tier_2_cavalry, "trp_sarranid_mamluke"),
  1047.  
  1048. #for multiplayer mode
  1049. (assign, "$g_multiplayer_selected_map", multiplayer_scenes_begin),
  1050. (assign, "$g_multiplayer_respawn_period", 5),
  1051. (assign, "$g_multiplayer_round_max_seconds", 300),
  1052. (assign, "$g_multiplayer_game_max_minutes", 30),
  1053. (assign, "$g_multiplayer_game_max_points", 300),
  1054.  
  1055. (server_get_renaming_server_allowed, "$g_multiplayer_renaming_server_allowed"),
  1056. (server_get_changing_game_type_allowed, "$g_multiplayer_changing_game_type_allowed"),
  1057. (assign, "$g_multiplayer_point_gained_from_flags", 100),
  1058. (assign, "$g_multiplayer_point_gained_from_capturing_flag", 5),
  1059. (assign, "$g_multiplayer_game_type", 0),
  1060. (assign, "$g_multiplayer_team_1_faction", "fac_kingdom_1"),
  1061. (assign, "$g_multiplayer_team_2_faction", "fac_kingdom_2"),
  1062. (assign, "$g_multiplayer_next_team_1_faction", "$g_multiplayer_team_1_faction"),
  1063. (assign, "$g_multiplayer_next_team_2_faction", "$g_multiplayer_team_2_faction"),
  1064. (assign, "$g_multiplayer_num_bots_team_1", 0),
  1065. (assign, "$g_multiplayer_num_bots_team_2", 0),
  1066. (assign, "$g_multiplayer_number_of_respawn_count", 0),
  1067. (assign, "$g_multiplayer_num_bots_voteable", 50),
  1068. (assign, "$g_multiplayer_max_num_bots", 101),
  1069. (assign, "$g_multiplayer_factions_voteable", 1),
  1070. (assign, "$g_multiplayer_maps_voteable", 1),
  1071. (assign, "$g_multiplayer_kick_voteable", 1),
  1072. (assign, "$g_multiplayer_ban_voteable", 1),
  1073. (assign, "$g_multiplayer_valid_vote_ratio", 51), #more than 50 percent
  1074. (assign, "$g_multiplayer_auto_team_balance_limit", 3), #auto balance when difference is more than 2
  1075. (assign, "$g_multiplayer_player_respawn_as_bot", 1),
  1076. (assign, "$g_multiplayer_stats_chart_opened_manually", 0),
  1077. (assign, "$g_multiplayer_mission_end_screen", 0),
  1078. (assign, "$g_multiplayer_ready_for_spawning_agent", 1),
  1079. (assign, "$g_multiplayer_welcome_message_shown", 0),
  1080. (assign, "$g_multiplayer_allow_player_banners", 1),
  1081. (assign, "$g_multiplayer_force_default_armor", 1),
  1082. (assign, "$g_multiplayer_disallow_ranged_weapons", 0),
  1083.  
  1084. (assign, "$g_multiplayer_initial_gold_multiplier", 100),
  1085. (assign, "$g_multiplayer_battle_earnings_multiplier", 100),
  1086. (assign, "$g_multiplayer_round_earnings_multiplier", 100),
  1087.  
  1088. #INVASION MODE START
  1089. (assign, "$g_multiplayer_is_game_type_captain", 0),
  1090. (assign, "$g_multiplayer_ccoop_difficulty", 1),
  1091. #INVASION MODE END
  1092.  
  1093. #faction banners
  1094. (faction_set_slot, "fac_kingdom_1", slot_faction_banner, "mesh_banner_kingdom_f"),
  1095. (faction_set_slot, "fac_kingdom_2", slot_faction_banner, "mesh_banner_kingdom_b"),
  1096. (faction_set_slot, "fac_kingdom_3", slot_faction_banner, "mesh_banner_kingdom_c"),
  1097. (faction_set_slot, "fac_kingdom_4", slot_faction_banner, "mesh_banner_kingdom_a"),
  1098. (faction_set_slot, "fac_kingdom_5", slot_faction_banner, "mesh_banner_kingdom_d"),
  1099. (faction_set_slot, "fac_kingdom_6", slot_faction_banner, "mesh_banner_kingdom_e"),
  1100.  
  1101. (try_for_range, ":cur_item", all_items_begin, all_items_end),
  1102. (try_for_range, ":cur_faction", npc_kingdoms_begin, npc_kingdoms_end),
  1103. (store_sub, ":faction_index", ":cur_faction", npc_kingdoms_begin),
  1104. (val_add, ":faction_index", slot_item_multiplayer_faction_price_multipliers_begin),
  1105. (item_set_slot, ":cur_item", ":faction_index", 100), #100 is the default price multiplier
  1106. (try_end),
  1107. (try_end),
  1108. (store_sub, ":swadian_price_slot", "fac_kingdom_1", npc_kingdoms_begin),
  1109. (val_add, ":swadian_price_slot", slot_item_multiplayer_faction_price_multipliers_begin),
  1110. (store_sub, ":vaegir_price_slot", "fac_kingdom_2", npc_kingdoms_begin),
  1111. (val_add, ":vaegir_price_slot", slot_item_multiplayer_faction_price_multipliers_begin),
  1112. (store_sub, ":khergit_price_slot", "fac_kingdom_3", npc_kingdoms_begin),
  1113. (val_add, ":khergit_price_slot", slot_item_multiplayer_faction_price_multipliers_begin),
  1114. (store_sub, ":nord_price_slot", "fac_kingdom_4", npc_kingdoms_begin),
  1115. (val_add, ":nord_price_slot", slot_item_multiplayer_faction_price_multipliers_begin),
  1116. (store_sub, ":rhodok_price_slot", "fac_kingdom_5", npc_kingdoms_begin),
  1117. (val_add, ":rhodok_price_slot", slot_item_multiplayer_faction_price_multipliers_begin),
  1118. (store_sub, ":sarranid_price_slot", "fac_kingdom_6", npc_kingdoms_begin),
  1119. (val_add, ":sarranid_price_slot", slot_item_multiplayer_faction_price_multipliers_begin),
  1120.  
  1121. (item_set_slot, "itm_awlpike", ":swadian_price_slot", 80),
  1122. (item_set_slot, "itm_awlpike_long", ":swadian_price_slot", 90),
  1123. (item_set_slot, "itm_sword_medieval_a", ":swadian_price_slot", 80),
  1124. (item_set_slot, "itm_sword_medieval_b", ":swadian_price_slot", 80),
  1125. (item_set_slot, "itm_sword_medieval_b_small", ":swadian_price_slot", 80),
  1126. (item_set_slot, "itm_sword_medieval_c", ":swadian_price_slot", 80),
  1127. (item_set_slot, "itm_sword_medieval_c_small", ":swadian_price_slot", 80),
  1128. (item_set_slot, "itm_leather_boots", ":swadian_price_slot", 90),
  1129. (item_set_slot, "itm_mail_chausses", ":swadian_price_slot", 80),
  1130. (item_set_slot, "itm_splinted_greaves", ":swadian_price_slot", 80),
  1131. (item_set_slot, "itm_plate_boots", ":swadian_price_slot", 80),
  1132. (item_set_slot, "itm_courser", ":swadian_price_slot", 90),
  1133. (item_set_slot, "itm_hunter", ":swadian_price_slot", 75),
  1134. (item_set_slot, "itm_norman_helmet", ":swadian_price_slot", 75),
  1135. (item_set_slot, "itm_helmet_with_neckguard", ":swadian_price_slot", 75),
  1136. (item_set_slot, "itm_red_gambeson", ":swadian_price_slot", 75),
  1137. (item_set_slot, "itm_darts", ":swadian_price_slot", 50),
  1138. (item_set_slot, "itm_war_darts", ":swadian_price_slot", 50),
  1139. (item_set_slot, "itm_tab_shield_heater_d", ":swadian_price_slot", 80),
  1140. (item_set_slot, "itm_brigandine_red", ":swadian_price_slot", 75),
  1141. (item_set_slot, "itm_bastard_sword_b", ":swadian_price_slot", 65),
  1142. (item_set_slot, "itm_bastard_sword_a", ":swadian_price_slot", 85),
  1143.  
  1144. (item_set_slot, "itm_steppe_horse", ":khergit_price_slot", 120),
  1145. (item_set_slot, "itm_courser", ":khergit_price_slot", 80),
  1146. (item_set_slot, "itm_hunter", ":khergit_price_slot", 80),
  1147. (item_set_slot, "itm_warhorse_steppe", ":khergit_price_slot", 120),
  1148. (item_set_slot, "itm_one_handed_war_axe_a", ":khergit_price_slot", 300),
  1149. (item_set_slot, "itm_tribal_warrior_outfit", ":khergit_price_slot", 140),
  1150.  
  1151. (item_set_slot, "itm_leather_gloves", ":sarranid_price_slot", 50),
  1152. (item_set_slot, "itm_short_bow", ":sarranid_price_slot", 50),
  1153. (item_set_slot, "itm_barbed_arrows", ":sarranid_price_slot", 80),
  1154. (item_set_slot, "itm_jarid", ":sarranid_price_slot", 85),
  1155. (item_set_slot, "itm_javelin", ":sarranid_price_slot", 85),
  1156.  
  1157. (item_set_slot, "itm_lamellar_vest", ":vaegir_price_slot", 130),
  1158. (item_set_slot, "itm_awlpike", ":vaegir_price_slot", 150),
  1159. (item_set_slot, "itm_scimitar", ":vaegir_price_slot", 130),
  1160. (item_set_slot, "itm_scimitar_b", ":vaegir_price_slot", 150),
  1161. (item_set_slot, "itm_tab_shield_kite_a", ":vaegir_price_slot", 120),
  1162. (item_set_slot, "itm_tab_shield_kite_b", ":vaegir_price_slot", 120),
  1163. (item_set_slot, "itm_tab_shield_kite_c", ":vaegir_price_slot", 120),
  1164. (item_set_slot, "itm_tab_shield_kite_d", ":vaegir_price_slot", 120),
  1165. (item_set_slot, "itm_javelin", ":vaegir_price_slot", 120),
  1166.  
  1167. #arrows
  1168. (item_set_slot, "itm_arrows", slot_item_multiplayer_item_class, multi_item_class_type_arrow),
  1169. (item_set_slot, "itm_barbed_arrows", slot_item_multiplayer_item_class, multi_item_class_type_arrow),
  1170. (item_set_slot, "itm_bodkin_arrows", slot_item_multiplayer_item_class, multi_item_class_type_arrow),
  1171. (item_set_slot, "itm_khergit_arrows", slot_item_multiplayer_item_class, multi_item_class_type_arrow),
  1172. #bolts
  1173. (item_set_slot, "itm_bolts", slot_item_multiplayer_item_class, multi_item_class_type_bolt),
  1174. (item_set_slot, "itm_steel_bolts", slot_item_multiplayer_item_class, multi_item_class_type_bolt),
  1175. #bows
  1176. (item_set_slot, "itm_crossbow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1177. (item_set_slot, "itm_heavy_crossbow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1178. (item_set_slot, "itm_sniper_crossbow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1179. (item_set_slot, "itm_nomad_bow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1180. (item_set_slot, "itm_khergit_bow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1181. (item_set_slot, "itm_strong_bow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1182. (item_set_slot, "itm_war_bow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1183. (item_set_slot, "itm_short_bow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1184. (item_set_slot, "itm_long_bow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1185. (item_set_slot, "itm_light_crossbow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1186. #swords
  1187. (item_set_slot, "itm_sword_medieval_a", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1188. (item_set_slot, "itm_sword_medieval_b", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1189. (item_set_slot, "itm_sword_medieval_b_small", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1190. (item_set_slot, "itm_sword_medieval_c", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1191. (item_set_slot, "itm_sword_medieval_c_small", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1192. (item_set_slot, "itm_scimitar", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1193. (item_set_slot, "itm_scimitar_b", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1194. (item_set_slot, "itm_dagger", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1195. (item_set_slot, "itm_sword_khergit_1", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1196. (item_set_slot, "itm_sword_khergit_2", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1197. (item_set_slot, "itm_sword_khergit_3", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1198. (item_set_slot, "itm_sword_khergit_4", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1199. (item_set_slot, "itm_sword_viking_1", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1200. (item_set_slot, "itm_sword_viking_2", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1201. (item_set_slot, "itm_sword_viking_2_small", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1202. (item_set_slot, "itm_sword_viking_3", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1203. (item_set_slot, "itm_sword_viking_3_small", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1204. (item_set_slot, "itm_bastard_sword_a", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1205. (item_set_slot, "itm_bastard_sword_b", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1206. (item_set_slot, "itm_sword_two_handed_a", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1207. (item_set_slot, "itm_sword_two_handed_b", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1208. (item_set_slot, "itm_arabian_sword_a", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1209. (item_set_slot, "itm_arabian_sword_b", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1210. (item_set_slot, "itm_sarranid_cavalry_sword", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1211. (item_set_slot, "itm_arabian_sword_d", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_sword),
  1212.  
  1213. #axe
  1214. (item_set_slot, "itm_axe", slot_item_multiplayer_item_class, multi_item_class_type_axe),
  1215. (item_set_slot, "itm_battle_axe", slot_item_multiplayer_item_class, multi_item_class_type_axe),
  1216. (item_set_slot, "itm_one_handed_war_axe_a", slot_item_multiplayer_item_class, multi_item_class_type_axe),
  1217. (item_set_slot, "itm_one_handed_war_axe_b", slot_item_multiplayer_item_class, multi_item_class_type_axe),
  1218. (item_set_slot, "itm_one_handed_battle_axe_a", slot_item_multiplayer_item_class, multi_item_class_type_axe),
  1219. (item_set_slot, "itm_one_handed_battle_axe_b", slot_item_multiplayer_item_class, multi_item_class_type_axe),
  1220. (item_set_slot, "itm_one_handed_battle_axe_c", slot_item_multiplayer_item_class, multi_item_class_type_axe),
  1221.  
  1222. (item_set_slot, "itm_two_handed_axe", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1223. (item_set_slot, "itm_two_handed_battle_axe_2", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1224. (item_set_slot, "itm_shortened_voulge", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1225. (item_set_slot, "itm_bardiche", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1226. (item_set_slot, "itm_great_axe", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1227. (item_set_slot, "itm_great_bardiche", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1228. (item_set_slot, "itm_long_axe", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1229. (item_set_slot, "itm_long_axe_b", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1230. (item_set_slot, "itm_long_axe_c", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1231. (item_set_slot, "itm_voulge", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1232. (item_set_slot, "itm_long_bardiche", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1233. (item_set_slot, "itm_great_long_bardiche", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1234.  
  1235. #blunt
  1236. (item_set_slot, "itm_mace_1", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1237. (item_set_slot, "itm_mace_2", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1238. (item_set_slot, "itm_mace_3", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1239. (item_set_slot, "itm_mace_4", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1240. (item_set_slot, "itm_long_spiked_club", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1241. (item_set_slot, "itm_long_hafted_spiked_mace", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1242.  
  1243. (item_set_slot, "itm_maul", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1244. (item_set_slot, "itm_sledgehammer", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1245. (item_set_slot, "itm_warhammer", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1246. (item_set_slot, "itm_morningstar", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1247. #picks
  1248. (item_set_slot, "itm_military_sickle_a", slot_item_multiplayer_item_class, multi_item_class_type_war_picks),
  1249. (item_set_slot, "itm_fighting_pick", slot_item_multiplayer_item_class, multi_item_class_type_war_picks),
  1250. (item_set_slot, "itm_military_pick", slot_item_multiplayer_item_class, multi_item_class_type_war_picks),
  1251. (item_set_slot, "itm_club_with_spike_head", slot_item_multiplayer_item_class, multi_item_class_type_war_picks),
  1252.  
  1253. #Cleavers
  1254. (item_set_slot, "itm_falchion", slot_item_multiplayer_item_class, multi_item_class_type_cleavers),
  1255. (item_set_slot, "itm_military_cleaver_b", slot_item_multiplayer_item_class, multi_item_class_type_cleavers),
  1256. (item_set_slot, "itm_military_cleaver_c", slot_item_multiplayer_item_class, multi_item_class_type_cleavers),
  1257. (item_set_slot, "itm_two_handed_cleaver", slot_item_multiplayer_item_class, multi_item_class_type_cleavers),
  1258. (item_set_slot, "itm_hafted_blade_a", slot_item_multiplayer_item_class, multi_item_class_type_cleavers),
  1259. (item_set_slot, "itm_hafted_blade_b", slot_item_multiplayer_item_class, multi_item_class_type_cleavers),
  1260. (item_set_slot, "itm_shortened_military_scythe", slot_item_multiplayer_item_class, multi_item_class_type_cleavers),
  1261.  
  1262. (item_set_slot, "itm_sarranid_mace_1", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1263. (item_set_slot, "itm_sarranid_axe_a", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1264. (item_set_slot, "itm_sarranid_axe_b", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1265. (item_set_slot, "itm_sarranid_two_handed_axe_a", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1266. (item_set_slot, "itm_sarranid_two_handed_axe_b", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1267. (item_set_slot, "itm_sarranid_two_handed_mace_1", slot_item_multiplayer_item_class, multi_item_class_type_two_handed_axe),
  1268. (item_set_slot, "itm_bamboo_spear", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1269.  
  1270.  
  1271.  
  1272. #spears
  1273. (item_set_slot, "itm_double_sided_lance", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1274. (item_set_slot, "itm_glaive", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1275. (item_set_slot, "itm_poleaxe", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1276. (item_set_slot, "itm_polehammer", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1277. (item_set_slot, "itm_staff", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1278. (item_set_slot, "itm_quarter_staff", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1279. (item_set_slot, "itm_iron_staff", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1280.  
  1281. (item_set_slot, "itm_shortened_spear", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1282. (item_set_slot, "itm_spear", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1283. (item_set_slot, "itm_war_spear", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1284. (item_set_slot, "itm_military_scythe", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1285. (item_set_slot, "itm_pike", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1286. (item_set_slot, "itm_ashwood_pike", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1287. (item_set_slot, "itm_awlpike", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1288. (item_set_slot, "itm_awlpike_long", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1289. #lance
  1290. (item_set_slot, "itm_light_lance", slot_item_multiplayer_item_class, multi_item_class_type_lance),
  1291. (item_set_slot, "itm_lance", slot_item_multiplayer_item_class, multi_item_class_type_lance),
  1292. (item_set_slot, "itm_heavy_lance", slot_item_multiplayer_item_class, multi_item_class_type_lance),
  1293. (item_set_slot, "itm_great_lance", slot_item_multiplayer_item_class, multi_item_class_type_lance),
  1294. #shields
  1295.  
  1296. (item_set_slot, "itm_tab_shield_round_a", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1297. (item_set_slot, "itm_tab_shield_round_b", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1298. (item_set_slot, "itm_tab_shield_round_c", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1299. (item_set_slot, "itm_tab_shield_round_d", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1300. (item_set_slot, "itm_tab_shield_round_e", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1301. (item_set_slot, "itm_tab_shield_kite_a", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1302. (item_set_slot, "itm_tab_shield_kite_b", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1303. (item_set_slot, "itm_tab_shield_kite_c", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1304. (item_set_slot, "itm_tab_shield_kite_d", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1305. (item_set_slot, "itm_tab_shield_kite_cav_a", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1306. (item_set_slot, "itm_tab_shield_kite_cav_b", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1307. (item_set_slot, "itm_tab_shield_heater_a", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1308. (item_set_slot, "itm_tab_shield_heater_b", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1309. (item_set_slot, "itm_tab_shield_heater_c", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1310. (item_set_slot, "itm_tab_shield_heater_d", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1311. (item_set_slot, "itm_tab_shield_heater_cav_a", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1312. (item_set_slot, "itm_tab_shield_heater_cav_b", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1313. (item_set_slot, "itm_tab_shield_pavise_a", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1314. (item_set_slot, "itm_tab_shield_pavise_b", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1315. (item_set_slot, "itm_tab_shield_pavise_c", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1316. (item_set_slot, "itm_tab_shield_pavise_d", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1317. (item_set_slot, "itm_tab_shield_small_round_a", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1318. (item_set_slot, "itm_tab_shield_small_round_b", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1319. (item_set_slot, "itm_tab_shield_small_round_c", slot_item_multiplayer_item_class, multi_item_class_type_small_shield),
  1320. (item_set_slot, "itm_spear", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1321. #throwing
  1322. (item_set_slot, "itm_darts", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1323. (item_set_slot, "itm_war_darts", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1324. (item_set_slot, "itm_javelin", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1325. (item_set_slot, "itm_jarid", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1326. (item_set_slot, "itm_throwing_spears", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1327.  
  1328. (item_set_slot, "itm_throwing_axes", slot_item_multiplayer_item_class, multi_item_class_type_throwing_axe),
  1329. (item_set_slot, "itm_light_throwing_axes", slot_item_multiplayer_item_class, multi_item_class_type_throwing_axe),
  1330. (item_set_slot, "itm_heavy_throwing_axes", slot_item_multiplayer_item_class, multi_item_class_type_throwing_axe),
  1331. #armors
  1332. (item_set_slot, "itm_red_shirt", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1333. (item_set_slot, "itm_red_tunic", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1334. (item_set_slot, "itm_aketon_green", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1335. (item_set_slot, "itm_padded_cloth", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1336. (item_set_slot, "itm_red_gambeson", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1337. (item_set_slot, "itm_leather_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1338. (item_set_slot, "itm_haubergeon", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1339. (item_set_slot, "itm_coat_of_plates_red", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1340. (item_set_slot, "itm_brigandine_red", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1341. (item_set_slot, "itm_mail_with_surcoat", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1342. (item_set_slot, "itm_linen_tunic", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1343. (item_set_slot, "itm_leather_vest", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1344. (item_set_slot, "itm_leather_jerkin", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1345. (item_set_slot, "itm_studded_leather_coat", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1346. (item_set_slot, "itm_lamellar_vest", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1347. (item_set_slot, "itm_lamellar_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1348. (item_set_slot, "itm_coarse_tunic", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1349. (item_set_slot, "itm_tribal_warrior_outfit", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1350. (item_set_slot, "itm_khergit_guard_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1351. (item_set_slot, "itm_blue_tunic", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1352. (item_set_slot, "itm_mail_hauberk", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1353. (item_set_slot, "itm_mail_shirt", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1354. (item_set_slot, "itm_byrnie", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1355. (item_set_slot, "itm_lamellar_vest_khergit", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1356. (item_set_slot, "itm_steppe_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1357.  
  1358.  
  1359. (item_set_slot, "itm_banded_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1360. (item_set_slot, "itm_cuir_bouilli", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1361. (item_set_slot, "itm_scale_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1362.  
  1363. (item_set_slot, "itm_padded_leather", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1364. (item_set_slot, "itm_green_tunic", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1365. (item_set_slot, "itm_tunic_with_green_cape", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1366. (item_set_slot, "itm_aketon_green", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1367. (item_set_slot, "itm_ragged_outfit", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1368. (item_set_slot, "itm_surcoat_over_mail", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1369.  
  1370. (item_set_slot, "itm_sarranid_elite_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1371. (item_set_slot, "itm_skirmisher_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1372. (item_set_slot, "itm_archers_vest", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1373. (item_set_slot, "itm_sarranid_leather_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1374. (item_set_slot, "itm_sarranid_cloth_robe", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1375. (item_set_slot, "itm_sarranid_mail_shirt", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1376. (item_set_slot, "itm_sarranid_cavalry_robe", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1377. (item_set_slot, "itm_arabian_armor_b", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1378. (item_set_slot, "itm_mamluke_mail", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1379. (item_set_slot, "itm_khergit_elite_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1380. (item_set_slot, "itm_vaegir_elite_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1381. (item_set_slot, "itm_khergit_armor", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387. #boots
  1388. (item_set_slot, "itm_hide_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1389. (item_set_slot, "itm_ankle_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1390. (item_set_slot, "itm_nomad_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1391. (item_set_slot, "itm_leather_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1392. (item_set_slot, "itm_splinted_leather_greaves", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1393. (item_set_slot, "itm_mail_chausses", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1394. (item_set_slot, "itm_splinted_leather_greaves", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1395. (item_set_slot, "itm_splinted_greaves", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1396. (item_set_slot, "itm_mail_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1397. (item_set_slot, "itm_iron_greaves", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1398. (item_set_slot, "itm_sarranid_boots_b", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1399. (item_set_slot, "itm_sarranid_boots_c", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1400. (item_set_slot, "itm_sarranid_boots_d", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1401. (item_set_slot, "itm_plate_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1402. (item_set_slot, "itm_khergit_leather_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1403. (item_set_slot, "itm_khergit_guard_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412. #helmets
  1413.  
  1414.  
  1415. (item_set_slot, "itm_leather_steppe_cap_a", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1416. (item_set_slot, "itm_leather_steppe_cap_b", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1417. (item_set_slot, "itm_steppe_cap", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1418. (item_set_slot, "itm_khergit_war_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1419. (item_set_slot, "itm_khergit_guard_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1420.  
  1421.  
  1422.  
  1423. (item_set_slot, "itm_arming_cap", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1424. (item_set_slot, "itm_padded_coif", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1425. (item_set_slot, "itm_mail_coif", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1426. (item_set_slot, "itm_footman_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1427. (item_set_slot, "itm_norman_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1428. (item_set_slot, "itm_kettle_hat", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1429. (item_set_slot, "itm_helmet_with_neckguard", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1430.  
  1431. (item_set_slot, "itm_bascinet_2", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1432. (item_set_slot, "itm_bascinet_3", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1433.  
  1434.  
  1435.  
  1436. (item_set_slot, "itm_flat_topped_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1437. (item_set_slot, "itm_guard_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1438. (item_set_slot, "itm_full_helm", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1439. (item_set_slot, "itm_great_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1440. (item_set_slot, "itm_nomad_cap_b", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1441. (item_set_slot, "itm_skullcap", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1442. (item_set_slot, "itm_leather_cap", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1443.  
  1444. (item_set_slot, "itm_spiked_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1445. # (item_set_slot, "itm_nasal_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1446. (item_set_slot, "itm_nordic_archer_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1447. (item_set_slot, "itm_nordic_veteran_archer_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1448. (item_set_slot, "itm_nordic_footman_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1449. (item_set_slot, "itm_nordic_fighter_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1450. (item_set_slot, "itm_nordic_huscarl_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1451. (item_set_slot, "itm_nordic_warlord_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1452.  
  1453. (item_set_slot, "itm_sarranid_helmet1", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1454. (item_set_slot, "itm_sarranid_horseman_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1455. (item_set_slot, "itm_sarranid_felt_hat", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1456. (item_set_slot, "itm_sarranid_veiled_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1457. (item_set_slot, "itm_turban", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1458. (item_set_slot, "itm_desert_turban", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1459. (item_set_slot, "itm_sarranid_warrior_cap", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1460. (item_set_slot, "itm_sarranid_mail_coif", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1461.  
  1462. (item_set_slot, "itm_vaegir_fur_cap", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1463. (item_set_slot, "itm_vaegir_fur_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1464. (item_set_slot, "itm_vaegir_spiked_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1465. (item_set_slot, "itm_vaegir_lamellar_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1466. (item_set_slot, "itm_vaegir_noble_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1467. (item_set_slot, "itm_vaegir_war_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1468. (item_set_slot, "itm_vaegir_mask", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1469.  
  1470.  
  1471. #gloves
  1472. (item_set_slot, "itm_leather_gloves", slot_item_multiplayer_item_class, multi_item_class_type_glove),
  1473. (item_set_slot, "itm_mail_mittens", slot_item_multiplayer_item_class, multi_item_class_type_glove),
  1474. (item_set_slot, "itm_scale_gauntlets", slot_item_multiplayer_item_class, multi_item_class_type_glove),
  1475. (item_set_slot, "itm_lamellar_gauntlets", slot_item_multiplayer_item_class, multi_item_class_type_glove),
  1476. (item_set_slot, "itm_gauntlets", slot_item_multiplayer_item_class, multi_item_class_type_glove),
  1477.  
  1478. #horses
  1479. (item_set_slot, "itm_saddle_horse", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1480. (item_set_slot, "itm_hunter", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1481. (item_set_slot, "itm_courser", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1482. (item_set_slot, "itm_hunter", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1483. (item_set_slot, "itm_warhorse", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1484. (item_set_slot, "itm_charger", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1485. (item_set_slot, "itm_steppe_horse", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1486. (item_set_slot, "itm_arabian_horse_a", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1487. (item_set_slot, "itm_arabian_horse_b", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1488. (item_set_slot, "itm_warhorse_steppe", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1489. (item_set_slot, "itm_warhorse_sarranid", slot_item_multiplayer_item_class, multi_item_class_type_horse),
  1490.  
  1491. #INVASION MODE START
  1492. #DEBUG FOR SPECIAL ITEMS
  1493. #(item_set_slot, "itm_javelin_bow", slot_item_multiplayer_item_class, multi_item_class_type_bow),
  1494. #(item_set_slot, "itm_knockdown_mace", slot_item_multiplayer_item_class, multi_item_class_type_blunt),
  1495. #(item_set_slot, "itm_blood_drain_throwing_knives", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1496. #(item_set_slot, "itm_doom_javelins", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1497. #(item_set_slot, "itm_disarming_throwing_axe", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1498. #(item_set_slot, "itm_instakill_knife", slot_item_multiplayer_item_class, multi_item_class_type_sword),
  1499. #(item_set_slot, "itm_running_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1500. #(item_set_slot, "itm_power_gloves", slot_item_multiplayer_item_class, multi_item_class_type_glove),
  1501. #(item_set_slot, "itm_wielding_gloves", slot_item_multiplayer_item_class, multi_item_class_type_glove),
  1502. #(item_set_slot, "itm_invulnerable_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1503. #(item_set_slot, "itm_kicking_boots", slot_item_multiplayer_item_class, multi_item_class_type_light_foot),
  1504. #(item_set_slot, "itm_javelin_bow_ammo", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1505. #(item_set_slot, "itm_weak_beserker_dart", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1506. #(item_set_slot, "itm_team_change_dart", slot_item_multiplayer_item_class, multi_item_class_type_throwing),
  1507. #(item_set_slot, "itm_awesome_spear", slot_item_multiplayer_item_class, multi_item_class_type_spear),
  1508. #(item_set_slot, "itm_restore_health_armour", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  1509. #(item_set_slot, "itm_extra_life_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),
  1510. #INVASION MODE END
  1511.  
  1512. #1-Swadian Warriors
  1513. #1a-Swadian Crossbowman
  1514. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bolts", "trp_swadian_crossbowman_multiplayer"),
  1515. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steel_bolts", "trp_swadian_crossbowman_multiplayer"),
  1516. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_crossbow", "trp_swadian_crossbowman_multiplayer"),
  1517. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_crossbow", "trp_swadian_crossbowman_multiplayer"),
  1518. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sniper_crossbow", "trp_swadian_crossbowman_multiplayer"),
  1519. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_a", "trp_swadian_crossbowman_multiplayer"),
  1520. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b", "trp_swadian_crossbowman_multiplayer"),
  1521. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b_small", "trp_swadian_crossbowman_multiplayer"),
  1522. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_a", "trp_swadian_crossbowman_multiplayer"),
  1523. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_b", "trp_swadian_crossbowman_multiplayer"),
  1524. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_c", "trp_swadian_crossbowman_multiplayer"),
  1525.  
  1526. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_red_shirt", "trp_swadian_crossbowman_multiplayer"),
  1527. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_padded_cloth", "trp_swadian_crossbowman_multiplayer"),
  1528. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_swadian_crossbowman_multiplayer"),
  1529. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_haubergeon", "trp_swadian_crossbowman_multiplayer"),
  1530. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ankle_boots", "trp_swadian_crossbowman_multiplayer"),
  1531. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_swadian_crossbowman_multiplayer"),
  1532. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_chausses", "trp_swadian_crossbowman_multiplayer"),
  1533. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_swadian_crossbowman_multiplayer"),
  1534.  
  1535. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arming_cap", "trp_swadian_crossbowman_multiplayer"),
  1536. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_norman_helmet", "trp_swadian_crossbowman_multiplayer"),
  1537. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_helmet_with_neckguard", "trp_swadian_crossbowman_multiplayer"),
  1538. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_flat_topped_helmet", "trp_swadian_crossbowman_multiplayer"),
  1539. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_guard_helmet", "trp_swadian_crossbowman_multiplayer"),
  1540.  
  1541. #1b-Swadian Infantry
  1542. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_awlpike", "trp_swadian_infantry_multiplayer"),
  1543. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_awlpike_long", "trp_swadian_infantry_multiplayer"),
  1544. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_a", "trp_swadian_infantry_multiplayer"),
  1545. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b", "trp_swadian_infantry_multiplayer"),
  1546. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b_small", "trp_swadian_infantry_multiplayer"),
  1547. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_c", "trp_swadian_infantry_multiplayer"),
  1548. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_c_small", "trp_swadian_infantry_multiplayer"),
  1549. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bastard_sword_a", "trp_swadian_infantry_multiplayer"),
  1550. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bastard_sword_b", "trp_swadian_infantry_multiplayer"),
  1551. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_two_handed_a", "trp_swadian_infantry_multiplayer"),
  1552. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_two_handed_b", "trp_swadian_infantry_multiplayer"),
  1553. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_darts", "trp_swadian_infantry_multiplayer"),
  1554. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_darts", "trp_swadian_infantry_multiplayer"),
  1555. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_a", "trp_swadian_infantry_multiplayer"),
  1556. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_b", "trp_swadian_infantry_multiplayer"),
  1557. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_c", "trp_swadian_infantry_multiplayer"),
  1558. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_d", "trp_swadian_infantry_multiplayer"),
  1559. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_red_tunic", "trp_swadian_infantry_multiplayer"),
  1560. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_red_gambeson", "trp_swadian_infantry_multiplayer"),
  1561. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_swadian_infantry_multiplayer"),
  1562. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_haubergeon", "trp_swadian_infantry_multiplayer"),
  1563. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_brigandine_red", "trp_swadian_infantry_multiplayer"),
  1564. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ankle_boots", "trp_swadian_infantry_multiplayer"),
  1565. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_swadian_infantry_multiplayer"),
  1566. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_chausses", "trp_swadian_infantry_multiplayer"),
  1567. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_swadian_infantry_multiplayer"),
  1568. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arming_cap", "trp_swadian_infantry_multiplayer"),
  1569. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_norman_helmet", "trp_swadian_infantry_multiplayer"),
  1570. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_helmet_with_neckguard", "trp_swadian_infantry_multiplayer"),
  1571. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_flat_topped_helmet", "trp_swadian_infantry_multiplayer"),
  1572. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_guard_helmet", "trp_swadian_infantry_multiplayer"),
  1573. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_great_helmet", "trp_swadian_infantry_multiplayer"),
  1574. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_swadian_infantry_multiplayer"),
  1575. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_swadian_infantry_multiplayer"),
  1576. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_swadian_infantry_multiplayer"),
  1577. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_gauntlets", "trp_swadian_infantry_multiplayer"),
  1578.  
  1579. #INVASION MODE START
  1580. ###DEBUG SPECIAL ITEM TESTING
  1581. #(try_for_range, ":cur_item", coop_drops_begin, coop_new_items_end),
  1582. # (call_script, "script_multiplayer_set_item_available_for_troop", ":cur_item", "trp_swadian_infantry_multiplayer"),
  1583. #(try_end),
  1584. ###DEBUG SPECIAL ITEM TESTING
  1585. #INVASION MODE END
  1586.  
  1587. #1c-Swadian Man At Arms
  1588. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_darts", "trp_swadian_man_at_arms_multiplayer"),
  1589. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_darts", "trp_swadian_man_at_arms_multiplayer"),
  1590. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lance", "trp_swadian_man_at_arms_multiplayer"),
  1591. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_lance", "trp_swadian_man_at_arms_multiplayer"),
  1592. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_great_lance", "trp_swadian_man_at_arms_multiplayer"),
  1593. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_a", "trp_swadian_man_at_arms_multiplayer"),
  1594. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b", "trp_swadian_man_at_arms_multiplayer"),
  1595. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b_small", "trp_swadian_man_at_arms_multiplayer"),
  1596. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_c", "trp_swadian_man_at_arms_multiplayer"),
  1597. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_c_small", "trp_swadian_man_at_arms_multiplayer"),
  1598. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bastard_sword_a", "trp_swadian_man_at_arms_multiplayer"),
  1599. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bastard_sword_b", "trp_swadian_man_at_arms_multiplayer"),
  1600. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_a", "trp_swadian_man_at_arms_multiplayer"),
  1601. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_b", "trp_swadian_man_at_arms_multiplayer"),
  1602. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_c", "trp_swadian_man_at_arms_multiplayer"),
  1603. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_d", "trp_swadian_man_at_arms_multiplayer"),
  1604. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_red_tunic", "trp_swadian_man_at_arms_multiplayer"),
  1605. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_padded_cloth", "trp_swadian_man_at_arms_multiplayer"),
  1606. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_swadian_man_at_arms_multiplayer"),
  1607. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_with_surcoat", "trp_swadian_man_at_arms_multiplayer"),
  1608. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_coat_of_plates_red", "trp_swadian_man_at_arms_multiplayer"),
  1609. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ankle_boots", "trp_swadian_man_at_arms_multiplayer"),
  1610. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_swadian_man_at_arms_multiplayer"),
  1611. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_chausses", "trp_swadian_man_at_arms_multiplayer"),
  1612. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_swadian_man_at_arms_multiplayer"),
  1613. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_plate_boots", "trp_swadian_man_at_arms_multiplayer"),
  1614.  
  1615. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arming_cap", "trp_swadian_man_at_arms_multiplayer"),
  1616. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_norman_helmet", "trp_swadian_man_at_arms_multiplayer"),
  1617. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_helmet_with_neckguard", "trp_swadian_man_at_arms_multiplayer"),
  1618. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_flat_topped_helmet", "trp_swadian_man_at_arms_multiplayer"),
  1619. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_guard_helmet", "trp_swadian_man_at_arms_multiplayer"),
  1620. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_great_helmet", "trp_swadian_man_at_arms_multiplayer"),
  1621. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_swadian_man_at_arms_multiplayer"),
  1622. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_swadian_man_at_arms_multiplayer"),
  1623. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_swadian_man_at_arms_multiplayer"),
  1624. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_gauntlets", "trp_swadian_man_at_arms_multiplayer"),
  1625. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_saddle_horse", "trp_swadian_man_at_arms_multiplayer"),
  1626. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_courser", "trp_swadian_man_at_arms_multiplayer"),
  1627. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hunter", "trp_swadian_man_at_arms_multiplayer"),
  1628. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_warhorse", "trp_swadian_man_at_arms_multiplayer"),
  1629. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_charger", "trp_swadian_man_at_arms_multiplayer"),
  1630.  
  1631. # #1d-Swadian Mounted Crossbowman
  1632. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bolts", "trp_swadian_mounted_crossbowman_multiplayer"),
  1633. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_light_crossbow", "trp_swadian_mounted_crossbowman_multiplayer"),
  1634. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_crossbow", "trp_swadian_mounted_crossbowman_multiplayer"),
  1635. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_crossbow", "trp_swadian_mounted_crossbowman_multiplayer"),
  1636. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_cav_a", "trp_swadian_mounted_crossbowman_multiplayer"),
  1637. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_cav_b", "trp_swadian_mounted_crossbowman_multiplayer"),
  1638. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bastard_sword_a", "trp_swadian_mounted_crossbowman_multiplayer"),
  1639. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_red_shirt", "trp_swadian_mounted_crossbowman_multiplayer"),
  1640. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_padded_cloth", "trp_swadian_mounted_crossbowman_multiplayer"),
  1641. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_swadian_mounted_crossbowman_multiplayer"),
  1642. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_with_surcoat", "trp_swadian_mounted_crossbowman_multiplayer"),
  1643. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_coat_of_plates_red", "trp_swadian_mounted_crossbowman_multiplayer"),
  1644. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hide_boots", "trp_swadian_mounted_crossbowman_multiplayer"),
  1645. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arming_cap", "trp_swadian_mounted_crossbowman_multiplayer"),
  1646. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_norman_helmet", "trp_swadian_mounted_crossbowman_multiplayer"),
  1647. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_helmet_with_neckguard", "trp_swadian_mounted_crossbowman_multiplayer"),
  1648. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_flat_topped_helmet", "trp_swadian_mounted_crossbowman_multiplayer"),
  1649. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_guard_helmet", "trp_swadian_mounted_crossbowman_multiplayer"),
  1650. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_swadian_mounted_crossbowman_multiplayer"),
  1651. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_saddle_horse", "trp_swadian_mounted_crossbowman_multiplayer"),
  1652. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_courser", "trp_swadian_mounted_crossbowman_multiplayer"),
  1653. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hunter", "trp_swadian_mounted_crossbowman_multiplayer"),
  1654.  
  1655. #2-Vaegir Warriors
  1656. #2a-Vaegir Archer
  1657. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arrows", "trp_vaegir_archer_multiplayer"),
  1658. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_barbed_arrows", "trp_vaegir_archer_multiplayer"),
  1659. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_1", "trp_vaegir_archer_multiplayer"),
  1660. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_2", "trp_vaegir_archer_multiplayer"),
  1661. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_falchion", "trp_vaegir_archer_multiplayer"),
  1662. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_bow", "trp_vaegir_archer_multiplayer"),
  1663. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_bow", "trp_vaegir_archer_multiplayer"),
  1664. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_strong_bow", "trp_vaegir_archer_multiplayer"),
  1665. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_bow", "trp_vaegir_archer_multiplayer"),
  1666. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_linen_tunic", "trp_vaegir_archer_multiplayer"),
  1667. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_jerkin", "trp_vaegir_archer_multiplayer"),
  1668. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_vest", "trp_vaegir_archer_multiplayer"),
  1669. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_vest", "trp_vaegir_archer_multiplayer"),
  1670. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hide_boots", "trp_vaegir_archer_multiplayer"),
  1671. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_boots", "trp_vaegir_archer_multiplayer"),
  1672. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_vaegir_archer_multiplayer"),
  1673. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_cap", "trp_vaegir_archer_multiplayer"),
  1674. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_fur_cap", "trp_vaegir_archer_multiplayer"),
  1675. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_fur_helmet", "trp_vaegir_archer_multiplayer"),
  1676. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_spiked_helmet", "trp_vaegir_archer_multiplayer"),
  1677. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_lamellar_helmet", "trp_vaegir_archer_multiplayer"),
  1678.  
  1679. #2b-Vaegir Spearman
  1680. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spear", "trp_vaegir_spearman_multiplayer"),
  1681. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_spear", "trp_vaegir_spearman_multiplayer"),
  1682. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_awlpike", "trp_vaegir_spearman_multiplayer"),
  1683. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_a", "trp_vaegir_spearman_multiplayer"),
  1684. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_b", "trp_vaegir_spearman_multiplayer"),
  1685. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_c", "trp_vaegir_spearman_multiplayer"),
  1686. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_d", "trp_vaegir_spearman_multiplayer"),
  1687. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_1", "trp_vaegir_spearman_multiplayer"),
  1688. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_2", "trp_vaegir_spearman_multiplayer"),
  1689. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_3", "trp_vaegir_spearman_multiplayer"),
  1690. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_4", "trp_vaegir_spearman_multiplayer"),
  1691. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_long_hafted_spiked_mace", "trp_vaegir_spearman_multiplayer"),
  1692. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_long_spiked_club", "trp_vaegir_spearman_multiplayer"),
  1693. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scimitar", "trp_vaegir_spearman_multiplayer"),
  1694. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scimitar_b", "trp_vaegir_spearman_multiplayer"),
  1695. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bardiche", "trp_vaegir_spearman_multiplayer"),
  1696. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_great_bardiche", "trp_vaegir_spearman_multiplayer"),
  1697. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_long_bardiche", "trp_vaegir_spearman_multiplayer"),
  1698. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_great_long_bardiche", "trp_vaegir_spearman_multiplayer"),
  1699. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_vaegir_spearman_multiplayer"),
  1700. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_linen_tunic", "trp_vaegir_spearman_multiplayer"),
  1701. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_jerkin", "trp_vaegir_spearman_multiplayer"),
  1702. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_vest", "trp_vaegir_spearman_multiplayer"),
  1703. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_vest", "trp_vaegir_spearman_multiplayer"),
  1704. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_armor", "trp_vaegir_spearman_multiplayer"),
  1705. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_elite_armor", "trp_vaegir_spearman_multiplayer"),
  1706. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hide_boots", "trp_vaegir_spearman_multiplayer"),
  1707. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_boots", "trp_vaegir_spearman_multiplayer"),
  1708. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_vaegir_spearman_multiplayer"),
  1709. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_vaegir_spearman_multiplayer"),
  1710. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spiked_helmet", "trp_vaegir_spearman_multiplayer"),
  1711. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_fur_cap", "trp_vaegir_spearman_multiplayer"),
  1712. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_fur_helmet", "trp_vaegir_spearman_multiplayer"),
  1713. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_spiked_helmet", "trp_vaegir_spearman_multiplayer"),
  1714. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_lamellar_helmet", "trp_vaegir_spearman_multiplayer"),
  1715. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_noble_helmet", "trp_vaegir_spearman_multiplayer"),
  1716. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_war_helmet", "trp_vaegir_spearman_multiplayer"),
  1717. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nasal_helmet", "trp_vaegir_spearman_multiplayer"),
  1718. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_vaegir_spearman_multiplayer"),
  1719. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_vaegir_spearman_multiplayer"),
  1720. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_vaegir_spearman_multiplayer"),
  1721.  
  1722. #2c-Vaegir Horseman
  1723. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_darts", "trp_vaegir_horseman_multiplayer"),
  1724. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_darts", "trp_vaegir_horseman_multiplayer"),
  1725. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bardiche", "trp_vaegir_horseman_multiplayer"),
  1726. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_great_bardiche", "trp_vaegir_horseman_multiplayer"),
  1727. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scimitar", "trp_vaegir_horseman_multiplayer"),
  1728. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scimitar_b", "trp_vaegir_horseman_multiplayer"),
  1729. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lance", "trp_vaegir_horseman_multiplayer"),
  1730. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_lance", "trp_vaegir_horseman_multiplayer"),
  1731. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_cav_a", "trp_vaegir_horseman_multiplayer"),
  1732. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_cav_b", "trp_vaegir_horseman_multiplayer"),
  1733. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_c", "trp_vaegir_horseman_multiplayer"),
  1734. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_d", "trp_vaegir_horseman_multiplayer"),
  1735. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_linen_tunic", "trp_vaegir_horseman_multiplayer"),
  1736. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_vest", "trp_vaegir_horseman_multiplayer"),
  1737. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_vest", "trp_vaegir_horseman_multiplayer"),
  1738. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_studded_leather_coat", "trp_vaegir_horseman_multiplayer"),
  1739. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_armor", "trp_vaegir_horseman_multiplayer"),
  1740. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_elite_armor", "trp_vaegir_horseman_multiplayer"),
  1741. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hide_boots", "trp_vaegir_horseman_multiplayer"),
  1742. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_boots", "trp_vaegir_horseman_multiplayer"),
  1743. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_vaegir_horseman_multiplayer"),
  1744. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_vaegir_horseman_multiplayer"),
  1745. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_plate_boots", "trp_vaegir_horseman_multiplayer"),
  1746. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spiked_helmet", "trp_vaegir_horseman_multiplayer"),
  1747. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nasal_helmet", "trp_vaegir_horseman_multiplayer"),
  1748. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_fur_cap", "trp_vaegir_horseman_multiplayer"),
  1749. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_fur_helmet", "trp_vaegir_horseman_multiplayer"),
  1750. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_spiked_helmet", "trp_vaegir_horseman_multiplayer"),
  1751. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_lamellar_helmet", "trp_vaegir_horseman_multiplayer"),
  1752. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_noble_helmet", "trp_vaegir_horseman_multiplayer"),
  1753. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_war_helmet", "trp_vaegir_horseman_multiplayer"),
  1754. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_vaegir_mask", "trp_vaegir_horseman_multiplayer"),
  1755. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_vaegir_horseman_multiplayer"),
  1756. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_vaegir_horseman_multiplayer"),
  1757. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_vaegir_horseman_multiplayer"),
  1758. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_saddle_horse", "trp_vaegir_horseman_multiplayer"),
  1759. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_courser", "trp_vaegir_horseman_multiplayer"),
  1760. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hunter", "trp_vaegir_horseman_multiplayer"),
  1761. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_warhorse_steppe", "trp_vaegir_horseman_multiplayer"),
  1762.  
  1763. #3-Khergit Warriors
  1764. #3a-Khergit Veteran Horse Archer
  1765. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_1", "trp_khergit_veteran_horse_archer_multiplayer"),
  1766. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_2", "trp_khergit_veteran_horse_archer_multiplayer"),
  1767. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_3", "trp_khergit_veteran_horse_archer_multiplayer"),
  1768. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_4", "trp_khergit_veteran_horse_archer_multiplayer"),
  1769. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_bow", "trp_khergit_veteran_horse_archer_multiplayer"),
  1770. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_bow", "trp_khergit_veteran_horse_archer_multiplayer"),
  1771. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_strong_bow", "trp_khergit_veteran_horse_archer_multiplayer"),
  1772. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arrows", "trp_khergit_veteran_horse_archer_multiplayer"),
  1773. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_arrows", "trp_khergit_veteran_horse_archer_multiplayer"),
  1774. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_steppe_cap_a", "trp_khergit_veteran_horse_archer_multiplayer"),
  1775. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_cap_b", "trp_khergit_veteran_horse_archer_multiplayer"),
  1776. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_steppe_cap_b", "trp_khergit_veteran_horse_archer_multiplayer"),
  1777. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_cap", "trp_khergit_veteran_horse_archer_multiplayer"),
  1778. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_armor", "trp_khergit_veteran_horse_archer_multiplayer"),
  1779. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_armor", "trp_khergit_veteran_horse_archer_multiplayer"),
  1780. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tribal_warrior_outfit", "trp_khergit_veteran_horse_archer_multiplayer"),
  1781. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_vest_khergit", "trp_khergit_veteran_horse_archer_multiplayer"),
  1782. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hide_boots", "trp_khergit_veteran_horse_archer_multiplayer"),
  1783. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_boots", "trp_khergit_veteran_horse_archer_multiplayer"),
  1784. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_leather_boots", "trp_khergit_veteran_horse_archer_multiplayer"),
  1785. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_khergit_veteran_horse_archer_multiplayer"),
  1786. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_khergit_veteran_horse_archer_multiplayer"),
  1787. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_horse", "trp_khergit_veteran_horse_archer_multiplayer"),
  1788. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_khergit_veteran_horse_archer_multiplayer"),
  1789. #3a-Khergit Dismounted Lancer
  1790. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_khergit_infantry_multiplayer"),
  1791. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_jarid", "trp_khergit_infantry_multiplayer"),
  1792. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_1", "trp_khergit_infantry_multiplayer"),
  1793. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_2", "trp_khergit_infantry_multiplayer"),
  1794. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_3", "trp_khergit_infantry_multiplayer"),
  1795. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_4", "trp_khergit_infantry_multiplayer"),
  1796. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_a", "trp_khergit_infantry_multiplayer"),
  1797. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_b", "trp_khergit_infantry_multiplayer"),
  1798. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_c", "trp_khergit_infantry_multiplayer"),
  1799. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_round_b", "trp_khergit_infantry_multiplayer"),
  1800. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_round_c", "trp_khergit_infantry_multiplayer"),
  1801. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spear", "trp_khergit_infantry_multiplayer"),
  1802. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hafted_blade_a", "trp_khergit_infantry_multiplayer"),
  1803. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hafted_blade_b", "trp_khergit_infantry_multiplayer"),
  1804. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_1", "trp_khergit_infantry_multiplayer"),
  1805. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_2", "trp_khergit_infantry_multiplayer"),
  1806. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_3", "trp_khergit_infantry_multiplayer"),
  1807. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_cap_b", "trp_khergit_infantry_multiplayer"),
  1808. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_steppe_cap_b", "trp_khergit_infantry_multiplayer"),
  1809. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_cap", "trp_khergit_infantry_multiplayer"),
  1810. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_war_helmet", "trp_khergit_infantry_multiplayer"),
  1811. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_guard_helmet", "trp_khergit_infantry_multiplayer"),
  1812. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_armor", "trp_khergit_infantry_multiplayer"),
  1813. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tribal_warrior_outfit", "trp_khergit_infantry_multiplayer"),
  1814. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_armor", "trp_khergit_infantry_multiplayer"),
  1815. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_elite_armor", "trp_khergit_infantry_multiplayer"),
  1816. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hide_boots", "trp_khergit_infantry_multiplayer"),
  1817. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_boots", "trp_khergit_infantry_multiplayer"),
  1818. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_leather_boots", "trp_khergit_infantry_multiplayer"),
  1819. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_khergit_infantry_multiplayer"),
  1820. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_khergit_infantry_multiplayer"),
  1821. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_khergit_infantry_multiplayer"),
  1822. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_khergit_infantry_multiplayer"),
  1823. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_khergit_infantry_multiplayer"),
  1824. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_gauntlets", "trp_khergit_infantry_multiplayer"),
  1825. #3a-Khergit Lancer
  1826. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_khergit_lancer_multiplayer"),
  1827. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_1", "trp_khergit_lancer_multiplayer"),
  1828. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_2", "trp_khergit_lancer_multiplayer"),
  1829. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_3", "trp_khergit_lancer_multiplayer"),
  1830. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_khergit_4", "trp_khergit_lancer_multiplayer"),
  1831. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_a", "trp_khergit_lancer_multiplayer"),
  1832. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_b", "trp_khergit_lancer_multiplayer"),
  1833. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_c", "trp_khergit_lancer_multiplayer"),
  1834. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lance", "trp_khergit_lancer_multiplayer"),
  1835. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_lance", "trp_khergit_lancer_multiplayer"),
  1836. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hafted_blade_a", "trp_khergit_lancer_multiplayer"),
  1837. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hafted_blade_b", "trp_khergit_lancer_multiplayer"),
  1838. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_war_axe_a", "trp_khergit_lancer_multiplayer"),
  1839. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_steppe_cap_a", "trp_khergit_lancer_multiplayer"),
  1840. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_cap_b", "trp_khergit_lancer_multiplayer"),
  1841. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_steppe_cap_b", "trp_khergit_lancer_multiplayer"),
  1842. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_cap", "trp_khergit_lancer_multiplayer"),
  1843. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_war_helmet", "trp_khergit_lancer_multiplayer"),
  1844. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_armor", "trp_khergit_lancer_multiplayer"),
  1845. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_armor", "trp_khergit_lancer_multiplayer"),
  1846. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tribal_warrior_outfit", "trp_khergit_lancer_multiplayer"),
  1847. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_armor", "trp_khergit_lancer_multiplayer"),
  1848. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hide_boots", "trp_khergit_lancer_multiplayer"),
  1849. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_boots", "trp_khergit_lancer_multiplayer"),
  1850. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_khergit_leather_boots", "trp_khergit_lancer_multiplayer"),
  1851. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_khergit_lancer_multiplayer"),
  1852. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_khergit_lancer_multiplayer"),
  1853. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_khergit_lancer_multiplayer"),
  1854. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_khergit_lancer_multiplayer"),
  1855. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_khergit_lancer_multiplayer"),
  1856. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lamellar_gauntlets", "trp_khergit_lancer_multiplayer"),
  1857. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steppe_horse", "trp_khergit_lancer_multiplayer"),
  1858. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_courser", "trp_khergit_lancer_multiplayer"),
  1859. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hunter", "trp_khergit_lancer_multiplayer"),
  1860. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_warhorse_steppe", "trp_khergit_lancer_multiplayer"),
  1861.  
  1862. #Nord Warriors
  1863.  
  1864. #4c-Nord Archer
  1865. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arrows", "trp_nord_archer_multiplayer"),
  1866. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_barbed_arrows", "trp_nord_archer_multiplayer"),
  1867. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bodkin_arrows", "trp_nord_archer_multiplayer"),
  1868. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_1", "trp_nord_archer_multiplayer"),
  1869. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_2", "trp_nord_archer_multiplayer"),
  1870. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_2_small", "trp_nord_archer_multiplayer"),
  1871. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_3", "trp_nord_archer_multiplayer"),
  1872. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_3_small", "trp_nord_archer_multiplayer"),
  1873. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_war_axe_a", "trp_nord_archer_multiplayer"),
  1874. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_war_axe_b", "trp_nord_archer_multiplayer"),
  1875. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_two_handed_axe", "trp_nord_archer_multiplayer"),
  1876. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_short_bow", "trp_nord_archer_multiplayer"),
  1877. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_long_bow", "trp_nord_archer_multiplayer"),
  1878. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_blue_tunic", "trp_nord_archer_multiplayer"),
  1879. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_jerkin", "trp_nord_archer_multiplayer"),
  1880. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_byrnie", "trp_nord_archer_multiplayer"),
  1881. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_nord_archer_multiplayer"),
  1882. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_nord_archer_multiplayer"),
  1883. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_chausses", "trp_nord_archer_multiplayer"),
  1884. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_boots", "trp_nord_archer_multiplayer"),
  1885. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_archer_helmet", "trp_nord_archer_multiplayer"),
  1886. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_veteran_archer_helmet", "trp_nord_archer_multiplayer"),
  1887. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_footman_helmet", "trp_nord_archer_multiplayer"),
  1888. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_fighter_helmet", "trp_nord_archer_multiplayer"),
  1889.  
  1890. #4a-Nord Veteran
  1891. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_darts", "trp_nord_veteran_multiplayer"),
  1892. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_darts", "trp_nord_veteran_multiplayer"),
  1893. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_nord_veteran_multiplayer"),
  1894. # (call_script, "script_multiplayer_set_item_available_for_troop", "itm_throwing_spears", "trp_nord_veteran_multiplayer"),
  1895. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_1", "trp_nord_veteran_multiplayer"),
  1896. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_2", "trp_nord_veteran_multiplayer"),
  1897. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_2_small", "trp_nord_veteran_multiplayer"),
  1898. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_3", "trp_nord_veteran_multiplayer"),
  1899. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_3_small", "trp_nord_veteran_multiplayer"),
  1900. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_war_axe_a", "trp_nord_veteran_multiplayer"),
  1901. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_war_axe_b", "trp_nord_veteran_multiplayer"),
  1902. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_battle_axe_a", "trp_nord_veteran_multiplayer"),
  1903. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_battle_axe_b", "trp_nord_veteran_multiplayer"),
  1904. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_one_handed_battle_axe_c", "trp_nord_veteran_multiplayer"),
  1905. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_two_handed_axe", "trp_nord_veteran_multiplayer"),
  1906. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_two_handed_battle_axe_2", "trp_nord_veteran_multiplayer"),
  1907. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_great_axe", "trp_nord_veteran_multiplayer"),
  1908. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_long_axe", "trp_nord_veteran_multiplayer"),
  1909. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_long_axe_b", "trp_nord_veteran_multiplayer"),
  1910. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_long_axe_c", "trp_nord_veteran_multiplayer"),
  1911. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spear", "trp_nord_veteran_multiplayer"),
  1912. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_spear", "trp_nord_veteran_multiplayer"),
  1913.  
  1914. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_round_a", "trp_nord_veteran_multiplayer"),
  1915. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_round_b", "trp_nord_veteran_multiplayer"),
  1916. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_round_c", "trp_nord_veteran_multiplayer"),
  1917. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_round_d", "trp_nord_veteran_multiplayer"),
  1918. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_round_e", "trp_nord_veteran_multiplayer"),
  1919. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_light_throwing_axes", "trp_nord_veteran_multiplayer"),
  1920. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_throwing_axes", "trp_nord_veteran_multiplayer"),
  1921. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_throwing_axes", "trp_nord_veteran_multiplayer"),
  1922. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_veteran_archer_helmet", "trp_nord_veteran_multiplayer"),
  1923. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_footman_helmet", "trp_nord_veteran_multiplayer"),
  1924. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_fighter_helmet", "trp_nord_veteran_multiplayer"),
  1925. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_huscarl_helmet", "trp_nord_veteran_multiplayer"),
  1926. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_warlord_helmet", "trp_nord_veteran_multiplayer"),
  1927.  
  1928. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_blue_tunic", "trp_nord_veteran_multiplayer"),
  1929. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_jerkin", "trp_nord_veteran_multiplayer"),
  1930. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_shirt", "trp_nord_veteran_multiplayer"),
  1931. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_hauberk", "trp_nord_veteran_multiplayer"),
  1932. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_banded_armor", "trp_nord_veteran_multiplayer"),
  1933. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_nord_veteran_multiplayer"),
  1934. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_nord_veteran_multiplayer"),
  1935. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_chausses", "trp_nord_veteran_multiplayer"),
  1936. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_boots", "trp_nord_veteran_multiplayer"),
  1937. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_nord_veteran_multiplayer"),
  1938. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_nord_veteran_multiplayer"),
  1939. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_nord_veteran_multiplayer"),
  1940.  
  1941. #4b-Nord Scout
  1942. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_darts", "trp_nord_scout_multiplayer"),
  1943. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_darts", "trp_nord_scout_multiplayer"),
  1944. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_nord_scout_multiplayer"),
  1945. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_throwing_spears", "trp_nord_scout_multiplayer"),
  1946. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_light_throwing_axes", "trp_nord_scout_multiplayer"),
  1947. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_throwing_axes", "trp_nord_scout_multiplayer"),
  1948. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_1", "trp_nord_scout_multiplayer"),
  1949. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_2", "trp_nord_scout_multiplayer"),
  1950. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_viking_3", "trp_nord_scout_multiplayer"),
  1951. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_two_handed_axe", "trp_nord_scout_multiplayer"),
  1952. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_two_handed_battle_axe_2", "trp_nord_scout_multiplayer"),
  1953. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_shortened_voulge", "trp_nord_scout_multiplayer"),
  1954.  
  1955. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spear", "trp_nord_scout_multiplayer"),
  1956. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_spear", "trp_nord_scout_multiplayer"),
  1957. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_light_lance", "trp_nord_scout_multiplayer"),
  1958. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lance", "trp_nord_scout_multiplayer"),
  1959. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_a", "trp_nord_scout_multiplayer"),
  1960. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_b", "trp_nord_scout_multiplayer"),
  1961. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_c", "trp_nord_scout_multiplayer"),
  1962. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_archer_helmet", "trp_nord_scout_multiplayer"),
  1963. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_veteran_archer_helmet", "trp_nord_scout_multiplayer"),
  1964. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_footman_helmet", "trp_nord_scout_multiplayer"),
  1965. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_fighter_helmet", "trp_nord_scout_multiplayer"),
  1966. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nordic_huscarl_helmet", "trp_nord_scout_multiplayer"),
  1967.  
  1968.  
  1969. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_blue_tunic", "trp_nord_scout_multiplayer"),
  1970. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_jerkin", "trp_nord_scout_multiplayer"),
  1971. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_shirt", "trp_nord_scout_multiplayer"),
  1972. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_hauberk", "trp_nord_scout_multiplayer"),
  1973. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_nord_scout_multiplayer"),
  1974. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_leather_greaves", "trp_nord_scout_multiplayer"),
  1975. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_chausses", "trp_nord_scout_multiplayer"),
  1976. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_boots", "trp_nord_scout_multiplayer"),
  1977. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_nord_scout_multiplayer"),
  1978. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_nord_scout_multiplayer"),
  1979. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_nord_scout_multiplayer"),
  1980. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_saddle_horse", "trp_nord_scout_multiplayer"),
  1981. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_courser", "trp_nord_scout_multiplayer"),
  1982. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hunter", "trp_nord_scout_multiplayer"),
  1983.  
  1984.  
  1985. #5-Rhodok Warriors
  1986. #5a-Rhodok Veteran Crossbowman
  1987. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_crossbow", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1988. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_crossbow", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1989. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sniper_crossbow", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1990. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bolts", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1991. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_steel_bolts", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1992. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_fighting_pick", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1993. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_pick", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1994. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_club_with_spike_head", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1995. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_maul", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1996. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sledgehammer", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1997. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_a", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1998. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b", "trp_rhodok_veteran_crossbowman_multiplayer"),
  1999. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b_small", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2000. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_a", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2001. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_b", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2002. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_c", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2003. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_d", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2004. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_cap", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2005. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_padded_coif", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2006. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_footman_helmet", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2007. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_kettle_hat", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2008. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tunic_with_green_cape", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2009. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_aketon_green", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2010. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2011. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ankle_boots", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2012. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2013. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2014. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_rhodok_veteran_crossbowman_multiplayer"),
  2015.  
  2016. #5b-Rhodok Sergeant
  2017. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_darts", "trp_rhodok_sergeant_multiplayer"),
  2018. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_darts", "trp_rhodok_sergeant_multiplayer"),
  2019. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_rhodok_sergeant_multiplayer"),
  2020. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_fighting_pick", "trp_rhodok_sergeant_multiplayer"),
  2021. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_pick", "trp_rhodok_sergeant_multiplayer"),
  2022. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_morningstar", "trp_rhodok_sergeant_multiplayer"),
  2023. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_club_with_spike_head", "trp_rhodok_sergeant_multiplayer"),
  2024. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_cleaver_b", "trp_rhodok_sergeant_multiplayer"),
  2025. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_cleaver_c", "trp_rhodok_sergeant_multiplayer"),
  2026. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_two_handed_cleaver", "trp_rhodok_sergeant_multiplayer"),
  2027. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_sickle_a", "trp_rhodok_sergeant_multiplayer"),
  2028. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_maul", "trp_rhodok_sergeant_multiplayer"),
  2029. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sledgehammer", "trp_rhodok_sergeant_multiplayer"),
  2030. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_warhammer", "trp_rhodok_sergeant_multiplayer"),
  2031. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spear", "trp_rhodok_sergeant_multiplayer"),
  2032. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_pike", "trp_rhodok_sergeant_multiplayer"),
  2033. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ashwood_pike", "trp_rhodok_sergeant_multiplayer"),
  2034. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_spear", "trp_rhodok_sergeant_multiplayer"),
  2035. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_glaive", "trp_rhodok_sergeant_multiplayer"),
  2036. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_a", "trp_rhodok_sergeant_multiplayer"),
  2037. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_b", "trp_rhodok_sergeant_multiplayer"),
  2038. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_c", "trp_rhodok_sergeant_multiplayer"),
  2039. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_pavise_d", "trp_rhodok_sergeant_multiplayer"),
  2040. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_cap", "trp_rhodok_sergeant_multiplayer"),
  2041. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_padded_coif", "trp_rhodok_sergeant_multiplayer"),
  2042. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_footman_helmet", "trp_rhodok_sergeant_multiplayer"),
  2043. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_kettle_hat", "trp_rhodok_sergeant_multiplayer"),
  2044. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bascinet_2", "trp_rhodok_sergeant_multiplayer"),
  2045. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_full_helm", "trp_rhodok_sergeant_multiplayer"),
  2046. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_green_tunic", "trp_rhodok_sergeant_multiplayer"),
  2047. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_aketon_green", "trp_rhodok_sergeant_multiplayer"),
  2048. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ragged_outfit", "trp_rhodok_sergeant_multiplayer"),
  2049. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_rhodok_sergeant_multiplayer"),
  2050. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_surcoat_over_mail", "trp_rhodok_sergeant_multiplayer"),
  2051. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ankle_boots", "trp_rhodok_sergeant_multiplayer"),
  2052. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_rhodok_sergeant_multiplayer"),
  2053. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_rhodok_sergeant_multiplayer"),
  2054. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_iron_greaves", "trp_rhodok_sergeant_multiplayer"),
  2055. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_rhodok_sergeant_multiplayer"),
  2056. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_rhodok_sergeant_multiplayer"),
  2057. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_rhodok_sergeant_multiplayer"),
  2058. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_gauntlets", "trp_rhodok_sergeant_multiplayer"),
  2059.  
  2060. #5c-Rhodok Horseman
  2061. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_darts", "trp_rhodok_horseman_multiplayer"),
  2062. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_war_darts", "trp_rhodok_horseman_multiplayer"),
  2063. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_rhodok_horseman_multiplayer"),
  2064. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_a", "trp_rhodok_horseman_multiplayer"),
  2065. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b", "trp_rhodok_horseman_multiplayer"),
  2066. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_c", "trp_rhodok_horseman_multiplayer"),
  2067. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_fighting_pick", "trp_rhodok_horseman_multiplayer"),
  2068. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_pick", "trp_rhodok_horseman_multiplayer"),
  2069. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_morningstar", "trp_rhodok_horseman_multiplayer"),
  2070. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_cleaver_b", "trp_rhodok_horseman_multiplayer"),
  2071. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_military_cleaver_c", "trp_rhodok_horseman_multiplayer"),
  2072. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_two_handed_cleaver", "trp_rhodok_horseman_multiplayer"),
  2073. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_shortened_military_scythe", "trp_rhodok_horseman_multiplayer"),
  2074. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_light_lance", "trp_rhodok_horseman_multiplayer"),
  2075. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lance", "trp_rhodok_horseman_multiplayer"),
  2076. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_lance", "trp_rhodok_horseman_multiplayer"),
  2077. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_cav_a", "trp_rhodok_horseman_multiplayer"),
  2078. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_cav_b", "trp_rhodok_horseman_multiplayer"),
  2079. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_padded_coif", "trp_rhodok_horseman_multiplayer"),
  2080. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_footman_helmet", "trp_rhodok_horseman_multiplayer"),
  2081. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_kettle_hat", "trp_rhodok_horseman_multiplayer"),
  2082. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bascinet_3", "trp_rhodok_horseman_multiplayer"),
  2083. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_green_tunic", "trp_rhodok_horseman_multiplayer"),
  2084. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_aketon_green", "trp_rhodok_horseman_multiplayer"),
  2085. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ragged_outfit", "trp_rhodok_horseman_multiplayer"),
  2086. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_rhodok_horseman_multiplayer"),
  2087. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_surcoat_over_mail", "trp_rhodok_horseman_multiplayer"),
  2088. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_ankle_boots", "trp_rhodok_horseman_multiplayer"),
  2089. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_rhodok_horseman_multiplayer"),
  2090. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_splinted_greaves", "trp_rhodok_horseman_multiplayer"),
  2091. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_plate_boots", "trp_rhodok_horseman_multiplayer"),
  2092. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_rhodok_horseman_multiplayer"),
  2093. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_rhodok_horseman_multiplayer"),
  2094. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_rhodok_horseman_multiplayer"),
  2095. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_gauntlets", "trp_rhodok_horseman_multiplayer"),
  2096. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_saddle_horse", "trp_rhodok_horseman_multiplayer"),
  2097. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_courser", "trp_rhodok_horseman_multiplayer"),
  2098. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_hunter", "trp_rhodok_horseman_multiplayer"),
  2099. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_warhorse", "trp_rhodok_horseman_multiplayer"),
  2100.  
  2101.  
  2102.  
  2103. #6-Sarranid Warriors
  2104. #5a-Sarranid archer
  2105. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_cloth_robe", "trp_sarranid_archer_multiplayer"),
  2106. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_skirmisher_armor", "trp_sarranid_archer_multiplayer"),
  2107. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_archers_vest", "trp_sarranid_archer_multiplayer"),
  2108. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_armor_b", "trp_sarranid_archer_multiplayer"),
  2109. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_felt_hat", "trp_sarranid_archer_multiplayer"),
  2110. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_turban", "trp_sarranid_archer_multiplayer"),
  2111. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_desert_turban", "trp_sarranid_archer_multiplayer"),
  2112. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_mail_coif", "trp_sarranid_archer_multiplayer"),
  2113. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_horseman_helmet", "trp_sarranid_archer_multiplayer"),
  2114. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_warrior_cap", "trp_sarranid_archer_multiplayer"),
  2115. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_b", "trp_sarranid_archer_multiplayer"),
  2116. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_c", "trp_sarranid_archer_multiplayer"),
  2117.  
  2118. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_short_bow", "trp_sarranid_archer_multiplayer"),
  2119. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_nomad_bow", "trp_sarranid_archer_multiplayer"),
  2120. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arrows", "trp_sarranid_archer_multiplayer"),
  2121. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_barbed_arrows", "trp_sarranid_archer_multiplayer"),
  2122. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scimitar", "trp_sarranid_archer_multiplayer"),
  2123. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mace_1", "trp_sarranid_archer_multiplayer"),
  2124. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_a", "trp_sarranid_archer_multiplayer"),
  2125. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_b", "trp_sarranid_archer_multiplayer"),
  2126.  
  2127. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_sarranid_archer_multiplayer"),
  2128.  
  2129.  
  2130.  
  2131. #Sarranid footman
  2132. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_cloth_robe", "trp_sarranid_footman_multiplayer"),
  2133. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_skirmisher_armor", "trp_sarranid_footman_multiplayer"),
  2134. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_archers_vest", "trp_sarranid_footman_multiplayer"),
  2135. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_leather_armor", "trp_sarranid_footman_multiplayer"),
  2136. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_armor_b", "trp_sarranid_footman_multiplayer"),
  2137.  
  2138. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_elite_armor", "trp_sarranid_footman_multiplayer"),
  2139. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_felt_hat", "trp_sarranid_footman_multiplayer"),
  2140. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_turban", "trp_sarranid_footman_multiplayer"),
  2141. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_desert_turban", "trp_sarranid_footman_multiplayer"),
  2142. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_mail_coif", "trp_sarranid_footman_multiplayer"),
  2143. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_warrior_cap", "trp_sarranid_footman_multiplayer"),
  2144. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_veiled_helmet", "trp_sarranid_footman_multiplayer"),
  2145. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_b", "trp_sarranid_footman_multiplayer"),
  2146. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_c", "trp_sarranid_footman_multiplayer"),
  2147. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_d", "trp_sarranid_footman_multiplayer"),
  2148.  
  2149. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_a", "trp_sarranid_footman_multiplayer"),
  2150. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_b", "trp_sarranid_footman_multiplayer"),
  2151. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_d", "trp_sarranid_footman_multiplayer"),
  2152.  
  2153. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_mace_1", "trp_sarranid_footman_multiplayer"),
  2154. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_axe_a", "trp_sarranid_footman_multiplayer"),
  2155. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_axe_b", "trp_sarranid_footman_multiplayer"),
  2156. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_two_handed_axe_a", "trp_sarranid_footman_multiplayer"),
  2157. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_two_handed_axe_b", "trp_sarranid_footman_multiplayer"),
  2158. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_two_handed_mace_1", "trp_sarranid_footman_multiplayer"),
  2159. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_bamboo_spear", "trp_sarranid_footman_multiplayer"),
  2160.  
  2161. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_spear", "trp_sarranid_footman_multiplayer"),
  2162. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_jarid", "trp_sarranid_footman_multiplayer"),
  2163. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_sarranid_footman_multiplayer"),
  2164.  
  2165. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_a", "trp_sarranid_footman_multiplayer"),
  2166. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_b", "trp_sarranid_footman_multiplayer"),
  2167. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_c", "trp_sarranid_footman_multiplayer"),
  2168. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_kite_d", "trp_sarranid_footman_multiplayer"),
  2169.  
  2170. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_sarranid_footman_multiplayer"),
  2171. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_sarranid_footman_multiplayer"),
  2172. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_sarranid_footman_multiplayer"),
  2173.  
  2174.  
  2175.  
  2176.  
  2177. #Sarranid mamluke
  2178. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_cloth_robe", "trp_sarranid_mamluke_multiplayer"),
  2179. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_skirmisher_armor", "trp_sarranid_mamluke_multiplayer"),
  2180. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_archers_vest", "trp_sarranid_mamluke_multiplayer"),
  2181. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_mail_shirt", "trp_sarranid_mamluke_multiplayer"),
  2182. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_cavalry_robe", "trp_sarranid_mamluke_multiplayer"),
  2183. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mamluke_mail", "trp_sarranid_mamluke_multiplayer"),
  2184. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_elite_armor", "trp_sarranid_mamluke_multiplayer"),
  2185.  
  2186.  
  2187. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_turban", "trp_sarranid_mamluke_multiplayer"),
  2188. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_desert_turban", "trp_sarranid_mamluke_multiplayer"),
  2189. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_horseman_helmet", "trp_sarranid_mamluke_multiplayer"),
  2190. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_mail_coif", "trp_sarranid_mamluke_multiplayer"),
  2191. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_veiled_helmet", "trp_sarranid_mamluke_multiplayer"),
  2192. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_b", "trp_sarranid_mamluke_multiplayer"),
  2193. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_c", "trp_sarranid_mamluke_multiplayer"),
  2194. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_boots_d", "trp_sarranid_mamluke_multiplayer"),
  2195.  
  2196. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_a", "trp_sarranid_mamluke_multiplayer"),
  2197. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_b", "trp_sarranid_mamluke_multiplayer"),
  2198. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_cavalry_sword", "trp_sarranid_mamluke_multiplayer"),
  2199. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_sword_d", "trp_sarranid_mamluke_multiplayer"),
  2200. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_mace_1", "trp_sarranid_mamluke_multiplayer"),
  2201. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_axe_a", "trp_sarranid_mamluke_multiplayer"),
  2202. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_axe_b", "trp_sarranid_mamluke_multiplayer"),
  2203. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_sarranid_two_handed_axe_a", "trp_sarranid_mamluke_multiplayer"),
  2204.  
  2205. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_lance", "trp_sarranid_mamluke_multiplayer"),
  2206. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_lance", "trp_sarranid_mamluke_multiplayer"),
  2207.  
  2208. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_jarid", "trp_sarranid_mamluke_multiplayer"),
  2209. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_javelin", "trp_sarranid_mamluke_multiplayer"),
  2210.  
  2211. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_a", "trp_sarranid_mamluke_multiplayer"),
  2212. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_b", "trp_sarranid_mamluke_multiplayer"),
  2213. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_small_round_c", "trp_sarranid_mamluke_multiplayer"),
  2214.  
  2215. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_saddle_horse", "trp_sarranid_mamluke_multiplayer"),
  2216. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_horse_a", "trp_sarranid_mamluke_multiplayer"),
  2217. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_arabian_horse_b", "trp_sarranid_mamluke_multiplayer"),
  2218. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_warhorse_sarranid", "trp_sarranid_mamluke_multiplayer"),
  2219.  
  2220. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_sarranid_mamluke_multiplayer"),
  2221. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_mittens", "trp_sarranid_mamluke_multiplayer"),
  2222. (call_script, "script_multiplayer_set_item_available_for_troop", "itm_scale_gauntlets", "trp_sarranid_mamluke_multiplayer"),
  2223.  
  2224.  
  2225. #INVASION MODE START
  2226. (scene_set_slot, "scn_multi_scene_11", slot_scene_ccoop_disallow_horses, 1),
  2227. (scene_set_slot, "scn_multi_scene_12", slot_scene_ccoop_disallow_horses, 1),
  2228. (scene_set_slot, "scn_multi_scene_18", slot_scene_ccoop_disallow_horses, 1),
  2229. (scene_set_slot, "scn_multi_scene_20", slot_scene_ccoop_disallow_horses, 1),
  2230.  
  2231. (item_set_slot, "itm_javelin_bow", slot_item_ccoop_has_ammo, 1),
  2232. #INVASION MODE END
  2233.  
  2234. ]),
  2235.  
  2236. #script_get_army_size_from_slider_value
  2237. # INPUT: arg1 = slider_value
  2238. # OUTPUT: reg0 = army_size
  2239. ("get_army_size_from_slider_value",
  2240. [
  2241. (store_script_param, ":slider_value", 1),
  2242. (assign, ":army_size", ":slider_value"),
  2243. (try_begin),
  2244. (gt, ":slider_value", 25),
  2245. (store_sub, ":adder_value", ":slider_value", 25),
  2246. (val_add, ":army_size", ":adder_value"),
  2247. (try_begin),
  2248. (gt, ":slider_value", 50),
  2249. (store_sub, ":adder_value", ":slider_value", 50),
  2250. (val_mul, ":adder_value", 3),
  2251. (val_add, ":army_size", ":adder_value"),
  2252. (try_end),
  2253. (try_end),
  2254. (assign, reg0, ":army_size"),
  2255. ]),
  2256.  
  2257. #script_spawn_quick_battle_army
  2258. # INPUT: arg1 = initial_entry_point, arg2 = faction_no, arg3 = infantry_ratio, arg4 = archers_ratio, arg5 = cavalry_ratio, arg6 = divide_archer_entry_points, arg7 = player_team
  2259. # OUTPUT: none
  2260. ("spawn_quick_battle_army",
  2261. [
  2262. (store_script_param, ":cur_entry_point", 1),
  2263. (store_script_param, ":faction_no", 2),
  2264. (store_script_param, ":infantry_ratio", 3),
  2265. (store_script_param, ":archers_ratio", 4),
  2266. (store_script_param, ":cavalry_ratio", 5),
  2267. (store_script_param, ":divide_archer_entry_points", 6),
  2268. (store_script_param, ":player_team", 7),
  2269.  
  2270. (try_begin),
  2271. (eq, ":player_team", 1),
  2272. (call_script, "script_get_army_size_from_slider_value", "$g_quick_battle_army_1_size"),
  2273. (assign, ":army_size", reg0),
  2274. (set_player_troop, "$g_quick_battle_troop"),
  2275. (set_visitor, ":cur_entry_point", "$g_quick_battle_troop"),
  2276. (try_begin),
  2277. (eq, ":cur_entry_point", 0),
  2278. (try_begin),
  2279. (is_between, ":faction_no", npc_kingdoms_begin, npc_kingdoms_end),
  2280. (faction_get_slot, "$g_quick_battle_team_0_banner", ":faction_no", slot_faction_banner),
  2281. (else_try),
  2282. (assign, "$g_quick_battle_team_0_banner", "mesh_banners_default_b"),
  2283. (try_end),
  2284. (else_try),
  2285. (try_begin),
  2286. (is_between, ":faction_no", npc_kingdoms_begin, npc_kingdoms_end),
  2287. (faction_get_slot, "$g_quick_battle_team_1_banner", ":faction_no", slot_faction_banner),
  2288. (else_try),
  2289. (assign, "$g_quick_battle_team_1_banner", "mesh_banners_default_b"),
  2290. (try_end),
  2291. (try_end),
  2292. (val_add, ":cur_entry_point", 1),
  2293.  
  2294. (else_try),
  2295. (call_script, "script_get_army_size_from_slider_value", "$g_quick_battle_army_2_size"),
  2296. (assign, ":army_size", reg0),
  2297. (try_begin),
  2298. (eq, ":cur_entry_point", 0),
  2299. (assign, "$g_quick_battle_team_0_banner", "mesh_banners_default_a"),
  2300. (else_try),
  2301. (assign, "$g_quick_battle_team_1_banner", "mesh_banners_default_a"),
  2302. (try_end),
  2303. (val_add, ":cur_entry_point", 1),
  2304. (try_end),
  2305.  
  2306. (store_mul, ":num_infantry", ":infantry_ratio", ":army_size"),
  2307. (val_div, ":num_infantry", 100),
  2308. (store_mul, ":num_archers", ":archers_ratio", ":army_size"),
  2309. (val_div, ":num_archers", 100),
  2310. (store_mul, ":num_cavalry", ":cavalry_ratio", ":army_size"),
  2311. (val_div, ":num_cavalry", 100),
  2312.  
  2313. (try_begin),
  2314. (store_add, ":num_total", ":num_infantry", ":num_archers"),
  2315. (val_add, ":num_total", ":num_cavalry"),
  2316. (neq, ":num_total", ":army_size"),
  2317. (store_sub, ":leftover", ":army_size", ":num_total"),
  2318. (try_begin),
  2319. (gt, ":infantry_ratio", ":archers_ratio"),
  2320. (gt, ":infantry_ratio", ":cavalry_ratio"),
  2321. (val_add, ":num_infantry", ":leftover"),
  2322. (else_try),
  2323. (gt, ":archers_ratio", ":cavalry_ratio"),
  2324. (val_add, ":num_archers", ":leftover"),
  2325. (else_try),
  2326. (val_add, ":num_cavalry", ":leftover"),
  2327. (try_end),
  2328. (try_end),
  2329.  
  2330. (store_mul, ":rand_min", ":num_infantry", 15),
  2331. (val_div, ":rand_min", 100),
  2332. (store_mul, ":rand_max", ":num_infantry", 45),
  2333. (val_div, ":rand_max", 100),
  2334. (store_random_in_range, ":num_tier_2_infantry", ":rand_min", ":rand_max"),
  2335. (store_sub, ":num_tier_1_infantry", ":num_infantry", ":num_tier_2_infantry"),
  2336. (store_mul, ":rand_min", ":num_archers", 15),
  2337. (val_div, ":rand_min", 100),
  2338. (store_mul, ":rand_max", ":num_archers", 45),
  2339. (val_div, ":rand_max", 100),
  2340. (store_random_in_range, ":num_tier_2_archers", ":rand_min", ":rand_max"),
  2341. (store_sub, ":num_tier_1_archers", ":num_archers", ":num_tier_2_archers"),
  2342. (store_mul, ":rand_min", ":num_cavalry", 15),
  2343. (val_div, ":rand_min", 100),
  2344. (store_mul, ":rand_max", ":num_cavalry", 45),
  2345. (val_div, ":rand_max", 100),
  2346. (store_random_in_range, ":num_tier_2_cavalry", ":rand_min", ":rand_max"),
  2347. (store_sub, ":num_tier_1_cavalry", ":num_cavalry", ":num_tier_2_cavalry"),
  2348.  
  2349. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_2_infantry),
  2350. (set_visitors, ":cur_entry_point", ":cur_troop", ":num_tier_2_infantry"),
  2351. (val_add, ":cur_entry_point", 1),
  2352. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_1_infantry),
  2353. (set_visitors, ":cur_entry_point", ":cur_troop", ":num_tier_1_infantry"),
  2354. (val_add, ":cur_entry_point", 1),
  2355. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_2_cavalry),
  2356. (set_visitors, ":cur_entry_point", ":cur_troop", ":num_tier_2_cavalry"),
  2357. (val_add, ":cur_entry_point", 1),
  2358. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_1_cavalry),
  2359. (set_visitors, ":cur_entry_point", ":cur_troop", ":num_tier_1_cavalry"),
  2360. (val_add, ":cur_entry_point", 1),
  2361.  
  2362. (try_begin),
  2363. (eq, ":divide_archer_entry_points", 0),
  2364. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_2_archer),
  2365. (set_visitors, ":cur_entry_point", ":cur_troop", ":num_tier_2_archers"),
  2366. (val_add, ":cur_entry_point", 1),
  2367. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_1_archer),
  2368. (set_visitors, ":cur_entry_point", ":cur_troop", ":num_tier_1_archers"),
  2369. (val_add, ":cur_entry_point", 1),
  2370. (else_try),
  2371. (assign, ":cur_entry_point", 40), #archer positions begin point
  2372. (store_div, ":num_tier_1_archers_ceil_8", ":num_tier_1_archers", 8),
  2373. (val_mul, ":num_tier_1_archers_ceil_8", 8),
  2374. (try_begin),
  2375. (neq, ":num_tier_1_archers_ceil_8", ":num_tier_1_archers"),
  2376. (val_div, ":num_tier_1_archers_ceil_8", 8),
  2377. (val_add, ":num_tier_1_archers_ceil_8", 1),
  2378. (val_mul, ":num_tier_1_archers_ceil_8", 8),
  2379. (try_end),
  2380. (store_div, ":num_tier_2_archers_ceil_8", ":num_tier_2_archers", 8),
  2381. (val_mul, ":num_tier_2_archers_ceil_8", 8),
  2382. (try_begin),
  2383. (neq, ":num_tier_2_archers_ceil_8", ":num_tier_2_archers"),
  2384. (val_div, ":num_tier_2_archers_ceil_8", 8),
  2385. (val_add, ":num_tier_2_archers_ceil_8", 1),
  2386. (val_mul, ":num_tier_2_archers_ceil_8", 8),
  2387. (try_end),
  2388. (store_add, ":num_archers_ceil_8", ":num_tier_1_archers_ceil_8", ":num_tier_2_archers_ceil_8"),
  2389. (store_div, ":num_archers_per_entry_point", ":num_archers_ceil_8", 8),
  2390. (assign, ":left_tier_1_archers", ":num_tier_1_archers"),
  2391. (assign, ":left_tier_2_archers", ":num_tier_2_archers"),
  2392. (assign, ":end_cond", 1000),
  2393. (try_for_range, ":unused", 0, ":end_cond"),
  2394. (try_begin),
  2395. (gt, ":left_tier_2_archers", 0),
  2396. (assign, ":used_tier_2_archers", ":num_archers_per_entry_point"),
  2397. (val_min, ":used_tier_2_archers", ":left_tier_2_archers"),
  2398. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_2_archer),
  2399. (set_visitors, ":cur_entry_point", ":cur_troop", ":used_tier_2_archers"),
  2400. (val_add, ":cur_entry_point", 1),
  2401. (val_sub, ":left_tier_2_archers", ":used_tier_2_archers"),
  2402. (else_try),
  2403. (gt, ":left_tier_1_archers", 0),
  2404. (assign, ":used_tier_1_archers", ":num_archers_per_entry_point"),
  2405. (val_min, ":used_tier_1_archers", ":left_tier_1_archers"),
  2406. (faction_get_slot, ":cur_troop", ":faction_no", slot_faction_quick_battle_tier_1_archer),
  2407. (set_visitors, ":cur_entry_point", ":cur_troop", ":used_tier_1_archers"),
  2408. (val_add, ":cur_entry_point", 1),
  2409. (val_sub, ":left_tier_1_archers", ":used_tier_1_archers"),
  2410. (else_try),
  2411. (assign, ":end_cond", 0),
  2412. (try_end),
  2413. (try_end),
  2414. (try_end),
  2415. ]),
  2416.  
  2417. ("player_arrived",
  2418. [
  2419. (assign, ":player_faction_culture", "fac_culture_1"),
  2420. (faction_set_slot, "fac_player_supporters_faction", slot_faction_culture, ":player_faction_culture"),
  2421. (faction_set_slot, "fac_player_faction", slot_faction_culture, ":player_faction_culture"),
  2422. ]),
  2423.  
  2424.  
  2425. #script_game_set_multiplayer_mission_end
  2426. # This script is called from the game engine when a multiplayer map is ended in clients (not in server).
  2427. # INPUT:
  2428. # none
  2429. # OUTPUT:
  2430. # none
  2431. ("game_set_multiplayer_mission_end",
  2432. [
  2433. (assign, "$g_multiplayer_mission_end_screen", 1),
  2434. ]),
  2435. #script_game_enable_cheat_menu
  2436. # This script is called from the game engine when user enters "cheatmenu from command console (ctrl+~).
  2437. # INPUT:
  2438. # none
  2439. # OUTPUT:
  2440. # none
  2441. ("game_enable_cheat_menu",
  2442. [
  2443. (store_script_param, ":input", 1),
  2444. (try_begin),
  2445. (eq, ":input", 0),
  2446. (assign, "$cheat_mode", 0),
  2447. (else_try),
  2448. (eq, ":input", 1),
  2449. (assign, "$cheat_mode", 1),
  2450. (try_end),
  2451. ]),
  2452.  
  2453. #script_game_get_console_command
  2454. # This script is called from the game engine when a console command is entered from the dedicated server.
  2455. # INPUT: anything
  2456. # OUTPUT: s0 = result text
  2457. ("game_get_console_command",
  2458. [
  2459. (store_script_param, ":input", 1),
  2460. (store_script_param, ":val1", 2),
  2461. (try_begin),
  2462. #getting val2 for some commands
  2463. (eq, ":input", 2),
  2464. (store_script_param, ":val2", 3),
  2465. (end_try),
  2466. (try_begin),
  2467. (eq, ":input", 1),
  2468. (assign, reg0, ":val1"),
  2469. (try_begin),
  2470. (eq, ":val1", 1),
  2471. (assign, reg1, "$g_multiplayer_num_bots_team_1"),
  2472. (str_store_string, s0, "str_team_reg0_bot_count_is_reg1"),
  2473. (else_try),
  2474. (eq, ":val1", 2),
  2475. (assign, reg1, "$g_multiplayer_num_bots_team_2"),
  2476. (str_store_string, s0, "str_team_reg0_bot_count_is_reg1"),
  2477. (else_try),
  2478. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2479. (try_end),
  2480. (else_try),
  2481. (eq, ":input", 2),
  2482. (assign, reg0, ":val1"),
  2483. (assign, reg1, ":val2"),
  2484. (try_begin),
  2485. (eq, ":val1", 1),
  2486. (ge, ":val2", 0),
  2487. (assign, "$g_multiplayer_num_bots_team_1", ":val2"),
  2488. (str_store_string, s0, "str_team_reg0_bot_count_is_reg1"),
  2489. (else_try),
  2490. (eq, ":val1", 2),
  2491. (ge, ":val2", 0),
  2492. (assign, "$g_multiplayer_num_bots_team_2", ":val2"),
  2493. (str_store_string, s0, "str_team_reg0_bot_count_is_reg1"),
  2494. (else_try),
  2495. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2496. (try_end),
  2497. (else_try),
  2498. (eq, ":input", 3),
  2499. (assign, reg0, "$g_multiplayer_round_max_seconds"),
  2500. (str_store_string, s0, "str_maximum_seconds_for_round_is_reg0"),
  2501. (else_try),
  2502. (eq, ":input", 4),
  2503. (assign, reg0, ":val1"),
  2504. (try_begin),
  2505. (is_between, ":val1", multiplayer_round_max_seconds_min, multiplayer_round_max_seconds_max),
  2506. (assign, "$g_multiplayer_round_max_seconds", ":val1"),
  2507. (str_store_string, s0, "str_maximum_seconds_for_round_is_reg0"),
  2508. (get_max_players, ":num_players"),
  2509. (try_for_range, ":cur_player", 1, ":num_players"),
  2510. (player_is_active, ":cur_player"),
  2511. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_round_max_seconds, ":val1"),
  2512. (try_end),
  2513. (else_try),
  2514. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2515. (try_end),
  2516. (else_try),
  2517. (eq, ":input", 5),
  2518. (assign, reg0, "$g_multiplayer_respawn_period"),
  2519. (str_store_string, s0, "str_respawn_period_is_reg0_seconds"),
  2520. (else_try),
  2521. (eq, ":input", 6),
  2522. (assign, reg0, ":val1"),
  2523. (try_begin),
  2524. (is_between, ":val1", multiplayer_respawn_period_min, multiplayer_respawn_period_max),
  2525. (assign, "$g_multiplayer_respawn_period", ":val1"),
  2526. (str_store_string, s0, "str_respawn_period_is_reg0_seconds"),
  2527. (else_try),
  2528. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2529. (try_end),
  2530. (else_try),
  2531. (eq, ":input", 7),
  2532. (assign, reg0, "$g_multiplayer_num_bots_voteable"),
  2533. (str_store_string, s0, "str_bots_upper_limit_for_votes_is_reg0"),
  2534. (else_try),
  2535. (eq, ":input", 8),
  2536. (try_begin),
  2537. (is_between, ":val1", 0, 51),
  2538. (assign, "$g_multiplayer_num_bots_voteable", ":val1"),
  2539. (store_add, "$g_multiplayer_max_num_bots", ":val1", 1),
  2540. (assign, reg0, "$g_multiplayer_num_bots_voteable"),
  2541. (str_store_string, s0, "str_bots_upper_limit_for_votes_is_reg0"),
  2542. (get_max_players, ":num_players"),
  2543. (try_for_range, ":cur_player", 1, ":num_players"),
  2544. (player_is_active, ":cur_player"),
  2545. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_num_bots_voteable, ":val1"),
  2546. (try_end),
  2547. (else_try),
  2548. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2549. (try_end),
  2550. (else_try),
  2551. (eq, ":input", 9),
  2552. (try_begin),
  2553. (eq, "$g_multiplayer_maps_voteable", 1),
  2554. (str_store_string, s0, "str_map_is_voteable"),
  2555. (else_try),
  2556. (str_store_string, s0, "str_map_is_not_voteable"),
  2557. (try_end),
  2558. (else_try),
  2559. (eq, ":input", 10),
  2560. (try_begin),
  2561. (is_between, ":val1", 0, 2),
  2562. (assign, "$g_multiplayer_maps_voteable", ":val1"),
  2563. (try_begin),
  2564. (eq, ":val1", 1),
  2565. (str_store_string, s0, "str_map_is_voteable"),
  2566. (else_try),
  2567. (str_store_string, s0, "str_map_is_not_voteable"),
  2568. (try_end),
  2569. (get_max_players, ":num_players"),
  2570. (try_for_range, ":cur_player", 1, ":num_players"),
  2571. (player_is_active, ":cur_player"),
  2572. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_maps_voteable, ":val1"),
  2573. (try_end),
  2574. (else_try),
  2575. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2576. (try_end),
  2577. (else_try),
  2578. (eq, ":input", 11),
  2579. (try_begin),
  2580. (eq, "$g_multiplayer_factions_voteable", 1),
  2581. (str_store_string, s0, "str_factions_are_voteable"),
  2582. (else_try),
  2583. (str_store_string, s0, "str_factions_are_not_voteable"),
  2584. (try_end),
  2585. (else_try),
  2586. (eq, ":input", 12),
  2587. (try_begin),
  2588. (is_between, ":val1", 0, 2),
  2589. (assign, "$g_multiplayer_factions_voteable", ":val1"),
  2590. (try_begin),
  2591. (eq, ":val1", 1),
  2592. (str_store_string, s0, "str_factions_are_voteable"),
  2593. (else_try),
  2594. (str_store_string, s0, "str_factions_are_not_voteable"),
  2595. (try_end),
  2596. (get_max_players, ":num_players"),
  2597. (try_for_range, ":cur_player", 1, ":num_players"),
  2598. (player_is_active, ":cur_player"),
  2599. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_factions_voteable, ":val1"),
  2600. (try_end),
  2601. (else_try),
  2602. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2603. (try_end),
  2604. (else_try),
  2605. (eq, ":input", 13),
  2606. (try_begin),
  2607. (eq, "$g_multiplayer_player_respawn_as_bot", 1),
  2608. (str_store_string, s0, "str_players_respawn_as_bot"),
  2609. (else_try),
  2610. (str_store_string, s0, "str_players_do_not_respawn_as_bot"),
  2611. (try_end),
  2612. (else_try),
  2613. (eq, ":input", 14),
  2614. (try_begin),
  2615. (is_between, ":val1", 0, 2),
  2616. (assign, "$g_multiplayer_player_respawn_as_bot", ":val1"),
  2617. (try_begin),
  2618. (eq, ":val1", 1),
  2619. (str_store_string, s0, "str_players_respawn_as_bot"),
  2620. (else_try),
  2621. (str_store_string, s0, "str_players_do_not_respawn_as_bot"),
  2622. (try_end),
  2623. (get_max_players, ":num_players"),
  2624. (try_for_range, ":cur_player", 1, ":num_players"),
  2625. (player_is_active, ":cur_player"),
  2626. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_player_respawn_as_bot, ":val1"),
  2627. (try_end),
  2628. (else_try),
  2629. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2630. (try_end),
  2631. (else_try),
  2632. (eq, ":input", 15),
  2633. (try_begin),
  2634. (eq, "$g_multiplayer_kick_voteable", 1),
  2635. (str_store_string, s0, "str_kicking_a_player_is_voteable"),
  2636. (else_try),
  2637. (str_store_string, s0, "str_kicking_a_player_is_not_voteable"),
  2638. (try_end),
  2639. (else_try),
  2640. (eq, ":input", 16),
  2641. (try_begin),
  2642. (is_between, ":val1", 0, 2),
  2643. (assign, "$g_multiplayer_kick_voteable", ":val1"),
  2644. (try_begin),
  2645. (eq, ":val1", 1),
  2646. (str_store_string, s0, "str_kicking_a_player_is_voteable"),
  2647. (else_try),
  2648. (str_store_string, s0, "str_kicking_a_player_is_not_voteable"),
  2649. (try_end),
  2650. (get_max_players, ":num_players"),
  2651. (try_for_range, ":cur_player", 1, ":num_players"),
  2652. (player_is_active, ":cur_player"),
  2653. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_kick_voteable, ":val1"),
  2654. (try_end),
  2655. (else_try),
  2656. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2657. (try_end),
  2658. (else_try),
  2659. (eq, ":input", 17),
  2660. (try_begin),
  2661. (eq, "$g_multiplayer_ban_voteable", 1),
  2662. (str_store_string, s0, "str_banning_a_player_is_voteable"),
  2663. (else_try),
  2664. (str_store_string, s0, "str_banning_a_player_is_not_voteable"),
  2665. (try_end),
  2666. (else_try),
  2667. (eq, ":input", 18),
  2668. (try_begin),
  2669. (is_between, ":val1", 0, 2),
  2670. (assign, "$g_multiplayer_ban_voteable", ":val1"),
  2671. (try_begin),
  2672. (eq, ":val1", 1),
  2673. (str_store_string, s0, "str_banning_a_player_is_voteable"),
  2674. (else_try),
  2675. (str_store_string, s0, "str_banning_a_player_is_not_voteable"),
  2676. (try_end),
  2677. (get_max_players, ":num_players"),
  2678. (try_for_range, ":cur_player", 1, ":num_players"),
  2679. (player_is_active, ":cur_player"),
  2680. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_ban_voteable, ":val1"),
  2681. (try_end),
  2682. (else_try),
  2683. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2684. (try_end),
  2685. (else_try),
  2686. (eq, ":input", 19),
  2687. (assign, reg0, "$g_multiplayer_valid_vote_ratio"),
  2688. (str_store_string, s0, "str_percentage_of_yes_votes_required_for_a_poll_to_get_accepted_is_reg0"),
  2689. (else_try),
  2690. (eq, ":input", 20),
  2691. (try_begin),
  2692. (is_between, ":val1", 50, 101),
  2693. (assign, "$g_multiplayer_valid_vote_ratio", ":val1"),
  2694. (assign, reg0, ":val1"),
  2695. (str_store_string, s0, "str_percentage_of_yes_votes_required_for_a_poll_to_get_accepted_is_reg0"),
  2696. (else_try),
  2697. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2698. (try_end),
  2699. (else_try),
  2700. (eq, ":input", 21),
  2701. (assign, reg0, "$g_multiplayer_auto_team_balance_limit"),
  2702. (str_store_string, s0, "str_auto_team_balance_threshold_is_reg0"),
  2703. (else_try),
  2704. (eq, ":input", 22),
  2705. (try_begin),
  2706. (is_between, ":val1", 2, 7),
  2707. (assign, "$g_multiplayer_auto_team_balance_limit", ":val1"),
  2708. (assign, reg0, "$g_multiplayer_auto_team_balance_limit"),
  2709. (str_store_string, s0, "str_auto_team_balance_threshold_is_reg0"),
  2710. (get_max_players, ":num_players"),
  2711. (try_for_range, ":cur_player", 1, ":num_players"),
  2712. (player_is_active, ":cur_player"),
  2713. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_auto_team_balance_limit, ":val1"),
  2714. (try_end),
  2715. (else_try),
  2716. (ge, ":val1", 7),
  2717. (assign, "$g_multiplayer_auto_team_balance_limit", 1000),
  2718. (assign, reg0, "$g_multiplayer_auto_team_balance_limit"),
  2719. (str_store_string, s0, "str_auto_team_balance_threshold_is_reg0"),
  2720. (get_max_players, ":num_players"),
  2721. (try_for_range, ":cur_player", 1, ":num_players"),
  2722. (player_is_active, ":cur_player"),
  2723. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_auto_team_balance_limit, ":val1"),
  2724. (try_end),
  2725. (else_try),
  2726. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2727. (try_end),
  2728. (else_try),
  2729. (eq, ":input", 23),
  2730. (assign, reg0, "$g_multiplayer_initial_gold_multiplier"),
  2731. (str_store_string, s0, "str_starting_gold_ratio_is_reg0"),
  2732. (else_try),
  2733. (eq, ":input", 24),
  2734. (try_begin),
  2735. (is_between, ":val1", 0, 1001),
  2736. (assign, "$g_multiplayer_initial_gold_multiplier", ":val1"),
  2737. (assign, reg0, "$g_multiplayer_initial_gold_multiplier"),
  2738. (str_store_string, s0, "str_starting_gold_ratio_is_reg0"),
  2739. (else_try),
  2740. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2741. (try_end),
  2742. (else_try),
  2743. (eq, ":input", 25),
  2744. (assign, reg0, "$g_multiplayer_battle_earnings_multiplier"),
  2745. (str_store_string, s0, "str_combat_gold_bonus_ratio_is_reg0"),
  2746. (else_try),
  2747. (eq, ":input", 26),
  2748. (try_begin),
  2749. (is_between, ":val1", 0, 1001),
  2750. (assign, "$g_multiplayer_battle_earnings_multiplier", ":val1"),
  2751. (assign, reg0, "$g_multiplayer_battle_earnings_multiplier"),
  2752. (str_store_string, s0, "str_combat_gold_bonus_ratio_is_reg0"),
  2753. (else_try),
  2754. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2755. (try_end),
  2756. (else_try),
  2757. (eq, ":input", 27),
  2758. (assign, reg0, "$g_multiplayer_round_earnings_multiplier"),
  2759. (str_store_string, s0, "str_round_gold_bonus_ratio_is_reg0"),
  2760. (else_try),
  2761. (eq, ":input", 28),
  2762. (try_begin),
  2763. (is_between, ":val1", 0, 1001),
  2764. (assign, "$g_multiplayer_round_earnings_multiplier", ":val1"),
  2765. (assign, reg0, "$g_multiplayer_round_earnings_multiplier"),
  2766. (str_store_string, s0, "str_round_gold_bonus_ratio_is_reg0"),
  2767. (else_try),
  2768. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2769. (try_end),
  2770. (else_try),
  2771. (eq, ":input", 29),
  2772. (try_begin),
  2773. (eq, "$g_multiplayer_allow_player_banners", 1),
  2774. (str_store_string, s0, "str_player_banners_are_allowed"),
  2775. (else_try),
  2776. (str_store_string, s0, "str_player_banners_are_not_allowed"),
  2777. (try_end),
  2778. (else_try),
  2779. (eq, ":input", 30),
  2780. (try_begin),
  2781. (is_between, ":val1", 0, 2),
  2782. (assign, "$g_multiplayer_allow_player_banners", ":val1"),
  2783. (try_begin),
  2784. (eq, ":val1", 1),
  2785. (str_store_string, s0, "str_player_banners_are_allowed"),
  2786. (else_try),
  2787. (str_store_string, s0, "str_player_banners_are_not_allowed"),
  2788. (try_end),
  2789. (else_try),
  2790. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2791. (try_end),
  2792. (else_try),
  2793. (eq, ":input", 31),
  2794. (try_begin),
  2795. (eq, "$g_multiplayer_force_default_armor", 1),
  2796. (str_store_string, s0, "str_default_armor_is_forced"),
  2797. (else_try),
  2798. (str_store_string, s0, "str_default_armor_is_not_forced"),
  2799. (try_end),
  2800. (else_try),
  2801. (eq, ":input", 32),
  2802. (try_begin),
  2803. (is_between, ":val1", 0, 2),
  2804. (assign, "$g_multiplayer_force_default_armor", ":val1"),
  2805. (try_begin),
  2806. (eq, ":val1", 1),
  2807. (str_store_string, s0, "str_default_armor_is_forced"),
  2808. (else_try),
  2809. (str_store_string, s0, "str_default_armor_is_not_forced"),
  2810. (try_end),
  2811. (else_try),
  2812. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2813. (try_end),
  2814. (else_try),
  2815. (eq, ":input", 33),
  2816. (assign, reg0, "$g_multiplayer_point_gained_from_flags"),
  2817. (str_store_string, s0, "str_point_gained_from_flags_is_reg0"),
  2818. (else_try),
  2819. (eq, ":input", 34),
  2820. (try_begin),
  2821. (is_between, ":val1", 25, 401),
  2822. (assign, "$g_multiplayer_point_gained_from_flags", ":val1"),
  2823. (assign, reg0, "$g_multiplayer_point_gained_from_flags"),
  2824. (str_store_string, s0, "str_point_gained_from_flags_is_reg0"),
  2825. (else_try),
  2826. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2827. (try_end),
  2828. (else_try),
  2829. (eq, ":input", 35),
  2830. (assign, reg0, "$g_multiplayer_point_gained_from_capturing_flag"),
  2831. (str_store_string, s0, "str_point_gained_from_capturing_flag_is_reg0"),
  2832. (else_try),
  2833. (eq, ":input", 36),
  2834. (try_begin),
  2835. (is_between, ":val1", 0, 11),
  2836. (assign, "$g_multiplayer_point_gained_from_capturing_flag", ":val1"),
  2837. (assign, reg0, "$g_multiplayer_point_gained_from_capturing_flag"),
  2838. (str_store_string, s0, "str_point_gained_from_capturing_flag_is_reg0"),
  2839. (else_try),
  2840. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2841. (try_end),
  2842. (else_try),
  2843. (eq, ":input", 37),
  2844. (assign, reg0, "$g_multiplayer_game_max_minutes"),
  2845. (str_store_string, s0, "str_map_time_limit_is_reg0"),
  2846. (else_try),
  2847. (eq, ":input", 38),
  2848. (try_begin),
  2849. (is_between, ":val1", 5, 121),
  2850. (assign, "$g_multiplayer_game_max_minutes", ":val1"),
  2851. (assign, reg0, "$g_multiplayer_game_max_minutes"),
  2852. (str_store_string, s0, "str_map_time_limit_is_reg0"),
  2853. (else_try),
  2854. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2855. (try_end),
  2856. (else_try),
  2857. (eq, ":input", 39),
  2858. (assign, reg0, "$g_multiplayer_game_max_points"),
  2859. (str_store_string, s0, "str_team_points_limit_is_reg0"),
  2860. (else_try),
  2861. (eq, ":input", 40),
  2862. (try_begin),
  2863. (is_between, ":val1", 3, 1001),
  2864. (assign, "$g_multiplayer_game_max_points", ":val1"),
  2865. (assign, reg0, "$g_multiplayer_game_max_points"),
  2866. (str_store_string, s0, "str_team_points_limit_is_reg0"),
  2867. (else_try),
  2868. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2869. (try_end),
  2870. (else_try),
  2871. (eq, ":input", 41),
  2872. (assign, reg0, "$g_multiplayer_number_of_respawn_count"),
  2873. (try_begin),
  2874. (eq, reg0, 0),
  2875. (str_store_string, s1, "str_unlimited"),
  2876. (else_try),
  2877. (str_store_string, s1, "str_reg0"),
  2878. (try_end),
  2879. (str_store_string, s0, "str_defender_spawn_count_limit_is_s1"),
  2880. (else_try),
  2881. (eq, ":input", 42),
  2882. (try_begin),
  2883. (is_between, ":val1", 0, 6),
  2884. (assign, "$g_multiplayer_number_of_respawn_count", ":val1"),
  2885. (assign, reg0, "$g_multiplayer_number_of_respawn_count"),
  2886. (try_begin),
  2887. (eq, reg0, 0),
  2888. (str_store_string, s1, "str_unlimited"),
  2889. (else_try),
  2890. (str_store_string, s1, "str_reg0"),
  2891. (try_end),
  2892. (str_store_string, s0, "str_defender_spawn_count_limit_is_s1"),
  2893. (get_max_players, ":num_players"),
  2894. (try_for_range, ":cur_player", 1, ":num_players"),
  2895. (player_is_active, ":cur_player"),
  2896. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_respawn_count, ":val1"),
  2897. (try_end),
  2898. (else_try),
  2899. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2900. (try_end),
  2901. (else_try),
  2902. (eq, ":input", 43),
  2903. (try_begin),
  2904. (eq, "$g_multiplayer_disallow_ranged_weapons", 1),
  2905. (str_store_string, s0, "str_ranged_weapons_are_disallowed"),
  2906. (else_try),
  2907. (str_store_string, s0, "str_ranged_weapons_are_allowed"),
  2908. (try_end),
  2909. (else_try),
  2910. (eq, ":input", 44),
  2911. (try_begin),
  2912. (is_between, ":val1", 0, 2),
  2913. (assign, "$g_multiplayer_disallow_ranged_weapons", ":val1"),
  2914. (try_begin),
  2915. (eq, ":val1", 1),
  2916. (str_store_string, s0, "str_ranged_weapons_are_disallowed"),
  2917. (else_try),
  2918. (str_store_string, s0, "str_ranged_weapons_are_allowed"),
  2919. (try_end),
  2920. (else_try),
  2921. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2922. (try_end),
  2923. (else_try),
  2924. #INVASION MODE START
  2925. (eq, ":input", 83), # get_invasion_difficulty # returns the difficulty for Invasion mode
  2926. (assign, ":string_index", "$g_multiplayer_ccoop_difficulty"),
  2927. (val_add, ":string_index", "str_ccoop_easy"),
  2928. (str_store_string, s0, ":string_index"),
  2929. (str_store_string, s0, "str_ccoop_difficulty_s0"),
  2930. (else_try),
  2931. (eq, ":input", 84), # set_invasion_difficulty # returns the squad size for captain mode
  2932. (try_begin),
  2933. (is_between, ":val1", 0, 3),
  2934. (assign, "$g_multiplayer_ccoop_difficulty", ":val1"),
  2935. (store_add, ":string_index", "str_ccoop_easy", "$g_multiplayer_ccoop_difficulty"),
  2936. (str_store_string, s0, ":string_index"),
  2937. (str_store_string, s0, "str_ccoop_difficulty_s0"),
  2938. (else_try),
  2939. (str_store_string, s0, "str_input_is_not_correct_for_the_command_type_help_for_more_information"),
  2940. (try_end),
  2941. (else_try),
  2942. #INVASION MODE END
  2943. (str_store_string, s0, "@{!}DEBUG : SYSTEM ERROR!"),
  2944. (try_end),
  2945. ]),
  2946.  
  2947.  
  2948. # script_game_event_party_encounter:
  2949. # This script is called from the game engine whenever player party encounters another party or a battle on the world map
  2950. # INPUT:
  2951. # param1: encountered_party
  2952. # param2: second encountered_party (if this was a battle
  2953. ("game_event_party_encounter",
  2954. [
  2955. (store_script_param_1, "$g_encountered_party"),
  2956. (store_script_param_2, "$g_encountered_party_2"),# encountered_party2 is set when we come across a battle or siege, otherwise it's a negative value
  2957. # (store_encountered_party, "$g_encountered_party"),
  2958. # (store_encountered_party2,"$g_encountered_party_2"), # encountered_party2 is set when we come across a battle or siege, otherwise it's a minus value
  2959. (store_faction_of_party, "$g_encountered_party_faction","$g_encountered_party"),
  2960. (store_relation, "$g_encountered_party_relation", "$g_encountered_party_faction", "fac_player_faction"),
  2961.  
  2962. (party_get_slot, "$g_encountered_party_type", "$g_encountered_party", slot_party_type),
  2963. (party_get_template_id,"$g_encountered_party_template","$g_encountered_party"),
  2964. # (try_begin),
  2965. # (gt, "$g_encountered_party_2", 0),
  2966. # (store_faction_of_party, "$g_encountered_party_2_faction","$g_encountered_party_2"),
  2967. # (store_relation, "$g_encountered_party_2_relation", "$g_encountered_party_2_faction", "fac_player_faction"),
  2968. # (party_get_template_id,"$g_encountered_party_2_template","$g_encountered_party_2"),
  2969. # (else_try),
  2970. # (assign, "$g_encountered_party_2_faction",-1),
  2971. # (assign, "$g_encountered_party_2_relation", 0),
  2972. # (assign,"$g_encountered_party_2_template", -1),
  2973. # (try_end),
  2974.  
  2975. #NPC companion changes begin
  2976. (call_script, "script_party_count_fit_regulars", "p_main_party"),
  2977. (assign, "$playerparty_prebattle_regulars", reg0),
  2978.  
  2979. # (try_begin),
  2980. # (assign, "$player_party__regulars", 0),
  2981. # (call_script, "script_party_count_fit_regulars", "p_main_party"),
  2982. # (gt, reg0, 0),
  2983. # (assign, "$player_party_contains_regulars", 1),
  2984. # (try_end),
  2985. #NPC companion changes end
  2986.  
  2987.  
  2988. (assign, "$g_last_rest_center", -1),
  2989. (assign, "$talk_context", 0),
  2990. (assign,"$g_player_surrenders",0),
  2991. (assign,"$g_enemy_surrenders",0),
  2992. (assign, "$g_leave_encounter",0),
  2993. (assign, "$g_engaged_enemy", 0),
  2994. # (assign,"$waiting_for_arena_fight_result", 0),
  2995. # (assign,"$arena_bet_amount",0),
  2996. # (assign,"$g_player_raiding_village",0),
  2997. (try_begin),
  2998. (neg|is_between, "$g_encountered_party", centers_begin, centers_end),
  2999. (rest_for_hours, 0), #stop waiting
  3000. (assign, "$g_infinite_camping", 0),
  3001. (try_end),
  3002. # (assign, "$g_permitted_to_center",0),
  3003. (assign, "$new_encounter", 1), #check this in the menu.
  3004. (try_begin),
  3005. (lt, "$g_encountered_party_2",0), #Normal encounter. Not battle or siege.
  3006. (try_begin),
  3007. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
  3008. (jump_to_menu, "mnu_castle_outside"),
  3009. (else_try),
  3010. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_castle),
  3011. (jump_to_menu, "mnu_castle_outside"),
  3012. (else_try),
  3013. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_ship),
  3014. (jump_to_menu, "mnu_ship_reembark"),
  3015. (else_try),
  3016. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
  3017. (jump_to_menu, "mnu_village"),
  3018. (else_try),
  3019. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_cattle_herd),
  3020. (jump_to_menu, "mnu_cattle_herd"),
  3021. (else_try),
  3022. (is_between, "$g_encountered_party", training_grounds_begin, training_grounds_end),
  3023. (jump_to_menu, "mnu_training_ground"),
  3024. (else_try),
  3025. (party_get_template_id, ":template", "$g_encountered_party"),
  3026. (ge, ":template", "pt_steppe_bandit_lair"),
  3027. (lt, ":template", "pt_bandit_lair_templates_end"),
  3028. (assign, "$loot_screen_shown", 0),
  3029. # (call_script, "script_encounter_init_variables"),
  3030. (jump_to_menu, "mnu_bandit_lair"),
  3031. (else_try),
  3032. (eq, "$g_encountered_party", "p_zendar"),
  3033. (jump_to_menu, "mnu_zendar"),
  3034. (else_try),
  3035. (eq, "$g_encountered_party", "p_salt_mine"),
  3036. (jump_to_menu, "mnu_salt_mine"),
  3037. (else_try),
  3038. (eq, "$g_encountered_party", "p_four_ways_inn"),
  3039. (jump_to_menu, "mnu_four_ways_inn"),
  3040. (else_try),
  3041. (eq, "$g_encountered_party", "p_test_scene"),
  3042. (jump_to_menu, "mnu_test_scene"),
  3043. (else_try),
  3044. (eq, "$g_encountered_party", "p_battlefields"),
  3045. (jump_to_menu, "mnu_battlefields"),
  3046. (else_try),
  3047. (eq, "$g_encountered_party", "p_training_ground"),
  3048. (jump_to_menu, "mnu_tutorial"),
  3049. (else_try),
  3050. (eq, "$g_encountered_party", "p_camp_bandits"),
  3051. (jump_to_menu, "mnu_camp"),
  3052. (else_try),
  3053. (jump_to_menu, "mnu_simple_encounter"),
  3054. (try_end),
  3055. (else_try), #Battle or siege
  3056. (try_begin),
  3057. (this_or_next|party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
  3058. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_castle),
  3059. (try_begin),
  3060. (eq, "$auto_enter_town", "$g_encountered_party"),
  3061. (jump_to_menu, "mnu_town"),
  3062. (else_try),
  3063. (eq, "$auto_besiege_town", "$g_encountered_party"),
  3064. (jump_to_menu, "mnu_besiegers_camp_with_allies"),
  3065. (else_try),
  3066. (jump_to_menu, "mnu_join_siege_outside"),
  3067. (try_end),
  3068. (else_try),
  3069. (jump_to_menu, "mnu_pre_join"),
  3070. (try_end),
  3071. (try_end),
  3072. (assign,"$auto_enter_town",0),
  3073. (assign,"$auto_besiege_town",0),
  3074. ]),
  3075.  
  3076. #script_game_event_simulate_battle:
  3077. # This script is called whenever the game simulates the battle between two parties on the map.
  3078. # INPUT:
  3079. # param1: Defender Party
  3080. # param2: Attacker Party
  3081. ("game_event_simulate_battle",
  3082. [
  3083. (store_script_param_1, ":root_defender_party"),
  3084. (store_script_param_2, ":root_attacker_party"),
  3085.  
  3086. (assign, "$marshall_defeated_in_battle", -1),
  3087.  
  3088. (store_current_hours, ":hours"),
  3089.  
  3090. (try_for_parties, ":party"),
  3091. (party_get_battle_opponent, ":opponent", ":party"),
  3092. (gt, ":opponent", 0),
  3093. (party_set_slot, ":party", slot_party_last_in_combat, ":hours"),
  3094. (try_end),
  3095.  
  3096. (assign, ":trigger_result", 1),
  3097. (try_begin),
  3098. (ge, ":root_defender_party", 0),
  3099. (ge, ":root_attacker_party", 0),
  3100. (party_is_active, ":root_defender_party"),
  3101. (party_is_active, ":root_attacker_party"),
  3102. (store_faction_of_party, ":defender_faction", ":root_defender_party"),
  3103. (store_faction_of_party, ":attacker_faction", ":root_attacker_party"),
  3104. #(neq, ":defender_faction", "fac_player_faction"),
  3105. #(neq, ":attacker_faction", "fac_player_faction"),
  3106. (store_relation, ":reln", ":defender_faction", ":attacker_faction"),
  3107. (lt, ":reln", 0),
  3108. (assign, ":trigger_result", 0),
  3109.  
  3110. (try_begin),
  3111. (this_or_next|eq, "$g_battle_simulation_cancel_for_party", ":root_defender_party"),
  3112. (eq, "$g_battle_simulation_cancel_for_party", ":root_attacker_party"),
  3113. (assign, "$g_battle_simulation_cancel_for_party", -1),
  3114. (assign, "$auto_enter_town", "$g_battle_simulation_auto_enter_town_after_battle"),
  3115. (assign, ":trigger_result", 1),
  3116. (else_try),
  3117. (try_begin),
  3118. (this_or_next|party_slot_eq, ":root_defender_party", slot_party_retreat_flag, 1),
  3119. (party_slot_eq, ":root_attacker_party", slot_party_retreat_flag, 1),
  3120. (assign, ":trigger_result", 1), #End battle!
  3121. (try_end),
  3122. (party_set_slot, ":root_attacker_party", slot_party_retreat_flag, 0),
  3123.  
  3124. #(assign, ":cancel_attack", 0),
  3125.  
  3126. (party_collect_attachments_to_party, ":root_defender_party", "p_collective_ally"),
  3127. (party_collect_attachments_to_party, ":root_attacker_party", "p_collective_enemy"),
  3128.  
  3129. #(call_script, "script_party_count_fit_for_battle", "p_collective_ally"),
  3130. (call_script, "script_party_calculate_strength", "p_collective_ally", 0),
  3131. (assign, ":defender_strength", reg0),
  3132. #(call_script, "script_party_count_fit_for_battle", "p_collective_enemy"),
  3133. (call_script, "script_party_calculate_strength", "p_collective_enemy", 0),
  3134. (assign, ":attacker_strength", reg0),
  3135.  
  3136. (store_div, ":defender_strength", ":defender_strength", 20),
  3137. (val_min, ":defender_strength", 50),
  3138. (val_max, ":defender_strength", 1),
  3139. (store_div, ":attacker_strength", ":attacker_strength", 20),
  3140. (val_min, ":attacker_strength", 50),
  3141. (val_add, ":attacker_strength", 1),
  3142. (try_begin),
  3143. #For sieges increase attacker casualties and reduce defender casualties.
  3144. (this_or_next|party_slot_eq, ":root_defender_party", slot_party_type, spt_castle),
  3145. (party_slot_eq, ":root_defender_party", slot_party_type, spt_town),
  3146. (val_mul, ":defender_strength", 123), #it was 1.5 in old version, now it is only 1.23
  3147. (val_div, ":defender_strength", 100),
  3148.  
  3149. (val_mul, ":attacker_strength", 100), #it was 0.5 in old version, now it is only 1 / 1.23
  3150. (val_div, ":attacker_strength", 123),
  3151. (try_end),
  3152.  
  3153. (call_script, "script_party_count_fit_for_battle", "p_collective_ally", 0),
  3154. (assign, ":old_defender_strength", reg0),
  3155.  
  3156. (try_begin),
  3157. (neg|is_currently_night), #Don't fight at night
  3158. (inflict_casualties_to_party_group, ":root_attacker_party", ":defender_strength", "p_temp_casualties"),
  3159. (party_collect_attachments_to_party, ":root_attacker_party", "p_collective_enemy"),
  3160. (try_end),
  3161. (call_script, "script_party_count_fit_for_battle", "p_collective_enemy", 0),
  3162. (assign, ":new_attacker_strength", reg0),
  3163.  
  3164. (try_begin),
  3165. (gt, ":new_attacker_strength", 0),
  3166. (neg|is_currently_night), #Don't fight at night
  3167. (inflict_casualties_to_party_group, ":root_defender_party", ":attacker_strength", "p_temp_casualties"),
  3168. (party_collect_attachments_to_party, ":root_defender_party", "p_collective_ally"),
  3169. (try_end),
  3170. (call_script, "script_party_count_fit_for_battle", "p_collective_ally", 0),
  3171. (assign, ":new_defender_strength", reg0),
  3172.  
  3173. (try_begin),
  3174. (this_or_next|eq, ":new_attacker_strength", 0),
  3175. (eq, ":new_defender_strength", 0),
  3176. # Battle concluded! determine winner
  3177.  
  3178. (assign, ":do_not_end_battle", 0),
  3179. (try_begin),
  3180. (neg|troop_is_wounded, "trp_player"),
  3181. (eq, ":new_defender_strength", 0),
  3182. (eq, "$auto_enter_town", "$g_encountered_party"),
  3183. (eq, ":old_defender_strength", ":new_defender_strength"),
  3184. (assign, ":do_not_end_battle", 1),
  3185. (try_end),
  3186. (eq, ":do_not_end_battle", 0),
  3187.  
  3188. (try_begin),
  3189. (eq, ":new_attacker_strength", 0),
  3190. (eq, ":new_defender_strength", 0),
  3191. (assign, ":root_winner_party", -1),
  3192. (assign, ":root_defeated_party", -1),
  3193. (assign, ":collective_casualties", -1),
  3194. (else_try),
  3195. (eq, ":new_attacker_strength", 0),
  3196. (assign, ":root_winner_party", ":root_defender_party"),
  3197. (assign, ":root_defeated_party", ":root_attacker_party"),
  3198. (assign, ":collective_casualties", "p_collective_enemy"),
  3199. (else_try),
  3200. (assign, ":root_winner_party", ":root_attacker_party"),
  3201. (assign, ":root_defeated_party", ":root_defender_party"),
  3202. (assign, ":collective_casualties", "p_collective_ally"),
  3203. (try_end),
  3204.  
  3205. (try_begin),
  3206. (ge, ":root_winner_party", 0),
  3207. (call_script, "script_get_nonempty_party_in_group", ":root_winner_party"),
  3208. (assign, ":nonempty_winner_party", reg0),
  3209. (store_faction_of_party, ":faction_receiving_prisoners", ":nonempty_winner_party"),
  3210. (store_faction_of_party, ":defeated_faction", ":root_defeated_party"),
  3211. (else_try),
  3212. (assign, ":nonempty_winner_party", -1),
  3213. (try_end),
  3214.  
  3215. (try_begin),
  3216. (ge, ":collective_casualties", 0),
  3217. (party_get_num_companion_stacks, ":num_stacks", ":collective_casualties"),
  3218. (else_try),
  3219. (assign, ":num_stacks", 0),
  3220. (try_end),
  3221.  
  3222. (try_for_range, ":troop_iterator", 0, ":num_stacks"),
  3223. (party_stack_get_troop_id, ":cur_troop_id", ":collective_casualties", ":troop_iterator"),
  3224. (troop_is_hero, ":cur_troop_id"),
  3225.  
  3226. (try_begin),
  3227. #abort quest if troop loses a battle during rest time
  3228. (check_quest_active, "qst_lend_surgeon"),
  3229. (quest_slot_eq, "qst_lend_surgeon", slot_quest_giver_troop, ":cur_troop_id"),
  3230. (call_script, "script_abort_quest", "qst_lend_surgeon", 0),
  3231. (try_end),
  3232.  
  3233. (call_script, "script_remove_troop_from_prison", ":cur_troop_id"),
  3234.  
  3235. (troop_set_slot, ":cur_troop_id", slot_troop_leaded_party, -1),
  3236.  
  3237. (store_random_in_range, ":rand", 0, 100),
  3238. (str_store_troop_name_link, s1, ":cur_troop_id"),
  3239. (str_store_faction_name_link, s2, ":faction_receiving_prisoners"),
  3240. (store_troop_faction, ":defeated_troop_faction", ":cur_troop_id"),
  3241. (str_store_faction_name_link, s3, ":defeated_troop_faction"),
  3242. (try_begin),
  3243. (ge, ":rand", hero_escape_after_defeat_chance),
  3244. (party_stack_get_troop_id, ":leader_troop_id", ":nonempty_winner_party", 0),
  3245. (is_between, ":leader_troop_id", active_npcs_begin, active_npcs_end), #disable non-kingdom parties capturing enemy lords
  3246. (party_add_prisoners, ":nonempty_winner_party", ":cur_troop_id", 1),
  3247. (gt, reg0, 0),
  3248. #(troop_set_slot, ":cur_troop_id", slot_troop_is_prisoner, 1),
  3249. (troop_set_slot, ":cur_troop_id", slot_troop_prisoner_of_party, ":nonempty_winner_party"),
  3250. (display_log_message, "str_hero_taken_prisoner"),
  3251.  
  3252. (try_begin),
  3253. (call_script, "script_cf_prisoner_offered_parole", ":cur_troop_id"),
  3254.  
  3255. (try_begin),
  3256. (eq, "$cheat_mode", 1),
  3257. (display_message, "@{!}DEBUG : Prisoner granted parole"),
  3258. (try_end),
  3259.  
  3260. (call_script, "script_troop_change_relation_with_troop", ":leader_troop_id", ":cur_troop_id", 3),
  3261. (val_add, "$total_battle_enemy_changes", 3),
  3262. (else_try),
  3263. (try_begin),
  3264. (eq, "$cheat_mode", 1),
  3265. (display_message, "@{!}DEBUG : Prisoner not offered parole"),
  3266. (try_end),
  3267.  
  3268. (call_script, "script_troop_change_relation_with_troop", ":leader_troop_id", ":cur_troop_id", -5),
  3269. (val_add, "$total_battle_enemy_changes", -5),
  3270. (try_end),
  3271.  
  3272. (store_faction_of_party, ":capturer_faction", ":nonempty_winner_party"),
  3273. (call_script, "script_update_troop_location_notes_prisoned", ":cur_troop_id", ":capturer_faction"),
  3274. (else_try),
  3275. (display_message,"@{s1} of {s3} was defeated in battle but managed to escape."),
  3276. (try_end),
  3277.  
  3278. (try_begin),
  3279. (store_troop_faction, ":cur_troop_faction", ":cur_troop_id"),
  3280. (is_between, ":cur_troop_faction", kingdoms_begin, kingdoms_end),
  3281. (faction_slot_eq, ":cur_troop_faction", slot_faction_marshall, ":cur_troop_id"),
  3282. (is_between, ":cur_troop_faction", kingdoms_begin, kingdoms_end),
  3283. (assign, "$marshall_defeated_in_battle", ":cur_troop_id"),
  3284. #Marshall is defeated, refresh ai.
  3285. (assign, "$g_recalculate_ais", 1),
  3286. (try_end),
  3287. (try_end),
  3288.  
  3289. (try_begin),
  3290. (ge, ":collective_casualties", 0),
  3291. (party_get_num_prisoner_stacks, ":num_stacks", ":collective_casualties"),
  3292. (else_try),
  3293. (assign, ":num_stacks", 0),
  3294. (try_end),
  3295. (try_for_range, ":troop_iterator", 0, ":num_stacks"),
  3296. (party_prisoner_stack_get_troop_id, ":cur_troop_id", ":collective_casualties", ":troop_iterator"),
  3297. (troop_is_hero, ":cur_troop_id"),
  3298. (call_script, "script_remove_troop_from_prison", ":cur_troop_id"),
  3299. (store_troop_faction, ":cur_troop_faction", ":cur_troop_id"),
  3300. (str_store_troop_name_link, s1, ":cur_troop_id"),
  3301. (str_store_faction_name_link, s2, ":faction_receiving_prisoners"),
  3302. (str_store_faction_name_link, s3, ":cur_troop_faction"),
  3303. (display_log_message,"str_hero_freed"),
  3304. (try_end),
  3305.  
  3306. (try_begin),
  3307. (ge, ":collective_casualties", 0),
  3308. (party_clear, "p_temp_party"),
  3309. (assign, "$g_move_heroes", 0), #heroes are already processed above. Skip them here.
  3310. (call_script, "script_party_add_party_prisoners", "p_temp_party", ":collective_casualties"),
  3311. (call_script, "script_party_prisoners_add_party_companions", "p_temp_party", ":collective_casualties"),
  3312. (distribute_party_among_party_group, "p_temp_party", ":root_winner_party"),
  3313.  
  3314. (call_script, "script_battle_political_consequences", ":root_defeated_party", ":root_winner_party"),
  3315.  
  3316. (call_script, "script_clear_party_group", ":root_defeated_party"),
  3317. (try_end),
  3318. (assign, ":trigger_result", 1), #End battle!
  3319.  
  3320. #Center captured
  3321. (try_begin),
  3322. (ge, ":collective_casualties", 0),
  3323. (party_get_slot, ":cur_party_type", ":root_defeated_party", slot_party_type),
  3324. (this_or_next|eq, ":cur_party_type", spt_town),
  3325. (eq, ":cur_party_type", spt_castle),
  3326.  
  3327. (assign, "$g_recalculate_ais", 1),
  3328.  
  3329. (store_faction_of_party, ":winner_faction", ":root_winner_party"),
  3330. (store_faction_of_party, ":defeated_faction", ":root_defeated_party"),
  3331.  
  3332. (str_store_party_name, s1, ":root_defeated_party"),
  3333. (str_store_faction_name, s2, ":winner_faction"),
  3334. (str_store_faction_name, s3, ":defeated_faction"),
  3335. (display_log_message, "str_center_captured"),
  3336.  
  3337. (store_current_hours, ":hours"),
  3338. (faction_set_slot, ":winner_faction", slot_faction_ai_last_decisive_event, ":hours"),
  3339.  
  3340. (try_begin),
  3341. (eq, "$g_encountered_party", ":root_defeated_party"),
  3342. (call_script, "script_add_log_entry", logent_player_participated_in_siege, "trp_player", "$g_encountered_party", 0, "$g_encountered_party_faction"),
  3343. (try_end),
  3344.  
  3345. (try_begin),
  3346. (party_get_num_companion_stacks, ":num_stacks", ":root_winner_party"),
  3347. (gt, ":num_stacks", 0),
  3348. (party_stack_get_troop_id, ":leader_troop_no", ":root_winner_party", 0),
  3349. (is_between, ":leader_troop_no", active_npcs_begin, active_npcs_end),
  3350. (party_set_slot, ":root_defeated_party", slot_center_last_taken_by_troop, ":leader_troop_no"),
  3351. (else_try),
  3352. (party_set_slot, ":root_defeated_party", slot_center_last_taken_by_troop, -1),
  3353. (try_end),
  3354.  
  3355. (call_script, "script_lift_siege", ":root_defeated_party", 0),
  3356. (store_faction_of_party, ":fortress_faction", ":root_defeated_party"),
  3357. (try_begin),
  3358. (is_between, ":root_defeated_party", towns_begin, towns_end),
  3359. (assign, ":damage", 40),
  3360. (else_try),
  3361. (assign, ":damage", 20),
  3362. (try_end),
  3363. (call_script, "script_faction_inflict_war_damage_on_faction", ":winner_faction", ":fortress_faction", ":damage"),
  3364.  
  3365. (call_script, "script_give_center_to_faction", ":root_defeated_party", ":winner_faction"),
  3366. (try_begin),
  3367. (eq, ":defeated_faction", "fac_player_supporters_faction"),
  3368. (call_script, "script_add_notification_menu", "mnu_notification_center_lost", ":root_defeated_party", ":winner_faction"),
  3369. (try_end),
  3370.  
  3371. (party_get_num_attached_parties, ":num_attached_parties", ":root_attacker_party"),
  3372. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  3373. (party_get_attached_party_with_rank, ":attached_party", ":root_attacker_party", ":attached_party_rank"),
  3374.  
  3375. (party_get_num_companion_stacks, ":num_stacks", ":attached_party"),
  3376. (assign, ":total_size", 0),
  3377. (try_for_range, ":i_stack", 0, ":num_stacks"),
  3378. (party_stack_get_size, ":stack_size", ":attached_party", ":i_stack"),
  3379. (val_add, ":total_size", ":stack_size"),
  3380. (try_end),
  3381.  
  3382. (try_begin),
  3383. (ge, ":total_size", 10),
  3384.  
  3385. (assign, ":stacks_added", 0),
  3386. (assign, ":last_random_stack", -1),
  3387.  
  3388. (assign, ":end_condition", 10),
  3389. (try_for_range, ":unused", 0, ":end_condition"),
  3390. (store_random_in_range, ":random_stack", 1, ":num_stacks"),
  3391. (party_stack_get_troop_id, ":random_stack_troop", ":attached_party", ":random_stack"),
  3392. (party_stack_get_size, ":stack_size", ":attached_party", ":random_stack"),
  3393. (ge, ":stack_size", 4),
  3394. (neq, ":random_stack", ":last_random_stack"),
  3395.  
  3396. (store_mul, ":total_size_mul_2", ":total_size", 2),
  3397. (assign, ":percentage", ":total_size_mul_2"),
  3398. (val_min, ":percentage", 100),
  3399.  
  3400. (val_mul, ":stack_size", ":percentage"),
  3401. (val_div, ":stack_size", 100),
  3402.  
  3403. (party_stack_get_troop_id, ":party_leader", ":attached_party", 0),
  3404.  
  3405. (try_begin),
  3406. (this_or_next|troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_goodnatured),
  3407. (this_or_next|troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_upstanding),
  3408. (troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_martial),
  3409. (assign, reg2, 0),
  3410. (store_random_in_range, ":random_percentage", 40, 50), #average 45%
  3411. (else_try),
  3412. (this_or_next|troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_quarrelsome),
  3413. (troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_cunning),
  3414. (assign, reg2, 1),
  3415. (store_random_in_range, ":random_percentage", 30, 40), #average 35%
  3416. (else_try),
  3417. (this_or_next|troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_selfrighteous),
  3418. (this_or_next|troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_roguish),
  3419. (troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_debauched),
  3420. (assign, reg2, 2),
  3421. (store_random_in_range, ":random_percentage", 20, 30), #average 25%
  3422. (else_try),
  3423. (this_or_next|troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_benefactor),
  3424. (troop_slot_eq, ":party_leader", slot_lord_reputation_type, lrep_custodian),
  3425. (assign, reg2, 3),
  3426. (store_random_in_range, ":random_percentage", 50, 60), #average 55%
  3427. (try_end),
  3428.  
  3429. (val_min, ":random_percentage", 100),
  3430. (val_mul, ":stack_size", ":random_percentage"),
  3431. (val_div, ":stack_size", 100),
  3432.  
  3433. (party_add_members, ":root_defender_party", ":random_stack_troop", ":stack_size"),
  3434. (party_remove_members, ":attached_party", ":random_stack_troop", ":stack_size"),
  3435.  
  3436. (val_add, ":stacks_added", 1),
  3437. (assign, ":last_random_stack", ":random_stack"),
  3438.  
  3439. (try_begin),
  3440. #if troops from three different stack is already added then break
  3441. (eq, ":stacks_added", 3),
  3442. (assign, ":end_condition", 0),
  3443. (try_end),
  3444. (try_end),
  3445. (try_end),
  3446. (try_end),
  3447.  
  3448. #Reduce prosperity of the center by 5
  3449. (try_begin),
  3450. (neg|is_between, ":root_defeated_party", castles_begin, castles_end),
  3451. (call_script, "script_change_center_prosperity", ":root_defeated_party", -5),
  3452. (val_add, "$newglob_total_prosperity_from_townloot", -5),
  3453. (try_end),
  3454. (call_script, "script_order_best_besieger_party_to_guard_center", ":root_defeated_party", ":winner_faction"),
  3455. (call_script, "script_cf_reinforce_party", ":root_defeated_party"),
  3456. (call_script, "script_cf_reinforce_party", ":root_defeated_party"),
  3457. (try_end),
  3458. (try_end),
  3459.  
  3460. #ADD XP
  3461. (try_begin),
  3462. (party_slot_eq, ":root_attacker_party", slot_party_type, spt_kingdom_hero_party),
  3463.  
  3464. (assign, ":xp_gained_attacker", 200),
  3465. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  3466. (store_faction_of_party, ":root_attacker_party_faction", ":root_attacker_party"),
  3467. (try_begin),
  3468. (this_or_next|eq, ":root_attacker_party", "p_main_party"),
  3469. (this_or_next|eq, ":root_attacker_party_faction", "fac_player_supporters_faction"),
  3470. (eq, ":root_attacker_party_faction", "$players_kingdom"),
  3471. #same
  3472. (else_try),
  3473. (eq, ":reduce_campaign_ai", 0), #hard (1.5x)
  3474. (val_mul, ":xp_gained_attacker", 3),
  3475. (val_div, ":xp_gained_attacker", 2),
  3476. (else_try),
  3477. (eq, ":reduce_campaign_ai", 1), #moderate (1.0x)
  3478. #same
  3479. (else_try),
  3480. (eq, ":reduce_campaign_ai", 2), #easy (0.5x)
  3481. (val_div, ":xp_gained_attacker", 2),
  3482. (try_end),
  3483.  
  3484. (gt, ":new_attacker_strength", 0),
  3485. (call_script, "script_upgrade_hero_party", ":root_attacker_party", ":xp_gained_attacker"),
  3486. (try_end),
  3487. (try_begin),
  3488. (party_slot_eq, ":root_defender_party", slot_party_type, spt_kingdom_hero_party),
  3489.  
  3490. (assign, ":xp_gained_defender", 200),
  3491. (store_faction_of_party, ":root_defender_party_faction", ":root_defender_party"),
  3492. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  3493. (try_begin),
  3494. (this_or_next|eq, ":root_defender_party", "p_main_party"),
  3495. (this_or_next|eq, ":root_defender_party_faction", "fac_player_supporters_faction"),
  3496. (eq, ":root_defender_party_faction", "$players_kingdom"),
  3497. #same
  3498. (else_try),
  3499. (eq, ":reduce_campaign_ai", 0), #hard (1.5x)
  3500. (val_mul, ":xp_gained_defender", 3),
  3501. (val_div, ":xp_gained_defender", 2),
  3502. (else_try),
  3503. (eq, ":reduce_campaign_ai", 1), #moderate (1.0x)
  3504. #same
  3505. (else_try),
  3506. (eq, ":reduce_campaign_ai", 2), #easy (0.5x)
  3507. (val_div, ":xp_gained_defender", 2),
  3508. (try_end),
  3509.  
  3510. (gt, ":new_defender_strength", 0),
  3511. (call_script, "script_upgrade_hero_party", ":root_defender_party", ":xp_gained_defender"),
  3512. (try_end),
  3513.  
  3514. (try_begin),
  3515. #ozan - do not randomly end battles aganist towns or castles.
  3516. (neg|party_slot_eq, ":root_defender_party", slot_party_type, spt_castle), #added by ozan
  3517. (neg|party_slot_eq, ":root_defender_party", slot_party_type, spt_town), #added by ozan
  3518. #end ozan
  3519.  
  3520. (party_get_slot, ":attacker_root_strength", ":root_attacker_party", slot_party_cached_strength),
  3521. (party_get_slot, ":attacker_nearby_friend_strength", ":root_attacker_party", slot_party_nearby_friend_strength),
  3522. (party_get_slot, ":strength_of_attacker_followers", ":root_attacker_party", slot_party_follower_strength),
  3523. (store_add, ":total_attacker_strength", ":attacker_root_strength", ":attacker_nearby_friend_strength"),
  3524. (val_add, ":total_attacker_strength", ":strength_of_attacker_followers"),
  3525.  
  3526. (party_get_slot, ":defender_root_strength", ":root_defender_party", slot_party_cached_strength),
  3527. (party_get_slot, ":defender_nearby_friend_strength", ":root_defender_party", slot_party_nearby_friend_strength),
  3528. (party_get_slot, ":strength_of_defender_followers", ":root_defender_party", slot_party_follower_strength),
  3529. (store_add, ":total_defender_strength", ":defender_root_strength", ":defender_nearby_friend_strength"),
  3530. (val_add, ":total_attacker_strength", ":strength_of_defender_followers"),
  3531.  
  3532. #Players can make save loads and change history because these random values are not determined from random_slots of troops
  3533. (store_random_in_range, ":random_num", 0, 100),
  3534.  
  3535. (try_begin),
  3536. (lt, ":random_num", 10),
  3537. (assign, ":trigger_result", 1), #End battle!
  3538. (try_end),
  3539. (else_try),
  3540. (party_get_slot, ":attacker_root_strength", ":root_attacker_party", slot_party_cached_strength),
  3541. (party_get_slot, ":attacker_nearby_friend_strength", ":root_attacker_party", slot_party_nearby_friend_strength),
  3542. (party_get_slot, ":strength_of_followers", ":root_attacker_party", slot_party_follower_strength),
  3543. (store_add, ":total_attacker_strength", ":attacker_root_strength", ":attacker_nearby_friend_strength"),
  3544. (val_add, ":total_attacker_strength", ":strength_of_followers"),
  3545.  
  3546. (party_get_slot, ":defender_root_strength", ":root_defender_party", slot_party_cached_strength),
  3547. (party_get_slot, ":defender_nearby_friend_strength", ":root_defender_party", slot_party_nearby_friend_strength),
  3548. (store_add, ":total_defender_strength", ":defender_root_strength", ":defender_nearby_friend_strength"),
  3549.  
  3550. (val_mul, ":total_defender_strength", 13), #multiply defender strength with 1.3
  3551. (val_div, ":total_defender_strength", 10),
  3552.  
  3553. (gt, ":total_defender_strength", ":total_attacker_strength"),
  3554. (gt, ":total_defender_strength", 3),
  3555.  
  3556. #Players can make save loads and change history because these random values are not determined from random_slots of troops
  3557. (store_random_in_range, ":random_num", 0, 100),
  3558.  
  3559. (try_begin),
  3560. (lt, ":random_num", 15), #15% is a bit higher than 10% (which is open area escape probability)
  3561. (assign, ":trigger_result", 1), #End battle!
  3562.  
  3563. (assign, "$g_recalculate_ais", 1), #added new
  3564.  
  3565. (try_begin),
  3566. (eq, "$cheat_mode", 1),
  3567. (display_message, "@{!}DEBUG : Siege attackers are running away"),
  3568. (try_end),
  3569. (try_end),
  3570. (try_end),
  3571. (try_end),
  3572. (try_end),
  3573. (set_trigger_result, ":trigger_result"),
  3574. ]),
  3575.  
  3576. #script_game_event_battle_end:
  3577. # This script is called whenever the game ends the battle between two parties on the map.
  3578. # INPUT:
  3579. # param1: Defender Party
  3580. # param2: Attacker Party
  3581. ("game_event_battle_end",
  3582. [
  3583. ## (store_script_param_1, ":root_defender_party"),
  3584. ## (store_script_param_2, ":root_attacker_party"),
  3585.  
  3586. #Fixing deleted heroes
  3587. (try_for_range, ":cur_troop", active_npcs_begin, active_npcs_end),
  3588. (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  3589. (troop_get_slot, ":cur_party", ":cur_troop", slot_troop_leaded_party),
  3590. (troop_get_slot, ":cur_prisoner_of_party", ":cur_troop", slot_troop_prisoner_of_party),
  3591. (try_begin),
  3592. (ge, ":cur_party", 0),
  3593. (assign, ":continue", 0),
  3594. (try_begin),
  3595. (neg|party_is_active, ":cur_party"),
  3596. (assign, ":continue", 1),
  3597. (else_try),
  3598. (party_count_companions_of_type, ":amount", ":cur_party", ":cur_troop"),
  3599. (le, ":amount", 0),
  3600. (assign, ":continue", 1),
  3601. (try_end),
  3602. (eq, ":continue", 1),
  3603. (try_begin),
  3604. (eq, "$cheat_mode", 1),
  3605. (str_store_troop_name, s1, ":cur_troop"),
  3606. (display_message, "@{!}DEBUG: {s1} no longer leads a party."),
  3607. (try_end),
  3608.  
  3609. (troop_set_slot, ":cur_troop", slot_troop_leaded_party, -1),
  3610. #(str_store_troop_name, s5, ":cur_troop"),
  3611. #(display_message, "@{!}DEBUG : {s5}'s troop_leaded_party set to -1"),
  3612. (try_end),
  3613. (try_begin),
  3614. (ge, ":cur_prisoner_of_party", 0),
  3615. (assign, ":continue", 0),
  3616. (try_begin),
  3617. (neg|party_is_active, ":cur_prisoner_of_party"),
  3618. (assign, ":continue", 1),
  3619. (else_try),
  3620. (party_count_prisoners_of_type, ":amount", ":cur_prisoner_of_party", ":cur_troop"),
  3621. (le, ":amount", 0),
  3622. (assign, ":continue", 1),
  3623. (try_end),
  3624. (eq, ":continue", 1),
  3625. (try_begin),
  3626. (eq, "$cheat_mode", 1),
  3627. (str_store_troop_name, s1, ":cur_troop"),
  3628. (display_message, "@{!}DEBUG: {s1} is no longer a prisoner."),
  3629. (try_end),
  3630. (call_script, "script_remove_troop_from_prison", ":cur_troop"),
  3631. #searching player
  3632. (try_begin),
  3633. (party_count_prisoners_of_type, ":amount", "p_main_party", ":cur_troop"),
  3634. (gt, ":amount", 0),
  3635. (troop_set_slot, ":cur_troop", slot_troop_prisoner_of_party, "p_main_party"),
  3636. (assign, ":continue", 0),
  3637. (try_begin),
  3638. (eq, "$cheat_mode", 1),
  3639. (str_store_troop_name, s1, ":cur_troop"),
  3640. (display_message, "@{!}DEBUG: {s1} is now a prisoner of player."),
  3641. (try_end),
  3642. (try_end),
  3643. (eq, ":continue", 1),
  3644. #searching kingdom heroes
  3645. (try_for_range, ":cur_troop_2", active_npcs_begin, active_npcs_end),
  3646. (troop_slot_eq, ":cur_troop_2", slot_troop_occupation, slto_kingdom_hero),
  3647. (eq, ":continue", 1),
  3648. (troop_get_slot, ":cur_prisoner_of_party_2", ":cur_troop_2", slot_troop_leaded_party),
  3649. (party_is_active, ":cur_prisoner_of_party_2"),
  3650. (party_count_prisoners_of_type, ":amount", ":cur_prisoner_of_party_2", ":cur_troop"),
  3651. (gt, ":amount", 0),
  3652. (troop_set_slot, ":cur_troop", slot_troop_prisoner_of_party, ":cur_prisoner_of_party_2"),
  3653. (assign, ":continue", 0),
  3654. (try_begin),
  3655. (eq, "$cheat_mode", 1),
  3656. (str_store_troop_name, s1, ":cur_troop"),
  3657. (str_store_party_name, s2, ":cur_prisoner_of_party_2"),
  3658. (display_message, "@{!}DEBUG: {s1} is now a prisoner of {s2}."),
  3659. (try_end),
  3660. (try_end),
  3661. #searching walled centers
  3662. (try_for_range, ":cur_prisoner_of_party_2", walled_centers_begin, walled_centers_end),
  3663. (eq, ":continue", 1),
  3664. (party_count_prisoners_of_type, ":amount", ":cur_prisoner_of_party_2", ":cur_troop"),
  3665. (gt, ":amount", 0),
  3666. (troop_set_slot, ":cur_troop", slot_troop_prisoner_of_party, ":cur_prisoner_of_party_2"),
  3667. (assign, ":continue", 0),
  3668. (try_begin),
  3669. (eq, "$cheat_mode", 1),
  3670. (str_store_troop_name, s1, ":cur_troop"),
  3671. (str_store_party_name, s2, ":cur_prisoner_of_party_2"),
  3672. (display_message, "@{!}DEBUG: {s1} is now a prisoner of {s2}."),
  3673. (try_end),
  3674. (try_end),
  3675. (try_end),
  3676. (try_end),
  3677. ]),
  3678.  
  3679. #script_order_best_besieger_party_to_guard_center:
  3680. # INPUT:
  3681. # param1: defeated_center, param2: winner_faction
  3682. # OUTPUT:
  3683. # none
  3684. ("order_best_besieger_party_to_guard_center",
  3685. [
  3686. (store_script_param, ":defeated_center", 1),
  3687. (store_script_param, ":winner_faction", 2),
  3688. (assign, ":best_party", -1),
  3689. (assign, ":best_party_strength", 0),
  3690. (try_for_range, ":kingdom_hero", active_npcs_begin, active_npcs_end),
  3691. (troop_get_slot, ":kingdom_hero_party", ":kingdom_hero", slot_troop_leaded_party),
  3692. (gt, ":kingdom_hero_party", 0),
  3693. (party_is_active, ":kingdom_hero_party"),
  3694. (store_faction_of_party, ":kingdom_hero_party_faction", ":kingdom_hero_party"),
  3695. (eq, ":winner_faction", ":kingdom_hero_party_faction"),
  3696. (store_distance_to_party_from_party, ":dist", ":kingdom_hero_party", ":defeated_center"),
  3697. (lt, ":dist", 5),
  3698. #If marshall has captured the castle, then do not leave him behind.
  3699. (neg|faction_slot_eq, ":winner_faction", slot_faction_marshall, ":kingdom_hero"),
  3700. (assign, ":has_besiege_ai", 0),
  3701. (try_begin),
  3702. (party_slot_eq, ":kingdom_hero_party", slot_party_ai_state, spai_besieging_center),
  3703. (party_slot_eq, ":kingdom_hero_party", slot_party_ai_object, ":defeated_center"),
  3704. (assign, ":has_besiege_ai", 1),
  3705. (else_try),
  3706. (party_slot_eq, ":kingdom_hero_party", slot_party_ai_state, spai_accompanying_army),
  3707. (party_get_slot, ":kingdom_hero_party_commander_party", ":kingdom_hero_party", slot_party_ai_object),
  3708. (party_slot_eq, ":kingdom_hero_party_commander_party", slot_party_ai_state, spai_besieging_center),
  3709. (party_slot_eq, ":kingdom_hero_party_commander_party", slot_party_ai_object, ":defeated_center"),
  3710. (assign, ":has_besiege_ai", 1),
  3711. (try_end),
  3712. (eq, ":has_besiege_ai", 1),
  3713. (party_get_slot, ":kingdom_hero_party_strength", ":kingdom_hero_party", slot_party_cached_strength),#recently calculated
  3714. (gt, ":kingdom_hero_party_strength", ":best_party_strength"),
  3715. (assign, ":best_party_strength", ":kingdom_hero_party_strength"),
  3716. (assign, ":best_party", ":kingdom_hero_party"),
  3717. (try_end),
  3718. (try_begin),
  3719. (gt, ":best_party", 0),
  3720. (call_script, "script_party_set_ai_state", ":best_party", spai_holding_center, ":defeated_center"),
  3721. #(party_set_slot, ":best_party", slot_party_commander_party, -1),
  3722. (party_set_flags, ":best_party", pf_default_behavior, 1),
  3723. (try_end),
  3724. ]),
  3725.  
  3726. #script_game_get_item_buy_price_factor:
  3727. # This script is called from the game engine for calculating the buying price of any item.
  3728. # INPUT:
  3729. # param1: item_kind_id
  3730. # OUTPUT:
  3731. # trigger_result and reg0 = price_factor
  3732. ("game_get_item_buy_price_factor",
  3733. [
  3734. (store_script_param_1, ":item_kind_id"),
  3735. (assign, ":price_factor", 100),
  3736.  
  3737. (call_script, "script_get_trade_penalty", ":item_kind_id"),
  3738. (assign, ":trade_penalty", reg0),
  3739.  
  3740. (try_begin),
  3741. (is_between, "$g_encountered_party", centers_begin, centers_end),
  3742. (is_between, ":item_kind_id", trade_goods_begin, trade_goods_end),
  3743. (store_sub, ":item_slot_no", ":item_kind_id", trade_goods_begin),
  3744. (val_add, ":item_slot_no", slot_town_trade_good_prices_begin),
  3745. (party_get_slot, ":price_factor", "$g_encountered_party", ":item_slot_no"),
  3746.  
  3747. #new
  3748. #(try_begin),
  3749. # (is_between, "$g_encountered_party", villages_begin, villages_end),
  3750. # (party_get_slot, ":market_town", "$g_encountered_party", slot_village_market_town),
  3751. # (party_get_slot, ":price_in_market_town", ":market_town", ":item_slot_no"),
  3752. # (val_max, ":price_factor", ":price_in_market_town"),
  3753. #(try_end),
  3754.  
  3755. #For villages, the good will be sold no cheaper than in the market town
  3756. #This represents the absence of a permanent market -- ie, the peasants retain goods to sell on their journeys to town, and are not about to do giveaway deals with passing adventurers
  3757.  
  3758. (val_mul, ":price_factor", 100), #normalize price factor to range 0..100
  3759. (val_div, ":price_factor", average_price_factor),
  3760. (try_end),
  3761.  
  3762. (store_add, ":penalty_factor", 100, ":trade_penalty"),
  3763.  
  3764. (val_mul, ":price_factor", ":penalty_factor"),
  3765. (val_div, ":price_factor", 100),
  3766.  
  3767. (assign, reg0, ":price_factor"),
  3768. (set_trigger_result, reg0),
  3769. ]),
  3770.  
  3771. #script_game_get_item_sell_price_factor:
  3772. # This script is called from the game engine for calculating the selling price of any item.
  3773. # INPUT:
  3774. # param1: item_kind_id
  3775. # OUTPUT:
  3776. # trigger_result and reg0 = price_factor
  3777. ("game_get_item_sell_price_factor",
  3778. [
  3779. (store_script_param_1, ":item_kind_id"),
  3780. (assign, ":price_factor", 100),
  3781.  
  3782. (call_script, "script_get_trade_penalty", ":item_kind_id"),
  3783. (assign, ":trade_penalty", reg0),
  3784.  
  3785. (try_begin),
  3786. (is_between, "$g_encountered_party", centers_begin, centers_end),
  3787. (is_between, ":item_kind_id", trade_goods_begin, trade_goods_end),
  3788. (store_sub, ":item_slot_no", ":item_kind_id", trade_goods_begin),
  3789. (val_add, ":item_slot_no", slot_town_trade_good_prices_begin),
  3790. (party_get_slot, ":price_factor", "$g_encountered_party", ":item_slot_no"),
  3791. (val_mul, ":price_factor", 100),#normalize price factor to range 0..100
  3792. (val_div, ":price_factor", average_price_factor),
  3793. (else_try),
  3794. #increase trade penalty while selling weapons, armor, and horses
  3795. (val_mul, ":trade_penalty", 4),
  3796. (try_end),
  3797.  
  3798. (store_add, ":penalty_divisor", 100, ":trade_penalty"),
  3799.  
  3800. (val_mul, ":price_factor", 100),
  3801. (val_div, ":price_factor", ":penalty_divisor"),
  3802.  
  3803. (assign, reg0, ":price_factor"),
  3804. (set_trigger_result, reg0),
  3805. ]),
  3806.  
  3807. # script_get_trade_penalty
  3808. #
  3809. # Input:
  3810. # param1: troop_id,
  3811. # Output: reg0
  3812.  
  3813. ("get_trade_penalty",
  3814. [
  3815. (store_script_param_1, ":item_kind_id"),
  3816. (assign, ":penalty",0),
  3817.  
  3818. (party_get_skill_level, ":trade_skill", "p_main_party", skl_trade),
  3819. (try_begin),
  3820. (is_between, ":item_kind_id", trade_goods_begin, trade_goods_end),
  3821. (assign, ":penalty", 12), #reduced slightly 20-15-12
  3822. (store_mul, ":skill_bonus", ":trade_skill", 1),
  3823. (val_sub, ":penalty", ":skill_bonus"),
  3824. (val_max, ":penalty", 3),
  3825. (else_try),
  3826. (assign, ":penalty",100),
  3827. (store_mul, ":skill_bonus", ":trade_skill", 5),
  3828. (val_sub, ":penalty", ":skill_bonus"),
  3829. (try_end),
  3830.  
  3831. (assign, ":penalty_multiplier", 1000),
  3832. ## # Apply penalty if player is hostile to merchants faction
  3833. ## (store_relation, ":merchants_reln", "fac_merchants", "fac_player_supporters_faction"),
  3834. ## (try_begin),
  3835. ## (lt, ":merchants_reln", 0),
  3836. ## (store_sub, ":merchants_reln_dif", 10, ":merchants_reln"),
  3837. ## (store_mul, ":merchants_relation_penalty", ":merchants_reln_dif", 20),
  3838. ## (val_add, ":penalty_multiplier", ":merchants_relation_penalty"),
  3839. ## (try_end),
  3840.  
  3841. # Apply penalty if player is on bad terms with the town
  3842. (try_begin),
  3843. (is_between, "$g_encountered_party", centers_begin, centers_end),
  3844. (party_get_slot, ":center_relation", "$g_encountered_party", slot_center_player_relation),
  3845. (store_mul, ":center_relation_penalty", ":center_relation", -3),
  3846. (val_add, ":penalty_multiplier", ":center_relation_penalty"),
  3847. (try_begin),
  3848. (lt, ":center_relation", 0),
  3849. (store_sub, ":center_penalty_multiplier", 100, ":center_relation"),
  3850. (val_mul, ":penalty_multiplier", ":center_penalty_multiplier"),
  3851. (val_div, ":penalty_multiplier", 100),
  3852. (try_end),
  3853. (try_end),
  3854.  
  3855. # Apply penalty if player is on bad terms with the merchant (not currently used)
  3856. (call_script, "script_troop_get_player_relation", "$g_talk_troop"),
  3857. (assign, ":troop_reln", reg0),
  3858. #(troop_get_slot, ":troop_reln", "$g_talk_troop", slot_troop_player_relation),
  3859. (try_begin),
  3860. (lt, ":troop_reln", 0),
  3861. (store_sub, ":troop_reln_dif", 0, ":troop_reln"),
  3862. (store_mul, ":troop_relation_penalty", ":troop_reln_dif", 20),
  3863. (val_add, ":penalty_multiplier", ":troop_relation_penalty"),
  3864. (try_end),
  3865.  
  3866.  
  3867. (try_begin),
  3868. (is_between, "$g_encountered_party", villages_begin, villages_end),
  3869. (val_mul, ":penalty", 5), #1.25x trade penalty in villages.
  3870. (val_div, ":penalty", 4),
  3871. (try_end),
  3872.  
  3873. #(try_begin),
  3874. #(is_between, "$g_encountered_party", centers_begin, centers_end),
  3875. ##Double trade penalty if no local production or consumption
  3876. #(is_between, ":item_kind_id", trade_goods_begin, trade_goods_end),
  3877. #(call_script, "script_center_get_production", "$g_encountered_party", ":item_kind_id"),
  3878. #(eq, reg0, 0),
  3879. #(call_script, "script_center_get_consumption", "$g_encountered_party", ":item_kind_id"),
  3880. #(eq, reg0, 0),
  3881. #(val_mul, ":penalty", 2),
  3882. #(try_end),
  3883.  
  3884. (val_mul, ":penalty", ":penalty_multiplier"),
  3885. (val_div, ":penalty", 1000),
  3886. (val_max, ":penalty", 1),
  3887. (assign, reg0, ":penalty"),
  3888. ]),
  3889.  
  3890. #script_game_event_buy_item:
  3891. # This script is called from the game engine when player buys an item.
  3892. # INPUT:
  3893. # param1: item_kind_id
  3894. ("game_event_buy_item",
  3895. [
  3896. (store_script_param_1, ":item_kind_id"),
  3897. (store_script_param_2, ":reclaim_mode"),
  3898. (try_begin),
  3899. (is_between, ":item_kind_id", trade_goods_begin, trade_goods_end),
  3900. (store_sub, ":item_slot_no", ":item_kind_id", trade_goods_begin),
  3901. (val_add, ":item_slot_no", slot_town_trade_good_prices_begin),
  3902. (party_get_slot, ":multiplier", "$g_encountered_party", ":item_slot_no"),
  3903. (try_begin),
  3904. (eq, ":reclaim_mode", 0),
  3905. (val_add, ":multiplier", 20),
  3906. (else_try),
  3907. (val_add, ":multiplier", 30),
  3908. (try_end),
  3909.  
  3910. (store_item_value, ":item_value", ":item_kind_id"),
  3911. (try_begin),
  3912. (ge, ":item_value", 100),
  3913. (store_sub, ":item_value_sub_100", ":item_value", 100),
  3914. (store_div, ":item_value_sub_100_div_8", ":item_value_sub_100", 8),
  3915. (val_add, ":multiplier", ":item_value_sub_100_div_8"),
  3916. (try_end),
  3917.  
  3918. (val_min, ":multiplier", maximum_price_factor),
  3919.  
  3920. (party_set_slot, "$g_encountered_party", ":item_slot_no", ":multiplier"),
  3921. (try_end),
  3922. ]),
  3923.  
  3924. #script_game_event_sell_item:
  3925. # This script is called from the game engine when player sells an item.
  3926. # INPUT:
  3927. # param1: item_kind_id
  3928. ("game_event_sell_item",
  3929. [
  3930. (store_script_param_1, ":item_kind_id"),
  3931. (store_script_param_2, ":return_mode"),
  3932. (try_begin),
  3933. (is_between, ":item_kind_id", trade_goods_begin, trade_goods_end),
  3934. (store_sub, ":item_slot_no", ":item_kind_id", trade_goods_begin),
  3935. (val_add, ":item_slot_no", slot_town_trade_good_prices_begin),
  3936. (party_get_slot, ":multiplier", "$g_encountered_party", ":item_slot_no"),
  3937. (try_begin),
  3938. (eq, ":return_mode", 0),
  3939. (val_sub, ":multiplier", 30),
  3940. (else_try),
  3941. (val_sub, ":multiplier", 20),
  3942. (try_end),
  3943.  
  3944. (store_item_value, ":item_value", ":item_kind_id"),
  3945. (try_begin),
  3946. (ge, ":item_value", 100),
  3947. (store_sub, ":item_value_sub_100", ":item_value", 100),
  3948. (store_div, ":item_value_sub_100_div_8", ":item_value_sub_100", 8),
  3949. (val_sub, ":multiplier", ":item_value_sub_100_div_8"),
  3950. (try_end),
  3951.  
  3952. (val_max, ":multiplier", minimum_price_factor),
  3953.  
  3954. (party_set_slot, "$g_encountered_party", ":item_slot_no", ":multiplier"),
  3955. (try_end),
  3956. ]),
  3957.  
  3958. #script_start_wedding_cutscene
  3959. # INPUT: arg1 = groom_troop, arg2 = bride_troop
  3960. # OUTPUT: none
  3961. ("start_wedding_cutscene",
  3962. [
  3963. (store_script_param, "$g_wedding_groom_troop", 1),
  3964. (store_script_param, "$g_wedding_bride_troop", 2),
  3965.  
  3966. (assign, "$g_wedding_bishop_troop", "trp_temporary_minister"),
  3967. (try_begin),
  3968. (is_between, "$players_kingdom", kingdoms_begin, kingdoms_end),
  3969. (neg|faction_slot_eq, "$players_kingdom", slot_faction_leader, "$g_wedding_groom_troop"),
  3970. (neg|faction_slot_eq, "$players_kingdom", slot_faction_leader, "$g_wedding_bride_troop"),
  3971. (faction_get_slot, ":players_king", "$players_kingdom", slot_faction_leader),
  3972. (troop_get_type, ":troop_type", ":players_king"),
  3973. (eq, ":troop_type", 0), #male
  3974. (neq, ":players_king", "$g_wedding_groom_troop"),
  3975. (assign, "$g_wedding_bishop_troop", ":players_king"),
  3976. (else_try),
  3977. (eq, "$players_kingdom", "fac_player_supporters_faction"),
  3978. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "trp_player"),
  3979. (gt, "$g_player_minister", 0),
  3980. (troop_get_type, ":troop_type", "$g_player_minister"),
  3981. (eq, ":troop_type", 0), #male
  3982. (neq, "$g_player_minister", "$g_wedding_groom_troop"),
  3983. (assign, "$g_wedding_bishop_troop", "$g_player_minister"),
  3984. (try_end),
  3985.  
  3986. (assign, "$g_wedding_brides_dad_troop", "trp_temporary_minister"),
  3987. (try_begin),
  3988. (neq, "$g_wedding_bride_troop", "trp_player"),
  3989. (try_begin),
  3990. (troop_get_slot, ":father", "$g_wedding_bride_troop", slot_troop_father),
  3991. (gt, ":father", 0),
  3992. (troop_get_type, ":troop_type", ":father"), #just to make sure
  3993. (eq, ":troop_type", 0), #male
  3994. (neq, ":father", "$g_wedding_groom_troop"), #this might be 0 due to an error
  3995. (neq, ":father", "$g_wedding_bishop_troop"),
  3996. (assign, "$g_wedding_brides_dad_troop", ":father"),
  3997. (else_try),
  3998. (troop_get_slot, ":guardian", "$g_wedding_bride_troop", slot_troop_guardian),
  3999. (gt, ":guardian", 0),
  4000. (troop_get_type, ":troop_type", ":guardian"), #just to make sure
  4001. (eq, ":troop_type", 0), #male
  4002. (neq, ":guardian", "$g_wedding_groom_troop"), #this might be 0 due to an error
  4003. (neq, ":guardian", "$g_wedding_bishop_troop"),
  4004. (assign, "$g_wedding_brides_dad_troop", ":guardian"),
  4005. (try_end),
  4006. (else_try),
  4007. (try_for_range, ":cur_companion", companions_begin, companions_end),
  4008. (this_or_next|troop_slot_eq, ":cur_companion", slot_troop_occupation, slto_player_companion),
  4009. (troop_slot_eq, ":cur_companion", slot_troop_occupation, slto_kingdom_hero),
  4010. (troop_get_type, ":troop_type", ":cur_companion"), #just to make sure
  4011. (eq, ":troop_type", 0), #male
  4012. (neq, ":cur_companion", "$g_wedding_groom_troop"),
  4013. (neq, ":cur_companion", "$g_wedding_bishop_troop"),
  4014. (assign, "$g_wedding_brides_dad_troop", ":cur_companion"),
  4015. (try_end),
  4016. (try_end),
  4017.  
  4018. (modify_visitors_at_site,"scn_wedding"),
  4019. (reset_visitors,0),
  4020. (set_visitor, 0, "$g_wedding_groom_troop"),
  4021. (set_visitor, 1, "$g_wedding_bride_troop"),
  4022. (set_visitor, 2, "$g_wedding_brides_dad_troop"),
  4023. (set_visitor, 3, "$g_wedding_bishop_troop"),
  4024. (assign, ":num_visitors", 4),
  4025. (assign, ":num_male_visitors", 0),
  4026. (try_for_range, ":cur_npc", active_npcs_begin, kingdom_ladies_end),
  4027. (lt, ":num_visitors", 32),
  4028. (neq, ":cur_npc", "$g_wedding_groom_troop"),
  4029. (neq, ":cur_npc", "$g_wedding_bride_troop"),
  4030. (neq, ":cur_npc", "$g_wedding_brides_dad_troop"),
  4031. (neq, ":cur_npc", "$g_wedding_bishop_troop"),
  4032. (store_troop_faction, ":npc_faction", ":cur_npc"),
  4033. (is_between, ":npc_faction", kingdoms_begin, kingdoms_end),
  4034. (eq, ":npc_faction", "$players_kingdom"),
  4035. (this_or_next|troop_slot_eq, ":cur_npc", slot_troop_occupation, slto_player_companion),
  4036. (this_or_next|troop_slot_eq, ":cur_npc", slot_troop_occupation, slto_kingdom_hero),
  4037. (troop_slot_eq, ":cur_npc", slot_troop_occupation, slto_kingdom_lady),
  4038. (troop_get_type, ":troop_type", ":cur_npc"),
  4039. (assign, ":continue_adding", 1),
  4040. (try_begin),
  4041. (eq, ":troop_type", 0),
  4042. (assign, ":continue_adding", 0),
  4043. (lt, ":num_male_visitors", 16), #limit number of male visitors
  4044. (assign, ":continue_adding", 1),
  4045. (val_add, ":num_male_visitors", 1),
  4046. (try_end),
  4047. (eq, ":continue_adding", 1),
  4048. (set_visitor, ":num_visitors", ":cur_npc"),
  4049. (val_add, ":num_visitors", 1),
  4050. (try_end),
  4051. (set_jump_mission,"mt_wedding"),
  4052. (jump_to_scene,"scn_wedding"),
  4053. (change_screen_mission),
  4054. ]),
  4055.  
  4056.  
  4057. # script_game_get_troop_wage
  4058. # This script is called from the game engine for calculating troop wages.
  4059. # Input:
  4060. # param1: troop_id, param2: party-id
  4061. # Output: reg0: weekly wage
  4062.  
  4063. ("game_get_troop_wage",
  4064. [
  4065. (store_script_param_1, ":troop_id"),
  4066. (store_script_param_2, ":unused"), #party id
  4067.  
  4068. (assign,":wage", 0),
  4069. (try_begin),
  4070. (this_or_next|eq, ":troop_id", "trp_player"),
  4071. (eq, ":troop_id", "trp_kidnapped_girl"),
  4072. (else_try),
  4073. (is_between, ":troop_id", pretenders_begin, pretenders_end),
  4074. (else_try),
  4075. (store_character_level, ":troop_level", ":troop_id"),
  4076. (assign, ":wage", ":troop_level"),
  4077. (val_add, ":wage", 3),
  4078. (val_mul, ":wage", ":wage"),
  4079. (val_div, ":wage", 25),
  4080. (try_end),
  4081.  
  4082. (try_begin), #mounted troops cost 65% more than the normal cost
  4083. (neg|is_between, ":troop_id", companions_begin, companions_end),
  4084. (troop_is_mounted, ":troop_id"),
  4085. (val_mul, ":wage", 5),
  4086. (val_div, ":wage", 3),
  4087. (try_end),
  4088.  
  4089. (try_begin), #mercenaries cost %50 more than the normal cost
  4090. (is_between, ":troop_id", mercenary_troops_begin, mercenary_troops_end),
  4091. (val_mul, ":wage", 3),
  4092. (val_div, ":wage", 2),
  4093. (try_end),
  4094.  
  4095. (try_begin),
  4096. (is_between, ":troop_id", companions_begin, companions_end),
  4097. (val_mul, ":wage", 2),
  4098. (try_end),
  4099.  
  4100. (store_skill_level, ":leadership_level", "skl_leadership", "trp_player"),
  4101. (store_mul, ":leadership_bonus", 5, ":leadership_level"),
  4102. (store_sub, ":leadership_factor", 100, ":leadership_bonus"),
  4103. (val_mul, ":wage", ":leadership_factor"), #wage = wage * (100 - 5*leadership)/100
  4104. (val_div, ":wage", 100),
  4105.  
  4106. (try_begin),
  4107. (neq, ":troop_id", "trp_player"),
  4108. (neq, ":troop_id", "trp_kidnapped_girl"),
  4109. (neg|is_between, ":troop_id", pretenders_begin, pretenders_end),
  4110. (val_max, ":wage", 1),
  4111. (try_end),
  4112.  
  4113. (assign, reg0, ":wage"),
  4114. (set_trigger_result, reg0),
  4115. ]),
  4116.  
  4117. # script_game_get_total_wage
  4118. # This script is called from the game engine for calculating total wage of the player party which is shown at the party window.
  4119. # Input: none
  4120. # Output: reg0: weekly wage
  4121.  
  4122. ("game_get_total_wage",
  4123. [
  4124. (assign, ":total_wage", 0),
  4125. (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),
  4126. (try_for_range, ":i_stack", 0, ":num_stacks"),
  4127. (party_stack_get_troop_id, ":stack_troop", "p_main_party", ":i_stack"),
  4128. (party_stack_get_size, ":stack_size", "p_main_party", ":i_stack"),
  4129. (call_script, "script_game_get_troop_wage", ":stack_troop", 0),
  4130. (val_mul, reg0, ":stack_size"),
  4131. (val_add, ":total_wage", reg0),
  4132. (try_end),
  4133. (assign, reg0, ":total_wage"),
  4134. (set_trigger_result, reg0),
  4135. ]),
  4136.  
  4137. # script_game_get_join_cost
  4138. # This script is called from the game engine for calculating troop join cost.
  4139. # Input:
  4140. # param1: troop_id,
  4141. # Output: reg0: weekly wage
  4142.  
  4143. ("game_get_join_cost",
  4144. [
  4145. (store_script_param_1, ":troop_id"),
  4146.  
  4147. (assign,":join_cost", 0),
  4148. (try_begin),
  4149. (troop_is_hero, ":troop_id"),
  4150. (else_try),
  4151. (store_character_level, ":troop_level", ":troop_id"),
  4152. (assign, ":join_cost", ":troop_level"),
  4153. (val_add, ":join_cost", 5),
  4154. (val_mul, ":join_cost", ":join_cost"),
  4155. (val_add, ":join_cost", 40),
  4156. (val_div, ":join_cost", 5),
  4157. (try_begin), #mounted troops cost %100 more than the normal cost
  4158. (troop_is_mounted, ":troop_id"),
  4159. (val_mul, ":join_cost", 2),
  4160. (try_end),
  4161. (try_end),
  4162. (assign, reg0, ":join_cost"),
  4163. (set_trigger_result, reg0),
  4164. ]),
  4165.  
  4166. # script_game_get_upgrade_xp
  4167. # This script is called from game engine for calculating needed troop upgrade exp
  4168. # Input:
  4169. # param1: troop_id,
  4170. # Output: reg0 = needed exp for upgrade
  4171. ("game_get_upgrade_xp",
  4172. [
  4173. (store_script_param_1, ":troop_id"),
  4174.  
  4175. (assign, ":needed_upgrade_xp", 0),
  4176. #formula : int needed_upgrade_xp = 2 * (30 + 0.006f * level_boundaries[troops[troop_id].level + 3]);
  4177. (store_character_level, ":troop_level", ":troop_id"),
  4178. (store_add, ":needed_upgrade_xp", ":troop_level", 3),
  4179. (get_level_boundary, reg0, ":needed_upgrade_xp"),
  4180. (val_mul, reg0, 6),
  4181. (val_div, reg0, 1000),
  4182. (val_add, reg0, 30),
  4183.  
  4184. (try_begin),
  4185. (ge, ":troop_id", bandits_begin),
  4186. (lt, ":troop_id", bandits_end),
  4187. (val_mul, reg0, 2),
  4188. (try_end),
  4189.  
  4190. (set_trigger_result, reg0),
  4191. ]),
  4192.  
  4193. # script_game_get_upgrade_cost
  4194. # This script is called from game engine for calculating needed troop upgrade exp
  4195. # Input:
  4196. # param1: troop_id,
  4197. # Output: reg0 = needed cost for upgrade
  4198. ("game_get_upgrade_cost",
  4199. [
  4200. (store_script_param_1, ":troop_id"),
  4201.  
  4202. (store_character_level, ":troop_level", ":troop_id"),
  4203.  
  4204. (try_begin),
  4205. (is_between, ":troop_level", 0, 6),
  4206. (assign, reg0, 10),
  4207. (else_try),
  4208. (is_between, ":troop_level", 6, 11),
  4209. (assign, reg0, 20),
  4210. (else_try),
  4211. (is_between, ":troop_level", 11, 16),
  4212. (assign, reg0, 40),
  4213. (else_try),
  4214. (is_between, ":troop_level", 16, 21),
  4215. (assign, reg0, 80),
  4216. (else_try),
  4217. (is_between, ":troop_level", 21, 26),
  4218. (assign, reg0, 120),
  4219. (else_try),
  4220. (is_between, ":troop_level", 26, 31),
  4221. (assign, reg0, 160),
  4222. (else_try),
  4223. (assign, reg0, 200),
  4224. (try_end),
  4225.  
  4226. (set_trigger_result, reg0),
  4227. ]),
  4228.  
  4229. # script_game_get_prisoner_price
  4230. # This script is called from the game engine for calculating prisoner price
  4231. # Input:
  4232. # param1: troop_id,
  4233. # Output: reg0
  4234. ("game_get_prisoner_price",
  4235. [
  4236. (store_script_param_1, ":troop_id"),
  4237.  
  4238. (try_begin),
  4239. (is_between, "$g_talk_troop", ransom_brokers_begin, ransom_brokers_end),
  4240. (store_character_level, ":troop_level", ":troop_id"),
  4241. (assign, ":ransom_amount", ":troop_level"),
  4242. (val_add, ":ransom_amount", 10),
  4243. (val_mul, ":ransom_amount", ":ransom_amount"),
  4244. (val_div, ":ransom_amount", 6),
  4245. (else_try),
  4246. (assign, ":ransom_amount", 50),
  4247. (try_end),
  4248.  
  4249. (assign, reg0, ":ransom_amount"),
  4250.  
  4251. (set_trigger_result, reg0),
  4252. ]),
  4253.  
  4254.  
  4255. # script_game_check_prisoner_can_be_sold
  4256. # This script is called from the game engine for checking if a given troop can be sold.
  4257. # Input:
  4258. # param1: troop_id,
  4259. # Output: reg0: 1= can be sold; 0= cannot be sold.
  4260.  
  4261. ("game_check_prisoner_can_be_sold",
  4262. [
  4263. (store_script_param_1, ":troop_id"),
  4264. (assign, reg0, 0),
  4265. (try_begin),
  4266. (neg|troop_is_hero, ":troop_id"),
  4267. (assign, reg0, 1),
  4268. (try_end),
  4269. (set_trigger_result, reg0),
  4270. ]),
  4271.  
  4272. # script_game_get_morale_of_troops_from_faction
  4273. # This script is called from the game engine
  4274. # Input:
  4275. # param1: faction_no,
  4276. # Output: reg0: extra morale x 100
  4277.  
  4278. ("game_get_morale_of_troops_from_faction",
  4279. [
  4280. (store_script_param_1, ":troop_no"),
  4281.  
  4282. (store_troop_faction, ":faction_no", ":troop_no"),
  4283.  
  4284. (try_begin),
  4285. (ge, ":faction_no", npc_kingdoms_begin),
  4286. (lt, ":faction_no", npc_kingdoms_end),
  4287.  
  4288. (faction_get_slot, reg0, ":faction_no", slot_faction_morale_of_player_troops),
  4289.  
  4290. #(assign, reg1, ":faction_no"),
  4291. #(assign, reg2, ":troop_no"),
  4292. #(assign, reg3, reg0),
  4293. #(display_message, "@extra morale for troop {reg2} of faction {reg1} is {reg3}"),
  4294. (else_try),
  4295. (assign, reg0, 0),
  4296. (try_end),
  4297.  
  4298. (val_div, reg0, 100),
  4299.  
  4300. (party_get_morale, reg1, "p_main_party"),
  4301.  
  4302. (val_add, reg0, reg1),
  4303.  
  4304. (set_trigger_result, reg0),
  4305. ]),
  4306.  
  4307. #script_game_event_detect_party:
  4308. # This script is called from the game engine when player party inspects another party.
  4309. # INPUT:
  4310. # param1: Party-id
  4311. ("game_event_detect_party",
  4312. [
  4313. (store_script_param_1, ":party_id"),
  4314. (try_begin),
  4315. (party_slot_eq, ":party_id", slot_party_type, spt_kingdom_hero_party),
  4316. (party_stack_get_troop_id, ":leader", ":party_id", 0),
  4317. (is_between, ":leader", active_npcs_begin, active_npcs_end),
  4318. (call_script, "script_update_troop_location_notes", ":leader", 0),
  4319. (else_try),
  4320. (is_between, ":party_id", walled_centers_begin, walled_centers_end),
  4321. (party_get_num_attached_parties, ":num_attached_parties", ":party_id"),
  4322. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  4323. (party_get_attached_party_with_rank, ":attached_party", ":party_id", ":attached_party_rank"),
  4324. (party_stack_get_troop_id, ":leader", ":attached_party", 0),
  4325. (is_between, ":leader", active_npcs_begin, active_npcs_end),
  4326. (call_script, "script_update_troop_location_notes", ":leader", 0),
  4327. (try_end),
  4328. (try_end),
  4329. ]),
  4330.  
  4331. #script_game_event_undetect_party:
  4332. # This script is called from the game engine when player party inspects another party.
  4333. # INPUT:
  4334. # param1: Party-id
  4335. ("game_event_undetect_party",
  4336. [
  4337. (store_script_param_1, ":party_id"),
  4338. (try_begin),
  4339. (party_slot_eq, ":party_id", slot_party_type, spt_kingdom_hero_party),
  4340. (party_stack_get_troop_id, ":leader", ":party_id", 0),
  4341. (is_between, ":leader", active_npcs_begin, active_npcs_end),
  4342. (call_script, "script_update_troop_location_notes", ":leader", 0),
  4343. (try_end),
  4344. ]),
  4345.  
  4346. #script_game_get_statistics_line:
  4347. # This script is called from the game engine when statistics page is opened.
  4348. # INPUT:
  4349. # param1: line_no
  4350. ("game_get_statistics_line",
  4351. [
  4352. (store_script_param_1, ":line_no"),
  4353. (try_begin),
  4354. (eq, ":line_no", 0),
  4355. (get_player_agent_kill_count, reg1),
  4356. (str_store_string, s1, "str_number_of_troops_killed_reg1"),
  4357. (set_result_string, s1),
  4358. (else_try),
  4359. (eq, ":line_no", 1),
  4360. (get_player_agent_kill_count, reg1, 1),
  4361. (str_store_string, s1, "str_number_of_troops_wounded_reg1"),
  4362. (set_result_string, s1),
  4363. (else_try),
  4364. (eq, ":line_no", 2),
  4365. (get_player_agent_own_troop_kill_count, reg1),
  4366. (str_store_string, s1, "str_number_of_own_troops_killed_reg1"),
  4367. (set_result_string, s1),
  4368. (else_try),
  4369. (eq, ":line_no", 3),
  4370. (get_player_agent_own_troop_kill_count, reg1, 1),
  4371. (str_store_string, s1, "str_number_of_own_troops_wounded_reg1"),
  4372. (set_result_string, s1),
  4373. (try_end),
  4374. ]),
  4375.  
  4376. #script_game_get_date_text:
  4377. # This script is called from the game engine when the date needs to be displayed.
  4378. # INPUT: arg1 = number of days passed since the beginning of the game
  4379. # OUTPUT: result string = date
  4380. ("game_get_date_text",
  4381. [
  4382. (store_script_param_2, ":num_hours"),
  4383. (store_div, ":num_days", ":num_hours", 24),
  4384. (store_add, ":cur_day", ":num_days", 23),
  4385. (assign, ":cur_month", 3),
  4386. (assign, ":cur_year", 1257),
  4387. (assign, ":try_range", 99999),
  4388. (try_for_range, ":unused", 0, ":try_range"),
  4389. (try_begin),
  4390. (this_or_next|eq, ":cur_month", 1),
  4391. (this_or_next|eq, ":cur_month", 3),
  4392. (this_or_next|eq, ":cur_month", 5),
  4393. (this_or_next|eq, ":cur_month", 7),
  4394. (this_or_next|eq, ":cur_month", 8),
  4395. (this_or_next|eq, ":cur_month", 10),
  4396. (eq, ":cur_month", 12),
  4397. (assign, ":month_day_limit", 31),
  4398. (else_try),
  4399. (this_or_next|eq, ":cur_month", 4),
  4400. (this_or_next|eq, ":cur_month", 6),
  4401. (this_or_next|eq, ":cur_month", 9),
  4402. (eq, ":cur_month", 11),
  4403. (assign, ":month_day_limit", 30),
  4404. (else_try),
  4405. (try_begin),
  4406. (store_div, ":cur_year_div_4", ":cur_year", 4),
  4407. (val_mul, ":cur_year_div_4", 4),
  4408. (eq, ":cur_year_div_4", ":cur_year"),
  4409. (assign, ":month_day_limit", 29),
  4410. (else_try),
  4411. (assign, ":month_day_limit", 28),
  4412. (try_end),
  4413. (try_end),
  4414. (try_begin),
  4415. (gt, ":cur_day", ":month_day_limit"),
  4416. (val_sub, ":cur_day", ":month_day_limit"),
  4417. (val_add, ":cur_month", 1),
  4418. (try_begin),
  4419. (gt, ":cur_month", 12),
  4420. (val_sub, ":cur_month", 12),
  4421. (val_add, ":cur_year", 1),
  4422. (try_end),
  4423. (else_try),
  4424. (assign, ":try_range", 0),
  4425. (try_end),
  4426. (try_end),
  4427. (assign, reg1, ":cur_day"),
  4428. (assign, reg2, ":cur_year"),
  4429. (try_begin),
  4430. (eq, ":cur_month", 1),
  4431. (str_store_string, s1, "str_january_reg1_reg2"),
  4432. (else_try),
  4433. (eq, ":cur_month", 2),
  4434. (str_store_string, s1, "str_february_reg1_reg2"),
  4435. (else_try),
  4436. (eq, ":cur_month", 3),
  4437. (str_store_string, s1, "str_march_reg1_reg2"),
  4438. (else_try),
  4439. (eq, ":cur_month", 4),
  4440. (str_store_string, s1, "str_april_reg1_reg2"),
  4441. (else_try),
  4442. (eq, ":cur_month", 5),
  4443. (str_store_string, s1, "str_may_reg1_reg2"),
  4444. (else_try),
  4445. (eq, ":cur_month", 6),
  4446. (str_store_string, s1, "str_june_reg1_reg2"),
  4447. (else_try),
  4448. (eq, ":cur_month", 7),
  4449. (str_store_string, s1, "str_july_reg1_reg2"),
  4450. (else_try),
  4451. (eq, ":cur_month", 8),
  4452. (str_store_string, s1, "str_august_reg1_reg2"),
  4453. (else_try),
  4454. (eq, ":cur_month", 9),
  4455. (str_store_string, s1, "str_september_reg1_reg2"),
  4456. (else_try),
  4457. (eq, ":cur_month", 10),
  4458. (str_store_string, s1, "str_october_reg1_reg2"),
  4459. (else_try),
  4460. (eq, ":cur_month", 11),
  4461. (str_store_string, s1, "str_november_reg1_reg2"),
  4462. (else_try),
  4463. (eq, ":cur_month", 12),
  4464. (str_store_string, s1, "str_december_reg1_reg2"),
  4465. (try_end),
  4466. (set_result_string, s1),
  4467. ]),
  4468.  
  4469. #script_game_get_money_text:
  4470. # This script is called from the game engine when an amount of money needs to be displayed.
  4471. # INPUT: arg1 = amount in units
  4472. # OUTPUT: result string = money in text
  4473. ("game_get_money_text",
  4474. [
  4475. (store_script_param_1, ":amount"),
  4476. (try_begin),
  4477. (eq, ":amount", 1),
  4478. (str_store_string, s1, "str_1_denar"),
  4479. (else_try),
  4480. (assign, reg1, ":amount"),
  4481. (str_store_string, s1, "str_reg1_denars"),
  4482. (try_end),
  4483. (set_result_string, s1),
  4484. ]),
  4485.  
  4486. #script_game_get_party_companion_limit:
  4487. # This script is called from the game engine when the companion limit is needed for a party.
  4488. # INPUT: arg1 = none
  4489. # OUTPUT: reg0 = companion_limit
  4490. ("game_get_party_companion_limit",
  4491. [
  4492. (assign, ":troop_no", "trp_player"),
  4493.  
  4494. (assign, ":limit", 30),
  4495. (store_skill_level, ":skill", "skl_leadership", ":troop_no"),
  4496. (store_attribute_level, ":charisma", ":troop_no", ca_charisma),
  4497. (val_mul, ":skill", 5),
  4498. (val_add, ":limit", ":skill"),
  4499. (val_add, ":limit", ":charisma"),
  4500.  
  4501. (troop_get_slot, ":troop_renown", ":troop_no", slot_troop_renown),
  4502. (store_div, ":renown_bonus", ":troop_renown", 25),
  4503. (val_add, ":limit", ":renown_bonus"),
  4504.  
  4505. (assign, reg0, ":limit"),
  4506. (set_trigger_result, reg0),
  4507. ]),
  4508.  
  4509.  
  4510. #script_game_reset_player_party_name:
  4511. # This script is called from the game engine when the player name is changed.
  4512. # INPUT: none
  4513. # OUTPUT: none
  4514. ("game_reset_player_party_name",
  4515. [(str_store_troop_name, s5, "trp_player"),
  4516. (party_set_name, "p_main_party", s5),
  4517. ]),
  4518.  
  4519. #script_game_get_troop_note
  4520. # This script is called from the game engine when the notes of a troop is needed.
  4521. # INPUT: arg1 = troop_no, arg2 = note_index
  4522. # OUTPUT: s0 = note
  4523. ("game_get_troop_note",
  4524. [
  4525. (store_script_param_1, ":troop_no"),
  4526. (store_script_param_2, ":note_index"),
  4527. (set_trigger_result, 0),
  4528.  
  4529. (str_store_troop_name, s54, ":troop_no"),
  4530. (try_begin),
  4531. (eq, ":troop_no", "trp_player"),
  4532. (this_or_next|eq, "$player_has_homage", 1),
  4533. (eq, "$players_kingdom", "fac_player_supporters_faction"),
  4534. (assign, ":troop_faction", "$players_kingdom"),
  4535. (else_try),
  4536. (store_troop_faction, ":troop_faction", ":troop_no"),
  4537.  
  4538.  
  4539.  
  4540. (try_end),
  4541. (str_clear, s49),
  4542.  
  4543. #Family notes
  4544. (try_begin),
  4545. (this_or_next|is_between, ":troop_no", lords_begin, kingdom_ladies_end),
  4546. (eq, ":troop_no", "trp_player"),
  4547. (neg|is_between, ":troop_no", pretenders_begin, pretenders_end),
  4548. (assign, ":num_relations", 0),
  4549.  
  4550. (try_begin),
  4551. (call_script, "script_troop_get_family_relation_to_troop", "trp_player", ":troop_no"),
  4552. (gt, reg0, 0),
  4553. (val_add, ":num_relations", 1),
  4554. (try_end),
  4555. (try_for_range, ":aristocrat", lords_begin, kingdom_ladies_end),
  4556. (call_script, "script_troop_get_family_relation_to_troop", ":aristocrat", ":troop_no"),
  4557. (gt, reg0, 0),
  4558. (val_add, ":num_relations", 1),
  4559. (try_end),
  4560. (try_begin),
  4561. (gt, ":num_relations", 0),
  4562. (try_begin),
  4563. (eq, ":troop_no", "trp_player"),
  4564. (str_store_string, s49, "str__family_"),
  4565. (else_try),
  4566. (troop_get_slot, reg1, ":troop_no", slot_troop_age),
  4567. (str_store_string, s49, "str__age_reg1_family_"),
  4568. (try_end),
  4569. (try_begin),
  4570. (call_script, "script_troop_get_family_relation_to_troop", "trp_player", ":troop_no"),
  4571. (gt, reg0, 0),
  4572. (str_store_troop_name_link, s12, "trp_player"),
  4573. (val_sub, ":num_relations", 1),
  4574. (try_begin),
  4575. (eq, ":num_relations", 0),
  4576. (str_store_string, s49, "str_s49_s12_s11_end"),
  4577. (else_try),
  4578. (str_store_string, s49, "str_s49_s12_s11"),
  4579. (try_end),
  4580. (try_end),
  4581. (try_for_range, ":aristocrat", lords_begin, kingdom_ladies_end),
  4582. (call_script, "script_troop_get_family_relation_to_troop", ":aristocrat", ":troop_no"),
  4583. (gt, reg0, 0),
  4584. (try_begin),
  4585. (neg|is_between, ":aristocrat", kingdom_ladies_begin, kingdom_ladies_end),
  4586. (eq, "$cheat_mode", 1),
  4587. (str_store_troop_name_link, s12, ":aristocrat"),
  4588. (call_script, "script_troop_get_relation_with_troop", ":aristocrat", ":troop_no"),
  4589. (str_store_string, s49, "str_s49_s12_s11_rel_reg0"),
  4590. (else_try),
  4591. (str_store_troop_name_link, s12, ":aristocrat"),
  4592. (val_sub, ":num_relations", 1),
  4593. (try_begin),
  4594. (eq, ":num_relations", 0),
  4595. (str_store_string, s49, "str_s49_s12_s11_end"),
  4596. (else_try),
  4597. (str_store_string, s49, "str_s49_s12_s11"),
  4598. (try_end),
  4599. (try_end),
  4600. (try_end),
  4601. (try_end),
  4602. (try_end),
  4603.  
  4604. (try_begin),
  4605. (neq, ":troop_no", "trp_player"),
  4606. (neg|is_between, ":troop_faction", kingdoms_begin, kingdoms_end),
  4607. (neg|is_between, ":troop_no", companions_begin, companions_end),
  4608. (neg|is_between, ":troop_no", pretenders_begin, pretenders_end),
  4609.  
  4610. (try_begin),
  4611. (eq, ":note_index", 0),
  4612. (str_store_string, s0, "str_s54_has_left_the_realm"),
  4613. (set_trigger_result, 1),
  4614. (else_try),
  4615. (str_clear, s0),
  4616. (this_or_next|eq, ":note_index", 1),
  4617. (eq, ":note_index", 2),
  4618. (set_trigger_result, 1),
  4619. (try_end),
  4620.  
  4621. (else_try),
  4622. (is_between, ":troop_no", companions_begin, companions_end),
  4623. (neg|troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  4624. (eq, ":note_index", 0),
  4625. (set_trigger_result, 1),
  4626. (str_clear, s0),
  4627. (assign, ":companion", ":troop_no"),
  4628. (str_store_troop_name, s4, ":companion"),
  4629. (try_begin),
  4630. (troop_get_slot, ":days_left", ":companion", slot_troop_days_on_mission),
  4631.  
  4632. (this_or_next|main_party_has_troop, ":companion"),
  4633. (this_or_next|troop_slot_ge, ":companion", slot_troop_current_mission, 1),
  4634. (eq, "$g_player_minister", ":companion"),
  4635.  
  4636. (try_begin),
  4637. (troop_slot_eq, ":companion", slot_troop_current_mission, npc_mission_kingsupport),
  4638. (str_store_string, s8, "str_gathering_support"),
  4639. (try_begin),
  4640. (eq, ":days_left", 1),
  4641. (str_store_string, s5, "str_expected_back_imminently"),
  4642. (else_try),
  4643. (assign, reg3, ":days_left"),
  4644. (str_store_string, s5, "str_expected_back_in_approximately_reg3_days"),
  4645. (try_end),
  4646. (else_try),
  4647. (troop_slot_eq, ":companion", slot_troop_current_mission, npc_mission_gather_intel),
  4648. (troop_get_slot, ":town_with_contacts", ":companion", slot_troop_town_with_contacts),
  4649. (str_store_party_name, s11, ":town_with_contacts"),
  4650.  
  4651. (str_store_string, s8, "str_gathering_intelligence"),
  4652. (try_begin),
  4653. (eq, ":days_left", 1),
  4654. (str_store_string, s5, "str_expected_back_imminently"),
  4655. (else_try),
  4656. (assign, reg3, ":days_left"),
  4657. (str_store_string, s5, "str_expected_back_in_approximately_reg3_days"),
  4658. (try_end),
  4659. (else_try),
  4660.  
  4661. (troop_slot_ge, ":companion", slot_troop_current_mission, npc_mission_peace_request),
  4662. (neg|troop_slot_ge, ":companion", slot_troop_current_mission, 8),
  4663.  
  4664. (troop_get_slot, ":faction", ":companion", slot_troop_mission_object),
  4665. (str_store_faction_name, s9, ":faction"),
  4666. (str_store_string, s8, "str_diplomatic_embassy_to_s9"),
  4667. (try_begin),
  4668. (eq, ":days_left", 1),
  4669. (str_store_string, s5, "str_expected_back_imminently"),
  4670. (else_try),
  4671. (assign, reg3, ":days_left"),
  4672. (str_store_string, s5, "str_expected_back_in_approximately_reg3_days"),
  4673. (try_end),
  4674. (else_try),
  4675. (eq, ":companion", "$g_player_minister"),
  4676. (str_store_string, s8, "str_serving_as_minister"),
  4677. (str_store_party_name, s9, "$g_player_court"),
  4678. (is_between, "$g_player_court", centers_begin, centers_end),
  4679. (str_store_string, s5, "str_in_your_court_at_s9"),
  4680. (else_try),
  4681. (eq, ":companion", "$g_player_minister"),
  4682. (str_store_string, s8, "str_serving_as_minister"),
  4683. (str_store_string, s5, "str_awaiting_the_capture_of_a_fortress_which_can_serve_as_your_court"),
  4684. (else_try),
  4685. (main_party_has_troop, ":companion"),
  4686. (str_store_string, s8, "str_under_arms"),
  4687. (str_store_string, s5, "str_in_your_party"),
  4688. (try_end),
  4689.  
  4690. (str_store_string, s0, "str_s4_s8_s5"),
  4691.  
  4692. (else_try),
  4693. (str_store_string, s0, "str_whereabouts_unknown"),
  4694. (try_end),
  4695.  
  4696.  
  4697. (else_try),
  4698. (is_between, ":troop_no", pretenders_begin, pretenders_end),
  4699. (neg|troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  4700. (neq, ":troop_no", "$supported_pretender"),
  4701.  
  4702.  
  4703. (troop_get_slot, ":orig_faction", ":troop_no", slot_troop_original_faction),
  4704. (try_begin),
  4705. (faction_slot_eq, ":orig_faction", slot_faction_state, sfs_active),
  4706. (faction_slot_eq, ":orig_faction", slot_faction_has_rebellion_chance, 1),
  4707. (try_begin),
  4708. (eq, ":note_index", 0),
  4709. (str_store_faction_name_link, s56, ":orig_faction"),
  4710. (str_store_string, s0, "@{s54} is a claimant to the throne of {s56}.", 0),
  4711. (set_trigger_result, 1),
  4712. (try_end),
  4713. (else_try),
  4714. (try_begin),
  4715. (str_clear, s0),
  4716. (this_or_next|eq, ":note_index", 0),
  4717. (this_or_next|eq, ":note_index", 1),
  4718. (eq, ":note_index", 2),
  4719. (set_trigger_result, 1),
  4720. (try_end),
  4721. (try_end),
  4722.  
  4723. (else_try),
  4724. (try_begin),
  4725. (eq, ":note_index", 0),
  4726. (faction_get_slot, ":faction_leader", ":troop_faction", slot_faction_leader),
  4727. (str_store_troop_name_link, s55, ":faction_leader"),
  4728. (str_store_faction_name_link, s56, ":troop_faction"),
  4729. (assign, ":troop_is_player_faction", 0),
  4730. (assign, ":troop_is_faction_leader", 0),
  4731. (try_begin),
  4732. (eq, ":troop_faction", "fac_player_faction"),
  4733. (assign, ":troop_is_player_faction", 1),
  4734. (else_try),
  4735. (eq, ":faction_leader", ":troop_no"),
  4736. (assign, ":troop_is_faction_leader", 1),
  4737. (try_end),
  4738. (assign, ":num_centers", 0),
  4739. (str_store_string, s58, "@nowhere"),
  4740. (try_for_range_backwards, ":cur_center", centers_begin, centers_end),
  4741. (party_slot_eq, ":cur_center", slot_town_lord, ":troop_no"),
  4742. (try_begin),
  4743. (eq, ":num_centers", 0),
  4744. (str_store_party_name_link, s58, ":cur_center"),
  4745. (else_try),
  4746. (eq, ":num_centers", 1),
  4747. (str_store_party_name_link, s57, ":cur_center"),
  4748. (str_store_string, s58, "@{s57} and {s58}"),
  4749. (else_try),
  4750. (str_store_party_name_link, s57, ":cur_center"),
  4751. (str_store_string, s58, "@{!}{s57}, {s58}"),
  4752. (try_end),
  4753. (val_add, ":num_centers", 1),
  4754. (try_end),
  4755. (troop_get_type, reg3, ":troop_no"),
  4756. (troop_get_slot, reg5, ":troop_no", slot_troop_renown),
  4757. (troop_get_slot, reg15, ":troop_no", slot_troop_controversy),
  4758.  
  4759. (str_clear, s59),
  4760. (try_begin),
  4761. (call_script, "script_troop_get_player_relation", ":troop_no"),
  4762. (assign, ":relation", reg0),
  4763. (store_add, ":normalized_relation", ":relation", 100),
  4764. (val_add, ":normalized_relation", 5),
  4765. (store_div, ":str_offset", ":normalized_relation", 10),
  4766. (val_clamp, ":str_offset", 0, 20),
  4767. (store_add, ":str_id", "str_relation_mnus_100_ns", ":str_offset"),
  4768. (neq, ":str_id", "str_relation_plus_0_ns"),
  4769. (str_store_string, s60, "@{reg3?She:He}"),
  4770. (str_store_string, s59, ":str_id"),
  4771. (str_store_string, s59, "@{!}^{s59}"),
  4772. (try_end),
  4773. #lord recruitment changes begin
  4774. #This sends a bunch of political information to s47.
  4775.  
  4776. #refresh registers
  4777. (assign, reg9, ":num_centers"),
  4778. (troop_get_type, reg3, ":troop_no"),
  4779. (troop_get_slot, reg5, ":troop_no", slot_troop_renown),
  4780. (assign, reg4, ":troop_is_faction_leader"),
  4781. (assign, reg6, ":troop_is_player_faction"),
  4782.  
  4783. (troop_get_slot, reg17, ":troop_no", slot_troop_wealth), #DEBUGS
  4784. (str_store_string, s0, "str_lord_info_string", 0),
  4785. #lord recruitment changes end
  4786. (add_troop_note_tableau_mesh, ":troop_no", "tableau_troop_note_mesh"),
  4787. (set_trigger_result, 1),
  4788. (try_end),
  4789. (try_end),
  4790. ]),
  4791.  
  4792. #script_game_get_center_note
  4793. # This script is called from the game engine when the notes of a center is needed.
  4794. # INPUT: arg1 = center_no, arg2 = note_index
  4795. # OUTPUT: s0 = note
  4796. ("game_get_center_note",
  4797. [
  4798. (store_script_param_1, ":center_no"),
  4799. (store_script_param_2, ":note_index"),
  4800.  
  4801. (set_trigger_result, 0),
  4802. (try_begin),
  4803. (eq, ":note_index", 0),
  4804. (party_get_slot, ":lord_troop", ":center_no", slot_town_lord),
  4805. (try_begin),
  4806. (ge, ":lord_troop", 0),
  4807. (store_troop_faction, ":lord_faction", ":lord_troop"),
  4808. (str_store_troop_name_link, s1, ":lord_troop"),
  4809. (try_begin),
  4810. (eq, ":lord_troop", "trp_player"),
  4811. (gt, "$players_kingdom", 0),
  4812. (str_store_faction_name_link, s2, "$players_kingdom"),
  4813. (else_try),
  4814. (str_store_faction_name_link, s2, ":lord_faction"),
  4815. (try_end),
  4816. (str_store_party_name, s50, ":center_no"),
  4817. (try_begin),
  4818. (party_slot_eq, ":center_no", slot_party_type, spt_town),
  4819. (str_store_string, s51, "@The town of {s50}"),
  4820. (else_try),
  4821. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  4822. (party_get_slot, ":bound_center", ":center_no", slot_village_bound_center),
  4823. (str_store_party_name_link, s52, ":bound_center"),
  4824. (str_store_string, s51, "@The village of {s50} near {s52}"),
  4825. (else_try),
  4826. (str_store_string, s51, "@{!}{s50}"),
  4827. (try_end),
  4828. (str_store_string, s2, "@{s51} belongs to {s1} of {s2}.^"),
  4829. (else_try),
  4830. (str_clear, s2),
  4831. (try_end),
  4832. (try_begin),
  4833. (is_between, ":center_no", villages_begin, villages_end),
  4834. (else_try),
  4835. (assign, ":num_villages", 0),
  4836. (try_for_range_backwards, ":village_no", villages_begin, villages_end),
  4837. (party_slot_eq, ":village_no", slot_village_bound_center, ":center_no"),
  4838. (try_begin),
  4839. (eq, ":num_villages", 0),
  4840. (str_store_party_name_link, s8, ":village_no"),
  4841. (else_try),
  4842. (eq, ":num_villages", 1),
  4843. (str_store_party_name_link, s7, ":village_no"),
  4844. (str_store_string, s8, "@{s7} and {s8}"),
  4845. (else_try),
  4846. (str_store_party_name_link, s7, ":village_no"),
  4847. (str_store_string, s8, "@{!}{s7}, {s8}"),
  4848. (try_end),
  4849. (val_add, ":num_villages", 1),
  4850. (try_end),
  4851. (try_begin),
  4852. (eq, ":num_villages", 0),
  4853. (str_store_string, s2, "@{s2}It has no villages.^"),
  4854. (else_try),
  4855. (store_sub, reg0, ":num_villages", 1),
  4856. (str_store_string, s2, "@{s2}{reg0?Its villages are:Its village is} {s8}.^"),
  4857. (try_end),
  4858. (try_end),
  4859. (call_script, "script_get_prosperity_text_to_s50", ":center_no"),
  4860. #(party_get_slot, reg7, ":center_no", slot_town_prosperity),
  4861. (str_store_string, s0, "@{s2}Its prosperity is: {s50}", 0),
  4862.  
  4863. (set_trigger_result, 1),
  4864. (try_end),
  4865. ]),
  4866.  
  4867. #script_game_get_faction_note
  4868. # This script is called from the game engine when the notes of a faction is needed.
  4869. # INPUT: arg1 = faction_no, arg2 = note_index
  4870. # OUTPUT: s0 = note
  4871. ("game_get_faction_note",
  4872. [
  4873. (store_script_param_1, ":faction_no"),
  4874. (store_script_param_2, ":note_index"),
  4875. (set_trigger_result, 0),
  4876.  
  4877. ## (try_begin),
  4878. ## (eq, 2, 1),
  4879. ## (str_store_faction_name, s14, ":faction_no"),
  4880. ## (assign, reg4, "$temp"),
  4881. ## (display_message, "str_updating_faction_notes_for_s14_temp_=_reg4"),
  4882. ## (try_end),
  4883.  
  4884. (try_begin),
  4885. (is_between, ":faction_no", kingdoms_begin, kingdoms_end),
  4886. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  4887. #conditions end
  4888. (try_begin),
  4889. (eq, ":note_index", 0),
  4890. (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  4891. (str_store_faction_name, s5, ":faction_no"),
  4892. (str_store_troop_name_link, s6, ":faction_leader"),
  4893. (assign, ":num_centers", 0),
  4894. (str_store_string, s8, "@nowhere"),
  4895. (try_for_range_backwards, ":cur_center", centers_begin, centers_end),
  4896. (store_faction_of_party, ":center_faction", ":cur_center"),
  4897. (eq, ":center_faction", ":faction_no"),
  4898. (try_begin),
  4899. (eq, ":num_centers", 0),
  4900. (str_store_party_name_link, s8, ":cur_center"),
  4901. (else_try),
  4902. (eq, ":num_centers", 1),
  4903. (str_store_party_name_link, s7, ":cur_center"),
  4904. (str_store_string, s8, "@{s7} and {s8}"),
  4905. (else_try),
  4906. (str_store_party_name_link, s7, ":cur_center"),
  4907. (str_store_string, s8, "@{!}{s7}, {s8}"),
  4908. (try_end),
  4909. (val_add, ":num_centers", 1),
  4910. (try_end),
  4911. (assign, ":num_members", 0),
  4912. (str_store_string, s10, "@noone"),
  4913. (try_for_range_backwards, ":loop_var", "trp_kingdom_heroes_including_player_begin", active_npcs_end),
  4914. (assign, ":cur_troop", ":loop_var"),
  4915. (try_begin),
  4916. (eq, ":loop_var", "trp_kingdom_heroes_including_player_begin"),
  4917. (assign, ":cur_troop", "trp_player"),
  4918. (assign, ":troop_faction", "$players_kingdom"),
  4919. (else_try),
  4920. (store_troop_faction, ":troop_faction", ":cur_troop"),
  4921. (try_end),
  4922. (eq, ":troop_faction", ":faction_no"),
  4923. (neq, ":cur_troop", ":faction_leader"),
  4924. (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  4925. (try_begin),
  4926. (eq, ":num_members", 0),
  4927. (str_store_troop_name_link, s10, ":cur_troop"),
  4928. (else_try),
  4929. (eq, ":num_members", 1),
  4930. (str_store_troop_name_link, s9, ":cur_troop"),
  4931. (str_store_string, s10, "@{s9} and {s10}"),
  4932. (else_try),
  4933. (str_store_troop_name_link, s9, ":cur_troop"),
  4934. (str_store_string, s10, "@{!}{s9}, {s10}"),
  4935. (try_end),
  4936. (val_add, ":num_members", 1),
  4937. (try_end),
  4938.  
  4939. #wars
  4940. (str_store_string, s12, "@noone"),
  4941. # (assign, ":num_enemies", 0),
  4942. # (try_for_range_backwards, ":cur_faction", kingdoms_begin, kingdoms_end),
  4943. # (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  4944. # (store_relation, ":cur_relation", ":cur_faction", ":faction_no"),
  4945. # (lt, ":cur_relation", 0),
  4946. # (try_begin),
  4947. # (eq, ":num_enemies", 0),
  4948. # (str_store_faction_name_link, s12, ":cur_faction"),
  4949. # (else_try),
  4950. # (eq, ":num_enemies", 1),
  4951. # (str_store_faction_name_link, s11, ":cur_faction"),
  4952. # (str_store_string, s12, "@the {s11} and the {s12}"),
  4953. # (else_try),
  4954. # (str_store_faction_name_link, s11, ":cur_faction"),
  4955. # (str_store_string, s12, "@the {s11}, the {s12}"),
  4956. # (try_end),
  4957. # (val_add, ":num_enemies", 1),
  4958. # (try_end),
  4959.  
  4960. (str_store_string, s21, "str_foreign_relations__"),
  4961.  
  4962. #other foreign relations
  4963. (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  4964. (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  4965. (neq, ":faction_no", ":cur_faction"),
  4966. (str_store_faction_name_link, s14, ":cur_faction"),
  4967. (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":faction_no", ":cur_faction"),
  4968. (assign, ":diplomatic_status", reg0),
  4969. (assign, ":duration_of_status", reg1),
  4970.  
  4971. (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":cur_faction", ":faction_no"),
  4972. (assign, ":reverse_diplomatic_status", reg0),
  4973. # (assign, ":reverse_diplomatic_duration", reg1),
  4974.  
  4975. (try_begin),
  4976. (eq, ":diplomatic_status", -2),
  4977. (str_store_string, s21, "str_s21__the_s5_is_at_war_with_the_s14"),
  4978. (store_add, ":slot_war_damage_inflicted", ":cur_faction", slot_faction_war_damage_inflicted_on_factions_begin),
  4979. (val_sub, ":slot_war_damage_inflicted", kingdoms_begin),
  4980. (faction_get_slot, ":war_damage_inflicted", ":faction_no", ":slot_war_damage_inflicted"),
  4981. (store_mul, ":war_damage_inflicted_x_2", ":war_damage_inflicted", 2),
  4982.  
  4983. (store_add, ":slot_war_damage_suffered", ":faction_no", slot_faction_war_damage_inflicted_on_factions_begin),
  4984. (val_sub, ":slot_war_damage_suffered", kingdoms_begin),
  4985. (faction_get_slot, ":war_damage_suffered", ":cur_faction", ":slot_war_damage_suffered"),
  4986. (store_mul, ":war_damage_suffered_x_2", ":war_damage_suffered", 2),
  4987.  
  4988.  
  4989. (assign, ":war_cause", 0),
  4990. (assign, ":attacker", 0),
  4991. (try_for_range, ":log_entry", 0, "$num_log_entries"),
  4992. (troop_get_slot, ":type", "trp_log_array_entry_type", ":log_entry"),
  4993. (is_between, ":type", logent_faction_declares_war_out_of_personal_enmity, logent_war_declaration_types_end),
  4994. (troop_get_slot, ":actor", "trp_log_array_actor", ":log_entry"),
  4995. (troop_get_slot, ":object", "trp_log_array_faction_object", ":log_entry"),
  4996.  
  4997. (try_begin),
  4998. (eq, ":actor", ":cur_faction"),
  4999. (eq, ":object", ":faction_no"),
  5000. (assign, ":war_cause", ":type"),
  5001. (assign, ":attacker", ":actor"),
  5002. (else_try),
  5003. (eq, ":actor", ":faction_no"),
  5004. (eq, ":object", ":cur_faction"),
  5005. (assign, ":war_cause", ":type"),
  5006. (assign, ":attacker", ":actor"),
  5007. (try_end),
  5008. (try_end),
  5009.  
  5010. #bug fix! backing up s8 to somewhere else
  5011. (str_store_string, s25, s8),
  5012. (try_begin),
  5013. (gt, ":war_cause", 0),
  5014. (str_store_faction_name, s8, ":attacker"),
  5015. (try_begin),
  5016. (eq, ":war_cause", logent_faction_declares_war_out_of_personal_enmity),
  5017. (str_store_string, s21, "str_s21_the_s8_declared_war_out_of_personal_enmity"),
  5018. (else_try),
  5019. (eq, ":war_cause", logent_faction_declares_war_to_respond_to_provocation),
  5020. (str_store_string, s21, "str_s21_the_s8_declared_war_in_response_to_border_provocations"),
  5021. (else_try),
  5022. (eq, ":war_cause", logent_faction_declares_war_to_curb_power),
  5023. (str_store_string, s21, "str_s21_the_s8_declared_war_to_curb_the_other_realms_power"),
  5024. (else_try),
  5025. (eq, ":war_cause", logent_faction_declares_war_to_regain_territory),
  5026. (str_store_string, s21, "str_s21_the_s8_declared_war_to_regain_lost_territory"),
  5027. (else_try),
  5028. (eq, ":war_cause", logent_player_faction_declares_war),
  5029. (neq, ":attacker", "fac_player_supporters_faction"),
  5030. (str_store_string, s21, "str_s21_the_s8_declared_war_as_part_of_a_bid_to_conquer_all_calradia"),
  5031. (try_end),
  5032. (try_end),
  5033. #bug fix! restoring the back up to s8
  5034. (str_store_string, s8, s25),
  5035.  
  5036. (try_begin),
  5037. (gt, ":war_damage_inflicted", ":war_damage_suffered_x_2"),
  5038. (str_store_string, s21, "str_s21_the_s5_has_had_the_upper_hand_in_the_fighting"),
  5039. (else_try),
  5040. (gt, ":war_damage_suffered", ":war_damage_inflicted_x_2"),
  5041. (str_store_string, s21, "str_s21_the_s5_has_gotten_the_worst_of_the_fighting"),
  5042. (else_try),
  5043. (gt, ":war_damage_inflicted", 100),
  5044. (gt, ":war_damage_inflicted", 100),
  5045. (str_store_string, s21, "str_s21_the_fighting_has_gone_on_for_some_time_and_the_war_may_end_soon_with_a_truce"),
  5046. (else_try),
  5047. (str_store_string, s21, "str_s21_the_fighting_has_begun_relatively_recently_and_the_war_may_continue_for_some_time"),
  5048. (try_end),
  5049. (try_begin),
  5050. (eq, "$cheat_mode", 1),
  5051. (assign, reg4, ":war_damage_inflicted"),
  5052. (assign, reg5, ":war_damage_suffered"),
  5053. (str_store_string, s21, "str_s21_reg4reg5"),
  5054. (try_end),
  5055. (else_try),
  5056. (eq, ":diplomatic_status", 1),
  5057. (str_clear, s18),
  5058. (try_begin),
  5059. (neq, ":reverse_diplomatic_status", 1),
  5060. (str_store_string, s18, "str__however_the_truce_is_no_longer_binding_on_the_s14"),
  5061. (try_end),
  5062. (assign, reg1, ":duration_of_status"),
  5063. (str_store_string, s21, "str_s21__the_s5_is_bound_by_truce_not_to_attack_the_s14s18_the_truce_will_expire_in_reg1_days"),
  5064. (else_try),
  5065. (eq, ":diplomatic_status", -1),
  5066. (str_store_string, s21, "str_s21__the_s5_has_recently_suffered_provocation_by_subjects_of_the_s14_and_there_is_a_risk_of_war"),
  5067. (else_try),
  5068. (eq, ":diplomatic_status", 0),
  5069. (str_store_string, s21, "str_s21__the_s5_has_no_outstanding_issues_with_the_s14"),
  5070. (try_end),
  5071. (try_begin),
  5072. (eq, ":reverse_diplomatic_status", -1),
  5073. (str_store_string, s21, "str_s21_the_s14_was_recently_provoked_by_subjects_of_the_s5_and_there_is_a_risk_of_war_"),
  5074. (try_end),
  5075. (try_begin),
  5076. (eq, "$cheat_mode", 1),
  5077. (call_script, "script_npc_decision_checklist_peace_or_war", ":faction_no", ":cur_faction", -1),
  5078. (str_store_string, s21, "@{!}DEBUG : {s21}.^CHEAT MODE ASSESSMENT: {s14}^"),
  5079. (try_end),
  5080. (try_end),
  5081. (str_store_string, s0, "str_the_s5_is_ruled_by_s6_it_occupies_s8_its_vassals_are_s10__s21", 0),
  5082. (set_trigger_result, 1),
  5083. (try_end),
  5084. (else_try),
  5085. (is_between, ":faction_no", kingdoms_begin, kingdoms_end),
  5086. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_defeated),
  5087. (try_begin),
  5088. (eq, ":note_index", 0),
  5089. (str_store_faction_name, s5, ":faction_no"),
  5090. (str_store_string, s0, "@{s5} has been defeated!", 0),
  5091. (set_trigger_result, 1),
  5092. (else_try),
  5093. (eq, ":note_index", 1),
  5094. (str_clear, s0),
  5095. (set_trigger_result, 1),
  5096. (try_end),
  5097. (else_try),
  5098. (try_begin),
  5099. (this_or_next|eq, ":note_index", 0),
  5100. (eq, ":note_index", 1),
  5101. (str_clear, s0),
  5102. (set_trigger_result, 1),
  5103. (try_end),
  5104. (try_end),
  5105. ]),
  5106.  
  5107. #script_game_get_quest_note
  5108. # This script is called from the game engine when the notes of a quest is needed.
  5109. # INPUT: arg1 = quest_no, arg2 = note_index
  5110. # OUTPUT: s0 = note
  5111. ("game_get_quest_note",
  5112. [
  5113. ## (store_script_param_1, ":quest_no"),
  5114. ## (store_script_param_2, ":note_index"),
  5115. (set_trigger_result, 0), # set it to 1 if this script is wanted to be used rather than static notes
  5116. ]),
  5117.  
  5118. #script_game_get_info_page_note
  5119. # This script is called from the game engine when the notes of a info_page is needed.
  5120. # INPUT: arg1 = info_page_no, arg2 = note_index
  5121. # OUTPUT: s0 = note
  5122. ("game_get_info_page_note",
  5123. [
  5124. ## (store_script_param_1, ":info_page_no"),
  5125. ## (store_script_param_2, ":note_index"),
  5126. (set_trigger_result, 0), # set it to 1 if this script is wanted to be used rather than static notes
  5127. ]),
  5128.  
  5129. #script_game_get_scene_name
  5130. # This script is called from the game engine when a name for the scene is needed.
  5131. # INPUT: arg1 = scene_no
  5132. # OUTPUT: s0 = name
  5133. ("game_get_scene_name",
  5134. [
  5135. (store_script_param, ":scene_no", 1),
  5136. (try_begin),
  5137. (is_between, ":scene_no", multiplayer_scenes_begin, multiplayer_scenes_end),
  5138. (store_sub, ":string_id", ":scene_no", multiplayer_scenes_begin),
  5139. (val_add, ":string_id", multiplayer_scene_names_begin),
  5140. (str_store_string, s0, ":string_id"),
  5141. (try_end),
  5142. ]),
  5143.  
  5144. #script_game_get_mission_template_name
  5145. # This script is called from the game engine when a name for the mission template is needed.
  5146. # INPUT: arg1 = mission_template_no
  5147. # OUTPUT: s0 = name
  5148. ("game_get_mission_template_name",
  5149. [
  5150. (store_script_param, ":mission_template_no", 1),
  5151. (call_script, "script_multiplayer_get_mission_template_game_type", ":mission_template_no"),
  5152. (assign, ":game_type", reg0),
  5153. (try_begin),
  5154. (is_between, ":game_type", 0, multiplayer_num_game_types),
  5155. (store_add, ":string_id", ":game_type", multiplayer_game_type_names_begin),
  5156. (str_store_string, s0, ":string_id"),
  5157. (try_end),
  5158. ]),
  5159.  
  5160. #script_add_kill_death_counts
  5161. # INPUT: arg1 = killer_agent_no, arg2 = dead_agent_no
  5162. # OUTPUT: none
  5163. ("add_kill_death_counts",
  5164. [
  5165. (store_script_param, ":killer_agent_no", 1),
  5166. (store_script_param, ":dead_agent_no", 2),
  5167.  
  5168. #INVASION MODE START
  5169. (try_begin),
  5170. (eq, "$g_multiplayer_is_game_type_captain", 1),
  5171. (try_begin),
  5172. (ge, ":killer_agent_no", 0),
  5173. (agent_is_human, ":killer_agent_no"),
  5174. (agent_get_group, ":agent_group", ":killer_agent_no"),
  5175. (player_is_active, ":agent_group"),
  5176. (player_get_agent_id, ":killer_agent_no", ":agent_group"),
  5177. (try_end),
  5178. (try_begin),
  5179. (ge, ":dead_agent_no", 0),
  5180. (agent_is_human, ":dead_agent_no"),
  5181. (agent_get_group, ":agent_group", ":dead_agent_no"),
  5182. (player_is_active, ":agent_group"),
  5183. (player_get_agent_id, ":dead_agent_no", ":agent_group"),
  5184. (try_end),
  5185. (try_end),
  5186. #INVASION MODE END
  5187.  
  5188. (try_begin),
  5189. (ge, ":killer_agent_no", 0),
  5190. (agent_get_team, ":killer_agent_team", ":killer_agent_no"),
  5191. (else_try),
  5192. (assign, ":killer_agent_team", -1),
  5193. (try_end),
  5194.  
  5195. (try_begin),
  5196. (ge, ":dead_agent_no", 0),
  5197. (agent_get_team, ":dead_agent_team", ":dead_agent_no"),
  5198. (else_try),
  5199. (assign, ":dead_agent_team", -1),
  5200. (try_end),
  5201.  
  5202. #adjusting kill counts of players/bots
  5203. (try_begin),
  5204. (try_begin),
  5205. (ge, ":killer_agent_no", 0),
  5206. (ge, ":dead_agent_no", 0),
  5207. (agent_is_human, ":killer_agent_no"),
  5208. (agent_is_human, ":dead_agent_no"),
  5209. (neq, ":killer_agent_no", ":dead_agent_no"),
  5210.  
  5211. (this_or_next|neq, ":killer_agent_team", ":dead_agent_team"),
  5212. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
  5213. (eq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  5214.  
  5215. (agent_get_player_id, ":killer_agent_player", ":killer_agent_no"),
  5216. (try_begin),
  5217. (agent_is_non_player, ":killer_agent_no"), #if killer agent is bot then increase bot kill counts of killer agent's team by one.
  5218. (agent_get_team, ":killer_agent_team", ":killer_agent_no"),
  5219. (team_get_bot_kill_count, ":killer_agent_team_bot_kill_count", ":killer_agent_team"),
  5220. (val_add, ":killer_agent_team_bot_kill_count", 1),
  5221. (team_set_bot_kill_count, ":killer_agent_team", ":killer_agent_team_bot_kill_count"),
  5222. (else_try), #if killer agent is not bot then increase kill counts of killer agent's player by one.
  5223. (player_is_active, ":killer_agent_player"),
  5224. (player_get_kill_count, ":killer_agent_player_kill_count", ":killer_agent_player"),
  5225. (val_add, ":killer_agent_player_kill_count", 1),
  5226. (player_set_kill_count, ":killer_agent_player", ":killer_agent_player_kill_count"),
  5227. (try_end),
  5228. (try_end),
  5229.  
  5230. (try_begin),
  5231. (ge, ":dead_agent_no", 0),
  5232. (agent_is_human, ":dead_agent_no"),
  5233. (try_begin),
  5234. (agent_is_non_player, ":dead_agent_no"), #if dead agent is bot then increase bot kill counts of dead agent's team by one.
  5235. (agent_get_team, ":dead_agent_team", ":dead_agent_no"),
  5236. (team_get_bot_death_count, ":dead_agent_team_bot_death_count", ":dead_agent_team"),
  5237. (val_add, ":dead_agent_team_bot_death_count", 1),
  5238. (team_set_bot_death_count, ":dead_agent_team", ":dead_agent_team_bot_death_count"),
  5239. (else_try), #if dead agent is not bot then increase death counts of dead agent's player by one.
  5240. (agent_get_player_id, ":dead_agent_player", ":dead_agent_no"),
  5241. (player_is_active, ":dead_agent_player"),
  5242. (player_get_death_count, ":dead_agent_player_death_count", ":dead_agent_player"),
  5243. (val_add, ":dead_agent_player_death_count", 1),
  5244. (player_set_death_count, ":dead_agent_player", ":dead_agent_player_death_count"),
  5245. (try_end),
  5246.  
  5247. (try_begin),
  5248. (assign, ":continue", 0),
  5249.  
  5250. (try_begin),
  5251. (this_or_next|lt, ":killer_agent_no", 0), #if he killed himself (1a(team change) or 1b(self kill)) then decrease kill counts of killer player by one.
  5252. (eq, ":killer_agent_no", ":dead_agent_no"),
  5253. (assign, ":continue", 1),
  5254. (try_end),
  5255.  
  5256. (try_begin),
  5257. (eq, ":killer_agent_team", ":dead_agent_team"), #if he killed a teammate and game mod is not deathmatch then decrease kill counts of killer player by one.
  5258. (neq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
  5259. (neq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  5260. (assign, ":continue", 1),
  5261. (try_end),
  5262.  
  5263. (eq, ":continue", 1),
  5264.  
  5265. (try_begin),
  5266. (ge, ":killer_agent_no", 0),
  5267. (assign, ":responsible_agent", ":killer_agent_no"),
  5268. (else_try),
  5269. (assign, ":responsible_agent", ":dead_agent_no"),
  5270. (try_end),
  5271.  
  5272. (try_begin),
  5273. (ge, ":responsible_agent", 0),
  5274. (neg|agent_is_non_player, ":responsible_agent"),
  5275. (agent_get_player_id, ":responsible_player", ":responsible_agent"),
  5276. (ge, ":responsible_player", 0),
  5277. (player_get_kill_count, ":dead_agent_player_kill_count", ":responsible_player"),
  5278. (val_add, ":dead_agent_player_kill_count", -1),
  5279. (player_set_kill_count, ":responsible_player", ":dead_agent_player_kill_count"),
  5280. (try_end),
  5281. (try_end),
  5282. (try_end),
  5283. (try_end),
  5284. ]),
  5285.  
  5286. #script_warn_player_about_auto_team_balance
  5287. # INPUT: none
  5288. # OUTPUT: none
  5289. ("warn_player_about_auto_team_balance",
  5290. [
  5291. (assign, "$g_multiplayer_message_type", multiplayer_message_type_auto_team_balance_next),
  5292. (start_presentation, "prsnt_multiplayer_message_2"),
  5293. ]),
  5294.  
  5295. #script_check_team_balance
  5296. # INPUT: none
  5297. # OUTPUT: none
  5298. ("check_team_balance",
  5299. [
  5300. (try_begin),
  5301. (multiplayer_is_server),
  5302.  
  5303. (assign, ":number_of_players_at_team_1", 0),
  5304. (assign, ":number_of_players_at_team_2", 0),
  5305. (get_max_players, ":num_players"),
  5306. (try_for_range, ":cur_player", 0, ":num_players"),
  5307. (player_is_active, ":cur_player"),
  5308. (player_get_team_no, ":player_team", ":cur_player"),
  5309. (try_begin),
  5310. (eq, ":player_team", 0),
  5311. (val_add, ":number_of_players_at_team_1", 1),
  5312. (else_try),
  5313. (eq, ":player_team", 1),
  5314. (val_add, ":number_of_players_at_team_2", 1),
  5315. (try_end),
  5316. (try_end),
  5317.  
  5318. (store_sub, ":difference_of_number_of_players", ":number_of_players_at_team_1", ":number_of_players_at_team_2"),
  5319. (assign, ":number_of_players_will_be_moved", 0),
  5320. (try_begin),
  5321. (try_begin),
  5322. (store_mul, ":checked_value", "$g_multiplayer_auto_team_balance_limit", -1),
  5323. (le, ":difference_of_number_of_players", ":checked_value"),
  5324. (store_div, ":number_of_players_will_be_moved", ":difference_of_number_of_players", -2),
  5325. (assign, ":team_with_more_players", 1),
  5326. (assign, ":team_with_less_players", 0),
  5327. (else_try),
  5328. (ge, ":difference_of_number_of_players", "$g_multiplayer_auto_team_balance_limit"),
  5329. (store_div, ":number_of_players_will_be_moved", ":difference_of_number_of_players", 2),
  5330. (assign, ":team_with_more_players", 0),
  5331. (assign, ":team_with_less_players", 1),
  5332. (try_end),
  5333. (try_end),
  5334. #team balance checks are done
  5335. (try_begin),
  5336. (gt, ":number_of_players_will_be_moved", 0),
  5337. (try_begin),
  5338. (eq, "$g_team_balance_next_round", 1), #if warning is given
  5339.  
  5340. #auto team balance starts
  5341. (try_for_range, ":unused", 0, ":number_of_players_will_be_moved"),
  5342. (assign, ":max_player_join_time", 0),
  5343. (assign, ":latest_joined_player_no", -1),
  5344. (get_max_players, ":num_players"),
  5345. (try_for_range, ":player_no", 0, ":num_players"),
  5346. (player_is_active, ":player_no"),
  5347. (player_get_team_no, ":player_team", ":player_no"),
  5348. (eq, ":player_team", ":team_with_more_players"),
  5349. (player_get_slot, ":player_join_time", ":player_no", slot_player_join_time),
  5350. (try_begin),
  5351. (gt, ":player_join_time", ":max_player_join_time"),
  5352. (assign, ":max_player_join_time", ":player_join_time"),
  5353. (assign, ":latest_joined_player_no", ":player_no"),
  5354. (try_end),
  5355. (try_end),
  5356. (try_begin),
  5357. (ge, ":latest_joined_player_no", 0),
  5358. (try_begin),
  5359. #if player is living add +1 to his kill count because he will get -1 because of team change while living.
  5360. (player_get_agent_id, ":latest_joined_agent_id", ":latest_joined_player_no"),
  5361. (ge, ":latest_joined_agent_id", 0),
  5362. (agent_is_alive, ":latest_joined_agent_id"),
  5363.  
  5364. (player_get_kill_count, ":player_kill_count", ":latest_joined_player_no"), #adding 1 to his kill count, because he will lose 1 undeserved kill count for dying during team change
  5365. (val_add, ":player_kill_count", 1),
  5366. (player_set_kill_count, ":latest_joined_player_no", ":player_kill_count"),
  5367.  
  5368. (player_get_death_count, ":player_death_count", ":latest_joined_player_no"), #subtracting 1 to his death count, because he will gain 1 undeserved death count for dying during team change
  5369. (val_sub, ":player_death_count", 1),
  5370. (player_set_death_count, ":latest_joined_player_no", ":player_death_count"),
  5371.  
  5372. (player_get_score, ":player_score", ":latest_joined_player_no"), #adding 1 to his score count, because he will lose 1 undeserved score for dying during team change
  5373. (val_add, ":player_score", 1),
  5374. (player_set_score, ":latest_joined_player_no", ":player_score"),
  5375.  
  5376. (try_for_range, ":player_no", 1, ":num_players"), #0 is server so starting from 1
  5377. (player_is_active, ":player_no"),
  5378. (multiplayer_send_4_int_to_player, ":player_no", multiplayer_event_set_player_score_kill_death, ":latest_joined_player_no", ":player_score", ":player_kill_count", ":player_death_count"),
  5379. (try_end),
  5380.  
  5381. (player_get_value_of_original_items, ":old_items_value", ":latest_joined_player_no"),
  5382. (player_get_gold, ":player_gold", ":latest_joined_player_no"),
  5383. (val_add, ":player_gold", ":old_items_value"),
  5384. (player_set_gold, ":latest_joined_player_no", ":player_gold", multi_max_gold_that_can_be_stored),
  5385. (end_try),
  5386.  
  5387. (player_set_troop_id, ":latest_joined_player_no", -1),
  5388. (player_set_team_no, ":latest_joined_player_no", ":team_with_less_players"),
  5389. (multiplayer_send_message_to_player, ":latest_joined_player_no", multiplayer_event_force_start_team_selection),
  5390. (try_end),
  5391. (try_end),
  5392.  
  5393. #for only server itself-----------------------------------------------------------------------------------------------
  5394. (call_script, "script_show_multiplayer_message", multiplayer_message_type_auto_team_balance_done, 0), #0 is useless here
  5395. #for only server itself-----------------------------------------------------------------------------------------------
  5396. (get_max_players, ":num_players"),
  5397. (try_for_range, ":player_no", 1, ":num_players"),
  5398. (player_is_active, ":player_no"),
  5399. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_show_multiplayer_message, multiplayer_message_type_auto_team_balance_done),
  5400. (try_end),
  5401. (assign, "$g_team_balance_next_round", 0),
  5402. #auto team balance done
  5403. (else_try),
  5404. #tutorial message (next round there will be auto team balance)
  5405. (assign, "$g_team_balance_next_round", 1),
  5406.  
  5407. #for only server itself-----------------------------------------------------------------------------------------------
  5408. (call_script, "script_show_multiplayer_message", multiplayer_message_type_auto_team_balance_next, 0), #0 is useless here
  5409. #for only server itself-----------------------------------------------------------------------------------------------
  5410. (get_max_players, ":num_players"),
  5411. (try_for_range, ":player_no", 1, ":num_players"),
  5412. (player_is_active, ":player_no"),
  5413. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_show_multiplayer_message, multiplayer_message_type_auto_team_balance_next),
  5414. (try_end),
  5415. (try_end),
  5416. (else_try),
  5417. (assign, "$g_team_balance_next_round", 0),
  5418. (try_end),
  5419. (try_end),
  5420. ]),
  5421.  
  5422. #script_check_creating_ladder_dust_effect
  5423. # INPUT: arg1 = instance_id, arg2 = remaining_time
  5424. # OUTPUT: none
  5425. ("check_creating_ladder_dust_effect",
  5426. [
  5427. (store_trigger_param_1, ":instance_id"),
  5428. (store_trigger_param_2, ":remaining_time"),
  5429.  
  5430. (try_begin),
  5431. (lt, ":remaining_time", 15), #less then 0.15 seconds
  5432. (gt, ":remaining_time", 3), #more than 0.03 seconds
  5433.  
  5434. (scene_prop_get_slot, ":smoke_effect_done", ":instance_id", scene_prop_smoke_effect_done),
  5435. (scene_prop_get_slot, ":opened_or_closed", ":instance_id", scene_prop_open_or_close_slot),
  5436.  
  5437. (try_begin),
  5438. (eq, ":smoke_effect_done", 0),
  5439. (eq, ":opened_or_closed", 0),
  5440.  
  5441. (prop_instance_get_position, pos0, ":instance_id"),
  5442.  
  5443. (assign, ":smallest_dist", -1),
  5444. (try_for_range, ":entry_point_no", multi_entry_points_for_usable_items_start, multi_entry_points_for_usable_items_end),
  5445. (entry_point_get_position, pos1, ":entry_point_no"),
  5446. (get_sq_distance_between_positions, ":dist", pos0, pos1),
  5447. (this_or_next|eq, ":smallest_dist", -1),
  5448. (lt, ":dist", ":smallest_dist"),
  5449. (assign, ":smallest_dist", ":dist"),
  5450. (assign, ":nearest_entry_point", ":entry_point_no"),
  5451. (try_end),
  5452.  
  5453. (try_begin),
  5454. (set_fixed_point_multiplier, 100),
  5455.  
  5456. (ge, ":smallest_dist", 0),
  5457. (lt, ":smallest_dist", 22500), #max 15m distance
  5458.  
  5459. (entry_point_get_position, pos1, ":nearest_entry_point"),
  5460. (position_rotate_x, pos1, -90),
  5461.  
  5462. (prop_instance_get_scene_prop_kind, ":scene_prop_kind", ":instance_id"),
  5463. (try_begin),
  5464. (eq, ":scene_prop_kind", "spr_siege_ladder_move_6m"),
  5465. (init_position, pos2),
  5466. (position_set_z, pos2, 300),
  5467. (position_transform_position_to_parent, pos3, pos1, pos2),
  5468. (particle_system_burst, "psys_ladder_dust_6m", pos3, 100),
  5469. (particle_system_burst, "psys_ladder_straw_6m", pos3, 100),
  5470. (else_try),
  5471. (eq, ":scene_prop_kind", "spr_siege_ladder_move_8m"),
  5472. (init_position, pos2),
  5473. (position_set_z, pos2, 400),
  5474. (position_transform_position_to_parent, pos3, pos1, pos2),
  5475. (particle_system_burst, "psys_ladder_dust_8m", pos3, 100),
  5476. (particle_system_burst, "psys_ladder_straw_8m", pos3, 100),
  5477. (else_try),
  5478. (eq, ":scene_prop_kind", "spr_siege_ladder_move_10m"),
  5479. (init_position, pos2),
  5480. (position_set_z, pos2, 500),
  5481. (position_transform_position_to_parent, pos3, pos1, pos2),
  5482. (particle_system_burst, "psys_ladder_dust_10m", pos3, 100),
  5483. (particle_system_burst, "psys_ladder_straw_10m", pos3, 100),
  5484. (else_try),
  5485. (eq, ":scene_prop_kind", "spr_siege_ladder_move_12m"),
  5486. (init_position, pos2),
  5487. (position_set_z, pos2, 600),
  5488. (position_transform_position_to_parent, pos3, pos1, pos2),
  5489. (particle_system_burst, "psys_ladder_dust_12m", pos3, 100),
  5490. (particle_system_burst, "psys_ladder_straw_12m", pos3, 100),
  5491. (else_try),
  5492. (eq, ":scene_prop_kind", "spr_siege_ladder_move_14m"),
  5493. (init_position, pos2),
  5494. (position_set_z, pos2, 700),
  5495. (position_transform_position_to_parent, pos3, pos1, pos2),
  5496. (particle_system_burst, "psys_ladder_dust_14m", pos3, 100),
  5497. (particle_system_burst, "psys_ladder_straw_14m", pos3, 100),
  5498. (try_end),
  5499.  
  5500. (scene_prop_set_slot, ":instance_id", scene_prop_smoke_effect_done, 1),
  5501. (try_end),
  5502. (try_end),
  5503. (try_end),
  5504. ]),
  5505.  
  5506. #script_money_management_after_agent_death
  5507. # INPUT: arg1 = killer_agent_no, arg2 = dead_agent_no
  5508. # OUTPUT: none
  5509. ("money_management_after_agent_death",
  5510. [
  5511. (store_script_param, ":killer_agent_no", 1),
  5512. (store_script_param, ":dead_agent_no", 2),
  5513.  
  5514. (assign, ":dead_agent_player_id", -1),
  5515.  
  5516. (try_begin),
  5517. (multiplayer_is_server),
  5518. (ge, ":killer_agent_no", 0),
  5519. (ge, ":dead_agent_no", 0),
  5520. (agent_is_human, ":dead_agent_no"), #if dead agent is not horse
  5521. (agent_is_human, ":killer_agent_no"), #if killer agent is not horse
  5522. (agent_get_team, ":killer_agent_team", ":killer_agent_no"),
  5523. (agent_get_team, ":dead_agent_team", ":dead_agent_no"),
  5524.  
  5525. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
  5526. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  5527. (neq, ":killer_agent_team", ":dead_agent_team"), #if these agents are enemies
  5528.  
  5529. (neq, ":dead_agent_no", ":killer_agent_no"), #if agents are different, do not remove it is needed because in deathmatch mod, self killing passes here because of this or next.
  5530.  
  5531. (try_begin),
  5532. (neg|agent_is_non_player, ":dead_agent_no"),
  5533. (agent_get_player_id, ":dead_player_no", ":dead_agent_no"),
  5534. (player_get_slot, ":dead_agent_equipment_value", ":dead_player_no", slot_player_total_equipment_value),
  5535. (else_try),
  5536. (assign, ":dead_agent_equipment_value", 0),
  5537. (try_end),
  5538.  
  5539. (assign, ":dead_agent_team_human_players_count", 0),
  5540. (get_max_players, ":num_players"),
  5541. (try_for_range, ":player_no", 0, ":num_players"),
  5542. (player_is_active, ":player_no"),
  5543. (player_get_team_no, ":player_team", ":player_no"),
  5544. (eq, ":player_team", ":dead_agent_team"),
  5545. (val_add, ":dead_agent_team_human_players_count", 1),
  5546. (try_end),
  5547.  
  5548. (try_for_range, ":player_no", 0, ":num_players"),
  5549. (player_is_active, ":player_no"),
  5550.  
  5551. (try_begin),
  5552. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  5553. (eq, "$g_multiplayer_game_type", multiplayer_game_type_destroy),
  5554. (assign, ":one_spawn_per_round_game_type", 1),
  5555. (else_try),
  5556. (assign, ":one_spawn_per_round_game_type", 0),
  5557. (try_end),
  5558.  
  5559. (this_or_next|eq, ":one_spawn_per_round_game_type", 0),
  5560. (this_or_next|player_slot_eq, ":player_no", slot_player_spawned_this_round, 0),
  5561. (player_slot_eq, ":player_no", slot_player_spawned_this_round, 1),
  5562.  
  5563. (player_get_agent_id, ":agent_no", ":player_no"),
  5564. (try_begin),
  5565. (eq, ":agent_no", ":dead_agent_no"), #if this agent is dead agent then get share from total loot. (20% of total equipment value)
  5566. (player_get_gold, ":player_gold", ":player_no"),
  5567.  
  5568. (assign, ":dead_agent_player_id", ":player_no"),
  5569.  
  5570. #dead agent loot share (32%-48%-64%, norm : 48%)
  5571. (store_mul, ":share_of_dead_agent", ":dead_agent_equipment_value", multi_dead_agent_loot_percentage_share),
  5572. (val_div, ":share_of_dead_agent", 100),
  5573. (val_mul, ":share_of_dead_agent", "$g_multiplayer_battle_earnings_multiplier"),
  5574. (val_div, ":share_of_dead_agent", 100),
  5575. (try_begin),
  5576. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch), #(4/3x) share if current mod is deathmatch
  5577. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_duel), #(4/3x) share if current mod is duel
  5578. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch), #(4/3x) share if current mod is team_deathmatch
  5579. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag), #(4/3x) share if current mod is capture the flag
  5580. #INVASION MODE START
  5581. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop), #(4/3x) share if current mod is captain coop
  5582. #INVASION MODE END
  5583. (eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters), #(4/3x) share if current mod is headquarters
  5584. (val_mul, ":share_of_dead_agent", 4),
  5585. (val_div, ":share_of_dead_agent", 3),
  5586. (val_add, ":player_gold", ":share_of_dead_agent"),
  5587. (else_try),
  5588. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_battle), #(2/3x) share if current mod is battle
  5589. (eq, "$g_multiplayer_game_type", multiplayer_game_type_destroy), #(2/3x) share if current mod is fight and destroy
  5590. (val_mul, ":share_of_dead_agent", 2),
  5591. (val_div, ":share_of_dead_agent", 3),
  5592. (val_add, ":player_gold", ":share_of_dead_agent"),
  5593. (else_try),
  5594. (val_add, ":player_gold", ":share_of_dead_agent"), #(3/3x) share if current mod is siege
  5595. (try_end),
  5596. (player_set_gold, ":player_no", ":player_gold", multi_max_gold_that_can_be_stored),
  5597. (else_try),
  5598. (eq, ":agent_no", ":killer_agent_no"), #if this agent is killer agent then get share from total loot. (10% of total equipment value)
  5599. (player_get_gold, ":player_gold", ":player_no"),
  5600.  
  5601. #killer agent standart money (100-150-200, norm : 150)
  5602. (assign, ":killer_agent_standard_money_addition", multi_killer_agent_standard_money_add),
  5603. (val_mul, ":killer_agent_standard_money_addition", "$g_multiplayer_battle_earnings_multiplier"),
  5604. (val_div, ":killer_agent_standard_money_addition", 100),
  5605. (try_begin),
  5606. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch), #(4/3x) share if current mod is deathmatch
  5607. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_duel), #(4/3x) share if current mod is duel
  5608. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch), #(4/3x) share if current mod is team_deathmatch
  5609. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag), #(4/3x) share if current mod is capture the flag
  5610. #INVASION MODE START
  5611. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop), #(4/3x) share if current mod is captain coop
  5612. #INVASION MODE END
  5613. (eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters), #(4/3x) share if current mod is headquarters
  5614. (val_mul, ":killer_agent_standard_money_addition", 4),
  5615. (val_div, ":killer_agent_standard_money_addition", 3),
  5616. (val_add, ":player_gold", ":killer_agent_standard_money_addition"),
  5617. (else_try),
  5618. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_battle), #(2/3x) share if current mod is battle
  5619. (eq, "$g_multiplayer_game_type", multiplayer_game_type_destroy), #(2/3x) share if current mod is fight and destroy
  5620. (val_mul, ":killer_agent_standard_money_addition", 2),
  5621. (val_div, ":killer_agent_standard_money_addition", 3),
  5622. (val_add, ":player_gold", ":killer_agent_standard_money_addition"),
  5623. (else_try),
  5624. (val_add, ":player_gold", ":killer_agent_standard_money_addition"), #(3/3x) share if current mod is siege
  5625. (try_end),
  5626.  
  5627. #killer agent loot share (8%-12%-16%, norm : 12%)
  5628. (store_mul, ":share_of_killer_agent", ":dead_agent_equipment_value", multi_killer_agent_loot_percentage_share),
  5629. (val_div, ":share_of_killer_agent", 100),
  5630. (val_mul, ":share_of_killer_agent", "$g_multiplayer_battle_earnings_multiplier"),
  5631. (val_div, ":share_of_killer_agent", 100),
  5632. (try_begin),
  5633. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch), #(4/3x) share if current mod is deathmatch
  5634. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_duel), #(4/3x) share if current mod is duel
  5635. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch), #(4/3x) share if current mod is team_deathmatch
  5636. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag), #(4/3x) share if current mod is capture the flag
  5637. #INVASION MODE START
  5638. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop), #(4/3x) share if current mod is captain coop
  5639. #INVASION MODE END
  5640. (eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters), #(4/3x) share if current mod is headquarters
  5641. (val_mul, ":share_of_killer_agent", 4),
  5642. (val_div, ":share_of_killer_agent", 3),
  5643. (val_add, ":player_gold", ":share_of_killer_agent"),
  5644. (else_try),
  5645. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_battle), #(2/3x) share if current mod is battle
  5646. (eq, "$g_multiplayer_game_type", multiplayer_game_type_destroy), #(2/3x) share if current mod is fight and destroy
  5647. (val_mul, ":share_of_killer_agent", 2),
  5648. (val_div, ":share_of_killer_agent", 3),
  5649. (val_add, ":player_gold", ":share_of_killer_agent"),
  5650. (else_try),
  5651. (val_add, ":player_gold", ":share_of_killer_agent"), #(3/3x) share if current mod is siege
  5652. (try_end),
  5653.  
  5654. #INVASION MODE START
  5655. (try_begin),
  5656. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  5657. (player_get_gold, ":player_gold", ":player_no"),
  5658. (store_mul, ":share_of_killer_agent", "$g_multiplayer_ccoop_wave_no", 20),
  5659. (val_sub, ":share_of_killer_agent", 20),
  5660. (val_add, ":share_of_killer_agent", multi_killer_captain_coop_add),
  5661. (val_mul, ":share_of_killer_agent", "$g_multiplayer_battle_earnings_multiplier"),
  5662. (val_div, ":share_of_killer_agent", 100),
  5663. (val_add, ":player_gold", ":share_of_killer_agent"),
  5664. (try_end),
  5665. #INVASION MODE END
  5666.  
  5667. (player_set_gold, ":player_no", ":player_gold", multi_max_gold_that_can_be_stored),
  5668. #INVASION MODE START
  5669. (else_try),
  5670. (agent_get_player_id, ":player_no", ":killer_agent_no"),
  5671. (eq, ":player_no", -1), #if killer agent is a bot
  5672. (eq, "$g_multiplayer_is_game_type_captain", 1),
  5673.  
  5674. (agent_get_group, ":agent_group", ":killer_agent_no"),
  5675. (player_is_active, ":agent_group"),
  5676.  
  5677. (player_get_gold, ":player_gold", ":agent_group"),
  5678. (try_begin),
  5679. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  5680. (store_mul, ":share_of_killer_agent", "$g_multiplayer_ccoop_wave_no", 20),
  5681. (val_sub, ":share_of_killer_agent", 20),
  5682. (val_add, ":share_of_killer_agent", multi_killer_captain_coop_add),
  5683. (val_mul, ":share_of_killer_agent", "$g_multiplayer_battle_earnings_multiplier"),
  5684. (val_div, ":share_of_killer_agent", 100),
  5685. (val_add, ":player_gold", ":share_of_killer_agent"),
  5686. (else_try),
  5687. (val_add, ":player_gold", multi_killer_captain_add),
  5688. (try_end),
  5689. (player_set_gold, ":agent_group", ":player_gold", multi_max_gold_that_can_be_stored),
  5690. #INVASION MODE END
  5691. (try_end),
  5692. (try_end),
  5693. (try_end),
  5694.  
  5695. #(below lines added new at 25.11.09 after Armagan decided new money system)
  5696. (try_begin),
  5697. (multiplayer_is_server),
  5698. (neq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  5699. (neq, "$g_multiplayer_game_type", multiplayer_game_type_destroy),
  5700.  
  5701. (ge, ":dead_agent_no", 0),
  5702. (agent_is_human, ":dead_agent_no"), #if dead agent is not horse
  5703. (agent_get_player_id, ":dead_agent_player_id", ":dead_agent_no"),
  5704. (ge, ":dead_agent_player_id", 0),
  5705.  
  5706. (player_get_gold, ":player_gold", ":dead_agent_player_id"),
  5707. (try_begin),
  5708. (store_mul, ":minimum_gold", "$g_multiplayer_initial_gold_multiplier", 10),
  5709. (lt, ":player_gold", ":minimum_gold"),
  5710. (assign, ":player_gold", ":minimum_gold"),
  5711. (try_end),
  5712. (player_set_gold, ":dead_agent_player_id", ":player_gold"),
  5713. (try_end),
  5714. #new money system addition end
  5715. #INVASION MODE START
  5716. (try_begin),
  5717. (multiplayer_is_server),
  5718. #we add gold to player if bot kill enemy
  5719. #multi_killer_captain_add
  5720. (eq, "$g_multiplayer_is_game_type_captain", 1),
  5721. #(store_script_param, ":killer_agent_no", 1),
  5722. #(store_script_param, ":dead_agent_no", 2),
  5723. (ge, ":killer_agent_no", 0),
  5724. (ge, ":dead_agent_no", 0),
  5725. (agent_is_human, ":killer_agent_no"),
  5726. (agent_is_non_player, ":killer_agent_no"),
  5727. (agent_get_group, ":agent_group", ":killer_agent_no"), # get the controlling player of this bot
  5728. (agent_get_team, ":killer_team", ":killer_agent_no"),
  5729. (agent_get_team, ":dead_team", ":dead_agent_no"),
  5730. (neq, ":killer_team", ":dead_team"),
  5731. (player_is_active, ":agent_group"),
  5732. (player_get_gold, ":player_gold", ":agent_group"),
  5733. (try_begin),
  5734. (neq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  5735. (val_add, ":player_gold", multi_killer_captain_add),
  5736. (try_end),
  5737. (player_set_gold, ":agent_group", ":player_gold", multi_max_gold_that_can_be_stored),
  5738. (try_end),
  5739. #INVASION MODE END
  5740. ]),
  5741.  
  5742. ("initialize_aristocracy",
  5743. [
  5744. #LORD OCCUPATIONS, BLOOD RELATIONSHIPS, RENOWN AND REPUTATIONS
  5745.  
  5746. #King ages
  5747. (try_for_range, ":cur_troop", kings_begin, kings_end),
  5748. (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  5749. (store_random_in_range, ":age", 50, 60),
  5750. (troop_set_slot, ":cur_troop", slot_troop_age, ":age"),
  5751. (eq, ":cur_troop", "trp_kingdom_5_lord"),
  5752. (troop_set_slot, ":cur_troop", slot_troop_age, 47),
  5753. (try_end),
  5754.  
  5755. #The first thing - family structure
  5756. #lords 1 to 8 are patriarchs with one live-at-home son and one daughter. They come from one of six possible ancestors, thus making it likely that there will be two sets of siblings
  5757. #lords 9 to 12 are unmarried landowners with sisters
  5758. #lords 13 to 20 are sons who still live in their fathers' houses
  5759. #For the sake of simplicity, we can assume that all male aristocrats in prior generations either married commoners or procured their brides from the Old Country, thus discounting intermarriage
  5760.  
  5761. (try_for_range, ":cur_troop", kingdom_ladies_begin, kingdom_ladies_end),
  5762. (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_lady),
  5763. (try_end),
  5764.  
  5765. (assign, ":cur_lady", "trp_kingdom_1_lady_1"),
  5766.  
  5767. (try_for_range, ":cur_troop", lords_begin, lords_end),
  5768. (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  5769.  
  5770. (store_random_in_range, ":father_age_at_birth", 23, 26),
  5771. # (store_random_in_range, ":mother_age_at_birth", 19, 22),
  5772.  
  5773. (try_begin),
  5774. (is_between, ":cur_troop", "trp_knight_1_1", "trp_knight_2_1"),
  5775. (store_sub, ":npc_seed", ":cur_troop", "trp_knight_1_1"),
  5776. (assign, ":ancestor_seed", 1),
  5777.  
  5778. (else_try),
  5779. (is_between, ":cur_troop", "trp_knight_2_1", "trp_knight_3_1"),
  5780. (store_sub, ":npc_seed", ":cur_troop", "trp_knight_2_1"),
  5781. (assign, ":ancestor_seed", 7),
  5782.  
  5783. (else_try),
  5784. (is_between, ":cur_troop", "trp_knight_3_1", "trp_knight_4_1"),
  5785. (store_sub, ":npc_seed", ":cur_troop", "trp_knight_3_1"),
  5786. (assign, ":ancestor_seed", 13),
  5787.  
  5788. (else_try),
  5789. (is_between, ":cur_troop", "trp_knight_4_1", "trp_knight_5_1"),
  5790. (store_sub, ":npc_seed", ":cur_troop", "trp_knight_4_1"),
  5791. (assign, ":ancestor_seed", 19),
  5792.  
  5793. (else_try),
  5794. (is_between, ":cur_troop", "trp_knight_5_1", "trp_knight_6_1"),
  5795. (store_sub, ":npc_seed", ":cur_troop", "trp_knight_5_1"),
  5796. (assign, ":ancestor_seed", 25),
  5797.  
  5798. (else_try),
  5799. (is_between, ":cur_troop", "trp_knight_6_1", "trp_kingdom_1_pretender"),
  5800. (store_sub, ":npc_seed", ":cur_troop", "trp_knight_6_1"),
  5801. (assign, ":ancestor_seed", 31),
  5802.  
  5803. (try_end),
  5804.  
  5805.  
  5806. (try_begin),
  5807. (lt, ":npc_seed", 8), #NPC seed is the order in the faction
  5808. (assign, ":reputation", ":npc_seed"),
  5809. (store_random_in_range, ":age", 45, 64),
  5810.  
  5811. (store_random_in_range, ":father", 0, 6), #six possible fathers
  5812. (val_add, ":father", ":ancestor_seed"),
  5813. (troop_set_slot, ":cur_troop", slot_troop_father, ":father"),
  5814.  
  5815. #wife
  5816. (troop_set_slot, ":cur_troop", slot_troop_spouse, ":cur_lady"),
  5817. (troop_set_slot, ":cur_lady", slot_troop_spouse, ":cur_troop"),
  5818. (store_random_in_range, ":wife_reputation", 20, 26),
  5819. (try_begin),
  5820. (eq, ":wife_reputation", 20),
  5821. (assign, ":wife_reputation", lrep_conventional),
  5822. (try_end),
  5823. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, ":wife_reputation"),
  5824.  
  5825.  
  5826. (call_script, "script_init_troop_age", ":cur_lady", 49),
  5827. (call_script, "script_add_lady_items", ":cur_lady"),
  5828.  
  5829. (val_add, ":cur_lady", 1),
  5830.  
  5831. #daughter
  5832. (troop_set_slot, ":cur_lady", slot_troop_father, ":cur_troop"),
  5833. (store_sub, ":mother", ":cur_lady", 1),
  5834. (call_script, "script_init_troop_age", ":cur_lady", 19),
  5835. (troop_set_slot, ":cur_lady", slot_troop_mother, ":mother"),
  5836. (store_random_in_range, ":lady_reputation", lrep_conventional, 34), #33% chance of father-derived
  5837. (try_begin),
  5838. (le, ":lady_reputation", 25),
  5839. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, ":lady_reputation"),
  5840. (else_try),
  5841. (eq, ":lady_reputation", 26),
  5842. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_conventional),
  5843. (else_try),
  5844. (eq, ":lady_reputation", 27),
  5845. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_moralist),
  5846. (else_try),
  5847. (assign, ":guardian_reputation", ":reputation"),
  5848. (try_begin),
  5849. (this_or_next|eq, ":guardian_reputation", lrep_martial),
  5850. (eq, ":guardian_reputation", 0),
  5851. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_conventional),
  5852. (else_try),
  5853. (eq, ":guardian_reputation", lrep_quarrelsome),
  5854. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_otherworldly),
  5855. (else_try),
  5856. (eq, ":guardian_reputation", lrep_selfrighteous),
  5857. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_ambitious),
  5858. (else_try),
  5859. (eq, ":guardian_reputation", lrep_cunning),
  5860. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_adventurous),
  5861. (else_try),
  5862. (eq, ":guardian_reputation", lrep_goodnatured),
  5863. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_adventurous),
  5864. (else_try),
  5865. (eq, ":guardian_reputation", lrep_debauched),
  5866. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_ambitious),
  5867. (else_try),
  5868. (eq, ":guardian_reputation", lrep_upstanding),
  5869. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_moralist),
  5870. (try_end),
  5871. (try_end),
  5872.  
  5873. (call_script, "script_add_lady_items", ":cur_lady"),
  5874. (val_add, ":cur_lady", 1),
  5875. #high renown
  5876.  
  5877. (else_try), #Older unmarried lords
  5878. (is_between, ":npc_seed", 8, 12),
  5879.  
  5880. (store_random_in_range, ":age", 25, 36),
  5881. (store_random_in_range, ":reputation", 0, 8),
  5882.  
  5883. (store_random_in_range, ":sister_reputation", 20, 26),
  5884. (try_begin),
  5885. (eq, ":sister_reputation", 20),
  5886. (assign, ":sister_reputation", lrep_conventional),
  5887. (try_end),
  5888. (troop_set_slot, ":cur_lady", slot_lord_reputation_type, ":sister_reputation"),
  5889.  
  5890. (troop_set_slot, ":cur_lady", slot_troop_guardian, ":cur_troop"),
  5891.  
  5892. (call_script, "script_init_troop_age", ":cur_lady", 21),
  5893. (call_script, "script_add_lady_items", ":cur_lady"),
  5894.  
  5895. (val_add, ":cur_lady", 1),
  5896.  
  5897. (else_try), #Younger unmarried lords
  5898. #age is father's minus 20 to 25
  5899. (store_sub, ":father", ":cur_troop", 12),
  5900. (troop_set_slot, ":cur_troop", slot_troop_father, ":father"),
  5901. (troop_get_slot, ":mother", ":father", slot_troop_spouse),
  5902. (troop_set_slot, ":cur_troop", slot_troop_mother, ":mother"),
  5903.  
  5904. (troop_get_slot, ":father_age", ":father", slot_troop_age),
  5905. (store_sub, ":age", ":father_age", ":father_age_at_birth"),
  5906.  
  5907. (try_begin), #50% chance of having father's rep
  5908. (store_random_in_range, ":reputation", 0, 16),
  5909.  
  5910. (gt, ":reputation", 7),
  5911. (troop_get_slot, ":reputation", ":father", slot_lord_reputation_type),
  5912. (try_end),
  5913. (try_end),
  5914.  
  5915. (try_begin),
  5916. (eq, ":reputation", 0),
  5917. (assign, ":reputation", 1),
  5918. (try_end),
  5919.  
  5920. (troop_set_slot, ":cur_troop", slot_lord_reputation_type, ":reputation"),
  5921.  
  5922. (call_script, "script_init_troop_age", ":cur_troop", ":age"),
  5923. (try_end),
  5924.  
  5925. (try_begin),
  5926. (eq, "$cheat_mode", 1),
  5927. (assign, reg3, "$cheat_mode"),
  5928. (display_message, "@{!}DEBUG -- Assigned lord reputation and relations"),
  5929.  
  5930. # (display_message, "str_assigned_lord_reputation_and_relations_cheat_mode_reg3"), #This string can be removed
  5931. (try_end),
  5932.  
  5933. (try_for_range, ":cur_troop", pretenders_begin, pretenders_end),
  5934. (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_inactive_pretender),
  5935. (store_random_in_range, ":age", 25, 30),
  5936. (troop_set_slot, ":cur_troop", slot_troop_age, ":age"),
  5937. (eq, ":cur_troop", "trp_kingdom_5_pretender"),
  5938. (troop_set_slot, ":cur_troop", slot_troop_age, 45),
  5939. (try_end),
  5940. ]),
  5941.  
  5942.  
  5943.  
  5944.  
  5945.  
  5946. ("initialize_trade_routes",
  5947. [
  5948. #SARGOTH - 10 routes
  5949. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_2"), #Sargoth - Tihr
  5950. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_4"), #Sargoth - Suno
  5951. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_12"), #Sargoth - Wercheg
  5952. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_11"), #Sargoth - Curaw
  5953. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_8"), #Sargoth - Reyvadin
  5954. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_13"), #Sargoth - Rivacheg
  5955. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_7"), #Sargoth - Uxkhal
  5956. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_9"), #Sargoth - Khudan
  5957. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_6"), #Sargoth - Praven
  5958. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_15"), #Sargoth - Yalen
  5959. (call_script, "script_set_trade_route_between_centers", "p_town_1", "p_town_16"), #Sargoth - Dhirim
  5960.  
  5961. #TIHR- 8 Routes
  5962. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_4"), #Tihr- Suno
  5963. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_6"), #Tihr - Praven
  5964. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_7"), #Tihr - Uxkhal
  5965. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_15"), #Tihr - Yalen
  5966. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_12"), #Tihr - Wercheg
  5967. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_8"), #Tihr - Reyvadin
  5968. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_11"), #Tihr - Curaw
  5969. (call_script, "script_set_trade_route_between_centers", "p_town_2", "p_town_16"), #Thir - Dhirim
  5970.  
  5971. #VELUCA - 8 Routes
  5972. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_7"), #Veluca- Uxkhal
  5973. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_5"), #Veluca - Jelkala
  5974. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_15"), #Veluca - Yalen
  5975. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_16"), #Veluca - Dhirim
  5976. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_14"), #Veluca - Halmar
  5977. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_4"), #Veluca - Suno
  5978. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_19"), #Veluca - Shariz
  5979. (call_script, "script_set_trade_route_between_centers", "p_town_3", "p_town_6"), #Veluca - Praven
  5980.  
  5981. #SUNO - 11 routes
  5982. #Sargoth, Tihr, Veluca
  5983. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_12"), #Suno - Wercheg
  5984. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_8"), #Suno - Reyvadin
  5985. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_11"), #Suno - Curaw
  5986. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_6"), #Suno - Praven
  5987. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_7"), #Suno - Uxkhal
  5988. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_16"), #Suno - Dhirim
  5989. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_5"), #Suno - Jelkala
  5990. (call_script, "script_set_trade_route_between_centers", "p_town_4", "p_town_15"), #Suno - Yalen
  5991.  
  5992. #JELKALA - 6 ROUTES
  5993. #Veluca, Suno
  5994. (call_script, "script_set_trade_route_between_centers", "p_town_5", "p_town_15"), #Jelkala - Yalen
  5995. (call_script, "script_set_trade_route_between_centers", "p_town_5", "p_town_6"), #Jelkala - Praven
  5996. (call_script, "script_set_trade_route_between_centers", "p_town_5", "p_town_7"), #Jelkala - Uxkhal
  5997. (call_script, "script_set_trade_route_between_centers", "p_town_5", "p_town_19"), #Jelkala - Shariz
  5998.  
  5999. #PRAVEN - 7 ROUTES
  6000. #Tihr, Veluca, Suno, Jelkala
  6001. (call_script, "script_set_trade_route_between_centers", "p_town_6", "p_town_7"), #Praven - Uxkhal
  6002. (call_script, "script_set_trade_route_between_centers", "p_town_6", "p_town_15"), #Praven - Yalen
  6003. (call_script, "script_set_trade_route_between_centers", "p_town_6", "p_town_16"), #Praven - Dhirim
  6004.  
  6005. #UXKHAL - 9 Routes
  6006. #Sargoth, Tihr, Suno, Jelkala, Praven
  6007. (call_script, "script_set_trade_route_between_centers", "p_town_7", "p_town_15"), #Yalen
  6008. (call_script, "script_set_trade_route_between_centers", "p_town_7", "p_town_16"), #Dhirim
  6009. (call_script, "script_set_trade_route_between_centers", "p_town_7", "p_town_19"), #Shariz
  6010. (call_script, "script_set_trade_route_between_centers", "p_town_7", "p_town_14"), #Halmar
  6011.  
  6012. #REYVADIN - 9 Routes
  6013. #Suno, Sargoth
  6014. (call_script, "script_set_trade_route_between_centers", "p_town_8", "p_town_9"), #Khudan
  6015. (call_script, "script_set_trade_route_between_centers", "p_town_8", "p_town_11"), #Curaw
  6016. (call_script, "script_set_trade_route_between_centers", "p_town_8", "p_town_12"), #Wercheg
  6017. (call_script, "script_set_trade_route_between_centers", "p_town_8", "p_town_13"), #Rivacheg
  6018. (call_script, "script_set_trade_route_between_centers", "p_town_8", "p_town_16"), #Dhirim
  6019. (call_script, "script_set_trade_route_between_centers", "p_town_8", "p_town_18"), #Narra
  6020. (call_script, "script_set_trade_route_between_centers", "p_town_8", "p_town_17"), #Ichamur
  6021.  
  6022. #KHUDAN - 9 Routes
  6023. #Sargoth, Reyvadin
  6024. (call_script, "script_set_trade_route_between_centers", "p_town_9", "p_town_11"), #Curaw
  6025. (call_script, "script_set_trade_route_between_centers", "p_town_9", "p_town_13"), #Rivacheg
  6026. (call_script, "script_set_trade_route_between_centers", "p_town_9", "p_town_12"), #Wercheg
  6027. (call_script, "script_set_trade_route_between_centers", "p_town_9", "p_town_17"), #Ichamur
  6028. (call_script, "script_set_trade_route_between_centers", "p_town_9", "p_town_10"), #Tulga
  6029. (call_script, "script_set_trade_route_between_centers", "p_town_9", "p_town_16"), #Dhirim
  6030. (call_script, "script_set_trade_route_between_centers", "p_town_9", "p_town_18"), #Narra
  6031.  
  6032. #TULGA - 7 Routes
  6033. #Khudan
  6034. (call_script, "script_set_trade_route_between_centers", "p_town_10", "p_town_17"), #Ichamur
  6035. (call_script, "script_set_trade_route_between_centers", "p_town_10", "p_town_18"), #Narra
  6036. (call_script, "script_set_trade_route_between_centers", "p_town_10", "p_town_22"), #Bariyye
  6037. (call_script, "script_set_trade_route_between_centers", "p_town_10", "p_town_21"), #Ahmerrad
  6038. (call_script, "script_set_trade_route_between_centers", "p_town_10", "p_town_14"), #Halmar
  6039. (call_script, "script_set_trade_route_between_centers", "p_town_10", "p_town_20"), #Durquba
  6040.  
  6041. #CURAW - 9 Routes
  6042. #Khudan, Reyvadin, Sargoth, Suno
  6043. (call_script, "script_set_trade_route_between_centers", "p_town_11", "p_town_12"), #Wercheg
  6044. (call_script, "script_set_trade_route_between_centers", "p_town_11", "p_town_13"), #Rivacheg
  6045. (call_script, "script_set_trade_route_between_centers", "p_town_11", "p_town_14"), #Halmar
  6046. (call_script, "script_set_trade_route_between_centers", "p_town_11", "p_town_16"), #Dhirim
  6047. (call_script, "script_set_trade_route_between_centers", "p_town_11", "p_town_17"), #Ichamur
  6048.  
  6049. #WERCHEG - 7 Routes
  6050. #Sargoth, Suno, Reyvadin, Khudan, Curaw, Tihr
  6051. (call_script, "script_set_trade_route_between_centers", "p_town_12", "p_town_13"), #Rivacheg
  6052.  
  6053. #RIVACHEG - 6 Routes
  6054. #Sargoth, Reyvadin, Khudan, Curaw, Wercheg
  6055. (call_script, "script_set_trade_route_between_centers", "p_town_13", "p_town_17"), #Ichamur
  6056.  
  6057. #HALMAR- 11 Routes
  6058. #Veluca, Uxkhal, Tulga, Curaw
  6059. (call_script, "script_set_trade_route_between_centers", "p_town_14", "p_town_17"), #Ichamur
  6060. (call_script, "script_set_trade_route_between_centers", "p_town_14", "p_town_18"), #Narra
  6061. (call_script, "script_set_trade_route_between_centers", "p_town_14", "p_town_21"), #Ahmerrad
  6062. (call_script, "script_set_trade_route_between_centers", "p_town_14", "p_town_22"), #Bariyye
  6063. (call_script, "script_set_trade_route_between_centers", "p_town_14", "p_town_20"), #Durquba
  6064. (call_script, "script_set_trade_route_between_centers", "p_town_14", "p_town_19"), #Shariz
  6065. (call_script, "script_set_trade_route_between_centers", "p_town_14", "p_town_16"), #Dhirim
  6066.  
  6067. #YALEN - 7 Routes
  6068. #Sargoth, Tihr, Veluca, Suno, Jelkala, Praven, Uxkhal
  6069.  
  6070. #DHIRIM - 13 Routes
  6071. #Sargoth, Thir, Veluca, Suno, Praven, Uxkhal, Reyvadin, Khudan, Curaw, Halmar
  6072. (call_script, "script_set_trade_route_between_centers", "p_town_16", "p_town_18"), #Narra
  6073. (call_script, "script_set_trade_route_between_centers", "p_town_16", "p_town_20"), #Durquba
  6074. (call_script, "script_set_trade_route_between_centers", "p_town_16", "p_town_19"), #Shariz
  6075.  
  6076. #ICHAMUR - 7 Routes
  6077. #Reyvadin, Khudan, Tulga, Curaw, Rivacheg, Halmar
  6078. (call_script, "script_set_trade_route_between_centers", "p_town_17", "p_town_18"), #Narra
  6079.  
  6080. #NARRA - 9 Routes
  6081. #Reyvadin, Khudan, Tulga, Halmar, Dhirim, Ichamur
  6082. (call_script, "script_set_trade_route_between_centers", "p_town_18", "p_town_20"), #Durquba
  6083. (call_script, "script_set_trade_route_between_centers", "p_town_18", "p_town_21"), #Ahmerrad
  6084. (call_script, "script_set_trade_route_between_centers", "p_town_18", "p_town_22"), #Bariyye
  6085.  
  6086. #SHARIZ - 8 Routes
  6087. #Veluca, Jelkala, Uxkhal, Halmar, Dhirim
  6088. (call_script, "script_set_trade_route_between_centers", "p_town_19", "p_town_20"), #Durquba
  6089. (call_script, "script_set_trade_route_between_centers", "p_town_19", "p_town_21"), #Ahmerrad
  6090. (call_script, "script_set_trade_route_between_centers", "p_town_19", "p_town_22"), #Bariyye
  6091.  
  6092. #DURQUBA - 7 Routes
  6093. #Tulga, Halmar, Dhirim, Narra, Shariz
  6094. (call_script, "script_set_trade_route_between_centers", "p_town_20", "p_town_21"), #Ahmerrad
  6095. (call_script, "script_set_trade_route_between_centers", "p_town_20", "p_town_22"), #Bariyye
  6096.  
  6097. #AHMERRAD - 6 Routes
  6098. #Tulga, Halmar, Narra, Shariz, Durquba
  6099. (call_script, "script_set_trade_route_between_centers", "p_town_21", "p_town_22"), #Bariyye
  6100.  
  6101. #BARIYYE - 6 Routes
  6102. #Tulga, Halmar, Narra, Shariz, Durquba, Ahmerrad
  6103. ]),
  6104.  
  6105.  
  6106.  
  6107. ("initialize_faction_troop_types",
  6108. [
  6109.  
  6110. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  6111. (faction_get_slot, ":culture", ":faction_no", slot_faction_culture),
  6112.  
  6113. (faction_get_slot, ":troop", ":culture", slot_faction_tier_1_troop),
  6114. (faction_set_slot, ":faction_no", slot_faction_tier_1_troop, ":troop"),
  6115. (faction_get_slot, ":troop", ":culture", slot_faction_tier_2_troop),
  6116. (faction_set_slot, ":faction_no", slot_faction_tier_2_troop, ":troop"),
  6117. (faction_get_slot, ":troop", ":culture", slot_faction_tier_3_troop),
  6118. (faction_set_slot, ":faction_no", slot_faction_tier_3_troop, ":troop"),
  6119. (faction_get_slot, ":troop", ":culture", slot_faction_tier_4_troop),
  6120. (faction_set_slot, ":faction_no", slot_faction_tier_4_troop, ":troop"),
  6121. (faction_get_slot, ":troop", ":culture", slot_faction_tier_5_troop),
  6122. (faction_set_slot, ":faction_no", slot_faction_tier_5_troop, ":troop"),
  6123.  
  6124. (try_begin),
  6125. (faction_slot_eq, ":faction_no", slot_faction_culture, "fac_culture_1"),
  6126.  
  6127. (faction_set_slot, ":faction_no", slot_faction_deserter_troop, "trp_swadian_deserter"),
  6128. (faction_set_slot, ":faction_no", slot_faction_guard_troop, "trp_swadian_sergeant"),
  6129. (faction_set_slot, ":faction_no", slot_faction_messenger_troop, "trp_swadian_messenger"),
  6130. (faction_set_slot, ":faction_no", slot_faction_prison_guard_troop, "trp_swadian_prison_guard"),
  6131. (faction_set_slot, ":faction_no", slot_faction_castle_guard_troop, "trp_swadian_castle_guard"),
  6132. (faction_set_slot, ":faction_no", slot_faction_reinforcements_a, "pt_kingdom_1_reinforcements_a"),
  6133. (faction_set_slot, ":faction_no", slot_faction_reinforcements_b, "pt_kingdom_1_reinforcements_b"),
  6134. (faction_set_slot, ":faction_no", slot_faction_reinforcements_c, "pt_kingdom_1_reinforcements_c"),
  6135. (else_try),
  6136. (faction_slot_eq, ":faction_no", slot_faction_culture, "fac_culture_2"),
  6137.  
  6138. (faction_set_slot, ":faction_no", slot_faction_deserter_troop, "trp_vaegir_deserter"),
  6139. (faction_set_slot, ":faction_no", slot_faction_guard_troop, "trp_vaegir_guard"),
  6140. (faction_set_slot, ":faction_no", slot_faction_messenger_troop, "trp_vaegir_messenger"),
  6141. (faction_set_slot, ":faction_no", slot_faction_prison_guard_troop, "trp_vaegir_prison_guard"),
  6142. (faction_set_slot, ":faction_no", slot_faction_castle_guard_troop, "trp_vaegir_castle_guard"),
  6143. (faction_set_slot, ":faction_no", slot_faction_reinforcements_a, "pt_kingdom_2_reinforcements_a"),
  6144. (faction_set_slot, ":faction_no", slot_faction_reinforcements_b, "pt_kingdom_2_reinforcements_b"),
  6145. (faction_set_slot, ":faction_no", slot_faction_reinforcements_c, "pt_kingdom_2_reinforcements_c"),
  6146. (else_try),
  6147. (faction_slot_eq, ":faction_no", slot_faction_culture, "fac_culture_3"),
  6148.  
  6149. (faction_set_slot, ":faction_no", slot_faction_deserter_troop, "trp_khergit_deserter"),
  6150. (faction_set_slot, ":faction_no", slot_faction_guard_troop, "trp_khergit_horseman"),
  6151. (faction_set_slot, ":faction_no", slot_faction_messenger_troop, "trp_khergit_messenger"),
  6152. (faction_set_slot, ":faction_no", slot_faction_prison_guard_troop, "trp_khergit_prison_guard"),
  6153. (faction_set_slot, ":faction_no", slot_faction_castle_guard_troop, "trp_khergit_castle_guard"),
  6154. (faction_set_slot, ":faction_no", slot_faction_reinforcements_a, "pt_kingdom_3_reinforcements_a"),
  6155. (faction_set_slot, ":faction_no", slot_faction_reinforcements_b, "pt_kingdom_3_reinforcements_b"),
  6156. (faction_set_slot, ":faction_no", slot_faction_reinforcements_c, "pt_kingdom_3_reinforcements_c"),
  6157. (else_try),
  6158. (faction_slot_eq, ":faction_no", slot_faction_culture, "fac_culture_4"),
  6159.  
  6160. (faction_set_slot, ":faction_no", slot_faction_deserter_troop, "trp_nord_deserter"),
  6161. (faction_set_slot, ":faction_no", slot_faction_guard_troop, "trp_nord_warrior"),
  6162. (faction_set_slot, ":faction_no", slot_faction_messenger_troop, "trp_nord_messenger"),
  6163. (faction_set_slot, ":faction_no", slot_faction_prison_guard_troop, "trp_nord_prison_guard"),
  6164. (faction_set_slot, ":faction_no", slot_faction_castle_guard_troop, "trp_nord_castle_guard"),
  6165. (faction_set_slot, ":faction_no", slot_faction_reinforcements_a, "pt_kingdom_4_reinforcements_a"),
  6166. (faction_set_slot, ":faction_no", slot_faction_reinforcements_b, "pt_kingdom_4_reinforcements_b"),
  6167. (faction_set_slot, ":faction_no", slot_faction_reinforcements_c, "pt_kingdom_4_reinforcements_c"),
  6168. (else_try),
  6169. (faction_slot_eq, ":faction_no", slot_faction_culture, "fac_culture_5"),
  6170.  
  6171. (faction_set_slot, ":faction_no", slot_faction_deserter_troop, "trp_rhodok_deserter"),
  6172. (faction_set_slot, ":faction_no", slot_faction_guard_troop, "trp_rhodok_veteran_spearman"),
  6173. (faction_set_slot, ":faction_no", slot_faction_messenger_troop, "trp_rhodok_messenger"),
  6174. (faction_set_slot, ":faction_no", slot_faction_prison_guard_troop, "trp_rhodok_prison_guard"),
  6175. (faction_set_slot, ":faction_no", slot_faction_castle_guard_troop, "trp_rhodok_castle_guard"),
  6176. (faction_set_slot, ":faction_no", slot_faction_reinforcements_a, "pt_kingdom_5_reinforcements_a"),
  6177. (faction_set_slot, ":faction_no", slot_faction_reinforcements_b, "pt_kingdom_5_reinforcements_b"),
  6178. (faction_set_slot, ":faction_no", slot_faction_reinforcements_c, "pt_kingdom_5_reinforcements_c"),
  6179. (else_try),
  6180. (faction_slot_eq, ":faction_no", slot_faction_culture, "fac_culture_6"),
  6181.  
  6182. (faction_set_slot, ":faction_no", slot_faction_deserter_troop, "trp_sarranid_deserter"),
  6183. (faction_set_slot, ":faction_no", slot_faction_guard_troop, "trp_sarranid_castle_guard"),
  6184. (faction_set_slot, ":faction_no", slot_faction_messenger_troop, "trp_sarranid_messenger"),
  6185. (faction_set_slot, ":faction_no", slot_faction_prison_guard_troop, "trp_sarranid_prison_guard"),
  6186. (faction_set_slot, ":faction_no", slot_faction_castle_guard_troop, "trp_sarranid_castle_guard"),
  6187. (faction_set_slot, ":faction_no", slot_faction_reinforcements_a, "pt_kingdom_6_reinforcements_a"),
  6188. (faction_set_slot, ":faction_no", slot_faction_reinforcements_b, "pt_kingdom_6_reinforcements_b"),
  6189. (faction_set_slot, ":faction_no", slot_faction_reinforcements_c, "pt_kingdom_6_reinforcements_c"),
  6190. (try_end),
  6191. (try_end),
  6192. ]),
  6193.  
  6194. ("initialize_item_info",
  6195. [
  6196. # Setting food bonuses - these have been changed to incentivize using historical rations. Bread is the most cost-efficient
  6197. #Staples
  6198. (item_set_slot, "itm_bread", slot_item_food_bonus, 8), #brought up from 4
  6199. (item_set_slot, "itm_grain", slot_item_food_bonus, 2), #new - can be boiled as porridge
  6200.  
  6201. #Fat sources - preserved
  6202. (item_set_slot, "itm_smoked_fish", slot_item_food_bonus, 4),
  6203. (item_set_slot, "itm_dried_meat", slot_item_food_bonus, 5),
  6204. (item_set_slot, "itm_cheese", slot_item_food_bonus, 5),
  6205. (item_set_slot, "itm_sausages", slot_item_food_bonus, 5),
  6206. (item_set_slot, "itm_butter", slot_item_food_bonus, 4), #brought down from 8
  6207.  
  6208. #Fat sources - perishable
  6209. (item_set_slot, "itm_chicken", slot_item_food_bonus, 8), #brought up from 7
  6210. (item_set_slot, "itm_cattle_meat", slot_item_food_bonus, 7), #brought down from 7
  6211. (item_set_slot, "itm_pork", slot_item_food_bonus, 6), #brought down from 6
  6212.  
  6213. #Produce
  6214. (item_set_slot, "itm_raw_olives", slot_item_food_bonus, 1),
  6215. (item_set_slot, "itm_cabbages", slot_item_food_bonus, 2),
  6216. (item_set_slot, "itm_raw_grapes", slot_item_food_bonus, 3),
  6217. (item_set_slot, "itm_apples", slot_item_food_bonus, 4), #brought down from 5
  6218.  
  6219. #Sweet items
  6220. (item_set_slot, "itm_raw_date_fruit", slot_item_food_bonus, 4), #brought down from 8
  6221. (item_set_slot, "itm_honey", slot_item_food_bonus, 6), #brought down from 12
  6222.  
  6223. (item_set_slot, "itm_wine", slot_item_food_bonus, 5),
  6224. (item_set_slot, "itm_ale", slot_item_food_bonus, 4),
  6225.  
  6226. #Item economic settings
  6227. (item_set_slot, "itm_grain", slot_item_urban_demand, 20),
  6228. (item_set_slot, "itm_grain", slot_item_rural_demand, 20),
  6229. (item_set_slot, "itm_grain", slot_item_desert_demand, 20),
  6230. (item_set_slot, "itm_grain", slot_item_production_slot, slot_center_acres_grain),
  6231. (item_set_slot, "itm_grain", slot_item_production_string, "str_acres_grain"),
  6232. (item_set_slot, "itm_grain", slot_item_base_price, 30),
  6233.  
  6234. (item_set_slot, "itm_bread", slot_item_urban_demand, 30),
  6235. (item_set_slot, "itm_bread", slot_item_rural_demand, 30),
  6236. (item_set_slot, "itm_bread", slot_item_desert_demand, 30),
  6237. (item_set_slot, "itm_bread", slot_item_production_slot, slot_center_mills),
  6238. (item_set_slot, "itm_bread", slot_item_production_string, "str_mills"),
  6239. (item_set_slot, "itm_bread", slot_item_primary_raw_material, "itm_grain"),
  6240. (item_set_slot, "itm_bread", slot_item_input_number, 6),
  6241. (item_set_slot, "itm_bread", slot_item_output_per_run, 6),
  6242. (item_set_slot, "itm_bread", slot_item_overhead_per_run, 30),
  6243. (item_set_slot, "itm_bread", slot_item_base_price, 50),
  6244. (item_set_slot, "itm_bread", slot_item_enterprise_building_cost, 1500),
  6245.  
  6246. (item_set_slot, "itm_ale", slot_item_urban_demand, 10),
  6247. (item_set_slot, "itm_ale", slot_item_rural_demand, 15),
  6248. (item_set_slot, "itm_ale", slot_item_desert_demand, 0),
  6249. (item_set_slot, "itm_ale", slot_item_production_slot, slot_center_breweries),
  6250. (item_set_slot, "itm_ale", slot_item_production_string, "str_breweries"),
  6251. (item_set_slot, "itm_ale", slot_item_base_price, 120),
  6252. (item_set_slot, "itm_ale", slot_item_primary_raw_material, "itm_grain"),
  6253. (item_set_slot, "itm_ale", slot_item_input_number, 1),
  6254. (item_set_slot, "itm_ale", slot_item_output_per_run, 2),
  6255. (item_set_slot, "itm_ale", slot_item_overhead_per_run, 50),
  6256. (item_set_slot, "itm_ale", slot_item_base_price, 120),
  6257. (item_set_slot, "itm_ale", slot_item_enterprise_building_cost, 2500),
  6258.  
  6259. (item_set_slot, "itm_wine", slot_item_urban_demand, 15),
  6260. (item_set_slot, "itm_wine", slot_item_rural_demand, 10),
  6261. (item_set_slot, "itm_wine", slot_item_desert_demand, 25),
  6262. (item_set_slot, "itm_wine", slot_item_production_slot, slot_center_wine_presses),
  6263. (item_set_slot, "itm_wine", slot_item_production_string, "str_presses"),
  6264. (item_set_slot, "itm_wine", slot_item_primary_raw_material, "itm_raw_grapes"),
  6265. (item_set_slot, "itm_wine", slot_item_input_number, 4),
  6266. (item_set_slot, "itm_wine", slot_item_output_per_run, 2),
  6267. (item_set_slot, "itm_wine", slot_item_overhead_per_run, 60),
  6268. (item_set_slot, "itm_wine", slot_item_base_price, 220),
  6269. (item_set_slot, "itm_wine", slot_item_enterprise_building_cost, 5000),
  6270.  
  6271. (item_set_slot, "itm_raw_grapes", slot_item_urban_demand, 0),
  6272. (item_set_slot, "itm_raw_grapes", slot_item_rural_demand, 0),
  6273. (item_set_slot, "itm_raw_grapes", slot_item_desert_demand, 0),
  6274. (item_set_slot, "itm_raw_grapes", slot_item_production_slot, slot_center_acres_vineyard),
  6275. (item_set_slot, "itm_raw_grapes", slot_item_production_string, "str_acres_orchard"),
  6276. (item_set_slot, "itm_raw_grapes", slot_item_is_raw_material_only_for, "itm_wine"),
  6277. (item_set_slot, "itm_raw_grapes", slot_item_base_price, 75),
  6278.  
  6279. (item_set_slot, "itm_apples", slot_item_urban_demand, 4),
  6280. (item_set_slot, "itm_apples", slot_item_rural_demand, 4),
  6281. (item_set_slot, "itm_apples", slot_item_desert_demand, 0),
  6282. (item_set_slot, "itm_apples", slot_item_production_slot, slot_center_acres_vineyard),
  6283. (item_set_slot, "itm_apples", slot_item_production_string, "str_acres_orchard"),
  6284. (item_set_slot, "itm_apples", slot_item_base_price, 44),
  6285.  
  6286. (item_set_slot, "itm_smoked_fish", slot_item_urban_demand, 16),
  6287. (item_set_slot, "itm_smoked_fish", slot_item_rural_demand, 16),
  6288. (item_set_slot, "itm_smoked_fish", slot_item_desert_demand, 16),
  6289. (item_set_slot, "itm_smoked_fish", slot_item_production_slot, slot_center_fishing_fleet),
  6290. (item_set_slot, "itm_smoked_fish", slot_item_production_string, "str_boats"),
  6291.  
  6292. (item_set_slot, "itm_salt", slot_item_urban_demand, 5),
  6293. (item_set_slot, "itm_salt", slot_item_rural_demand, 3),
  6294. (item_set_slot, "itm_salt", slot_item_desert_demand, -1),
  6295. (item_set_slot, "itm_salt", slot_item_production_slot, slot_center_salt_pans),
  6296. (item_set_slot, "itm_salt", slot_item_production_string, "str_pans"),
  6297.  
  6298. (item_set_slot, "itm_dried_meat", slot_item_urban_demand, 20),
  6299. (item_set_slot, "itm_dried_meat", slot_item_rural_demand, 5),
  6300. (item_set_slot, "itm_dried_meat", slot_item_desert_demand, -1),
  6301. (item_set_slot, "itm_dried_meat", slot_item_production_slot, slot_center_head_cattle),
  6302. (item_set_slot, "itm_dried_meat", slot_item_production_string, "str_head_cattle"),
  6303.  
  6304. (item_set_slot, "itm_cattle_meat", slot_item_urban_demand, 12),
  6305. (item_set_slot, "itm_cattle_meat", slot_item_rural_demand, 3),
  6306. (item_set_slot, "itm_cattle_meat", slot_item_desert_demand, -1),
  6307. (item_set_slot, "itm_cattle_meat", slot_item_production_slot, slot_center_head_cattle),
  6308. (item_set_slot, "itm_cattle_meat", slot_item_production_string, "str_head_cattle"),
  6309.  
  6310. (item_set_slot, "itm_cheese", slot_item_urban_demand, 10),
  6311. (item_set_slot, "itm_cheese", slot_item_rural_demand, 10),
  6312. (item_set_slot, "itm_cheese", slot_item_desert_demand, 10),
  6313. (item_set_slot, "itm_cheese", slot_item_production_slot, slot_center_head_cattle),
  6314. (item_set_slot, "itm_cheese", slot_item_production_string, "str_head_cattle"),
  6315.  
  6316. (item_set_slot, "itm_butter", slot_item_urban_demand, 2),
  6317. (item_set_slot, "itm_butter", slot_item_rural_demand, 2),
  6318. (item_set_slot, "itm_butter", slot_item_desert_demand, 2),
  6319. (item_set_slot, "itm_butter", slot_item_production_slot, slot_center_head_cattle),
  6320. (item_set_slot, "itm_butter", slot_item_production_string, "str_head_cattle"),
  6321.  
  6322. (item_set_slot, "itm_leatherwork", slot_item_urban_demand, 10),
  6323. (item_set_slot, "itm_leatherwork", slot_item_rural_demand, 10),
  6324. (item_set_slot, "itm_leatherwork", slot_item_desert_demand, 10),
  6325. (item_set_slot, "itm_leatherwork", slot_item_production_slot, slot_center_tanneries),
  6326. (item_set_slot, "itm_leatherwork", slot_item_production_string, "str_tanneries"),
  6327. (item_set_slot, "itm_leatherwork", slot_item_primary_raw_material, "itm_raw_leather"),
  6328. (item_set_slot, "itm_leatherwork", slot_item_input_number, 3),
  6329. (item_set_slot, "itm_leatherwork", slot_item_output_per_run, 3),
  6330. (item_set_slot, "itm_leatherwork", slot_item_overhead_per_run, 50),
  6331. (item_set_slot, "itm_leatherwork", slot_item_base_price, 220),
  6332. (item_set_slot, "itm_leatherwork", slot_item_enterprise_building_cost, 8000),
  6333.  
  6334. (item_set_slot, "itm_raw_leather", slot_item_urban_demand, 0),
  6335. (item_set_slot, "itm_raw_leather", slot_item_rural_demand, 0),
  6336. (item_set_slot, "itm_raw_leather", slot_item_desert_demand, 0),
  6337. (item_set_slot, "itm_raw_leather", slot_item_production_slot, slot_center_head_cattle),
  6338. (item_set_slot, "itm_raw_leather", slot_item_production_string, "str_head_cattle"),
  6339. (item_set_slot, "itm_raw_leather", slot_item_is_raw_material_only_for, "itm_leatherwork"),
  6340. (item_set_slot, "itm_raw_leather", slot_item_base_price, 120),
  6341.  
  6342. (item_set_slot, "itm_sausages", slot_item_urban_demand, 12),
  6343. (item_set_slot, "itm_sausages", slot_item_rural_demand, 3),
  6344. (item_set_slot, "itm_sausages", slot_item_desert_demand, -1),
  6345. (item_set_slot, "itm_sausages", slot_item_production_slot, slot_center_head_sheep),
  6346. (item_set_slot, "itm_sausages", slot_item_production_string, "str_head_sheep"),
  6347.  
  6348. (item_set_slot, "itm_wool", slot_item_urban_demand, 0),
  6349. (item_set_slot, "itm_wool", slot_item_rural_demand, 0),
  6350. (item_set_slot, "itm_wool", slot_item_desert_demand, 0),
  6351. (item_set_slot, "itm_wool", slot_item_production_slot, slot_center_head_sheep),
  6352. (item_set_slot, "itm_wool", slot_item_production_string, "str_head_sheep"),
  6353. (item_set_slot, "itm_wool", slot_item_is_raw_material_only_for, "itm_wool_cloth"),
  6354. (item_set_slot, "itm_wool", slot_item_base_price,130),
  6355.  
  6356. (item_set_slot, "itm_wool_cloth", slot_item_urban_demand, 15),
  6357. (item_set_slot, "itm_wool_cloth", slot_item_rural_demand, 20),
  6358. (item_set_slot, "itm_wool_cloth", slot_item_desert_demand, 5),
  6359. (item_set_slot, "itm_wool_cloth", slot_item_production_slot, slot_center_wool_looms),
  6360. (item_set_slot, "itm_wool_cloth", slot_item_production_string, "str_looms"),
  6361. (item_set_slot, "itm_wool_cloth", slot_item_primary_raw_material, "itm_wool"),
  6362. (item_set_slot, "itm_wool_cloth", slot_item_input_number, 2),
  6363. (item_set_slot, "itm_wool_cloth", slot_item_output_per_run, 2),
  6364. (item_set_slot, "itm_wool_cloth", slot_item_overhead_per_run, 120),
  6365. (item_set_slot, "itm_wool_cloth", slot_item_base_price, 250),
  6366. (item_set_slot, "itm_wool_cloth", slot_item_enterprise_building_cost, 6000),
  6367.  
  6368. (item_set_slot, "itm_raw_flax", slot_item_urban_demand, 0),
  6369. (item_set_slot, "itm_raw_flax", slot_item_rural_demand, 0),
  6370. (item_set_slot, "itm_raw_flax", slot_item_desert_demand, 0),
  6371. (item_set_slot, "itm_raw_flax", slot_item_production_slot, slot_center_acres_flax),
  6372. (item_set_slot, "itm_raw_flax", slot_item_production_string, "str_acres_flax"),
  6373. (item_set_slot, "itm_raw_flax", slot_item_is_raw_material_only_for, "itm_linen"),
  6374. (item_set_slot, "itm_raw_flax", slot_item_base_price, 150),
  6375.  
  6376. (item_set_slot, "itm_linen", slot_item_urban_demand, 7),
  6377. (item_set_slot, "itm_linen", slot_item_rural_demand, 3),
  6378. (item_set_slot, "itm_linen", slot_item_desert_demand, 15),
  6379. (item_set_slot, "itm_linen", slot_item_production_slot, slot_center_linen_looms),
  6380. (item_set_slot, "itm_linen", slot_item_production_string, "str_looms"),
  6381. (item_set_slot, "itm_linen", slot_item_primary_raw_material, "itm_raw_flax"),
  6382. (item_set_slot, "itm_linen", slot_item_input_number, 2),
  6383. (item_set_slot, "itm_linen", slot_item_output_per_run, 2),
  6384. (item_set_slot, "itm_linen", slot_item_overhead_per_run, 120),
  6385. (item_set_slot, "itm_linen", slot_item_base_price, 250),
  6386. (item_set_slot, "itm_linen", slot_item_enterprise_building_cost, 6000),
  6387.  
  6388. (item_set_slot, "itm_iron", slot_item_urban_demand, 0),
  6389. (item_set_slot, "itm_iron", slot_item_rural_demand, 0),
  6390. (item_set_slot, "itm_iron", slot_item_desert_demand, 0),
  6391. (item_set_slot, "itm_iron", slot_item_production_slot, slot_center_iron_deposits),
  6392. (item_set_slot, "itm_iron", slot_item_production_string, "str_deposits"),
  6393. (item_set_slot, "itm_iron", slot_item_is_raw_material_only_for, "itm_tools"),
  6394. (item_set_slot, "itm_iron", slot_item_base_price, 264),
  6395.  
  6396. (item_set_slot, "itm_tools", slot_item_urban_demand, 7),
  6397. (item_set_slot, "itm_tools", slot_item_rural_demand, 7),
  6398. (item_set_slot, "itm_tools", slot_item_desert_demand, 7),
  6399. (item_set_slot, "itm_tools", slot_item_production_slot, slot_center_smithies),
  6400. (item_set_slot, "itm_tools", slot_item_production_string, "str_smithies"),
  6401. (item_set_slot, "itm_tools", slot_item_primary_raw_material, "itm_iron"),
  6402. (item_set_slot, "itm_tools", slot_item_input_number, 2),
  6403. (item_set_slot, "itm_tools", slot_item_output_per_run, 2),
  6404. (item_set_slot, "itm_tools", slot_item_overhead_per_run, 60),
  6405. (item_set_slot, "itm_tools", slot_item_base_price, 410),
  6406. (item_set_slot, "itm_tools", slot_item_enterprise_building_cost, 3500),
  6407.  
  6408. (item_set_slot, "itm_pottery", slot_item_urban_demand, 15),
  6409. (item_set_slot, "itm_pottery", slot_item_rural_demand, 5),
  6410. (item_set_slot, "itm_pottery", slot_item_desert_demand, -1),
  6411. (item_set_slot, "itm_pottery", slot_item_production_slot, slot_center_pottery_kilns),
  6412. (item_set_slot, "itm_pottery", slot_item_production_string, "str_kilns"),
  6413.  
  6414. (item_set_slot, "itm_oil", slot_item_urban_demand, 10),
  6415. (item_set_slot, "itm_oil", slot_item_rural_demand, 5),
  6416. (item_set_slot, "itm_oil", slot_item_desert_demand, -1),
  6417. (item_set_slot, "itm_oil", slot_item_production_slot, slot_center_olive_presses),
  6418. (item_set_slot, "itm_oil", slot_item_production_string, "str_presses"),
  6419. (item_set_slot, "itm_oil", slot_item_primary_raw_material, "itm_raw_olives"),
  6420. (item_set_slot, "itm_oil", slot_item_input_number, 6),
  6421. (item_set_slot, "itm_oil", slot_item_output_per_run, 2),
  6422. (item_set_slot, "itm_oil", slot_item_overhead_per_run, 80),
  6423. (item_set_slot, "itm_oil", slot_item_base_price, 450),
  6424. (item_set_slot, "itm_oil", slot_item_enterprise_building_cost, 4500),
  6425.  
  6426. (item_set_slot, "itm_raw_olives", slot_item_urban_demand, 0),
  6427. (item_set_slot, "itm_raw_olives", slot_item_rural_demand, 0),
  6428. (item_set_slot, "itm_raw_olives", slot_item_desert_demand, 0),
  6429. (item_set_slot, "itm_raw_olives", slot_item_production_slot, slot_center_acres_olives),
  6430. (item_set_slot, "itm_raw_olives", slot_item_production_string, "str_olive_groves"),
  6431. (item_set_slot, "itm_raw_olives", slot_item_is_raw_material_only_for, "itm_oil"),
  6432. (item_set_slot, "itm_raw_olives", slot_item_base_price, 100),
  6433.  
  6434. (item_set_slot, "itm_velvet", slot_item_urban_demand, 5),
  6435. (item_set_slot, "itm_velvet", slot_item_rural_demand, 0),
  6436. (item_set_slot, "itm_velvet", slot_item_desert_demand, -1),
  6437. (item_set_slot, "itm_velvet", slot_item_production_slot, slot_center_silk_looms),
  6438. (item_set_slot, "itm_velvet", slot_item_production_string, "str_looms"),
  6439. (item_set_slot, "itm_velvet", slot_item_primary_raw_material, "itm_raw_silk"),
  6440. (item_set_slot, "itm_velvet", slot_item_input_number, 2),
  6441. (item_set_slot, "itm_velvet", slot_item_output_per_run, 2),
  6442. (item_set_slot, "itm_velvet", slot_item_overhead_per_run, 160),
  6443. (item_set_slot, "itm_velvet", slot_item_base_price, 1025),
  6444. (item_set_slot, "itm_velvet", slot_item_secondary_raw_material, "itm_raw_dyes"),
  6445. (item_set_slot, "itm_velvet", slot_item_enterprise_building_cost, 10000),
  6446.  
  6447. (item_set_slot, "itm_raw_silk", slot_item_urban_demand, 0),
  6448. (item_set_slot, "itm_raw_silk", slot_item_rural_demand, 0),
  6449. (item_set_slot, "itm_raw_silk", slot_item_production_slot, slot_center_silk_farms),
  6450. (item_set_slot, "itm_raw_silk", slot_item_production_string, "str_mulberry_groves"),
  6451. (item_set_slot, "itm_raw_silk", slot_item_is_raw_material_only_for, "itm_velvet"),
  6452. (item_set_slot, "itm_raw_silk", slot_item_base_price, 600),
  6453.  
  6454. (item_set_slot, "itm_raw_dyes", slot_item_urban_demand, 3),
  6455. (item_set_slot, "itm_raw_dyes", slot_item_rural_demand, 0),
  6456. (item_set_slot, "itm_raw_dyes", slot_item_desert_demand, -1),
  6457. (item_set_slot, "itm_raw_dyes", slot_item_production_string, "str_caravans"),
  6458. (item_set_slot, "itm_raw_dyes", slot_item_base_price, 200),
  6459.  
  6460. (item_set_slot, "itm_spice", slot_item_urban_demand, 5),
  6461. (item_set_slot, "itm_spice", slot_item_rural_demand, 0),
  6462. (item_set_slot, "itm_spice", slot_item_desert_demand, 5),
  6463. (item_set_slot, "itm_spice", slot_item_production_string, "str_caravans"),
  6464.  
  6465. (item_set_slot, "itm_furs", slot_item_urban_demand, 5),
  6466. (item_set_slot, "itm_furs", slot_item_rural_demand, 0),
  6467. (item_set_slot, "itm_furs", slot_item_desert_demand, -1),
  6468. (item_set_slot, "itm_furs", slot_item_production_slot, slot_center_fur_traps),
  6469. (item_set_slot, "itm_furs", slot_item_production_string, "str_traps"),
  6470.  
  6471. (item_set_slot, "itm_honey", slot_item_urban_demand, 12),
  6472. (item_set_slot, "itm_honey", slot_item_rural_demand, 3),
  6473. (item_set_slot, "itm_honey", slot_item_desert_demand, -1),
  6474. (item_set_slot, "itm_honey", slot_item_production_slot, slot_center_apiaries),
  6475. (item_set_slot, "itm_honey", slot_item_production_string, "str_hives"),
  6476.  
  6477. (item_set_slot, "itm_cabbages", slot_item_urban_demand, 7),
  6478. (item_set_slot, "itm_cabbages", slot_item_rural_demand, 7),
  6479. (item_set_slot, "itm_cabbages", slot_item_desert_demand, 7),
  6480. (item_set_slot, "itm_cabbages", slot_item_production_slot, slot_center_household_gardens),
  6481. (item_set_slot, "itm_cabbages", slot_item_production_string, "str_gardens"),
  6482.  
  6483. (item_set_slot, "itm_raw_date_fruit", slot_item_urban_demand, 7),
  6484. (item_set_slot, "itm_raw_date_fruit", slot_item_rural_demand, 7),
  6485. (item_set_slot, "itm_raw_date_fruit", slot_item_desert_demand, 7),
  6486. (item_set_slot, "itm_raw_date_fruit", slot_item_production_slot, slot_center_household_gardens),
  6487. (item_set_slot, "itm_raw_date_fruit", slot_item_production_string, "str_acres_oasis"),
  6488.  
  6489. (item_set_slot, "itm_chicken", slot_item_urban_demand, 40),
  6490. (item_set_slot, "itm_chicken", slot_item_rural_demand, 10),
  6491. (item_set_slot, "itm_chicken", slot_item_desert_demand, -1),
  6492.  
  6493. (item_set_slot, "itm_pork", slot_item_urban_demand, 40),
  6494. (item_set_slot, "itm_pork", slot_item_rural_demand, 10),
  6495. (item_set_slot, "itm_pork", slot_item_desert_demand, -1),
  6496.  
  6497. # Setting book intelligence requirements
  6498. (item_set_slot, "itm_book_tactics", slot_item_intelligence_requirement, 9),
  6499. (item_set_slot, "itm_book_persuasion", slot_item_intelligence_requirement, 8),
  6500. (item_set_slot, "itm_book_leadership", slot_item_intelligence_requirement, 7),
  6501. (item_set_slot, "itm_book_intelligence", slot_item_intelligence_requirement, 10),
  6502. (item_set_slot, "itm_book_trade", slot_item_intelligence_requirement, 11),
  6503. (item_set_slot, "itm_book_weapon_mastery", slot_item_intelligence_requirement, 9),
  6504. (item_set_slot, "itm_book_engineering", slot_item_intelligence_requirement, 12),
  6505.  
  6506. (item_set_slot, "itm_book_wound_treatment_reference", slot_item_intelligence_requirement, 10),
  6507. (item_set_slot, "itm_book_training_reference", slot_item_intelligence_requirement, 10),
  6508. (item_set_slot, "itm_book_surgery_reference", slot_item_intelligence_requirement, 10),
  6509. ]),
  6510.  
  6511.  
  6512. ("initialize_town_arena_info",
  6513. [
  6514. (try_for_range, ":town_no", towns_begin, towns_end),
  6515. (party_set_slot, ":town_no", slot_town_tournament_max_teams, 4),
  6516. (party_set_slot, ":town_no", slot_town_tournament_max_team_size, 8),
  6517. (try_end),
  6518. (party_set_slot, "p_town_6", slot_town_tournament_max_team_size, 2),
  6519.  
  6520. (party_set_slot,"p_town_1", slot_town_arena_melee_1_num_teams, 2),
  6521. (party_set_slot,"p_town_1", slot_town_arena_melee_1_team_size, 1),
  6522. (party_set_slot,"p_town_1", slot_town_arena_melee_2_num_teams, 4),
  6523. (party_set_slot,"p_town_1", slot_town_arena_melee_2_team_size, 1),
  6524. (party_set_slot,"p_town_1", slot_town_arena_melee_3_num_teams, 4),
  6525. (party_set_slot,"p_town_1", slot_town_arena_melee_3_team_size, 1),
  6526.  
  6527. (party_set_slot,"p_town_2", slot_town_arena_melee_1_num_teams, 4),
  6528. (party_set_slot,"p_town_2", slot_town_arena_melee_1_team_size, 4),
  6529. (party_set_slot,"p_town_2", slot_town_arena_melee_2_num_teams, 4),
  6530. (party_set_slot,"p_town_2", slot_town_arena_melee_2_team_size, 6),
  6531. (party_set_slot,"p_town_2", slot_town_arena_melee_3_num_teams, 4),
  6532. (party_set_slot,"p_town_2", slot_town_arena_melee_3_team_size, 8),
  6533.  
  6534. (party_set_slot,"p_town_3", slot_town_arena_melee_1_num_teams, 2),
  6535. (party_set_slot,"p_town_3", slot_town_arena_melee_1_team_size, 8),
  6536. (party_set_slot,"p_town_3", slot_town_arena_melee_2_num_teams, 2),
  6537. (party_set_slot,"p_town_3", slot_town_arena_melee_2_team_size, 8),
  6538. (party_set_slot,"p_town_3", slot_town_arena_melee_3_num_teams, 2),
  6539. (party_set_slot,"p_town_3", slot_town_arena_melee_3_team_size, 8),
  6540.  
  6541. (party_set_slot,"p_town_4", slot_town_arena_melee_1_num_teams, 2),
  6542. (party_set_slot,"p_town_4", slot_town_arena_melee_1_team_size, 8),
  6543. (party_set_slot,"p_town_4", slot_town_arena_melee_2_num_teams, 3),
  6544. (party_set_slot,"p_town_4", slot_town_arena_melee_2_team_size, 8),
  6545. (party_set_slot,"p_town_4", slot_town_arena_melee_3_num_teams, 2),
  6546. (party_set_slot,"p_town_4", slot_town_arena_melee_3_team_size, 5),
  6547.  
  6548. (party_set_slot,"p_town_5", slot_town_arena_melee_1_num_teams, 2),
  6549. (party_set_slot,"p_town_5", slot_town_arena_melee_1_team_size, 3),
  6550. (party_set_slot,"p_town_5", slot_town_arena_melee_2_num_teams, 2),
  6551. (party_set_slot,"p_town_5", slot_town_arena_melee_2_team_size, 5),
  6552. (party_set_slot,"p_town_5", slot_town_arena_melee_3_num_teams, 2),
  6553. (party_set_slot,"p_town_5", slot_town_arena_melee_3_team_size, 8),
  6554.  
  6555. (party_set_slot,"p_town_6", slot_town_arena_melee_1_num_teams, 2),
  6556. (party_set_slot,"p_town_6", slot_town_arena_melee_1_team_size, 4),
  6557. (party_set_slot,"p_town_6", slot_town_arena_melee_2_num_teams, 3),
  6558. (party_set_slot,"p_town_6", slot_town_arena_melee_2_team_size, 4),
  6559. (party_set_slot,"p_town_6", slot_town_arena_melee_3_num_teams, 3),
  6560. (party_set_slot,"p_town_6", slot_town_arena_melee_3_team_size, 6),
  6561.  
  6562. (party_set_slot,"p_town_7", slot_town_arena_melee_1_num_teams, 4),
  6563. (party_set_slot,"p_town_7", slot_town_arena_melee_1_team_size, 4),
  6564. (party_set_slot,"p_town_7", slot_town_arena_melee_2_num_teams, 4),
  6565. (party_set_slot,"p_town_7", slot_town_arena_melee_2_team_size, 6),
  6566. (party_set_slot,"p_town_7", slot_town_arena_melee_3_num_teams, 4),
  6567. (party_set_slot,"p_town_7", slot_town_arena_melee_3_team_size, 8),
  6568.  
  6569. (party_set_slot,"p_town_8", slot_town_arena_melee_1_num_teams, 3),
  6570. (party_set_slot,"p_town_8", slot_town_arena_melee_1_team_size, 1),
  6571. (party_set_slot,"p_town_8", slot_town_arena_melee_2_num_teams, 3),
  6572. (party_set_slot,"p_town_8", slot_town_arena_melee_2_team_size, 3),
  6573. (party_set_slot,"p_town_8", slot_town_arena_melee_3_num_teams, 3),
  6574. (party_set_slot,"p_town_8", slot_town_arena_melee_3_team_size, 7),
  6575.  
  6576. (party_set_slot,"p_town_9", slot_town_arena_melee_1_num_teams, 2),
  6577. (party_set_slot,"p_town_9", slot_town_arena_melee_1_team_size, 2),
  6578. (party_set_slot,"p_town_9", slot_town_arena_melee_2_num_teams, 2),
  6579. (party_set_slot,"p_town_9", slot_town_arena_melee_2_team_size, 5),
  6580. (party_set_slot,"p_town_9", slot_town_arena_melee_3_num_teams, 2),
  6581. (party_set_slot,"p_town_9", slot_town_arena_melee_3_team_size, 8),
  6582.  
  6583. (party_set_slot,"p_town_10", slot_town_arena_melee_1_num_teams, 2),
  6584. (party_set_slot,"p_town_10", slot_town_arena_melee_1_team_size, 3),
  6585. (party_set_slot,"p_town_10", slot_town_arena_melee_2_num_teams, 2),
  6586. (party_set_slot,"p_town_10", slot_town_arena_melee_2_team_size, 5),
  6587. (party_set_slot,"p_town_10", slot_town_arena_melee_3_num_teams, 2),
  6588. (party_set_slot,"p_town_10", slot_town_arena_melee_3_team_size, 8),
  6589.  
  6590. (party_set_slot,"p_town_11", slot_town_arena_melee_1_num_teams, 2),
  6591. (party_set_slot,"p_town_11", slot_town_arena_melee_1_team_size, 8),
  6592. (party_set_slot,"p_town_11", slot_town_arena_melee_2_num_teams, 3),
  6593. (party_set_slot,"p_town_11", slot_town_arena_melee_2_team_size, 4),
  6594. (party_set_slot,"p_town_11", slot_town_arena_melee_3_num_teams, 3),
  6595. (party_set_slot,"p_town_11", slot_town_arena_melee_3_team_size, 6),
  6596.  
  6597. (party_set_slot,"p_town_12", slot_town_arena_melee_1_num_teams, 3),
  6598. (party_set_slot,"p_town_12", slot_town_arena_melee_1_team_size, 8),
  6599. (party_set_slot,"p_town_12", slot_town_arena_melee_2_num_teams, 4),
  6600. (party_set_slot,"p_town_12", slot_town_arena_melee_2_team_size, 6),
  6601. (party_set_slot,"p_town_12", slot_town_arena_melee_3_num_teams, 4),
  6602. (party_set_slot,"p_town_12", slot_town_arena_melee_3_team_size, 5),
  6603.  
  6604. (party_set_slot,"p_town_13", slot_town_arena_melee_1_num_teams, 2),
  6605. (party_set_slot,"p_town_13", slot_town_arena_melee_1_team_size, 8),
  6606. (party_set_slot,"p_town_13", slot_town_arena_melee_2_num_teams, 4),
  6607. (party_set_slot,"p_town_13", slot_town_arena_melee_2_team_size, 5),
  6608. (party_set_slot,"p_town_13", slot_town_arena_melee_3_num_teams, 4),
  6609. (party_set_slot,"p_town_13", slot_town_arena_melee_3_team_size, 7),
  6610.  
  6611. (party_set_slot,"p_town_14", slot_town_arena_melee_1_num_teams, 2),
  6612. (party_set_slot,"p_town_14", slot_town_arena_melee_1_team_size, 4),
  6613. (party_set_slot,"p_town_14", slot_town_arena_melee_2_num_teams, 2),
  6614. (party_set_slot,"p_town_14", slot_town_arena_melee_2_team_size, 5),
  6615. (party_set_slot,"p_town_14", slot_town_arena_melee_3_num_teams, 2),
  6616. (party_set_slot,"p_town_14", slot_town_arena_melee_3_team_size, 6),
  6617.  
  6618. (party_set_slot,"p_town_15", slot_town_arena_melee_1_num_teams, 2),
  6619. (party_set_slot,"p_town_15", slot_town_arena_melee_1_team_size, 8),
  6620. (party_set_slot,"p_town_15", slot_town_arena_melee_2_num_teams, 3),
  6621. (party_set_slot,"p_town_15", slot_town_arena_melee_2_team_size, 4),
  6622. (party_set_slot,"p_town_15", slot_town_arena_melee_3_num_teams, 3),
  6623. (party_set_slot,"p_town_15", slot_town_arena_melee_3_team_size, 6),
  6624.  
  6625. (party_set_slot,"p_town_16", slot_town_arena_melee_1_num_teams, 3),
  6626. (party_set_slot,"p_town_16", slot_town_arena_melee_1_team_size, 8),
  6627. (party_set_slot,"p_town_16", slot_town_arena_melee_2_num_teams, 4),
  6628. (party_set_slot,"p_town_16", slot_town_arena_melee_2_team_size, 6),
  6629. (party_set_slot,"p_town_16", slot_town_arena_melee_3_num_teams, 4),
  6630. (party_set_slot,"p_town_16", slot_town_arena_melee_3_team_size, 5),
  6631.  
  6632. (party_set_slot,"p_town_17", slot_town_arena_melee_1_num_teams, 2),
  6633. (party_set_slot,"p_town_17", slot_town_arena_melee_1_team_size, 8),
  6634. (party_set_slot,"p_town_17", slot_town_arena_melee_2_num_teams, 4),
  6635. (party_set_slot,"p_town_17", slot_town_arena_melee_2_team_size, 5),
  6636. (party_set_slot,"p_town_17", slot_town_arena_melee_3_num_teams, 4),
  6637. (party_set_slot,"p_town_17", slot_town_arena_melee_3_team_size, 7),
  6638.  
  6639. (party_set_slot,"p_town_18", slot_town_arena_melee_1_num_teams, 2),
  6640. (party_set_slot,"p_town_18", slot_town_arena_melee_1_team_size, 4),
  6641. (party_set_slot,"p_town_18", slot_town_arena_melee_2_num_teams, 2),
  6642. (party_set_slot,"p_town_18", slot_town_arena_melee_2_team_size, 5),
  6643. (party_set_slot,"p_town_18", slot_town_arena_melee_3_num_teams, 2),
  6644. (party_set_slot,"p_town_18", slot_town_arena_melee_3_team_size, 6),
  6645.  
  6646. (party_set_slot,"p_town_19", slot_town_arena_melee_1_num_teams, 2),
  6647. (party_set_slot,"p_town_19", slot_town_arena_melee_1_team_size, 8),
  6648. (party_set_slot,"p_town_19", slot_town_arena_melee_2_num_teams, 4),
  6649. (party_set_slot,"p_town_19", slot_town_arena_melee_2_team_size, 4),
  6650. (party_set_slot,"p_town_19", slot_town_arena_melee_3_num_teams, 4),
  6651. (party_set_slot,"p_town_19", slot_town_arena_melee_3_team_size, 6),
  6652.  
  6653. (party_set_slot,"p_town_20", slot_town_arena_melee_1_num_teams, 4),
  6654. (party_set_slot,"p_town_20", slot_town_arena_melee_1_team_size, 2),
  6655. (party_set_slot,"p_town_20", slot_town_arena_melee_2_num_teams, 4),
  6656. (party_set_slot,"p_town_20", slot_town_arena_melee_2_team_size, 4),
  6657. (party_set_slot,"p_town_20", slot_town_arena_melee_3_num_teams, 4),
  6658. (party_set_slot,"p_town_20", slot_town_arena_melee_3_team_size, 6),
  6659.  
  6660. (party_set_slot,"p_town_21", slot_town_arena_melee_1_num_teams, 3),
  6661. (party_set_slot,"p_town_21", slot_town_arena_melee_1_team_size, 3),
  6662. (party_set_slot,"p_town_21", slot_town_arena_melee_2_num_teams, 2),
  6663. (party_set_slot,"p_town_21", slot_town_arena_melee_2_team_size, 6),
  6664. (party_set_slot,"p_town_21", slot_town_arena_melee_3_num_teams, 2),
  6665. (party_set_slot,"p_town_21", slot_town_arena_melee_3_team_size, 8),
  6666.  
  6667. (party_set_slot,"p_town_22", slot_town_arena_melee_1_num_teams, 4),
  6668. (party_set_slot,"p_town_22", slot_town_arena_melee_1_team_size, 3),
  6669. (party_set_slot,"p_town_22", slot_town_arena_melee_2_num_teams, 3),
  6670. (party_set_slot,"p_town_22", slot_town_arena_melee_2_team_size, 4),
  6671. (party_set_slot,"p_town_22", slot_town_arena_melee_3_num_teams, 2),
  6672. (party_set_slot,"p_town_22", slot_town_arena_melee_3_team_size, 6),
  6673. ]),
  6674.  
  6675. ("initialize_banner_info",
  6676. [
  6677. #Banners
  6678. (try_for_range, ":cur_troop", active_npcs_begin, kingdom_ladies_end),
  6679. (troop_set_slot, ":cur_troop", slot_troop_custom_banner_flag_type, -1),
  6680. (troop_set_slot, ":cur_troop", slot_troop_custom_banner_map_flag_type, -1),
  6681. (try_end),
  6682. (troop_set_slot, "trp_player", slot_troop_custom_banner_flag_type, -1),
  6683. (troop_set_slot, "trp_player", slot_troop_custom_banner_map_flag_type, -1),
  6684. (store_random_in_range, "$g_election_date", 0, 45), #setting a random election date
  6685. #Assigning global constant
  6686. #(call_script, "script_store_average_center_value_per_faction"),
  6687.  
  6688. (troop_set_slot, "trp_player", slot_troop_custom_banner_bg_color_1, 0xFFFFFFFF),
  6689. (troop_set_slot, "trp_player", slot_troop_custom_banner_bg_color_2, 0xFFFFFFFF),
  6690. (troop_set_slot, "trp_player", slot_troop_custom_banner_charge_color_1, 0xFFFFFFFF),
  6691. (troop_set_slot, "trp_player", slot_troop_custom_banner_charge_color_2, 0xFFFFFFFF),
  6692. (troop_set_slot, "trp_player", slot_troop_custom_banner_charge_color_3, 0xFFFFFFFF),
  6693. (troop_set_slot, "trp_player", slot_troop_custom_banner_charge_color_4, 0xFFFFFFFF),
  6694.  
  6695. #Setting background colors for banners
  6696. (troop_set_slot, "trp_banner_background_color_array", 0, 0xFF8f4531),
  6697. (troop_set_slot, "trp_banner_background_color_array", 1, 0xFFd9d7d1),
  6698. (troop_set_slot, "trp_banner_background_color_array", 2, 0xFF373736),
  6699. (troop_set_slot, "trp_banner_background_color_array", 3, 0xFFa48b28),
  6700. (troop_set_slot, "trp_banner_background_color_array", 4, 0xFF497735),
  6701. (troop_set_slot, "trp_banner_background_color_array", 5, 0xFF82362d),
  6702. (troop_set_slot, "trp_banner_background_color_array", 6, 0xFF793329),
  6703. (troop_set_slot, "trp_banner_background_color_array", 7, 0xFF262521),
  6704. (troop_set_slot, "trp_banner_background_color_array", 8, 0xFFd9dad1),
  6705. (troop_set_slot, "trp_banner_background_color_array", 9, 0xFF524563),
  6706. (troop_set_slot, "trp_banner_background_color_array", 10, 0xFF91312c),
  6707. (troop_set_slot, "trp_banner_background_color_array", 11, 0xFFafa231),
  6708. (troop_set_slot, "trp_banner_background_color_array", 12, 0xFF706d3c),
  6709. (troop_set_slot, "trp_banner_background_color_array", 13, 0xFFd6d3ce),
  6710. (troop_set_slot, "trp_banner_background_color_array", 14, 0xFF521c08),
  6711. (troop_set_slot, "trp_banner_background_color_array", 15, 0xFF394584),
  6712. (troop_set_slot, "trp_banner_background_color_array", 16, 0xFF42662e),
  6713. (troop_set_slot, "trp_banner_background_color_array", 17, 0xFFdfded6),
  6714. (troop_set_slot, "trp_banner_background_color_array", 18, 0xFF292724),
  6715. (troop_set_slot, "trp_banner_background_color_array", 19, 0xFF58611b),
  6716. (troop_set_slot, "trp_banner_background_color_array", 20, 0xFF313a67),
  6717. (troop_set_slot, "trp_banner_background_color_array", 21, 0xFF9c924a),
  6718. (troop_set_slot, "trp_banner_background_color_array", 22, 0xFF998b39),
  6719. (troop_set_slot, "trp_banner_background_color_array", 23, 0xFF365168),
  6720. (troop_set_slot, "trp_banner_background_color_array", 24, 0xFFd6d3ce),
  6721. (troop_set_slot, "trp_banner_background_color_array", 25, 0xFF94a642),
  6722. (troop_set_slot, "trp_banner_background_color_array", 26, 0xFF944131),
  6723. (troop_set_slot, "trp_banner_background_color_array", 27, 0xFF893b34),
  6724. (troop_set_slot, "trp_banner_background_color_array", 28, 0xFF425510),
  6725. (troop_set_slot, "trp_banner_background_color_array", 29, 0xFF94452e),
  6726. (troop_set_slot, "trp_banner_background_color_array", 30, 0xFF475a94),
  6727. (troop_set_slot, "trp_banner_background_color_array", 31, 0xFFd1b231),
  6728. (troop_set_slot, "trp_banner_background_color_array", 32, 0xFFe1e2df),
  6729. (troop_set_slot, "trp_banner_background_color_array", 33, 0xFF997c1e),
  6730. (troop_set_slot, "trp_banner_background_color_array", 34, 0xFFc6b74d),
  6731. (troop_set_slot, "trp_banner_background_color_array", 35, 0xFFad9a18),
  6732. (troop_set_slot, "trp_banner_background_color_array", 36, 0xFF212421),
  6733. (troop_set_slot, "trp_banner_background_color_array", 37, 0xFF8c2021),
  6734. (troop_set_slot, "trp_banner_background_color_array", 38, 0xFF4d7136),
  6735. (troop_set_slot, "trp_banner_background_color_array", 39, 0xFF395d84),
  6736. (troop_set_slot, "trp_banner_background_color_array", 40, 0xFF527539),
  6737. (troop_set_slot, "trp_banner_background_color_array", 41, 0xFF9c3c39),
  6738. (troop_set_slot, "trp_banner_background_color_array", 42, 0xFF42518c),
  6739. (troop_set_slot, "trp_banner_background_color_array", 43, 0xFFa46a2c),
  6740. (troop_set_slot, "trp_banner_background_color_array", 44, 0xFF9f5141),
  6741. (troop_set_slot, "trp_banner_background_color_array", 45, 0xFF2c6189),
  6742. (troop_set_slot, "trp_banner_background_color_array", 46, 0xFF556421),
  6743. (troop_set_slot, "trp_banner_background_color_array", 47, 0xFF9d621e),
  6744. (troop_set_slot, "trp_banner_background_color_array", 48, 0xFFdeded6),
  6745. (troop_set_slot, "trp_banner_background_color_array", 49, 0xFF6e4891),
  6746. (troop_set_slot, "trp_banner_background_color_array", 50, 0xFF865a29),
  6747. (troop_set_slot, "trp_banner_background_color_array", 51, 0xFFdedfd9),
  6748. (troop_set_slot, "trp_banner_background_color_array", 52, 0xFF524273),
  6749. (troop_set_slot, "trp_banner_background_color_array", 53, 0xFF8c3821),
  6750. (troop_set_slot, "trp_banner_background_color_array", 54, 0xFFd1cec6),
  6751. (troop_set_slot, "trp_banner_background_color_array", 55, 0xFF313031),
  6752. (troop_set_slot, "trp_banner_background_color_array", 56, 0xFF47620d),
  6753. (troop_set_slot, "trp_banner_background_color_array", 57, 0xFF6b4139),
  6754. (troop_set_slot, "trp_banner_background_color_array", 58, 0xFFd6d7d6),
  6755. (troop_set_slot, "trp_banner_background_color_array", 59, 0xFF2e2f2c),
  6756. (troop_set_slot, "trp_banner_background_color_array", 60, 0xFF604283),
  6757. (troop_set_slot, "trp_banner_background_color_array", 61, 0xFF395584),
  6758. (troop_set_slot, "trp_banner_background_color_array", 62, 0xFF313031),
  6759. (troop_set_slot, "trp_banner_background_color_array", 63, 0xFF7e3f2e),
  6760. (troop_set_slot, "trp_banner_background_color_array", 64, 0xFF343434),
  6761. (troop_set_slot, "trp_banner_background_color_array", 65, 0xFF3c496b),
  6762. (troop_set_slot, "trp_banner_background_color_array", 66, 0xFFd9d8d1),
  6763. (troop_set_slot, "trp_banner_background_color_array", 67, 0xFF99823c),
  6764. (troop_set_slot, "trp_banner_background_color_array", 68, 0xFF9f822e),
  6765. (troop_set_slot, "trp_banner_background_color_array", 69, 0xFF393839),
  6766. (troop_set_slot, "trp_banner_background_color_array", 70, 0xFFa54931),
  6767. (troop_set_slot, "trp_banner_background_color_array", 71, 0xFFdfdcd6),
  6768. (troop_set_slot, "trp_banner_background_color_array", 72, 0xFF9f4a36),
  6769. (troop_set_slot, "trp_banner_background_color_array", 73, 0xFF8c7521),
  6770. (troop_set_slot, "trp_banner_background_color_array", 74, 0xFF9f4631),
  6771. (troop_set_slot, "trp_banner_background_color_array", 75, 0xFF793324),
  6772. (troop_set_slot, "trp_banner_background_color_array", 76, 0xFF395076),
  6773. (troop_set_slot, "trp_banner_background_color_array", 77, 0xFF2c2b2c),
  6774. (troop_set_slot, "trp_banner_background_color_array", 78, 0xFF657121),
  6775. (troop_set_slot, "trp_banner_background_color_array", 79, 0xFF7e3121),
  6776. (troop_set_slot, "trp_banner_background_color_array", 80, 0xFF76512e),
  6777. (troop_set_slot, "trp_banner_background_color_array", 81, 0xFFe7e3de),
  6778. (troop_set_slot, "trp_banner_background_color_array", 82, 0xFF947921),
  6779. (troop_set_slot, "trp_banner_background_color_array", 83, 0xFF4d7b7c),
  6780. (troop_set_slot, "trp_banner_background_color_array", 84, 0xFF343331),
  6781. (troop_set_slot, "trp_banner_background_color_array", 85, 0xFFa74d36),
  6782. (troop_set_slot, "trp_banner_background_color_array", 86, 0xFFe7e3de),
  6783. (troop_set_slot, "trp_banner_background_color_array", 87, 0xFFd6d8ce),
  6784. (troop_set_slot, "trp_banner_background_color_array", 88, 0xFF3e4d67),
  6785. (troop_set_slot, "trp_banner_background_color_array", 89, 0xFF9f842e),
  6786. (troop_set_slot, "trp_banner_background_color_array", 90, 0xFF4d6994),
  6787. (troop_set_slot, "trp_banner_background_color_array", 91, 0xFF4a6118),
  6788. (troop_set_slot, "trp_banner_background_color_array", 92, 0xFF943c29),
  6789. (troop_set_slot, "trp_banner_background_color_array", 93, 0xFF394479),
  6790. (troop_set_slot, "trp_banner_background_color_array", 94, 0xFF343331),
  6791. (troop_set_slot, "trp_banner_background_color_array", 95, 0xFF3f4d5d),
  6792. (troop_set_slot, "trp_banner_background_color_array", 96, 0xFF4a6489),
  6793. (troop_set_slot, "trp_banner_background_color_array", 97, 0xFF313031),
  6794. (troop_set_slot, "trp_banner_background_color_array", 98, 0xFFd6d7ce),
  6795. (troop_set_slot, "trp_banner_background_color_array", 99, 0xFFc69e00),
  6796. (troop_set_slot, "trp_banner_background_color_array", 100, 0xFF638e52),
  6797. (troop_set_slot, "trp_banner_background_color_array", 101, 0xFFdcdbd3),
  6798. (troop_set_slot, "trp_banner_background_color_array", 102, 0xFFdbdcd3),
  6799. (troop_set_slot, "trp_banner_background_color_array", 103, 0xFF843831),
  6800. (troop_set_slot, "trp_banner_background_color_array", 104, 0xFFcecfc6),
  6801. (troop_set_slot, "trp_banner_background_color_array", 105, 0xFFc39d31),
  6802. (troop_set_slot, "trp_banner_background_color_array", 106, 0xFFcbb670),
  6803. (troop_set_slot, "trp_banner_background_color_array", 107, 0xFF394a18),
  6804. (troop_set_slot, "trp_banner_background_color_array", 108, 0xFF372708),
  6805. (troop_set_slot, "trp_banner_background_color_array", 109, 0xFF9a6810),
  6806. (troop_set_slot, "trp_banner_background_color_array", 110, 0xFFb27910),
  6807. (troop_set_slot, "trp_banner_background_color_array", 111, 0xFF8c8621),
  6808. (troop_set_slot, "trp_banner_background_color_array", 112, 0xFF975a03),
  6809. (troop_set_slot, "trp_banner_background_color_array", 113, 0xFF2c2924),
  6810. (troop_set_slot, "trp_banner_background_color_array", 114, 0xFFaa962c),
  6811. (troop_set_slot, "trp_banner_background_color_array", 115, 0xFFa2822e),
  6812. (troop_set_slot, "trp_banner_background_color_array", 116, 0xFF7b8a8c),
  6813. (troop_set_slot, "trp_banner_background_color_array", 117, 0xFF3c0908),
  6814. (troop_set_slot, "trp_banner_background_color_array", 118, 0xFFFF00FF),
  6815. (troop_set_slot, "trp_banner_background_color_array", 119, 0xFF671e14),
  6816. (troop_set_slot, "trp_banner_background_color_array", 120, 0xFF103042),
  6817. (troop_set_slot, "trp_banner_background_color_array", 121, 0xFF4a4500),
  6818. (troop_set_slot, "trp_banner_background_color_array", 122, 0xFF703324),
  6819. (troop_set_slot, "trp_banner_background_color_array", 123, 0xFF24293c),
  6820. (troop_set_slot, "trp_banner_background_color_array", 124, 0xFF5d6966),
  6821. (troop_set_slot, "trp_banner_background_color_array", 125, 0xFFbd9631),
  6822. (troop_set_slot, "trp_banner_background_color_array", 126, 0xFFc6b26b),
  6823. (troop_set_slot, "trp_banner_background_color_array", 127, 0xFF394918),
  6824.  
  6825. #Default banners
  6826. (troop_set_slot, "trp_banner_background_color_array", 128, 0xFF212221),
  6827. (troop_set_slot, "trp_banner_background_color_array", 129, 0xFF212221),
  6828. (troop_set_slot, "trp_banner_background_color_array", 130, 0xFF2E3B10),
  6829. (troop_set_slot, "trp_banner_background_color_array", 131, 0xFF425D7B),
  6830. (troop_set_slot, "trp_banner_background_color_array", 132, 0xFF394608),
  6831. ]),
  6832.  
  6833.  
  6834. ("initialize_economic_information",
  6835. [
  6836. #All towns produce tools, pottery, and wool cloth for sale in countryside
  6837. (try_for_range, ":town_no", towns_begin, towns_end),
  6838. (store_random_in_range, ":random_average_20_variation_10", 10, 31), #10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 or 30
  6839. (party_set_slot, ":town_no", slot_center_wool_looms, ":random_average_20_variation_10"),
  6840.  
  6841. (store_random_in_range, ":random_average_2_variation_1", 1, 4), #1,2 or 3
  6842. (party_set_slot, ":town_no", slot_center_breweries, ":random_average_2_variation_1"),
  6843.  
  6844. (store_random_in_range, ":random_average_5_variation_3", 3, 9), #2,3,4,5,6,7 or 8
  6845. (party_set_slot, ":town_no", slot_center_pottery_kilns, ":random_average_5_variation_3"),
  6846.  
  6847. (store_random_in_range, ":random_average_15_variation_9", 6, 25), #6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 or 24
  6848. (party_set_slot, ":town_no", slot_center_smithies, ":random_average_15_variation_9"),
  6849.  
  6850. (store_random_in_range, ":random_average_5_variation_3", 3, 9), #2,3,4,5,6,7 or 8
  6851. (party_set_slot, ":town_no", slot_center_mills, ":random_average_5_variation_3"),
  6852.  
  6853. (store_random_in_range, ":random_average_2_variation_1", 1, 4), #1,2 or 3
  6854. (party_set_slot, ":town_no", slot_center_tanneries, ":random_average_2_variation_1"),
  6855.  
  6856. (store_random_in_range, ":random_average_1_variation_1", 0, 3), #0,1 or 2
  6857. (party_set_slot, ":town_no", slot_center_wine_presses, ":random_average_1_variation_1"),
  6858.  
  6859. (store_random_in_range, ":random_average_2_variation_1", 1, 4), #1,2 or 3
  6860. (party_set_slot, ":town_no", slot_center_olive_presses, ":random_average_2_variation_1"),
  6861.  
  6862. (store_random_in_range, ":random_average_1000_variation_1000", 0, 2001), #0..2000
  6863. (party_set_slot, ":town_no", slot_center_acres_grain, ":random_average_1000_variation_1000"), #0..2000
  6864.  
  6865. (store_random_in_range, ":random_average_1000_variation_1000", 0, 2001), #0..2000
  6866. (party_set_slot, ":town_no", slot_center_acres_vineyard, ":random_average_1000_variation_1000"), #0..2000
  6867. (try_end),
  6868.  
  6869. #Sargoth (linen, wine)
  6870. (party_set_slot, "p_town_1", slot_center_linen_looms, 15),
  6871. (party_set_slot, "p_town_1", slot_center_wine_presses, 4),
  6872.  
  6873. #Tihr (salt, smoked fish, linen)
  6874. (party_set_slot, "p_town_2", slot_center_salt_pans, 3),
  6875. (party_set_slot, "p_town_2", slot_center_fishing_fleet, 25),
  6876. (party_set_slot, "p_town_2", slot_center_linen_looms, 15),
  6877.  
  6878. #Veluca (wine, velvet)
  6879. (party_set_slot, "p_town_3", slot_center_wine_presses, 10),
  6880. (party_set_slot, "p_town_3", slot_center_silk_looms, 12),
  6881.  
  6882. #Suno (velvet, oil)
  6883. (party_set_slot, "p_town_4", slot_center_silk_looms, 12),
  6884. (party_set_slot, "p_town_4", slot_center_olive_presses, 15),
  6885.  
  6886. #Jelkala (velvet, smoked fish)
  6887. (party_set_slot, "p_town_5", slot_center_silk_looms, 24),
  6888. (party_set_slot, "p_town_5", slot_center_fishing_fleet, 30),
  6889.  
  6890. #Praven (ale, leatherwork, smoked fish)
  6891. (party_set_slot, "p_town_6", slot_center_breweries, 10),
  6892. (party_set_slot, "p_town_6", slot_center_tanneries, 4),
  6893. (party_set_slot, "p_town_6", slot_center_fishing_fleet, 10),
  6894.  
  6895. #Uxkhal (bread, leatherwork, oil)
  6896. (party_set_slot, "p_town_7", slot_center_mills, 15),
  6897. (party_set_slot, "p_town_7", slot_center_tanneries, 4),
  6898. (party_set_slot, "p_town_7", slot_center_olive_presses, 5),
  6899.  
  6900. #Reyvadin (tools, wool cloth, wine)
  6901. (party_set_slot, "p_town_8", slot_center_smithies, 25),
  6902. (party_set_slot, "p_town_8", slot_center_wool_looms, 35),
  6903. (party_set_slot, "p_town_8", slot_center_wine_presses, 4),
  6904.  
  6905. #Khudan (tools, leatherwork, smoked fish)
  6906. (party_set_slot, "p_town_9", slot_center_smithies, 18),
  6907. (party_set_slot, "p_town_9", slot_center_tanneries, 3),
  6908. (party_set_slot, "p_town_9", slot_center_fishing_fleet, 5),
  6909.  
  6910. #Tulga (salt, spice)
  6911. (party_set_slot, "p_town_10", slot_center_salt_pans, 2),
  6912. #also produces 100 spice
  6913.  
  6914. #Curaw (tools, iron, smoked fish)
  6915. (party_set_slot, "p_town_11", slot_center_smithies, 19),
  6916. (party_set_slot, "p_town_11", slot_center_iron_deposits, 10),
  6917. (party_set_slot, "p_town_11", slot_center_fishing_fleet, 10),
  6918.  
  6919. #Wercheg (salt, smoked fish)
  6920. (party_set_slot, "p_town_12", slot_center_salt_pans, 3),
  6921. (party_set_slot, "p_town_12", slot_center_fishing_fleet, 25),
  6922.  
  6923. #Rivacheg (wool cloth, leatherwork, smoked fish)
  6924. (party_set_slot, "p_town_13", slot_center_wool_looms, 30),
  6925. (party_set_slot, "p_town_13", slot_center_tanneries, 5),
  6926. (party_set_slot, "p_town_13", slot_center_fishing_fleet, 20),
  6927.  
  6928. #Halmar (leatherwork, pottery)
  6929. (party_set_slot, "p_town_14", slot_center_tanneries, 3),
  6930. (party_set_slot, "p_town_14", slot_center_pottery_kilns, 18),
  6931.  
  6932. #Yalen (tools, wine, oil, smoked fish)
  6933. (party_set_slot, "p_town_15", slot_center_smithies, 20),
  6934. (party_set_slot, "p_town_15", slot_center_wine_presses, 6),
  6935. (party_set_slot, "p_town_15", slot_center_olive_presses, 5),
  6936. (party_set_slot, "p_town_15", slot_center_fishing_fleet, 25),
  6937.  
  6938. #Dhirim (tools, leatherwork)
  6939. (party_set_slot, "p_town_16", slot_center_smithies, 30),
  6940. (party_set_slot, "p_town_16", slot_center_tanneries, 4),
  6941.  
  6942. #Ichamur (wool cloth, spice)
  6943. (party_set_slot, "p_town_17", slot_center_wool_looms, 40),
  6944. #also produces 50 spice
  6945.  
  6946. #Narra (wool cloth, oil)
  6947. (party_set_slot, "p_town_18", slot_center_wool_looms, 35),
  6948. (party_set_slot, "p_town_18", slot_center_olive_presses, 10),
  6949.  
  6950. #Shariz (leatherwork, smoked fish, oil)
  6951. (party_set_slot, "p_town_19", slot_center_tanneries, 5),
  6952. (party_set_slot, "p_town_19", slot_center_breweries, 0), #no alcohol (ale) in arabic region
  6953. (party_set_slot, "p_town_19", slot_center_wine_presses, 0), #no alcohol (wine) in arabic region
  6954. (party_set_slot, "p_town_19", slot_center_fishing_fleet, 5),
  6955. (party_set_slot, "p_town_19", slot_center_olive_presses, 5),
  6956. #also produces 50 spice
  6957.  
  6958. #Darquba (linen, pottery, oil)
  6959. (party_set_slot, "p_town_20", slot_center_breweries, 0), #no alcohol (ale) in arabic region
  6960. (party_set_slot, "p_town_20", slot_center_wine_presses, 0), #no alcohol (wine) in arabic region
  6961. (party_set_slot, "p_town_20", slot_center_linen_looms, 15),
  6962. (party_set_slot, "p_town_20", slot_center_pottery_kilns, 12),
  6963. (party_set_slot, "p_town_19", slot_center_olive_presses, 3),
  6964.  
  6965. #Ahmerrad (pottery, salt)
  6966. (party_set_slot, "p_town_21", slot_center_breweries, 0), #no alcohol (ale) in arabic region
  6967. (party_set_slot, "p_town_21", slot_center_wine_presses, 0), #no alcohol (wine) in arabic region
  6968. (party_set_slot, "p_town_21", slot_center_pottery_kilns, 24),
  6969. (party_set_slot, "p_town_21", slot_center_salt_pans, 1),
  6970.  
  6971. #Bariyye (salt, pottery, spice)
  6972. (party_set_slot, "p_town_22", slot_center_breweries, 0), #no alcohol (ale) in arabic region
  6973. (party_set_slot, "p_town_22", slot_center_wine_presses, 0), #no alcohol (wine) in arabic region
  6974. (party_set_slot, "p_town_22", slot_center_pottery_kilns, 12),
  6975. (party_set_slot, "p_town_22", slot_center_salt_pans, 2),
  6976. #also produces 50 spice
  6977.  
  6978. (try_for_range, ":village_no", villages_begin, villages_end),
  6979. (try_begin),
  6980. (this_or_next|eq, ":village_no", "p_village_93"), #mazigh
  6981. (this_or_next|eq, ":village_no", "p_village_94"), #sekhtem
  6982. (this_or_next|eq, ":village_no", "p_village_95"), #qalyut
  6983. (this_or_next|eq, ":village_no", "p_village_96"), #tilimsal
  6984. (this_or_next|eq, ":village_no", "p_village_97"), #shibal zumr
  6985. (this_or_next|eq, ":village_no", "p_village_102"), #tamnuh
  6986. (this_or_next|eq, ":village_no", "p_village_109"), #habba
  6987. (this_or_next|eq, ":village_no", "p_village_98"), #mawiti
  6988. (this_or_next|eq, ":village_no", "p_village_103"), #mijayet
  6989. (this_or_next|eq, ":village_no", "p_village_105"), #aab
  6990. (this_or_next|eq, ":village_no", "p_village_99"), #fishara
  6991. (this_or_next|eq, ":village_no", "p_village_100"), #iqbayl
  6992. (this_or_next|eq, ":village_no", "p_village_107"), #unriya
  6993. (this_or_next|eq, ":village_no", "p_village_101"), #uzgha
  6994. (this_or_next|eq, ":village_no", "p_village_104"), #tazjunat
  6995. (this_or_next|eq, ":village_no", "p_village_110"), #rushdigh
  6996. (this_or_next|eq, ":village_no", "p_village_108"), #mit nun
  6997. (eq, ":village_no", "p_village_92"), #dhibbain
  6998.  
  6999. (assign, ":village_is_at_desert", 1),
  7000. (else_try),
  7001. (assign, ":village_is_at_desert", 0),
  7002. (try_end),
  7003.  
  7004. (store_random_in_range, ":random_cattle", 20, 100),
  7005. (try_begin),
  7006. (eq, ":village_is_at_desert", 1),
  7007. (val_div, ":random_cattle", 5),
  7008. (try_end),
  7009. (party_set_slot, ":village_no", slot_center_head_cattle, ":random_cattle"), #average : 50, min : 25, max : 75
  7010.  
  7011. (store_random_in_range, ":random_sheep", 40, 200),
  7012. (try_begin),
  7013. (eq, ":village_is_at_desert", 1),
  7014. (val_div, ":random_sheep", 5),
  7015. (try_end),
  7016. (party_set_slot, ":village_no", slot_center_head_sheep, ":random_sheep"), #average : 100, min : 50, max : 150
  7017.  
  7018. #grain production
  7019. (store_random_in_range, ":random_value_between_0_and_40000", 0, 40000),
  7020. (store_random_in_range, ":random_value_between_0_and_average_20000", 0, ":random_value_between_0_and_40000"),
  7021. (try_begin),
  7022. (eq, ":village_is_at_desert", 1),
  7023. (val_div, ":random_value_between_0_and_average_20000", 5),
  7024. (try_end),
  7025. (party_set_slot, ":village_no", slot_center_acres_grain, ":random_value_between_0_and_average_20000"), #average : 10000, min : 0, max : 40000
  7026.  
  7027. #grape production
  7028. (store_random_in_range, ":random_value_between_0_and_2000", 0, 2000),
  7029. (store_random_in_range, ":random_value_between_0_and_average_1000", 0, ":random_value_between_0_and_2000"),
  7030. (try_begin),
  7031. (eq, ":village_is_at_desert", 1),
  7032. (val_div, ":random_value_between_0_and_average_1000", 5),
  7033. (try_end),
  7034. (party_set_slot, ":village_no", slot_center_acres_vineyard, ":random_value_between_0_and_average_1000"), #average : 500, min : 0, max : 2000
  7035.  
  7036. #olive production
  7037. (store_random_in_range, ":random_value_between_0_and_2000", 0, 2000),
  7038. (store_random_in_range, ":random_value_between_0_and_average_1000", 0, ":random_value_between_0_and_2000"),
  7039. (try_begin),
  7040. (eq, ":village_is_at_desert", 1),
  7041. (val_div, ":random_value_between_0_and_average_1000", 5),
  7042. (try_end),
  7043. (party_set_slot, ":village_no", slot_center_acres_olives, ":random_value_between_0_and_average_1000"), #average : 500, min : 0, max : 2000
  7044.  
  7045. #honey production
  7046. (store_random_in_range, ":random_value_between_0_and_3", 0, 3),
  7047. (try_begin),
  7048. (eq, ":village_is_at_desert", 1),
  7049. (assign, ":random_value_between_0_and_3", 0), #at desert regions no honey production
  7050. (try_end),
  7051. (party_set_slot, ":village_no", slot_center_apiaries, ":random_value_between_0_and_3"),
  7052.  
  7053. #cabbage and fruit production
  7054. (store_random_in_range, ":random_value_between_0_and_5", 0, 5),
  7055. (try_begin),
  7056. (eq, ":village_is_at_desert", 1),
  7057. (assign, ":random_value_between_0_and_5", 0), #at desert regions no cabbage and fruit production
  7058. (try_end),
  7059. (party_set_slot, ":village_no", slot_center_household_gardens, ":random_value_between_0_and_5"),
  7060.  
  7061. #bread production
  7062. (store_random_in_range, ":random_value_between_0_and_3", 0, 3),
  7063. (party_set_slot, ":village_no", slot_center_mills, ":random_value_between_0_and_3"),
  7064.  
  7065. #pottery production
  7066. (store_random_in_range, ":random_value_between_0_and_5", 0, 5),
  7067. (try_begin),
  7068. (eq, ":village_is_at_desert", 1),
  7069. (val_mul, ":random_value_between_0_and_5", 5), #at desert regions pottery production 4x more than normal (totally 5x)
  7070. (try_end),
  7071. (party_set_slot, ":village_no", slot_center_pottery_kilns, ":random_value_between_0_and_5"),
  7072.  
  7073. #Sargoth (village productions : Ambean, Fearichen and Fenada)
  7074. (try_begin),
  7075. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_1"),
  7076. (party_set_slot, ":village_no", slot_center_acres_flax, 4000),
  7077. (party_set_slot, ":village_no", slot_center_acres_vineyard, 8000),
  7078.  
  7079. #Tihr (village productions : Kulum, Haen and Aldelen)
  7080. (else_try),
  7081. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_2"),
  7082. (party_set_slot, ":village_no", slot_center_acres_vineyard, 8000),
  7083. (party_set_slot, ":village_no", slot_center_household_gardens, 10),
  7084.  
  7085. #Veluca (village productions : Emer, Fedner, Chaeza and Sarimish)
  7086. (else_try),
  7087. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_3"),
  7088. (party_set_slot, ":village_no", slot_center_acres_vineyard, 6000),
  7089. (party_set_slot, ":village_no", slot_center_acres_olives, 6000),
  7090.  
  7091. #Suno (village productions : Ruluns and Lyindah)
  7092. (else_try),
  7093. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_4"),
  7094. (party_set_slot, ":village_no", slot_center_fur_traps, 2),
  7095. (party_set_slot, ":village_no", slot_center_acres_olives, 8000),
  7096.  
  7097. #Jelkala (village productions : Buvran, Ruldi and Chelez)
  7098. (else_try),
  7099. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_5"),
  7100. (party_set_slot, ":village_no", slot_center_silk_farms, 1500),
  7101. (party_set_slot, ":village_no", slot_center_kirmiz_farms, 1500),
  7102.  
  7103. #Praven (village productions : Azgad, Veidar, Elberl and Gisim)
  7104. (else_try),
  7105. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_6"),
  7106. (party_set_slot, ":village_no", slot_center_acres_flax, 4000),
  7107. (party_set_slot, ":village_no", slot_center_breweries, 4),
  7108.  
  7109. #Uxkhal (village productions : Nomar, Ibiran and Tahlberl)
  7110. (else_try),
  7111. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_7"),
  7112. (party_set_slot, ":village_no", slot_center_fur_traps, 1),
  7113. (party_set_slot, ":village_no", slot_center_acres_olives, 8000),
  7114. (party_set_slot, ":village_no", slot_center_apiaries, 8),
  7115.  
  7116. #Reyvadin (village productions : Ulburban and Ayyike)
  7117. (else_try),
  7118. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_8"),
  7119. (party_set_slot, ":village_no", slot_center_fur_traps, 2),
  7120. (party_set_slot, ":village_no", slot_center_head_cattle, 100),
  7121. (party_set_slot, ":village_no", slot_center_iron_deposits, 6),
  7122.  
  7123. #Khudan (village productions : Uslum, Shulus and Tismirr)
  7124. (else_try),
  7125. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_9"),
  7126. (party_set_slot, ":village_no", slot_center_fur_traps, 2),
  7127. (party_set_slot, ":village_no", slot_center_acres_olives, 4000),
  7128.  
  7129. #Tulga (village productions : Dusturil and Dashbigha)
  7130. (else_try),
  7131. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_10"),
  7132. (party_set_slot, ":village_no", slot_center_head_sheep, 150),
  7133. (party_set_slot, ":village_no", slot_center_salt_pans, 1),
  7134. (party_set_slot, ":village_no", slot_center_fur_traps, 1),
  7135. (party_set_slot, ":village_no", slot_center_apiaries, 8),
  7136.  
  7137. #Curaw (village productions : Bazeck and Rebache)
  7138. (else_try),
  7139. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_11"),
  7140. (party_set_slot, ":village_no", slot_center_iron_deposits, 6),
  7141. (party_set_slot, ":village_no", slot_center_fur_traps, 2),
  7142.  
  7143. #Wercheg (village productions : Ruvar and Odasan)
  7144. (else_try),
  7145. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_12"),
  7146. (party_set_slot, ":village_no", slot_center_acres_vineyard, 8000),
  7147. (party_set_slot, ":village_no", slot_center_household_gardens, 10),
  7148. (party_set_slot, ":village_no", slot_center_salt_pans, 1),
  7149.  
  7150. #Rivacheg (village productions : Shapeshte, Vezin and Fisdnar)
  7151. (else_try),
  7152. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_13"),
  7153. (party_set_slot, ":village_no", slot_center_fur_traps, 2),
  7154. (party_set_slot, ":village_no", slot_center_head_cattle, 100),
  7155. (party_set_slot, ":village_no", slot_center_silk_farms, 1500),
  7156.  
  7157. #Halmar (village productions : Peshmi)
  7158. (else_try),
  7159. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_14"),
  7160. (party_set_slot, ":village_no", slot_center_acres_grain, 40000),
  7161. (party_set_slot, ":village_no", slot_center_mills, 5),
  7162.  
  7163. #Yalen (village productions : Ilvia, Glunmar, Epeshe and Istiniar)
  7164. (else_try),
  7165. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_15"),
  7166. (party_set_slot, ":village_no", slot_center_acres_vineyard, 8000),
  7167. (party_set_slot, ":village_no", slot_center_acres_olives, 8000),
  7168. (party_set_slot, ":village_no", slot_center_household_gardens, 10),
  7169.  
  7170. #Dhirim (village productions : Burglen, Amere, Ushkuru, Tshibtin and Yalibe)
  7171. (else_try),
  7172. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_16"),
  7173. (party_set_slot, ":village_no", slot_center_acres_grain, 40000),
  7174. (party_set_slot, ":village_no", slot_center_iron_deposits, 3),
  7175. (party_set_slot, ":village_no", slot_center_mills, 5),
  7176.  
  7177. #Ichamur (village productions : Ada Kulun and Drigh Aban)
  7178. (else_try),
  7179. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_17"),
  7180. (party_set_slot, ":village_no", slot_center_acres_grain, 20000),
  7181. (party_set_slot, ":village_no", slot_center_fur_traps, 1),
  7182.  
  7183. #Narra (village productions : Zagush and Kedelke)
  7184. (else_try),
  7185. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_18"),
  7186. (party_set_slot, ":village_no", slot_center_acres_grain, 20000),
  7187. (party_set_slot, ":village_no", slot_center_iron_deposits, 3),
  7188. (party_set_slot, ":village_no", slot_center_apiaries, 8),
  7189. (party_set_slot, ":village_no", slot_center_acres_flax, 4000),
  7190.  
  7191. #Shariz (village productions : Ayn Assuadi, Dhibbain, Qalyut, Tilimsal and Rushdigh)
  7192. (else_try),
  7193. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_19"),
  7194. (party_set_slot, ":village_no", slot_center_acres_grain, 6000), #low grain (partially desert)
  7195. (party_set_slot, ":village_no", slot_center_acres_flax, 2000),
  7196. (party_set_slot, ":village_no", slot_center_acres_olives, 3000),
  7197. (party_set_slot, ":village_no", slot_center_acres_dates, 5000),
  7198.  
  7199. #Durquba (village productions : Tamnuh and Sekhtem)
  7200. (else_try),
  7201. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_20"),
  7202. (party_set_slot, ":village_no", slot_center_acres_grain, 3000), #low grain (heavy desert)
  7203. (party_set_slot, ":village_no", slot_center_acres_dates, 10000),
  7204. (party_set_slot, ":village_no", slot_center_salt_pans, 1),
  7205.  
  7206. #Ahmerrad (village productions : Mawiti, Uzgha and Mijayet)
  7207. (else_try),
  7208. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_21"),
  7209. (party_set_slot, ":village_no", slot_center_acres_grain, 3000), #low grain (heavy desert)
  7210. (party_set_slot, ":village_no", slot_center_acres_dates, 5000),
  7211. (party_set_slot, ":village_no", slot_center_kirmiz_farms, 1500),
  7212.  
  7213. #Bariyye (village productions : Fishara and Iqbayl)
  7214. (else_try),
  7215. (party_slot_eq, ":village_no", slot_village_market_town, "p_town_22"),
  7216. (party_set_slot, ":village_no", slot_center_acres_grain, 2000), #low grain (heavy desert)
  7217. (party_set_slot, ":village_no", slot_center_acres_flax, 2000),
  7218. (party_set_slot, ":village_no", slot_center_acres_dates, 10000),
  7219. (party_set_slot, ":village_no", slot_center_salt_pans, 1),
  7220. (party_set_slot, ":village_no", slot_center_kirmiz_farms, 1500),
  7221.  
  7222. (try_end),
  7223. (try_end),
  7224.  
  7225. #determining village productions which are bounded by castle by nearby village productions which are bounded by a town.
  7226. (try_for_range, ":village_no", villages_begin, villages_end),
  7227. (party_get_slot, ":bound_center", ":village_no", slot_village_bound_center),
  7228. (is_between, ":bound_center", castles_begin, castles_end),
  7229.  
  7230. (try_for_range, ":cur_production_source", slot_production_sources_begin, slot_production_sources_end),
  7231.  
  7232. (assign, ":total_averaged_production", 0),
  7233. (try_for_range, ":effected_village_no", villages_begin, villages_end),
  7234. (party_get_slot, ":bound_center", ":effected_village_no", slot_village_bound_center),
  7235. (is_between, ":bound_center", towns_begin, towns_end),
  7236.  
  7237. (store_distance_to_party_from_party, ":dist", ":village_no", ":effected_village_no"),
  7238. (le, ":dist", 72),
  7239.  
  7240. (party_get_slot, ":production", ":village_no", ":cur_production_source"),
  7241.  
  7242. (store_add, ":dist_plus_24", ":dist", 24),
  7243. (store_mul, ":production_mul_12", ":production", 12),
  7244. (store_div, ":averaged_production", ":production_mul_12", ":dist_plus_24"), #if close (12/24=1/2) else (12/96=1/8)
  7245. (val_div, ":averaged_production", 2), #if close (1/4) else (1/16)
  7246. (val_add, ":total_averaged_production", ":averaged_production"),
  7247. (try_end),
  7248.  
  7249. (party_set_slot, ":village_no", ":cur_production_source", ":total_averaged_production"),
  7250. (try_end),
  7251. (try_end),
  7252.  
  7253. #Ocean and river villages, new map
  7254. (party_set_slot, "p_village_1", slot_center_fishing_fleet, 15), #Yaragar
  7255. (party_set_slot, "p_village_3", slot_center_fishing_fleet, 15), #Azgad
  7256. (party_set_slot, "p_village_5", slot_center_fishing_fleet, 15), #Kulum
  7257.  
  7258. (party_set_slot, "p_village_8", slot_center_fishing_fleet, 15), #Haen
  7259. (party_set_slot, "p_village_9", slot_center_fishing_fleet, 15), #Buvran
  7260.  
  7261. (party_set_slot, "p_village_20", slot_center_fishing_fleet, 15), #Uslum
  7262. (party_set_slot, "p_village_21", slot_center_fishing_fleet, 15), #Bazeck
  7263. (party_set_slot, "p_village_23", slot_center_fishing_fleet, 15), #Ilvia
  7264. (party_set_slot, "p_village_27", slot_center_fishing_fleet, 15), #Glunmar
  7265.  
  7266. (party_set_slot, "p_village_30", slot_center_fishing_fleet, 20), #Ruvar
  7267. (party_set_slot, "p_village_31", slot_center_fishing_fleet, 15), #Ambean
  7268. (party_set_slot, "p_village_35", slot_center_fishing_fleet, 15), #Feacharin
  7269.  
  7270. (party_set_slot, "p_village_47", slot_center_fishing_fleet, 15), #Epeshe
  7271. (party_set_slot, "p_village_49", slot_center_fishing_fleet, 15), #Tismirr
  7272.  
  7273. (party_set_slot, "p_village_51", slot_center_fishing_fleet, 15), #Jelbegi
  7274. (party_set_slot, "p_village_56", slot_center_fishing_fleet, 15), #Fenada
  7275.  
  7276. (party_set_slot, "p_village_66", slot_center_fishing_fleet, 15), #Fisdnar
  7277. (party_set_slot, "p_village_68", slot_center_fishing_fleet, 15), #Ibdeles
  7278. (party_set_slot, "p_village_69", slot_center_fishing_fleet, 15), #Kwynn
  7279.  
  7280. (party_set_slot, "p_village_77", slot_center_fishing_fleet, 25), #Rizi - Estuary
  7281. (party_set_slot, "p_village_79", slot_center_fishing_fleet, 15), #Istiniar
  7282.  
  7283. (party_set_slot, "p_village_81", slot_center_fishing_fleet, 15), #Odasan
  7284. (party_set_slot, "p_village_85", slot_center_fishing_fleet, 15), #Ismirala
  7285. (party_set_slot, "p_village_87", slot_center_fishing_fleet, 15), #Udiniad
  7286.  
  7287. (party_set_slot, "p_village_90", slot_center_fishing_fleet, 15), #Jamiche
  7288.  
  7289. #Initialize pastureland
  7290. (try_for_range, ":center", centers_begin, centers_end),
  7291. (party_get_slot, ":head_cattle", ":center", slot_center_head_cattle),
  7292. (party_get_slot, ":head_sheep", ":center", slot_center_head_sheep),
  7293. (store_mul, ":num_acres", ":head_cattle", 4),
  7294. (val_add, ":num_acres", ":head_sheep"),
  7295. (val_add, ":num_acres", ":head_sheep"),
  7296. (val_mul, ":num_acres", 6),
  7297. (val_div, ":num_acres", 5),
  7298.  
  7299. (store_random_in_range, ":random", 60, 150),
  7300. (val_mul, ":num_acres", ":random"),
  7301. (val_div, ":num_acres", 100),
  7302.  
  7303. (party_set_slot, ":center", slot_center_acres_pasture, ":num_acres"),
  7304. (try_end),
  7305.  
  7306. #Initialize prices based on production, etc
  7307. (try_for_range, ":unused", 0, 3), #15 cycles = 45 days. For a village with -20 production, this should lead to approximate +1000, modified
  7308. (call_script, "script_update_trade_good_prices"), #changes prices based on production
  7309. (try_end),
  7310.  
  7311. #Initialize prosperity based on final prices
  7312. (try_for_range, ":center_no", centers_begin, centers_end),
  7313. (neg|is_between, ":center_no", castles_begin, castles_end),
  7314. (store_random_in_range, ":random_prosperity_adder", -10, 10),
  7315. (call_script, "script_get_center_ideal_prosperity", ":center_no"),
  7316. (assign, ":prosperity", reg0),
  7317. (val_add, ":prosperity", ":random_prosperity_adder"),
  7318. (val_clamp, ":prosperity", 0, 100),
  7319. (party_set_slot, ":center_no", slot_town_prosperity, ":prosperity"),
  7320. (try_end),
  7321.  
  7322. (call_script, "script_calculate_castle_prosperities_by_using_its_villages"),
  7323. ]),
  7324.  
  7325. #script_initialize_all_scene_prop_slots
  7326. # INPUT: arg1 = scene_prop_no
  7327. # OUTPUT: none
  7328. ("initialize_all_scene_prop_slots",
  7329. [
  7330. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_6m"),
  7331. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_8m"),
  7332. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_10m"),
  7333. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_12m"),
  7334. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_14m"),
  7335. (call_script, "script_initialize_scene_prop_slots", "spr_castle_e_sally_door_a"),
  7336. (call_script, "script_initialize_scene_prop_slots", "spr_castle_f_sally_door_a"),
  7337. (call_script, "script_initialize_scene_prop_slots", "spr_earth_sally_gate_left"),
  7338. (call_script, "script_initialize_scene_prop_slots", "spr_earth_sally_gate_right"),
  7339. (call_script, "script_initialize_scene_prop_slots", "spr_viking_keep_destroy_sally_door_left"),
  7340. (call_script, "script_initialize_scene_prop_slots", "spr_viking_keep_destroy_sally_door_right"),
  7341. (call_script, "script_initialize_scene_prop_slots", "spr_castle_f_door_a"),
  7342. (call_script, "script_initialize_scene_prop_slots", "spr_belfry_a"),
  7343. (call_script, "script_initialize_scene_prop_slots", "spr_belfry_b"),
  7344. (call_script, "script_initialize_scene_prop_slots", "spr_winch_b"),
  7345. ]),
  7346.  
  7347. #script_initialize_scene_prop_slots
  7348. # INPUT: arg1 = scene_prop_no
  7349. # OUTPUT: none
  7350. ("initialize_scene_prop_slots",
  7351. [
  7352. (store_script_param, ":scene_prop_no", 1),
  7353.  
  7354. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", ":scene_prop_no"),
  7355. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  7356. (scene_prop_get_instance, ":cur_instance_id", ":scene_prop_no", ":cur_instance"),
  7357. (try_for_range, ":cur_slot", 0, scene_prop_slots_end),
  7358. (scene_prop_set_slot, ":cur_instance_id", ":cur_slot", 0),
  7359. (try_end),
  7360. (try_end),
  7361. ]),
  7362.  
  7363. #script_use_item
  7364. # INPUT: arg1 = agent_id, arg2 = instance_id
  7365. # OUTPUT: none
  7366. ("use_item",
  7367. [
  7368. (store_script_param, ":instance_id", 1),
  7369. (store_script_param, ":user_id", 2),
  7370.  
  7371. (try_begin),
  7372. (game_in_multiplayer_mode),
  7373. (prop_instance_get_scene_prop_kind, ":scene_prop_id", ":instance_id"),
  7374. (eq, ":scene_prop_id", "spr_winch_b"),
  7375.  
  7376. (multiplayer_get_my_player, ":my_player_no"),
  7377.  
  7378. (this_or_next|gt, ":my_player_no", 0),
  7379. (neg|multiplayer_is_dedicated_server),
  7380.  
  7381. (ge, ":my_player_no", 0),
  7382. (player_get_agent_id, ":my_agent_id", ":my_player_no"),
  7383. (ge, ":my_agent_id", 0),
  7384. (agent_is_active, ":my_agent_id"),
  7385. (agent_get_team, ":my_team_no", ":my_agent_id"),
  7386. (eq, ":my_team_no", 0),
  7387.  
  7388. (scene_prop_get_slot, ":opened_or_closed", ":instance_id", scene_prop_open_or_close_slot),
  7389. (ge, ":user_id", 0),
  7390. (agent_is_active, ":user_id"),
  7391. (agent_get_player_id, ":user_player", ":user_id"),
  7392. (str_store_player_username, s7, ":user_player"),
  7393.  
  7394. (try_begin),
  7395. (eq, ":opened_or_closed", 0),
  7396. (display_message, "@{s7} opened the gate"),
  7397. (else_try),
  7398. (display_message, "@{s7} closed the gate"),
  7399. (try_end),
  7400. (try_end),
  7401.  
  7402. (prop_instance_get_scene_prop_kind, ":scene_prop_id", ":instance_id"),
  7403.  
  7404. (try_begin),
  7405. (this_or_next|eq, ":scene_prop_id", "spr_winch_b"),
  7406. (eq, ":scene_prop_id", "spr_winch"),
  7407. (assign, ":effected_object", "spr_portcullis"),
  7408. (else_try),
  7409. (this_or_next|eq, ":scene_prop_id", "spr_door_destructible"),
  7410. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_door_b"),
  7411. (this_or_next|eq, ":scene_prop_id", "spr_castle_e_sally_door_a"),
  7412. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_sally_door_a"),
  7413. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_left"),
  7414. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_right"),
  7415. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_left"),
  7416. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_right"),
  7417. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_door_a"),
  7418. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_6m"),
  7419. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_8m"),
  7420. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_10m"),
  7421. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_12m"),
  7422. (eq, ":scene_prop_id", "spr_siege_ladder_move_14m"),
  7423. (assign, ":effected_object", ":scene_prop_id"),
  7424. (try_end),
  7425.  
  7426. (assign, ":smallest_dist", -1),
  7427. (prop_instance_get_position, pos0, ":instance_id"),
  7428. (scene_prop_get_num_instances, ":num_instances_of_effected_object", ":effected_object"),
  7429. (try_for_range, ":cur_instance", 0, ":num_instances_of_effected_object"),
  7430. (scene_prop_get_instance, ":cur_instance_id", ":effected_object", ":cur_instance"),
  7431. (prop_instance_get_position, pos1, ":cur_instance_id"),
  7432. (get_sq_distance_between_positions, ":dist", pos0, pos1),
  7433. (this_or_next|eq, ":smallest_dist", -1),
  7434. (lt, ":dist", ":smallest_dist"),
  7435. (assign, ":smallest_dist", ":dist"),
  7436. (assign, ":effected_object_instance_id", ":cur_instance_id"),
  7437. (try_end),
  7438.  
  7439. (try_begin),
  7440. (ge, ":instance_id", 0),
  7441. (ge, ":smallest_dist", 0),
  7442.  
  7443. (try_begin),
  7444. (eq, ":effected_object", "spr_portcullis"),
  7445. (scene_prop_get_slot, ":opened_or_closed", ":instance_id", scene_prop_open_or_close_slot),
  7446.  
  7447. (try_begin),
  7448. (eq, ":opened_or_closed", 0), #open gate
  7449.  
  7450. (scene_prop_enable_after_time, ":instance_id", 400), #4 seconds
  7451. (try_begin),
  7452. (this_or_next|multiplayer_is_server),
  7453. (neg|game_in_multiplayer_mode),
  7454. (prop_instance_get_position, pos0, ":effected_object_instance_id"),
  7455. (position_move_z, pos0, 375),
  7456. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 400),
  7457. (try_end),
  7458. (scene_prop_set_slot, ":instance_id", scene_prop_open_or_close_slot, 1),
  7459.  
  7460. (try_begin),
  7461. (eq, ":scene_prop_id", "spr_winch_b"),
  7462. (this_or_next|multiplayer_is_server),
  7463. (neg|game_in_multiplayer_mode),
  7464. (prop_instance_get_position, pos1, ":instance_id"),
  7465. (prop_instance_rotate_to_position, ":instance_id", pos1, 400, 72000),
  7466. (try_end),
  7467. (else_try), #close gate
  7468. (scene_prop_enable_after_time, ":instance_id", 400), #4 seconds
  7469. (try_begin),
  7470. (this_or_next|multiplayer_is_server),
  7471. (neg|game_in_multiplayer_mode),
  7472. (prop_instance_get_position, pos0, ":effected_object_instance_id"),
  7473. (position_move_z, pos0, -375),
  7474. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 400),
  7475. (try_end),
  7476. (scene_prop_set_slot, ":instance_id", scene_prop_open_or_close_slot, 0),
  7477.  
  7478. (try_begin),
  7479. (eq, ":scene_prop_id", "spr_winch_b"),
  7480. (this_or_next|multiplayer_is_server),
  7481. (neg|game_in_multiplayer_mode),
  7482. (prop_instance_get_position, pos1, ":instance_id"),
  7483. (prop_instance_rotate_to_position, ":instance_id", pos1, 400, -72000),
  7484. (try_end),
  7485. (try_end),
  7486. (else_try),
  7487. (this_or_next|eq, ":effected_object", "spr_siege_ladder_move_6m"),
  7488. (this_or_next|eq, ":effected_object", "spr_siege_ladder_move_8m"),
  7489. (this_or_next|eq, ":effected_object", "spr_siege_ladder_move_10m"),
  7490. (this_or_next|eq, ":effected_object", "spr_siege_ladder_move_12m"),
  7491. (eq, ":effected_object", "spr_siege_ladder_move_14m"),
  7492.  
  7493. (try_begin),
  7494. (eq, ":effected_object", "spr_siege_ladder_move_6m"),
  7495. (assign, ":animation_time_drop", 120),
  7496. (assign, ":animation_time_elevate", 240),
  7497. (else_try),
  7498. (eq, ":effected_object", "spr_siege_ladder_move_8m"),
  7499. (assign, ":animation_time_drop", 140),
  7500. (assign, ":animation_time_elevate", 280),
  7501. (else_try),
  7502. (eq, ":effected_object", "spr_siege_ladder_move_10m"),
  7503. (assign, ":animation_time_drop", 160),
  7504. (assign, ":animation_time_elevate", 320),
  7505. (else_try),
  7506. (eq, ":effected_object", "spr_siege_ladder_move_12m"),
  7507. (assign, ":animation_time_drop", 190),
  7508. (assign, ":animation_time_elevate", 360),
  7509. (else_try),
  7510. (eq, ":effected_object", "spr_siege_ladder_move_14m"),
  7511. (assign, ":animation_time_drop", 230),
  7512. (assign, ":animation_time_elevate", 400),
  7513. (try_end),
  7514.  
  7515. (scene_prop_get_slot, ":opened_or_closed", ":instance_id", scene_prop_open_or_close_slot),
  7516.  
  7517. (try_begin),
  7518. (scene_prop_enable_after_time, ":effected_object_instance_id", ":animation_time_elevate"), #3 seconds in average
  7519. (eq, ":opened_or_closed", 0), #ladder at ground
  7520. (prop_instance_get_starting_position, pos0, ":effected_object_instance_id"),
  7521. (prop_instance_enable_physics, ":effected_object_instance_id", 0),
  7522. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 300),
  7523. (scene_prop_set_slot, ":effected_object_instance_id", scene_prop_open_or_close_slot, 1),
  7524. (else_try), #ladder at wall
  7525. (scene_prop_enable_after_time, ":effected_object_instance_id", ":animation_time_drop"), #1.5 seconds in average
  7526. (prop_instance_get_position, pos0, ":instance_id"),
  7527.  
  7528. (assign, ":smallest_dist", -1),
  7529. (try_for_range, ":entry_point_no", multi_entry_points_for_usable_items_start, multi_entry_points_for_usable_items_end),
  7530. (entry_point_get_position, pos1, ":entry_point_no"),
  7531. (get_sq_distance_between_positions, ":dist", pos0, pos1),
  7532. (this_or_next|eq, ":smallest_dist", -1),
  7533. (lt, ":dist", ":smallest_dist"),
  7534. (assign, ":smallest_dist", ":dist"),
  7535. (assign, ":nearest_entry_point", ":entry_point_no"),
  7536. (try_end),
  7537.  
  7538. (try_begin),
  7539. (ge, ":smallest_dist", 0),
  7540. (lt, ":smallest_dist", 22500), #max 15m distance
  7541. (entry_point_get_position, pos1, ":nearest_entry_point"),
  7542. (position_rotate_x, pos1, -90),
  7543. (scene_prop_set_slot, ":effected_object_instance_id", scene_prop_smoke_effect_done, 0),
  7544. (prop_instance_enable_physics, ":effected_object_instance_id", 0),
  7545. (prop_instance_animate_to_position, ":effected_object_instance_id", pos1, 130),
  7546. (try_end),
  7547.  
  7548. (scene_prop_set_slot, ":effected_object_instance_id", scene_prop_open_or_close_slot, 0),
  7549. (try_end),
  7550. (else_try),
  7551. (this_or_next|eq, ":effected_object", "spr_door_destructible"),
  7552. (this_or_next|eq, ":effected_object", "spr_castle_f_door_b"),
  7553. (this_or_next|eq, ":scene_prop_id", "spr_castle_e_sally_door_a"),
  7554. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_sally_door_a"),
  7555. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_left"),
  7556. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_right"),
  7557. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_left"),
  7558. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_right"),
  7559. (eq, ":scene_prop_id", "spr_castle_f_door_a"),
  7560.  
  7561. (assign, ":effected_object_instance_id", ":instance_id"),
  7562. (scene_prop_get_slot, ":opened_or_closed", ":effected_object_instance_id", scene_prop_open_or_close_slot),
  7563.  
  7564. (try_begin),
  7565. (eq, ":opened_or_closed", 0),
  7566.  
  7567. (prop_instance_get_starting_position, pos0, ":effected_object_instance_id"),
  7568.  
  7569. (scene_prop_enable_after_time, ":effected_object_instance_id", 100),
  7570.  
  7571. (try_begin),
  7572. (neg|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_left"),
  7573. (neg|eq, ":scene_prop_id", "spr_earth_sally_gate_left"),
  7574.  
  7575. (position_rotate_z, pos0, -85),
  7576. (else_try),
  7577. (position_rotate_z, pos0, 85),
  7578. (try_end),
  7579.  
  7580. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 100),
  7581.  
  7582. (scene_prop_set_slot, ":effected_object_instance_id", scene_prop_open_or_close_slot, 1),
  7583. (else_try),
  7584. (prop_instance_get_starting_position, pos0, ":effected_object_instance_id"),
  7585.  
  7586. (scene_prop_enable_after_time, ":effected_object_instance_id", 100),
  7587.  
  7588. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 100),
  7589.  
  7590. (scene_prop_set_slot, ":effected_object_instance_id", scene_prop_open_or_close_slot, 0),
  7591. (try_end),
  7592. (try_end),
  7593. (try_end),
  7594. ]),
  7595.  
  7596. #script_determine_team_flags
  7597. # INPUT: none
  7598. # OUTPUT: none
  7599. ("determine_team_flags",
  7600. [
  7601. (store_script_param, ":team_no", 1),
  7602.  
  7603. (try_begin),
  7604. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  7605.  
  7606. (try_begin),
  7607. (eq, ":team_no", 0),
  7608.  
  7609. (team_get_faction, ":team_faction_no", 0),
  7610. (try_begin),
  7611. (eq, ":team_faction_no", "fac_kingdom_1"),
  7612. (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_1"),
  7613. (else_try),
  7614. (eq, ":team_faction_no", "fac_kingdom_2"),
  7615. (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_2"),
  7616. (else_try),
  7617. (eq, ":team_faction_no", "fac_kingdom_3"),
  7618. (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_3"),
  7619. (else_try),
  7620. (eq, ":team_faction_no", "fac_kingdom_4"),
  7621. (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_4"),
  7622. (else_try),
  7623. (eq, ":team_faction_no", "fac_kingdom_5"),
  7624. (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_5"),
  7625. (else_try),
  7626. (eq, ":team_faction_no", "fac_kingdom_6"),
  7627. (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_6"),
  7628. (try_end),
  7629. (else_try),
  7630. (team_get_faction, ":team_faction_no", 1),
  7631. (try_begin),
  7632. (eq, ":team_faction_no", "fac_kingdom_1"),
  7633. (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_1"),
  7634. (else_try),
  7635. (eq, ":team_faction_no", "fac_kingdom_2"),
  7636. (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_2"),
  7637. (else_try),
  7638. (eq, ":team_faction_no", "fac_kingdom_3"),
  7639. (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_3"),
  7640. (else_try),
  7641. (eq, ":team_faction_no", "fac_kingdom_4"),
  7642. (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_4"),
  7643. (else_try),
  7644. (eq, ":team_faction_no", "fac_kingdom_5"),
  7645. (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_5"),
  7646. (else_try),
  7647. (eq, ":team_faction_no", "fac_kingdom_6"),
  7648. (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_6"),
  7649. (try_end),
  7650.  
  7651. (try_begin),
  7652. (eq, "$team_1_flag_scene_prop", "$team_2_flag_scene_prop"),
  7653. (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_7"),
  7654. (try_end),
  7655. (try_end),
  7656. (else_try),
  7657. (try_begin),
  7658. (eq, ":team_no", 0),
  7659.  
  7660. (team_get_faction, ":team_faction_no", 0),
  7661. (try_begin),
  7662. (eq, ":team_faction_no", "fac_kingdom_1"),
  7663. (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_swadian"),
  7664. (else_try),
  7665. (eq, ":team_faction_no", "fac_kingdom_2"),
  7666. (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_vaegir"),
  7667. (else_try),
  7668. (eq, ":team_faction_no", "fac_kingdom_3"),
  7669. (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_khergit"),
  7670. (else_try),
  7671. (eq, ":team_faction_no", "fac_kingdom_4"),
  7672. (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_nord"),
  7673. (else_try),
  7674. (eq, ":team_faction_no", "fac_kingdom_5"),
  7675. (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_rhodok"),
  7676. (else_try),
  7677. (eq, ":team_faction_no", "fac_kingdom_6"),
  7678. (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_sarranid"),
  7679. (try_end),
  7680. (else_try),
  7681. (team_get_faction, ":team_faction_no", 1),
  7682. (try_begin),
  7683. (eq, ":team_faction_no", "fac_kingdom_1"),
  7684. (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_swadian"),
  7685. (else_try),
  7686. (eq, ":team_faction_no", "fac_kingdom_2"),
  7687. (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_vaegir"),
  7688. (else_try),
  7689. (eq, ":team_faction_no", "fac_kingdom_3"),
  7690. (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_khergit"),
  7691. (else_try),
  7692. (eq, ":team_faction_no", "fac_kingdom_4"),
  7693. (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_nord"),
  7694. (else_try),
  7695. (eq, ":team_faction_no", "fac_kingdom_5"),
  7696. (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_rhodok"),
  7697. (else_try),
  7698. (eq, ":team_faction_no", "fac_kingdom_6"),
  7699. (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_sarranid"),
  7700. (try_end),
  7701.  
  7702. (try_begin),
  7703. (eq, "$team_1_flag_scene_prop", "$team_2_flag_scene_prop"),
  7704. (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_rebel"),
  7705. (try_end),
  7706. (try_end),
  7707. (try_end),
  7708. ]),
  7709.  
  7710.  
  7711. #script_calculate_flag_move_time
  7712. # INPUT: arg1 = number_of_total_agents_around_flag, arg2 = dist_between_flag_and_its_pole
  7713. # OUTPUT: reg0 = flag move time
  7714. ("calculate_flag_move_time",
  7715. [
  7716. (store_script_param, ":number_of_total_agents_around_flag", 1),
  7717. (store_script_param, ":dist_between_flag_and_its_target", 2),
  7718.  
  7719. (try_begin), #(if no one is around flag it again moves to its current owner situation but 5 times slower than normal)
  7720. (eq, ":number_of_total_agents_around_flag", 0),
  7721. (store_mul, reg0, ":dist_between_flag_and_its_target", 2500),#5.00 * 1.00 * (500 stable) = 2000
  7722. (else_try),
  7723. (eq, ":number_of_total_agents_around_flag", 1),
  7724. (store_mul, reg0, ":dist_between_flag_and_its_target", 500), #1.00 * (500 stable) = 500
  7725. (else_try),
  7726. (eq, ":number_of_total_agents_around_flag", 2),
  7727. (store_mul, reg0, ":dist_between_flag_and_its_target", 300), #0.60(0.60) * (500 stable) = 300
  7728. (else_try),
  7729. (eq, ":number_of_total_agents_around_flag", 3),
  7730. (store_mul, reg0, ":dist_between_flag_and_its_target", 195), #0.39(0.60 * 0.65) * (500 stable) = 195
  7731. (else_try),
  7732. (eq, ":number_of_total_agents_around_flag", 4),
  7733. (store_mul, reg0, ":dist_between_flag_and_its_target", 137), #0.273(0.60 * 0.65 * 0.70) * (500 stable) = 136.5 >rounding> 137
  7734. (else_try),
  7735. (eq, ":number_of_total_agents_around_flag", 5),
  7736. (store_mul, reg0, ":dist_between_flag_and_its_target", 102), #0.20475(0.60 * 0.65 * 0.70 * 0.75) * (500 stable) = 102.375 >rounding> 102
  7737. (else_try),
  7738. (eq, ":number_of_total_agents_around_flag", 6),
  7739. (store_mul, reg0, ":dist_between_flag_and_its_target", 82), #0.1638(0.60 * 0.65 * 0.70 * 0.75 * 0.80) * (500 stable) = 81.9 >rounding> 82
  7740. (else_try),
  7741. (eq, ":number_of_total_agents_around_flag", 7),
  7742. (store_mul, reg0, ":dist_between_flag_and_its_target", 66), #0.13104(0.60 * 0.65 * 0.70 * 0.75 * 0.80 * 0.85) * (500 stable) = 65.52 >rounding> 66
  7743. (else_try),
  7744. (eq, ":number_of_total_agents_around_flag", 8),
  7745. (store_mul, reg0, ":dist_between_flag_and_its_target", 59), #0.117936(0.60 * 0.65 * 0.70 * 0.75 * 0.80 * 0.85 * 0.90) * (500 stable) = 58.968 >rounding> 59
  7746. (else_try),
  7747. (store_mul, reg0, ":dist_between_flag_and_its_target", 56), #0.1120392(0.60 * 0.65 * 0.70 * 0.75 * 0.80 * 0.85 * 0.90 * 0.95) * (500 stable) = 56.0196 >rounding> 56
  7748. (try_end),
  7749.  
  7750. (assign, ":number_of_players", 0),
  7751. (get_max_players, ":num_players"),
  7752. (try_for_range, ":cur_player", 0, ":num_players"),
  7753. (player_is_active, ":cur_player"),
  7754. (val_add, ":number_of_players", 1),
  7755. (try_end),
  7756.  
  7757. (try_begin),
  7758. (lt, ":number_of_players", 10),
  7759. (val_mul, reg0, 50),
  7760. (else_try),
  7761. (lt, ":number_of_players", 35),
  7762. (store_sub, ":number_of_players_multipication", 35, ":number_of_players"),
  7763. (val_mul, ":number_of_players_multipication", 2),
  7764. (store_sub, ":number_of_players_multipication", 100, ":number_of_players_multipication"),
  7765. (val_mul, reg0, ":number_of_players_multipication"),
  7766. (else_try),
  7767. (val_mul, reg0, 100),
  7768. (try_end),
  7769.  
  7770. (try_begin),
  7771. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  7772. (val_mul, reg0, 2),
  7773. (try_end),
  7774.  
  7775. (val_div, reg0, 10000), #100x for number of players around flag, 100x for number of players in game
  7776. ]),
  7777.  
  7778. #script_move_death_mode_flags_down
  7779. # INPUT: none
  7780. # OUTPUT: none
  7781. ("move_death_mode_flags_down",
  7782. [
  7783. (try_begin),
  7784. (scene_prop_get_instance, ":pole_1_id", "spr_headquarters_pole_code_only", 0),
  7785. (prop_instance_get_position, pos0, ":pole_1_id"),
  7786. (position_move_z, pos0, -2000),
  7787. (prop_instance_set_position, ":pole_1_id", pos0),
  7788. (try_end),
  7789.  
  7790. (try_begin),
  7791. (scene_prop_get_instance, ":pole_2_id", "spr_headquarters_pole_code_only", 1),
  7792. (prop_instance_get_position, pos1, ":pole_2_id"),
  7793. (position_move_z, pos1, -2000),
  7794. (prop_instance_set_position, ":pole_2_id", pos1),
  7795. (try_end),
  7796.  
  7797. (try_begin),
  7798. (scene_prop_get_instance, ":pole_1_id", "spr_headquarters_pole_code_only", 0),
  7799. (prop_instance_get_position, pos0, ":pole_1_id"),
  7800. (scene_prop_get_instance, ":flag_1_id", "$team_1_flag_scene_prop", 0),
  7801. (prop_instance_stop_animating, ":flag_1_id"),
  7802. (position_move_z, pos0, multi_headquarters_flag_initial_height),
  7803. (prop_instance_set_position, ":flag_1_id", pos0),
  7804. (try_end),
  7805.  
  7806. (try_begin),
  7807. (scene_prop_get_instance, ":pole_2_id", "spr_headquarters_pole_code_only", 1),
  7808. (prop_instance_get_position, pos1, ":pole_2_id"),
  7809. (scene_prop_get_instance, ":flag_2_id", "$team_2_flag_scene_prop", 0),
  7810. (prop_instance_stop_animating, ":flag_2_id"),
  7811. (position_move_z, pos1, multi_headquarters_flag_initial_height),
  7812. (prop_instance_set_position, ":flag_2_id", pos1),
  7813. (try_end),
  7814. ]),
  7815.  
  7816. #script_move_flag
  7817. # INPUT: arg1 = shown_flag_id, arg2 = move time in seconds, pos0 = target position
  7818. # OUTPUT: none
  7819. ("move_flag",
  7820. [
  7821. (store_script_param, ":shown_flag_id", 1),
  7822. (store_script_param, ":shown_flag_move_time", 2),
  7823.  
  7824. (try_begin),
  7825. (multiplayer_is_server), #added after auto-animating
  7826.  
  7827. (try_begin),
  7828. (eq, ":shown_flag_move_time", 0), #stop
  7829. (prop_instance_stop_animating, ":shown_flag_id"),
  7830. (else_try),
  7831. (prop_instance_animate_to_position, ":shown_flag_id", pos0, ":shown_flag_move_time"),
  7832. (try_end),
  7833. (try_end),
  7834. ]),
  7835.  
  7836. #script_move_headquarters_flags
  7837. # INPUT: arg1 = current_owner, arg2 = number_of_agents_around_flag_team_1, arg3 = number_of_agents_around_flag_team_2
  7838. # OUTPUT: none
  7839. ("move_headquarters_flags",
  7840. [
  7841. (store_script_param, ":flag_no", 1),
  7842. (store_script_param, ":number_of_agents_around_flag_team_1", 2),
  7843. (store_script_param, ":number_of_agents_around_flag_team_2", 3),
  7844.  
  7845. (store_add, ":cur_flag_slot", multi_data_flag_owner_begin, ":flag_no"),
  7846. (troop_get_slot, ":current_owner", "trp_multiplayer_data", ":cur_flag_slot"),
  7847.  
  7848. (scene_prop_get_num_instances, ":num_instances", "spr_headquarters_flag_gray_code_only"),
  7849. (try_begin),
  7850. (assign, ":visibility", 0),
  7851. (lt, ":flag_no", ":num_instances"),
  7852. (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
  7853. (scene_prop_get_visibility, ":visibility", ":flag_id"),
  7854. (try_end),
  7855.  
  7856. (try_begin),
  7857. (eq, ":visibility", 1),
  7858. (assign, ":shown_flag", 0),
  7859. (assign, ":shown_flag_id", ":flag_id"),
  7860. (else_try),
  7861. (scene_prop_get_num_instances, ":num_instances", "$team_1_flag_scene_prop"),
  7862. (try_begin),
  7863. (assign, ":visibility", 0),
  7864. (lt, ":flag_no", ":num_instances"),
  7865. (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
  7866. (scene_prop_get_visibility, ":visibility", ":flag_id"),
  7867. (try_end),
  7868.  
  7869. #(scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
  7870. #(scene_prop_get_visibility, ":visibility", ":flag_id"),
  7871. (try_begin),
  7872. (eq, ":visibility", 1),
  7873. (assign, ":shown_flag", 1),
  7874. (assign, ":shown_flag_id", ":flag_id"),
  7875. (else_try),
  7876. (scene_prop_get_num_instances, ":num_instances", "$team_2_flag_scene_prop"),
  7877. (try_begin),
  7878. (assign, ":visibility", 0),
  7879. (lt, ":flag_no", ":num_instances"),
  7880. (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
  7881. (scene_prop_get_visibility, ":visibility", ":flag_id"),
  7882. (try_end),
  7883.  
  7884. #(scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
  7885. #(scene_prop_get_visibility, ":visibility", ":flag_id"),
  7886. (try_begin),
  7887. (eq, ":visibility", 1),
  7888. (assign, ":shown_flag", 2),
  7889. (assign, ":shown_flag_id", ":flag_id"),
  7890. (try_end),
  7891. (try_end),
  7892. (try_end),
  7893.  
  7894. (try_begin),
  7895. (scene_prop_get_instance, ":pole_id", "spr_headquarters_pole_code_only", ":flag_no"),
  7896. (try_end),
  7897.  
  7898. (try_begin),
  7899. (eq, ":shown_flag", ":current_owner"), #situation 1 : (current owner is equal shown flag)
  7900. (try_begin),
  7901. (ge, ":number_of_agents_around_flag_team_1", 1),
  7902. (ge, ":number_of_agents_around_flag_team_2", 1),
  7903. (assign, ":flag_movement", 0), #0:stop
  7904. (else_try),
  7905. (eq, ":number_of_agents_around_flag_team_1", 0),
  7906. (eq, ":number_of_agents_around_flag_team_2", 0),
  7907. (assign, ":flag_movement", 1), #1:rise (slow)
  7908. (else_try),
  7909. (try_begin),
  7910. (ge, ":number_of_agents_around_flag_team_1", 1),
  7911. (eq, ":number_of_agents_around_flag_team_2", 0),
  7912. (eq, ":current_owner", 1),
  7913. (assign, ":flag_movement", 1), #1:rise (fast)
  7914. (else_try),
  7915. (eq, ":number_of_agents_around_flag_team_1", 0),
  7916. (ge, ":number_of_agents_around_flag_team_2", 1),
  7917. (eq, ":current_owner", 2),
  7918. (assign, ":flag_movement", 1), #1:rise (fast)
  7919. (else_try),
  7920. (assign, ":flag_movement", -1), #-1:drop (fast)
  7921. (try_end),
  7922. (try_end),
  7923. (else_try), #situation 2 : (current owner is different than shown flag)
  7924. (try_begin),
  7925. (ge, ":number_of_agents_around_flag_team_1", 1),
  7926. (ge, ":number_of_agents_around_flag_team_2", 1),
  7927. (assign, ":flag_movement", 0), #0:stop
  7928. (else_try),
  7929. (eq, ":number_of_agents_around_flag_team_1", 0),
  7930. (eq, ":number_of_agents_around_flag_team_2", 0),
  7931. (assign, ":flag_movement", -1), #-1:drop (slow)
  7932. (else_try),
  7933. (try_begin),
  7934. (ge, ":number_of_agents_around_flag_team_1", 1),
  7935. (eq, ":number_of_agents_around_flag_team_2", 0),
  7936. (try_begin),
  7937. (eq, ":shown_flag", 1),
  7938. (assign, ":flag_movement", 1), #1:rise (fast)
  7939. (else_try),
  7940. (neq, ":current_owner", 1),
  7941. (assign, ":flag_movement", -1), #-1:drop (fast)
  7942. (try_end),
  7943. (else_try),
  7944. (eq, ":number_of_agents_around_flag_team_1", 0),
  7945. (ge, ":number_of_agents_around_flag_team_2", 1),
  7946. (try_begin),
  7947. (eq, ":shown_flag", 2),
  7948. (assign, ":flag_movement", 1), #1:rise (fast)
  7949. (else_try),
  7950. (neq, ":current_owner", 2),
  7951. (assign, ":flag_movement", -1), #-1:drop (fast)
  7952. (try_end),
  7953. (try_end),
  7954. (try_end),
  7955. (try_end),
  7956.  
  7957. (store_add, ":number_of_total_agents_around_flag", ":number_of_agents_around_flag_team_1", ":number_of_agents_around_flag_team_2"),
  7958.  
  7959. (try_begin),
  7960. (eq, ":flag_movement", 0),
  7961. (assign, reg0, 0),
  7962. (else_try),
  7963. (eq, ":flag_movement", 1),
  7964. (prop_instance_get_position, pos1, ":shown_flag_id"),
  7965. (prop_instance_get_position, pos0, ":pole_id"),
  7966. (position_move_z, pos0, multi_headquarters_pole_height),
  7967. (get_distance_between_positions, ":dist_between_flag_and_its_target", pos0, pos1),
  7968. (call_script, "script_calculate_flag_move_time", ":number_of_total_agents_around_flag", ":dist_between_flag_and_its_target"),
  7969. (else_try),
  7970. (eq, ":flag_movement", -1),
  7971. (prop_instance_get_position, pos1, ":shown_flag_id"),
  7972. (prop_instance_get_position, pos0, ":pole_id"),
  7973. (get_distance_between_positions, ":dist_between_flag_and_its_target", pos0, pos1),
  7974. (call_script, "script_calculate_flag_move_time", ":number_of_total_agents_around_flag", ":dist_between_flag_and_its_target"),
  7975. (try_end),
  7976.  
  7977. (call_script, "script_move_flag", ":shown_flag_id", reg0), #pos0 : target position
  7978. ]),
  7979.  
  7980. #script_set_num_agents_around_flag
  7981. # INPUT: arg1 = flag_no, arg2 = owner_code
  7982. # OUTPUT: none
  7983. ("set_num_agents_around_flag",
  7984. [
  7985. (store_script_param, ":flag_no", 1),
  7986. (store_script_param, ":current_owner_code", 2),
  7987.  
  7988. (store_div, ":number_of_agents_around_flag_team_1", ":current_owner_code", 100),
  7989. (store_mod, ":number_of_agents_around_flag_team_2", ":current_owner_code", 100),
  7990.  
  7991. (store_add, ":cur_flag_owner_counts_slot", multi_data_flag_players_around_begin, ":flag_no"),
  7992. (troop_set_slot, "trp_multiplayer_data", ":cur_flag_owner_counts_slot", ":current_owner_code"),
  7993.  
  7994. (call_script, "script_move_headquarters_flags", ":flag_no", ":number_of_agents_around_flag_team_1", ":number_of_agents_around_flag_team_2"),
  7995. ]),
  7996.  
  7997. #script_change_flag_owner
  7998. # INPUT: arg1 = flag_no, arg2 = owner_code
  7999. # OUTPUT: none
  8000. ("change_flag_owner",
  8001. [
  8002. (store_script_param, ":flag_no", 1),
  8003. (store_script_param, ":owner_code", 2),
  8004.  
  8005. (try_begin),
  8006. (lt, ":owner_code", 0),
  8007. (val_add, ":owner_code", 1),
  8008. (val_mul, ":owner_code", -1),
  8009. (try_end),
  8010.  
  8011. (store_div, ":owner_team_no", ":owner_code", 100),
  8012. (store_mod, ":shown_flag_no", ":owner_code", 100),
  8013.  
  8014. (store_add, ":cur_flag_slot", multi_data_flag_owner_begin, ":flag_no"),
  8015. (troop_get_slot, ":older_owner_team_no", "trp_multiplayer_data", ":cur_flag_slot"),
  8016.  
  8017. (store_add, ":cur_flag_slot", multi_data_flag_owner_begin, ":flag_no"),
  8018. (troop_set_slot, "trp_multiplayer_data", ":cur_flag_slot", ":owner_team_no"),
  8019.  
  8020. #senchronizing flag positions
  8021. (try_begin),
  8022. #(this_or_next|eq, ":initial_flags", 0), #moved after auto-animating
  8023. (multiplayer_is_server),
  8024.  
  8025. (scene_prop_get_instance, ":pole_id", "spr_headquarters_pole_code_only", ":flag_no"),
  8026. (try_begin),
  8027. (eq, ":owner_team_no", 0), #if new owner team is 0 then flags are at bottom
  8028. (neq, ":older_owner_team_no", -1), #clients
  8029. (assign, ":continue", 1),
  8030. (try_begin),
  8031. (multiplayer_is_server),
  8032. (eq, "$g_placing_initial_flags", 1),
  8033. (assign, ":continue", 0),
  8034. (try_end),
  8035. (eq, ":continue", 1),
  8036. (prop_instance_get_position, pos0, ":pole_id"),
  8037. (position_move_z, pos0, multi_headquarters_distance_to_change_flag),
  8038. (else_try),
  8039. (prop_instance_get_position, pos0, ":pole_id"), #if new owner team is not 0 then flags are at top
  8040. (position_move_z, pos0, multi_headquarters_pole_height),
  8041. (try_end),
  8042.  
  8043. (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
  8044. (prop_instance_stop_animating, ":flag_id"),
  8045. (prop_instance_set_position, ":flag_id", pos0),
  8046.  
  8047. (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
  8048. (prop_instance_stop_animating, ":flag_id"),
  8049. (prop_instance_set_position, ":flag_id", pos0),
  8050.  
  8051. (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
  8052. (prop_instance_stop_animating, ":flag_id"),
  8053. (prop_instance_set_position, ":flag_id", pos0),
  8054. (try_end),
  8055.  
  8056. #setting visibilities of flags
  8057. (try_begin),
  8058. (eq, ":shown_flag_no", 0),
  8059. (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
  8060. (scene_prop_set_visibility, ":flag_id", 0),
  8061. (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
  8062. (scene_prop_set_visibility, ":flag_id", 0),
  8063. (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
  8064. (scene_prop_set_visibility, ":flag_id", 1),
  8065. (else_try),
  8066. (eq, ":shown_flag_no", 1),
  8067. (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
  8068. (scene_prop_set_visibility, ":flag_id", 1),
  8069. (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
  8070. (scene_prop_set_visibility, ":flag_id", 0),
  8071. (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
  8072. (scene_prop_set_visibility, ":flag_id", 0),
  8073. (else_try),
  8074. (eq, ":shown_flag_no", 2),
  8075. (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
  8076. (scene_prop_set_visibility, ":flag_id", 0),
  8077. (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
  8078. (scene_prop_set_visibility, ":flag_id", 1),
  8079. (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
  8080. (scene_prop_set_visibility, ":flag_id", 0),
  8081. (try_end),
  8082.  
  8083. #other
  8084. (store_add, ":cur_flag_players_around_slot", multi_data_flag_players_around_begin, ":flag_no"),
  8085. (troop_get_slot, ":players_around_code", "trp_multiplayer_data", ":cur_flag_players_around_slot"),
  8086.  
  8087. (store_div, ":number_of_agents_around_flag_team_1", ":players_around_code", 100),
  8088. (store_mod, ":number_of_agents_around_flag_team_2", ":players_around_code", 100),
  8089.  
  8090. (call_script, "script_move_headquarters_flags", ":flag_no", ":number_of_agents_around_flag_team_1", ":number_of_agents_around_flag_team_2"),
  8091. ]),
  8092.  
  8093. #script_move_object_to_nearest_entry_point
  8094. # INPUT: none
  8095. # OUTPUT: none
  8096. ("move_object_to_nearest_entry_point",
  8097. [
  8098. (store_script_param, ":scene_prop_no", 1),
  8099.  
  8100. (scene_prop_get_num_instances, ":num_instances", ":scene_prop_no"),
  8101.  
  8102. (try_for_range, ":instance_no", 0, ":num_instances"),
  8103. (scene_prop_get_instance, ":instance_id", ":scene_prop_no", ":instance_no"),
  8104. (prop_instance_get_position, pos0, ":instance_id"),
  8105.  
  8106. (assign, ":smallest_dist", -1),
  8107. (try_for_range, ":entry_point_no", multi_entry_points_for_usable_items_start, multi_entry_points_for_usable_items_end),
  8108. (entry_point_get_position, pos1, ":entry_point_no"),
  8109. (get_sq_distance_between_positions, ":dist", pos0, pos1),
  8110. (this_or_next|eq, ":smallest_dist", -1),
  8111. (lt, ":dist", ":smallest_dist"),
  8112. (assign, ":smallest_dist", ":dist"),
  8113. (assign, ":nearest_entry_point", ":entry_point_no"),
  8114. (try_end),
  8115.  
  8116. (try_begin),
  8117. (ge, ":smallest_dist", 0),
  8118. (lt, ":smallest_dist", 22500), #max 15m distance
  8119. (entry_point_get_position, pos1, ":nearest_entry_point"),
  8120. (position_rotate_x, pos1, -90),
  8121. (prop_instance_animate_to_position, ":instance_id", pos1, 1),
  8122. (try_end),
  8123. (try_end),
  8124. ]),
  8125.  
  8126.  
  8127. #script_multiplayer_server_on_agent_spawn_common
  8128. # INPUT: arg1 = agent_no
  8129. # OUTPUT: none
  8130. ("multiplayer_server_on_agent_spawn_common",
  8131. [
  8132. (store_script_param, ":agent_no", 1),
  8133. (agent_set_slot, ":agent_no", slot_agent_in_duel_with, -1),
  8134. (try_begin),
  8135. (agent_is_non_player, ":agent_no"),
  8136. (assign, "$g_multiplayer_ready_for_spawning_agent", 1),
  8137. #INVASION MODE START
  8138. (else_try),
  8139. # if player is spawning and can have squad
  8140. (call_script, "script_cf_multiplayer_can_buy_squad"),
  8141. # order squad to follow the player
  8142. (agent_get_player_id, ":player_team_no", ":agent_no"),
  8143. (set_show_messages, 0),
  8144. (team_give_order, ":player_team_no", grc_everyone, mordr_follow),
  8145. (set_show_messages, 1),
  8146. #INVASION MODE END
  8147. (try_end),
  8148. ]),
  8149.  
  8150. #script_multiplayer_server_player_joined_common
  8151. # INPUT: arg1 = player_no
  8152. # OUTPUT: none
  8153. ("multiplayer_server_player_joined_common",
  8154. [
  8155. (store_script_param, ":player_no", 1),
  8156. (try_begin),
  8157. (this_or_next|player_is_active, ":player_no"),
  8158. (eq, ":player_no", 0),
  8159. (call_script, "script_multiplayer_init_player_slots", ":player_no"),
  8160. (store_mission_timer_a, ":player_join_time"),
  8161. (player_set_slot, ":player_no", slot_player_join_time, ":player_join_time"),
  8162. (player_set_slot, ":player_no", slot_player_first_spawn, 1),
  8163. #fight and destroy only
  8164. (player_set_slot, ":player_no", slot_player_damage_given_to_target_1, 0),
  8165. (player_set_slot, ":player_no", slot_player_damage_given_to_target_2, 0),
  8166. #fight and destroy only end
  8167. (try_begin),
  8168. (multiplayer_is_server),
  8169. (assign, ":initial_gold", multi_initial_gold_value),
  8170. (val_mul, ":initial_gold", "$g_multiplayer_initial_gold_multiplier"),
  8171. (val_div, ":initial_gold", 100),
  8172. (player_set_gold, ":player_no", ":initial_gold"),
  8173. (call_script, "script_multiplayer_send_initial_information", ":player_no"),
  8174. (try_end),
  8175. (try_end),
  8176. ]),
  8177.  
  8178. #script_multiplayer_server_before_mission_start_common
  8179. # INPUT: none
  8180. # OUTPUT: none
  8181. ("multiplayer_server_before_mission_start_common",
  8182. [
  8183. (try_begin),
  8184. (scene_allows_mounted_units),
  8185. (assign, "$g_horses_are_avaliable", 1),
  8186. #INVASION MODE START
  8187. (try_begin),
  8188. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  8189. (store_current_scene, ":cur_scene"),
  8190. (scene_get_slot, "$g_ccoop_disallow_horses", ":cur_scene", slot_scene_ccoop_disallow_horses),
  8191. (eq, "$g_ccoop_disallow_horses", 1),
  8192. (assign, "$g_horses_are_avaliable", 0),
  8193. (try_end),
  8194. #INVASION MODE END
  8195. (else_try),
  8196. (assign, "$g_horses_are_avaliable", 0),
  8197. (try_end),
  8198. (scene_set_day_time, 15),
  8199. (assign, "$g_multiplayer_mission_end_screen", 0),
  8200.  
  8201. (get_max_players, ":num_players"),
  8202. (try_for_range, ":player_no", 0, ":num_players"),
  8203. (player_is_active, ":player_no"),
  8204. (call_script, "script_multiplayer_init_player_slots", ":player_no"),
  8205. (assign, ":initial_gold", multi_initial_gold_value),
  8206. (val_mul, ":initial_gold", "$g_multiplayer_initial_gold_multiplier"),
  8207. (val_div, ":initial_gold", 100),
  8208. (player_set_gold, ":player_no", ":initial_gold"),
  8209. (player_set_slot, ":player_no", slot_player_first_spawn, 1), #not required in siege, bt, fd
  8210. (try_end),
  8211.  
  8212. #INVASION MODE START
  8213. (call_script, "script_multiplayer_set_g_multiplayer_is_game_type_captain"),
  8214. #INVASION MODE END
  8215.  
  8216. ]),
  8217.  
  8218. #script_multiplayer_server_on_agent_killed_or_wounded_common
  8219. # INPUT: arg1 = dead_agent_no, arg2 = killer_agent_no
  8220. # OUTPUT: none
  8221. ("multiplayer_server_on_agent_killed_or_wounded_common",
  8222. [
  8223. (store_script_param, ":dead_agent_no", 1),
  8224. (store_script_param, ":killer_agent_no", 2),
  8225.  
  8226. (call_script, "script_multiplayer_event_agent_killed_or_wounded", ":dead_agent_no", ":killer_agent_no"),
  8227. #adding 1 score points to agent which kills enemy agent at server
  8228. (try_begin),
  8229. (multiplayer_is_server),
  8230. (try_begin), #killing myself because of some reason (friend hit, fall, team change)
  8231. (lt, ":killer_agent_no", 0),
  8232. (ge, ":dead_agent_no", 0),
  8233. (neg|agent_is_non_player, ":dead_agent_no"),
  8234. (agent_get_player_id, ":dead_agent_player_id", ":dead_agent_no"),
  8235. (player_is_active, ":dead_agent_player_id"),
  8236. (player_get_score, ":dead_agent_player_score", ":dead_agent_player_id"),
  8237. (val_add, ":dead_agent_player_score", -1),
  8238. (player_set_score, ":dead_agent_player_id", ":dead_agent_player_score"),
  8239. (else_try), #killing teammate
  8240. (ge, ":killer_agent_no", 0),
  8241. (ge, ":dead_agent_no", 0),
  8242. (agent_get_team, ":killer_team_no", ":killer_agent_no"),
  8243. (agent_get_team, ":dead_team_no", ":dead_agent_no"),
  8244. (eq, ":killer_team_no", ":dead_team_no"),
  8245. (neg|agent_is_non_player, ":killer_agent_no"),
  8246. (agent_get_player_id, ":killer_agent_player_id", ":killer_agent_no"),
  8247. (player_is_active, ":killer_agent_player_id"),
  8248. (player_get_score, ":killer_agent_player_score", ":killer_agent_player_id"),
  8249. (val_add, ":killer_agent_player_score", -1),
  8250. (player_set_score, ":killer_agent_player_id", ":killer_agent_player_score"),
  8251. #(player_get_kill_count, ":killer_agent_player_kill_count", ":killer_agent_player_id"),
  8252. #(val_add, ":killer_agent_player_kill_count", -2),
  8253. #(player_set_kill_count, ":killer_agent_player_id", ":killer_agent_player_kill_count"),
  8254. (else_try), #killing enemy
  8255. (ge, ":killer_agent_no", 0),
  8256. (ge, ":dead_agent_no", 0),
  8257. (agent_is_human, ":dead_agent_no"),
  8258. (agent_is_human, ":killer_agent_no"),
  8259. (try_begin),
  8260. (eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  8261. (try_begin),
  8262. (eq, "$g_battle_death_mode_started", 1),
  8263. (neq, ":dead_agent_no", ":killer_agent_no"),
  8264. (call_script, "script_calculate_new_death_waiting_time_at_death_mod"),
  8265. (try_end),
  8266. (try_end),
  8267. (try_begin),
  8268. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  8269. (eq, "$g_multiplayer_game_type", multiplayer_game_type_destroy),
  8270. (agent_get_player_id, ":dead_player_no", ":dead_agent_no"),
  8271. (try_begin),
  8272. (ge, ":dead_player_no", 0),
  8273. (player_is_active, ":dead_player_no"),
  8274. (neg|agent_is_non_player, ":dead_agent_no"),
  8275. (try_for_agents, ":cur_agent"),
  8276. (agent_is_non_player, ":cur_agent"),
  8277. (agent_is_human, ":cur_agent"),
  8278. (agent_is_alive, ":cur_agent"),
  8279. (agent_get_group, ":agent_group", ":cur_agent"),
  8280. (try_begin),
  8281. (eq, ":dead_player_no", ":agent_group"),
  8282. (agent_set_group, ":cur_agent", -1),
  8283. (try_end),
  8284. (try_end),
  8285. (try_end),
  8286. (try_end),
  8287. (neg|agent_is_non_player, ":killer_agent_no"),
  8288. (agent_get_player_id, ":killer_agent_player_id", ":killer_agent_no"),
  8289. (player_is_active, ":killer_agent_player_id"),
  8290. (player_get_score, ":killer_agent_player_score", ":killer_agent_player_id"),
  8291. (agent_get_team, ":killer_agent_team", ":killer_agent_no"),
  8292. (agent_get_team, ":dead_agent_team", ":dead_agent_no"),
  8293. (try_begin),
  8294. (neq, ":killer_agent_team", ":dead_agent_team"),
  8295. (val_add, ":killer_agent_player_score", 1),
  8296. (else_try),
  8297. (val_add, ":killer_agent_player_score", -1),
  8298. (try_end),
  8299. (player_set_score, ":killer_agent_player_id", ":killer_agent_player_score"),
  8300. (try_end),
  8301. (try_end),
  8302.  
  8303. #INVASION MODE START
  8304. (try_begin),
  8305. # if its captain mode and player is dead
  8306. (eq, "$g_multiplayer_is_game_type_captain", 1),
  8307. (ge, ":dead_agent_no", 0),
  8308. (neg|agent_is_non_player, ":dead_agent_no"),
  8309. # then reset his squad's orders
  8310. (agent_get_team, ":dead_team_no", ":dead_agent_no"),
  8311. (agent_get_player_id, ":dead_player_no", ":dead_agent_no"),
  8312. (player_is_active, ":dead_player_no"),
  8313. (set_show_messages, 0),
  8314. (team_give_order, ":dead_player_no", grc_everyone, mordr_charge),
  8315. (team_give_order, ":dead_player_no", grc_everyone, mordr_fire_at_will),
  8316. (team_give_order, ":dead_player_no", grc_everyone, mordr_use_any_weapon),
  8317. #(team_give_order, ":dead_player_no", grc_everyone, mordr_form_2_row),
  8318. (set_show_messages, 1),
  8319. (try_end),
  8320. #INVASION MODE END
  8321.  
  8322. (call_script, "script_add_kill_death_counts", ":killer_agent_no", ":dead_agent_no"),
  8323. #money management
  8324. (call_script, "script_money_management_after_agent_death", ":killer_agent_no", ":dead_agent_no"),
  8325. ]),
  8326.  
  8327. #script_multiplayer_close_gate_if_it_is_open
  8328. # INPUT: none
  8329. # OUTPUT: none
  8330. ("multiplayer_close_gate_if_it_is_open",
  8331. [
  8332. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_winch_b"),
  8333. (try_for_range, ":cur_prop_instance", 0, ":num_instances_of_scene_prop"),
  8334. (scene_prop_get_instance, ":prop_instance_id", "spr_winch_b", ":cur_prop_instance"),
  8335. (scene_prop_slot_eq, ":prop_instance_id", scene_prop_open_or_close_slot, 1),
  8336. (scene_prop_get_instance, ":effected_object_instance_id", "spr_portcullis", ":cur_prop_instance"),
  8337. (prop_instance_get_starting_position, pos0, ":effected_object_instance_id"),
  8338. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 1),
  8339. (try_end),
  8340. ]),
  8341.  
  8342. #script_multiplayer_move_moveable_objects_initial_positions
  8343. # INPUT: none
  8344. # OUTPUT: none
  8345. ("multiplayer_move_moveable_objects_initial_positions",
  8346. [
  8347. (call_script, "script_move_object_to_nearest_entry_point", "spr_siege_ladder_move_6m"),
  8348. (call_script, "script_move_object_to_nearest_entry_point", "spr_siege_ladder_move_8m"),
  8349. (call_script, "script_move_object_to_nearest_entry_point", "spr_siege_ladder_move_10m"),
  8350. (call_script, "script_move_object_to_nearest_entry_point", "spr_siege_ladder_move_12m"),
  8351. (call_script, "script_move_object_to_nearest_entry_point", "spr_siege_ladder_move_14m"),
  8352. ]),
  8353.  
  8354. #script_move_belfries_to_their_first_entry_point
  8355. # INPUT: none
  8356. # OUTPUT: none
  8357. ("move_belfries_to_their_first_entry_point",
  8358. [
  8359. (store_script_param, ":belfry_body_scene_prop", 1),
  8360.  
  8361. (set_fixed_point_multiplier, 100),
  8362. (scene_prop_get_num_instances, ":num_belfries", ":belfry_body_scene_prop"),
  8363.  
  8364. (try_for_range, ":belfry_no", 0, ":num_belfries"),
  8365. #belfry
  8366. (scene_prop_get_instance, ":belfry_scene_prop_id", ":belfry_body_scene_prop", ":belfry_no"),
  8367. (prop_instance_get_position, pos0, ":belfry_scene_prop_id"),
  8368.  
  8369. (try_begin),
  8370. (eq, ":belfry_body_scene_prop", "spr_belfry_a"),
  8371. #belfry platform_a
  8372. (scene_prop_get_instance, ":belfry_platform_a_scene_prop_id", "spr_belfry_platform_a", ":belfry_no"),
  8373. #belfry platform_b
  8374. (scene_prop_get_instance, ":belfry_platform_b_scene_prop_id", "spr_belfry_platform_b", ":belfry_no"),
  8375. (else_try),
  8376. #belfry platform_a
  8377. (scene_prop_get_instance, ":belfry_platform_a_scene_prop_id", "spr_belfry_b_platform_a", ":belfry_no"),
  8378. (try_end),
  8379.  
  8380. #belfry wheel_1
  8381. (store_mul, ":wheel_no", ":belfry_no", 3),
  8382. (try_begin),
  8383. (eq, ":belfry_body_scene_prop", "spr_belfry_b"),
  8384. (scene_prop_get_num_instances, ":number_of_belfry_a", "spr_belfry_a"),
  8385. (store_mul, ":number_of_belfry_a_wheels", ":number_of_belfry_a", 3),
  8386. (val_add, ":wheel_no", ":number_of_belfry_a_wheels"),
  8387. (try_end),
  8388. (scene_prop_get_instance, ":belfry_wheel_1_scene_prop_id", "spr_belfry_wheel", ":wheel_no"),
  8389. #belfry wheel_2
  8390. (val_add, ":wheel_no", 1),
  8391. (scene_prop_get_instance, ":belfry_wheel_2_scene_prop_id", "spr_belfry_wheel", ":wheel_no"),
  8392. #belfry wheel_3
  8393. (val_add, ":wheel_no", 1),
  8394. (scene_prop_get_instance, ":belfry_wheel_3_scene_prop_id", "spr_belfry_wheel", ":wheel_no"),
  8395.  
  8396. (store_add, ":belfry_first_entry_point_id", 11, ":belfry_no"), #belfry entry points are 110..119 and 120..129 and 130..139
  8397. (try_begin),
  8398. (eq, ":belfry_body_scene_prop", "spr_belfry_b"),
  8399. (scene_prop_get_num_instances, ":number_of_belfry_a", "spr_belfry_a"),
  8400. (val_add, ":belfry_first_entry_point_id", ":number_of_belfry_a"),
  8401. (try_end),
  8402. (val_mul, ":belfry_first_entry_point_id", 10),
  8403. (entry_point_get_position, pos1, ":belfry_first_entry_point_id"),
  8404.  
  8405. #this code block is taken from module_mission_templates.py (multiplayer_server_check_belfry_movement)
  8406. #up down rotation of belfry's next entry point
  8407. (init_position, pos9),
  8408. (position_set_y, pos9, -500), #go 5.0 meters back
  8409. (position_set_x, pos9, -300), #go 3.0 meters left
  8410. (position_transform_position_to_parent, pos10, pos1, pos9),
  8411. (position_get_distance_to_terrain, ":height_to_terrain_1", pos10), #learn distance between 5 meters back of entry point(pos10) and ground level at left part of belfry
  8412.  
  8413. (init_position, pos9),
  8414. (position_set_y, pos9, -500), #go 5.0 meters back
  8415. (position_set_x, pos9, 300), #go 3.0 meters right
  8416. (position_transform_position_to_parent, pos10, pos1, pos9),
  8417. (position_get_distance_to_terrain, ":height_to_terrain_2", pos10), #learn distance between 5 meters back of entry point(pos10) and ground level at right part of belfry
  8418.  
  8419. (store_add, ":height_to_terrain", ":height_to_terrain_1", ":height_to_terrain_2"),
  8420. (val_mul, ":height_to_terrain", 100), #because of fixed point multiplier
  8421.  
  8422. (store_div, ":rotate_angle_of_next_entry_point", ":height_to_terrain", 24), #if there is 1 meters of distance (100cm) then next target position will rotate by 2 degrees. #ac sonra
  8423. (init_position, pos20),
  8424. (position_rotate_x_floating, pos20, ":rotate_angle_of_next_entry_point"),
  8425. (position_transform_position_to_parent, pos23, pos1, pos20),
  8426.  
  8427. #right left rotation of belfry's next entry point
  8428. (init_position, pos9),
  8429. (position_set_x, pos9, -300), #go 3.0 meters left
  8430. (position_transform_position_to_parent, pos10, pos1, pos9), #applying 3.0 meters in -x to position of next entry point target, final result is in pos10
  8431. (position_get_distance_to_terrain, ":height_to_terrain_at_left", pos10), #learn distance between 3.0 meters left of entry point(pos10) and ground level
  8432. (init_position, pos9),
  8433. (position_set_x, pos9, 300), #go 3.0 meters left
  8434. (position_transform_position_to_parent, pos10, pos1, pos9), #applying 3.0 meters in x to position of next entry point target, final result is in pos10
  8435. (position_get_distance_to_terrain, ":height_to_terrain_at_right", pos10), #learn distance between 3.0 meters right of entry point(pos10) and ground level
  8436. (store_sub, ":height_to_terrain_1", ":height_to_terrain_at_left", ":height_to_terrain_at_right"),
  8437.  
  8438. (init_position, pos9),
  8439. (position_set_x, pos9, -300), #go 3.0 meters left
  8440. (position_set_y, pos9, -500), #go 5.0 meters forward
  8441. (position_transform_position_to_parent, pos10, pos1, pos9), #applying 3.0 meters in -x to position of next entry point target, final result is in pos10
  8442. (position_get_distance_to_terrain, ":height_to_terrain_at_left", pos10), #learn distance between 3.0 meters left of entry point(pos10) and ground level
  8443. (init_position, pos9),
  8444. (position_set_x, pos9, 300), #go 3.0 meters left
  8445. (position_set_y, pos9, -500), #go 5.0 meters forward
  8446. (position_transform_position_to_parent, pos10, pos1, pos9), #applying 3.0 meters in x to position of next entry point target, final result is in pos10
  8447. (position_get_distance_to_terrain, ":height_to_terrain_at_right", pos10), #learn distance between 3.0 meters right of entry point(pos10) and ground level
  8448. (store_sub, ":height_to_terrain_2", ":height_to_terrain_at_left", ":height_to_terrain_at_right"),
  8449.  
  8450. (store_add, ":height_to_terrain", ":height_to_terrain_1", ":height_to_terrain_2"),
  8451. (val_mul, ":height_to_terrain", 100), #100 is because of fixed_point_multiplier
  8452. (store_div, ":rotate_angle_of_next_entry_point", ":height_to_terrain", 24), #if there is 1 meters of distance (100cm) then next target position will rotate by 25 degrees.
  8453. (val_mul, ":rotate_angle_of_next_entry_point", -1),
  8454.  
  8455. (init_position, pos20),
  8456. (position_rotate_y_floating, pos20, ":rotate_angle_of_next_entry_point"),
  8457. (position_transform_position_to_parent, pos22, pos23, pos20),
  8458.  
  8459. (copy_position, pos1, pos22),
  8460. #end of code block
  8461.  
  8462. #belfry
  8463. (prop_instance_stop_animating, ":belfry_scene_prop_id"),
  8464. (prop_instance_set_position, ":belfry_scene_prop_id", pos1),
  8465.  
  8466. #belfry platforms
  8467. (try_begin),
  8468. (eq, ":belfry_body_scene_prop", "spr_belfry_a"),
  8469.  
  8470. #belfry platform_a
  8471. (prop_instance_get_position, pos6, ":belfry_platform_a_scene_prop_id"),
  8472. (position_transform_position_to_local, pos7, pos0, pos6),
  8473. (position_transform_position_to_parent, pos8, pos1, pos7),
  8474. (try_begin),
  8475. (neg|scene_prop_slot_eq, ":belfry_scene_prop_id", scene_prop_belfry_platform_moved, 0),
  8476.  
  8477. (init_position, pos20),
  8478. (position_rotate_x, pos20, 90),
  8479. (position_transform_position_to_parent, pos8, pos8, pos20),
  8480. (try_end),
  8481. (prop_instance_stop_animating, ":belfry_platform_a_scene_prop_id"),
  8482. (prop_instance_set_position, ":belfry_platform_a_scene_prop_id", pos8),
  8483. #belfry platform_b
  8484. (prop_instance_get_position, pos6, ":belfry_platform_b_scene_prop_id"),
  8485. (position_transform_position_to_local, pos7, pos0, pos6),
  8486. (position_transform_position_to_parent, pos8, pos1, pos7),
  8487. (prop_instance_stop_animating, ":belfry_platform_b_scene_prop_id"),
  8488. (prop_instance_set_position, ":belfry_platform_b_scene_prop_id", pos8),
  8489. (else_try),
  8490. #belfry platform_a
  8491. (prop_instance_get_position, pos6, ":belfry_platform_a_scene_prop_id"),
  8492. (position_transform_position_to_local, pos7, pos0, pos6),
  8493. (position_transform_position_to_parent, pos8, pos1, pos7),
  8494. (try_begin),
  8495. (neg|scene_prop_slot_eq, ":belfry_scene_prop_id", scene_prop_belfry_platform_moved, 0),
  8496.  
  8497. (init_position, pos20),
  8498. (position_rotate_x, pos20, 50),
  8499. (position_transform_position_to_parent, pos8, pos8, pos20),
  8500. (try_end),
  8501. (prop_instance_stop_animating, ":belfry_platform_a_scene_prop_id"),
  8502. (prop_instance_set_position, ":belfry_platform_a_scene_prop_id", pos8),
  8503. (try_end),
  8504.  
  8505. #belfry wheel_1
  8506. (store_mul, ":wheel_no", ":belfry_no", 3),
  8507. (try_begin),
  8508. (eq, ":belfry_body_scene_prop", "spr_belfry_b"),
  8509. (scene_prop_get_num_instances, ":number_of_belfry_a", "spr_belfry_a"),
  8510. (store_mul, ":number_of_belfry_a_wheels", ":number_of_belfry_a", 3),
  8511. (val_add, ":wheel_no", ":number_of_belfry_a_wheels"),
  8512. (try_end),
  8513. (prop_instance_get_position, pos6, ":belfry_wheel_1_scene_prop_id"),
  8514. (position_transform_position_to_local, pos7, pos0, pos6),
  8515. (position_transform_position_to_parent, pos8, pos1, pos7),
  8516. (prop_instance_stop_animating, ":belfry_wheel_1_scene_prop_id"),
  8517. (prop_instance_set_position, ":belfry_wheel_1_scene_prop_id", pos8),
  8518. #belfry wheel_2
  8519. (prop_instance_get_position, pos6, ":belfry_wheel_2_scene_prop_id"),
  8520. (position_transform_position_to_local, pos7, pos0, pos6),
  8521. (position_transform_position_to_parent, pos8, pos1, pos7),
  8522. (prop_instance_stop_animating, ":belfry_wheel_2_scene_prop_id"),
  8523. (prop_instance_set_position, ":belfry_wheel_2_scene_prop_id", pos8),
  8524. #belfry wheel_3
  8525. (prop_instance_get_position, pos6, ":belfry_wheel_3_scene_prop_id"),
  8526. (position_transform_position_to_local, pos7, pos0, pos6),
  8527. (position_transform_position_to_parent, pos8, pos1, pos7),
  8528. (prop_instance_stop_animating, ":belfry_wheel_3_scene_prop_id"),
  8529. (prop_instance_set_position, ":belfry_wheel_3_scene_prop_id", pos8),
  8530. (try_end),
  8531. ]),
  8532.  
  8533. #script_team_set_score
  8534. # INPUT: arg1 = team_no, arg2 = score
  8535. # OUTPUT: none
  8536. ("team_set_score",
  8537. [
  8538. (store_script_param, ":team_no", 1),
  8539. (store_script_param, ":score", 2),
  8540.  
  8541. (team_set_score, ":team_no", ":score"),
  8542. ]),
  8543.  
  8544. #script_player_set_score
  8545. # INPUT: arg1 = player_no, arg2 = score
  8546. # OUTPUT: none
  8547. ("player_set_score",
  8548. [
  8549. (store_script_param, ":player_no", 1),
  8550. (store_script_param, ":score", 2),
  8551.  
  8552. (player_set_score, ":player_no", ":score"),
  8553. ]),
  8554.  
  8555. #script_player_set_kill_count
  8556. # INPUT: arg1 = player_no, arg2 = score
  8557. # OUTPUT: none
  8558. ("player_set_kill_count",
  8559. [
  8560. (store_script_param, ":player_no", 1),
  8561. (store_script_param, ":score", 2),
  8562.  
  8563. (player_set_kill_count, ":player_no", ":score"),
  8564. ]),
  8565.  
  8566. #script_player_set_death_count
  8567. # INPUT: arg1 = player_no, arg2 = score
  8568. # OUTPUT: none
  8569. ("player_set_death_count",
  8570. [
  8571. (store_script_param, ":player_no", 1),
  8572. (store_script_param, ":score", 2),
  8573.  
  8574. (player_set_death_count, ":player_no", ":score"),
  8575. ]),
  8576.  
  8577. #script_set_attached_scene_prop
  8578. # INPUT: arg1 = agent_id, arg2 = flag_id
  8579. # OUTPUT: none
  8580. ("set_attached_scene_prop",
  8581. [
  8582. (store_script_param, ":agent_id", 1),
  8583. (store_script_param, ":flag_id", 2),
  8584.  
  8585. (try_begin), #if current mod is capture the flag and attached scene prop is flag then change flag situation of flag owner team.
  8586. (scene_prop_get_instance, ":red_flag_id", "spr_tutorial_flag_red", 0),
  8587. (scene_prop_get_instance, ":blue_flag_id", "spr_tutorial_flag_blue", 0),
  8588. (assign, ":flag_owner_team", -1),
  8589. (try_begin),
  8590. (ge, ":red_flag_id", 0),
  8591. (eq, ":flag_id", ":red_flag_id"),
  8592. (assign, ":flag_owner_team", 0),
  8593. (else_try),
  8594. (ge, ":blue_flag_id", 0),
  8595. (eq, ":flag_id", ":blue_flag_id"),
  8596. (assign, ":flag_owner_team", 1),
  8597. (try_end),
  8598. (ge, ":flag_owner_team", 0),
  8599. (team_set_slot, ":flag_owner_team", slot_team_flag_situation, 1), #1-stolen flag
  8600. (try_end),
  8601.  
  8602. (agent_set_attached_scene_prop, ":agent_id", ":flag_id"),
  8603. (agent_set_attached_scene_prop_x, ":agent_id", 20),
  8604. (agent_set_attached_scene_prop_z, ":agent_id", 50),
  8605. ]),
  8606.  
  8607. #script_set_team_flag_situation
  8608. # INPUT: arg1 = team_no, arg2 = score
  8609. # OUTPUT: none
  8610. ("set_team_flag_situation",
  8611. [
  8612. (store_script_param, ":team_no", 1),
  8613. (store_script_param, ":flag_situation", 2),
  8614.  
  8615. (team_set_slot, ":team_no", slot_team_flag_situation, ":flag_situation"),
  8616. ]),
  8617.  
  8618. #script_start_death_mode
  8619. # INPUT: none
  8620. # OUTPUT: none
  8621. ("start_death_mode",
  8622. [
  8623. (assign, "$g_multiplayer_message_type", multiplayer_message_type_start_death_mode),
  8624. (start_presentation, "prsnt_multiplayer_message_1"),
  8625. ]),
  8626.  
  8627. #script_calculate_new_death_waiting_time_at_death_mod
  8628. # INPUT: none
  8629. # OUTPUT: none
  8630. ("calculate_new_death_waiting_time_at_death_mod",
  8631. [
  8632. (assign, ":num_living_players", 0), #count number of living players to find out death wait time
  8633. (try_begin),
  8634. (try_for_agents, ":agent_no"),
  8635. (agent_is_human, ":agent_no"),
  8636. (agent_is_alive, ":agent_no"),
  8637. (val_add, ":num_living_players", 1),
  8638. (try_end),
  8639. (try_end),
  8640.  
  8641. (val_add, ":num_living_players", multiplayer_battle_formula_value_a),
  8642. (set_fixed_point_multiplier, 100),
  8643. (store_mul, ":num_living_players", ":num_living_players", 100),
  8644. (store_sqrt, ":sqrt_num_living_players", ":num_living_players"),
  8645. (store_div, "$g_battle_waiting_seconds", multiplayer_battle_formula_value_b, ":sqrt_num_living_players"),
  8646. (store_mission_timer_a, "$g_death_mode_part_1_start_time"),
  8647. ]),
  8648.  
  8649. #script_calculate_number_of_targets_destroyed
  8650. # INPUT: none
  8651. # OUTPUT: none
  8652.  
  8653. ("calculate_number_of_targets_destroyed",
  8654. [
  8655. (assign, "$g_number_of_targets_destroyed", 0),
  8656. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_catapult_destructible"),
  8657. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8658. (scene_prop_get_instance, ":cur_instance_id", "spr_catapult_destructible", ":cur_instance"),
  8659. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8660. (prop_instance_get_position, pos1, ":cur_instance_id"),
  8661. (get_sq_distance_between_positions_in_meters, ":dist", pos0, pos1),
  8662. (gt, ":dist", 2), #this can be 0 or 1 too.
  8663. (val_add, "$g_number_of_targets_destroyed", 1),
  8664. (try_end),
  8665.  
  8666. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_trebuchet_destructible"),
  8667. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8668. (scene_prop_get_instance, ":cur_instance_id", "spr_trebuchet_destructible", ":cur_instance"),
  8669. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8670. (prop_instance_get_position, pos1, ":cur_instance_id"),
  8671. (get_sq_distance_between_positions_in_meters, ":dist", pos0, pos1),
  8672. (gt, ":dist", 2), #this can be 0 or 1 too.
  8673. (val_add, "$g_number_of_targets_destroyed", 1),
  8674. (try_end),
  8675. ]),
  8676.  
  8677. #script_initialize_objects
  8678. # INPUT: none
  8679. # OUTPUT: none
  8680. ("initialize_objects",
  8681. [
  8682. (assign, ":number_of_players", 0),
  8683. (get_max_players, ":num_players"),
  8684. (try_for_range, ":player_no", 0, ":num_players"),
  8685. (player_is_active, ":player_no"),
  8686. (val_add, ":number_of_players", 1),
  8687. (try_end),
  8688.  
  8689. #1 player = (Sqrt(1) - 1) * 200 + 1200 = 1200, 1800 (minimum)
  8690. #4 player = (Sqrt(4) - 1) * 200 + 1200 = 1400, 2100
  8691. #9 player = (Sqrt(9) - 1) * 200 + 1200 = 1600, 2400
  8692. #16 player = (Sqrt(16) - 1) * 200 + 1200 = 1800, 2700 (general used)
  8693. #25 player = (Sqrt(25) - 1) * 200 + 1200 = 2000, 3000 (average)
  8694. #36 player = (Sqrt(36) - 1) * 200 + 1200 = 2200, 3300
  8695. #49 player = (Sqrt(49) - 1) * 200 + 1200 = 2400, 3600
  8696. #64 player = (Sqrt(49) - 1) * 200 + 1200 = 2600, 3900
  8697.  
  8698. (set_fixed_point_multiplier, 100),
  8699. (val_mul, ":number_of_players", 100),
  8700. (store_sqrt, ":number_of_players", ":number_of_players"),
  8701. (val_sub, ":number_of_players", 100),
  8702. (val_max, ":number_of_players", 0),
  8703. (store_mul, ":effect_of_number_of_players", ":number_of_players", 2),
  8704. (store_add, ":health_catapult", multi_minimum_target_health, ":effect_of_number_of_players"),
  8705. (store_mul, ":health_trebuchet", ":health_catapult", 15), #trebuchet's health is 1.5x of catapult's
  8706. (val_div, ":health_trebuchet", 10),
  8707. (store_mul, ":health_sally_door", ":health_catapult", 18), #sally door's health is 1.8x of catapult's
  8708. (val_div, ":health_sally_door", 10),
  8709. (store_mul, ":health_sally_door_double", ":health_sally_door", 2),
  8710.  
  8711. (assign, "$g_number_of_targets_destroyed", 0),
  8712.  
  8713. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_catapult_destructible"),
  8714. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8715. (scene_prop_get_instance, ":cur_instance_id", "spr_catapult_destructible", ":cur_instance"),
  8716. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8717. (prop_instance_stop_animating, ":cur_instance_id"),
  8718. (prop_instance_set_position, ":cur_instance_id", pos0),
  8719. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8720. (scene_prop_set_hit_points, ":cur_instance_id", ":health_catapult"),
  8721. (try_end),
  8722.  
  8723. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_trebuchet_destructible"),
  8724. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8725. (scene_prop_get_instance, ":cur_instance_id", "spr_trebuchet_destructible", ":cur_instance"),
  8726. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8727. (prop_instance_stop_animating, ":cur_instance_id"),
  8728. (prop_instance_set_position, ":cur_instance_id", pos0),
  8729. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8730. (scene_prop_set_hit_points, ":cur_instance_id", ":health_trebuchet"),
  8731. (try_end),
  8732.  
  8733. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_e_sally_door_a"),
  8734. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8735. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_e_sally_door_a", ":cur_instance"),
  8736. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8737. (prop_instance_stop_animating, ":cur_instance_id"),
  8738. (prop_instance_set_position, ":cur_instance_id", pos0),
  8739. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8740. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8741. (try_end),
  8742.  
  8743. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_f_sally_door_a"),
  8744. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8745. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_f_sally_door_a", ":cur_instance"),
  8746. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8747. (prop_instance_stop_animating, ":cur_instance_id"),
  8748. (prop_instance_set_position, ":cur_instance_id", pos0),
  8749. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8750. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8751. (try_end),
  8752.  
  8753. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_earth_sally_gate_left"),
  8754. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8755. (scene_prop_get_instance, ":cur_instance_id", "spr_earth_sally_gate_left", ":cur_instance"),
  8756. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8757. (prop_instance_stop_animating, ":cur_instance_id"),
  8758. (prop_instance_set_position, ":cur_instance_id", pos0),
  8759. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8760. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_double"),
  8761. (try_end),
  8762.  
  8763. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_earth_sally_gate_right"),
  8764. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8765. (scene_prop_get_instance, ":cur_instance_id", "spr_earth_sally_gate_right", ":cur_instance"),
  8766. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8767. (prop_instance_stop_animating, ":cur_instance_id"),
  8768. (prop_instance_set_position, ":cur_instance_id", pos0),
  8769. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8770. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_double"),
  8771. (try_end),
  8772.  
  8773. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_viking_keep_destroy_sally_door_left"),
  8774. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8775. (scene_prop_get_instance, ":cur_instance_id", "spr_viking_keep_destroy_sally_door_left", ":cur_instance"),
  8776. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8777. (prop_instance_stop_animating, ":cur_instance_id"),
  8778. (prop_instance_set_position, ":cur_instance_id", pos0),
  8779. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8780. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8781. (try_end),
  8782.  
  8783. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_viking_keep_destroy_sally_door_right"),
  8784. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8785. (scene_prop_get_instance, ":cur_instance_id", "spr_viking_keep_destroy_sally_door_right", ":cur_instance"),
  8786. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8787. (prop_instance_stop_animating, ":cur_instance_id"),
  8788. (prop_instance_set_position, ":cur_instance_id", pos0),
  8789. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8790. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8791. (try_end),
  8792.  
  8793. (store_div, ":health_sally_door_div_3", ":health_sally_door", 3),
  8794.  
  8795. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_f_door_a"),
  8796. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8797. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_f_door_a", ":cur_instance"),
  8798. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8799. (prop_instance_stop_animating, ":cur_instance_id"),
  8800. (prop_instance_set_position, ":cur_instance_id", pos0),
  8801. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8802. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_div_3"),
  8803. (try_end),
  8804.  
  8805. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_f_door_b"),
  8806. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8807. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_f_door_b", ":cur_instance"),
  8808. (prop_instance_get_starting_position, pos0, ":cur_instance_id"),
  8809. (prop_instance_stop_animating, ":cur_instance_id"),
  8810. (prop_instance_set_position, ":cur_instance_id", pos0),
  8811. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8812. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_div_3"),
  8813. (try_end),
  8814. ]),
  8815.  
  8816. #script_initialize_objects_clients
  8817. # INPUT: none
  8818. # OUTPUT: none
  8819. ("initialize_objects_clients",
  8820. [
  8821. (assign, ":number_of_players", 0),
  8822. (get_max_players, ":num_players"),
  8823. (try_for_range, ":player_no", 0, ":num_players"),
  8824. (player_is_active, ":player_no"),
  8825. (val_add, ":number_of_players", 1),
  8826. (try_end),
  8827.  
  8828. #1 player = (Sqrt(1) - 1) * 200 + 1200 = 1200, 1800 (minimum)
  8829. #4 player = (Sqrt(4) - 1) * 200 + 1200 = 1400, 2100
  8830. #9 player = (Sqrt(9) - 1) * 200 + 1200 = 1600, 2400
  8831. #16 player = (Sqrt(16) - 1) * 200 + 1200 = 1800, 2700 (general used)
  8832. #25 player = (Sqrt(25) - 1) * 200 + 1200 = 2000, 3000 (average)
  8833. #36 player = (Sqrt(36) - 1) * 200 + 1200 = 2200, 3300
  8834. #49 player = (Sqrt(49) - 1) * 200 + 1200 = 2400, 3600
  8835. #64 player = (Sqrt(49) - 1) * 200 + 1200 = 2600, 3900
  8836.  
  8837. (set_fixed_point_multiplier, 100),
  8838. (val_mul, ":number_of_players", 100),
  8839. (store_sqrt, ":number_of_players", ":number_of_players"),
  8840. (val_sub, ":number_of_players", 100),
  8841. (val_max, ":number_of_players", 0),
  8842. (store_mul, ":effect_of_number_of_players", ":number_of_players", 2),
  8843. (store_add, ":health_catapult", multi_minimum_target_health, ":effect_of_number_of_players"),
  8844. (store_mul, ":health_trebuchet", ":health_catapult", 15), #trebuchet's health is 1.5x of catapult's
  8845. (val_div, ":health_trebuchet", 10),
  8846. (store_mul, ":health_sally_door", ":health_catapult", 18), #trebuchet's health is 1.8x of trebuchet's
  8847. (val_div, ":health_sally_door", 10),
  8848. (store_mul, ":health_sally_door_double", ":health_sally_door", 2),
  8849.  
  8850. (assign, "$g_number_of_targets_destroyed", 0),
  8851.  
  8852. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_catapult_destructible"),
  8853. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8854. (scene_prop_get_instance, ":cur_instance_id", "spr_catapult_destructible", ":cur_instance"),
  8855. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8856. (scene_prop_set_hit_points, ":cur_instance_id", ":health_catapult"),
  8857. (try_end),
  8858.  
  8859. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_trebuchet_destructible"),
  8860. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8861. (scene_prop_get_instance, ":cur_instance_id", "spr_trebuchet_destructible", ":cur_instance"),
  8862. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8863. (scene_prop_set_hit_points, ":cur_instance_id", ":health_trebuchet"),
  8864. (try_end),
  8865.  
  8866. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_e_sally_door_a"),
  8867. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8868. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_e_sally_door_a", ":cur_instance"),
  8869. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8870. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8871. (try_end),
  8872.  
  8873. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_f_sally_door_a"),
  8874. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8875. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_f_sally_door_a", ":cur_instance"),
  8876. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8877. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8878. (try_end),
  8879.  
  8880. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_earth_sally_gate_left"),
  8881. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8882. (scene_prop_get_instance, ":cur_instance_id", "spr_earth_sally_gate_left", ":cur_instance"),
  8883. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8884. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_double"),
  8885. (try_end),
  8886.  
  8887. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_earth_sally_gate_right"),
  8888. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8889. (scene_prop_get_instance, ":cur_instance_id", "spr_earth_sally_gate_right", ":cur_instance"),
  8890. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8891. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_double"),
  8892. (try_end),
  8893.  
  8894. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_viking_keep_destroy_sally_door_left"),
  8895. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8896. (scene_prop_get_instance, ":cur_instance_id", "spr_viking_keep_destroy_sally_door_left", ":cur_instance"),
  8897. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8898. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8899. (try_end),
  8900.  
  8901. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_viking_keep_destroy_sally_door_right"),
  8902. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8903. (scene_prop_get_instance, ":cur_instance_id", "spr_viking_keep_destroy_sally_door_right", ":cur_instance"),
  8904. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8905. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door"),
  8906. (try_end),
  8907.  
  8908. (store_div, ":health_sally_door_div_3", ":health_sally_door", 3),
  8909.  
  8910. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_f_door_a"),
  8911. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8912. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_f_door_a", ":cur_instance"),
  8913. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8914. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_div_3"),
  8915. (try_end),
  8916.  
  8917. (scene_prop_get_num_instances, ":num_instances_of_scene_prop", "spr_castle_f_door_b"),
  8918. (try_for_range, ":cur_instance", 0, ":num_instances_of_scene_prop"),
  8919. (scene_prop_get_instance, ":cur_instance_id", "spr_castle_f_door_b", ":cur_instance"),
  8920. (prop_instance_enable_physics, ":cur_instance_id", 1),
  8921. (scene_prop_set_hit_points, ":cur_instance_id", ":health_sally_door_div_3"),
  8922. (try_end),
  8923. ]),
  8924.  
  8925. #script_show_multiplayer_message
  8926. # INPUT: arg1 = multiplayer_message_type
  8927. # OUTPUT: none
  8928. ("show_multiplayer_message",
  8929. [
  8930. (store_script_param, ":multiplayer_message_type", 1),
  8931. (store_script_param, ":value", 2),
  8932.  
  8933. (assign, "$g_multiplayer_message_type", ":multiplayer_message_type"),
  8934.  
  8935. (try_begin),
  8936. (eq, ":multiplayer_message_type", multiplayer_message_type_round_result_in_battle_mode),
  8937. (assign, "$g_multiplayer_message_value_1", ":value"),
  8938. (start_presentation, "prsnt_multiplayer_message_1"),
  8939.  
  8940. (try_begin), #end of round in clients
  8941. (neg|multiplayer_is_server),
  8942. (assign, "$g_battle_death_mode_started", 0),
  8943. (try_end),
  8944. (else_try),
  8945. (eq, ":multiplayer_message_type", multiplayer_message_type_auto_team_balance_done),
  8946. (assign, "$g_multiplayer_message_value_1", ":value"),
  8947. (start_presentation, "prsnt_multiplayer_message_2"),
  8948. (assign, "$g_team_balance_next_round", 0),
  8949. (else_try),
  8950. (eq, ":multiplayer_message_type", multiplayer_message_type_auto_team_balance_next),
  8951. (assign, "$g_team_balance_next_round", 1),
  8952. (call_script, "script_warn_player_about_auto_team_balance"),
  8953. (else_try),
  8954. (eq, ":multiplayer_message_type", multiplayer_message_type_auto_team_balance_no_need),
  8955. (assign, "$g_team_balance_next_round", 0),
  8956. (else_try),
  8957. (eq, ":multiplayer_message_type", multiplayer_message_type_capture_the_flag_score),
  8958. (assign, "$g_multiplayer_message_value_1", ":value"),
  8959. (start_presentation, "prsnt_multiplayer_message_1"),
  8960. (else_try),
  8961. (eq, ":multiplayer_message_type", multiplayer_message_type_flag_returned_home),
  8962. (assign, "$g_multiplayer_message_value_1", ":value"),
  8963. (start_presentation, "prsnt_multiplayer_message_1"),
  8964. (else_try),
  8965. (eq, ":multiplayer_message_type", multiplayer_message_type_capture_the_flag_stole),
  8966. (assign, "$g_multiplayer_message_value_1", ":value"),
  8967. (start_presentation, "prsnt_multiplayer_message_1"),
  8968. (else_try),
  8969. (eq, ":multiplayer_message_type", multiplayer_message_type_poll_result),
  8970. (assign, "$g_multiplayer_message_value_3", ":value"),
  8971. (start_presentation, "prsnt_multiplayer_message_3"),
  8972. (else_try),
  8973. (eq, ":multiplayer_message_type", multiplayer_message_type_flag_neutralized),
  8974. (assign, "$g_multiplayer_message_value_1", ":value"),
  8975. (start_presentation, "prsnt_multiplayer_message_1"),
  8976. (else_try),
  8977. (eq, ":multiplayer_message_type", multiplayer_message_type_flag_captured),
  8978. (assign, "$g_multiplayer_message_value_1", ":value"),
  8979. (start_presentation, "prsnt_multiplayer_message_1"),
  8980. (else_try),
  8981. (eq, ":multiplayer_message_type", multiplayer_message_type_flag_is_pulling),
  8982. (assign, "$g_multiplayer_message_value_1", ":value"),
  8983. (start_presentation, "prsnt_multiplayer_message_1"),
  8984. (else_try),
  8985. (eq, ":multiplayer_message_type", multiplayer_message_type_round_draw),
  8986. (start_presentation, "prsnt_multiplayer_message_1"),
  8987. (else_try),
  8988. (eq, ":multiplayer_message_type", multiplayer_message_type_target_destroyed),
  8989.  
  8990. (try_begin), #destroy score (condition : a target destroyed)
  8991. (eq, "$g_defender_team", 0),
  8992. (assign, ":attacker_team_no", 1),
  8993. (else_try),
  8994. (assign, ":attacker_team_no", 0),
  8995. (try_end),
  8996.  
  8997. (team_get_score, ":team_score", ":attacker_team_no"),
  8998. (val_add, ":team_score", 1),
  8999. (call_script, "script_team_set_score", ":attacker_team_no", ":team_score"), #destroy score end
  9000.  
  9001. (assign, "$g_multiplayer_message_value_1", ":value"),
  9002. (start_presentation, "prsnt_multiplayer_message_1"),
  9003. (else_try),
  9004. (eq, ":multiplayer_message_type", multiplayer_message_type_defenders_saved_n_targets),
  9005. (assign, "$g_multiplayer_message_value_1", ":value"),
  9006. (start_presentation, "prsnt_multiplayer_message_1"),
  9007. (else_try),
  9008. (eq, ":multiplayer_message_type", multiplayer_message_type_attackers_won_the_round),
  9009. (try_begin),
  9010. (eq, "$g_defender_team", 0),
  9011. (assign, "$g_multiplayer_message_value_1", 1),
  9012. (else_try),
  9013. (assign, "$g_multiplayer_message_value_1", 0),
  9014. (try_end),
  9015. (start_presentation, "prsnt_multiplayer_message_1"),
  9016. (try_end),
  9017. ]),
  9018.  
  9019. #script_get_headquarters_scores
  9020. # INPUT: none
  9021. # OUTPUT: reg0 = team_1_num_flags, reg1 = team_2_num_flags
  9022. ("get_headquarters_scores",
  9023. [
  9024. (assign, ":team_1_num_flags", 0),
  9025. (assign, ":team_2_num_flags", 0),
  9026. (try_for_range, ":flag_no", 0, "$g_number_of_flags"),
  9027. (store_add, ":cur_flag_owner_slot", multi_data_flag_owner_begin, ":flag_no"),
  9028. (troop_get_slot, ":cur_flag_owner", "trp_multiplayer_data", ":cur_flag_owner_slot"),
  9029. (neq, ":cur_flag_owner", 0),
  9030. (try_begin),
  9031. (eq, ":cur_flag_owner", 1),
  9032. (val_add, ":team_1_num_flags", 1),
  9033. (else_try),
  9034. (val_add, ":team_2_num_flags", 1),
  9035. (try_end),
  9036. (try_end),
  9037. (assign, reg0, ":team_1_num_flags"),
  9038. (assign, reg1, ":team_2_num_flags"),
  9039. ]),
  9040.  
  9041.  
  9042. #script_draw_this_round
  9043. # INPUT: arg1 = value
  9044. ("draw_this_round",
  9045. [
  9046. (store_script_param, ":value", 1),
  9047. (try_begin),
  9048. (eq, ":value", -9), #destroy mod round end
  9049. (assign, "$g_round_ended", 1),
  9050. (store_mission_timer_a, "$g_round_finish_time"),
  9051. #(assign, "$g_multiplayer_message_value_1", -1),
  9052. #(assign, "$g_multiplayer_message_type", multiplayer_message_type_round_draw),
  9053. #(start_presentation, "prsnt_multiplayer_message_1"),
  9054. (else_try),
  9055. (eq, ":value", -1), #draw
  9056. (assign, "$g_round_ended", 1),
  9057. (store_mission_timer_a, "$g_round_finish_time"),
  9058. (assign, "$g_multiplayer_message_value_1", -1),
  9059. (assign, "$g_multiplayer_message_type", multiplayer_message_type_round_draw),
  9060. (start_presentation, "prsnt_multiplayer_message_1"),
  9061. (else_try),
  9062. (eq, ":value", 0), #defender wins
  9063. #THIS_IS_OUR_LAND achievement
  9064. (try_begin),
  9065. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  9066. (multiplayer_get_my_player, ":my_player_no"),
  9067. (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
  9068. (player_get_agent_id, ":my_player_agent", ":my_player_no"),
  9069. (ge, ":my_player_agent", 0),
  9070. (agent_is_alive, ":my_player_agent"),
  9071. (agent_get_team, ":my_player_agent_team_no", ":my_player_agent"),
  9072. (eq, ":my_player_agent_team_no", 0), #defender
  9073. (unlock_achievement, ACHIEVEMENT_THIS_IS_OUR_LAND),
  9074. (try_end),
  9075. #THIS_IS_OUR_LAND achievement end
  9076. (assign, "$g_round_ended", 1),
  9077. (store_mission_timer_a, "$g_round_finish_time"),
  9078.  
  9079. (team_get_faction, ":faction_of_winner_team", 0),
  9080. (team_get_score, ":team_1_score", 0),
  9081. (val_add, ":team_1_score", 1),
  9082. (team_set_score, 0, ":team_1_score"),
  9083. (assign, "$g_winner_team", 0),
  9084. (str_store_faction_name, s1, ":faction_of_winner_team"),
  9085.  
  9086. (assign, "$g_multiplayer_message_value_1", ":value"),
  9087. (try_begin),
  9088. (neq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  9089. (neq, "$g_multiplayer_game_type", multiplayer_game_type_destroy),
  9090. (assign, "$g_multiplayer_message_type", multiplayer_message_type_round_result_in_siege_mode),
  9091. (else_try),
  9092. (assign, "$g_multiplayer_message_type", multiplayer_message_type_round_result_in_battle_mode),
  9093. (try_end),
  9094. (start_presentation, "prsnt_multiplayer_message_1"),
  9095. (else_try),
  9096. (eq, ":value", 1), #attacker wins
  9097. (assign, "$g_round_ended", 1),
  9098. (store_mission_timer_a, "$g_round_finish_time"),
  9099.  
  9100. (team_get_faction, ":faction_of_winner_team", 1),
  9101. (team_get_score, ":team_2_score", 1),
  9102. (val_add, ":team_2_score", 1),
  9103. (team_set_score, 1, ":team_2_score"),
  9104. (assign, "$g_winner_team", 1),
  9105. (str_store_faction_name, s1, ":faction_of_winner_team"),
  9106.  
  9107. (assign, "$g_multiplayer_message_value_1", ":value"),
  9108. (try_begin),
  9109. (neq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  9110. (neq, "$g_multiplayer_game_type", multiplayer_game_type_destroy),
  9111. (assign, "$g_multiplayer_message_type", multiplayer_message_type_round_result_in_siege_mode),
  9112. (else_try),
  9113. (assign, "$g_multiplayer_message_type", multiplayer_message_type_round_result_in_battle_mode),
  9114. (try_end),
  9115. (start_presentation, "prsnt_multiplayer_message_1"),
  9116. (try_end),
  9117. #LAST_MAN_STANDING achievement
  9118. (try_begin),
  9119. (is_between, ":value", 0, 2), #defender or attacker wins
  9120. (try_begin),
  9121. (eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  9122. (multiplayer_get_my_player, ":my_player_no"),
  9123. (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
  9124. (player_get_agent_id, ":my_player_agent", ":my_player_no"),
  9125. (ge, ":my_player_agent", 0),
  9126. (agent_is_alive, ":my_player_agent"),
  9127. (agent_get_team, ":my_player_agent_team_no", ":my_player_agent"),
  9128. (eq, ":my_player_agent_team_no", ":value"), #winner team
  9129. (unlock_achievement, ACHIEVEMENT_LAST_MAN_STANDING),
  9130. (try_end),
  9131. (try_end),
  9132. #LAST_MAN_STANDING achievement end
  9133. ]),
  9134.  
  9135. #script_check_achievement_last_man_standing
  9136. #INPUT: arg1 = value
  9137. ("check_achievement_last_man_standing",
  9138. [
  9139. #LAST_MAN_STANDING achievement
  9140. (try_begin),
  9141. (store_script_param, ":value", 1),
  9142. (is_between, ":value", 0, 2), #defender or attacker wins
  9143. (try_begin),
  9144. (eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  9145. (multiplayer_get_my_player, ":my_player_no"),
  9146. (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
  9147. (player_get_agent_id, ":my_player_agent", ":my_player_no"),
  9148. (ge, ":my_player_agent", 0),
  9149. (agent_is_alive, ":my_player_agent"),
  9150. (agent_get_team, ":my_player_agent_team_no", ":my_player_agent"),
  9151. (eq, ":my_player_agent_team_no", ":value"), #winner team
  9152. (unlock_achievement, ACHIEVEMENT_LAST_MAN_STANDING),
  9153. (try_end),
  9154. (try_end),
  9155. #LAST_MAN_STANDING achievement end
  9156. ]),
  9157.  
  9158. #script_find_most_suitable_bot_to_control
  9159. # INPUT: arg1 = value
  9160. ("find_most_suitable_bot_to_control",
  9161. [
  9162. (set_fixed_point_multiplier, 100),
  9163. (store_script_param, ":player_no", 1),
  9164. (player_get_team_no, ":player_team", ":player_no"),
  9165.  
  9166. (player_get_slot, ":x_coor", ":player_no", slot_player_death_pos_x),
  9167. (player_get_slot, ":y_coor", ":player_no", slot_player_death_pos_y),
  9168. (player_get_slot, ":z_coor", ":player_no", slot_player_death_pos_z),
  9169.  
  9170. (init_position, pos0),
  9171. (position_set_x, pos0, ":x_coor"),
  9172. (position_set_y, pos0, ":y_coor"),
  9173. (position_set_z, pos0, ":z_coor"),
  9174.  
  9175. (assign, ":most_suitable_bot", -1),
  9176. (assign, ":max_bot_score", -1),
  9177.  
  9178. (try_for_agents, ":cur_agent"),
  9179. (agent_is_alive, ":cur_agent"),
  9180. (agent_is_human, ":cur_agent"),
  9181. (agent_is_non_player, ":cur_agent"),
  9182. (agent_get_team ,":cur_team", ":cur_agent"),
  9183. (eq, ":cur_team", ":player_team"),
  9184. (agent_get_position, pos1, ":cur_agent"),
  9185.  
  9186. #getting score for distance of agent to death point (0..3000)
  9187. (get_distance_between_positions_in_meters, ":dist", pos0, pos1),
  9188.  
  9189. (try_begin),
  9190. (lt, ":dist", 500),
  9191. (store_sub, ":bot_score", 500, ":dist"),
  9192. (else_try),
  9193. (assign, ":bot_score", 0),
  9194. (try_end),
  9195. (val_mul, ":bot_score", 6),
  9196.  
  9197. #getting score for distance of agent to enemy & friend agents (0..300 x agents)
  9198. (try_for_agents, ":cur_agent_2"),
  9199. (agent_is_alive, ":cur_agent_2"),
  9200. (agent_is_human, ":cur_agent_2"),
  9201. (neq, ":cur_agent", ":cur_agent_2"),
  9202. (agent_get_team ,":cur_team_2", ":cur_agent_2"),
  9203. (try_begin),
  9204. (neq, ":cur_team_2", ":player_team"),
  9205. (agent_get_position, pos1, ":cur_agent_2"),
  9206. (get_distance_between_positions, ":dist_2", pos0, pos1),
  9207. (try_begin),
  9208. (lt, ":dist_2", 300),
  9209. (assign, ":enemy_near_score", ":dist_2"),
  9210. (else_try),
  9211. (assign, ":enemy_near_score", 300),
  9212. (try_end),
  9213. (val_add, ":bot_score", ":enemy_near_score"),
  9214. (else_try),
  9215. (agent_get_position, pos1, ":cur_agent_2"),
  9216. (get_distance_between_positions, ":dist_2", pos0, pos1),
  9217. (try_begin),
  9218. (lt, ":dist_2", 300),
  9219. (assign, ":friend_near_score", 300, ":dist_2"),
  9220. (else_try),
  9221. (assign, ":friend_near_score", 0),
  9222. (try_end),
  9223. (val_add, ":bot_score", ":friend_near_score"),
  9224. (try_end),
  9225. (try_end),
  9226.  
  9227. #getting score for health (0..200)
  9228. (store_agent_hit_points, ":agent_hit_points", ":cur_agent"),
  9229. (val_mul, ":agent_hit_points", 2),
  9230. (val_add, ":bot_score", ":agent_hit_points"),
  9231.  
  9232. (ge, ":bot_score", ":max_bot_score"),
  9233. (assign, ":max_bot_score", ":bot_score"),
  9234. (assign, ":most_suitable_bot", ":cur_agent"),
  9235. (try_end),
  9236.  
  9237. (assign, reg0, ":most_suitable_bot"),
  9238. ]),
  9239.  
  9240. #script_game_receive_url_response
  9241. #response format should be like this:
  9242. # [a number or a string]|[another number or a string]|[yet another number or a string] ...
  9243. # here is an example response:
  9244. # 12|Player|100|another string|142|323542|34454|yet another string
  9245. # INPUT: arg1 = num_integers, arg2 = num_strings
  9246. # reg0, reg1, reg2, ... up to 128 registers contain the integer values
  9247. # s0, s1, s2, ... up to 128 strings contain the string values
  9248. ("game_receive_url_response",
  9249. [
  9250. #here is an example usage
  9251. ## (store_script_param, ":num_integers", 1),
  9252. ## (store_script_param, ":num_strings", 2),
  9253. ## (try_begin),
  9254. ## (gt, ":num_integers", 4),
  9255. ## (display_message, "@{reg0}, {reg1}, {reg2}, {reg3}, {reg4}"),
  9256. ## (try_end),
  9257. ## (try_begin),
  9258. ## (gt, ":num_strings", 4),
  9259. ## (display_message, "@{s0}, {s1}, {s2}, {s3}, {s4}"),
  9260. ## (try_end),
  9261. ]),
  9262.  
  9263. ("game_get_cheat_mode",
  9264. [
  9265. (assign, reg0, "$cheat_mode"),
  9266. ]),
  9267.  
  9268. #script_game_receive_network_message
  9269. # This script is called from the game engine when a new network message is received.
  9270. # INPUT: arg1 = player_no, arg2 = event_type, arg3 = value, arg4 = value_2, arg5 = value_3, arg6 = value_4
  9271. ("game_receive_network_message",
  9272. [
  9273. (store_script_param, ":player_no", 1),
  9274. (store_script_param, ":event_type", 2),
  9275. (try_begin),
  9276. ###############
  9277. #SERVER EVENTS#
  9278. ###############
  9279. (eq, ":event_type", multiplayer_event_set_item_selection),
  9280. (store_script_param, ":slot_no", 3),
  9281. (store_script_param, ":value", 4),
  9282. (try_begin),
  9283. #valid slot check
  9284. (is_between, ":slot_no", slot_player_selected_item_indices_begin, slot_player_selected_item_indices_end),
  9285. #valid item check
  9286. (assign, ":valid_item", 0),
  9287. (try_begin),
  9288. (eq, ":value", -1),
  9289. (assign, ":valid_item", 1),
  9290. (else_try),
  9291. (ge, ":value", 0),
  9292. (player_get_troop_id, ":player_troop_no", ":player_no"),
  9293. (is_between, ":player_troop_no", multiplayer_troops_begin, multiplayer_troops_end),
  9294. (store_sub, ":troop_index", ":player_troop_no", multiplayer_troops_begin),
  9295. (val_add, ":troop_index", slot_item_multiplayer_availability_linked_list_begin),
  9296. (item_get_slot, ":prev_next_item_ids", ":value", ":troop_index"),
  9297. (gt, ":prev_next_item_ids", 0), #0 if the item is not valid for the multiplayer mode
  9298. (assign, ":valid_item", 1),
  9299. (try_begin),
  9300. (neq, "$g_horses_are_avaliable", 1),
  9301. (item_get_slot, ":item_class", ":value", slot_item_multiplayer_item_class),
  9302. (is_between, ":item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
  9303. (assign, ":valid_item", 0),
  9304. (try_end),
  9305. (try_begin),
  9306. (eq, "$g_multiplayer_disallow_ranged_weapons", 1),
  9307. (item_get_slot, ":item_class", ":value", slot_item_multiplayer_item_class),
  9308. (is_between, ":item_class", multi_item_class_type_ranged_weapons_begin, multi_item_class_type_ranged_weapons_end),
  9309. (assign, ":valid_item", 0),
  9310. (try_end),
  9311. (try_end),
  9312. (eq, ":valid_item", 1),
  9313. #condition checks are done
  9314. (player_set_slot, ":player_no", ":slot_no", ":value"),
  9315. (try_end),
  9316. (else_try),
  9317. (eq, ":event_type", multiplayer_event_set_bot_selection),
  9318. (store_script_param, ":slot_no", 3),
  9319. (store_script_param, ":value", 4),
  9320. (try_begin),
  9321. #condition check
  9322. (is_between, ":slot_no", slot_player_bot_type_1_wanted, slot_player_bot_type_4_wanted + 1),
  9323. (is_between, ":value", 0, 2),
  9324. #condition checks are done
  9325. (player_set_slot, ":player_no", ":slot_no", ":value"),
  9326. (try_end),
  9327. (else_try),
  9328. (eq, ":event_type", multiplayer_event_change_team_no),
  9329. (store_script_param, ":value", 3),
  9330. (try_begin),
  9331. #validity check
  9332. (player_get_team_no, ":player_team", ":player_no"),
  9333. (neq, ":player_team", ":value"),
  9334.  
  9335. #condition checks are done
  9336. (try_begin),
  9337. #check if available
  9338. (call_script, "script_cf_multiplayer_team_is_available", ":player_no", ":value"),
  9339. #reset troop_id to -1
  9340. (player_set_troop_id, ":player_no", -1),
  9341. (player_set_team_no, ":player_no", ":value"),
  9342. (try_begin),
  9343. (neq, ":value", multi_team_spectator),
  9344. (neq, ":value", multi_team_unassigned),
  9345.  
  9346. (store_mission_timer_a, ":player_last_team_select_time"),
  9347. (player_set_slot, ":player_no", slot_player_last_team_select_time, ":player_last_team_select_time"),
  9348.  
  9349. (multiplayer_send_message_to_player, ":player_no", multiplayer_event_return_confirmation),
  9350. (try_end),
  9351. (else_try),
  9352. #reject request
  9353. (multiplayer_send_message_to_player, ":player_no", multiplayer_event_return_rejection),
  9354. (try_end),
  9355. (try_end),
  9356. (else_try),
  9357. (eq, ":event_type", multiplayer_event_change_troop_id),
  9358. (store_script_param, ":value", 3),
  9359. #troop-faction validity check
  9360. (try_begin),
  9361. (eq, ":value", -1),
  9362. (player_set_troop_id, ":player_no", -1),
  9363. (else_try),
  9364. (is_between, ":value", multiplayer_troops_begin, multiplayer_troops_end),
  9365. (player_get_team_no, ":player_team", ":player_no"),
  9366. (is_between, ":player_team", 0, multi_team_spectator),
  9367. (team_get_faction, ":team_faction", ":player_team"),
  9368. (store_troop_faction, ":new_troop_faction", ":value"),
  9369. (eq, ":new_troop_faction", ":team_faction"),
  9370. (player_set_troop_id, ":player_no", ":value"),
  9371. (call_script, "script_multiplayer_clear_player_selected_items", ":player_no"),
  9372. (try_end),
  9373. (else_try),
  9374. (eq, ":event_type", multiplayer_event_admin_start_map),
  9375. (store_script_param, ":value", 3),
  9376. (store_script_param, ":value_2", 4),
  9377. (try_begin),
  9378. #validity check
  9379. (player_is_admin, ":player_no"),
  9380. (is_between, ":value", multiplayer_scenes_begin, multiplayer_scenes_end),
  9381. (is_between, ":value_2", 0, multiplayer_num_game_types),
  9382. (server_get_changing_game_type_allowed, "$g_multiplayer_changing_game_type_allowed"),
  9383. (this_or_next|eq, "$g_multiplayer_changing_game_type_allowed", 1),
  9384. (eq, "$g_multiplayer_game_type", ":value_2"),
  9385. (call_script, "script_multiplayer_fill_map_game_types", ":value_2"),
  9386. (assign, ":num_maps", reg0),
  9387. (assign, ":is_valid", 0),
  9388. (store_add, ":end_cond", multi_data_maps_for_game_type_begin, ":num_maps"),
  9389. (try_for_range, ":i_map", multi_data_maps_for_game_type_begin, ":end_cond"),
  9390. (troop_slot_eq, "trp_multiplayer_data", ":i_map", ":value"),
  9391. (assign, ":is_valid", 1),
  9392. (assign, ":end_cond", 0),
  9393. (try_end),
  9394. (eq, ":is_valid", 1),
  9395. #condition checks are done
  9396. (assign, "$g_multiplayer_game_type", ":value_2"),
  9397. #INVASION MODE START
  9398. (call_script, "script_multiplayer_set_g_multiplayer_is_game_type_captain"),
  9399. #INVASION MODE END
  9400. (assign, "$g_multiplayer_selected_map", ":value"),
  9401. (team_set_faction, 0, "$g_multiplayer_next_team_1_faction"),
  9402. (team_set_faction, 1, "$g_multiplayer_next_team_2_faction"),
  9403. (call_script, "script_game_multiplayer_get_game_type_mission_template", "$g_multiplayer_game_type"),
  9404. (try_begin),
  9405. (neq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  9406. (neg|is_between, "$g_multiplayer_next_team_2_faction", kingdoms_begin, kingdoms_end),
  9407. (team_set_faction, 1, "fac_kingdom_1"),
  9408. (try_end),
  9409. (start_multiplayer_mission, reg0, "$g_multiplayer_selected_map", 1),
  9410. (try_end),
  9411. (else_try),
  9412. (eq, ":event_type", multiplayer_event_admin_set_max_num_players),
  9413. (store_script_param, ":value", 3),
  9414. (try_begin),
  9415. #validity check
  9416. (player_is_admin, ":player_no"),
  9417. (is_between, ":value", 2, 201),
  9418. #condition checks are done
  9419. (try_begin),
  9420. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  9421. (val_min, ":value", ccoop_max_num_players),
  9422. (try_end),
  9423. (server_set_max_num_players, ":value"),
  9424. (try_end),
  9425. (else_try),
  9426. (eq, ":event_type", multiplayer_event_admin_set_num_bots_in_team),
  9427. (store_script_param, ":value", 3),
  9428. (store_script_param, ":value_2", 4),
  9429. (try_begin),
  9430. #validity check
  9431. (player_is_admin, ":player_no"),
  9432. (is_between, ":value", 1, 3),
  9433. (is_between, ":value_2", 0, "$g_multiplayer_max_num_bots"),
  9434. #condition checks are done
  9435. (try_begin),
  9436. (eq, ":value", 1),
  9437. (assign, "$g_multiplayer_num_bots_team_1", ":value_2"),
  9438. (else_try),
  9439. (assign, "$g_multiplayer_num_bots_team_2", ":value_2"),
  9440. (try_end),
  9441. (get_max_players, ":num_players"),
  9442. (try_for_range, ":cur_player", 1, ":num_players"),
  9443. (player_is_active, ":cur_player"),
  9444. (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_return_num_bots_in_team, ":value", ":value_2"),
  9445. (try_end),
  9446. (try_end),
  9447. (else_try),
  9448. (eq, ":event_type", multiplayer_event_admin_set_anti_cheat),
  9449. (store_script_param, ":value", 3),
  9450. (try_begin),
  9451. #validity check
  9452. (player_is_admin, ":player_no"),
  9453. (is_between, ":value", 0, 2),
  9454. #condition checks are done
  9455. (server_set_anti_cheat, 0),
  9456. (try_end),
  9457. (else_try),
  9458. (eq, ":event_type", multiplayer_event_admin_set_friendly_fire),
  9459. (store_script_param, ":value", 3),
  9460. (try_begin),
  9461. #validity check
  9462. (player_is_admin, ":player_no"),
  9463. (is_between, ":value", 0, 2),
  9464. #condition checks are done
  9465. (server_set_friendly_fire, ":value"),
  9466. (try_end),
  9467. (else_try),
  9468. (eq, ":event_type", multiplayer_event_admin_set_melee_friendly_fire),
  9469. (store_script_param, ":value", 3),
  9470. (try_begin),
  9471. #validity check
  9472. (player_is_admin, ":player_no"),
  9473. (is_between, ":value", 0, 2),
  9474. #condition checks are done
  9475. (server_set_melee_friendly_fire, ":value"),
  9476. (try_end),
  9477. (else_try),
  9478. (eq, ":event_type", multiplayer_event_admin_set_friendly_fire_damage_self_ratio),
  9479. (store_script_param, ":value", 3),
  9480. (try_begin),
  9481. #validity check
  9482. (player_is_admin, ":player_no"),
  9483. (is_between, ":value", 0, 101),
  9484. #condition checks are done
  9485. (server_set_friendly_fire_damage_self_ratio, ":value"),
  9486. (try_end),
  9487. (else_try),
  9488. (eq, ":event_type", multiplayer_event_admin_set_friendly_fire_damage_friend_ratio),
  9489. (store_script_param, ":value", 3),
  9490. (try_begin),
  9491. #validity check
  9492. (player_is_admin, ":player_no"),
  9493. (is_between, ":value", 0, 101),
  9494. #condition checks are done
  9495. (server_set_friendly_fire_damage_friend_ratio, ":value"),
  9496. (try_end),
  9497. (else_try),
  9498. (eq, ":event_type", multiplayer_event_admin_set_ghost_mode),
  9499. (store_script_param, ":value", 3),
  9500. (try_begin),
  9501. #validity check
  9502. (player_is_admin, ":player_no"),
  9503. (is_between, ":value", 0, 4),
  9504. #condition checks are done
  9505. (server_set_ghost_mode, ":value"),
  9506. (try_end),
  9507. (else_try),
  9508. (eq, ":event_type", multiplayer_event_admin_set_control_block_dir),
  9509. (store_script_param, ":value", 3),
  9510. (try_begin),
  9511. #validity check
  9512. (player_is_admin, ":player_no"),
  9513. (is_between, ":value", 0, 2),
  9514. #condition checks are done
  9515. (server_set_control_block_dir, ":value"),
  9516. (try_end),
  9517. (else_try),
  9518. (eq, ":event_type", multiplayer_event_admin_set_combat_speed),
  9519. (store_script_param, ":value", 3),
  9520. (try_begin),
  9521. #validity check
  9522. (player_is_admin, ":player_no"),
  9523. (is_between, ":value", 0, 5),
  9524. #condition checks are done
  9525. (server_set_combat_speed, ":value"),
  9526. (try_end),
  9527. (else_try),
  9528. (eq, ":event_type", multiplayer_event_admin_set_respawn_count),
  9529. (store_script_param, ":value", 3),
  9530. #validity check
  9531. (player_is_admin, ":player_no"),
  9532. (is_between, ":value", 0, 6),
  9533. #condition checks are done
  9534. (assign, "$g_multiplayer_number_of_respawn_count", ":value"),
  9535. (get_max_players, ":num_players"),
  9536. (try_for_range, ":cur_player", 1, ":num_players"),
  9537. (player_is_active, ":cur_player"),
  9538. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_respawn_count, ":value"),
  9539. (try_end),
  9540. (else_try),
  9541. (eq, ":event_type", multiplayer_event_admin_set_add_to_servers_list),
  9542. (store_script_param, ":value", 3),
  9543. (try_begin),
  9544. #validity check
  9545. (player_is_admin, ":player_no"),
  9546. #condition checks are done
  9547. (server_set_add_to_game_servers_list, ":value"),
  9548. (try_end),
  9549. (else_try),
  9550. (eq, ":event_type", multiplayer_event_admin_set_respawn_period),
  9551. (store_script_param, ":value", 3),
  9552. (try_begin),
  9553. #validity check
  9554. (player_is_admin, ":player_no"),
  9555. (is_between, ":value", 3, 31),
  9556. #condition checks are done
  9557. (assign, "$g_multiplayer_respawn_period", ":value"),
  9558. (get_max_players, ":num_players"),
  9559. (try_for_range, ":cur_player", 1, ":num_players"),
  9560. (player_is_active, ":cur_player"),
  9561. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_respawn_period, ":value"),
  9562. (try_end),
  9563. (try_end),
  9564. (else_try),
  9565. (eq, ":event_type", multiplayer_event_admin_set_game_max_minutes),
  9566. (store_script_param, ":value", 3),
  9567. (try_begin),
  9568. #validity check
  9569. (player_is_admin, ":player_no"),
  9570. (is_between, ":value", 5, 121),
  9571. #condition checks are done
  9572. (assign, "$g_multiplayer_game_max_minutes", ":value"),
  9573. (try_end),
  9574. (else_try),
  9575. (eq, ":event_type", multiplayer_event_admin_set_round_max_seconds),
  9576. (store_script_param, ":value", 3),
  9577. (try_begin),
  9578. #validity check
  9579. (player_is_admin, ":player_no"),
  9580. (is_between, ":value", 60, 901),
  9581. #condition checks are done
  9582. (assign, "$g_multiplayer_round_max_seconds", ":value"),
  9583. (get_max_players, ":num_players"),
  9584. (try_for_range, ":cur_player", 1, ":num_players"),
  9585. (player_is_active, ":cur_player"),
  9586. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_round_max_seconds, ":value"),
  9587. (try_end),
  9588. (try_end),
  9589. (else_try),
  9590. (eq, ":event_type", multiplayer_event_admin_set_player_respawn_as_bot),
  9591. (store_script_param, ":value", 3),
  9592. (try_begin),
  9593. #validity check
  9594. (player_is_admin, ":player_no"),
  9595. (is_between, ":value", 0, 2),
  9596. #condition checks are done
  9597. (assign, "$g_multiplayer_player_respawn_as_bot", ":value"),
  9598. (get_max_players, ":num_players"),
  9599. (try_for_range, ":cur_player", 1, ":num_players"),
  9600. (player_is_active, ":cur_player"),
  9601. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_player_respawn_as_bot, ":value"),
  9602. (try_end),
  9603. (try_end),
  9604. (else_try),
  9605. (eq, ":event_type", multiplayer_event_admin_set_game_max_points),
  9606. (store_script_param, ":value", 3),
  9607. (try_begin),
  9608. #validity check
  9609. (player_is_admin, ":player_no"),
  9610. (is_between, ":value", 3, 1001),
  9611. #condition checks are done
  9612. (assign, "$g_multiplayer_game_max_points", ":value"),
  9613. (try_end),
  9614. (else_try),
  9615. (eq, ":event_type", multiplayer_event_admin_set_point_gained_from_flags),
  9616. (store_script_param, ":value", 3),
  9617. (try_begin),
  9618. #validity check
  9619. (player_is_admin, ":player_no"),
  9620. (is_between, ":value", 25, 401),
  9621. #condition checks are done
  9622. (assign, "$g_multiplayer_point_gained_from_flags", ":value"),
  9623. (try_end),
  9624. (else_try),
  9625. (eq, ":event_type", multiplayer_event_admin_set_point_gained_from_capturing_flag),
  9626. (store_script_param, ":value", 3),
  9627. (try_begin),
  9628. #validity check
  9629. (player_is_admin, ":player_no"),
  9630. (is_between, ":value", 0, 11),
  9631. #condition checks are done
  9632. (assign, "$g_multiplayer_point_gained_from_capturing_flag", ":value"),
  9633. (try_end),
  9634. (else_try),
  9635. (eq, ":event_type", multiplayer_event_admin_set_initial_gold_multiplier),
  9636. (store_script_param, ":value", 3),
  9637. (try_begin),
  9638. #validity check
  9639. (player_is_admin, ":player_no"),
  9640. (is_between, ":value", 0, 1001),
  9641. #condition checks are done
  9642. (assign, "$g_multiplayer_initial_gold_multiplier", ":value"),
  9643. (try_end),
  9644. (else_try),
  9645. (eq, ":event_type", multiplayer_event_admin_set_battle_earnings_multiplier),
  9646. (store_script_param, ":value", 3),
  9647. (try_begin),
  9648. #validity check
  9649. (player_is_admin, ":player_no"),
  9650. (is_between, ":value", 0, 1001),
  9651. #condition checks are done
  9652. (assign, "$g_multiplayer_battle_earnings_multiplier", ":value"),
  9653. (try_end),
  9654. (else_try),
  9655. (eq, ":event_type", multiplayer_event_admin_set_round_earnings_multiplier),
  9656. (store_script_param, ":value", 3),
  9657. (try_begin),
  9658. #validity check
  9659. (player_is_admin, ":player_no"),
  9660. (is_between, ":value", 0, 1001),
  9661. #condition checks are done
  9662. (assign, "$g_multiplayer_round_earnings_multiplier", ":value"),
  9663. (try_end),
  9664. (else_try),
  9665. (eq, ":event_type", multiplayer_event_admin_set_server_name),
  9666. (try_begin),
  9667. #validity check
  9668. (player_is_admin, ":player_no"),
  9669. (server_get_renaming_server_allowed, "$g_multiplayer_renaming_server_allowed"),
  9670. (eq, "$g_multiplayer_renaming_server_allowed", 1),
  9671. #condition checks are done
  9672. (server_set_name, s0), #validity is checked inside this function
  9673. (try_end),
  9674. (else_try),
  9675. (eq, ":event_type", multiplayer_event_admin_set_game_password),
  9676. (try_begin),
  9677. #validity check
  9678. (player_is_admin, ":player_no"),
  9679. #condition checks are done
  9680. (server_set_password, s0), #validity is checked inside this function
  9681. (try_end),
  9682. (else_try),
  9683. (eq, ":event_type", multiplayer_event_admin_set_welcome_message),
  9684. (try_begin),
  9685. #validity check
  9686. (player_is_admin, ":player_no"),
  9687. #condition checks are done
  9688. (server_set_welcome_message, s0), #validity is checked inside this function
  9689. (try_end),
  9690. (else_try),
  9691. (eq, ":event_type", multiplayer_event_admin_set_team_faction),
  9692. (store_script_param, ":value", 3),
  9693. (store_script_param, ":value_2", 4),
  9694. (try_begin),
  9695. #validity check
  9696. (player_is_admin, ":player_no"),
  9697. (is_between, ":value", 1, 3),
  9698.  
  9699. ## (assign, ":is_valid", 0),
  9700. ## (try_begin),
  9701. ## (eq, ":value", 1),
  9702. ## (neq, ":value_2", "$g_multiplayer_next_team_2_faction"),
  9703. ## (assign, ":is_valid", 1),
  9704. ## (else_try),
  9705. ## (neq, ":value_2", "$g_multiplayer_next_team_1_faction"),
  9706. ## (assign, ":is_valid", 1),
  9707. ## (try_end),
  9708. ## (eq, ":is_valid", 1),
  9709. #condition checks are done
  9710. (try_begin),
  9711. (eq, ":value", 1),
  9712. (is_between, ":value_2", npc_kingdoms_begin, npc_kingdoms_end),
  9713. (assign, "$g_multiplayer_next_team_1_faction", ":value_2"),
  9714. (else_try),
  9715. #INVASION MODE START
  9716. (this_or_next|is_between, ":value_2", npc_kingdoms_begin, npc_kingdoms_end),
  9717. (this_or_next|eq, ":value_2", "fac_outlaws"),
  9718. (eq, ":value_2", "fac_ccoop_all_stars"),
  9719. #INVASION MODE END
  9720.  
  9721. (assign, "$g_multiplayer_next_team_2_faction", ":value_2"),
  9722. (try_end),
  9723. (try_end),
  9724. (else_try),
  9725. (eq, ":event_type", multiplayer_event_open_game_rules),
  9726. (try_begin),
  9727. #no validity check
  9728. (server_get_max_num_players, ":max_num_players"),
  9729. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_max_num_players, ":max_num_players"),
  9730. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_next_team_faction, 1, "$g_multiplayer_next_team_1_faction"),
  9731. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_next_team_faction, 2, "$g_multiplayer_next_team_2_faction"),
  9732. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 1, "$g_multiplayer_num_bots_team_1"),
  9733. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 2, "$g_multiplayer_num_bots_team_2"),
  9734. (server_get_anti_cheat, ":server_anti_cheat"),
  9735. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_anti_cheat, ":server_anti_cheat"),
  9736. (server_get_friendly_fire, ":server_friendly_fire"),
  9737. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_friendly_fire, ":server_friendly_fire"),
  9738. (server_get_melee_friendly_fire, ":server_melee_friendly_fire"),
  9739. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_melee_friendly_fire, ":server_melee_friendly_fire"),
  9740. (server_get_friendly_fire_damage_self_ratio, ":friendly_fire_damage_self_ratio"),
  9741. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_friendly_fire_damage_self_ratio, ":friendly_fire_damage_self_ratio"),
  9742. (server_get_friendly_fire_damage_friend_ratio, ":friendly_fire_damage_friend_ratio"),
  9743. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_friendly_fire_damage_friend_ratio, ":friendly_fire_damage_friend_ratio"),
  9744. (server_get_ghost_mode, ":server_ghost_mode"),
  9745. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ghost_mode, ":server_ghost_mode"),
  9746. (server_get_control_block_dir, ":server_control_block_dir"),
  9747. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_control_block_dir, ":server_control_block_dir"),
  9748. (server_get_combat_speed, ":server_combat_speed"),
  9749. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_combat_speed, ":server_combat_speed"),
  9750. (server_get_add_to_game_servers_list, ":server_add_to_servers_list"),
  9751. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_add_to_servers_list, ":server_add_to_servers_list"),
  9752. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_respawn_period, "$g_multiplayer_respawn_period"),
  9753. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_game_max_minutes, "$g_multiplayer_game_max_minutes"),
  9754. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_round_max_seconds, "$g_multiplayer_round_max_seconds"),
  9755. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_player_respawn_as_bot, "$g_multiplayer_player_respawn_as_bot"),
  9756. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_game_max_points, "$g_multiplayer_game_max_points"),
  9757. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_point_gained_from_flags, "$g_multiplayer_point_gained_from_flags"),
  9758. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_point_gained_from_capturing_flag, "$g_multiplayer_point_gained_from_capturing_flag"),
  9759. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_initial_gold_multiplier, "$g_multiplayer_initial_gold_multiplier"),
  9760. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_battle_earnings_multiplier, "$g_multiplayer_battle_earnings_multiplier"),
  9761. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_round_earnings_multiplier, "$g_multiplayer_round_earnings_multiplier"),
  9762. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_valid_vote_ratio, "$g_multiplayer_valid_vote_ratio"),
  9763. #INVASION MODE START
  9764. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ccoop_difficulty, "$g_multiplayer_ccoop_difficulty"),
  9765. #INVASION MODE END
  9766. (str_store_server_name, s0),
  9767. (multiplayer_send_string_to_player, ":player_no", multiplayer_event_return_server_name, s0),
  9768. (multiplayer_send_message_to_player, ":player_no", multiplayer_event_return_open_game_rules),
  9769. (try_end),
  9770. (else_try),
  9771. (eq, ":event_type", multiplayer_event_open_admin_panel),
  9772. (try_begin),
  9773. #validity check
  9774. (player_is_admin, ":player_no"),
  9775. #condition checks are done
  9776. (server_get_renaming_server_allowed, "$g_multiplayer_renaming_server_allowed"),
  9777. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_renaming_server_allowed, "$g_multiplayer_renaming_server_allowed"),
  9778. (server_get_changing_game_type_allowed, "$g_multiplayer_changing_game_type_allowed"),
  9779. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_changing_game_type_allowed, "$g_multiplayer_changing_game_type_allowed"),
  9780. (server_get_max_num_players, ":max_num_players"),
  9781. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_max_num_players, ":max_num_players"),
  9782. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_next_team_faction, 1, "$g_multiplayer_next_team_1_faction"),
  9783. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_next_team_faction, 2, "$g_multiplayer_next_team_2_faction"),
  9784. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 1, "$g_multiplayer_num_bots_team_1"),
  9785. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 2, "$g_multiplayer_num_bots_team_2"),
  9786. (server_get_anti_cheat, ":server_anti_cheat"),
  9787. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_anti_cheat, ":server_anti_cheat"),
  9788. (server_get_friendly_fire, ":server_friendly_fire"),
  9789. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_friendly_fire, ":server_friendly_fire"),
  9790. (server_get_melee_friendly_fire, ":server_melee_friendly_fire"),
  9791. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_melee_friendly_fire, ":server_melee_friendly_fire"),
  9792. (server_get_friendly_fire_damage_self_ratio, ":friendly_fire_damage_self_ratio"),
  9793. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_friendly_fire_damage_self_ratio, ":friendly_fire_damage_self_ratio"),
  9794. (server_get_friendly_fire_damage_friend_ratio, ":friendly_fire_damage_friend_ratio"),
  9795. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_friendly_fire_damage_friend_ratio, ":friendly_fire_damage_friend_ratio"),
  9796. (server_get_ghost_mode, ":server_ghost_mode"),
  9797. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ghost_mode, ":server_ghost_mode"),
  9798. (server_get_control_block_dir, ":server_control_block_dir"),
  9799. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_control_block_dir, ":server_control_block_dir"),
  9800. (server_get_combat_speed, ":server_combat_speed"),
  9801. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_combat_speed, ":server_combat_speed"),
  9802. (server_get_add_to_game_servers_list, ":server_add_to_servers_list"),
  9803. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_add_to_servers_list, ":server_add_to_servers_list"),
  9804. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_respawn_period, "$g_multiplayer_respawn_period"),
  9805. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_game_max_minutes, "$g_multiplayer_game_max_minutes"),
  9806. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_round_max_seconds, "$g_multiplayer_round_max_seconds"),
  9807. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_player_respawn_as_bot, "$g_multiplayer_player_respawn_as_bot"),
  9808. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_game_max_points, "$g_multiplayer_game_max_points"),
  9809. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_point_gained_from_flags, "$g_multiplayer_point_gained_from_flags"),
  9810. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_point_gained_from_capturing_flag, "$g_multiplayer_point_gained_from_capturing_flag"),
  9811. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_initial_gold_multiplier, "$g_multiplayer_initial_gold_multiplier"),
  9812. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_battle_earnings_multiplier, "$g_multiplayer_battle_earnings_multiplier"),
  9813. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_round_earnings_multiplier, "$g_multiplayer_round_earnings_multiplier"),
  9814. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_valid_vote_ratio, "$g_multiplayer_valid_vote_ratio"),
  9815. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_max_num_bots, "$g_multiplayer_max_num_bots"),
  9816. #INVASION MODE START
  9817. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ccoop_difficulty, "$g_multiplayer_ccoop_difficulty"),
  9818. #INVASION MODE END
  9819. (str_store_server_name, s0),
  9820. (multiplayer_send_string_to_player, ":player_no", multiplayer_event_return_server_name, s0),
  9821. (str_store_server_password, s0),
  9822. (multiplayer_send_string_to_player, ":player_no", multiplayer_event_return_game_password, s0),
  9823. (try_end),
  9824. (else_try),
  9825. (eq, ":event_type", multiplayer_event_start_new_poll),
  9826. (try_begin),
  9827. (store_script_param, ":value", 3),
  9828. (store_script_param, ":value_2", 4),
  9829. #validity check
  9830. (eq, "$g_multiplayer_poll_running", 0),
  9831. (store_mission_timer_a, ":mission_timer"),
  9832. (player_get_slot, ":poll_disable_time", ":player_no", slot_player_poll_disabled_until_time),
  9833. (ge, ":mission_timer", ":poll_disable_time"),
  9834. (assign, ":continue", 0),
  9835. (try_begin),
  9836. (eq, ":value", 1), # kicking a player
  9837. (try_begin),
  9838. (eq, "$g_multiplayer_kick_voteable", 1),
  9839. (player_is_active, ":value_2"),
  9840. (assign, ":continue", 1),
  9841. (try_end),
  9842. (else_try),
  9843. (eq, ":value", 2), # banning a player
  9844. (try_begin),
  9845. (eq, "$g_multiplayer_ban_voteable", 1),
  9846. (player_is_active, ":value_2"),
  9847. (save_ban_info_of_player, ":value_2"),
  9848. (assign, ":continue", 1),
  9849. (try_end),
  9850. (else_try), # vote for map
  9851. (eq, ":value", 0),
  9852. (try_begin),
  9853. (eq, "$g_multiplayer_maps_voteable", 1),
  9854. (call_script, "script_multiplayer_fill_map_game_types", "$g_multiplayer_game_type"),
  9855. (assign, ":num_maps", reg0),
  9856. (try_for_range, ":i_map", 0, ":num_maps"),
  9857. (store_add, ":map_slot", ":i_map", multi_data_maps_for_game_type_begin),
  9858. (troop_slot_eq, "trp_multiplayer_data", ":map_slot", ":value_2"),
  9859. (assign, ":continue", 1),
  9860. (assign, ":num_maps", 0), #break
  9861. (try_end),
  9862. (try_end),
  9863. (else_try),
  9864. (eq, ":value", 3), #vote for map and factions
  9865. (try_begin),
  9866. (eq, "$g_multiplayer_factions_voteable", 1),
  9867. (store_script_param, ":value_3", 5),
  9868. (store_script_param, ":value_4", 6),
  9869. (call_script, "script_multiplayer_fill_map_game_types", "$g_multiplayer_game_type"),
  9870. (assign, ":num_maps", reg0),
  9871. (try_for_range, ":i_map", 0, ":num_maps"),
  9872. (store_add, ":map_slot", ":i_map", multi_data_maps_for_game_type_begin),
  9873. (troop_slot_eq, "trp_multiplayer_data", ":map_slot", ":value_2"),
  9874. (assign, ":continue", 1),
  9875. (assign, ":num_maps", 0), #break
  9876. (try_end),
  9877. (try_begin),
  9878. (eq, ":continue", 1),
  9879. (this_or_next|neg|is_between, ":value_3", npc_kingdoms_begin, npc_kingdoms_end),
  9880. (this_or_next|neg|is_between, ":value_4", npc_kingdoms_begin, npc_kingdoms_end),
  9881. (eq, ":value_3", ":value_4"),
  9882. (assign, ":continue", 0),
  9883. (try_end),
  9884. (try_end),
  9885. (else_try),
  9886. (eq, ":value", 4), #vote for number of bots
  9887. (store_script_param, ":value_3", 5),
  9888. (store_add, ":upper_limit", "$g_multiplayer_num_bots_voteable", 1),
  9889. (is_between, ":value_2", 0, ":upper_limit"),
  9890. (is_between, ":value_3", 0, ":upper_limit"),
  9891. (assign, ":continue", 1),
  9892. (try_end),
  9893. (eq, ":continue", 1),
  9894. #condition checks are done
  9895. (str_store_player_username, s0, ":player_no"),
  9896. (try_begin),
  9897. (eq, ":value", 1), #kicking a player
  9898. (str_store_player_username, s1, ":value_2"),
  9899. (server_add_message_to_log, "str_poll_kick_player_s1_by_s0"),
  9900. (else_try),
  9901. (eq, ":value", 2), #banning a player
  9902. (str_store_player_username, s1, ":value_2"),
  9903. (server_add_message_to_log, "str_poll_ban_player_s1_by_s0"),
  9904. (else_try),
  9905. (eq, ":value", 0), #vote for map
  9906. (store_sub, ":string_index", ":value_2", multiplayer_scenes_begin),
  9907. (val_add, ":string_index", multiplayer_scene_names_begin),
  9908. (str_store_string, s1, ":string_index"),
  9909. (server_add_message_to_log, "str_poll_change_map_to_s1_by_s0"),
  9910. (else_try),
  9911. (eq, ":value", 3), #vote for map and factions
  9912. (store_sub, ":string_index", ":value_2", multiplayer_scenes_begin),
  9913. (val_add, ":string_index", multiplayer_scene_names_begin),
  9914. (str_store_string, s1, ":string_index"),
  9915. (str_store_faction_name, s2, ":value_3"),
  9916. (str_store_faction_name, s3, ":value_4"),
  9917. (server_add_message_to_log, "str_poll_change_map_to_s1_and_factions_to_s2_and_s3_by_s0"),
  9918. (else_try),
  9919. (eq, ":value", 4), #vote for number of bots
  9920. (assign, reg0, ":value_2"),
  9921. (assign, reg1, ":value_3"),
  9922. (server_add_message_to_log, "str_poll_change_number_of_bots_to_reg0_and_reg1_by_s0"),
  9923. (try_end),
  9924. (assign, "$g_multiplayer_poll_running", 1),
  9925. (assign, "$g_multiplayer_poll_ended", 0),
  9926. (assign, "$g_multiplayer_poll_num_sent", 0),
  9927. (assign, "$g_multiplayer_poll_yes_count", 0),
  9928. (assign, "$g_multiplayer_poll_no_count", 0),
  9929. (assign, "$g_multiplayer_poll_to_show", ":value"),
  9930. (assign, "$g_multiplayer_poll_value_to_show", ":value_2"),
  9931. (try_begin),
  9932. (eq, ":value", 3),
  9933. (assign, "$g_multiplayer_poll_value_2_to_show", ":value_3"),
  9934. (assign, "$g_multiplayer_poll_value_3_to_show", ":value_4"),
  9935. (else_try),
  9936. (eq, ":value", 4),
  9937. (assign, "$g_multiplayer_poll_value_2_to_show", ":value_3"),
  9938. (assign, "$g_multiplayer_poll_value_3_to_show", -1),
  9939. (else_try),
  9940. (assign, "$g_multiplayer_poll_value_2_to_show", -1),
  9941. (assign, "$g_multiplayer_poll_value_3_to_show", -1),
  9942. (try_end),
  9943. (store_add, ":poll_disable_until", ":mission_timer", multiplayer_poll_disable_period),
  9944. (player_set_slot, ":player_no", slot_player_poll_disabled_until_time, ":poll_disable_until"),
  9945. (store_add, "$g_multiplayer_poll_end_time", ":mission_timer", 60),
  9946. (get_max_players, ":num_players"),
  9947. (try_for_range, ":cur_player", 0, ":num_players"),
  9948. (player_is_active, ":cur_player"),
  9949. (player_set_slot, ":cur_player", slot_player_can_answer_poll, 1),
  9950. (val_add, "$g_multiplayer_poll_num_sent", 1),
  9951. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_ask_for_poll, "$g_multiplayer_poll_to_show", "$g_multiplayer_poll_value_to_show", "$g_multiplayer_poll_value_2_to_show", "$g_multiplayer_poll_value_3_to_show"),
  9952. (try_end),
  9953. (try_end),
  9954. (else_try),
  9955. (eq, ":event_type", multiplayer_event_answer_to_poll),
  9956. (try_begin),
  9957. (store_script_param, ":value", 3),
  9958. #validity check
  9959. (eq, "$g_multiplayer_poll_running", 1),
  9960. (is_between, ":value", 0, 2),
  9961. (player_slot_eq, ":player_no", slot_player_can_answer_poll, 1),
  9962. #condition checks are done
  9963. (player_set_slot, ":player_no", slot_player_can_answer_poll, 0),
  9964. (try_begin),
  9965. (eq, ":value", 0),
  9966. (val_add, "$g_multiplayer_poll_no_count", 1),
  9967. (else_try),
  9968. (eq, ":value", 1),
  9969. (val_add, "$g_multiplayer_poll_yes_count", 1),
  9970. (try_end),
  9971. (try_end),
  9972. (else_try),
  9973. (eq, ":event_type", multiplayer_event_admin_kick_player),
  9974. (try_begin),
  9975. (store_script_param, ":value", 3),
  9976. #validity check
  9977. (player_is_admin, ":player_no"),
  9978. (player_is_active, ":value"),
  9979. #condition checks are done
  9980. (kick_player, ":value"),
  9981. (try_end),
  9982. (else_try),
  9983. (eq, ":event_type", multiplayer_event_admin_ban_player),
  9984. (try_begin),
  9985. (store_script_param, ":value", 3),
  9986. #validity check
  9987. (player_is_admin, ":player_no"),
  9988. (player_is_active, ":value"),
  9989. #condition checks are done
  9990. (ban_player, ":value", 0, ":player_no"),
  9991. (try_end),
  9992. (else_try),
  9993. (eq, ":event_type", multiplayer_event_admin_set_valid_vote_ratio),
  9994. (try_begin),
  9995. (store_script_param, ":value", 3),
  9996. #validity check
  9997. (player_is_admin, ":player_no"),
  9998. (is_between, ":value", 50, 101),
  9999. #condition checks are done
  10000. (assign, "$g_multiplayer_valid_vote_ratio", ":value"),
  10001. (try_end),
  10002. (else_try),
  10003. (eq, ":event_type", multiplayer_event_admin_set_auto_team_balance_limit),
  10004. (try_begin),
  10005. (store_script_param, ":value", 3),
  10006. #validity check
  10007. (player_is_admin, ":player_no"),
  10008. (this_or_next|is_between, ":value", 2, 7),
  10009. (eq, ":value", 1000),
  10010. #condition checks are done
  10011. (assign, "$g_multiplayer_auto_team_balance_limit", ":value"),
  10012. (get_max_players, ":num_players"),
  10013. (try_for_range, ":cur_player", 1, ":num_players"),
  10014. (player_is_active, ":cur_player"),
  10015. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_auto_team_balance_limit, ":value"),
  10016. (try_end),
  10017. (try_end),
  10018. (else_try),
  10019. (eq, ":event_type", multiplayer_event_admin_set_num_bots_voteable),
  10020. (try_begin),
  10021. (store_script_param, ":value", 3),
  10022. #validity check
  10023. (player_is_admin, ":player_no"),
  10024. (is_between, ":value", 0, 51),
  10025. (is_between, ":value", 0, "$g_multiplayer_max_num_bots"),
  10026. #condition checks are done
  10027. (assign, "$g_multiplayer_num_bots_voteable", ":value"),
  10028. (get_max_players, ":num_players"),
  10029. (try_for_range, ":cur_player", 1, ":num_players"),
  10030. (player_is_active, ":cur_player"),
  10031. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_num_bots_voteable, ":value"),
  10032. (try_end),
  10033. (try_end),
  10034. (else_try),
  10035. (eq, ":event_type", multiplayer_event_admin_set_factions_voteable),
  10036. (try_begin),
  10037. (store_script_param, ":value", 3),
  10038. #validity check
  10039. (player_is_admin, ":player_no"),
  10040. (is_between, ":value", 0, 2),
  10041. #condition checks are done
  10042. (assign, "$g_multiplayer_factions_voteable", ":value"),
  10043. (get_max_players, ":num_players"),
  10044. (try_for_range, ":cur_player", 1, ":num_players"),
  10045. (player_is_active, ":cur_player"),
  10046. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_factions_voteable, ":value"),
  10047. (try_end),
  10048. (try_end),
  10049. (else_try),
  10050. (eq, ":event_type", multiplayer_event_admin_set_maps_voteable),
  10051. (try_begin),
  10052. (store_script_param, ":value", 3),
  10053. #validity check
  10054. (player_is_admin, ":player_no"),
  10055. (is_between, ":value", 0, 2),
  10056. #condition checks are done
  10057. (assign, "$g_multiplayer_maps_voteable", ":value"),
  10058. (get_max_players, ":num_players"),
  10059. (try_for_range, ":cur_player", 1, ":num_players"),
  10060. (player_is_active, ":cur_player"),
  10061. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_maps_voteable, ":value"),
  10062. (try_end),
  10063. (try_end),
  10064. (else_try),
  10065. (eq, ":event_type", multiplayer_event_admin_set_kick_voteable),
  10066. (try_begin),
  10067. (store_script_param, ":value", 3),
  10068. #validity check
  10069. (player_is_admin, ":player_no"),
  10070. (is_between, ":value", 0, 2),
  10071. #condition checks are done
  10072. (assign, "$g_multiplayer_kick_voteable", ":value"),
  10073. (get_max_players, ":num_players"),
  10074. (try_for_range, ":cur_player", 1, ":num_players"),
  10075. (player_is_active, ":cur_player"),
  10076. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_kick_voteable, ":value"),
  10077. (try_end),
  10078. (try_end),
  10079. (else_try),
  10080. (eq, ":event_type", multiplayer_event_admin_set_ban_voteable),
  10081. (try_begin),
  10082. (store_script_param, ":value", 3),
  10083. #validity check
  10084. (player_is_admin, ":player_no"),
  10085. (is_between, ":value", 0, 2),
  10086. #condition checks are done
  10087. (assign, "$g_multiplayer_ban_voteable", ":value"),
  10088. (get_max_players, ":num_players"),
  10089. (try_for_range, ":cur_player", 1, ":num_players"),
  10090. (player_is_active, ":cur_player"),
  10091. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_return_ban_voteable, ":value"),
  10092. (try_end),
  10093. (try_end),
  10094. (else_try),
  10095. (eq, ":event_type", multiplayer_event_admin_set_allow_player_banners),
  10096. (try_begin),
  10097. (store_script_param, ":value", 3),
  10098. #validity check
  10099. (player_is_admin, ":player_no"),
  10100. (is_between, ":value", 0, 2),
  10101. #condition checks are done
  10102. (assign, "$g_multiplayer_allow_player_banners", ":value"),
  10103. (try_end),
  10104. (else_try),
  10105. (eq, ":event_type", multiplayer_event_admin_set_force_default_armor),
  10106. (try_begin),
  10107. (store_script_param, ":value", 3),
  10108. #validity check
  10109. (player_is_admin, ":player_no"),
  10110. (is_between, ":value", 0, 2),
  10111. #condition checks are done
  10112. (assign, "$g_multiplayer_force_default_armor", ":value"),
  10113. (try_end),
  10114. (else_try),
  10115. (eq, ":event_type", multiplayer_event_offer_duel),
  10116. (try_begin),
  10117. (store_script_param, ":value", 3),
  10118. #validity check
  10119. (eq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  10120. (agent_is_active, ":value"),
  10121. (agent_is_alive, ":value"),
  10122. (agent_is_human, ":value"),
  10123. (player_get_agent_id, ":player_agent_no", ":player_no"),
  10124. (agent_is_active, ":player_agent_no"),
  10125. (agent_is_alive, ":player_agent_no"),
  10126. (agent_get_position, pos0, ":player_agent_no"),
  10127. (agent_get_position, pos1, ":value"),
  10128. (get_sq_distance_between_positions_in_meters, ":agent_dist_sq", pos0, pos1),
  10129. (le, ":agent_dist_sq", 49),
  10130. #allow duelists to receive new offers
  10131. (this_or_next|agent_check_offer_from_agent, ":player_agent_no", ":value"),
  10132. (agent_slot_eq, ":player_agent_no", slot_agent_in_duel_with, -1),
  10133. (neg|agent_slot_eq, ":player_agent_no", slot_agent_in_duel_with, ":value"), #don't allow spamming duel offers during countdown
  10134. #condition checks are done
  10135. (try_begin),
  10136. #accepting a duel
  10137. (agent_check_offer_from_agent, ":player_agent_no", ":value"),
  10138. (call_script, "script_multiplayer_accept_duel", ":player_agent_no", ":value"),
  10139. (else_try),
  10140. #sending a duel request
  10141. (assign, ":display_notification", 1),
  10142. (try_begin),
  10143. (agent_check_offer_from_agent, ":value", ":player_agent_no"),
  10144. (assign, ":display_notification", 0),
  10145. (try_end),
  10146. (agent_add_offer_with_timeout, ":value", ":player_agent_no", 10000), #10 second timeout
  10147. (agent_get_player_id, ":value_player", ":value"),
  10148. (try_begin),
  10149. (player_is_active, ":value_player"), #might be AI
  10150. (try_begin),
  10151. (eq, ":display_notification", 1),
  10152. (multiplayer_send_int_to_player, ":value_player", multiplayer_event_show_duel_request, ":player_agent_no"),
  10153. (try_end),
  10154. (else_try),
  10155. (call_script, "script_multiplayer_accept_duel", ":value", ":player_agent_no"),
  10156. (try_end),
  10157. (try_end),
  10158. (try_end),
  10159. (else_try),
  10160. (eq, ":event_type", multiplayer_event_admin_set_disallow_ranged_weapons),
  10161. (try_begin),
  10162. (store_script_param, ":value", 3),
  10163. #validity check
  10164. (player_is_admin, ":player_no"),
  10165. (is_between, ":value", 0, 2),
  10166. #condition checks are done
  10167. (assign, "$g_multiplayer_disallow_ranged_weapons", ":value"),
  10168. (try_end),
  10169. #INVASION MODE START
  10170. (else_try),
  10171.  
  10172. # MCA new events
  10173. (eq, ":event_type", multiplayer_event_other_events),
  10174. (store_script_param, ":value", 3),
  10175. (try_begin),
  10176. (eq, ":value", multiplayer_event_other_event_set_bot_purchase),
  10177. (store_script_param, ":bot_slot", 4),
  10178. (store_script_param, ":bot_id", 5),
  10179. #(player_set_slot, ":player_no", ":bot_slot", ":bot_id"),
  10180. (try_begin),
  10181. (eq, "$g_multiplayer_is_game_type_captain", 1),
  10182. (try_begin),
  10183. (is_between, ":bot_slot", slot_player_companion_ids_begin, slot_player_companion_ids_end),
  10184. (is_between, ":bot_id", multiplayer_coop_companion_equipment_sets_begin, multiplayer_coop_companion_first_equipment_sets_end),
  10185. (player_slot_eq, ":player_no", slot_player_companion_ids_locked, 0),
  10186. (player_set_slot, ":player_no", ":bot_slot", ":bot_id"),
  10187. (else_try),
  10188. (is_between, ":bot_slot", slot_player_companion_classes_begin, slot_player_companion_classes_end),
  10189. (store_troop_faction, ":troop_faction", ":bot_id"),
  10190. (team_get_faction, ":team_0_faction", 0),
  10191. (store_sub, ":bot_id_i", ":bot_slot", 2),
  10192. (player_get_slot, ":companion_no", ":player_no", ":bot_id_i"),
  10193. (try_begin),
  10194. (eq, ":companion_no", ":bot_id"),
  10195. (player_set_slot, ":player_no", ":bot_slot", ":bot_id"),
  10196. (else_try),
  10197. (eq, ":team_0_faction", ":troop_faction"),
  10198. (store_character_level, ":bot_level", ":bot_id"),
  10199. (eq, ":bot_level", 4),
  10200. (player_set_slot, ":player_no", ":bot_slot", ":bot_id"),
  10201. (try_end),
  10202. (try_end),
  10203. (try_end),
  10204. #(try_begin),
  10205. # (eq, ":bot_slot", slot_player_companion_classes_begin + 1),
  10206. # (try_for_range, ":cur_slot", slot_player_companion_ids_begin, slot_player_companion_classes_end),
  10207. # (assign, reg1, ":cur_slot"),
  10208. # (player_get_slot, reg2, ":player_no", ":cur_slot"),
  10209. # (multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, "@{!}slot: {reg1} value {reg2}"),
  10210. # (try_end),
  10211. #(try_end),
  10212.  
  10213. ######## WAVE Mode Events
  10214. (else_try),
  10215. (eq, ":value", multiplayer_event_admin_set_ccoop_difficulty),
  10216. (try_begin),
  10217. (store_script_param, ":difficulty", 4),
  10218. #validity check
  10219. (player_is_admin, ":player_no"),
  10220. (is_between, ":difficulty", 0, 3),
  10221. #condition checks are done
  10222. (assign, "$g_multiplayer_ccoop_difficulty", ":difficulty"),
  10223. (assign, reg0, ":difficulty"),
  10224. #(display_message, "@storing difficulty as: {reg0}"),
  10225. (try_end),
  10226. (else_try),
  10227. (eq, ":value", multiplayer_event_coop_send_drop_assignment_to_server),
  10228. (store_script_param, ":value", 4),
  10229. (try_begin),
  10230. (ge, ":value", 0),
  10231. (call_script, "script_cf_coop_give_item_to_assigned_group_member", ":player_no", ":value"),
  10232. (else_try),
  10233. (player_set_slot, ":player_no", slot_player_coop_dropped_item, -1),
  10234. (try_end),
  10235. (else_try),
  10236. (neg|multiplayer_is_dedicated_server),
  10237. (try_begin),
  10238. (this_or_next|eq, ":value", multiplayer_event_other_event_ccoop_count_down_visible),
  10239. (eq, ":value", multiplayer_event_other_event_ccoop_count_down_invisible),
  10240. (store_script_param, "$g_multiplayer_ccoop_enemy_respawn_secs", 4),
  10241. (store_script_param, "$g_multiplayer_ccoop_wave_no", 5),
  10242.  
  10243.  
  10244. (assign, "$g_multiplayer_ccoop_enable_count_down", 1),
  10245.  
  10246. (try_begin),
  10247. (eq, ":value", multiplayer_event_other_event_ccoop_count_down_visible),
  10248. (assign, ":show_presentation", 1),
  10249. (else_try),
  10250. (eq, ":value", multiplayer_event_other_event_ccoop_count_down_invisible),
  10251. (assign, ":show_presentation", 0),
  10252. (try_end),
  10253.  
  10254. (try_begin),
  10255. (gt, ":show_presentation", 0),
  10256. (store_mission_timer_a, "$g_multiplayer_ccoop_next_wave_start_time"),
  10257. (val_add, "$g_multiplayer_ccoop_next_wave_start_time", "$g_multiplayer_ccoop_enemy_respawn_secs"),
  10258. (start_presentation, "prsnt_multiplayer_ccoop_next_wave_time_counter"),
  10259. (try_end),
  10260.  
  10261. (else_try),
  10262. (eq, ":value", multiplayer_event_other_event_unequip_item),
  10263. (try_begin),
  10264. (neg|multiplayer_is_server),
  10265. (store_script_param, ":player_agent", 4),
  10266. (store_script_param, ":agent_item", 5),
  10267. (store_script_param, ":item_slot", 6),
  10268. (agent_is_active, ":player_agent"),
  10269. (agent_is_human, ":player_agent"),
  10270. (agent_is_alive, ":player_agent"),
  10271. (ge, ":agent_item", 0),
  10272. (agent_unequip_item, ":player_agent", ":agent_item", ":item_slot"),
  10273. (try_end),
  10274. (else_try),
  10275. (eq, ":value", multiplayer_event_other_event_equip_item),
  10276. (try_begin),
  10277. (neg|multiplayer_is_server),
  10278. (store_script_param, ":player_agent", 4),
  10279. (store_script_param, ":item_id", 5),
  10280. (agent_is_active, ":player_agent"),
  10281. (agent_is_human, ":player_agent"),
  10282. (agent_is_alive, ":player_agent"),
  10283. (ge, ":item_id", 0),
  10284. (agent_equip_item, ":player_agent", ":item_id"),
  10285. (try_end),
  10286. (else_try),
  10287. (eq, ":value", multiplayer_event_other_spawn_prison_cart),
  10288. (store_script_param, "$g_prison_cart_point", 4),
  10289. (store_script_param, ":door_hit_points", 5),
  10290.  
  10291.  
  10292. (call_script, "script_multiplayer_ccoop_set_prison_cart_visibility", 1),
  10293. (scene_prop_get_instance, ":prison_cart_door_right", "spr_prison_cart_door_right", 0),
  10294. (scene_prop_set_hit_points, ":prison_cart_door_right", ":door_hit_points"),
  10295. (scene_prop_get_instance, ":prison_cart_door_left", "spr_prison_cart_door_left", 0),
  10296. (scene_prop_set_hit_points, ":prison_cart_door_left", ":door_hit_points"),
  10297.  
  10298. # display prison cart hint message to alive players
  10299. (try_begin),
  10300. (get_player_agent_no, ":player_agent"),
  10301. (ge, ":player_agent", 0),
  10302. (display_message, "str_prison_cart_hint"),
  10303. (try_end),
  10304.  
  10305. (start_presentation, "prsnt_multiplayer_ccoop_next_wave_time_counter"), # to display ask for help to respawn hint
  10306.  
  10307. (else_try),
  10308. (eq, ":value", multiplayer_event_other_destroy_prison_cart),
  10309.  
  10310. (call_script, "script_multiplayer_ccoop_set_prison_cart_visibility", 0),
  10311.  
  10312. # animate doors
  10313. (scene_prop_get_instance, ":prison_cart_door_left", "spr_prison_cart_door_left", 0),
  10314. (scene_prop_get_instance, ":prison_cart_door_right", "spr_prison_cart_door_right", 0),
  10315.  
  10316. (store_random_in_range, ":left_angle", 35, 80),
  10317. (store_random_in_range, ":right_angle", -80, -35),
  10318. (store_random_in_range, ":left_time", 100, 350),
  10319. (store_random_in_range, ":right_time", 100, 350),
  10320.  
  10321. (prop_instance_get_position, pos1, ":prison_cart_door_left"),
  10322. (position_rotate_z, pos1, ":left_angle", 1),
  10323. (prop_instance_animate_to_position, ":prison_cart_door_left", pos1, ":left_time"),
  10324.  
  10325. (prop_instance_get_position, pos1, ":prison_cart_door_right"),
  10326. (position_rotate_z, pos1, ":right_angle", 1),
  10327. (prop_instance_animate_to_position, ":prison_cart_door_right", pos1, ":right_time"),
  10328. (else_try),
  10329. (eq, ":value", multiplayer_event_other_event_ccoop_update_spawn_data_1),
  10330. (store_script_param, ":data1", 4),
  10331. (store_script_param, ":data2", 5),
  10332. (store_script_param, ":data3", 6),
  10333.  
  10334. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin, ":data1"),
  10335. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 1, ":data2"),
  10336. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 2, ":data3"),
  10337. (else_try),
  10338. (eq, ":value", multiplayer_event_other_event_ccoop_update_spawn_data_2),
  10339. (store_script_param, ":data1", 4),
  10340. (store_script_param, ":data2", 5),
  10341. (store_script_param, ":data3", 6),
  10342.  
  10343. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 3, ":data1"),
  10344. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 4, ":data2"),
  10345. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 5, ":data3"),
  10346. (else_try),
  10347. (eq, ":value", multiplayer_event_other_event_ccoop_update_spawn_data_3),
  10348. (store_script_param, ":data1", 4),
  10349. (store_script_param, ":data2", 5),
  10350. (store_script_param, ":data3", 6),
  10351.  
  10352. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 6, ":data1"),
  10353. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 7, ":data2"),
  10354. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 8, ":data3"),
  10355.  
  10356. (else_try),
  10357. (eq, ":value", multiplayer_event_other_event_ccoop_update_spawn_data_4),
  10358. (store_script_param, ":data1", 4),
  10359. (store_script_param, ":data2", 5),
  10360. (store_script_param, ":data3", 6),
  10361.  
  10362. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 9, ":data1"),
  10363. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 10, ":data2"),
  10364. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 11, ":data3"),
  10365. (else_try),
  10366. (eq, ":value", multiplayer_event_other_event_ccoop_update_spawn_data_5),
  10367. (store_script_param, ":data1", 4),
  10368. (store_script_param, ":data2", 5),
  10369. (store_script_param, ":data3", 6),
  10370.  
  10371. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 12, ":data1"),
  10372. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 13, ":data2"),
  10373. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 14, ":data3"),
  10374. (else_try),
  10375. (eq, ":value", multiplayer_event_other_event_ccoop_update_spawn_data_6),
  10376. (store_script_param, ":data1", 4),
  10377.  
  10378. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 15, ":data1"),
  10379.  
  10380. (start_presentation, "prsnt_multiplayer_flag_projection_display_ccoop_wave"),
  10381. (else_try),
  10382. (eq, ":value", multiplayer_event_coop_set_agent_team_and_group),
  10383. (store_script_param, ":agent_no", 4),
  10384. (store_script_param, ":team_no", 5),
  10385. (store_script_param, ":group_no", 6),
  10386. (try_begin),
  10387. (agent_is_active, ":agent_no"),
  10388. (agent_is_alive, ":agent_no"),
  10389. (agent_is_non_player, ":agent_no"),
  10390. (is_between, ":team_no", 0, 2),
  10391. (agent_set_team, ":agent_no", ":team_no"),
  10392. (player_is_active, ":group_no"),
  10393. (agent_set_group, ":agent_no", ":group_no"),
  10394. (try_end),
  10395. (else_try),
  10396. (eq, ":value", multiplayer_event_other_event_ccoop_lock_companions),
  10397. (store_script_param, ":my_player_spawn_status", 4),
  10398. (multiplayer_get_my_player, ":my_player_no"),
  10399. (player_set_slot, ":my_player_no", slot_player_companion_ids_locked, ":my_player_spawn_status"),
  10400. (else_try),
  10401. (eq, ":value", multiplayer_event_other_events_change_companion_level),
  10402. (store_script_param, ":level_slot", 4),
  10403. (store_script_param, ":level_value", 5),
  10404. #validity check
  10405. (is_between, ":level_value", 0, 4),
  10406. (is_between, ":level_slot", slot_player_companion_levels_begin, slot_player_companion_levels_end),
  10407. #validity check done
  10408. (multiplayer_get_my_player, ":my_player_no"),
  10409. (player_set_slot, ":my_player_no", ":level_slot", ":level_value"),
  10410. (try_end),
  10411. (try_end),
  10412. #INVASION MODE END
  10413.  
  10414. (else_try),
  10415. ###############
  10416. #CLIENT EVENTS#
  10417. ###############
  10418. (neg|multiplayer_is_dedicated_server),
  10419. (try_begin),
  10420. (eq, ":event_type", multiplayer_event_return_renaming_server_allowed),
  10421. (store_script_param, ":value", 3),
  10422. (assign, "$g_multiplayer_renaming_server_allowed", ":value"),
  10423. (else_try),
  10424. (eq, ":event_type", multiplayer_event_return_changing_game_type_allowed),
  10425. (store_script_param, ":value", 3),
  10426. (assign, "$g_multiplayer_changing_game_type_allowed", ":value"),
  10427. (else_try),
  10428. (eq, ":event_type", multiplayer_event_return_max_num_players),
  10429. (store_script_param, ":value", 3),
  10430. (server_set_max_num_players, ":value"),
  10431. (else_try),
  10432. (eq, ":event_type", multiplayer_event_return_next_team_faction),
  10433. (store_script_param, ":value", 3),
  10434. (store_script_param, ":value_2", 4),
  10435. (try_begin),
  10436. (eq, ":value", 1),
  10437. (assign, "$g_multiplayer_next_team_1_faction", ":value_2"),
  10438. (else_try),
  10439. (assign, "$g_multiplayer_next_team_2_faction", ":value_2"),
  10440. (try_end),
  10441. (else_try),
  10442. (eq, ":event_type", multiplayer_event_return_num_bots_in_team),
  10443. (store_script_param, ":value", 3),
  10444. (store_script_param, ":value_2", 4),
  10445. (try_begin),
  10446. (eq, ":value", 1),
  10447. (assign, "$g_multiplayer_num_bots_team_1", ":value_2"),
  10448. (else_try),
  10449. (assign, "$g_multiplayer_num_bots_team_2", ":value_2"),
  10450. (try_end),
  10451. (else_try),
  10452. (eq, ":event_type", multiplayer_event_return_anti_cheat),
  10453. (store_script_param, ":value", 3),
  10454. (server_set_anti_cheat, 0),
  10455. (else_try),
  10456. (eq, ":event_type", multiplayer_event_return_friendly_fire),
  10457. (store_script_param, ":value", 3),
  10458. (server_set_friendly_fire, ":value"),
  10459. (else_try),
  10460. (eq, ":event_type", multiplayer_event_return_melee_friendly_fire),
  10461. (store_script_param, ":value", 3),
  10462. (server_set_melee_friendly_fire, ":value"),
  10463. (else_try),
  10464. (eq, ":event_type", multiplayer_event_return_friendly_fire_damage_self_ratio),
  10465. (store_script_param, ":value", 3),
  10466. (server_set_friendly_fire_damage_self_ratio, ":value"),
  10467. (else_try),
  10468. (eq, ":event_type", multiplayer_event_return_friendly_fire_damage_friend_ratio),
  10469. (store_script_param, ":value", 3),
  10470. (server_set_friendly_fire_damage_friend_ratio, ":value"),
  10471. (else_try),
  10472. (eq, ":event_type", multiplayer_event_return_ghost_mode),
  10473. (store_script_param, ":value", 3),
  10474. (server_set_ghost_mode, ":value"),
  10475. (else_try),
  10476. (eq, ":event_type", multiplayer_event_return_control_block_dir),
  10477. (store_script_param, ":value", 3),
  10478. (server_set_control_block_dir, ":value"),
  10479. (else_try),
  10480. (eq, ":event_type", multiplayer_event_return_add_to_servers_list),
  10481. (store_script_param, ":value", 3),
  10482. (server_set_add_to_game_servers_list, ":value"),
  10483. (else_try),
  10484. (eq, ":event_type", multiplayer_event_return_respawn_period),
  10485. (store_script_param, ":value", 3),
  10486. (assign, "$g_multiplayer_respawn_period", ":value"),
  10487. (else_try),
  10488. (eq, ":event_type", multiplayer_event_return_game_max_minutes),
  10489. (store_script_param, ":value", 3),
  10490. (assign, "$g_multiplayer_game_max_minutes", ":value"),
  10491. (else_try),
  10492. (eq, ":event_type", multiplayer_event_return_round_max_seconds),
  10493. (store_script_param, ":value", 3),
  10494. (assign, "$g_multiplayer_round_max_seconds", ":value"),
  10495. (else_try),
  10496. (eq, ":event_type", multiplayer_event_return_player_respawn_as_bot),
  10497. (store_script_param, ":value", 3),
  10498. (assign, "$g_multiplayer_player_respawn_as_bot", ":value"),
  10499. (else_try),
  10500. (eq, ":event_type", multiplayer_event_return_game_max_points),
  10501. (store_script_param, ":value", 3),
  10502. (assign, "$g_multiplayer_game_max_points", ":value"),
  10503. (else_try),
  10504. (eq, ":event_type", multiplayer_event_return_point_gained_from_flags),
  10505. (store_script_param, ":value", 3),
  10506. (assign, "$g_multiplayer_point_gained_from_flags", ":value"),
  10507. (else_try),
  10508. (eq, ":event_type", multiplayer_event_return_point_gained_from_capturing_flag),
  10509. (store_script_param, ":value", 3),
  10510. (assign, "$g_multiplayer_point_gained_from_capturing_flag", ":value"),
  10511. (else_try),
  10512. (eq, ":event_type", multiplayer_event_return_initial_gold_multiplier),
  10513. (store_script_param, ":value", 3),
  10514. (assign, "$g_multiplayer_initial_gold_multiplier", ":value"),
  10515. (else_try),
  10516. (eq, ":event_type", multiplayer_event_return_battle_earnings_multiplier),
  10517. (store_script_param, ":value", 3),
  10518. (assign, "$g_multiplayer_battle_earnings_multiplier", ":value"),
  10519. (else_try),
  10520. (eq, ":event_type", multiplayer_event_return_round_earnings_multiplier),
  10521. (store_script_param, ":value", 3),
  10522. (assign, "$g_multiplayer_round_earnings_multiplier", ":value"),
  10523. (else_try),
  10524. (eq, ":event_type", multiplayer_event_return_respawn_count),
  10525. (store_script_param, ":value", 3),
  10526. (assign, "$g_multiplayer_number_of_respawn_count", ":value"),
  10527. (else_try),
  10528. (eq, ":event_type", multiplayer_event_return_server_name),
  10529. (server_set_name, s0),
  10530. (else_try),
  10531. (eq, ":event_type", multiplayer_event_return_game_password),
  10532. (server_set_password, s0),
  10533. #this is the last option in admin panel, so start the presentation
  10534. (start_presentation, "prsnt_game_multiplayer_admin_panel"),
  10535. (else_try),
  10536. (eq, ":event_type", multiplayer_event_return_open_game_rules),
  10537. #this is the last message for game rules, so start the presentation
  10538. (assign, "$g_multiplayer_show_server_rules", 1),
  10539. (start_presentation, "prsnt_multiplayer_welcome_message"),
  10540. (else_try),
  10541. (eq, ":event_type", multiplayer_event_return_game_type),
  10542. (store_script_param, ":value", 3),
  10543. (assign, "$g_multiplayer_game_type", ":value"),
  10544. #INVASION MODE START
  10545. (call_script, "script_multiplayer_set_g_multiplayer_is_game_type_captain"),
  10546. #INVASION MODE END
  10547. (else_try),
  10548. (eq, ":event_type", multiplayer_event_return_valid_vote_ratio),
  10549. (store_script_param, ":value", 3),
  10550. (assign, "$g_multiplayer_valid_vote_ratio", ":value"),
  10551. (else_try),
  10552. (eq, ":event_type", multiplayer_event_return_max_num_bots),
  10553. (store_script_param, ":value", 3),
  10554. (assign, "$g_multiplayer_max_num_bots", ":value"),
  10555. (else_try),
  10556. (eq, ":event_type", multiplayer_event_return_server_mission_timer_while_player_joined),
  10557. (store_script_param, ":value", 3),
  10558. (assign, "$server_mission_timer_while_player_joined", ":value"),
  10559. (else_try),
  10560. (eq, ":event_type", multiplayer_event_return_auto_team_balance_limit),
  10561. (store_script_param, ":value", 3),
  10562. (assign, "$g_multiplayer_auto_team_balance_limit", ":value"),
  10563. (else_try),
  10564. (eq, ":event_type", multiplayer_event_return_num_bots_voteable),
  10565. (store_script_param, ":value", 3),
  10566. (assign, "$g_multiplayer_num_bots_voteable", ":value"),
  10567. (else_try),
  10568. (eq, ":event_type", multiplayer_event_return_factions_voteable),
  10569. (store_script_param, ":value", 3),
  10570. (assign, "$g_multiplayer_factions_voteable", ":value"),
  10571. (else_try),
  10572. (eq, ":event_type", multiplayer_event_return_maps_voteable),
  10573. (store_script_param, ":value", 3),
  10574. (assign, "$g_multiplayer_maps_voteable", ":value"),
  10575. (else_try),
  10576. (eq, ":event_type", multiplayer_event_return_kick_voteable),
  10577. (store_script_param, ":value", 3),
  10578. (assign, "$g_multiplayer_kick_voteable", ":value"),
  10579. (else_try),
  10580. (eq, ":event_type", multiplayer_event_return_ban_voteable),
  10581. (store_script_param, ":value", 3),
  10582. (assign, "$g_multiplayer_ban_voteable", ":value"),
  10583. (else_try),
  10584. (eq, ":event_type", multiplayer_event_return_allow_player_banners),
  10585. (store_script_param, ":value", 3),
  10586. (assign, "$g_multiplayer_allow_player_banners", ":value"),
  10587. (else_try),
  10588. (eq, ":event_type", multiplayer_event_return_force_default_armor),
  10589. (store_script_param, ":value", 3),
  10590. (assign, "$g_multiplayer_force_default_armor", ":value"),
  10591. (else_try),
  10592. (eq, ":event_type", multiplayer_event_return_disallow_ranged_weapons),
  10593. (store_script_param, ":value", 3),
  10594. (assign, "$g_multiplayer_disallow_ranged_weapons", ":value"),
  10595. (else_try),
  10596. (eq, ":event_type", multiplayer_event_return_confirmation),
  10597. (assign, "$g_confirmation_result", 1),
  10598. (else_try),
  10599. (eq, ":event_type", multiplayer_event_return_rejection),
  10600. (assign, "$g_confirmation_result", -1),
  10601. (else_try),
  10602. (eq, ":event_type", multiplayer_event_show_multiplayer_message),
  10603. (store_script_param, ":value", 3),
  10604. (store_script_param, ":value_2", 4),
  10605. (call_script, "script_show_multiplayer_message", ":value", ":value_2"),
  10606. (else_try),
  10607. (eq, ":event_type", multiplayer_event_draw_this_round),
  10608. (store_script_param, ":value", 3),
  10609. (call_script, "script_draw_this_round", ":value"),
  10610. (else_try),
  10611. (eq, ":event_type", multiplayer_event_set_attached_scene_prop),
  10612. (store_script_param, ":value", 3),
  10613. (store_script_param, ":value_2", 4),
  10614. (call_script, "script_set_attached_scene_prop", ":value", ":value_2"),
  10615. (try_begin),
  10616. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  10617. (try_begin),
  10618. (neq, ":value_2", -1),
  10619. (agent_set_horse_speed_factor, ":value", 75),
  10620. (else_try),
  10621. (agent_set_horse_speed_factor, ":value", 100),
  10622. (try_end),
  10623. (try_end),
  10624. (else_try),
  10625. (eq, ":event_type", multiplayer_event_set_team_flag_situation),
  10626. (store_script_param, ":value", 3),
  10627. (store_script_param, ":value_2", 4),
  10628. (call_script, "script_set_team_flag_situation", ":value", ":value_2"),
  10629. (else_try),
  10630. (eq, ":event_type", multiplayer_event_set_team_score),
  10631. (store_script_param, ":value", 3),
  10632. (store_script_param, ":value_2", 4),
  10633. (call_script, "script_team_set_score", ":value", ":value_2"),
  10634. (else_try),
  10635. (eq, ":event_type", multiplayer_event_set_player_score_kill_death),
  10636. (store_script_param, ":value", 3),
  10637. (store_script_param, ":value_2", 4),
  10638. (store_script_param, ":value_3", 5),
  10639. (store_script_param, ":value_4", 6),
  10640. (call_script, "script_player_set_score", ":value", ":value_2"),
  10641. (call_script, "script_player_set_kill_count", ":value", ":value_3"),
  10642. (call_script, "script_player_set_death_count", ":value", ":value_4"),
  10643. (else_try),
  10644. (eq, ":event_type", multiplayer_event_set_num_agents_around_flag),
  10645. (store_script_param, ":flag_no", 3),
  10646. (store_script_param, ":current_owner_code", 4),
  10647. (call_script, "script_set_num_agents_around_flag", ":flag_no", ":current_owner_code"),
  10648. (else_try),
  10649. (eq, ":event_type", multiplayer_event_ask_for_poll),
  10650. (store_script_param, ":value", 3),
  10651. (store_script_param, ":value_2", 4),
  10652. (store_script_param, ":value_3", 5),
  10653. (store_script_param, ":value_4", 6),
  10654. (assign, ":continue_to_poll", 0),
  10655. (try_begin),
  10656. (this_or_next|eq, ":value", 1),
  10657. (eq, ":value", 2),
  10658. (player_is_active, ":value_2"), #might go offline before here
  10659. (assign, ":continue_to_poll", 1),
  10660. (else_try),
  10661. (assign, ":continue_to_poll", 1),
  10662. (try_end),
  10663. (try_begin),
  10664. (eq, ":continue_to_poll", 1),
  10665. (assign, "$g_multiplayer_poll_to_show", ":value"),
  10666. (assign, "$g_multiplayer_poll_value_to_show", ":value_2"),
  10667. (assign, "$g_multiplayer_poll_value_2_to_show", ":value_3"),
  10668. (assign, "$g_multiplayer_poll_value_3_to_show", ":value_4"),
  10669. (store_mission_timer_a, ":mission_timer"),
  10670. (store_add, "$g_multiplayer_poll_client_end_time", ":mission_timer", 60),
  10671. (start_presentation, "prsnt_multiplayer_poll"),
  10672. (try_end),
  10673. (else_try),
  10674. (eq, ":event_type", multiplayer_event_change_flag_owner),
  10675. (store_script_param, ":flag_no", 3),
  10676. (store_script_param, ":owner_code", 4),
  10677. (call_script, "script_change_flag_owner", ":flag_no", ":owner_code"),
  10678. (else_try),
  10679. (eq, ":event_type", multiplayer_event_use_item),
  10680. (store_script_param, ":value", 3),
  10681. (store_script_param, ":value_2", 4),
  10682. (call_script, "script_use_item", ":value", ":value_2"),
  10683. (else_try),
  10684. #INVASION MODE START
  10685. (eq, ":event_type", multiplayer_event_coop_chest_opened),
  10686. (store_script_param, ":value", 3),
  10687. (store_script_param, ":value_2", 4),
  10688. (try_begin),
  10689. (is_between, ":value", slot_player_coop_opened_chests_begin, slot_player_coop_opened_chests_end),
  10690. (multiplayer_get_my_player, ":player_no"),
  10691. (player_set_slot, ":player_no", ":value", ":value_2"),
  10692. #(display_message, "@script called"), #debug
  10693. (try_end),
  10694. (else_try),
  10695. (eq, ":event_type", multiplayer_event_coop_drop_item),
  10696. (store_script_param, ":value", 3),
  10697. (store_script_param, ":value_2", 4),
  10698. (store_script_param, ":value_3", 5),
  10699. (call_script, "script_coop_drop_item", ":value", ":value_2", ":value_3"),
  10700. #(display_message, "@script called"), #debug
  10701. (else_try),
  10702. #INVASION MODE END
  10703. (eq, ":event_type", multiplayer_event_set_scene_prop_open_or_close),
  10704. (store_script_param, ":instance_id", 3),
  10705.  
  10706. (scene_prop_set_slot, ":instance_id", scene_prop_open_or_close_slot, 1),
  10707.  
  10708. (prop_instance_get_scene_prop_kind, ":scene_prop_id", ":instance_id"),
  10709.  
  10710. (try_begin),
  10711. (eq, ":scene_prop_id", "spr_winch_b"),
  10712. (assign, ":effected_object", "spr_portcullis"),
  10713. (else_try),
  10714. (this_or_next|eq, ":scene_prop_id", "spr_castle_e_sally_door_a"),
  10715. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_sally_door_a"),
  10716. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_left"),
  10717. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_right"),
  10718. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_left"),
  10719. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_right"),
  10720. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_door_a"),
  10721. (this_or_next|eq, ":scene_prop_id", "spr_door_destructible"),
  10722. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_door_b"),
  10723. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_6m"),
  10724. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_8m"),
  10725. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_10m"),
  10726. (this_or_next|eq, ":scene_prop_id", "spr_siege_ladder_move_12m"),
  10727. (eq, ":scene_prop_id", "spr_siege_ladder_move_14m"),
  10728. (assign, ":effected_object", ":scene_prop_id"),
  10729. (try_end),
  10730.  
  10731. (try_begin),
  10732. (eq, ":effected_object", "spr_portcullis"),
  10733.  
  10734. (assign, ":smallest_dist", -1),
  10735. (prop_instance_get_position, pos0, ":instance_id"),
  10736. (scene_prop_get_num_instances, ":num_instances_of_effected_object", ":effected_object"),
  10737. (try_for_range, ":cur_instance", 0, ":num_instances_of_effected_object"),
  10738. (scene_prop_get_instance, ":cur_instance_id", ":effected_object", ":cur_instance"),
  10739. (prop_instance_get_position, pos1, ":cur_instance_id"),
  10740. (get_sq_distance_between_positions, ":dist", pos0, pos1),
  10741. (this_or_next|eq, ":smallest_dist", -1),
  10742. (lt, ":dist", ":smallest_dist"),
  10743. (assign, ":smallest_dist", ":dist"),
  10744. (assign, ":effected_object_instance_id", ":cur_instance_id"),
  10745. (try_end),
  10746.  
  10747. (ge, ":smallest_dist", 0),
  10748. (prop_instance_is_animating, ":is_animating", ":effected_object_instance_id"),
  10749. (eq, ":is_animating", 0),
  10750.  
  10751. (prop_instance_get_starting_position, pos0, ":effected_object_instance_id"),
  10752. (position_move_z, pos0, 375),
  10753. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 1),
  10754. (else_try),
  10755. (this_or_next|eq, ":scene_prop_id", "spr_castle_e_sally_door_a"),
  10756. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_sally_door_a"),
  10757. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_left"),
  10758. (this_or_next|eq, ":scene_prop_id", "spr_earth_sally_gate_right"),
  10759. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_left"),
  10760. (this_or_next|eq, ":scene_prop_id", "spr_viking_keep_destroy_sally_door_right"),
  10761. (this_or_next|eq, ":scene_prop_id", "spr_castle_f_door_a"),
  10762. (this_or_next|eq, ":scene_prop_id", "spr_door_destructible"),
  10763. (eq, ":scene_prop_id", "spr_castle_f_door_b"),
  10764. (assign, ":effected_object_instance_id", ":instance_id"),
  10765. (prop_instance_get_starting_position, pos0, ":effected_object_instance_id"),
  10766. (position_rotate_z, pos0, -80),
  10767. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 1),
  10768. (else_try),
  10769. (assign, ":effected_object_instance_id", ":instance_id"),
  10770. (prop_instance_is_animating, ":is_animating", ":effected_object_instance_id"),
  10771. (eq, ":is_animating", 0),
  10772. (prop_instance_get_starting_position, pos0, ":effected_object_instance_id"),
  10773. (prop_instance_animate_to_position, ":effected_object_instance_id", pos0, 1),
  10774. (try_end),
  10775. (else_try),
  10776. (eq, ":event_type", multiplayer_event_set_round_start_time),
  10777. (store_script_param, ":value", 3),
  10778.  
  10779. (try_begin),
  10780. (neq, ":value", -9999),
  10781. (assign, "$g_round_start_time", ":value"),
  10782. (else_try),
  10783. (store_mission_timer_a, "$g_round_start_time"),
  10784.  
  10785. #if round start time is assigning to current time (so new round is starting) then also initialize moveable object slots too.
  10786. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_6m"),
  10787. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_8m"),
  10788. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_10m"),
  10789. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_12m"),
  10790. (call_script, "script_initialize_scene_prop_slots", "spr_siege_ladder_move_14m"),
  10791. (call_script, "script_initialize_scene_prop_slots", "spr_winch_b"),
  10792. (try_end),
  10793. (else_try),
  10794. (eq, ":event_type", multiplayer_event_force_start_team_selection),
  10795. (try_begin),
  10796. (is_presentation_active, "prsnt_multiplayer_item_select"),
  10797. (assign, "$g_close_equipment_selection", 1),
  10798. (try_end),
  10799. (start_presentation, "prsnt_multiplayer_troop_select"),
  10800. (else_try),
  10801. (eq, ":event_type", multiplayer_event_start_death_mode),
  10802. (assign, "$g_battle_death_mode_started", 2),
  10803. (start_presentation, "prsnt_multiplayer_flag_projection_display_bt"),
  10804. (call_script, "script_start_death_mode"),
  10805. (else_try),
  10806. (eq, ":event_type", multiplayer_event_return_player_respawn_spent),
  10807. (store_script_param, ":value", 3),
  10808. (try_begin),
  10809. (gt, "$g_my_spawn_count", 0),
  10810. (store_add, "$g_my_spawn_count", "$g_my_spawn_count", ":value"),
  10811. (else_try),
  10812. (assign, "$g_my_spawn_count", ":value"),
  10813. (try_end),
  10814. (else_try),
  10815. (eq, ":event_type", multiplayer_event_show_duel_request),
  10816. (store_script_param, ":value", 3),
  10817. (try_begin),
  10818. (agent_is_active, ":value"),
  10819. (agent_get_player_id, ":value_player_no", ":value"),
  10820. (try_begin),
  10821. (player_is_active, ":value_player_no"),
  10822. (str_store_player_username, s0, ":value_player_no"),
  10823. (else_try),
  10824. (str_store_agent_name, s0, ":value"),
  10825. (try_end),
  10826. (display_message, "str_s0_offers_a_duel_with_you"),
  10827. (try_begin),
  10828. (get_player_agent_no, ":player_agent"),
  10829. (agent_is_active, ":player_agent"),
  10830. (agent_add_offer_with_timeout, ":player_agent", ":value", 10000), #10 second timeout
  10831. (try_end),
  10832. (try_end),
  10833. (else_try),
  10834. (eq, ":event_type", multiplayer_event_start_duel),
  10835. (store_script_param, ":value", 3),
  10836. (store_mission_timer_a, ":mission_timer"),
  10837. (try_begin),
  10838. (agent_is_active, ":value"),
  10839. (get_player_agent_no, ":player_agent"),
  10840. (agent_is_active, ":player_agent"),
  10841. (agent_get_player_id, ":value_player_no", ":value"),
  10842. (try_begin),
  10843. (player_is_active, ":value_player_no"),
  10844. (str_store_player_username, s0, ":value_player_no"),
  10845. (else_try),
  10846. (str_store_agent_name, s0, ":value"),
  10847. (try_end),
  10848. (display_message, "str_a_duel_between_you_and_s0_will_start_in_3_seconds"),
  10849. (assign, "$g_multiplayer_duel_start_time", ":mission_timer"),
  10850. (start_presentation, "prsnt_multiplayer_duel_start_counter"),
  10851. (agent_set_slot, ":player_agent", slot_agent_in_duel_with, ":value"),
  10852. (agent_set_slot, ":value", slot_agent_in_duel_with, ":player_agent"),
  10853. (agent_set_slot, ":player_agent", slot_agent_duel_start_time, ":mission_timer"),
  10854. (agent_set_slot, ":value", slot_agent_duel_start_time, ":mission_timer"),
  10855. (agent_clear_relations_with_agents, ":player_agent"),
  10856. (agent_clear_relations_with_agents, ":value"),
  10857. ## (agent_add_relation_with_agent, ":player_agent", ":value", -1),
  10858. (try_end),
  10859. (else_try),
  10860. (eq, ":event_type", multiplayer_event_cancel_duel),
  10861. (store_script_param, ":value", 3),
  10862. (try_begin),
  10863. (agent_is_active, ":value"),
  10864. (agent_get_player_id, ":value_player_no", ":value"),
  10865. (try_begin),
  10866. (player_is_active, ":value_player_no"),
  10867. (str_store_player_username, s0, ":value_player_no"),
  10868. (else_try),
  10869. (str_store_agent_name, s0, ":value"),
  10870. (try_end),
  10871. (display_message, "str_your_duel_with_s0_is_cancelled"),
  10872. (try_end),
  10873. (try_begin),
  10874. (get_player_agent_no, ":player_agent"),
  10875. (agent_is_active, ":player_agent"),
  10876. (agent_set_slot, ":player_agent", slot_agent_in_duel_with, -1),
  10877. (agent_clear_relations_with_agents, ":player_agent"),
  10878. (try_end),
  10879. (else_try),
  10880. (eq, ":event_type", multiplayer_event_show_server_message),
  10881. (display_message, "str_server_s0", 0xFFFF6666),
  10882. #INVASION MODE START
  10883. (else_try),
  10884. (eq, ":event_type", multiplayer_event_return_set_bot_selection),
  10885. (store_script_param, ":slot_no", 3),
  10886. (store_script_param, ":value", 4),
  10887. (is_between, ":slot_no", slot_player_bot_type_1_wanted, slot_player_bot_type_4_wanted + 1),
  10888. (is_between, ":value", 0, 2),
  10889. (player_set_slot, ":player_no", ":slot_no", ":value"),
  10890. (else_try),
  10891. (eq, ":event_type", multiplayer_event_return_ccoop_difficulty),
  10892. (store_script_param, ":value", 3),
  10893. (assign, reg0, ":value"),
  10894. #(display_message, "@returning difficulty as: {reg0}"),
  10895. (assign, "$g_multiplayer_ccoop_difficulty", ":value"),
  10896. (else_try),
  10897. (eq, ":event_type", multiplayer_event_ccoop_victory_message),
  10898. (store_script_param, "$g_multiplayer_ccoop_difficulty_string_i", 3),
  10899. (start_presentation, "prsnt_multiplayer_ccoop_victory_message"),
  10900. (else_try),
  10901. (eq, ":event_type", multiplayer_event_ccoop_return_of_the_king),
  10902. (store_script_param, "$g_ccoop_king_troop", 3),
  10903. (else_try),
  10904. (eq, ":event_type", multiplayer_event_return_sound_at_pos),
  10905. (store_script_param, ":xvalue", 3),
  10906. (store_script_param, ":yvalue", 4),
  10907. (store_script_param, ":zvalue", 5),
  10908. (store_script_param, ":sound_id", 6),
  10909.  
  10910. (try_begin),
  10911. (is_between, ":sound_id", 0, "snd_sounds_end"), # Valid sound
  10912.  
  10913. (set_fixed_point_multiplier, 100),
  10914. (init_position, pos1),
  10915. (position_set_x, pos1, ":xvalue"),
  10916. (position_set_y, pos1, ":yvalue"),
  10917. (position_set_z, pos1, ":zvalue"),
  10918.  
  10919. (play_sound_at_position, ":sound_id", pos1),
  10920. (try_end),
  10921. #INVASION MODE END
  10922. (try_end),
  10923. #INVASION MODE START
  10924. (try_end),
  10925. #INVASION MODE END
  10926. ]),
  10927.  
  10928. # script_cf_multiplayer_evaluate_poll
  10929. # Input: none
  10930. # Output: none (can fail)
  10931. ("cf_multiplayer_evaluate_poll",
  10932. [
  10933. (assign, ":result", 0),
  10934. (assign, "$g_multiplayer_poll_ended", 1),
  10935. (store_add, ":total_votes", "$g_multiplayer_poll_yes_count", "$g_multiplayer_poll_no_count"),
  10936. (store_sub, ":abstain_votes", "$g_multiplayer_poll_num_sent", ":total_votes"),
  10937. (store_mul, ":nos_from_abstains", 3, ":abstain_votes"),
  10938. (val_div, ":nos_from_abstains", 10), #30% of abstains are counted as no
  10939. (val_add, ":total_votes", ":nos_from_abstains"),
  10940. (val_max, ":total_votes", 1), #if someone votes and only 1-3 abstain occurs?
  10941. (store_mul, ":vote_ratio", 100, "$g_multiplayer_poll_yes_count"),
  10942. (val_div, ":vote_ratio", ":total_votes"),
  10943. (try_begin),
  10944. (ge, ":vote_ratio", "$g_multiplayer_valid_vote_ratio"),
  10945. (assign, ":result", 1),
  10946. (try_begin),
  10947. (eq, "$g_multiplayer_poll_to_show", 1), #kick player
  10948. (try_begin),
  10949. (player_is_active, "$g_multiplayer_poll_value_to_show"),
  10950. (kick_player, "$g_multiplayer_poll_value_to_show"),
  10951. (try_end),
  10952. (else_try),
  10953. (eq, "$g_multiplayer_poll_to_show", 2), #ban player
  10954. (ban_player_using_saved_ban_info), #already loaded at the beginning of the poll
  10955. (else_try),
  10956. (eq, "$g_multiplayer_poll_to_show", 3), #change map with factions
  10957. (team_set_faction, 0, "$g_multiplayer_poll_value_2_to_show"),
  10958. (team_set_faction, 1, "$g_multiplayer_poll_value_3_to_show"),
  10959. (else_try),
  10960. (eq, "$g_multiplayer_poll_to_show", 4), #change number of bots
  10961. (assign, "$g_multiplayer_num_bots_team_1", "$g_multiplayer_poll_value_to_show"),
  10962. (assign, "$g_multiplayer_num_bots_team_2", "$g_multiplayer_poll_value_2_to_show"),
  10963. (get_max_players, ":num_players"),
  10964. (try_for_range, ":cur_player", 1, ":num_players"),
  10965. (player_is_active, ":cur_player"),
  10966. (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_return_num_bots_in_team, 1, "$g_multiplayer_num_bots_team_1"),
  10967. (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_return_num_bots_in_team, 2, "$g_multiplayer_num_bots_team_2"),
  10968. (try_end),
  10969. (try_end),
  10970. (else_try),
  10971. (assign, "$g_multiplayer_poll_running", 0), #end immediately if poll fails. but end after some time if poll succeeds (apply the results first)
  10972. (try_end),
  10973. (get_max_players, ":num_players"),
  10974. #for only server itself-----------------------------------------------------------------------------------------------
  10975. (call_script, "script_show_multiplayer_message", multiplayer_message_type_poll_result, ":result"), #0 is useless here
  10976. #for only server itself-----------------------------------------------------------------------------------------------
  10977. (try_for_range, ":cur_player", 1, ":num_players"),
  10978. (player_is_active, ":cur_player"),
  10979. (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_show_multiplayer_message, multiplayer_message_type_poll_result, ":result"),
  10980. (try_end),
  10981. (eq, ":result", 1),
  10982. ]),
  10983.  
  10984. # script_multiplayer_accept_duel
  10985. # Input: arg1 = agent_no, arg2 = agent_no_offerer
  10986. # Output: none
  10987. ("multiplayer_accept_duel",
  10988. [
  10989. (store_script_param, ":agent_no", 1),
  10990. (store_script_param, ":agent_no_offerer", 2),
  10991. (try_begin),
  10992. (agent_slot_ge, ":agent_no", slot_agent_in_duel_with, 0),
  10993. (agent_get_slot, ":ex_duelist", ":agent_no", slot_agent_in_duel_with),
  10994. (agent_is_active, ":ex_duelist"),
  10995. (agent_clear_relations_with_agents, ":ex_duelist"),
  10996. (agent_set_slot, ":ex_duelist", slot_agent_in_duel_with, -1),
  10997. (agent_get_player_id, ":player_no", ":ex_duelist"),
  10998. (try_begin),
  10999. (player_is_active, ":player_no"), #might be AI
  11000. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_cancel_duel, ":agent_no"),
  11001. (else_try),
  11002. (agent_force_rethink, ":ex_duelist"),
  11003. (try_end),
  11004. (try_end),
  11005. (try_begin),
  11006. (agent_slot_ge, ":agent_no_offerer", slot_agent_in_duel_with, 0),
  11007. (agent_get_slot, ":ex_duelist", ":agent_no_offerer", slot_agent_in_duel_with),
  11008. (agent_is_active, ":ex_duelist"),
  11009. (agent_clear_relations_with_agents, ":ex_duelist"),
  11010. (agent_set_slot, ":ex_duelist", slot_agent_in_duel_with, -1),
  11011. (try_begin),
  11012. (player_is_active, ":player_no"), #might be AI
  11013. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_cancel_duel, ":agent_no_offerer"),
  11014. (else_try),
  11015. (agent_force_rethink, ":ex_duelist"),
  11016. (try_end),
  11017. (try_end),
  11018. (agent_set_slot, ":agent_no", slot_agent_in_duel_with, ":agent_no_offerer"),
  11019. (agent_set_slot, ":agent_no_offerer", slot_agent_in_duel_with, ":agent_no"),
  11020. (agent_clear_relations_with_agents, ":agent_no"),
  11021. (agent_clear_relations_with_agents, ":agent_no_offerer"),
  11022. ## (agent_add_relation_with_agent, ":agent_no", ":agent_no_offerer", -1),
  11023. ## (agent_add_relation_with_agent, ":agent_no_offerer", ":agent_no", -1),
  11024. (agent_get_player_id, ":player_no", ":agent_no"),
  11025. (store_mission_timer_a, ":mission_timer"),
  11026. (try_begin),
  11027. (player_is_active, ":player_no"), #might be AI
  11028. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_start_duel, ":agent_no_offerer"),
  11029. (else_try),
  11030. (agent_force_rethink, ":agent_no"),
  11031. (try_end),
  11032. (agent_set_slot, ":agent_no", slot_agent_duel_start_time, ":mission_timer"),
  11033. (agent_get_player_id, ":agent_no_offerer_player", ":agent_no_offerer"),
  11034. (try_begin),
  11035. (player_is_active, ":agent_no_offerer_player"), #might be AI
  11036. (multiplayer_send_int_to_player, ":agent_no_offerer_player", multiplayer_event_start_duel, ":agent_no"),
  11037. (else_try),
  11038. (agent_force_rethink, ":agent_no_offerer"),
  11039. (try_end),
  11040. (agent_set_slot, ":agent_no_offerer", slot_agent_duel_start_time, ":mission_timer"),
  11041. ]),
  11042.  
  11043. # script_game_get_multiplayer_server_option_for_mission_template
  11044. # Input: arg1 = mission_template_id, arg2 = option_index
  11045. # Output: trigger_result = 1 for option available, 0 for not available
  11046. # reg0 = option_value
  11047. ("game_get_multiplayer_server_option_for_mission_template",
  11048. [
  11049. (store_script_param, ":mission_template_id", 1),
  11050. (store_script_param, ":option_index", 2),
  11051. (try_begin),
  11052. (eq, ":option_index", 0),
  11053. (assign, reg0, "$g_multiplayer_team_1_faction"),
  11054. (set_trigger_result, 1),
  11055. (else_try),
  11056. (eq, ":option_index", 1),
  11057. (assign, reg0, "$g_multiplayer_team_2_faction"),
  11058. (set_trigger_result, 1),
  11059. (else_try),
  11060. (eq, ":option_index", 2),
  11061. (assign, reg0, "$g_multiplayer_num_bots_team_1"),
  11062. (set_trigger_result, 1),
  11063. (else_try),
  11064. (eq, ":option_index", 3),
  11065. (assign, reg0, "$g_multiplayer_num_bots_team_2"),
  11066. (set_trigger_result, 1),
  11067. (else_try),
  11068. (eq, ":option_index", 4),
  11069. (server_get_friendly_fire, reg0),
  11070. (set_trigger_result, 1),
  11071. (else_try),
  11072. (eq, ":option_index", 5),
  11073. (server_get_melee_friendly_fire, reg0),
  11074. (set_trigger_result, 1),
  11075. (else_try),
  11076. (eq, ":option_index", 6),
  11077. (server_get_friendly_fire_damage_self_ratio, reg0),
  11078. (set_trigger_result, 1),
  11079. (else_try),
  11080. (eq, ":option_index", 7),
  11081. (server_get_friendly_fire_damage_friend_ratio, reg0),
  11082. (set_trigger_result, 1),
  11083. (else_try),
  11084. (eq, ":option_index", 8),
  11085. (server_get_ghost_mode, reg0),
  11086. (set_trigger_result, 1),
  11087. (else_try),
  11088. (eq, ":option_index", 9),
  11089. (server_get_control_block_dir, reg0),
  11090. (set_trigger_result, 1),
  11091. (else_try),
  11092. (eq, ":option_index", 10),
  11093. (server_get_combat_speed, reg0),
  11094. (set_trigger_result, 1),
  11095. (else_try),
  11096. (try_begin),
  11097. (eq, ":mission_template_id", "mt_multiplayer_hq"),
  11098. (val_add, ":option_index", 1), #max game time
  11099. (try_end),
  11100. (eq, ":option_index", 11),
  11101. (assign, reg0, "$g_multiplayer_game_max_minutes"),
  11102. (set_trigger_result, 1),
  11103. (else_try),
  11104. (try_begin),
  11105. (neq, ":mission_template_id", "mt_multiplayer_bt"),
  11106. (neq, ":mission_template_id", "mt_multiplayer_fd"),
  11107. (neq, ":mission_template_id", "mt_multiplayer_sg"),
  11108. (val_add, ":option_index", 1), #max round time
  11109. (try_end),
  11110. (eq, ":option_index", 12),
  11111. (assign, reg0, "$g_multiplayer_round_max_seconds"),
  11112. (set_trigger_result, 1),
  11113. (else_try),
  11114. (try_begin),
  11115. (neq, ":mission_template_id", "mt_multiplayer_bt"),
  11116. (neq, ":mission_template_id", "mt_multiplayer_fd"),
  11117. (val_add, ":option_index", 1), #respawn as bot
  11118. (try_end),
  11119. (eq, ":option_index", 13),
  11120. (assign, reg0, "$g_multiplayer_player_respawn_as_bot"),
  11121. (set_trigger_result, 1),
  11122. (else_try),
  11123. (try_begin),
  11124. (neq, ":mission_template_id", "mt_multiplayer_sg"),
  11125. (val_add, ":option_index", 1), #respawn limit
  11126. (try_end),
  11127. (eq, ":option_index", 14),
  11128. (assign, reg0, "$g_multiplayer_number_of_respawn_count"),
  11129. (set_trigger_result, 1),
  11130. (else_try),
  11131. (eq, ":option_index", 15),
  11132. (assign, reg0, "$g_multiplayer_game_max_points"),
  11133. (set_trigger_result, 1),
  11134. (else_try),
  11135. (try_begin),
  11136. (neq, ":mission_template_id", "mt_multiplayer_hq"),
  11137. (val_add, ":option_index", 1), #point gained from flags
  11138. (try_end),
  11139. (eq, ":option_index", 16),
  11140. (assign, reg0, "$g_multiplayer_point_gained_from_flags"),
  11141. (set_trigger_result, 1),
  11142. (else_try),
  11143. (try_begin),
  11144. (neq, ":mission_template_id", "mt_multiplayer_cf"),
  11145. (val_add, ":option_index", 1), #point gained from capturing flag
  11146. (try_end),
  11147. (eq, ":option_index", 17),
  11148. (assign, reg0, "$g_multiplayer_point_gained_from_capturing_flag"),
  11149. (set_trigger_result, 1),
  11150. (else_try),
  11151. (eq, ":option_index", 18),
  11152. (assign, reg0, "$g_multiplayer_respawn_period"),
  11153. (set_trigger_result, 1),
  11154. (else_try),
  11155. (eq, ":option_index", 19),
  11156. (assign, reg0, "$g_multiplayer_initial_gold_multiplier"),
  11157. (set_trigger_result, 1),
  11158. (else_try),
  11159. (eq, ":option_index", 20),
  11160. (assign, reg0, "$g_multiplayer_battle_earnings_multiplier"),
  11161. (set_trigger_result, 1),
  11162. (else_try),
  11163. (try_begin),
  11164. (neq, ":mission_template_id", "mt_multiplayer_bt"),
  11165. (neq, ":mission_template_id", "mt_multiplayer_fd"),
  11166. (neq, ":mission_template_id", "mt_multiplayer_sg"),
  11167. (val_add, ":option_index", 1),
  11168. (try_end),
  11169. (eq, ":option_index", 21),
  11170. (assign, reg0, "$g_multiplayer_round_earnings_multiplier"),
  11171. (set_trigger_result, 1),
  11172. (try_end),
  11173. ]),
  11174.  
  11175. # script_game_multiplayer_server_option_for_mission_template_to_string
  11176. # Input: arg1 = mission_template_id, arg2 = option_index, arg3 = option_value
  11177. # Output: s0 = option_text
  11178. ("game_multiplayer_server_option_for_mission_template_to_string",
  11179. [
  11180. (store_script_param, ":mission_template_id", 1),
  11181. (store_script_param, ":option_index", 2),
  11182. (store_script_param, ":option_value", 3),
  11183. (str_clear, s0),
  11184. (try_begin),
  11185. (eq, ":option_index", 0),
  11186. (assign, reg1, 1),
  11187. (str_store_string, s0, "str_team_reg1_faction"),
  11188. (str_store_faction_name, s1, ":option_value"),
  11189. (str_store_string, s0, "str_s0_s1"),
  11190. (else_try),
  11191. (eq, ":option_index", 1),
  11192. (assign, reg1, 2),
  11193. (str_store_string, s0, "str_team_reg1_faction"),
  11194. (str_store_faction_name, s1, ":option_value"),
  11195. (str_store_string, s0, "str_s0_s1"),
  11196. (else_try),
  11197. (eq, ":option_index", 2),
  11198. (assign, reg1, 1),
  11199. (str_store_string, s0, "str_number_of_bots_in_team_reg1"),
  11200. (assign, reg0, ":option_value"),
  11201. (str_store_string, s0, "str_s0_reg0"),
  11202. (else_try),
  11203. (eq, ":option_index", 3),
  11204. (assign, reg1, 2),
  11205. (str_store_string, s0, "str_number_of_bots_in_team_reg1"),
  11206. (assign, reg0, ":option_value"),
  11207. (str_store_string, s0, "str_s0_reg0"),
  11208. (else_try),
  11209. (eq, ":option_index", 4),
  11210. (str_store_string, s0, "str_allow_friendly_fire"),
  11211. (try_begin),
  11212. (eq, ":option_value", 0),
  11213. (str_store_string, s1, "str_no_wo_dot"),
  11214. (else_try),
  11215. (str_store_string, s1, "str_yes_wo_dot"),
  11216. (try_end),
  11217. (str_store_string, s0, "str_s0_s1"),
  11218. (else_try),
  11219. (eq, ":option_index", 5),
  11220. (str_store_string, s0, "str_allow_melee_friendly_fire"),
  11221. (try_begin),
  11222. (eq, ":option_value", 0),
  11223. (str_store_string, s1, "str_no_wo_dot"),
  11224. (else_try),
  11225. (str_store_string, s1, "str_yes_wo_dot"),
  11226. (try_end),
  11227. (str_store_string, s0, "str_s0_s1"),
  11228. (else_try),
  11229. (eq, ":option_index", 6),
  11230. (str_store_string, s0, "str_friendly_fire_damage_self_ratio"),
  11231. (assign, reg0, ":option_value"),
  11232. (str_store_string, s0, "str_s0_reg0"),
  11233. (else_try),
  11234. (eq, ":option_index", 7),
  11235. (str_store_string, s0, "str_friendly_fire_damage_friend_ratio"),
  11236. (assign, reg0, ":option_value"),
  11237. (str_store_string, s0, "str_s0_reg0"),
  11238. (else_try),
  11239. (eq, ":option_index", 8),
  11240. (str_store_string, s0, "str_spectator_camera"),
  11241. (try_begin),
  11242. (eq, ":option_value", 0),
  11243. (str_store_string, s1, "str_free"),
  11244. (else_try),
  11245. (eq, ":option_value", 1),
  11246. (str_store_string, s1, "str_stick_to_any_player"),
  11247. (else_try),
  11248. (eq, ":option_value", 2),
  11249. (str_store_string, s1, "str_stick_to_team_members"),
  11250. (else_try),
  11251. (str_store_string, s1, "str_stick_to_team_members_view"),
  11252. (try_end),
  11253. (str_store_string, s0, "str_s0_s1"),
  11254. (else_try),
  11255. (eq, ":option_index", 9),
  11256. (str_store_string, s0, "str_control_block_direction"),
  11257. (try_begin),
  11258. (eq, ":option_value", 0),
  11259. (str_store_string, s1, "str_automatic"),
  11260. (else_try),
  11261. (str_store_string, s1, "str_by_mouse_movement"),
  11262. (try_end),
  11263. (str_store_string, s0, "str_s0_s1"),
  11264. (else_try),
  11265. (eq, ":option_index", 10),
  11266. (str_store_string, s0, "str_combat_speed"),
  11267. (try_begin),
  11268. (eq, ":option_value", 0),
  11269. (str_store_string, s1, "str_combat_speed_0"),
  11270. (else_try),
  11271. (eq, ":option_value", 1),
  11272. (str_store_string, s1, "str_combat_speed_1"),
  11273. (else_try),
  11274. (eq, ":option_value", 2),
  11275. (str_store_string, s1, "str_combat_speed_2"),
  11276. (else_try),
  11277. (eq, ":option_value", 3),
  11278. (str_store_string, s1, "str_combat_speed_3"),
  11279. (else_try),
  11280. (str_store_string, s1, "str_combat_speed_4"),
  11281. (try_end),
  11282. (str_store_string, s0, "str_s0_s1"),
  11283. (else_try),
  11284. (try_begin),
  11285. (eq, ":mission_template_id", "mt_multiplayer_hq"),
  11286. (val_add, ":option_index", 1), #max game time
  11287. (try_end),
  11288. (eq, ":option_index", 11),
  11289. (str_store_string, s0, "str_map_time_limit"),
  11290. (assign, reg0, ":option_value"),
  11291. (str_store_string, s0, "str_s0_reg0"),
  11292. (else_try),
  11293. (try_begin),
  11294. (neq, ":mission_template_id", "mt_multiplayer_bt"),
  11295. (neq, ":mission_template_id", "mt_multiplayer_fd"),
  11296. (neq, ":mission_template_id", "mt_multiplayer_sg"),
  11297. (val_add, ":option_index", 1), #max round time
  11298. (try_end),
  11299. (eq, ":option_index", 12),
  11300. (str_store_string, s0, "str_round_time_limit"),
  11301. (assign, reg0, ":option_value"),
  11302. (str_store_string, s0, "str_s0_reg0"),
  11303. (else_try),
  11304. (try_begin),
  11305. (neq, ":mission_template_id", "mt_multiplayer_bt"),
  11306. (neq, ":mission_template_id", "mt_multiplayer_fd"),
  11307. (val_add, ":option_index", 1), #respawn as bot
  11308. (try_end),
  11309. (eq, ":option_index", 13),
  11310. (str_store_string, s0, "str_players_take_control_of_a_bot_after_death"),
  11311. (try_begin),
  11312. (eq, ":option_value", 0),
  11313. (str_store_string, s1, "str_no_wo_dot"),
  11314. (else_try),
  11315. (str_store_string, s1, "str_yes_wo_dot"),
  11316. (try_end),
  11317. (str_store_string, s0, "str_s0_s1"),
  11318. (else_try),
  11319. (try_begin),
  11320. (neq, ":mission_template_id", "mt_multiplayer_sg"),
  11321. (val_add, ":option_index", 1), #respawn limit
  11322. (try_end),
  11323. (eq, ":option_index", 14),
  11324. (str_store_string, s0, "str_defender_spawn_count_limit"),
  11325. (try_begin),
  11326. (eq, ":option_value", 0),
  11327. (str_store_string, s1, "str_unlimited"),
  11328. (else_try),
  11329. (assign, reg1, ":option_value"),
  11330. (str_store_string, s1, "str_reg1"),
  11331. (try_end),
  11332. (str_store_string, s0, "str_s0_s1"),
  11333. (else_try),
  11334. (eq, ":option_index", 15),
  11335. (str_store_string, s0, "str_team_points_limit"),
  11336. (assign, reg0, ":option_value"),
  11337. (str_store_string, s0, "str_s0_reg0"),
  11338. (else_try),
  11339. (try_begin),
  11340. (neq, ":mission_template_id", "mt_multiplayer_hq"),
  11341. (val_add, ":option_index", 1), #point gained from flags
  11342. (try_end),
  11343. (eq, ":option_index", 16),
  11344. (str_store_string, s0, "str_point_gained_from_flags"),
  11345. (assign, reg0, ":option_value"),
  11346. (str_store_string, s0, "str_s0_reg0"),
  11347. (else_try),
  11348. (try_begin),
  11349. (neq, ":mission_template_id", "mt_multiplayer_cf"),
  11350. (val_add, ":option_index", 1), #point gained from capturing flag
  11351. (try_end),
  11352. (eq, ":option_index", 17),
  11353. (str_store_string, s0, "str_point_gained_from_capturing_flag"),
  11354. (assign, reg0, ":option_value"),
  11355. (str_store_string, s0, "str_s0_reg0"),
  11356. (else_try),
  11357. (eq, ":option_index", 18),
  11358. (str_store_string, s0, "str_respawn_period"),
  11359. (assign, reg0, ":option_value"),
  11360. (str_store_string, s0, "str_s0_reg0"),
  11361. (else_try),
  11362. (eq, ":option_index", 19),
  11363. (str_store_string, s0, "str_initial_gold_multiplier"),
  11364. (assign, reg0, ":option_value"),
  11365. (str_store_string, s0, "str_s0_reg0"),
  11366. (else_try),
  11367. (eq, ":option_index", 20),
  11368. (str_store_string, s0, "str_battle_earnings_multiplier"),
  11369. (assign, reg0, ":option_value"),
  11370. (str_store_string, s0, "str_s0_reg0"),
  11371. (else_try),
  11372. (try_begin),
  11373. (neq, ":mission_template_id", "mt_multiplayer_bt"),
  11374. (neq, ":mission_template_id", "mt_multiplayer_fd"),
  11375. (neq, ":mission_template_id", "mt_multiplayer_sg"),
  11376. (val_add, ":option_index", 1),
  11377. (try_end),
  11378. (eq, ":option_index", 21),
  11379. (str_store_string, s0, "str_round_earnings_multiplier"),
  11380. (assign, reg0, ":option_value"),
  11381. (str_store_string, s0, "str_s0_reg0"),
  11382. (try_end),
  11383. ]),
  11384.  
  11385. # script_cf_multiplayer_team_is_available
  11386. # Input: arg1 = player_no, arg2 = team_no
  11387. # Output: none, true or false
  11388. ("cf_multiplayer_team_is_available",
  11389. [
  11390. (store_script_param, ":player_no", 1),
  11391. (store_script_param, ":team_no", 2),
  11392. (assign, ":continue_change_team", 1),
  11393. (try_begin),
  11394. #INVASION MODE START
  11395. # second faction is always disabled in captain coop
  11396. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  11397. (eq, ":team_no", 1),
  11398. (assign, ":continue_change_team", 0),
  11399. (else_try),
  11400. # first faction is always available in captain coop
  11401. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  11402. (eq, ":team_no", 0),
  11403. (assign, ":continue_change_team", 1),
  11404. (else_try),
  11405. #INVASION MODE END
  11406. (neq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
  11407. (neq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  11408. (is_between, ":team_no", 0, multi_team_spectator),
  11409. (neg|teams_are_enemies, ":team_no", ":team_no"), #checking if it is a deathmatch or not
  11410. (assign, ":continue_change_team", 0),
  11411. #counting number of players for team balance checks
  11412. (assign, ":number_of_players_at_team_1", 0),
  11413. (assign, ":number_of_players_at_team_2", 0),
  11414. (get_max_players, ":num_players"),
  11415. (try_for_range, ":cur_player", 0, ":num_players"),
  11416. (player_is_active, ":cur_player"),
  11417. (neq, ":cur_player", ":player_no"),
  11418. (player_get_team_no, ":player_team", ":cur_player"),
  11419. (try_begin),
  11420. (eq, ":player_team", 0),
  11421. (val_add, ":number_of_players_at_team_1", 1),
  11422. (else_try),
  11423. (eq, ":player_team", 1),
  11424. (val_add, ":number_of_players_at_team_2", 1),
  11425. (try_end),
  11426. (try_end),
  11427. (store_sub, ":difference_of_number_of_players", ":number_of_players_at_team_1", ":number_of_players_at_team_2"),
  11428.  
  11429. (try_begin),
  11430. (ge, ":difference_of_number_of_players", 0),
  11431. (val_add, ":difference_of_number_of_players", 1),
  11432. (else_try),
  11433. (val_add, ":difference_of_number_of_players", -1),
  11434. (try_end),
  11435.  
  11436. (try_begin),
  11437. (eq, ":team_no", 0),
  11438. (lt, ":difference_of_number_of_players", "$g_multiplayer_auto_team_balance_limit"),
  11439. (assign, ":continue_change_team", 1),
  11440. (else_try),
  11441. (eq, ":team_no", 1),
  11442. (store_mul, ":checked_value", "$g_multiplayer_auto_team_balance_limit", -1),
  11443. (gt, ":difference_of_number_of_players", ":checked_value"),
  11444. (assign, ":continue_change_team", 1),
  11445. (try_end),
  11446. (try_end),
  11447. (eq, ":continue_change_team", 1),
  11448. ]),
  11449.  
  11450. # script_find_number_of_agents_constant
  11451. # Input: none
  11452. # Output: reg0 = 100xconstant (100..500)
  11453. ("find_number_of_agents_constant",
  11454. [
  11455. (assign, ":num_dead_or_alive_agents", 0),
  11456.  
  11457. (try_for_agents, ":cur_agent"),
  11458. (agent_is_human, ":cur_agent"),
  11459. (val_add, ":num_dead_or_alive_agents", 1),
  11460. (try_end),
  11461.  
  11462. (try_begin),
  11463. (le, ":num_dead_or_alive_agents", 2), #2
  11464. (assign, reg0, 100),
  11465. (else_try),
  11466. (le, ":num_dead_or_alive_agents", 4), #2+2
  11467. (assign, reg0, 140),
  11468. (else_try),
  11469. (le, ":num_dead_or_alive_agents", 7), #2+2+3
  11470. (assign, reg0, 180),
  11471. (else_try),
  11472. (le, ":num_dead_or_alive_agents", 11), #2+2+3+4
  11473. (assign, reg0, 220),
  11474. (else_try),
  11475. (le, ":num_dead_or_alive_agents", 17), #2+2+3+4+6
  11476. (assign, reg0, 260),
  11477. (else_try),
  11478. (le, ":num_dead_or_alive_agents", 25), #2+2+3+4+6+8
  11479. (assign, reg0, 300),
  11480. (else_try),
  11481. (le, ":num_dead_or_alive_agents", 36), #2+2+3+4+6+8+11
  11482. (assign, reg0, 340),
  11483. (else_try),
  11484. (le, ":num_dead_or_alive_agents", 50), #2+2+3+4+6+8+11+14
  11485. (assign, reg0, 380),
  11486. (else_try),
  11487. (le, ":num_dead_or_alive_agents", 68), #2+2+3+4+6+8+11+14+18
  11488. (assign, reg0, 420),
  11489. (else_try),
  11490. (le, ":num_dead_or_alive_agents", 91), #2+2+3+4+6+8+11+14+18+23
  11491. (assign, reg0, 460),
  11492. (else_try),
  11493. (assign, reg0, 500),
  11494. (try_end),
  11495. ]),
  11496.  
  11497. # script_game_multiplayer_event_duel_offered
  11498. # Input: arg1 = agent_no
  11499. # Output: none
  11500. ("game_multiplayer_event_duel_offered",
  11501. [
  11502. (store_script_param, ":agent_no", 1),
  11503. (get_player_agent_no, ":player_agent_no"),
  11504. (try_begin),
  11505. (agent_is_active, ":player_agent_no"),
  11506. (this_or_next|agent_slot_eq, ":player_agent_no", slot_agent_in_duel_with, -1),
  11507. (agent_check_offer_from_agent, ":player_agent_no", ":agent_no"),
  11508. (neg|agent_slot_eq, ":player_agent_no", slot_agent_in_duel_with, ":agent_no"), #don't allow spamming duel offers during countdown
  11509. (multiplayer_send_int_to_server, multiplayer_event_offer_duel, ":agent_no"),
  11510. (agent_get_player_id, ":player_no", ":agent_no"),
  11511. (try_begin),
  11512. (player_is_active, ":player_no"),
  11513. (str_store_player_username, s0, ":player_no"),
  11514. (else_try),
  11515. (str_store_agent_name, s0, ":agent_no"),
  11516. (try_end),
  11517. (display_message, "str_a_duel_request_is_sent_to_s0"),
  11518. (try_end),
  11519. ]),
  11520.  
  11521. # script_game_get_multiplayer_game_type_enum
  11522. # Input: none
  11523. # Output: reg0:first type, reg1:type count
  11524. ("game_get_multiplayer_game_type_enum",
  11525. [
  11526. (assign, reg0, multiplayer_game_type_deathmatch),
  11527. (assign, reg1, multiplayer_num_game_types),
  11528. ]),
  11529.  
  11530. # script_game_multiplayer_get_game_type_mission_template
  11531. # Input: arg1 = game_type
  11532. # Output: mission_template
  11533. ("game_multiplayer_get_game_type_mission_template",
  11534. [
  11535. (assign, ":selected_mt", -1),
  11536. (store_script_param, ":game_type", 1),
  11537. (try_begin),
  11538. (eq, ":game_type", multiplayer_game_type_deathmatch),
  11539. (assign, ":selected_mt", "mt_multiplayer_dm"),
  11540. (else_try),
  11541. (eq, ":game_type", multiplayer_game_type_team_deathmatch),
  11542. (assign, ":selected_mt", "mt_multiplayer_tdm"),
  11543. (else_try),
  11544. (eq, ":game_type", multiplayer_game_type_battle),
  11545. (assign, ":selected_mt", "mt_multiplayer_bt"),
  11546. (else_try),
  11547. (eq, ":game_type", multiplayer_game_type_destroy),
  11548. (assign, ":selected_mt", "mt_multiplayer_fd"),
  11549. (else_try),
  11550. (eq, ":game_type", multiplayer_game_type_capture_the_flag),
  11551. (assign, ":selected_mt", "mt_multiplayer_cf"),
  11552. (else_try),
  11553. (eq, ":game_type", multiplayer_game_type_headquarters),
  11554. (assign, ":selected_mt", "mt_multiplayer_hq"),
  11555. (else_try),
  11556. (eq, ":game_type", multiplayer_game_type_siege),
  11557. (assign, ":selected_mt", "mt_multiplayer_sg"),
  11558. (else_try),
  11559. (eq, ":game_type", multiplayer_game_type_duel),
  11560. (assign, ":selected_mt", "mt_multiplayer_duel"),
  11561. #INVASION MODE START
  11562. (else_try),
  11563. (eq, ":game_type", multiplayer_game_type_captain_coop),
  11564. (assign, ":selected_mt", "mt_multiplayer_ccoop"),
  11565. #INVASION MODE END
  11566. (try_end),
  11567. (assign, reg0, ":selected_mt"),
  11568. ]),
  11569.  
  11570. # script_multiplayer_get_mission_template_game_type
  11571. # Input: arg1 = mission_template_no
  11572. # Output: game_type
  11573. ("multiplayer_get_mission_template_game_type",
  11574. [
  11575. (store_script_param, ":mission_template_no", 1),
  11576. (assign, ":game_type", -1),
  11577. (try_begin),
  11578. (eq, ":mission_template_no", "mt_multiplayer_dm"),
  11579. (assign, ":game_type", multiplayer_game_type_deathmatch),
  11580. (else_try),
  11581. (eq, ":mission_template_no", "mt_multiplayer_tdm"),
  11582. (assign, ":game_type", multiplayer_game_type_team_deathmatch),
  11583. (else_try),
  11584. (eq, ":mission_template_no", "mt_multiplayer_bt"),
  11585. (assign, ":game_type", multiplayer_game_type_battle),
  11586. (else_try),
  11587. (eq, ":mission_template_no", "mt_multiplayer_fd"),
  11588. (assign, ":game_type", multiplayer_game_type_destroy),
  11589. (else_try),
  11590. (eq, ":mission_template_no", "mt_multiplayer_cf"),
  11591. (assign, ":game_type", multiplayer_game_type_capture_the_flag),
  11592. (else_try),
  11593. (eq, ":mission_template_no", "mt_multiplayer_hq"),
  11594. (assign, ":game_type", multiplayer_game_type_headquarters),
  11595. (else_try),
  11596. (eq, ":mission_template_no", "mt_multiplayer_sg"),
  11597. (assign, ":game_type", multiplayer_game_type_siege),
  11598. (else_try),
  11599. (eq, ":mission_template_no", "mt_multiplayer_duel"),
  11600. (assign, ":game_type", multiplayer_game_type_duel),
  11601. #INVASION MODE START
  11602. (else_try),
  11603. (eq, ":mission_template_no", "mt_multiplayer_ccoop"),
  11604. (assign, ":game_type", multiplayer_game_type_captain_coop),
  11605. #INVASION MODE END
  11606. (try_end),
  11607. (assign, reg0, ":game_type"),
  11608. ]),
  11609.  
  11610.  
  11611. # script_multiplayer_fill_available_factions_combo_button
  11612. # Input: arg1 = overlay_id, arg2 = selected_faction_no, arg3 = opposite_team_selected_faction_no
  11613. # Output: none
  11614. ("multiplayer_fill_available_factions_combo_button",
  11615. [
  11616. (store_script_param, ":overlay_id", 1),
  11617. (store_script_param, ":selected_faction_no", 2),
  11618. ## (store_script_param, ":opposite_team_selected_faction_no", 3),
  11619. ## (try_for_range, ":cur_faction", "fac_kingdom_1", "fac_kingdoms_end"),
  11620. ## (try_begin),
  11621. ## (eq, ":opposite_team_selected_faction_no", ":cur_faction"),
  11622. ## (try_begin),
  11623. ## (gt, ":selected_faction_no", ":opposite_team_selected_faction_no"),
  11624. ## (val_sub, ":selected_faction_no", 1),
  11625. ## (try_end),
  11626. ## (else_try),
  11627. ## (str_store_faction_name, s0, ":cur_faction"),
  11628. ## (overlay_add_item, ":overlay_id", s0),
  11629. ## (try_end),
  11630. ## (try_end),
  11631. ## (val_sub, ":selected_faction_no", "fac_kingdom_1"),
  11632. ## (overlay_set_val, ":overlay_id", ":selected_faction_no"),
  11633. (try_for_range, ":cur_faction", npc_kingdoms_begin, npc_kingdoms_end),
  11634. (str_store_faction_name, s0, ":cur_faction"),
  11635. (overlay_add_item, ":overlay_id", s0),
  11636. (try_end),
  11637. #INVASION MODE START
  11638. (try_begin),
  11639. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  11640. (eq, ":overlay_id", "$g_presentation_obj_admin_panel_12"),
  11641. (str_store_faction_name, s0, "fac_outlaws"),
  11642. (overlay_add_item, ":overlay_id", s0),
  11643. (str_store_faction_name, s0, "fac_ccoop_all_stars"),
  11644. (overlay_add_item, ":overlay_id", s0),
  11645. (try_begin),
  11646. (eq, ":selected_faction_no", "fac_outlaws"),
  11647. (overlay_set_val, ":overlay_id", 6),
  11648. (else_try),
  11649. (eq, ":selected_faction_no", "fac_ccoop_all_stars"),
  11650. (overlay_set_val, ":overlay_id", 7),
  11651. (else_try),
  11652. (val_sub, ":selected_faction_no", "fac_kingdom_1"),
  11653. (overlay_set_val, ":overlay_id", ":selected_faction_no"),
  11654. (try_end),
  11655. (else_try),
  11656. (try_begin),
  11657. (gt, ":selected_faction_no", kingdoms_end),
  11658. (overlay_set_val, ":overlay_id", 1),
  11659. (else_try),
  11660. (val_sub, ":selected_faction_no", "fac_kingdom_1"),
  11661. (overlay_set_val, ":overlay_id", ":selected_faction_no"),
  11662. (try_end),
  11663. (try_end),
  11664. #INVASION MODE END
  11665. ]),
  11666.  
  11667.  
  11668. # script_multiplayer_get_troop_class
  11669. # Input: arg1 = troop_no
  11670. # Output: reg0: troop_class
  11671. ("multiplayer_get_troop_class",
  11672. [
  11673. (store_script_param_1, ":troop_no"),
  11674. (assign, ":troop_class", multi_troop_class_other),
  11675. (try_begin),
  11676. (this_or_next|eq, ":troop_no", "trp_vaegir_archer_multiplayer"),
  11677. (this_or_next|eq, ":troop_no", "trp_nord_archer_multiplayer"),
  11678. (eq, ":troop_no", "trp_sarranid_archer_multiplayer"),
  11679. (assign, ":troop_class", multi_troop_class_archer),
  11680. (else_try),
  11681. (this_or_next|eq, ":troop_no", "trp_swadian_man_at_arms_multiplayer"),
  11682. (this_or_next|eq, ":troop_no", "trp_nord_scout_multiplayer"),
  11683. (this_or_next|eq, ":troop_no", "trp_rhodok_horseman_multiplayer"),
  11684. (this_or_next|eq, ":troop_no", "trp_sarranid_mamluke_multiplayer"),
  11685. (eq, ":troop_no", "trp_vaegir_horseman_multiplayer"),
  11686. (assign, ":troop_class", multi_troop_class_cavalry),
  11687. (else_try),
  11688. (eq, ":troop_no", "trp_khergit_veteran_horse_archer_multiplayer"),
  11689. (assign, ":troop_class", multi_troop_class_mounted_archer),
  11690. # (else_try),
  11691. # (eq, ":troop_no", "trp_swadian_mounted_crossbowman_multiplayer"),
  11692. # (assign, ":troop_class", multi_troop_class_mounted_crossbowman),
  11693. (else_try),
  11694. (this_or_next|eq, ":troop_no", "trp_swadian_crossbowman_multiplayer"),
  11695. (eq, ":troop_no", "trp_rhodok_veteran_crossbowman_multiplayer"),
  11696. (assign, ":troop_class", multi_troop_class_crossbowman),
  11697. (else_try),
  11698. (this_or_next|eq, ":troop_no", "trp_swadian_infantry_multiplayer"),
  11699. (this_or_next|eq, ":troop_no", "trp_sarranid_footman_multiplayer"),
  11700. (eq, ":troop_no", "trp_nord_veteran_multiplayer"),
  11701. (assign, ":troop_class", multi_troop_class_infantry),
  11702. (else_try),
  11703. (eq, ":troop_no", "trp_vaegir_spearman_multiplayer"),
  11704. (assign, ":troop_class", multi_troop_class_spearman),
  11705. (try_end),
  11706. (assign, reg0, ":troop_class"),
  11707. ]),
  11708.  
  11709. #script_multiplayer_clear_player_selected_items
  11710. # Input: arg1 = player_no
  11711. # Output: none
  11712. ("multiplayer_clear_player_selected_items",
  11713. [
  11714. (store_script_param, ":player_no", 1),
  11715. (try_for_range, ":slot_no", slot_player_selected_item_indices_begin, slot_player_selected_item_indices_end),
  11716. (player_set_slot, ":player_no", ":slot_no", -1),
  11717. (try_end),
  11718. ]),
  11719.  
  11720.  
  11721. #script_multiplayer_init_player_slots
  11722. # Input: arg1 = player_no
  11723. # Output: none
  11724. ("multiplayer_init_player_slots",
  11725. [
  11726. (store_script_param, ":player_no", 1),
  11727. (call_script, "script_multiplayer_clear_player_selected_items", ":player_no"),
  11728. (player_set_slot, ":player_no", slot_player_spawned_this_round, 0),
  11729. (player_set_slot, ":player_no", slot_player_last_rounds_used_item_earnings, 0),
  11730. (player_set_slot, ":player_no", slot_player_poll_disabled_until_time, 0),
  11731.  
  11732. (player_set_slot, ":player_no", slot_player_bot_type_1_wanted, 0),
  11733. (player_set_slot, ":player_no", slot_player_bot_type_2_wanted, 0),
  11734. (player_set_slot, ":player_no", slot_player_bot_type_3_wanted, 0),
  11735. (player_set_slot, ":player_no", slot_player_bot_type_4_wanted, 0),
  11736. ]),
  11737.  
  11738. #script_multiplayer_initialize_belfry_wheel_rotations
  11739. # Input: none
  11740. # Output: none
  11741. ("multiplayer_initialize_belfry_wheel_rotations",
  11742. [
  11743. ## (scene_prop_get_num_instances, ":num_belfries", "spr_belfry_a"),
  11744. ## (try_for_range, ":belfry_no", 0, ":num_belfries"),
  11745. ## (store_mul, ":wheel_no", ":belfry_no", 3),
  11746. ## (scene_prop_get_instance, ":belfry_wheel_1_scene_prop_id", "spr_belfry_wheel", ":wheel_no"),
  11747. ## (prop_instance_initialize_rotation_angles, ":belfry_wheel_1_scene_prop_id"),
  11748. ## #belfry wheel_2
  11749. ## (val_add, ":wheel_no", 1),
  11750. ## (scene_prop_get_instance, ":belfry_wheel_2_scene_prop_id", "spr_belfry_wheel", ":wheel_no"),
  11751. ## (prop_instance_initialize_rotation_angles, ":belfry_wheel_2_scene_prop_id"),
  11752. ## #belfry wheel_3
  11753. ## (val_add, ":wheel_no", 1),
  11754. ## (scene_prop_get_instance, ":belfry_wheel_3_scene_prop_id", "spr_belfry_wheel", ":wheel_no"),
  11755. ## (prop_instance_initialize_rotation_angles, ":belfry_wheel_3_scene_prop_id"),
  11756. ## (try_end),
  11757. ##
  11758. ## (scene_prop_get_num_instances, ":num_belfries_a", "spr_belfry_a"),
  11759. ##
  11760. ## (scene_prop_get_num_instances, ":num_belfries", "spr_belfry_b"),
  11761. ## (try_for_range, ":belfry_no", 0, ":num_belfries"),
  11762. ## (store_add, ":wheel_no_plus_num_belfries_a", ":wheel_no", ":num_belfries_a"),
  11763. ## (store_mul, ":wheel_no_plus_num_belfries_a", ":belfry_no", 3),
  11764. ## (scene_prop_get_instance, ":belfry_wheel_1_scene_prop_id", "spr_belfry_wheel", ":wheel_no_plus_num_belfries_a"),
  11765. ## (prop_instance_initialize_rotation_angles, ":belfry_wheel_1_scene_prop_id"),
  11766. ## #belfry wheel_2
  11767. ## (val_add, ":wheel_no_plus_num_belfries_a", 1),
  11768. ## (scene_prop_get_instance, ":belfry_wheel_2_scene_prop_id", "spr_belfry_wheel", ":wheel_no_plus_num_belfries_a"),
  11769. ## (prop_instance_initialize_rotation_angles, ":belfry_wheel_2_scene_prop_id"),
  11770. ## #belfry wheel_3
  11771. ## (val_add, ":wheel_no_plus_num_belfries_a", 1),
  11772. ## (scene_prop_get_instance, ":belfry_wheel_3_scene_prop_id", "spr_belfry_wheel", ":wheel_no_plus_num_belfries_a"),
  11773. ## (prop_instance_initialize_rotation_angles, ":belfry_wheel_3_scene_prop_id"),
  11774. ## (try_end),
  11775.  
  11776. (scene_prop_get_num_instances, ":num_wheel", "spr_belfry_wheel"),
  11777. (try_for_range, ":wheel_no", 0, ":num_wheel"),
  11778. (scene_prop_get_instance, ":wheel_id", "spr_belfry_wheel", ":wheel_no"),
  11779. (prop_instance_initialize_rotation_angles, ":wheel_id"),
  11780. (try_end),
  11781.  
  11782. (scene_prop_get_num_instances, ":num_winch", "spr_winch"),
  11783. (try_for_range, ":winch_no", 0, ":num_winch"),
  11784. (scene_prop_get_instance, ":winch_id", "spr_winch", ":winch_no"),
  11785. (prop_instance_initialize_rotation_angles, ":winch_id"),
  11786. (try_end),
  11787.  
  11788. (scene_prop_get_num_instances, ":num_winch_b", "spr_winch_b"),
  11789. (try_for_range, ":winch_b_no", 0, ":num_winch_b"),
  11790. (scene_prop_get_instance, ":winch_b_id", "spr_winch_b", ":winch_b_no"),
  11791. (prop_instance_initialize_rotation_angles, ":winch_b_id"),
  11792. (try_end),
  11793. ]),
  11794.  
  11795. #script_send_open_close_information_of_object
  11796. # Input: arg1 = mission_object_id
  11797. # Output: none
  11798. ("send_open_close_information_of_object",
  11799. [
  11800. (store_script_param, ":player_no", 1),
  11801. (store_script_param, ":scene_prop_no", 2),
  11802.  
  11803. (scene_prop_get_num_instances, ":num_instances", ":scene_prop_no"),
  11804.  
  11805. (try_for_range, ":instance_no", 0, ":num_instances"),
  11806. (scene_prop_get_instance, ":instance_id", ":scene_prop_no", ":instance_no"),
  11807. (scene_prop_get_slot, ":opened_or_closed", ":instance_id", scene_prop_open_or_close_slot),
  11808. (try_begin),
  11809. (eq, ":opened_or_closed", 1),
  11810. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_set_scene_prop_open_or_close, ":instance_id"),
  11811. (try_end),
  11812. (try_end),
  11813. ]),
  11814.  
  11815. #script_multiplayer_send_initial_information
  11816. # Input: arg1 = player_no
  11817. # Output: none
  11818. ("multiplayer_send_initial_information",
  11819. [
  11820. (store_script_param, ":player_no", 1),
  11821.  
  11822. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 1, "$g_multiplayer_num_bots_team_1"),
  11823. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 2, "$g_multiplayer_num_bots_team_2"),
  11824. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_auto_team_balance_limit, "$g_multiplayer_auto_team_balance_limit"),
  11825. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_num_bots_voteable, "$g_multiplayer_num_bots_voteable"),
  11826. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_factions_voteable, "$g_multiplayer_factions_voteable"),
  11827. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_maps_voteable, "$g_multiplayer_maps_voteable"),
  11828. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_kick_voteable, "$g_multiplayer_kick_voteable"),
  11829. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ban_voteable, "$g_multiplayer_ban_voteable"),
  11830. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_allow_player_banners, "$g_multiplayer_allow_player_banners"),
  11831. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_force_default_armor, "$g_multiplayer_force_default_armor"),
  11832. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_disallow_ranged_weapons, "$g_multiplayer_disallow_ranged_weapons"),
  11833. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_respawn_period, "$g_multiplayer_respawn_period"),
  11834. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_round_max_seconds, "$g_multiplayer_round_max_seconds"),
  11835. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_game_type, "$g_multiplayer_game_type"),
  11836. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_player_respawn_as_bot, "$g_multiplayer_player_respawn_as_bot"),
  11837. #INVASION MODE START
  11838. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ccoop_difficulty, "$g_multiplayer_ccoop_difficulty"),
  11839. #INVASION MODE END
  11840.  
  11841. (store_mission_timer_a, ":mission_timer"),
  11842. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_server_mission_timer_while_player_joined, ":mission_timer"),
  11843.  
  11844. (try_begin),
  11845. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  11846. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_respawn_count, "$g_multiplayer_number_of_respawn_count"),
  11847. (try_end),
  11848.  
  11849. (try_for_agents, ":cur_agent"), #send if any agent is carrying any scene object
  11850. (agent_is_human, ":cur_agent"),
  11851. (agent_get_attached_scene_prop, ":attached_scene_prop", ":cur_agent"),
  11852. (ge, ":attached_scene_prop", 0),
  11853. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_set_attached_scene_prop, ":cur_agent", ":attached_scene_prop"),
  11854. (try_end),
  11855.  
  11856. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_siege_ladder_move_6m"),
  11857. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_siege_ladder_move_8m"),
  11858. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_siege_ladder_move_10m"),
  11859. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_siege_ladder_move_12m"),
  11860. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_siege_ladder_move_14m"),
  11861. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_winch_b"),
  11862. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_castle_e_sally_door_a"),
  11863. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_castle_f_sally_door_a"),
  11864. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_earth_sally_gate_left"),
  11865. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_earth_sally_gate_right"),
  11866. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_viking_keep_destroy_sally_door_left"),
  11867. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_viking_keep_destroy_sally_door_right"),
  11868. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_castle_f_door_a"),
  11869. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_door_destructible"),
  11870. (call_script, "script_send_open_close_information_of_object", ":player_no", "spr_castle_f_door_b"),
  11871.  
  11872. (try_begin),
  11873. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  11874. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_destroy),
  11875. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  11876.  
  11877. (store_mission_timer_a, ":current_time"),
  11878. (val_sub, ":current_time", "$g_round_start_time"),
  11879. (val_mul, ":current_time", -1),
  11880.  
  11881. (multiplayer_send_int_to_player, ":player_no", multiplayer_event_set_round_start_time, ":current_time"),
  11882. (else_try),
  11883. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  11884. #if game type is capture the flag send current flag situations to each player.
  11885. (team_get_slot, ":flag_situation_team_1", 0, slot_team_flag_situation),
  11886. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_set_team_flag_situation, 0, ":flag_situation_team_1"),
  11887. (team_get_slot, ":flag_situation_team_2", 1, slot_team_flag_situation),
  11888. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_set_team_flag_situation, 1, ":flag_situation_team_2"),
  11889. (else_try),
  11890. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters),
  11891. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  11892. #if game type is headquarters send number of agents placed around each pole's around to player.
  11893. (try_for_range, ":flag_no", 0, "$g_number_of_flags"),
  11894. (assign, ":number_of_agents_around_flag_team_1", 0),
  11895. (assign, ":number_of_agents_around_flag_team_2", 0),
  11896.  
  11897. (scene_prop_get_instance, ":pole_id", "spr_headquarters_pole_code_only", ":flag_no"),
  11898. (prop_instance_get_position, pos0, ":pole_id"), #pos0 holds pole position.
  11899.  
  11900. (try_for_agents, ":cur_agent"),
  11901. (agent_is_human, ":cur_agent"),
  11902. (agent_is_alive, ":cur_agent"),
  11903. (neg|agent_is_non_player, ":cur_agent"),
  11904. (agent_get_team, ":cur_agent_team", ":cur_agent"),
  11905. (agent_get_position, pos1, ":cur_agent"), #pos1 holds agent's position.
  11906. (get_sq_distance_between_positions, ":squared_dist", pos0, pos1),
  11907. (get_sq_distance_between_position_heights, ":squared_height_dist", pos0, pos1),
  11908. (val_add, ":squared_dist", ":squared_height_dist"),
  11909. (lt, ":squared_dist", multi_headquarters_max_distance_sq_to_raise_flags),
  11910. (try_begin),
  11911. (eq, ":cur_agent_team", 0),
  11912. (val_add, ":number_of_agents_around_flag_team_1", 1),
  11913. (else_try),
  11914. (eq, ":cur_agent_team", 1),
  11915. (val_add, ":number_of_agents_around_flag_team_2", 1),
  11916. (try_end),
  11917. (try_end),
  11918.  
  11919. (store_mul, ":current_owner_code", ":number_of_agents_around_flag_team_1", 100),
  11920. (val_add, ":current_owner_code", ":number_of_agents_around_flag_team_2"),
  11921. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_set_num_agents_around_flag, ":flag_no", ":current_owner_code"),
  11922. (try_end),
  11923.  
  11924. #if game type is headquarters send owners of each pole to player.
  11925. (assign, "$g_placing_initial_flags", 1),
  11926. (try_for_range, ":cur_flag", 0, "$g_number_of_flags"),
  11927. (store_add, ":cur_flag_slot", multi_data_flag_owner_begin, ":cur_flag"),
  11928. (troop_get_slot, ":cur_flag_owner", "trp_multiplayer_data", ":cur_flag_slot"),
  11929. (store_mul, ":cur_flag_owner_code", ":cur_flag_owner", 100),
  11930. (val_add, ":cur_flag_owner_code", ":cur_flag_owner"),
  11931. (val_add, ":cur_flag_owner_code", 1),
  11932. (val_mul, ":cur_flag_owner_code", -1),
  11933. (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_change_flag_owner, ":cur_flag", ":cur_flag_owner_code"),
  11934. (try_end),
  11935. (assign, "$g_placing_initial_flags", 0),
  11936. (try_end),
  11937.  
  11938. #(multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_set_day_time, "$g_round_day_time"),
  11939. ]),
  11940.  
  11941. #script_multiplayer_remove_headquarters_flags
  11942. # Input: none
  11943. # Output: none
  11944. ("multiplayer_remove_headquarters_flags",
  11945. [
  11946. (store_add, ":end_cond", "spr_headquarters_flag_gray", 1),
  11947. (try_for_range, ":headquarters_flag_no", "spr_headquarters_flag_red", ":end_cond"),
  11948. (replace_scene_props, ":headquarters_flag_no", "spr_empty"),
  11949. (try_end),
  11950. ]),
  11951.  
  11952. #script_multiplayer_remove_destroy_mod_targets
  11953. # Input: none
  11954. # Output: none
  11955. ("multiplayer_remove_destroy_mod_targets",
  11956. [
  11957. (replace_scene_props, "spr_catapult_destructible", "spr_empty"),
  11958. (replace_scene_props, "spr_trebuchet_destructible", "spr_empty"),
  11959. ]),
  11960.  
  11961. #script_multiplayer_init_mission_variables
  11962. ("multiplayer_init_mission_variables",
  11963. [
  11964. (assign, "$g_multiplayer_team_1_first_spawn", 1),
  11965. (assign, "$g_multiplayer_team_2_first_spawn", 1),
  11966. (assign, "$g_multiplayer_poll_running", 0),
  11967. ## (assign, "$g_multiplayer_show_poll_when_suitable", 0),
  11968. (assign, "$g_waiting_for_confirmation_to_terminate", 0),
  11969. (assign, "$g_confirmation_result", 0),
  11970. (assign, "$g_team_balance_next_round", 0),
  11971. (team_get_faction, "$g_multiplayer_team_1_faction", 0),
  11972. (team_get_faction, "$g_multiplayer_team_2_faction", 1),
  11973. (assign, "$g_multiplayer_next_team_1_faction", "$g_multiplayer_team_1_faction"),
  11974. (assign, "$g_multiplayer_next_team_2_faction", "$g_multiplayer_team_2_faction"),
  11975.  
  11976. (assign, "$g_multiplayer_bot_type_1_wanted", 0),
  11977. (assign, "$g_multiplayer_bot_type_2_wanted", 0),
  11978. (assign, "$g_multiplayer_bot_type_3_wanted", 0),
  11979. (assign, "$g_multiplayer_bot_type_4_wanted", 0),
  11980.  
  11981. (call_script, "script_music_set_situation_with_culture", mtf_sit_multiplayer_fight),
  11982. ]),
  11983.  
  11984. #script_multiplayer_event_mission_end
  11985. # Input: none
  11986. # Output: none
  11987. ("multiplayer_event_mission_end",
  11988. [
  11989. #EVERY_BREATH_YOU_TAKE achievement
  11990. (try_begin),
  11991. (multiplayer_get_my_player, ":my_player_no"),
  11992. (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
  11993. (player_get_kill_count, ":kill_count", ":my_player_no"),
  11994. (player_get_death_count, ":death_count", ":my_player_no"),
  11995. (gt, ":kill_count", ":death_count"),
  11996. (unlock_achievement, ACHIEVEMENT_EVERY_BREATH_YOU_TAKE),
  11997. (try_end),
  11998. #EVERY_BREATH_YOU_TAKE achievement end
  11999. ]),
  12000.  
  12001.  
  12002. #script_multiplayer_event_agent_killed_or_wounded
  12003. # Input: arg1 = dead_agent_no, arg2 = killer_agent_no
  12004. # Output: none
  12005. ("multiplayer_event_agent_killed_or_wounded",
  12006. [
  12007. (store_script_param, ":dead_agent_no", 1),
  12008. (store_script_param, ":killer_agent_no", 2),
  12009.  
  12010. (multiplayer_get_my_player, ":my_player_no"),
  12011. (try_begin),
  12012. #INVASION MODE START
  12013. #MCA: ccoop do not show respawn timer
  12014. (neq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  12015. (player_get_agent_id, ":my_player_agent", ":my_player_no"),
  12016. (neq, ":my_player_agent",-1),
  12017. (eq, ":my_player_agent", ":dead_agent_no"),
  12018. (store_mission_timer_a, "$g_multiplayer_respawn_start_time"),
  12019. (try_end),
  12020.  
  12021. (try_begin),
  12022. #MCA: ccoop do not show respawn timer
  12023. (neq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  12024. (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
  12025. (player_get_agent_id, ":player_agent", ":my_player_no"),
  12026. (eq, ":dead_agent_no", ":player_agent"),
  12027.  
  12028. (assign, ":show_respawn_counter", 0),
  12029. (try_begin),
  12030. (neq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  12031. (assign, ":show_respawn_counter", 1),
  12032. (else_try),
  12033. (eq, "$g_multiplayer_player_respawn_as_bot", 1),
  12034. (player_get_team_no, ":my_player_team", ":my_player_no"),
  12035. (assign, ":is_found", 0),
  12036. (try_for_agents, ":cur_agent"),
  12037. (eq, ":is_found", 0),
  12038. (agent_is_alive, ":cur_agent"),
  12039. (agent_is_human, ":cur_agent"),
  12040. (agent_is_non_player, ":cur_agent"),
  12041. (agent_get_team ,":cur_team", ":cur_agent"),
  12042. (eq, ":cur_team", ":my_player_team"),
  12043. (assign, ":is_found", 1),
  12044. (try_end),
  12045. (eq, ":is_found", 1),
  12046. (assign, ":show_respawn_counter", 1),
  12047. (try_end),
  12048.  
  12049. (try_begin),
  12050. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  12051. (gt, "$g_multiplayer_number_of_respawn_count", 0),
  12052.  
  12053. (ge, "$g_my_spawn_count", "$g_multiplayer_number_of_respawn_count"),
  12054.  
  12055. (multiplayer_get_my_player, ":my_player_no"),
  12056. (player_get_team_no, ":my_player_team", ":my_player_no"),
  12057.  
  12058. (this_or_next|eq, ":my_player_team", 0),
  12059. (ge, "$g_my_spawn_count", 999),
  12060.  
  12061. (assign, "$g_show_no_more_respawns_remained", 1),
  12062. (else_try),
  12063. (assign, "$g_show_no_more_respawns_remained", 0),
  12064. (try_end),
  12065.  
  12066. (eq, ":show_respawn_counter", 1),
  12067.  
  12068. (start_presentation, "prsnt_multiplayer_respawn_time_counter"),
  12069. (try_end),
  12070.  
  12071. (try_begin),
  12072. #INVASION MODE END
  12073. (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
  12074. (player_get_agent_id, ":my_player_agent", ":my_player_no"),
  12075. (ge, ":my_player_agent", 0),
  12076. (try_begin),
  12077. (eq, ":my_player_agent", ":dead_agent_no"),
  12078. (store_mission_timer_a, "$g_multiplayer_respawn_start_time"),
  12079. (try_end),
  12080. (try_begin),
  12081. (eq, ":my_player_agent", ":killer_agent_no"),
  12082. (neq, ":my_player_agent", ":dead_agent_no"),
  12083. (agent_is_human, ":dead_agent_no"),
  12084. (agent_is_alive, ":my_player_agent"),
  12085. (neg|agent_is_ally, ":dead_agent_no"),
  12086. (agent_get_horse, ":my_horse_agent", ":my_player_agent"),
  12087. (agent_get_wielded_item, ":my_wielded_item", ":my_player_agent", 0),
  12088. (assign, ":my_item_class", -1),
  12089. (try_begin),
  12090. (ge, ":my_wielded_item", 0),
  12091. (item_get_slot, ":my_item_class", ":my_wielded_item", slot_item_multiplayer_item_class),
  12092. (try_end),
  12093. #SPOIL_THE_CHARGE achievement
  12094. (try_begin),
  12095. (lt, ":my_horse_agent", 0),
  12096. (agent_get_horse, ":dead_agent_horse_agent", ":dead_agent_no"),
  12097. (ge, ":dead_agent_horse_agent", 0),
  12098. (get_achievement_stat, ":achievement_stat", ACHIEVEMENT_SPOIL_THE_CHARGE, 0),
  12099. (lt, ":achievement_stat", 50),
  12100. (val_add, ":achievement_stat", 1),
  12101. (set_achievement_stat, ACHIEVEMENT_SPOIL_THE_CHARGE, 0, ":achievement_stat"),
  12102. (ge, ":achievement_stat", 50),
  12103. (unlock_achievement, ACHIEVEMENT_SPOIL_THE_CHARGE),
  12104. (try_end),
  12105. #SPOIL_THE_CHARGE achievement end
  12106. #HARASSING_HORSEMAN achievement
  12107. (try_begin),
  12108. (ge, ":my_horse_agent", 0),
  12109. (this_or_next|eq, ":my_item_class", multi_item_class_type_bow),
  12110. (this_or_next|eq, ":my_item_class", multi_item_class_type_crossbow),
  12111. (this_or_next|eq, ":my_item_class", multi_item_class_type_throwing),
  12112. (eq, ":my_item_class", multi_item_class_type_throwing_axe),
  12113. (get_achievement_stat, ":achievement_stat", ACHIEVEMENT_HARASSING_HORSEMAN, 0),
  12114. (lt, ":achievement_stat", 100),
  12115. (val_add, ":achievement_stat", 1),
  12116. (set_achievement_stat, ACHIEVEMENT_HARASSING_HORSEMAN, 0, ":achievement_stat"),
  12117. (ge, ":achievement_stat", 100),
  12118. (unlock_achievement, ACHIEVEMENT_HARASSING_HORSEMAN),
  12119. (try_end),
  12120. #HARASSING_HORSEMAN achievement end
  12121. #THROWING_STAR achievement
  12122. (try_begin),
  12123. (this_or_next|eq, ":my_item_class", multi_item_class_type_throwing),
  12124. (eq, ":my_item_class", multi_item_class_type_throwing_axe),
  12125. (get_achievement_stat, ":achievement_stat", ACHIEVEMENT_THROWING_STAR, 0),
  12126. (lt, ":achievement_stat", 25),
  12127. (val_add, ":achievement_stat", 1),
  12128. (set_achievement_stat, ACHIEVEMENT_THROWING_STAR, 0, ":achievement_stat"),
  12129. (ge, ":achievement_stat", 25),
  12130. (unlock_achievement, ACHIEVEMENT_THROWING_STAR),
  12131. (try_end),
  12132. #THROWING_STAR achievement end
  12133. #SHISH_KEBAB achievement
  12134. (try_begin),
  12135. (ge, ":my_horse_agent", 0),
  12136. (eq, ":my_item_class", multi_item_class_type_lance),
  12137. (get_achievement_stat, ":achievement_stat", ACHIEVEMENT_SHISH_KEBAB, 0),
  12138. (lt, ":achievement_stat", 25),
  12139. (val_add, ":achievement_stat", 1),
  12140. (set_achievement_stat, ACHIEVEMENT_SHISH_KEBAB, 0, ":achievement_stat"),
  12141. (ge, ":achievement_stat", 25),
  12142. (unlock_achievement, ACHIEVEMENT_SHISH_KEBAB),
  12143. (try_end),
  12144. #SHISH_KEBAB achievement end
  12145. #CHOPPY_CHOP_CHOP achievement
  12146. (try_begin),
  12147. (this_or_next|eq, ":my_item_class", multi_item_class_type_sword),
  12148. (this_or_next|eq, ":my_item_class", multi_item_class_type_axe),
  12149. (this_or_next|eq, ":my_item_class", multi_item_class_type_cleavers),
  12150. (this_or_next|eq, ":my_item_class", multi_item_class_type_two_handed_sword),
  12151. (this_or_next|eq, ":my_item_class", multi_item_class_type_two_handed_axe),
  12152. (this_or_next|eq, ":my_wielded_item", "itm_sarranid_axe_a"), #sarranid item exception
  12153. (eq, ":my_wielded_item", "itm_sarranid_axe_b"), #sarranid item exception
  12154. (neq, ":my_wielded_item", "itm_sarranid_two_handed_mace_1"), #sarranid item exception
  12155. (get_achievement_stat, ":achievement_stat", ACHIEVEMENT_CHOPPY_CHOP_CHOP, 0),
  12156. (lt, ":achievement_stat", 50),
  12157. (val_add, ":achievement_stat", 1),
  12158. (set_achievement_stat, ACHIEVEMENT_CHOPPY_CHOP_CHOP, 0, ":achievement_stat"),
  12159. (ge, ":achievement_stat", 50),
  12160. (unlock_achievement, ACHIEVEMENT_CHOPPY_CHOP_CHOP),
  12161. (try_end),
  12162. #CHOPPY_CHOP_CHOP achievement end
  12163. #MACE_IN_YER_FACE achievement
  12164. (try_begin),
  12165. (this_or_next|eq, ":my_item_class", multi_item_class_type_blunt),
  12166. (eq, ":my_wielded_item", "itm_sarranid_two_handed_mace_1"), #sarranid item exception
  12167. (neq, ":my_wielded_item", "itm_sarranid_axe_b"), #sarranid item exception
  12168. (neq, ":my_wielded_item", "itm_sarranid_axe_a"), #sarranid item exception
  12169. (get_achievement_stat, ":achievement_stat", ACHIEVEMENT_MACE_IN_YER_FACE, 0),
  12170. (lt, ":achievement_stat", 25),
  12171. (val_add, ":achievement_stat", 1),
  12172. (set_achievement_stat, ACHIEVEMENT_MACE_IN_YER_FACE, 0, ":achievement_stat"),
  12173. (ge, ":achievement_stat", 25),
  12174. (unlock_achievement, ACHIEVEMENT_MACE_IN_YER_FACE),
  12175. (try_end),
  12176. #MACE_IN_YER_FACE achievement end
  12177. #THE_HUSCARL achievement
  12178. (try_begin),
  12179. (eq, ":my_item_class", multi_item_class_type_throwing_axe),
  12180. (get_achievement_stat, ":achievement_stat", ACHIEVEMENT_THE_HUSCARL, 0),
  12181. (lt, ":achievement_stat", 50),
  12182. (val_add, ":achievement_stat", 1),
  12183. (set_achievement_stat, ACHIEVEMENT_THE_HUSCARL, 0, ":achievement_stat"),
  12184. (ge, ":achievement_stat", 50),
  12185. (unlock_achievement, ACHIEVEMENT_THE_HUSCARL),
  12186. (try_end),
  12187. #THE_HUSCARL achievement end
  12188. (try_end),
  12189. (try_end),
  12190.  
  12191. (try_begin),
  12192. (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
  12193. (player_get_agent_id, ":player_agent", ":my_player_no"),
  12194. (eq, ":dead_agent_no", ":player_agent"),
  12195.  
  12196. (assign, ":show_respawn_counter", 0),
  12197. (try_begin),
  12198. #TODO: add other game types with no respawns here
  12199. (neq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
  12200. (neq, "$g_multiplayer_game_type", multiplayer_game_type_destroy),
  12201. #INVASION MODE START
  12202. (neq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  12203. #INVASION MODE END
  12204. (assign, ":show_respawn_counter", 1),
  12205. (else_try),
  12206. #INVASION MODE START
  12207. (neq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  12208. #INVASION MODE END
  12209.  
  12210. (eq, "$g_multiplayer_player_respawn_as_bot", 1),
  12211. (player_get_team_no, ":my_player_team", ":my_player_no"),
  12212. (assign, ":is_found", 0),
  12213. (try_for_agents, ":cur_agent"),
  12214. (eq, ":is_found", 0),
  12215. (agent_is_alive, ":cur_agent"),
  12216. (agent_is_human, ":cur_agent"),
  12217. (agent_is_non_player, ":cur_agent"),
  12218. (agent_get_team ,":cur_team", ":cur_agent"),
  12219. (eq, ":cur_team", ":my_player_team"),
  12220. (assign, ":is_found", 1),
  12221. (try_end),
  12222. (eq, ":is_found", 1),
  12223. (assign, ":show_respawn_counter", 1),
  12224. (try_end),
  12225.  
  12226. (try_begin),
  12227. #(player_get_slot, ":spawn_count", ":player_no", slot_player_spawn_count),
  12228. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  12229. (gt, "$g_multiplayer_number_of_respawn_count", 0),
  12230.  
  12231. (ge, "$g_my_spawn_count", "$g_multiplayer_number_of_respawn_count"),
  12232.  
  12233. (multiplayer_get_my_player, ":my_player_no"),
  12234. (player_get_team_no, ":my_player_team", ":my_player_no"),
  12235.  
  12236. (this_or_next|eq, ":my_player_team", 0),
  12237. (ge, "$g_my_spawn_count", 999),
  12238.  
  12239. (assign, "$g_show_no_more_respawns_remained", 1),
  12240. (else_try),
  12241. (assign, "$g_show_no_more_respawns_remained", 0),
  12242. (try_end),
  12243.  
  12244. (eq, ":show_respawn_counter", 1),
  12245.  
  12246. (start_presentation, "prsnt_multiplayer_respawn_time_counter"),
  12247. (try_end),
  12248. ]),
  12249.  
  12250. #script_multiplayer_get_item_value_for_troop
  12251. # Input: arg1 = item_no, arg2 = troop_no
  12252. # Output: reg0: item_value
  12253. ("multiplayer_get_item_value_for_troop",
  12254. [
  12255. (store_script_param, ":item_no", 1),
  12256. (store_script_param, ":troop_no", 2),
  12257. (try_begin),
  12258. (call_script, "script_cf_multiplayer_is_item_default_for_troop", ":item_no", ":troop_no"),
  12259. (assign, ":item_value", 0),
  12260. (else_try),
  12261. (store_item_value, ":item_value", ":item_no"),
  12262. (store_troop_faction, ":faction_no", ":troop_no"),
  12263. (store_sub, ":faction_slot", ":faction_no", npc_kingdoms_begin),
  12264. (val_add, ":faction_slot", slot_item_multiplayer_faction_price_multipliers_begin),
  12265. (item_get_slot, ":price_multiplier", ":item_no", ":faction_slot"),
  12266. (val_mul, ":item_value", ":price_multiplier"),
  12267. (val_div, ":item_value", 100),
  12268. (try_end),
  12269. (assign, reg0, ":item_value"),
  12270. ]),
  12271.  
  12272. #script_multiplayer_get_previous_item_for_item_and_troop
  12273. # Input: arg1 = item_no, arg2 = troop_no
  12274. # Output: reg0: previous_item_no (-1 if it is the root item, 0 if the item is invalid)
  12275. ("multiplayer_get_previous_item_for_item_and_troop",
  12276. [
  12277. (store_script_param, ":item_no", 1),
  12278. (store_script_param, ":troop_no", 2),
  12279. (item_get_slot, ":item_class", ":item_no", slot_item_multiplayer_item_class),
  12280. (call_script, "script_multiplayer_get_item_value_for_troop", ":item_no", ":troop_no"),
  12281. (assign, ":item_value", reg0),
  12282. (store_sub, ":troop_index", ":troop_no", multiplayer_troops_begin),
  12283. (val_add, ":troop_index", slot_item_multiplayer_availability_linked_list_begin),
  12284. (assign, ":max_item_no", -1),
  12285. (assign, ":max_item_value", -1),
  12286. (try_for_range, ":i_item", all_items_begin, all_items_end),
  12287. (item_slot_eq, ":i_item", slot_item_multiplayer_item_class, ":item_class"),
  12288. (item_slot_ge, ":i_item", ":troop_index", 1),
  12289. (call_script, "script_multiplayer_get_item_value_for_troop", ":i_item", ":troop_no"),
  12290. (assign, ":i_item_value", reg0),
  12291. (try_begin),
  12292. (eq, ":i_item_value", 0),
  12293. (eq, ":max_item_value", 0),
  12294. #choose between 2 default items
  12295. (store_item_value, ":i_item_real_value", ":i_item"),
  12296. (store_item_value, ":max_item_real_value", ":max_item_no"),
  12297. (try_begin),
  12298. (gt, ":i_item_real_value", ":max_item_real_value"),
  12299. (assign, ":max_item_value", ":i_item_value"),
  12300. (assign, ":max_item_no", ":i_item"),
  12301. (try_end),
  12302. (else_try),
  12303. (gt, ":i_item_value", ":max_item_value"),
  12304. (lt, ":i_item_value", ":item_value"),
  12305. (assign, ":max_item_value", ":i_item_value"),
  12306. (assign, ":max_item_no", ":i_item"),
  12307. (try_end),
  12308. (try_end),
  12309. (try_begin),
  12310. (eq, ":max_item_no", -1),
  12311. (assign, ":item_upper_class", -1),
  12312. (try_begin),
  12313. (is_between, ":item_class", multi_item_class_type_melee_weapons_begin, multi_item_class_type_melee_weapons_end),
  12314. (assign, ":item_upper_class", 0),
  12315. (else_try),
  12316. (is_between, ":item_class", multi_item_class_type_shields_begin, multi_item_class_type_shields_end),
  12317. (assign, ":item_upper_class", 1),
  12318. (else_try),
  12319. (eq, ":item_class", multi_item_class_type_bow),
  12320. (assign, ":item_upper_class", 2),
  12321. (else_try),
  12322. (eq, ":item_class", multi_item_class_type_crossbow),
  12323. (assign, ":item_upper_class", 3),
  12324. (else_try),
  12325. (eq, ":item_class", multi_item_class_type_arrow),
  12326. (assign, ":item_upper_class", 4),
  12327. (else_try),
  12328. (eq, ":item_class", multi_item_class_type_bolt),
  12329. (assign, ":item_upper_class", 5),
  12330. (else_try),
  12331. (eq, ":item_class", multi_item_class_type_throwing),
  12332. (assign, ":item_upper_class", 6),
  12333. (else_try),
  12334. (is_between, ":item_class", multi_item_class_type_heads_begin, multi_item_class_type_heads_end),
  12335. (assign, ":item_upper_class", 7),
  12336. (else_try),
  12337. (is_between, ":item_class", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end),
  12338. (assign, ":item_upper_class", 8),
  12339. (else_try),
  12340. (is_between, ":item_class", multi_item_class_type_feet_begin, multi_item_class_type_feet_end),
  12341. (assign, ":item_upper_class", 9),
  12342. (else_try),
  12343. (is_between, ":item_class", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end),
  12344. (assign, ":item_upper_class", 10),
  12345. (else_try),
  12346. (is_between, ":item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
  12347. (assign, ":item_upper_class", 11),
  12348. (try_end),
  12349. (neq, ":item_upper_class", 0),
  12350. #search for the default item for non-weapon classes (only 1 slot is easy to fill)
  12351. (assign, ":end_cond", all_items_end),
  12352. (try_for_range, ":i_item", all_items_begin, ":end_cond"),
  12353. (item_slot_ge, ":i_item", ":troop_index", 1),
  12354. (item_get_slot, ":i_item_class", ":i_item", slot_item_multiplayer_item_class),
  12355. (try_begin),
  12356. (is_between, ":i_item_class", multi_item_class_type_melee_weapons_begin, multi_item_class_type_melee_weapons_end),
  12357. (assign, ":i_item_upper_class", 0),
  12358. (else_try),
  12359. (is_between, ":i_item_class", multi_item_class_type_shields_begin, multi_item_class_type_shields_end),
  12360. (assign, ":i_item_upper_class", 1),
  12361. (else_try),
  12362. (eq, ":i_item_class", multi_item_class_type_bow),
  12363. (assign, ":i_item_upper_class", 2),
  12364. (else_try),
  12365. (eq, ":i_item_class", multi_item_class_type_crossbow),
  12366. (assign, ":i_item_upper_class", 3),
  12367. (else_try),
  12368. (eq, ":i_item_class", multi_item_class_type_arrow),
  12369. (assign, ":i_item_upper_class", 4),
  12370. (else_try),
  12371. (eq, ":i_item_class", multi_item_class_type_bolt),
  12372. (assign, ":i_item_upper_class", 5),
  12373. (else_try),
  12374. (eq, ":i_item_class", multi_item_class_type_throwing),
  12375. (assign, ":i_item_upper_class", 6),
  12376. (else_try),
  12377. (is_between, ":i_item_class", multi_item_class_type_heads_begin, multi_item_class_type_heads_end),
  12378. (assign, ":i_item_upper_class", 7),
  12379. (else_try),
  12380. (is_between, ":i_item_class", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end),
  12381. (assign, ":i_item_upper_class", 8),
  12382. (else_try),
  12383. (is_between, ":i_item_class", multi_item_class_type_feet_begin, multi_item_class_type_feet_end),
  12384. (assign, ":i_item_upper_class", 9),
  12385. (else_try),
  12386. (is_between, ":i_item_class", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end),
  12387. (assign, ":i_item_upper_class", 10),
  12388. (else_try),
  12389. (is_between, ":i_item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
  12390. (assign, ":i_item_upper_class", 11),
  12391. (try_end),
  12392. (eq, ":i_item_upper_class", ":item_upper_class"),
  12393. (call_script, "script_cf_multiplayer_is_item_default_for_troop", ":i_item", ":troop_no"),
  12394. (assign, ":max_item_no", ":i_item"),
  12395. (assign, ":end_cond", 0), #break
  12396. (try_end),
  12397. (try_end),
  12398. (assign, reg0, ":max_item_no"),
  12399. ]),
  12400.  
  12401. #script_cf_multiplayer_is_item_default_for_troop
  12402. # Input: arg1 = item_no, arg2 = troop_no
  12403. # Output: reg0: total_cost
  12404. ("cf_multiplayer_is_item_default_for_troop",
  12405. [
  12406. (store_script_param, ":item_no", 1),
  12407. (store_script_param, ":troop_no", 2),
  12408. (assign, ":default_item", 0),
  12409. (try_begin),
  12410. (neg|is_between, ":item_no", horses_begin, horses_end),
  12411. (neq, ":item_no", "itm_warhorse_sarranid"),
  12412. (neq, ":item_no", "itm_warhorse_steppe"),
  12413.  
  12414. (troop_get_inventory_capacity, ":end_cond", ":troop_no"), #troop no can come -1 here error occured at friday
  12415. (try_for_range, ":i_slot", 0, ":end_cond"),
  12416. (troop_get_inventory_slot, ":default_item_id", ":troop_no", ":i_slot"),
  12417. (eq, ":item_no", ":default_item_id"),
  12418. (assign, ":default_item", 1),
  12419. (assign, ":end_cond", 0), #break
  12420. (try_end),
  12421. (try_end),
  12422. (eq, ":default_item", 1),
  12423. ]),
  12424.  
  12425. #script_multiplayer_calculate_cur_selected_items_cost
  12426. # Input: arg1 = player_no
  12427. # Output: reg0: total_cost
  12428. ("multiplayer_calculate_cur_selected_items_cost",
  12429. [
  12430. (store_script_param, ":player_no", 1),
  12431. (store_script_param, ":calculation_type", 2), #0 for normal calculation
  12432. (assign, ":total_cost", 0),
  12433. (player_get_troop_id, ":troop_no", ":player_no"),
  12434.  
  12435. (try_begin),
  12436. (eq, ":calculation_type", 0),
  12437. (assign, ":begin_cond", slot_player_cur_selected_item_indices_begin),
  12438. (assign, ":end_cond", slot_player_cur_selected_item_indices_end),
  12439. (else_try),
  12440. (assign, ":begin_cond", slot_player_selected_item_indices_begin),
  12441. (assign, ":end_cond", slot_player_selected_item_indices_end),
  12442. (try_end),
  12443.  
  12444. (try_for_range, ":i_item", ":begin_cond", ":end_cond"),
  12445. (player_get_slot, ":item_id", ":player_no", ":i_item"),
  12446. (ge, ":item_id", 0), #might be -1 for horses etc.
  12447. (call_script, "script_multiplayer_get_item_value_for_troop", ":item_id", ":troop_no"),
  12448. (val_add, ":total_cost", reg0),
  12449. (try_end),
  12450. (assign, reg0, ":total_cost"),
  12451. ]),
  12452.  
  12453. #script_multiplayer_set_item_available_for_troop
  12454. # Input: arg1 = item_no, arg2 = troop_no
  12455. # Output: none
  12456. ("multiplayer_set_item_available_for_troop",
  12457. [
  12458. (store_script_param, ":item_no", 1),
  12459. (store_script_param, ":troop_no", 2),
  12460. (store_sub, ":item_troop_slot", ":troop_no", multiplayer_troops_begin),
  12461. (val_add, ":item_troop_slot", slot_item_multiplayer_availability_linked_list_begin),
  12462. (item_set_slot, ":item_no", ":item_troop_slot", 1),
  12463. ]),
  12464.  
  12465. #script_multiplayer_send_item_selections
  12466. # Input: none
  12467. # Output: none
  12468. ("multiplayer_send_item_selections",
  12469. [
  12470. (multiplayer_get_my_player, ":my_player_no"),
  12471. (try_for_range, ":i_item", slot_player_selected_item_indices_begin, slot_player_selected_item_indices_end),
  12472. (player_get_slot, ":item_id", ":my_player_no", ":i_item"),
  12473. (multiplayer_send_2_int_to_server, multiplayer_event_set_item_selection, ":i_item", ":item_id"),
  12474. (try_end),
  12475. #INVASION MODE START
  12476. (try_begin),
  12477. (call_script, "script_cf_multiplayer_can_buy_squad"),
  12478. (try_for_range, ":bot_slot", slot_player_companion_ids_begin, slot_player_companion_classes_end),
  12479. (player_get_slot, ":bot_id", ":my_player_no", ":bot_slot"),
  12480. (multiplayer_send_3_int_to_server, multiplayer_event_other_events, multiplayer_event_other_event_set_bot_purchase, ":bot_slot", ":bot_id"),
  12481. (try_end),
  12482. (try_end),
  12483. #INVASION MODE END
  12484. ]),
  12485.  
  12486. #script_multiplayer_set_default_item_selections_for_troop
  12487. # Input: arg1 = troop_no
  12488. # Output: none
  12489. ("multiplayer_set_default_item_selections_for_troop",
  12490. [
  12491. (store_script_param, ":troop_no", 1),
  12492. (multiplayer_get_my_player, ":my_player_no"),
  12493. (call_script, "script_multiplayer_clear_player_selected_items", ":my_player_no"),
  12494. (assign, ":cur_weapon_slot", 0),
  12495. (troop_get_inventory_capacity, ":inv_cap", ":troop_no"),
  12496. (try_for_range, ":i_slot", 0, ":inv_cap"),
  12497. (troop_get_inventory_slot, ":item_id", ":troop_no", ":i_slot"),
  12498. (ge, ":item_id", 0),
  12499. (item_get_slot, ":item_class", ":item_id", slot_item_multiplayer_item_class),
  12500. (try_begin),
  12501. (is_between, ":item_class", multi_item_class_type_weapons_begin, multi_item_class_type_weapons_end),
  12502. (this_or_next|eq, "$g_multiplayer_disallow_ranged_weapons", 0),
  12503. (neg|is_between, ":item_class", multi_item_class_type_ranged_weapons_begin, multi_item_class_type_ranged_weapons_end),
  12504. (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, ":cur_weapon_slot"),
  12505. (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
  12506. (val_add, ":cur_weapon_slot", 1),
  12507. (else_try),
  12508. (is_between, ":item_class", multi_item_class_type_heads_begin, multi_item_class_type_heads_end),
  12509. (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 4),
  12510. (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
  12511. (else_try),
  12512. (is_between, ":item_class", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end),
  12513. (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 5),
  12514. (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
  12515. (else_try),
  12516. (is_between, ":item_class", multi_item_class_type_feet_begin, multi_item_class_type_feet_end),
  12517. (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 6),
  12518. (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
  12519. (else_try),
  12520. (is_between, ":item_class", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end),
  12521. (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 7),
  12522. (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
  12523. (else_try),
  12524. (is_between, ":item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
  12525. (eq, "$g_horses_are_avaliable", 1),
  12526. (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 8),
  12527. (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
  12528. (try_end),
  12529. (try_end),
  12530. ]),
  12531.  
  12532. #script_multiplayer_display_available_items_for_troop_and_item_classes
  12533. # Input: arg1 = troop_no, arg2 = item_classes_begin, arg3 = item_classes_end, arg4 = pos_x_begin, arg5 = pos_y_begin
  12534. # Output: none
  12535. ("multiplayer_display_available_items_for_troop_and_item_classes",
  12536. [
  12537. (store_script_param, ":troop_no", 1),
  12538. (store_script_param, ":item_classes_begin", 2),
  12539. (store_script_param, ":item_classes_end", 3),
  12540. (store_script_param, ":pos_x_begin", 4),
  12541. (store_script_param, ":pos_y_begin", 5),
  12542.  
  12543. (assign, ":x_adder", 100),
  12544. (try_begin),
  12545. (gt, ":pos_x_begin", 500),
  12546. (assign, ":x_adder", -100),
  12547. (try_end),
  12548.  
  12549. (store_sub, ":item_troop_slot", ":troop_no", multiplayer_troops_begin),
  12550. (val_add, ":item_troop_slot", slot_item_multiplayer_availability_linked_list_begin),
  12551.  
  12552. (try_for_range, ":cur_slot", multi_data_item_button_indices_begin, multi_data_item_button_indices_end),
  12553. (troop_set_slot, "trp_multiplayer_data", ":cur_slot", -1),
  12554. (try_end),
  12555.  
  12556. (assign, ":num_available_items", 0),
  12557.  
  12558. (try_for_range, ":item_no", all_items_begin, all_items_end),
  12559. (item_get_slot, ":item_class", ":item_no", slot_item_multiplayer_item_class),
  12560. (is_between, ":item_class", ":item_classes_begin", ":item_classes_end"),
  12561. (this_or_next|eq, "$g_multiplayer_disallow_ranged_weapons", 0),
  12562. (neg|is_between, ":item_class", multi_item_class_type_ranged_weapons_begin, multi_item_class_type_ranged_weapons_end),
  12563. (item_slot_ge, ":item_no", ":item_troop_slot", 1),
  12564. (store_add, ":cur_slot_index", ":num_available_items", multi_data_item_button_indices_begin),
  12565. #using the result array for item_ids
  12566. (troop_set_slot, "trp_multiplayer_data", ":cur_slot_index", ":item_no"),
  12567. (val_add, ":num_available_items", 1),
  12568. (try_end),
  12569.  
  12570. #sorting
  12571. (store_add, ":item_slots_end", ":num_available_items", multi_data_item_button_indices_begin),
  12572. (store_sub, ":item_slots_end_minus_one", ":item_slots_end", 1),
  12573. (try_for_range, ":cur_slot", multi_data_item_button_indices_begin, ":item_slots_end_minus_one"),
  12574. (store_add, ":cur_slot_2_begin", ":cur_slot", 1),
  12575. (try_for_range, ":cur_slot_2", ":cur_slot_2_begin", ":item_slots_end"),
  12576. (troop_get_slot, ":item_1", "trp_multiplayer_data", ":cur_slot"),
  12577. (troop_get_slot, ":item_2", "trp_multiplayer_data", ":cur_slot_2"),
  12578. (call_script, "script_multiplayer_get_item_value_for_troop", ":item_1", ":troop_no"),
  12579. (assign, ":item_1_point", reg0),
  12580. (call_script, "script_multiplayer_get_item_value_for_troop", ":item_2", ":troop_no"),
  12581. (assign, ":item_2_point", reg0),
  12582. (item_get_slot, ":item_1_class", ":item_1", slot_item_multiplayer_item_class),
  12583. (item_get_slot, ":item_2_class", ":item_2", slot_item_multiplayer_item_class),
  12584. (val_mul, ":item_1_class", 1000000), #assuming maximum item price is 1000000
  12585. (val_mul, ":item_2_class", 1000000), #assuming maximum item price is 1000000
  12586. (val_add, ":item_1_point", ":item_1_class"),
  12587. (val_add, ":item_2_point", ":item_2_class"),
  12588. (lt, ":item_2_point", ":item_1_point"),
  12589. (troop_set_slot, "trp_multiplayer_data", ":cur_slot", ":item_2"),
  12590. (troop_set_slot, "trp_multiplayer_data", ":cur_slot_2", ":item_1"),
  12591. (try_end),
  12592. (try_end),
  12593.  
  12594. (troop_get_slot, ":last_item_no", "trp_multiplayer_data", multi_data_item_button_indices_begin),
  12595. (assign, ":num_item_classes", 0),
  12596. (try_begin),
  12597. (ge, ":last_item_no", 0),
  12598. (item_get_slot, ":last_item_class", ":last_item_no", slot_item_multiplayer_item_class),
  12599.  
  12600. (try_for_range, ":cur_slot", multi_data_item_button_indices_begin, ":item_slots_end"),
  12601. (troop_get_slot, ":item_no", "trp_multiplayer_data", ":cur_slot"),
  12602. (item_get_slot, ":item_class", ":item_no", slot_item_multiplayer_item_class),
  12603. (neq, ":item_class", ":last_item_class"),
  12604. (val_add, ":num_item_classes", 1),
  12605. (assign, ":last_item_class", ":item_class"),
  12606. (try_end),
  12607.  
  12608. (try_begin),
  12609. (store_mul, ":required_y", ":num_item_classes", 100),
  12610. (gt, ":required_y", ":pos_y_begin"),
  12611. (store_sub, ":dif", ":required_y", ":pos_y_begin"),
  12612. (val_div, ":dif", 100),
  12613. (val_add, ":dif", 1),
  12614. (val_mul, ":dif", 100),
  12615. (val_add, ":pos_y_begin", ":dif"),
  12616. (try_end),
  12617.  
  12618. (item_get_slot, ":last_item_class", ":last_item_no", slot_item_multiplayer_item_class),
  12619. (try_end),
  12620. (assign, ":cur_x", ":pos_x_begin"),
  12621. (assign, ":cur_y", ":pos_y_begin"),
  12622. (try_for_range, ":cur_slot", multi_data_item_button_indices_begin, ":item_slots_end"),
  12623. (troop_get_slot, ":item_no", "trp_multiplayer_data", ":cur_slot"),
  12624. (item_get_slot, ":item_class", ":item_no", slot_item_multiplayer_item_class),
  12625. (try_begin),
  12626. (neq, ":item_class", ":last_item_class"),
  12627. (val_sub, ":cur_y", 100),
  12628. (assign, ":cur_x", ":pos_x_begin"),
  12629. (assign, ":last_item_class", ":item_class"),
  12630. (try_end),
  12631. (create_image_button_overlay, ":cur_obj", "mesh_mp_inventory_choose", "mesh_mp_inventory_choose"),
  12632. (position_set_x, pos1, 800),
  12633. (position_set_y, pos1, 800),
  12634. (overlay_set_size, ":cur_obj", pos1),
  12635. (position_set_x, pos1, ":cur_x"),
  12636. (position_set_y, pos1, ":cur_y"),
  12637. (overlay_set_position, ":cur_obj", pos1),
  12638. (create_mesh_overlay_with_item_id, reg0, ":item_no"),
  12639. (store_add, ":item_x", ":cur_x", 50),
  12640. (store_add, ":item_y", ":cur_y", 50),
  12641. (position_set_x, pos1, ":item_x"),
  12642. (position_set_y, pos1, ":item_y"),
  12643. (overlay_set_position, reg0, pos1),
  12644. (val_add, ":cur_x", ":x_adder"),
  12645. (try_end),
  12646. ]),
  12647.  
  12648. # script_multiplayer_fill_map_game_types
  12649. # Input: game_type
  12650. # Output: num_maps
  12651. ("multiplayer_fill_map_game_types",
  12652. [
  12653. (store_script_param, ":game_type", 1),
  12654. (try_for_range, ":i_multi", multi_data_maps_for_game_type_begin, multi_data_maps_for_game_type_end),
  12655. (troop_set_slot, "trp_multiplayer_data", ":i_multi", -1),
  12656. (try_end),
  12657. (assign, ":num_maps", 0),
  12658. (try_begin),
  12659. (this_or_next|eq, ":game_type", multiplayer_game_type_deathmatch),
  12660. (this_or_next|eq, ":game_type", multiplayer_game_type_duel),
  12661. (eq, ":game_type", multiplayer_game_type_team_deathmatch),
  12662. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin, "scn_multi_scene_1"),
  12663. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_multi_scene_2"),
  12664. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 2, "scn_multi_scene_4"),
  12665. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 3, "scn_multi_scene_7"),
  12666. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 4, "scn_multi_scene_9"),
  12667. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 5, "scn_multi_scene_11"),
  12668. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 6, "scn_multi_scene_12"),
  12669. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 7, "scn_multi_scene_14"),
  12670. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 8, "scn_multi_scene_17"),
  12671. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 9, "scn_multi_scene_18"),
  12672. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 10, "scn_multi_scene_19"),
  12673. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 11, "scn_multi_scene_20"),
  12674. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 12, "scn_random_multi_plain_medium"),
  12675. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 13, "scn_random_multi_plain_large"),
  12676. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 14, "scn_random_multi_steppe_medium"),
  12677. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 15, "scn_random_multi_steppe_large"),
  12678. (assign, ":num_maps", 16),
  12679. (else_try),
  12680. (eq, ":game_type", multiplayer_game_type_battle),
  12681. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin, "scn_multi_scene_1"),
  12682. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_multi_scene_2"),
  12683. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 2, "scn_multi_scene_4"),
  12684. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 3, "scn_multi_scene_7"),
  12685. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 4, "scn_multi_scene_9"),
  12686. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 5, "scn_multi_scene_11"),
  12687. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 6, "scn_multi_scene_12"),
  12688. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 7, "scn_multi_scene_14"),
  12689. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 8, "scn_multi_scene_17"),
  12690. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 9, "scn_multi_scene_18"),
  12691. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 10, "scn_multi_scene_19"),
  12692. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 11, "scn_multi_scene_20"),
  12693. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 12, "scn_random_multi_plain_medium"),
  12694. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 13, "scn_random_multi_plain_large"),
  12695. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 14, "scn_random_multi_steppe_medium"),
  12696. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 15, "scn_random_multi_steppe_large"),
  12697. (assign, ":num_maps", 16),
  12698. (else_try),
  12699. (eq, ":game_type", multiplayer_game_type_destroy),
  12700. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin, "scn_multi_scene_1"),
  12701. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_multi_scene_2"),
  12702. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 2, "scn_multi_scene_4"),
  12703. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 3, "scn_multi_scene_7"),
  12704. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 4, "scn_multi_scene_9"),
  12705. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 5, "scn_multi_scene_12"),
  12706. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 6, "scn_multi_scene_14"),
  12707. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 7, "scn_multi_scene_19"),
  12708. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 8, "scn_multi_scene_20"),
  12709. (assign, ":num_maps", 9),
  12710. (else_try),
  12711. (eq, ":game_type", multiplayer_game_type_capture_the_flag),
  12712. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin, "scn_multi_scene_1"),
  12713. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_multi_scene_2"),
  12714. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 2, "scn_multi_scene_4"),
  12715. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 3, "scn_multi_scene_7"),
  12716. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 4, "scn_multi_scene_9"),
  12717. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 5, "scn_multi_scene_11"),
  12718. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 6, "scn_multi_scene_12"),
  12719. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 7, "scn_multi_scene_14"),
  12720. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 8, "scn_multi_scene_17"),
  12721. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 9, "scn_multi_scene_18"),
  12722. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 10, "scn_multi_scene_19"),
  12723. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 11, "scn_multi_scene_20"),
  12724. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 12, "scn_random_multi_plain_medium"),
  12725. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 13, "scn_random_multi_plain_large"),
  12726. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 14, "scn_random_multi_steppe_medium"),
  12727. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 15, "scn_random_multi_steppe_large"),
  12728. (assign, ":num_maps", 16),
  12729. (else_try),
  12730. (eq, ":game_type", multiplayer_game_type_headquarters),
  12731. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin, "scn_multi_scene_1"),
  12732. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_multi_scene_2"),
  12733. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 2, "scn_multi_scene_4"),
  12734. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 3, "scn_multi_scene_7"),
  12735. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 4, "scn_multi_scene_9"),
  12736. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 5, "scn_multi_scene_11"),
  12737. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 6, "scn_multi_scene_12"),
  12738. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 7, "scn_multi_scene_14"),
  12739. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 8, "scn_multi_scene_17"),
  12740. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 9, "scn_multi_scene_18"),
  12741. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 10, "scn_multi_scene_19"),
  12742. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 11, "scn_multi_scene_20"),
  12743. (assign, ":num_maps", 12),
  12744. (else_try),
  12745. (eq, ":game_type", multiplayer_game_type_siege),
  12746. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin, "scn_multi_scene_3"),
  12747. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_multi_scene_8"),
  12748. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 2, "scn_multi_scene_10"),
  12749. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 3, "scn_multi_scene_13"),
  12750. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 4, "scn_multi_scene_15"),
  12751. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 5, "scn_multi_scene_16"),
  12752. (assign, ":num_maps", 6),
  12753. #INVASION MODE START
  12754. (else_try),
  12755. (eq, ":game_type", multiplayer_game_type_captain_coop),
  12756. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin, "scn_multi_scene_1"),
  12757. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_multi_scene_4"),
  12758. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 2, "scn_multi_scene_7"),
  12759. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 3, "scn_multi_scene_9"),
  12760. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 4, "scn_multi_scene_11"),
  12761. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 5, "scn_multi_scene_12"),
  12762. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 6, "scn_multi_scene_14"),
  12763. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 7, "scn_multi_scene_17"),
  12764. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 8, "scn_multi_scene_18"),
  12765. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 9, "scn_multi_scene_19"),
  12766. (troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 10, "scn_multi_scene_20"),
  12767. (assign, ":num_maps", 11),
  12768. #INVASION MODE END
  12769. (try_end),
  12770. (assign, reg0, ":num_maps"),
  12771. ]),
  12772.  
  12773.  
  12774. # script_multiplayer_count_players_bots
  12775. # Input: none
  12776. # Output: none
  12777. ("multiplayer_count_players_bots",
  12778. [
  12779. (get_max_players, ":num_players"),
  12780. (try_for_range, ":cur_player", 0, ":num_players"),
  12781. (player_is_active, ":cur_player"),
  12782. (player_set_slot, ":cur_player", slot_player_last_bot_count, 0),
  12783. (try_end),
  12784.  
  12785. (try_for_agents, ":cur_agent"),
  12786. (agent_is_human, ":cur_agent"),
  12787. (agent_is_alive, ":cur_agent"),
  12788. (agent_get_player_id, ":agent_player", ":cur_agent"),
  12789. (lt, ":agent_player", 0), #not a player
  12790. (agent_get_group, ":agent_group", ":cur_agent"),
  12791. (player_is_active, ":agent_group"),
  12792. (player_get_slot, ":bot_count", ":agent_group", slot_player_last_bot_count),
  12793. (val_add, ":bot_count", 1),
  12794. (player_set_slot, ":agent_group", slot_player_last_bot_count, ":bot_count"),
  12795. (try_end),
  12796. ]),
  12797.  
  12798. # script_multiplayer_find_player_leader_for_bot
  12799. # Input: arg1 = team_no
  12800. # Output: reg0 = player_no
  12801. ("multiplayer_find_player_leader_for_bot",
  12802. [
  12803. (store_script_param, ":team_no", 1),
  12804. (store_script_param, ":look_only_actives", 2),
  12805.  
  12806. (team_get_faction, ":team_faction", ":team_no"),
  12807. (assign, ":num_ai_troops", 0),
  12808. (try_for_range, ":cur_ai_troop", multiplayer_ai_troops_begin, multiplayer_ai_troops_end),
  12809. (store_troop_faction, ":ai_troop_faction", ":cur_ai_troop"),
  12810. (eq, ":ai_troop_faction", ":team_faction"),
  12811. (val_add, ":num_ai_troops", 1),
  12812. (try_end),
  12813.  
  12814. (call_script, "script_multiplayer_count_players_bots"),
  12815.  
  12816. (assign, ":team_player_count", 0),
  12817.  
  12818. (get_max_players, ":num_players"),
  12819. (try_for_range, ":cur_player", 0, ":num_players"),
  12820. (assign, ":continue", 0),
  12821. (player_is_active, ":cur_player"),
  12822. (try_begin),
  12823. (eq, ":look_only_actives", 0),
  12824. (assign, ":continue", 1),
  12825. (else_try),
  12826. (neq, ":look_only_actives", 0),
  12827. (player_get_agent_id, ":cur_agent", ":cur_player"),
  12828. (ge, ":cur_agent", 0),
  12829. (agent_is_alive, ":cur_agent"),
  12830. (assign, ":continue", 1),
  12831. (try_end),
  12832.  
  12833. (eq, ":continue", 1),
  12834.  
  12835. (player_get_team_no, ":player_team", ":cur_player"),
  12836. (eq, ":team_no", ":player_team"),
  12837. (val_add, ":team_player_count", 1),
  12838. (try_end),
  12839. (assign, ":result_leader", -1),
  12840. (try_begin),
  12841. (gt, ":team_player_count", 0),
  12842. (assign, ":total_bot_count", "$g_multiplayer_num_bots_team_1"),
  12843. (try_begin),
  12844. (eq, ":team_no", 1),
  12845. (assign, ":total_bot_count", "$g_multiplayer_num_bots_team_2"),
  12846. (try_end),
  12847. (store_div, ":num_bots_for_each_player", ":total_bot_count", ":team_player_count"),
  12848. (store_mul, ":check_remainder", ":num_bots_for_each_player", ":team_player_count"),
  12849. (try_begin),
  12850. (lt, ":check_remainder", ":total_bot_count"),
  12851. (val_add, ":num_bots_for_each_player", 1),
  12852. (try_end),
  12853.  
  12854. (assign, ":total_bot_req", 0),
  12855. (try_for_range, ":cur_player", 0, ":num_players"),
  12856. (player_is_active, ":cur_player"),
  12857.  
  12858. (player_get_agent_id, ":cur_agent", ":cur_player"),
  12859. (ge, ":cur_agent", 0),
  12860. (agent_is_alive, ":cur_agent"),
  12861.  
  12862. (player_get_team_no, ":player_team", ":cur_player"),
  12863. (eq, ":team_no", ":player_team"),
  12864. (assign, ":ai_wanted", 0),
  12865. (store_add, ":end_cond", slot_player_bot_type_1_wanted, ":num_ai_troops"),
  12866. (try_for_range, ":bot_type_wanted_slot", slot_player_bot_type_1_wanted, ":end_cond"),
  12867. (player_slot_ge, ":cur_player", ":bot_type_wanted_slot", 1),
  12868. (assign, ":ai_wanted", 1),
  12869. (assign, ":end_cond", 0), #break
  12870. (try_end),
  12871. (eq, ":ai_wanted", 1),
  12872. (player_get_slot, ":player_bot_count", ":cur_player", slot_player_last_bot_count),
  12873. (lt, ":player_bot_count", ":num_bots_for_each_player"),
  12874. (val_add, ":total_bot_req", ":num_bots_for_each_player"),
  12875. (val_sub, ":total_bot_req", ":player_bot_count"),
  12876. (try_end),
  12877. (gt, ":total_bot_req", 0),
  12878.  
  12879. (store_random_in_range, ":random_bot", 0, ":total_bot_req"),
  12880. (try_for_range, ":cur_player", 0, ":num_players"),
  12881. (player_is_active, ":cur_player"),
  12882.  
  12883. (player_get_agent_id, ":cur_agent", ":cur_player"),
  12884. (ge, ":cur_agent", 0),
  12885. (agent_is_alive, ":cur_agent"),
  12886.  
  12887. (player_get_team_no, ":player_team", ":cur_player"),
  12888. (eq, ":team_no", ":player_team"),
  12889. (assign, ":ai_wanted", 0),
  12890. (store_add, ":end_cond", slot_player_bot_type_1_wanted, ":num_ai_troops"),
  12891. (try_for_range, ":bot_type_wanted_slot", slot_player_bot_type_1_wanted, ":end_cond"),
  12892. (player_slot_ge, ":cur_player", ":bot_type_wanted_slot", 1),
  12893. (assign, ":ai_wanted", 1),
  12894. (assign, ":end_cond", 0), #break
  12895. (try_end),
  12896. (eq, ":ai_wanted", 1),
  12897. (player_get_slot, ":player_bot_count", ":cur_player", slot_player_last_bot_count),
  12898. (lt, ":player_bot_count", ":num_bots_for_each_player"),
  12899. (val_sub, ":random_bot", ":num_bots_for_each_player"),
  12900. (val_add, ":random_bot", ":player_bot_count"),
  12901. (lt, ":random_bot", 0),
  12902. (assign, ":result_leader", ":cur_player"),
  12903. (assign, ":num_players", 0), #break
  12904. (try_end),
  12905. (try_end),
  12906. (assign, reg0, ":result_leader"),
  12907. ]),
  12908.  
  12909. # script_multiplayer_find_bot_troop_and_group_for_spawn
  12910. # Input: arg1 = team_no
  12911. # Output: reg0 = troop_id, reg1 = group_id
  12912. ("multiplayer_find_bot_troop_and_group_for_spawn",
  12913. [
  12914. (store_script_param, ":team_no", 1),
  12915. (store_script_param, ":look_only_actives", 2),
  12916.  
  12917. (call_script, "script_multiplayer_find_player_leader_for_bot", ":team_no", ":look_only_actives"),
  12918. (assign, ":leader_player", reg0),
  12919.  
  12920. (assign, ":available_troops_in_faction", 0),
  12921. (assign, ":available_troops_to_spawn", 0),
  12922. (team_get_faction, ":team_faction_no", ":team_no"),
  12923.  
  12924. (try_for_range, ":troop_no", multiplayer_ai_troops_begin, multiplayer_ai_troops_end),
  12925. (store_troop_faction, ":troop_faction", ":troop_no"),
  12926. (eq, ":troop_faction", ":team_faction_no"),
  12927. (store_add, ":wanted_slot", slot_player_bot_type_1_wanted, ":available_troops_in_faction"),
  12928. (val_add, ":available_troops_in_faction", 1),
  12929. (try_begin),
  12930. (this_or_next|lt, ":leader_player", 0),
  12931. (player_slot_ge, ":leader_player", ":wanted_slot", 1),
  12932. (val_add, ":available_troops_to_spawn", 1),
  12933. (try_end),
  12934. (try_end),
  12935.  
  12936. (assign, ":available_troops_in_faction", 0),
  12937.  
  12938. (store_random_in_range, ":random_troop_index", 0, ":available_troops_to_spawn"),
  12939. (assign, ":end_cond", multiplayer_ai_troops_end),
  12940. (try_for_range, ":troop_no", multiplayer_ai_troops_begin, ":end_cond"),
  12941. (store_troop_faction, ":troop_faction", ":troop_no"),
  12942. (eq, ":troop_faction", ":team_faction_no"),
  12943. (store_add, ":wanted_slot", slot_player_bot_type_1_wanted, ":available_troops_in_faction"),
  12944. (val_add, ":available_troops_in_faction", 1),
  12945. (this_or_next|lt, ":leader_player", 0),
  12946. (player_slot_ge, ":leader_player", ":wanted_slot", 1),
  12947. (val_sub, ":random_troop_index", 1),
  12948. (lt, ":random_troop_index", 0),
  12949. (assign, ":end_cond", 0),
  12950. (assign, ":selected_troop", ":troop_no"),
  12951. (try_end),
  12952. (assign, reg0, ":selected_troop"),
  12953. (assign, reg1, ":leader_player"),
  12954. ]),
  12955.  
  12956. # script_multiplayer_change_leader_of_bot
  12957. # Input: arg1 = agent_no
  12958. # Output: none
  12959. ("multiplayer_change_leader_of_bot",
  12960. [
  12961. (store_script_param, ":agent_no", 1),
  12962. (agent_get_team, ":team_no", ":agent_no"),
  12963. (call_script, "script_multiplayer_find_player_leader_for_bot", ":team_no", 1),
  12964. (assign, ":leader_player", reg0),
  12965. (agent_set_group, ":agent_no", ":leader_player"),
  12966. ]),
  12967.  
  12968. ("multiplayer_find_spawn_point",
  12969. [
  12970. (store_script_param, ":team_no", 1),
  12971. (store_script_param, ":examine_all_spawn_points", 2), #0-dm, 1-tdm, 2-cf, 3-hq, 4-sg
  12972. (store_script_param, ":is_horseman", 3), #0:no, 1:yes, -1:do not care
  12973.  
  12974. (set_fixed_point_multiplier, 100),
  12975.  
  12976. (assign, ":flags", 0),
  12977.  
  12978. (try_begin),
  12979. (eq, ":examine_all_spawn_points", 1),
  12980. (val_or, ":flags", spf_examine_all_spawn_points),
  12981. (try_end),
  12982.  
  12983. (try_begin),
  12984. (eq, ":is_horseman", 1),
  12985. (val_or, ":flags", spf_is_horseman),
  12986. (try_end),
  12987.  
  12988. (try_begin),
  12989. (eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
  12990. (eq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  12991. (val_or, ":flags", spf_all_teams_are_enemy),
  12992. (val_or, ":flags", spf_try_to_spawn_close_to_at_least_one_enemy),
  12993. (else_try),
  12994. (eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch),
  12995. (val_or, ":flags", spf_try_to_spawn_close_to_at_least_one_enemy),
  12996. (else_try),
  12997. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  12998. (val_or, ":flags", spf_team_1_spawn_far_from_entry_66), #team 1 agents will not spawn 70 meters around of entry 0
  12999. (val_or, ":flags", spf_team_0_walkers_spawn_at_high_points),
  13000. (val_or, ":flags", spf_team_0_spawn_near_entry_66),
  13001. (val_or, ":flags", spf_care_agent_to_agent_distances_less),
  13002. (else_try),
  13003. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13004. (val_or, ":flags", spf_team_1_spawn_far_from_entry_0), #team 1 agents will not spawn 70 meters around of entry 0
  13005. (val_or, ":flags", spf_team_0_spawn_far_from_entry_32), #team 0 agents will not spawn 70 meters around of entry 32
  13006. (val_or, ":flags", spf_try_to_spawn_close_to_at_least_one_enemy),
  13007. (else_try),
  13008. (eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters),
  13009. (assign, ":assigned_flag_count", 0),
  13010.  
  13011. (store_sub, ":maximum_moved_flag_distance", multi_headquarters_pole_height, 50), #900 - 50 = 850
  13012. (store_mul, ":maximum_moved_flag_distance_sq", ":maximum_moved_flag_distance", ":maximum_moved_flag_distance"),
  13013. (val_div, ":maximum_moved_flag_distance_sq", 100), #dividing 100, because fixed point multiplier is 100 and it is included twice, look above line.
  13014.  
  13015. (try_for_range, ":flag_no", 0, "$g_number_of_flags"),
  13016. (store_add, ":cur_flag_owner_slot", multi_data_flag_owner_begin, ":flag_no"),
  13017. (troop_get_slot, ":cur_flag_owner", "trp_multiplayer_data", ":cur_flag_owner_slot"),
  13018.  
  13019. (scene_prop_get_instance, ":pole_id", "spr_headquarters_pole_code_only", ":flag_no"),
  13020. (prop_instance_get_position, pos0, ":pole_id"),
  13021.  
  13022. (try_begin),
  13023. (eq, ":cur_flag_owner", 1),
  13024. (scene_prop_get_instance, ":flag_of_team_1", "$team_1_flag_scene_prop", ":flag_no"),
  13025.  
  13026. (prop_instance_get_position, pos1, ":flag_of_team_1"),
  13027. (get_sq_distance_between_positions, ":flag_height_sq", pos0, pos1),
  13028. (ge, ":flag_height_sq", ":maximum_moved_flag_distance_sq"),
  13029.  
  13030. (set_spawn_effector_scene_prop_id, ":assigned_flag_count", ":flag_of_team_1"),
  13031. (val_add, ":assigned_flag_count", 1),
  13032. (else_try),
  13033. (eq, ":cur_flag_owner", 2),
  13034. (scene_prop_get_instance, ":flag_of_team_2", "$team_2_flag_scene_prop", ":flag_no"),
  13035.  
  13036. (prop_instance_get_position, pos1, ":flag_of_team_2"),
  13037. (get_sq_distance_between_positions, ":flag_height_sq", pos0, pos1),
  13038. (ge, ":flag_height_sq", ":maximum_moved_flag_distance_sq"),
  13039.  
  13040. (set_spawn_effector_scene_prop_id, ":assigned_flag_count", ":flag_of_team_2"),
  13041. (val_add, ":assigned_flag_count", 1),
  13042. (try_end),
  13043. (try_end),
  13044. (set_spawn_effector_scene_prop_id, ":assigned_flag_count", -1),
  13045. (try_end),
  13046.  
  13047. (multiplayer_find_spawn_point, reg0, ":team_no", ":flags"),
  13048. ]),
  13049.  
  13050. # script_multiplayer_find_spawn_point_2
  13051. # Input: arg1 = team_no, arg2 = examine_all_spawn_points, arg3 = is_horseman
  13052. # Output: reg0 = entry_point_no
  13053. ("multiplayer_find_spawn_point_2",
  13054. [
  13055. (store_script_param, ":team_no", 1),
  13056. (store_script_param, ":examine_all_spawn_points", 2), #0-dm, 1-tdm, 2-cf, 3-hq, 4-sg
  13057. (store_script_param, ":is_horseman", 3), #0:no, 1:yes, -1:do not care
  13058.  
  13059. (assign, ":best_entry_point_score", -10000000),
  13060. (assign, ":best_entry_point", 0),
  13061.  
  13062. (assign, ":num_operations", 0),
  13063.  
  13064. (assign, ":num_human_agents_div_3_plus_one", 0),
  13065. (try_begin), #counting number of agents
  13066. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13067. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters),
  13068. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13069. (try_for_agents, ":i_agent"),
  13070. (agent_is_alive, ":i_agent"),
  13071. (agent_is_human, ":i_agent"),
  13072. (val_add, ":num_human_agents_div_3_plus_one", 1),
  13073. (try_end),
  13074. (try_end),
  13075.  
  13076. (assign, ":num_human_agents_plus_one", ":num_human_agents_div_3_plus_one"),
  13077.  
  13078. (try_begin),
  13079. (le, ":num_human_agents_plus_one", 4),
  13080. (assign, ":random_number_upper_limit", 2), #this is not typo-mistake this should be 2 too, not 1.
  13081. (else_try),
  13082. (le, ":num_human_agents_plus_one", 8),
  13083. (assign, ":random_number_upper_limit", 2),
  13084. (else_try),
  13085. (le, ":num_human_agents_plus_one", 16),
  13086. (assign, ":random_number_upper_limit", 3),
  13087. (else_try),
  13088. (le, ":num_human_agents_plus_one", 24),
  13089. (assign, ":random_number_upper_limit", 4),
  13090. (else_try),
  13091. (le, ":num_human_agents_plus_one", 32),
  13092. (assign, ":random_number_upper_limit", 5),
  13093. (else_try),
  13094. (le, ":num_human_agents_plus_one", 40),
  13095. (assign, ":random_number_upper_limit", 6),
  13096. (else_try),
  13097. (assign, ":random_number_upper_limit", 7),
  13098. (try_end),
  13099.  
  13100. (val_div, ":num_human_agents_div_3_plus_one", 3),
  13101. (val_add, ":num_human_agents_div_3_plus_one", 1),
  13102. (store_mul, ":negative_num_human_agents_div_3_plus_one", ":num_human_agents_div_3_plus_one", -1),
  13103.  
  13104. (try_begin),
  13105. (eq, ":examine_all_spawn_points", 1),
  13106. (assign, ":random_number_upper_limit", 1),
  13107. (try_end),
  13108.  
  13109. (try_begin), #counting number of our flags and enemy flags
  13110. (eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters),
  13111. (assign, ":our_flag_count", 0),
  13112. (assign, ":enemy_flag_count", 0),
  13113. (try_for_range, ":flag_no", 0, "$g_number_of_flags"),
  13114. (store_add, ":cur_flag_owner_slot", multi_data_flag_owner_begin, ":flag_no"),
  13115. (troop_get_slot, ":cur_flag_owner", "trp_multiplayer_data", ":cur_flag_owner_slot"),
  13116. (neq, ":cur_flag_owner", 0),
  13117. (val_sub, ":cur_flag_owner", 1),
  13118. (try_begin),
  13119. (eq, ":cur_flag_owner", ":team_no"),
  13120. (val_add, ":our_flag_count", 1),
  13121. (else_try),
  13122. (val_add, ":enemy_flag_count", 1),
  13123. (try_end),
  13124. (try_end),
  13125. (try_end),
  13126.  
  13127. (assign, ":first_agent", 0),
  13128. (try_begin), #first spawned agents will be spawned at their base points in tdm, cf and hq mods.
  13129. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch),
  13130. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13131. (eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters),
  13132. (try_begin),
  13133. (eq, ":team_no", 0),
  13134. (eq, "$g_multiplayer_team_1_first_spawn", 1),
  13135. (assign, ":first_agent", 1),
  13136. (assign, "$g_multiplayer_team_1_first_spawn", 0),
  13137. (else_try),
  13138. (eq, ":team_no", 1),
  13139. (eq, "$g_multiplayer_team_2_first_spawn", 1),
  13140. (assign, ":first_agent", 1),
  13141. (assign, "$g_multiplayer_team_2_first_spawn", 0),
  13142. (try_end),
  13143. (try_end),
  13144.  
  13145. (try_begin),
  13146. (eq, ":first_agent", 1),
  13147. (store_mul, ":best_entry_point", ":team_no", multi_num_valid_entry_points_div_2),
  13148. (else_try),
  13149. (try_for_range, ":i_entry_point", 0, multi_num_valid_entry_points),
  13150. (assign, ":minimum_enemy_distance", 3000),
  13151. (assign, ":second_minimum_enemy_distance", 3000),
  13152.  
  13153. (assign, ":entry_point_score", 0),
  13154. (store_random_in_range, ":random_value", 0, ":random_number_upper_limit"), #in average it is 5
  13155. (eq, ":random_value", 0),
  13156. (entry_point_get_position, pos0, ":i_entry_point"), #pos0 holds current entry point position
  13157. (try_for_agents, ":i_agent"),
  13158. (agent_is_alive, ":i_agent"),
  13159. (agent_is_human, ":i_agent"),
  13160. (agent_get_team, ":agent_team", ":i_agent"),
  13161. (try_begin),
  13162. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch),
  13163. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13164. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters),
  13165. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13166. (try_begin),
  13167. (teams_are_enemies, ":team_no", ":agent_team"),
  13168. (assign, ":multiplier", -2),
  13169. (else_try),
  13170. (assign, ":multiplier", 1),
  13171. (try_end),
  13172. (else_try),
  13173. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
  13174. (eq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  13175. (assign, ":multiplier", -1),
  13176. (try_end),
  13177. (agent_get_position, pos1, ":i_agent"),
  13178. (get_distance_between_positions_in_meters, ":distance", pos0, pos1),
  13179. (val_add, ":num_operations", 1),
  13180. (try_begin),
  13181. (try_begin), #find closest enemy soldiers
  13182. (lt, ":multiplier", 0),
  13183. (try_begin),
  13184. (lt, ":distance", ":minimum_enemy_distance"),
  13185. (assign, ":second_minimum_enemy_distance", ":minimum_enemy_distance"),
  13186. (assign, ":minimum_enemy_distance", ":distance"),
  13187. (else_try),
  13188. (lt, ":distance", ":second_minimum_enemy_distance"),
  13189. (assign, ":second_minimum_enemy_distance", ":distance"),
  13190. (try_end),
  13191. (try_end),
  13192.  
  13193. (lt, ":distance", 100),
  13194. (try_begin), #do not spawn over or too near to another agent (limit is 2 meters, squared 4 meters)
  13195. (lt, ":distance", 3),
  13196. (try_begin),
  13197. (this_or_next|eq, ":examine_all_spawn_points", 0),
  13198. (this_or_next|lt, ":multiplier", 0), #new added 20.08.08
  13199. (neq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13200. (try_begin),
  13201. (lt, ":distance", 1),
  13202. (assign, ":dist_point", -1000000), #never place
  13203. (else_try),
  13204. (lt, ":distance", 2),
  13205. (try_begin),
  13206. (lt, ":multiplier", 0),
  13207. (assign, ":dist_point", -20000),
  13208. (else_try),
  13209. (assign, ":dist_point", -2000), #can place, friend and distance is between 1-2 meters
  13210. (try_end),
  13211. (else_try),
  13212. (try_begin),
  13213. (lt, ":multiplier", 0),
  13214. (assign, ":dist_point", -10000),
  13215. (else_try),
  13216. (assign, ":dist_point", -1000), #can place, friend and distance is between 2-3 meters
  13217. (try_end),
  13218. (try_end),
  13219. (else_try),
  13220. #if examinining all spawn points and mod is siege only. This happens in new round start placings.
  13221. (try_begin),
  13222. (lt, ":distance", 1),
  13223. (assign, ":dist_point", -20000), #very hard to place distance is < 1 meter
  13224. (else_try),
  13225. (lt, ":distance", 2),
  13226. (assign, ":dist_point", -2000),
  13227. (else_try),
  13228. (assign, ":dist_point", -1000), #can place, distance is between 2-3 meters
  13229. (try_end),
  13230. (try_end),
  13231.  
  13232. (val_mul, ":dist_point", ":num_human_agents_div_3_plus_one"),
  13233. (else_try),
  13234. (assign, ":dist_point", 0),
  13235. (this_or_next|neq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13236. (this_or_next|lt, ":multiplier", 0),
  13237. (eq, ":team_no", 1), #only attackers are effected by positive enemy & friend distance at siege mod, defenders only get negative score effect a bit
  13238.  
  13239. (try_begin), #in siege give no positive or negative score to > 40m distance. (6400 = 10000 - 3600(60 * 60))
  13240. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13241.  
  13242. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch), #new added after moving below part to above
  13243. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_duel), #new added after moving below part to above
  13244. (eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch), #new added after moving below part to above
  13245.  
  13246. (store_sub, ":dist_point", multiplayer_spawn_min_enemy_dist_limit, ":distance"), #up to 40 meters give (positive(if friend) or negative(if enemy)) points
  13247. (val_max, ":dist_point", 0),
  13248. (val_mul, ":dist_point", ":dist_point"),
  13249. (else_try),
  13250. (store_mul, ":one_and_half_limit", multiplayer_spawn_min_enemy_dist_limit, 3),
  13251. (val_div, ":one_and_half_limit", 2),
  13252. (store_sub, ":dist_point", ":one_and_half_limit", ":distance"), #up to 60 meters give (positive(if friend) or negative(if enemy)) points
  13253. (val_mul, ":dist_point", ":dist_point"),
  13254. (try_end),
  13255.  
  13256. (val_mul, ":dist_point", ":multiplier"),
  13257. (try_end),
  13258. (val_add, ":entry_point_score", ":dist_point"),
  13259. (try_end),
  13260. (try_end),
  13261.  
  13262. (try_begin),
  13263. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13264. (store_mul, ":max_enabled_agent_distance_score", 1000, ":num_human_agents_div_3_plus_one"),
  13265. (ge, ":entry_point_score", ":max_enabled_agent_distance_score"),
  13266. (assign, ":entry_point_score", ":max_enabled_agent_distance_score"),
  13267. (try_end),
  13268.  
  13269. (try_begin),
  13270. (neq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13271.  
  13272. #(assign, ":minimum_enemy_dist_score", 0), #close also these with displays
  13273. #(assign, ":second_minimum_enemy_dist_score", 0), #close also these with displays
  13274. #(assign, reg2, ":minimum_enemy_distance"), #close also these with displays
  13275. #(assign, reg3, ":second_minimum_enemy_distance"), #close also these with displays
  13276.  
  13277. (try_begin), #if minimum enemy dist score is greater than 40(multiplayer_spawn_above_opt_enemy_dist_point) meters then give negative score
  13278. (lt, ":minimum_enemy_distance", 3000),
  13279. (try_begin),
  13280. (gt, ":minimum_enemy_distance", multiplayer_spawn_above_opt_enemy_dist_point),
  13281. (val_sub, ":minimum_enemy_distance", multiplayer_spawn_above_opt_enemy_dist_point),
  13282. (store_mul, ":minimum_enemy_dist_score", ":minimum_enemy_distance", -50),
  13283. (val_mul, ":minimum_enemy_dist_score", ":num_human_agents_div_3_plus_one"),
  13284. (val_add, ":entry_point_score", ":minimum_enemy_dist_score"),
  13285. (try_end),
  13286. (try_end),
  13287.  
  13288. (try_begin), #if second minimum enemy dist score is greater than 40(multiplayer_spawn_above_opt_enemy_dist_point) meters then give negative score
  13289. (lt, ":second_minimum_enemy_distance", 3000), #3000 x 3000
  13290. (try_begin),
  13291. (gt, ":second_minimum_enemy_distance", multiplayer_spawn_above_opt_enemy_dist_point),
  13292. (val_sub, ":second_minimum_enemy_distance", multiplayer_spawn_above_opt_enemy_dist_point),
  13293. (store_mul, ":second_minimum_enemy_dist_score", ":second_minimum_enemy_distance", -50),
  13294. (val_mul, ":second_minimum_enemy_dist_score", ":num_human_agents_div_3_plus_one"),
  13295. (val_add, ":entry_point_score", ":second_minimum_enemy_dist_score"),
  13296. (try_end),
  13297. (try_end),
  13298.  
  13299. #(assign, reg0, ":minimum_enemy_dist_score"), #close also above assignment lines with these displays
  13300. #(assign, reg1, ":second_minimum_enemy_dist_score"), #close also above assignment lines with these displays
  13301. #(display_message, "@{!}minimum enemy distance : {reg2}, score : {reg0}"), #close also above assignment lines with these displays
  13302. #(display_message, "@{!}second minimum enemy distance : {reg3}, score : {reg1}"), #close also above assignment lines with these displays
  13303. (try_end),
  13304.  
  13305. (try_begin), #giving positive points for "distance of entry point position to ground" while searching for entry point for defender team
  13306. (neq, ":is_horseman", -1), #if being horseman or rider is not (not important)
  13307.  
  13308. #additional score to entry points which has distance to ground value of > 0 meters
  13309. (position_get_distance_to_terrain, ":height_to_terrain", pos0),
  13310. (val_max, ":height_to_terrain", 0),
  13311. (val_min, ":height_to_terrain", 300),
  13312. (ge, ":height_to_terrain", 40),
  13313.  
  13314. (store_mul, ":height_to_terrain_score", ":height_to_terrain", ":num_human_agents_div_3_plus_one"), #it was 8
  13315.  
  13316. (try_begin),
  13317. (eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch),
  13318. (val_mul, ":height_to_terrain_score", 16),
  13319. (else_try),
  13320. (val_mul, ":height_to_terrain_score", 4),
  13321. (try_end),
  13322.  
  13323. (try_begin),
  13324. (eq, ":is_horseman", 0),
  13325. (try_begin),
  13326. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege), #but only in siege mod, defender infantries will get positive points for spawning in high places.
  13327. (eq, ":team_no", 0),
  13328. (val_add, ":entry_point_score", ":height_to_terrain_score"),
  13329. (try_end),
  13330. (else_try),
  13331. (val_mul, ":height_to_terrain_score", 5),
  13332. (val_sub, ":entry_point_score", ":height_to_terrain_score"),
  13333. (try_end),
  13334. (try_end),
  13335.  
  13336. (try_begin), #additional random entry point score at deathmatch, teamdethmatch, capture the flag and siege
  13337. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13338. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
  13339. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
  13340. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13341. (eq, "$g_multiplayer_game_type", multiplayer_game_type_team_deathmatch),
  13342. (try_begin),
  13343. (neq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13344. (store_random_in_range, ":random_value", 0, 400),
  13345.  
  13346. (try_begin),
  13347. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13348. (val_mul, ":random_value", 5),
  13349. (try_end),
  13350. (else_try),
  13351. (eq, ":team_no", 1),
  13352. (store_random_in_range, ":random_value", 0, 600), #siege-attacker
  13353. (else_try),
  13354. (store_random_in_range, ":random_value", 0, 200), #siege-defender
  13355. (try_end),
  13356. (val_mul, ":random_value", ":num_human_agents_div_3_plus_one"),
  13357. (val_add, ":entry_point_score", ":random_value"),
  13358. (try_end),
  13359.  
  13360. (try_begin),
  13361. (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13362. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13363.  
  13364. (try_begin),
  13365. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13366. (try_begin),
  13367. (eq, ":team_no", 0),
  13368. (entry_point_get_position, pos1, multi_base_point_team_1), #our base is at pos1
  13369. (entry_point_get_position, pos2, multi_base_point_team_2), #enemy base is at pos2
  13370. (else_try),
  13371. (entry_point_get_position, pos1, multi_base_point_team_2), #our base is at pos2
  13372. (entry_point_get_position, pos2, multi_base_point_team_1), #enemy base is at pos1
  13373. (try_end),
  13374. (else_try),
  13375. (try_begin), #siege
  13376. (eq, ":team_no", 0),
  13377. (entry_point_get_position, pos1, multi_siege_flag_point), #our base is at pos1 (it was multi_initial_spawn_point_team_1 changed at v622)
  13378. (entry_point_get_position, pos2, multi_initial_spawn_point_team_2), #enemy base is at pos2
  13379. (else_try),
  13380. (entry_point_get_position, pos1, multi_initial_spawn_point_team_2), #our base is at pos2
  13381. (entry_point_get_position, pos2, multi_siege_flag_point), #enemy base is at pos1 (it was multi_initial_spawn_point_team_1 changed at v622)
  13382. (try_end),
  13383. (try_end),
  13384.  
  13385. (try_begin),
  13386. (eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13387. (position_get_z, ":pos0_z", pos0),
  13388. (position_set_z, pos1, ":pos0_z"), #make z of our base same with entry point position z
  13389. (position_set_z, pos2, ":pos0_z"), #make z of enemy base same with entry point position z
  13390. (try_end),
  13391.  
  13392. (get_sq_distance_between_positions_in_meters, ":sq_dist_to_our_base", pos0, pos1),
  13393. (get_sq_distance_between_positions_in_meters, ":sq_dist_to_enemy_base", pos0, pos2),
  13394. (get_distance_between_positions_in_meters, ":dist_to_enemy_base", pos0, pos2),
  13395.  
  13396. #give positive points if this entry point is near to our base.
  13397. (assign, ":dist_to_our_base_point", 0),
  13398. (try_begin), #capture the flag (points for being near to base)
  13399. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13400.  
  13401. (get_distance_between_positions_in_meters, ":dist_to_our_base", pos0, pos1),
  13402. (lt, ":dist_to_our_base", 100),
  13403. (store_sub, ":dist_to_our_base_point", 100, ":dist_to_our_base"),
  13404.  
  13405. (try_begin), #assign all 75-100's to 75
  13406. (gt, ":dist_to_our_base_point", 75),
  13407. (assign, ":dist_to_our_base_point", 75),
  13408. (try_end),
  13409.  
  13410. (val_mul, ":dist_to_our_base_point", 50), #0..5000 (increase is linear)
  13411.  
  13412. (val_mul, ":dist_to_our_base_point", ":num_human_agents_div_3_plus_one"),
  13413. (else_try), #siege (points for being near to base)
  13414. (lt, ":sq_dist_to_our_base", 10000), #in siege give entry points score until 100m distance is reached
  13415. (try_begin),
  13416. (eq, ":team_no", 0),
  13417. (try_begin),
  13418. (lt, ":sq_dist_to_our_base", 2500), #if distance is < 50m in siege give all highest point possible
  13419. (assign, ":sq_dist_to_our_base", 0),
  13420. (else_try),
  13421. (val_sub, ":sq_dist_to_our_base", 2500),
  13422. (val_mul, ":sq_dist_to_our_base", 2),
  13423. (try_end),
  13424. (try_end),
  13425.  
  13426. (store_sub, ":dist_to_our_base_point", 10000, ":sq_dist_to_our_base"),
  13427.  
  13428. #can be (10000 - (10000 - 2500) * 2) = -5000 (for only defenders) so we are adding this loss.
  13429. (val_add, ":dist_to_our_base_point", 5000), #so score getting from being near to base changes between 0 to 15000
  13430.  
  13431. (try_begin),
  13432. (eq, ":team_no", 0),
  13433. (else_try), #in siege mod for attackers being near to base entry point has 45 times less importance
  13434. (val_div, ":dist_to_our_base_point", 45),
  13435. (try_end),
  13436. (val_mul, ":dist_to_our_base_point", ":num_human_agents_div_3_plus_one"),
  13437. (try_end),
  13438.  
  13439. (val_add, ":entry_point_score", ":dist_to_our_base_point"),
  13440.  
  13441.  
  13442. #give negative points if this entry point is near to enemy base.
  13443. (assign, ":dist_to_enemy_base_point", 0),
  13444. (try_begin), #capture the flag
  13445. (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
  13446.  
  13447. (lt, ":dist_to_enemy_base", 150),
  13448. (store_sub, ":dist_to_enemy_base_point", 150, ":dist_to_enemy_base"),
  13449.  
  13450. (try_begin), #assign 150 to 150 + (150 - 50) * 2 = 350, assign 100 to 100 + (100 - 50) * 2 = 200
  13451. (gt, ":dist_to_enemy_base_point", 50),
  13452. (store_sub, ":dist_to_enemy_base_point_minus_50", ":dist_to_enemy_base_point", 50),
  13453. (val_mul, ":dist_to_enemy_base_point_minus_50", 2),
  13454. (val_add, ":dist_to_enemy_base_point", ":dist_to_enemy_base_point_minus_50"),
  13455. (try_end),
  13456.  
  13457. (val_mul, ":dist_to_enemy_base_point", -50), #-7500(with extras 350 * 50 = -17500)..0 (increase is linear)
  13458.  
  13459. (val_mul, ":dist_to_enemy_base_point", ":num_human_agents_div_3_plus_one"),
  13460. (else_try),
  13461. (this_or_next|neq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13462. (eq, ":team_no", 1),
  13463.  
  13464. (assign, ":dist_to_enemy_base_point", 0),
  13465.  
  13466. (try_begin),
  13467. (neq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
  13468.  
  13469. (try_begin),
  13470. (lt, ":sq_dist_to_enemy_base", 10000),
  13471. (store_sub, ":dist_to_enemy_base_point", 10000, ":sq_dist_to_enemy_base"),
  13472. (val_div, ":dist_to_enemy_base_point", 4),
  13473. (val_mul, ":dist_to_enemy_base_point", ":negative_num_human_agents_div_3_plus_one"),
  13474. (try_end),
  13475. (else_try),
  13476. (val_max, ":dist_to_enemy_base", 60), #<60 meters has all most negative score
  13477.  
  13478. (try_begin),
  13479. (eq, ":is_horseman", 1),
  13480. (assign, ":optimal_distance", 120),
  13481. (else_try),
  13482. (assign, ":optimal_distance", 80),
  13483. (try_end),
  13484.  
  13485. (try_begin),
  13486. (le, ":dist_to_enemy_base", ":optimal_distance"),
  13487. (store_sub, ":dist_to_enemy_base_point", ":optimal_distance", ":dist_to_enemy_base"),
  13488. (val_mul, ":dist_to_enemy_base_point", 180), #-3600 max
  13489. (else_try),
  13490. (store_sub, ":dist_to_enemy_base_point", ":dist_to_enemy_base", ":optimal_distance"),
  13491. (val_mul, ":dist_to_enemy_base_point", 30), #-unlimited max but lower slope
  13492. (try_end),
  13493.  
  13494. (val_sub, ":dist_to_enemy_base_point", 600),
  13495. (val_max, ":dist_to_enemy_base_point", 0),
  13496.  
  13497. (val_mul, ":dist_to_enemy_base_point", ":negative_num_human_agents_div_3_plus_one"),
  13498. (try_end),
  13499. (try_end),
  13500.  
  13501. (val_add, ":entry_point_score", ":dist_to_enemy_base_point"),
  13502. (else_try),
  13503. (eq, "$g_multiplayer_game_type", multiplayer_game_type_headquarters),
  13504.  
  13505. (try_for_range, ":flag_no", 0, "$g_number_of_flags"),
  13506. (store_add, ":cur_flag_owner_slot", multi_data_flag_owner_begin, ":flag_no"),
  13507. (troop_get_slot, ":cur_flag_owner", "trp_multiplayer_data", ":cur_flag_owner_slot"),
  13508. (neq, ":cur_flag_owner", 0),
  13509. (val_sub, ":cur_flag_owner", 1),
  13510.  
  13511. (scene_prop_get_instance, ":pole_id", "spr_headquarters_pole_code_only", ":flag_no"),
  13512. (prop_instance_get_position, pos1, ":pole_id"), #pos1 holds pole position.
  13513.  
  13514. (get_sq_distance_between_positions_in_meters, ":sq_dist_to_cur_pole", pos0, pos1),
  13515. (lt, ":sq_dist_to_cur_pole", 6400),
  13516.  
  13517. (try_begin),
  13518. (eq, ":cur_flag_owner", ":team_no"),
  13519. (store_sub, ":dist_to_flag_point", 6400, ":sq_dist_to_cur_pole"), #up to 80 meters give positive points if entry point is near our base
  13520. (val_mul, ":dist_to_flag_point", 2),
  13521. (val_div, ":dist_to_flag_point", ":our_flag_count"),
  13522. (val_mul, ":dist_to_flag_point", ":num_human_agents_div_3_plus_one"),
  13523. (else_try),
  13524. (store_sub, ":dist_to_flag_point", 6400, ":sq_dist_to_cur_pole"), #up to 80 meters give negative points if entry point is near enemy base
  13525. (val_mul, ":dist_to_flag_point", 2),
  13526. (val_div, ":dist_to_flag_point", ":enemy_flag_count"),
  13527. (val_mul, ":dist_to_flag_point", ":negative_num_human_agents_div_3_plus_one"),
  13528. (try_end),
  13529. (val_add, ":entry_point_score", ":dist_to_flag_point"),
  13530. (try_end),
  13531. (try_end),
  13532.  
  13533. #(assign, reg1, ":i_entry_point"),
  13534. #(assign, reg2, ":entry_point_score"),
  13535. #(display_message, "@{!}entry_no : {reg1} , entry_score : {reg2}"),
  13536.  
  13537. (gt, ":entry_point_score", ":best_entry_point_score"),
  13538. (assign, ":best_entry_point_score", ":entry_point_score"),
  13539. (assign, ":best_entry_point", ":i_entry_point"),
  13540. (try_end),
  13541.  
  13542. #(assign, reg0, ":best_entry_point"),
  13543. #(assign, reg1, ":best_entry_point_score"),
  13544. #(assign, reg2, ":num_operations"),
  13545. #(assign, reg7, ":is_horseman"),
  13546. #(display_message, "@{!},is horse:{reg7}, best entry:{reg0}, best entry score:{reg1}, num_operations:{reg2}"),
  13547. (try_end),
  13548. (assign, reg0, ":best_entry_point"),
  13549. ]),
  13550.  
  13551. #script_multiplayer_buy_agent_equipment
  13552. # Input: arg1 = player_no
  13553. # Output: none
  13554. ("multiplayer_buy_agent_equipment",
  13555. [
  13556. (store_script_param, ":player_no", 1),
  13557. (player_get_troop_id, ":player_troop", ":player_no"),
  13558. (player_get_gold, ":player_gold", ":player_no"),
  13559. (player_get_slot, ":added_gold", ":player_no", slot_player_last_rounds_used_item_earnings),
  13560. (player_set_slot, ":player_no", slot_player_last_rounds_used_item_earnings, 0),
  13561. (val_add, ":player_gold", ":added_gold"),
  13562. (assign, ":armor_bought", 0),
  13563.  
  13564. #moving original values to temp slots
  13565. (try_for_range, ":i_item", slot_player_selected_item_indices_begin, slot_player_selected_item_indices_end),
  13566. (player_get_slot, ":selected_item_index", ":player_no", ":i_item"),
  13567. (store_sub, ":i_cur_selected_item", ":i_item", slot_player_selected_item_indices_begin),
  13568. (try_begin),
  13569. (player_item_slot_is_picked_up, ":player_no", ":i_cur_selected_item"),
  13570. (assign, ":selected_item_index", -1),
  13571. (try_end),
  13572. (val_add, ":i_cur_selected_item", slot_player_cur_selected_item_indices_begin),
  13573. (player_set_slot, ":player_no", ":i_cur_selected_item", ":selected_item_index"),
  13574. (try_end),
  13575. (assign, ":end_cond", 1000),
  13576. (try_for_range, ":unused", 0, ":end_cond"),
  13577. (call_script, "script_multiplayer_calculate_cur_selected_items_cost", ":player_no", 0),
  13578. (assign, ":total_cost", reg0),
  13579. (try_begin),
  13580. (gt, ":total_cost", ":player_gold"),
  13581. #downgrade one of the selected items
  13582. #first normalize the prices
  13583. #then prioritize some of the weapon classes for specific troop classes
  13584. (call_script, "script_multiplayer_get_troop_class", ":player_troop"),
  13585. (assign, ":player_troop_class", reg0),
  13586.  
  13587. (assign, ":max_cost_value", 0),
  13588. (assign, ":max_cost_value_index", -1),
  13589. (try_for_range, ":i_item", slot_player_cur_selected_item_indices_begin, slot_player_cur_selected_item_indices_end),
  13590. (player_get_slot, ":item_id", ":player_no", ":i_item"),
  13591. (ge, ":item_id", 0), #might be -1 for horses etc.
  13592. (call_script, "script_multiplayer_get_item_value_for_troop", ":item_id", ":player_troop"),
  13593. (assign, ":item_value", reg0),
  13594. (store_sub, ":item_type", ":i_item", slot_player_cur_selected_item_indices_begin),
  13595. (try_begin), #items
  13596. (this_or_next|eq, ":item_type", 0),
  13597. (this_or_next|eq, ":item_type", 1),
  13598. (this_or_next|eq, ":item_type", 2),
  13599. (eq, ":item_type", 3),
  13600. (val_mul, ":item_value", 5),
  13601. (else_try), #head
  13602. (eq, ":item_type", 4),
  13603. (val_mul, ":item_value", 4),
  13604. (else_try), #body
  13605. (eq, ":item_type", 5),
  13606. (val_mul, ":item_value", 2),
  13607. (else_try), #foot
  13608. (eq, ":item_type", 6),
  13609. (val_mul, ":item_value", 8),
  13610. (else_try), #gloves
  13611. (eq, ":item_type", 7),
  13612. (val_mul, ":item_value", 8),
  13613. (else_try), #horse
  13614. #base value (most expensive)
  13615. (try_end),
  13616. (item_get_slot, ":item_class", ":item_id", slot_item_multiplayer_item_class),
  13617. (try_begin),
  13618. (eq, ":player_troop_class", multi_troop_class_infantry),
  13619. (this_or_next|eq, ":item_class", multi_item_class_type_sword),
  13620. (this_or_next|eq, ":item_class", multi_item_class_type_axe),
  13621. (this_or_next|eq, ":item_class", multi_item_class_type_blunt),
  13622. (this_or_next|eq, ":item_class", multi_item_class_type_war_picks),
  13623. (this_or_next|eq, ":item_class", multi_item_class_type_two_handed_sword),
  13624. (this_or_next|eq, ":item_class", multi_item_class_type_small_shield),
  13625. (eq, ":item_class", multi_item_class_type_two_handed_axe),
  13626. (val_div, ":item_value", 2),
  13627. (else_try),
  13628. (eq, ":player_troop_class", multi_troop_class_spearman),
  13629. (this_or_next|eq, ":item_class", multi_item_class_type_spear),
  13630. (eq, ":item_class", multi_item_class_type_large_shield),
  13631. (val_div, ":item_value", 2),
  13632. (else_try),
  13633. (eq, ":player_troop_class", multi_troop_class_cavalry),
  13634. (this_or_next|eq, ":item_class", multi_item_class_type_lance),
  13635. (this_or_next|eq, ":item_class", multi_item_class_type_sword),
  13636. (eq, ":item_class", multi_item_class_type_horse),
  13637. (val_div, ":item_value", 2),
  13638. (else_try),
  13639. (eq, ":player_troop_class", multi_troop_class_archer),
  13640. (this_or_next|eq, ":item_class", multi_item_class_type_bow),
  13641. (eq, ":item_class", multi_item_class_type_arrow),
  13642. (val_div, ":item_value", 2),
  13643. (else_try),
  13644. (eq, ":player_troop_class", multi_troop_class_crossbowman),
  13645. (this_or_next|eq, ":item_class", multi_item_class_type_crossbow),
  13646. (eq, ":item_class", multi_item_class_type_bolt),
  13647. (val_div, ":item_value", 2),
  13648. (else_try),
  13649. (eq, ":player_troop_class", multi_troop_class_mounted_archer),
  13650. (this_or_next|eq, ":item_class", multi_item_class_type_bow),
  13651. (this_or_next|eq, ":item_class", multi_item_class_type_arrow),
  13652. (eq, ":item_class", multi_item_class_type_horse),
  13653. (val_div, ":item_value", 2),
  13654. (else_try),
  13655. (eq, ":player_troop_class", multi_troop_class_mounted_crossbowman),
  13656. (this_or_next|eq, ":item_class", multi_item_class_type_crossbow),
  13657. (this_or_next|eq, ":item_class", multi_item_class_type_bolt),
  13658. (eq, ":item_class", multi_item_class_type_horse),
  13659. (val_div, ":item_value", 2),
  13660. (try_end),
  13661.  
  13662. (try_begin),
  13663. (gt, ":item_value", ":max_cost_value"),
  13664. (assign, ":max_cost_value", ":item_value"),
  13665. (assign, ":max_cost_value_index", ":i_item"),
  13666. (try_end),
  13667. (try_end),
  13668.  
  13669. #max_cost_value and max_cost_value_index will definitely be valid
  13670. #unless no items are left (therefore some items must cost 0 gold)
  13671. (player_get_slot, ":item_id", ":player_no", ":max_cost_value_index"),
  13672. (call_script, "script_multiplayer_get_previous_item_for_item_and_troop", ":item_id", ":player_troop"),
  13673. (assign, ":item_id", reg0),
  13674. (player_set_slot, ":player_no", ":max_cost_value_index", ":item_id"),
  13675. (else_try),
  13676. (assign, ":end_cond", 0),
  13677. (val_sub, ":player_gold", ":total_cost"),
  13678. (player_set_gold, ":player_no", ":player_gold", multi_max_gold_that_can_be_stored),
  13679. (try_for_range, ":i_item", slot_player_cur_selected_item_indices_begin, slot_player_cur_selected_item_indices_end),
  13680. (player_get_slot, ":item_id", ":player_no", ":i_item"),
  13681. #checking if different class default item replace is needed for weapons
  13682. (try_begin),
  13683. (ge, ":item_id", 0),
  13684. #then do nothing
  13685. (else_try),
  13686. (store_sub, ":base_index_slot", ":i_item", slot_player_cur_selected_item_indices_begin),
  13687. (store_add, ":selected_item_index_slot", ":base_index_slot", slot_player_selected_item_indices_begin),
  13688. (player_get_slot, ":selected_item_index", ":player_no", ":selected_item_index_slot"),
  13689. (this_or_next|eq, ":selected_item_index", -1),
  13690. (player_item_slot_is_picked_up, ":player_no", ":base_index_slot"),
  13691. #then do nothing
  13692. (else_try),
  13693. #an item class without a default value is -1, then find a default weapon
  13694. (item_get_slot, ":item_class", ":selected_item_index", slot_item_multiplayer_item_class),
  13695. (is_between, ":item_class", multi_item_class_type_weapons_begin, multi_item_class_type_weapons_end),
  13696. (assign, ":dc_replaced_item", -1),
  13697. (try_for_range, ":i_dc_item_class", multi_item_class_type_melee_weapons_begin, multi_item_class_type_melee_weapons_end),
  13698. (lt, ":dc_replaced_item", 0),
  13699. (assign, ":dc_item_class_used", 0),
  13700. (try_for_range, ":i_dc_item", slot_player_cur_selected_item_indices_begin, slot_player_cur_selected_item_indices_end),
  13701. (player_get_slot, ":dc_cur_item", ":player_no", ":i_dc_item"),
  13702. (ge, ":dc_cur_item", 0),
  13703. (item_get_slot, ":dc_item_class", ":dc_cur_item", slot_item_multiplayer_item_class),
  13704. (eq, ":dc_item_class", ":i_dc_item_class"),
  13705. (assign, ":dc_item_class_used", 1),
  13706. (try_end),
  13707. (eq, ":dc_item_class_used", 0),
  13708. (assign, ":dc_end_cond", all_items_end),
  13709. (try_for_range, ":i_dc_new_item", all_items_begin, ":dc_end_cond"),
  13710. (item_slot_eq, ":i_dc_new_item", slot_item_multiplayer_item_class, ":i_dc_item_class"),
  13711. (call_script, "script_cf_multiplayer_is_item_default_for_troop", ":i_dc_new_item", ":player_troop"),
  13712. (assign, ":dc_end_cond", 0), #break
  13713. (assign, ":dc_replaced_item", ":i_dc_new_item"),
  13714. (try_end),
  13715. (try_end),
  13716. (ge, ":dc_replaced_item", 0),
  13717. (player_set_slot, ":player_no", ":i_item", ":dc_replaced_item"),
  13718. (assign, ":item_id", ":dc_replaced_item"),
  13719. (try_end),
  13720.  
  13721. #finally, add the item to agent
  13722. (try_begin),
  13723. (ge, ":item_id", 0), #might be -1 for horses etc.
  13724. (store_sub, ":item_slot", ":i_item", slot_player_cur_selected_item_indices_begin),
  13725. (player_add_spawn_item, ":player_no", ":item_slot", ":item_id"),
  13726. (try_begin),
  13727. (eq, ":item_slot", ek_body), #ek_body is the slot for armor
  13728. (assign, ":armor_bought", 1),
  13729. (try_end),
  13730. (try_end),
  13731. (try_end),
  13732.  
  13733. (player_set_slot, ":player_no", slot_player_total_equipment_value, ":total_cost"),
  13734. (try_end),
  13735. (try_end),
  13736. (try_begin),
  13737. (eq, ":armor_bought", 0),
  13738. (eq, "$g_multiplayer_force_default_armor", 1),
  13739. (assign, ":end_cond", all_items_end),
  13740. (try_for_range, ":i_new_item", all_items_begin, ":end_cond"),
  13741. (this_or_next|item_slot_eq, ":i_new_item", slot_item_multiplayer_item_class, multi_item_class_type_light_armor),
  13742. (this_or_next|item_slot_eq, ":i_new_item", slot_item_multiplayer_item_class, multi_item_class_type_medium_armor),
  13743. (item_slot_eq, ":i_new_item", slot_item_multiplayer_item_class, multi_item_class_type_heavy_armor),
  13744. (call_script, "script_cf_multiplayer_is_item_default_for_troop", ":i_new_item", ":player_troop"),
  13745. (assign, ":end_cond", 0), #break
  13746. (player_add_spawn_item, ":player_no", ek_body, ":i_new_item"), #ek_body is the slot for armor
  13747. (try_end),
  13748. (try_end),
  13749. ]),
  13750.  
  13751. # script_party_get_ideal_size @used for NPC parties.
  13752. # Input: arg1 = party_no
  13753. # Output: reg0: ideal size
  13754. ("party_get_ideal_size",
  13755. [
  13756. (store_script_param_1, ":party_no"),
  13757.  
  13758. #default limit is 30 for any party
  13759. (assign, ":limit", 30),
  13760.  
  13761. (try_begin),
  13762. (party_slot_eq, ":party_no", slot_party_type, spt_kingdom_hero_party),
  13763. (party_stack_get_troop_id, ":party_leader", ":party_no", 0),
  13764. (store_faction_of_party, ":faction_id", ":party_no"),
  13765.  
  13766. #default limit is 10 for kingdom lords
  13767. (assign, ":limit", 10),
  13768.  
  13769. #each (leadership level) gives 5 to limit
  13770. (store_skill_level, ":skill", "skl_leadership", ":party_leader"),
  13771. (store_attribute_level, ":charisma", ":party_leader", ca_charisma),
  13772. (val_mul, ":skill", 5),
  13773. (val_add, ":limit", ":skill"),
  13774.  
  13775. #each (charisma level) gives 1 to limit
  13776. (val_add, ":limit", ":charisma"),
  13777.  
  13778. #each (25 renown) gives 1 to limit
  13779. (troop_get_slot, ":troop_renown", ":party_leader", slot_troop_renown),
  13780. (store_div, ":renown_bonus", ":troop_renown", 25),
  13781. (val_add, ":limit", ":renown_bonus"),
  13782.  
  13783. #if this party is faction leader it takes additional 100 limit
  13784. (try_begin),
  13785. (faction_slot_eq, ":faction_id", slot_faction_leader, ":party_leader"),
  13786. (val_add, ":limit", 100),
  13787. (try_end),
  13788.  
  13789. #if this party is faction marshall it takes additional 20 limit
  13790. (try_begin),
  13791. (faction_slot_eq, ":faction_id", slot_faction_marshall, ":party_leader"),
  13792. (val_add, ":limit", 20),
  13793. (try_end),
  13794.  
  13795. #party takes additional 20 limit per each castle it's party leader owns
  13796. (try_for_range, ":cur_center", castles_begin, castles_end),
  13797. (party_slot_eq, ":cur_center", slot_town_lord, ":party_leader"),
  13798. (val_add, ":limit", 20),
  13799. (try_end),
  13800. (try_end),
  13801.  
  13802. #if player has level of 0 then ideal limit will be exactly same, if player has level of 80 then ideal limit will be multiplied by 2 ((80 + 80) / 80)
  13803. #below code will increase limits a little as the game progresses and player gains level
  13804. (store_character_level, ":level", "trp_player"),
  13805. (val_min, ":level", 80),
  13806. (store_add, ":level_factor", 80, ":level"),
  13807. (val_mul, ":limit", ":level_factor"),
  13808. (val_div, ":limit", 80),
  13809. (assign, reg0, ":limit"),
  13810. ]),
  13811.  
  13812.  
  13813. #script_game_get_party_prisoner_limit:
  13814. # This script is called from the game engine when the prisoner limit is needed for a party.
  13815. # INPUT: arg1 = party_no
  13816. # OUTPUT: reg0 = prisoner_limit
  13817. ("game_get_party_prisoner_limit",
  13818. [
  13819. # (store_script_param_1, ":party_no"),
  13820. (assign, ":troop_no", "trp_player"),
  13821.  
  13822. (assign, ":limit", 0),
  13823. (store_skill_level, ":skill", "skl_prisoner_management", ":troop_no"),
  13824. (store_mul, ":limit", ":skill", 5),
  13825. (assign, reg0, ":limit"),
  13826. (set_trigger_result, reg0),
  13827. ]),
  13828.  
  13829. #script_game_get_item_extra_text:
  13830. # This script is called from the game engine when an item's properties are displayed.
  13831. # INPUT: arg1 = item_no, arg2 = extra_text_id (this can be between 0-7 (7 included)), arg3 = item_modifier
  13832. # OUTPUT: result_string = item extra text, trigger_result = text color (0 for default)
  13833. ("game_get_item_extra_text",
  13834. [
  13835. (store_script_param, ":item_no", 1),
  13836. (store_script_param, ":extra_text_id", 2),
  13837. (store_script_param, ":item_modifier", 3),
  13838. (try_begin),
  13839. (is_between, ":item_no", food_begin, food_end),
  13840. (try_begin),
  13841. (eq, ":extra_text_id", 0),
  13842. (assign, ":continue", 1),
  13843. (try_begin),
  13844. (this_or_next|eq, ":item_no", "itm_cattle_meat"),
  13845. (this_or_next|eq, ":item_no", "itm_pork"),
  13846. (eq, ":item_no", "itm_chicken"),
  13847.  
  13848. (eq, ":item_modifier", imod_rotten),
  13849. (assign, ":continue", 0),
  13850. (try_end),
  13851. (eq, ":continue", 1),
  13852. (item_get_slot, ":food_bonus", ":item_no", slot_item_food_bonus),
  13853. (assign, reg1, ":food_bonus"),
  13854. (set_result_string, "@+{reg1} to party morale"),
  13855. (set_trigger_result, 0x4444FF),
  13856. (try_end),
  13857. (else_try),
  13858. (is_between, ":item_no", readable_books_begin, readable_books_end),
  13859. (try_begin),
  13860. (eq, ":extra_text_id", 0),
  13861. (item_get_slot, reg1, ":item_no", slot_item_intelligence_requirement),
  13862. (set_result_string, "@Requires {reg1} intelligence to read"),
  13863. (set_trigger_result, 0xFFEEDD),
  13864. (else_try),
  13865. (eq, ":extra_text_id", 1),
  13866. (item_get_slot, ":progress", ":item_no", slot_item_book_reading_progress),
  13867. (val_div, ":progress", 10),
  13868. (assign, reg1, ":progress"),
  13869. (set_result_string, "@Reading Progress: {reg1}%"),
  13870. (set_trigger_result, 0xFFEEDD),
  13871. (try_end),
  13872. (else_try),
  13873. (is_between, ":item_no", reference_books_begin, reference_books_end),
  13874. (try_begin),
  13875. (eq, ":extra_text_id", 0),
  13876. (try_begin),
  13877. (eq, ":item_no", "itm_book_wound_treatment_reference"),
  13878. (str_store_string, s1, "@wound treament"),
  13879. (else_try),
  13880. (eq, ":item_no", "itm_book_training_reference"),
  13881. (str_store_string, s1, "@trainer"),
  13882. (else_try),
  13883. (eq, ":item_no", "itm_book_surgery_reference"),
  13884. (str_store_string, s1, "@surgery"),
  13885. (try_end),
  13886. (set_result_string, "@+1 to {s1} while in inventory"),
  13887. (set_trigger_result, 0xFFEEDD),
  13888. (try_end),
  13889. (try_end),
  13890. ]),
  13891.  
  13892. #script_game_on_disembark:
  13893. # This script is called from the game engine when the player reaches the shore with a ship.
  13894. # INPUT: pos0 = disembark position
  13895. # OUTPUT: none
  13896. ("game_on_disembark",
  13897. [(jump_to_menu, "mnu_disembark"),
  13898. ]),
  13899.  
  13900.  
  13901. #script_game_context_menu_get_buttons:
  13902. # This script is called from the game engine when the player clicks the right mouse button over a party on the map.
  13903. # INPUT: arg1 = party_no
  13904. # OUTPUT: none, fills the menu buttons
  13905. ("game_context_menu_get_buttons",
  13906. [
  13907. (store_script_param, ":party_no", 1),
  13908. (try_begin),
  13909. (neq, ":party_no", "p_main_party"),
  13910. (context_menu_add_item, "@Move here", cmenu_move),
  13911. (try_end),
  13912.  
  13913. (try_begin),
  13914. (is_between, ":party_no", centers_begin, centers_end),
  13915. (context_menu_add_item, "@View notes", 1),
  13916. (else_try),
  13917. (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
  13918. (gt, ":num_stacks", 0),
  13919. (party_stack_get_troop_id, ":troop_no", ":party_no", 0),
  13920. (is_between, ":troop_no", active_npcs_begin, active_npcs_end),
  13921. (context_menu_add_item, "@View notes", 2),
  13922. (try_end),
  13923.  
  13924. (try_begin),
  13925. (neq, ":party_no", "p_main_party"),
  13926. (store_faction_of_party, ":party_faction", ":party_no"),
  13927.  
  13928. (this_or_next|eq, ":party_faction", "$players_kingdom"),
  13929. (this_or_next|eq, ":party_faction", "fac_player_supporters_faction"),
  13930. (party_slot_eq, ":party_no", slot_party_type, spt_kingdom_caravan),
  13931.  
  13932. (neg|is_between, ":party_no", centers_begin, centers_end),
  13933.  
  13934. (context_menu_add_item, "@Accompany", cmenu_follow),
  13935. (try_end),
  13936. ]),
  13937.  
  13938. #script_game_event_context_menu_button_clicked:
  13939. # This script is called from the game engine when the player clicks on a button at the right mouse menu.
  13940. # INPUT: arg1 = party_no, arg2 = button_value
  13941. # OUTPUT: none
  13942. ("game_event_context_menu_button_clicked",
  13943. [(store_script_param, ":party_no", 1),
  13944. (store_script_param, ":button_value", 2),
  13945. (try_begin),
  13946. (eq, ":button_value", 1),
  13947. (change_screen_notes, 3, ":party_no"),
  13948. (else_try),
  13949. (eq, ":button_value", 2),
  13950. (party_stack_get_troop_id, ":troop_no", ":party_no", 0),
  13951. (change_screen_notes, 1, ":troop_no"),
  13952. (try_end),
  13953. ]),
  13954.  
  13955. #script_game_get_skill_modifier_for_troop
  13956. # This script is called from the game engine when a skill's modifiers are needed
  13957. # INPUT: arg1 = troop_no, arg2 = skill_no
  13958. # OUTPUT: trigger_result = modifier_value
  13959. ("game_get_skill_modifier_for_troop",
  13960. [(store_script_param, ":troop_no", 1),
  13961. (store_script_param, ":skill_no", 2),
  13962. (assign, ":modifier_value", 0),
  13963. (try_begin),
  13964. (eq, ":skill_no", "skl_wound_treatment"),
  13965. (call_script, "script_get_troop_item_amount", ":troop_no", "itm_book_wound_treatment_reference"),
  13966. (gt, reg0, 0),
  13967. (val_add, ":modifier_value", 1),
  13968. (else_try),
  13969. (eq, ":skill_no", "skl_trainer"),
  13970. (call_script, "script_get_troop_item_amount", ":troop_no", "itm_book_training_reference"),
  13971. (gt, reg0, 0),
  13972. (val_add, ":modifier_value", 1),
  13973. (else_try),
  13974. (eq, ":skill_no", "skl_surgery"),
  13975. (call_script, "script_get_troop_item_amount", ":troop_no", "itm_book_surgery_reference"),
  13976. (gt, reg0, 0),
  13977. (val_add, ":modifier_value", 1),
  13978. (try_end),
  13979. (set_trigger_result, ":modifier_value"),
  13980. ]),
  13981.  
  13982. # Note to modders: Uncomment these if you'd like to use the following.
  13983.  
  13984. ## #script_game_check_party_sees_party
  13985. ## # This script is called from the game engine when a party is inside the range of another party
  13986. ## # INPUT: arg1 = party_no_seer, arg2 = party_no_seen
  13987. ## # OUTPUT: trigger_result = true or false (1 = true, 0 = false)
  13988. ## ("game_check_party_sees_party",
  13989. ## [
  13990. ## (store_script_param, ":party_no_seer", 1),
  13991. ## (store_script_param, ":party_no_seen", 2),
  13992. ## (set_trigger_result, 1),
  13993. ## ]),
  13994. ##
  13995. ## #script_game_get_party_speed_multiplier
  13996. ## # This script is called from the game engine when a skill's modifiers are needed
  13997. ## # INPUT: arg1 = party_no
  13998. ## # OUTPUT: trigger_result = multiplier (scaled by 100, meaning that giving 100 as the trigger result does not change the party speed)
  13999. ## ("game_get_party_speed_multiplier",
  14000. ## [
  14001. ## (store_script_param, ":party_no", 1),
  14002. ## (set_trigger_result, 100),
  14003. ## ]),
  14004.  
  14005.  
  14006. # script_npc_get_troop_wage
  14007. # This script is called from module system to calculate troop wages for npc parties.
  14008. # Input:
  14009. # param1: troop_id
  14010. # Output: reg0: weekly wage
  14011.  
  14012. ("npc_get_troop_wage",
  14013. [
  14014. (store_script_param_1, ":troop_id"),
  14015. (assign,":wage", 0),
  14016. (try_begin),
  14017. (troop_is_hero, ":troop_id"),
  14018. (else_try),
  14019. (store_character_level, ":wage", ":troop_id"),
  14020. (val_mul, ":wage", ":wage"),
  14021. (val_add, ":wage", 50),
  14022. (val_div, ":wage", 30),
  14023. (troop_is_mounted, ":troop_id"),
  14024. (val_mul, ":wage", 5),
  14025. (val_div, ":wage", 4),
  14026. (try_end),
  14027. (assign, reg0, ":wage"),
  14028. ]),
  14029.  
  14030. #script_setup_talk_info
  14031. # INPUT: $g_talk_troop, $g_talk_troop_relation
  14032. ("setup_talk_info",
  14033. [
  14034. (talk_info_set_relation_bar, "$g_talk_troop_relation"),
  14035. (str_store_troop_name, s61, "$g_talk_troop"),
  14036. (str_store_string, s61, "@{!} {s61}"),
  14037. (assign, reg1, "$g_talk_troop_relation"),
  14038. (str_store_string, s62, "str_relation_reg1"),
  14039. (talk_info_set_line, 0, s61),
  14040. (talk_info_set_line, 1, s62),
  14041. (call_script, "script_describe_relation_to_s63", "$g_talk_troop_relation"),
  14042. (talk_info_set_line, 3, s63),
  14043. ]),
  14044.  
  14045. #NPC companion changes begin
  14046. #script_setup_talk_info_companions
  14047. ("setup_talk_info_companions",
  14048. [
  14049. (call_script, "script_npc_morale", "$g_talk_troop"),
  14050. (assign, ":troop_morale", reg0),
  14051.  
  14052. (talk_info_set_relation_bar, ":troop_morale"),
  14053.  
  14054. (str_store_troop_name, s61, "$g_talk_troop"),
  14055. (str_store_string, s61, "@{!} {s61}"),
  14056. (assign, reg1, ":troop_morale"),
  14057. (str_store_string, s62, "str_morale_reg1"),
  14058. (talk_info_set_line, 0, s61),
  14059. (talk_info_set_line, 1, s62),
  14060. (talk_info_set_line, 3, s63),
  14061. ]),
  14062. #NPC companion changes end
  14063.  
  14064. #script_update_party_creation_random_limits
  14065. # INPUT: none
  14066. ("update_party_creation_random_limits",
  14067. [
  14068. (store_character_level, ":player_level", "trp_player"),
  14069. (store_mul, ":upper_limit", ":player_level", 3),
  14070. (val_add, ":upper_limit", 25),
  14071. (val_min, ":upper_limit", 100),
  14072. (set_party_creation_random_limits, 0, ":upper_limit"),
  14073. (assign, reg0, ":upper_limit"),
  14074. ]),
  14075.  
  14076. #script_set_trade_route_between_centers
  14077. # INPUT:
  14078. # param1: center_no_1
  14079. # param1: center_no_2
  14080. ("set_trade_route_between_centers",
  14081. [(store_script_param, ":center_no_1", 1),
  14082. (store_script_param, ":center_no_2", 2),
  14083. (assign, ":center_1_added", 0),
  14084. (assign, ":center_2_added", 0),
  14085. (try_for_range, ":cur_slot", slot_town_trade_routes_begin, slot_town_trade_routes_end),
  14086. (try_begin),
  14087. (eq, ":center_1_added", 0),
  14088. (party_slot_eq, ":center_no_1", ":cur_slot", 0),
  14089. (party_set_slot, ":center_no_1", ":cur_slot", ":center_no_2"),
  14090. (assign, ":center_1_added", 1),
  14091. (try_end),
  14092. (try_begin),
  14093. (eq, ":center_2_added", 0),
  14094. (party_slot_eq, ":center_no_2", ":cur_slot", 0),
  14095. (party_set_slot, ":center_no_2", ":cur_slot", ":center_no_1"),
  14096. (assign, ":center_2_added", 1),
  14097. (try_end),
  14098. (try_end),
  14099. (try_begin),
  14100. (eq, ":center_1_added", 0),
  14101. (str_store_party_name, s1, ":center_no_1"),
  14102. (display_message, "@{!}DEBUG -- ERROR: More than 15 trade routes are given for {s1}."),
  14103. (try_end),
  14104. (try_begin),
  14105. (eq, ":center_2_added", 0),
  14106. (str_store_party_name, s1, ":center_no_2"),
  14107. (display_message, "@{!}DEBUG -- ERROR: More than 15 trade routes are given for {s1}."),
  14108. (try_end),
  14109. ]),
  14110.  
  14111. #script_center_change_trade_good_production
  14112. # INPUT:
  14113. # param1: center_no
  14114. # param2: item_id
  14115. # param3: production_rate (should be between -100 (for net consumption) and 100 (for net production)
  14116. # param4: randomness (between 0-100)
  14117. #("center_change_trade_good_production",
  14118. # [
  14119. # (display_message, "@CHANGING"),
  14120. # (store_script_param, ":center_no", 1),
  14121. # (store_script_param, ":item_no", 2),
  14122. # (store_script_param, ":production_rate", 3),
  14123. # (store_script_param, ":randomness", 4),
  14124. # (store_random_in_range, ":random_num", 0, ":randomness"),
  14125. # (store_random_in_range, ":random_sign", 0, 2),
  14126. # (try_begin),
  14127. # (eq, ":random_sign", 0),
  14128. # (val_add, ":production_rate", ":random_num"),
  14129. # (else_try),
  14130. # (val_sub, ":production_rate", ":random_num"),
  14131. # (try_end),
  14132. # (val_sub, ":item_no", trade_goods_begin),
  14133. # (val_add, ":item_no", slot_town_trade_good_productions_begin),
  14134. #
  14135. # (party_get_slot, ":old_production_rate", ":center_no", ":item_no"),
  14136. # (val_add, ":production_rate", ":old_production_rate"),
  14137. # (party_set_slot, ":center_no", ":item_no", ":production_rate"),
  14138. # ]),
  14139.  
  14140.  
  14141.  
  14142.  
  14143. ("average_trade_good_prices", #Called from start
  14144. [
  14145. #This should be done by route rather than distance
  14146. (store_sub, ":item_to_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  14147.  
  14148. (try_for_range, ":center_no", towns_begin, towns_end),
  14149. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14150. (is_between, ":center_no", villages_begin, villages_end),
  14151.  
  14152. (try_for_range, ":other_center", centers_begin, centers_end),
  14153. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14154. (is_between, ":center_no", villages_begin, villages_end),
  14155.  
  14156. (neq, ":other_center", ":center_no"),
  14157. (store_distance_to_party_from_party, ":cur_distance", ":center_no", ":other_center"),
  14158. (lt, ":cur_distance", 50), #Reduced from 110
  14159. (store_sub, ":dist_factor", 50, ":cur_distance"),
  14160.  
  14161. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  14162. (store_add, ":cur_good_slot", ":cur_good", ":item_to_slot"),
  14163. (party_get_slot, ":center_price", ":center_no", ":cur_good_slot"),
  14164. (party_get_slot, ":other_center_price", ":other_center", ":cur_good_slot"),
  14165. (store_sub, ":price_dif", ":center_price", ":other_center_price"),
  14166.  
  14167. (assign, ":price_dif_change", ":price_dif"),
  14168.  
  14169. (val_mul ,":price_dif_change", ":dist_factor"),
  14170. (val_div ,":price_dif_change", 1000), #Maximum of 1/20 per center
  14171. (val_add, ":other_center_price", ":price_dif_change"),
  14172. (party_set_slot, ":other_center", ":cur_good_slot", ":other_center_price"),
  14173.  
  14174. (val_sub, ":center_price", ":price_dif_change"),
  14175. (party_set_slot, ":center_no", ":cur_good_slot", ":center_price"),
  14176. (try_end),
  14177. (try_end),
  14178. (try_end),
  14179. ]),
  14180.  
  14181. ("average_trade_good_prices_2", #Called from start
  14182. [
  14183.  
  14184. #This should be done by route rather than distance
  14185. (store_sub, ":item_to_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  14186.  
  14187. (try_for_range, ":center_no", towns_begin, towns_end),
  14188. (try_for_range, ":other_center", centers_begin, centers_end),
  14189. (this_or_next|is_between, ":other_center", towns_begin, towns_end),
  14190. (is_between, ":other_center", villages_begin, villages_end),
  14191.  
  14192. (this_or_next|party_slot_eq, ":other_center", slot_village_market_town, ":center_no"),
  14193. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_1, ":other_center"),
  14194. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_2, ":other_center"),
  14195. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_3, ":other_center"),
  14196. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_4, ":other_center"),
  14197. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_5, ":other_center"),
  14198. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_6, ":other_center"),
  14199. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_7, ":other_center"),
  14200. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_8, ":other_center"),
  14201. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_9, ":other_center"),
  14202. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_10, ":other_center"),
  14203. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_11, ":other_center"),
  14204. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_12, ":other_center"),
  14205. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_13, ":other_center"),
  14206. (this_or_next|party_slot_eq, ":center_no", slot_town_trade_route_14, ":other_center"),
  14207. (party_slot_eq, ":center_no", slot_town_trade_route_15, ":other_center"),
  14208.  
  14209. # (neq, ":other_center", ":center_no"),
  14210. # (store_distance_to_party_from_party, ":cur_distance", ":center_no", ":other_center"),
  14211. # (lt, ":cur_distance", 50), #Reduced from 110
  14212. # (store_sub, ":dist_factor", 50, ":cur_distance"),
  14213.  
  14214. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  14215. (store_add, ":cur_good_slot", ":cur_good", ":item_to_slot"),
  14216. (party_get_slot, ":center_price", ":center_no", ":cur_good_slot"),
  14217. (party_get_slot, ":other_center_price", ":other_center", ":cur_good_slot"),
  14218. (store_sub, ":price_dif", ":center_price", ":other_center_price"),
  14219.  
  14220. (store_div, ":price_dif_change", ":price_dif", 5), #this is done twice, reduced from 4
  14221. # (assign, ":price_dif_change", ":price_dif"),
  14222.  
  14223. # (val_mul ,":price_dif_change", ":dist_factor"),
  14224. # (val_div ,":price_dif_change", 500), #Maximum of 1/10 per center
  14225. (val_add, ":other_center_price", ":price_dif_change"),
  14226. (party_set_slot, ":other_center", ":cur_good_slot", ":other_center_price"),
  14227.  
  14228. (val_sub, ":center_price", ":price_dif_change"),
  14229. (party_set_slot, ":center_no", ":cur_good_slot", ":center_price"),
  14230.  
  14231. (try_end),
  14232. (try_end),
  14233. (try_end),
  14234. ]),
  14235.  
  14236.  
  14237.  
  14238. #script_average_trade_good_productions
  14239. # INPUT: none (called only from game start?)
  14240. #This is currently deprecated, as I was going to try to fine-tune production
  14241. ("average_trade_good_productions",
  14242. [
  14243. (store_sub, ":item_to_slot", slot_town_trade_good_productions_begin, trade_goods_begin),
  14244. (try_for_range, ":center_no", towns_begin, towns_end),
  14245. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14246. (is_between, ":center_no", villages_begin, villages_end),
  14247. (try_for_range, ":other_center", centers_begin, centers_end),
  14248. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14249. (is_between, ":center_no", villages_begin, villages_end),
  14250. (neq, ":other_center", ":center_no"),
  14251. (store_distance_to_party_from_party, ":cur_distance", ":center_no", ":other_center"),
  14252. (lt, ":cur_distance", 110),
  14253. (store_sub, ":dist_factor", 110, ":cur_distance"),
  14254. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  14255. (store_add, ":cur_good_slot", ":cur_good", ":item_to_slot"),
  14256. (party_get_slot, ":center_production", ":center_no", ":cur_good_slot"),
  14257. (party_get_slot, ":other_center_production", ":other_center", ":cur_good_slot"),
  14258. (store_sub, ":prod_dif", ":center_production", ":other_center_production"),
  14259. (gt, ":prod_dif", 0),
  14260. (store_mul, ":prod_dif_change", ":prod_dif", 1),
  14261. ## (try_begin),
  14262. ## (is_between, ":center_no", towns_begin, towns_end),
  14263. ## (is_between, ":other_center", towns_begin, towns_end),
  14264. ## (val_mul, ":cur_distance", 2),
  14265. ## (try_end),
  14266. (val_mul ,":prod_dif_change", ":dist_factor"),
  14267. (val_div ,":prod_dif_change", 110),
  14268. (val_add, ":other_center_production", ":prod_dif_change"),
  14269. (party_set_slot, ":other_center", ":cur_good_slot", ":other_center_production"),
  14270. (try_end),
  14271. (try_end),
  14272. (try_end),
  14273. ]),
  14274.  
  14275. #script_normalize_trade_good_productions
  14276. #Adjusts productions according to the amount of the item produced
  14277. # INPUT: none
  14278. # This currently deprecated, as I was going to try to fine-tune productions
  14279. ("normalize_trade_good_productions",
  14280. [
  14281. (store_sub, ":item_to_slot", slot_town_trade_good_productions_begin, trade_goods_begin),
  14282. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  14283. (assign, ":total_production", 0),
  14284. (assign, ":num_centers", 0),
  14285. (store_add, ":cur_good_slot", ":cur_good", ":item_to_slot"),
  14286. (try_for_range, ":center_no", centers_begin, centers_end),
  14287. (val_add, ":num_centers", 1),
  14288. (try_begin),
  14289. (is_between, ":center_no", towns_begin, towns_end), #each town is weighted as 5 villages...
  14290. (val_add, ":num_centers", 4),
  14291. (try_end),
  14292. (party_get_slot, ":center_production", ":center_no", ":cur_good_slot"),
  14293. (val_add, ":total_production", ":center_production"),
  14294. (try_end),
  14295. (store_div, ":new_production_difference", ":total_production", ":num_centers"),
  14296. (neq, ":new_production_difference", 0),
  14297. (try_for_range, ":center_no", centers_begin, centers_end),
  14298. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14299. (is_between, ":center_no", villages_begin, villages_end),
  14300. (party_get_slot, ":center_production", ":center_no", ":cur_good_slot"),
  14301. (val_sub, ":center_production", ":new_production_difference"),
  14302. (party_set_slot, ":center_no", ":cur_good_slot", ":center_production"),
  14303. (try_end),
  14304. (try_end),
  14305. ]),
  14306.  
  14307. #script_update_trade_good_prices
  14308. # INPUT: none
  14309. ("update_trade_good_prices",
  14310. [
  14311. (try_for_range, ":center_no", centers_begin, centers_end),
  14312. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14313. (is_between, ":center_no", villages_begin, villages_end),
  14314. (call_script, "script_update_trade_good_price_for_party", ":center_no"),
  14315. (try_end),
  14316.  
  14317. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  14318. (assign, ":total_price", 0),
  14319. (assign, ":total_constants", 0),
  14320.  
  14321. (try_for_range, ":center_no", centers_begin, centers_end),
  14322. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14323. (is_between, ":center_no", villages_begin, villages_end),
  14324.  
  14325. (store_sub, ":cur_good_price_slot", ":cur_good", trade_goods_begin),
  14326. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  14327. (party_get_slot, ":cur_price", ":center_no", ":cur_good_price_slot"),
  14328.  
  14329. (try_begin),
  14330. (is_between, ":center_no", towns_begin, towns_end),
  14331. (assign, ":constant", 5),
  14332. (else_try),
  14333. (assign, ":constant", 1),
  14334. (try_end),
  14335.  
  14336. (val_mul, ":cur_price", ":constant"),
  14337.  
  14338. (val_add, ":total_price", ":cur_price"),
  14339. (val_add, ":total_constants", ":constant"),
  14340. (try_end),
  14341.  
  14342. (try_for_range, ":center_no", centers_begin, centers_end),
  14343. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  14344. (is_between, ":center_no", villages_begin, villages_end),
  14345.  
  14346. (store_sub, ":cur_good_price_slot", ":cur_good", trade_goods_begin),
  14347. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  14348. (party_get_slot, ":cur_price", ":center_no", ":cur_good_price_slot"),
  14349.  
  14350. (val_mul, ":cur_price", 1000),
  14351. (val_mul, ":cur_price", ":total_constants"),
  14352. (val_div, ":cur_price", ":total_price"),
  14353.  
  14354. (val_clamp, ":cur_price", minimum_price_factor, maximum_price_factor),
  14355. (party_set_slot, ":center_no", ":cur_good_price_slot", ":cur_price"),
  14356. (try_end),
  14357. (try_end),
  14358. ]),
  14359.  
  14360. #script_update_trade_good_price_for_party
  14361. # INPUT: arg1 = party_no
  14362. #Called once every 72 hours
  14363. ("update_trade_good_price_for_party",
  14364. [
  14365. (store_script_param, ":center_no", 1),
  14366. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  14367. (store_sub, ":cur_good_price_slot", ":cur_good", trade_goods_begin),
  14368. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  14369. (party_get_slot, ":cur_price", ":center_no", ":cur_good_price_slot"),
  14370.  
  14371. (call_script, "script_center_get_production", ":center_no", ":cur_good"),
  14372. (assign, ":production", reg0),
  14373.  
  14374. (call_script, "script_center_get_consumption", ":center_no", ":cur_good"),
  14375. (assign, ":consumption", reg0),
  14376.  
  14377. #OZANDEBUG
  14378. #(assign, reg1, ":production"),
  14379. #(assign, reg2, ":consumption"),
  14380. #(str_store_party_name, s1, ":center_no"),
  14381. #(str_store_item_name, s2, ":cur_good"),
  14382.  
  14383. (val_sub, ":production", ":consumption"),
  14384.  
  14385. #Change average production x 2(1+random(2)) (was average 4, random(8)) for excess demand
  14386. (try_begin),
  14387. #supply is greater than demand
  14388. (gt, ":production", 0),
  14389. (store_mul, ":change_factor", ":production", 1), #price will be decreased by his factor
  14390. (store_random_in_range, ":random_change", 0, ":change_factor"),
  14391. (val_add, ":random_change", ":change_factor"),
  14392. (val_add, ":random_change", ":change_factor"),
  14393.  
  14394. #simulation starts
  14395. (store_sub, ":final_price", ":cur_price", ":random_change"),
  14396. (val_clamp, ":final_price", minimum_price_factor, maximum_price_factor),
  14397. (try_begin), #Excess of supply decelerates over time, as low price reduces output
  14398. #if expected final price is 100 then it will multiply random_change by 0.308x ((100+300)/(1300) = 400/1300).
  14399. (lt, ":final_price", 1000),
  14400. (store_add, ":final_price_plus_300", ":final_price", 300),
  14401. (val_mul, ":random_change", ":final_price_plus_300"),
  14402. (val_div, ":random_change", 1300),
  14403. (try_end),
  14404. (val_sub, ":cur_price", ":random_change"),
  14405. (else_try),
  14406. (lt, ":production", 0),
  14407. (store_sub, ":change_factor", 0, ":production"), #price will be increased by his factor
  14408. (val_mul, ":change_factor", 1),
  14409. (store_random_in_range, ":random_change", 0, ":change_factor"),
  14410. (val_add, ":random_change", ":change_factor"),
  14411. (val_add, ":random_change", ":change_factor"),
  14412. (val_add, ":cur_price", ":random_change"),
  14413. (try_end),
  14414.  
  14415. #Move price towards average by 3%...
  14416. #Equilibrium is 33 cycles, or 100 days
  14417. #Change per cycle is Production x 4
  14418. #Thus, max differential = -5 x 4 x 33 = -660 for -5
  14419. (try_begin),
  14420. (is_between, ":center_no", villages_begin, villages_end),
  14421. (store_sub, ":price_difference", ":cur_price", average_price_factor),
  14422. (val_mul, ":price_difference", 96),
  14423. (val_div, ":price_difference", 100),
  14424. (store_add, ":new_price", average_price_factor, ":price_difference"),
  14425. (else_try),
  14426. (store_sub, ":price_difference", ":cur_price", average_price_factor),
  14427. (val_mul, ":price_difference", 96),
  14428. (val_div, ":price_difference", 100),
  14429. (store_add, ":new_price", average_price_factor, ":price_difference"),
  14430. (try_end),
  14431.  
  14432. #Price of manufactured goods drift towards primary raw material
  14433. (try_begin),
  14434. (item_get_slot, ":raw_material", ":cur_good", slot_item_primary_raw_material),
  14435. (neq, ":raw_material", 0),
  14436. (store_sub, ":raw_material_price_slot", ":raw_material", trade_goods_begin),
  14437. (val_add, ":raw_material_price_slot", slot_town_trade_good_prices_begin),
  14438.  
  14439. (party_get_slot, ":total_raw_material_price", ":center_no", ":raw_material_price_slot"),
  14440. (val_mul, ":total_raw_material_price", 3),
  14441. (assign, ":number_of_centers", 3),
  14442.  
  14443. (try_for_range, ":village_no", villages_begin, villages_end),
  14444. (party_slot_eq, ":village_no", slot_village_bound_center, ":center_no"),
  14445. (party_get_slot, ":raw_material_price", ":village_no", ":raw_material_price_slot"),
  14446. (val_add, ":total_raw_material_price", ":raw_material_price"),
  14447. (val_add, ":number_of_centers", 1),
  14448. (try_end),
  14449.  
  14450. (store_div, ":average_raw_material_price", ":total_raw_material_price", ":number_of_centers"),
  14451.  
  14452. (gt, ":average_raw_material_price", ":new_price"),
  14453. (store_sub, ":raw_material_boost", ":average_raw_material_price", ":new_price"),
  14454. (val_div, ":raw_material_boost", 10),
  14455. (val_add, ":new_price", ":raw_material_boost"),
  14456. (try_end),
  14457.  
  14458. (val_clamp, ":new_price", minimum_price_factor, maximum_price_factor),
  14459. (party_set_slot, ":center_no", ":cur_good_price_slot", ":new_price"),
  14460.  
  14461. #(assign, reg3, ":new_price"),
  14462. #(str_store_item_name, s2, ":cur_good"),
  14463. #(display_log_message, "@DEBUG : {s1}-{s2}, prod:{reg1}, cons:{reg2}, price:{reg3}"),
  14464. (try_end),
  14465. ]),
  14466.  
  14467. ("center_get_production",
  14468. [
  14469. #Actually, this could be reset somewhat to yield supply and demand as raw numbers
  14470. #Demand could be set values for rural and urban
  14471. #Supply could be based on capital goods -- head of cattle, head of sheep, fish ponds, fishing fleets, acres of grain fields, olive orchards, olive presses, wine presses, mills, smithies, salt pans, potters' kilns, etc
  14472. #Prosperity would increase both demand and supply
  14473. (store_script_param_1, ":center_no"),
  14474. (store_script_param_2, ":cur_good"),
  14475.  
  14476. (assign, ":base_production", 0),
  14477.  
  14478. #Grain products
  14479. (try_begin),
  14480. (eq, ":cur_good", "itm_bread"), #Demand = 3000 across Calradia
  14481. (party_get_slot, ":base_production", ":center_no", slot_center_mills),
  14482. (val_mul, ":base_production", 20), #one mills per village, five mills per town = 160 mills
  14483. (else_try),
  14484. (eq, ":cur_good", "itm_grain"), #Demand = 3200+, 1600 to mills, 1500 on its own, extra to breweries
  14485. (party_get_slot, ":base_production", ":center_no", slot_center_acres_grain),
  14486. (val_div, ":base_production", 125), #10000 acres is the average across Calradia, extra in Swadia, less in snows and steppes, a bit from towns
  14487. (else_try),
  14488. (eq, ":cur_good", "itm_ale"), #
  14489. (party_get_slot, ":base_production", ":center_no", slot_center_breweries),
  14490. (val_mul, ":base_production", 25),
  14491.  
  14492. (else_try),
  14493. (eq, ":cur_good", "itm_smoked_fish"), #Demand = 20
  14494. (party_get_slot, ":base_production", ":center_no", slot_center_fishing_fleet),
  14495. (val_mul, ":base_production", 4), #was originally 5
  14496. (else_try),
  14497. (eq, ":cur_good", "itm_salt"),
  14498. (party_get_slot, ":base_production", ":center_no", slot_center_salt_pans),
  14499. (val_mul, ":base_production", 35),
  14500.  
  14501. #Cattle products
  14502. (else_try),
  14503. (eq, ":cur_good", "itm_cattle_meat"), #Demand = 5
  14504. (party_get_slot, ":base_production", ":center_no", slot_center_head_cattle),
  14505. (val_div, ":base_production", 4), #was 9
  14506. (else_try),
  14507. (eq, ":cur_good", "itm_dried_meat"), #Demand = 15
  14508. (party_get_slot, ":base_production", ":center_no", slot_center_head_cattle),
  14509. (val_div, ":base_production", 2), #was 3
  14510. (else_try),
  14511. (eq, ":cur_good", "itm_cheese"), #Demand = 10
  14512. (party_get_slot, ":base_production", ":center_no", slot_center_head_cattle),
  14513. (party_get_slot, ":sheep_addition", ":center_no", slot_center_head_sheep),
  14514. (val_div, ":sheep_addition", 2),
  14515. (val_add, ":base_production", ":sheep_addition"),
  14516. (party_get_slot, ":gardens", ":center_no", slot_center_household_gardens),
  14517. (val_mul, ":base_production", ":gardens"),
  14518. (val_div, ":base_production", 10),
  14519. (else_try),
  14520. (eq, ":cur_good", "itm_butter"), #Demand = 2
  14521. (party_get_slot, ":base_production", ":center_no", slot_center_head_cattle),
  14522. (party_get_slot, ":gardens", ":center_no", slot_center_household_gardens),
  14523. (val_mul, ":base_production", ":gardens"),
  14524. (val_div, ":base_production", 15),
  14525.  
  14526. (else_try),
  14527. (eq, ":cur_good", "itm_raw_leather"), #Demand = ??
  14528. (party_get_slot, ":base_production", ":center_no", slot_center_head_cattle),
  14529. (val_div, ":base_production", 6),
  14530. (party_get_slot, ":sheep_addition", ":center_no", slot_center_head_sheep),
  14531. (val_div, ":sheep_addition", 12),
  14532. (val_add, ":base_production", ":sheep_addition"),
  14533.  
  14534. (else_try),
  14535. (eq, ":cur_good", "itm_leatherwork"), #Demand = ??
  14536. (party_get_slot, ":base_production", ":center_no", slot_center_tanneries),
  14537. (val_mul, ":base_production", 20),
  14538.  
  14539. (else_try),
  14540. (eq, ":cur_good", "itm_honey"), #Demand = 5
  14541. (party_get_slot, ":base_production", ":center_no", slot_center_apiaries),
  14542. (val_mul, ":base_production", 6),
  14543. (else_try),
  14544. (eq, ":cur_good", "itm_cabbages"), #Demand = 7
  14545. (party_get_slot, ":base_production", ":center_no", slot_center_household_gardens),
  14546. (val_mul, ":base_production", 10),
  14547. (else_try),
  14548. (eq, ":cur_good", "itm_apples"), #Demand = 7
  14549. (party_get_slot, ":base_production", ":center_no", slot_center_household_gardens),
  14550. (val_mul, ":base_production", 10),
  14551.  
  14552. #Sheep products
  14553. (else_try),
  14554. (eq, ":cur_good", "itm_sausages"), #Demand = 5
  14555. (party_get_slot, ":base_production", ":center_no", slot_center_head_sheep), #average of 90 sheep
  14556. (val_div, ":base_production", 15),
  14557. (else_try),
  14558. (eq, ":cur_good", "itm_wool"), #(Demand = 0, but 15 averaged out perhaps)
  14559. (party_get_slot, ":base_production", ":center_no", slot_center_head_sheep), #average of 90 sheep
  14560. (val_div, ":base_production", 5),
  14561. (else_try),
  14562. (eq, ":cur_good", "itm_wool_cloth"), #(Demand = 1500 across Calradia)
  14563. (party_get_slot, ":base_production", ":center_no", slot_center_wool_looms),
  14564. (val_mul, ":base_production", 5), #300 across Calradia
  14565.  
  14566. (else_try),
  14567. (this_or_next|eq, ":cur_good", "itm_pork"),
  14568. (eq, ":cur_good", "itm_chicken"),
  14569. (try_begin),
  14570. (is_between, ":center_no", villages_begin, villages_end),
  14571. (assign, ":base_production", 30),
  14572. (else_try),
  14573. (assign, ":base_production", 0),
  14574. (try_end),
  14575.  
  14576. (else_try),
  14577. (eq, ":cur_good", "itm_iron"), #Demand = 5, one supplies three smithies
  14578. (party_get_slot, ":base_production", ":center_no", slot_center_iron_deposits),
  14579. (val_mul, ":base_production", 10),
  14580. (else_try),
  14581. (eq, ":cur_good", "itm_tools"), #Demand = 560 across Calradia
  14582. (party_get_slot, ":base_production", ":center_no", slot_center_smithies),
  14583. (val_mul, ":base_production", 3),
  14584.  
  14585. #Other artisanal goods
  14586. (else_try),
  14587. (eq, ":cur_good", "itm_pottery"), #560 is total demand
  14588. (party_get_slot, ":base_production", ":center_no", slot_center_pottery_kilns),
  14589. (val_mul, ":base_production", 5),
  14590.  
  14591. (else_try),
  14592. (eq, ":cur_good", "itm_raw_grapes"),
  14593. (party_get_slot, ":base_production", ":center_no", slot_center_acres_vineyard),
  14594. (val_div, ":base_production", 100),
  14595. (else_try),
  14596. (eq, ":cur_good", "itm_wine"),
  14597. (party_get_slot, ":base_production", ":center_no", slot_center_wine_presses),
  14598. (val_mul, ":base_production", 25),
  14599. (else_try),
  14600. (eq, ":cur_good", "itm_raw_olives"),
  14601. (party_get_slot, ":base_production", ":center_no", slot_center_acres_olives),
  14602. (val_div, ":base_production", 150),
  14603. (else_try),
  14604. (eq, ":cur_good", "itm_oil"),
  14605. (party_get_slot, ":base_production", ":center_no", slot_center_olive_presses),
  14606. (val_mul, ":base_production", 12),
  14607.  
  14608. #Flax and linen
  14609. (else_try),
  14610. (eq, ":cur_good", "itm_linen"),
  14611. (party_get_slot, ":base_production", ":center_no", slot_center_linen_looms),
  14612. (val_mul, ":base_production", 5),
  14613. (else_try),
  14614. (eq, ":cur_good", "itm_raw_flax"),
  14615. (party_get_slot, ":base_production", ":center_no", slot_center_acres_flax),
  14616. (val_div, ":base_production", 80),
  14617. (else_try),
  14618. (eq, ":cur_good", "itm_velvet"),
  14619. (party_get_slot, ":base_production", ":center_no", slot_center_silk_looms),
  14620. (val_mul, ":base_production", 5),
  14621. (else_try),
  14622. (eq, ":cur_good", "itm_raw_silk"),
  14623. (party_get_slot, ":base_production", ":center_no", slot_center_silk_farms),
  14624. (val_div, ":base_production", 20),
  14625. (else_try),
  14626. (eq, ":cur_good", "itm_raw_dyes"),
  14627. (party_get_slot, ":base_production", ":center_no", slot_center_kirmiz_farms),
  14628. (val_div, ":base_production", 20),
  14629. (else_try),
  14630. (eq, ":cur_good", "itm_raw_date_fruit"),
  14631. (party_get_slot, ":base_production", ":center_no", slot_center_acres_dates),
  14632. (val_div, ":base_production", 120),
  14633. (else_try),
  14634. (eq, ":cur_good", "itm_furs"), #Demand = 90 across Calradia
  14635. (party_get_slot, ":base_production", ":center_no", slot_center_fur_traps),
  14636. (val_mul, ":base_production", 25),
  14637. (else_try),
  14638. (eq, ":cur_good", "itm_spice"),
  14639. (try_begin),
  14640. (eq, ":center_no", "p_town_10"), #Tulga
  14641. (assign, ":base_production", 100),
  14642. (else_try),
  14643. (eq, ":center_no", "p_town_17"), #Ichamur
  14644. (assign, ":base_production", 50),
  14645. (else_try),
  14646. (eq, ":center_no", "p_town_19"), #Shariz
  14647. (assign, ":base_production", 50),
  14648. (else_try),
  14649. (eq, ":center_no", "p_town_22"), #Bariyye
  14650. (assign, ":base_production", 50),
  14651. (else_try),
  14652. (this_or_next|eq, ":center_no", "p_village_11"), #Dusturil (village of Tulga)
  14653. (eq, ":center_no", "p_village_25"), #Dashbigha (village of Tulga)
  14654. (assign, ":base_production", 50),
  14655. (else_try),
  14656. (this_or_next|eq, ":center_no", "p_village_37"), #Ada Kulun (village of Ichlamur)
  14657. (this_or_next|eq, ":center_no", "p_village_42"), #Dirigh Aban (village of Ichlamur)
  14658. (this_or_next|eq, ":center_no", "p_village_99"), #Fishara (village of Bariyye)
  14659. (eq, ":center_no", "p_village_100"), #Iqbayl (village of Bariyye)
  14660. (assign, ":base_production", 25),
  14661. (try_end),
  14662. (try_end),
  14663.  
  14664. #Modify production by other goods
  14665. (assign, ":modified_production", ":base_production"),
  14666. (try_begin),
  14667. (eq, ":cur_good", "itm_bread"),
  14668. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_grain", ":base_production", 1),
  14669. (assign, ":modified_production", reg0),
  14670. (else_try),
  14671. (eq, ":cur_good", "itm_ale"),
  14672. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_grain", ":base_production", 2),
  14673. (assign, ":modified_production", reg0),
  14674. (else_try),
  14675. (eq, ":cur_good", "itm_dried_meat"),
  14676. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_salt", ":base_production", 2),
  14677. (assign, ":modified_production", reg0),
  14678. (else_try),
  14679. (eq, ":cur_good", "itm_smoked_fish"),
  14680. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_salt", ":base_production", 2),
  14681. (assign, ":modified_production", reg0),
  14682. (else_try),
  14683. (eq, ":cur_good", "itm_tools"),
  14684. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_iron", ":base_production", 1),
  14685. (assign, ":modified_production", reg0),
  14686. (else_try),
  14687. (eq, ":cur_good", "itm_wool_cloth"),
  14688. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_wool", ":base_production", 1),
  14689. (assign, ":modified_production", reg0),
  14690. (else_try),
  14691. (eq, ":cur_good", "itm_wine"),
  14692. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_raw_grapes", ":base_production", 1),
  14693. (assign, ":modified_production", reg0),
  14694. (else_try),
  14695. (eq, ":cur_good", "itm_oil"),
  14696. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_raw_olives", ":base_production", 1),
  14697. (assign, ":modified_production", reg0),
  14698. (else_try),
  14699. (eq, ":cur_good", "itm_velvet"),
  14700. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_raw_silk", ":base_production", 1),
  14701. (assign, ":initially_modified_production", reg0),
  14702. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_raw_dyes", ":initially_modified_production", 2),
  14703. (assign, ":modified_production", reg0),
  14704. (else_try),
  14705. (eq, ":cur_good", "itm_leatherwork"),
  14706. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_raw_leather", ":base_production", 1),
  14707. (assign, ":modified_production", reg0),
  14708. (else_try),
  14709. (eq, ":cur_good", "itm_linen"),
  14710. (call_script, "script_good_price_affects_good_production", ":center_no", "itm_raw_flax", ":base_production", 1),
  14711. (assign, ":modified_production", reg0),
  14712. (try_end),
  14713.  
  14714. (assign, ":base_production_modded_by_raw_materials", ":modified_production"), #this is just logged for the report screen
  14715.  
  14716. #Increase both positive and negative production by the center's prosperity
  14717. #Richer towns have more people and consume more, but also produce more
  14718. (try_begin),
  14719. (party_get_slot, ":prosperity_plus_75", ":center_no", slot_town_prosperity),
  14720. (val_add, ":prosperity_plus_75", 75),
  14721. (val_mul, ":modified_production", ":prosperity_plus_75"),
  14722. (val_div, ":modified_production", 125),
  14723. (try_end),
  14724.  
  14725. (try_begin),
  14726. (this_or_next|party_slot_eq, ":center_no", slot_village_state, svs_being_raided),
  14727. (party_slot_eq, ":center_no", slot_village_state, svs_looted),
  14728. (assign, ":modified_production", 0),
  14729. (try_end),
  14730.  
  14731. (assign, reg0, ":modified_production"), #modded by prosperity
  14732. (assign, reg1, ":base_production_modded_by_raw_materials"),
  14733. (assign, reg2, ":base_production"),
  14734. ]),
  14735.  
  14736. ("center_get_consumption",
  14737. [
  14738. (store_script_param_1, ":center_no"),
  14739. (store_script_param_2, ":cur_good"),
  14740.  
  14741. (assign, ":consumer_consumption", 0),
  14742. (try_begin),
  14743. (this_or_next|is_between, ":center_no", "p_town_19", "p_castle_1"),
  14744. (ge, ":center_no", "p_village_91"),
  14745. (item_slot_ge, ":cur_good", slot_item_desert_demand, 0), #Otherwise use rural or urban
  14746. (item_get_slot, ":consumer_consumption", ":cur_good", slot_item_desert_demand),
  14747. (else_try),
  14748. (is_between, ":center_no", villages_begin, villages_end),
  14749. (item_get_slot, ":consumer_consumption", ":cur_good", slot_item_rural_demand),
  14750. (else_try),
  14751. (is_between, ":center_no", towns_begin, towns_end),
  14752. (item_get_slot, ":consumer_consumption", ":cur_good", slot_item_urban_demand),
  14753. (try_end),
  14754.  
  14755. (assign, ":raw_material_consumption", 0),
  14756. (try_begin),
  14757. (eq, ":cur_good", "itm_grain"),
  14758. (party_get_slot, ":grain_for_bread", ":center_no", slot_center_mills),
  14759. (val_mul, ":grain_for_bread", 20),
  14760.  
  14761. (party_get_slot, ":grain_for_ale", ":center_no", slot_center_breweries),
  14762. (val_mul, ":grain_for_ale", 5),
  14763.  
  14764. (store_add, ":raw_material_consumption", ":grain_for_bread", ":grain_for_ale"),
  14765.  
  14766. (else_try),
  14767. (eq, ":cur_good", "itm_iron"),
  14768. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_smithies),
  14769. (val_mul, ":raw_material_consumption", 3),
  14770.  
  14771. (else_try),
  14772. (eq, ":cur_good", "itm_wool"),
  14773. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_wool_looms),
  14774. (val_mul, ":raw_material_consumption", 5),
  14775.  
  14776. (else_try),
  14777. (eq, ":cur_good", "itm_raw_flax"),
  14778. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_linen_looms),
  14779. (val_mul, ":raw_material_consumption", 5),
  14780.  
  14781. (else_try),
  14782. (eq, ":cur_good", "itm_raw_leather"),
  14783. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_tanneries),
  14784. (val_mul, ":raw_material_consumption", 20),
  14785.  
  14786. (else_try),
  14787. (eq, ":cur_good", "itm_raw_grapes"),
  14788. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_wine_presses),
  14789. (val_mul, ":raw_material_consumption", 30),
  14790.  
  14791. (else_try),
  14792. (eq, ":cur_good", "itm_raw_olives"),
  14793. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_olive_presses),
  14794. (val_mul, ":raw_material_consumption", 12),
  14795.  
  14796. (else_try),
  14797. (eq, ":cur_good", "itm_raw_dyes"),
  14798. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_silk_looms),
  14799. (val_mul, ":raw_material_consumption", 1),
  14800.  
  14801. (else_try),
  14802. (eq, ":cur_good", "itm_raw_silk"),
  14803. (party_get_slot, ":raw_material_consumption", ":center_no", slot_center_silk_looms),
  14804. (val_mul, ":raw_material_consumption", 5),
  14805.  
  14806. (else_try),
  14807. (eq, ":cur_good", "itm_salt"),
  14808. (party_get_slot, ":salt_for_beef", ":center_no", slot_center_head_cattle),
  14809. (val_div, ":salt_for_beef", 10),
  14810.  
  14811. (party_get_slot, ":salt_for_fish", ":center_no", slot_center_fishing_fleet),
  14812. (val_div, ":salt_for_fish", 5),
  14813.  
  14814. (store_add, ":raw_material_consumption", ":salt_for_beef", ":salt_for_fish"),
  14815. (try_end),
  14816.  
  14817. (try_begin), #Reduce consumption of raw materials if their cost is high
  14818. (gt, ":raw_material_consumption", 0),
  14819. (store_sub, ":item_to_price_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  14820. (store_add, ":cur_good_price_slot", ":cur_good", ":item_to_price_slot"),
  14821. (party_get_slot, ":cur_center_price", ":center_no", ":cur_good_price_slot"),
  14822. (gt, ":cur_center_price", 1000),
  14823. (val_mul, ":raw_material_consumption", 1000),
  14824. (val_div, ":raw_material_consumption", ":cur_center_price"),
  14825. (try_end),
  14826.  
  14827. (store_add, ":modified_consumption", ":consumer_consumption", ":raw_material_consumption"),
  14828. (try_begin),
  14829. (party_get_slot, ":prosperity_plus_75", ":center_no", slot_town_prosperity),
  14830. (val_add, ":prosperity_plus_75", 75),
  14831. (val_mul, ":modified_consumption", ":prosperity_plus_75"),
  14832. (val_div, ":modified_consumption", 125),
  14833. (try_end),
  14834.  
  14835.  
  14836. (assign, reg0, ":modified_consumption"), #modded by prosperity
  14837. (assign, reg1, ":raw_material_consumption"),
  14838. (assign, reg2, ":consumer_consumption"),
  14839. ]),
  14840.  
  14841. #script_get_enterprise_name
  14842. # INPUT: arg1 = item_no
  14843. # Output: reg0: production string
  14844. ("get_enterprise_name",
  14845. [
  14846. (store_script_param_1, ":item_produced"),
  14847. (assign, ":enterprise_name", "str_bread_site"),
  14848. (try_begin),
  14849. (eq, ":item_produced", "itm_bread"),
  14850. (assign, ":enterprise_name", "str_bread_site"),
  14851. (else_try),
  14852. (eq, ":item_produced", "itm_ale"),
  14853. (assign, ":enterprise_name", "str_ale_site"),
  14854. (else_try),
  14855. (eq, ":item_produced", "itm_oil"),
  14856. (assign, ":enterprise_name", "str_oil_site"),
  14857. (else_try),
  14858. (eq, ":item_produced", "itm_wine"),
  14859. (assign, ":enterprise_name", "str_wine_site"),
  14860. (else_try),
  14861. (eq, ":item_produced", "itm_leatherwork"),
  14862. (assign, ":enterprise_name", "str_leather_site"),
  14863. (else_try),
  14864. (eq, ":item_produced", "itm_wool_cloth"),
  14865. (assign, ":enterprise_name", "str_wool_cloth_site"),
  14866. (else_try),
  14867. (eq, ":item_produced", "itm_linen"),
  14868. (assign, ":enterprise_name", "str_linen_site"),
  14869. (else_try),
  14870. (eq, ":item_produced", "itm_velvet"),
  14871. (assign, ":enterprise_name", "str_velvet_site"),
  14872. (else_try),
  14873. (eq, ":item_produced", "itm_tools"),
  14874. (assign, ":enterprise_name", "str_tool_site"),
  14875. (try_end),
  14876. (assign, reg0, ":enterprise_name"),
  14877. ]),
  14878.  
  14879. #script_do_merchant_town_trade
  14880. # INPUT: arg1 = party_no (of the merchant), arg2 = center_no
  14881. ("do_merchant_town_trade",
  14882. [
  14883. (store_script_param_1, ":party_no"),
  14884. (store_script_param_2, ":center_no"),
  14885.  
  14886. (party_get_slot, ":origin", ":party_no", slot_party_last_traded_center),
  14887.  
  14888. (try_begin),
  14889. (eq, "$cheat_mode", 2),
  14890. (str_store_party_name, s4, ":center_no"),
  14891. (str_store_party_name, s5, ":origin"),
  14892. (display_message, "@{!}DEBUG -- Caravan trades in {s4}, originally from {s5}"),
  14893. (try_end),
  14894.  
  14895. (call_script, "script_add_log_entry", logent_party_traded, ":party_no", ":origin", ":center_no", -1),
  14896.  
  14897. (call_script, "script_do_party_center_trade", ":party_no", ":center_no", 4), #it was first 10 then increased 20 then increased 30, now I decrease it to back 6. Because otherwise prices do not differiate much. Trade become useless in game.
  14898.  
  14899. (assign, ":total_change", reg0),
  14900. #Adding the earnings to the wealth (maximum changed price is the earning)
  14901. (val_div, ":total_change", 2),
  14902. (str_store_party_name, s1, ":party_no"),
  14903. (str_store_party_name, s2, ":center_no"),
  14904. (assign, reg1, ":total_change"),
  14905.  
  14906. #Adding tariffs to the town
  14907. (party_get_slot, ":accumulated_tariffs", ":center_no", slot_center_accumulated_tariffs),
  14908. (party_get_slot, ":prosperity", ":center_no", slot_town_prosperity),
  14909.  
  14910. (assign, ":tariffs_generated", ":total_change"),
  14911. (val_mul, ":tariffs_generated", ":prosperity"),
  14912. (val_div, ":tariffs_generated", 100),
  14913. (val_div, ":tariffs_generated", 10), #10 for caravans, 20 for villages
  14914. (val_add, ":accumulated_tariffs", ":tariffs_generated"),
  14915.  
  14916. (try_begin),
  14917. (ge, "$cheat_mode", 3),
  14918. (assign, reg4, ":tariffs_generated"),
  14919. (str_store_party_name, s4, ":center_no"),
  14920. (assign, reg5, ":accumulated_tariffs"),
  14921. (display_message, "@{!}New tariffs at {s4} = {reg4}, total = {reg5}"),
  14922. (try_end),
  14923.  
  14924. (party_set_slot, ":center_no", slot_center_accumulated_tariffs, ":accumulated_tariffs"),
  14925.  
  14926. #Adding 1 to center prosperity with 18% for each caravan in that center
  14927. (try_begin),
  14928. (store_random_in_range, ":rand", 0, 80),
  14929. (call_script, "script_center_get_goods_availability", ":center_no"),
  14930. (assign, ":hardship_index", reg0),
  14931. (gt, ":rand", ":hardship_index"),
  14932. (try_begin),
  14933. (store_random_in_range, ":rand", 0, 100),
  14934. (gt, ":rand", 82),
  14935. (call_script, "script_change_center_prosperity", ":center_no", 1),
  14936. (val_add, "$newglob_total_prosperity_from_caravan_trade", 1),
  14937. (try_end),
  14938. (try_end),
  14939. ]),
  14940.  
  14941. #script_party_calculate_regular_strength:
  14942. # INPUT:
  14943. # param1: Party-id
  14944. ("party_calculate_regular_strength",
  14945. [
  14946. (store_script_param_1, ":party"), #Party_id
  14947.  
  14948. (assign, reg0,0),
  14949. (party_get_num_companion_stacks, ":num_stacks",":party"),
  14950. (try_for_range, ":i_stack", 0, ":num_stacks"),
  14951. (party_stack_get_troop_id, ":stack_troop", ":party", ":i_stack"),
  14952. (neg|troop_is_hero, ":stack_troop"),
  14953. (store_character_level, ":stack_strength", ":stack_troop"),
  14954. (val_add, ":stack_strength", 12),
  14955. (val_mul, ":stack_strength", ":stack_strength"),
  14956. (val_div, ":stack_strength", 100),
  14957. (party_stack_get_size, ":stack_size",":party",":i_stack"),
  14958. (party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
  14959. (val_sub, ":stack_size", ":num_wounded"),
  14960. (val_mul, ":stack_strength", ":stack_size"),
  14961. (val_add,reg0, ":stack_strength"),
  14962. (try_end),
  14963. ]),
  14964.  
  14965.  
  14966.  
  14967.  
  14968. #script_party_calculate_strength:
  14969. # INPUT: arg1 = party_id, arg2 = exclude leader
  14970. # OUTPUT: reg0 = strength
  14971.  
  14972. ("party_calculate_strength",
  14973. [
  14974. (store_script_param_1, ":party"), #Party_id
  14975. (store_script_param_2, ":exclude_leader"), #Party_id
  14976.  
  14977. (assign, reg0,0),
  14978. (party_get_num_companion_stacks, ":num_stacks", ":party"),
  14979. (assign, ":first_stack", 0),
  14980. (try_begin),
  14981. (neq, ":exclude_leader", 0),
  14982. (assign, ":first_stack", 1),
  14983. (try_end),
  14984. (try_for_range, ":i_stack", ":first_stack", ":num_stacks"),
  14985. (party_stack_get_troop_id, ":stack_troop",":party", ":i_stack"),
  14986. (store_character_level, ":stack_strength", ":stack_troop"),
  14987. (val_add, ":stack_strength", 4), #new was 12 (patch 1.125)
  14988. (val_mul, ":stack_strength", ":stack_strength"),
  14989. (val_mul, ":stack_strength", 2), #new (patch 1.125)
  14990. (val_div, ":stack_strength", 100),
  14991. (val_max, ":stack_strength", 1), #new (patch 1.125)
  14992. (try_begin),
  14993. (neg|troop_is_hero, ":stack_troop"),
  14994. (party_stack_get_size, ":stack_size",":party",":i_stack"),
  14995. (party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
  14996. (val_sub, ":stack_size", ":num_wounded"),
  14997. (val_mul, ":stack_strength", ":stack_size"),
  14998. (else_try),
  14999. (troop_is_wounded, ":stack_troop"), #hero & wounded
  15000. (assign, ":stack_strength", 0),
  15001. (try_end),
  15002. (val_add, reg0, ":stack_strength"),
  15003. (try_end),
  15004. (party_set_slot, ":party", slot_party_cached_strength, reg0),
  15005. ]),
  15006.  
  15007.  
  15008. #script_loot_player_items:
  15009. # INPUT: arg1 = enemy_party_no
  15010. # Output: none
  15011. ("loot_player_items",
  15012. [
  15013. (store_script_param, ":enemy_party_no", 1),
  15014.  
  15015. (troop_get_inventory_capacity, ":inv_cap", "trp_player"),
  15016. (try_for_range, ":i_slot", 0, ":inv_cap"),
  15017. (troop_get_inventory_slot, ":item_id", "trp_player", ":i_slot"),
  15018. (ge, ":item_id", 0),
  15019. (troop_get_inventory_slot_modifier, ":item_modifier", "trp_player", ":i_slot"),
  15020. (try_begin),
  15021. (is_between, ":item_id", trade_goods_begin, trade_goods_end),
  15022. (assign, ":randomness", 20),
  15023. (else_try),
  15024. (this_or_next|is_between, ":item_id", horses_begin, horses_end),
  15025. (this_or_next|eq, ":item_id", "itm_warhorse_sarranid"),
  15026. (eq, ":item_id", "itm_warhorse_steppe"),
  15027. (assign, ":randomness", 15),
  15028. (else_try),
  15029. (this_or_next|is_between, ":item_id", weapons_begin, weapons_end),
  15030. (is_between, ":item_id", ranged_weapons_begin, ranged_weapons_end),
  15031. (assign, ":randomness", 5),
  15032. (else_try),
  15033. (this_or_next|is_between, ":item_id", armors_begin, armors_end),
  15034. (this_or_next|eq, ":item_id", "itm_plate_boots"), #added to the end because of not breaking the save games
  15035. (is_between, ":item_id", shields_begin, shields_end),
  15036. (assign, ":randomness", 5),
  15037. (try_end),
  15038. (store_random_in_range, ":random_no", 0, 100),
  15039. (lt, ":random_no", ":randomness"),
  15040. (troop_remove_item, "trp_player", ":item_id"),
  15041.  
  15042. (try_begin),
  15043. (gt, ":enemy_party_no", 0),
  15044. (party_get_slot, ":cur_loot_slot", ":enemy_party_no", slot_party_next_looted_item_slot),
  15045. (val_add, ":cur_loot_slot", slot_party_looted_item_1),
  15046. (party_set_slot, ":enemy_party_no", ":cur_loot_slot", ":item_id"),
  15047. (val_sub, ":cur_loot_slot", slot_party_looted_item_1),
  15048. (val_add, ":cur_loot_slot", slot_party_looted_item_1_modifier),
  15049. (party_set_slot, ":enemy_party_no", ":cur_loot_slot", ":item_modifier"),
  15050. (val_sub, ":cur_loot_slot", slot_party_looted_item_1_modifier),
  15051. (val_add, ":cur_loot_slot", 1),
  15052. (val_mod, ":cur_loot_slot", num_party_loot_slots),
  15053. (party_set_slot, ":enemy_party_no", slot_party_next_looted_item_slot, ":cur_loot_slot"),
  15054. (try_end),
  15055. (try_end),
  15056. (store_troop_gold, ":cur_gold", "trp_player"),
  15057. (store_div, ":max_lost", ":cur_gold", 5),
  15058. (store_div, ":min_lost", ":cur_gold", 10),
  15059. (store_random_in_range, ":lost_gold", ":min_lost", ":max_lost"),
  15060. (troop_remove_gold, "trp_player", ":lost_gold"),
  15061. ]),
  15062.  
  15063.  
  15064. #script_party_calculate_loot:
  15065. # INPUT:
  15066. # param1: Party-id
  15067. # Returns num looted items in reg0
  15068. ("party_calculate_loot",
  15069. [
  15070. (store_script_param_1, ":enemy_party"), #Enemy Party_id
  15071.  
  15072. (call_script, "script_calculate_main_party_shares"),
  15073. (assign, ":num_player_party_shares", reg0),
  15074.  
  15075. (try_for_range, ":i_loot", 0, num_party_loot_slots),
  15076. (store_add, ":cur_loot_slot", ":i_loot", slot_party_looted_item_1),
  15077. (party_get_slot, ":item_no", "$g_enemy_party", ":cur_loot_slot"),
  15078. (gt, ":item_no", 0),
  15079. (party_set_slot, "$g_enemy_party", ":cur_loot_slot", 0),
  15080. (val_sub, ":cur_loot_slot", slot_party_looted_item_1),
  15081. (val_add, ":cur_loot_slot", slot_party_looted_item_1_modifier),
  15082. (party_get_slot, ":item_modifier", "$g_enemy_party", ":cur_loot_slot"),
  15083. (troop_add_item, "trp_temp_troop", ":item_no", ":item_modifier"),
  15084. (try_end),
  15085. (party_set_slot, "$g_enemy_party", slot_party_next_looted_item_slot, 0),
  15086.  
  15087. (assign, ":num_looted_items",0),
  15088. (try_begin),
  15089. (this_or_next|party_slot_eq, "$g_enemy_party", slot_party_type, spt_kingdom_caravan),
  15090. (this_or_next|party_slot_eq, "$g_enemy_party", slot_party_type, spt_bandit_lair),
  15091. (party_slot_eq, "$g_enemy_party", slot_party_type, spt_village_farmer),
  15092. (store_mul, ":plunder_amount", player_loot_share, 30),
  15093. (val_mul, ":plunder_amount", "$g_strength_contribution_of_player"),
  15094. (val_div, ":plunder_amount", 100),
  15095. (val_div, ":plunder_amount", ":num_player_party_shares"),
  15096. (try_begin),
  15097. (party_slot_eq, "$g_enemy_party", slot_party_type, spt_kingdom_caravan),
  15098. (reset_item_probabilities, 100),
  15099. (assign, ":range_min", trade_goods_begin),
  15100. (assign, ":range_max", trade_goods_end),
  15101. (else_try),
  15102. (party_slot_eq, "$g_enemy_party", slot_party_type, spt_bandit_lair),
  15103. (val_div, ":plunder_amount", 2),
  15104. (reset_item_probabilities, 1),
  15105. (assign, ":range_min", food_begin),
  15106. (assign, ":range_max", food_end),
  15107. (else_try),
  15108. (val_div, ":plunder_amount", 5),
  15109. (reset_item_probabilities, 1),
  15110. (assign, ":range_min", food_begin),
  15111. (assign, ":range_max", food_end),
  15112. (try_end),
  15113. (store_sub, ":item_to_price_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  15114. (try_for_range, ":cur_goods", ":range_min", ":range_max"),
  15115. (try_begin),
  15116. (neg|party_slot_eq, "$g_enemy_party", slot_party_type, spt_bandit_lair),
  15117. (store_add, ":cur_price_slot", ":cur_goods", ":item_to_price_slot"),
  15118. (party_get_slot, ":cur_price", "$g_enemy_party", ":cur_price_slot"),
  15119. (else_try),
  15120. (assign, ":cur_price", maximum_price_factor),
  15121. (val_add, ":cur_price", average_price_factor),
  15122. (val_div, ":cur_price", 3),
  15123. (try_end),
  15124.  
  15125. (assign, ":cur_probability", 100),
  15126. (val_mul, ":cur_probability", average_price_factor),
  15127. (val_div, ":cur_probability", ":cur_price"),
  15128. (assign, reg0, ":cur_probability"),
  15129. (set_item_probability_in_merchandise, ":cur_goods", ":cur_probability"),
  15130. (try_end),
  15131. (troop_add_merchandise, "trp_temp_troop", itp_type_goods, ":plunder_amount"),
  15132. (val_add, ":num_looted_items", ":plunder_amount"),
  15133. (try_end),
  15134.  
  15135. #Now loot the defeated party
  15136. (store_mul, ":loot_probability", player_loot_share, 3),
  15137. (val_mul, ":loot_probability", "$g_strength_contribution_of_player"),
  15138. (party_get_skill_level, ":player_party_looting", "p_main_party", "skl_looting"),
  15139. (val_add, ":player_party_looting", 10),
  15140. (val_mul, ":loot_probability", ":player_party_looting"),
  15141. (val_div, ":loot_probability", 10),
  15142. (val_div, ":loot_probability", ":num_player_party_shares"),
  15143.  
  15144. (party_get_num_companion_stacks, ":num_stacks",":enemy_party"),
  15145. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15146. (party_stack_get_troop_id, ":stack_troop",":enemy_party",":i_stack"),
  15147. (neg|troop_is_hero, ":stack_troop"),
  15148. (party_stack_get_size, ":stack_size",":enemy_party",":i_stack"),
  15149. (try_for_range, ":unused", 0, ":stack_size"),
  15150. (troop_loot_troop, "trp_temp_troop", ":stack_troop", ":loot_probability"),
  15151. (try_end),
  15152. (try_end),
  15153.  
  15154. #(troop_get_inventory_capacity, ":inv_cap", "trp_temp_troop"),
  15155. #(try_for_range, ":i_slot", 0, ":inv_cap"),
  15156. # (troop_get_inventory_slot, ":item_id", "trp_temp_troop", ":i_slot"),
  15157. # (is_between, ":item_id", horses_begin, horses_end),
  15158. # (troop_set_inventory_slot, "trp_temp_troop", ":i_slot", -1),
  15159. #(try_end),
  15160.  
  15161. (troop_get_inventory_capacity, ":inv_cap", "trp_temp_troop"),
  15162. (try_for_range, ":i_slot", 0, ":inv_cap"),
  15163. (troop_get_inventory_slot, ":item_id", "trp_temp_troop", ":i_slot"),
  15164. (ge, ":item_id", 0),
  15165. (val_add, ":num_looted_items", 1),
  15166. (try_end),
  15167.  
  15168. (assign, reg0, ":num_looted_items"),
  15169. ]),
  15170.  
  15171. #script_calculate_main_party_shares:
  15172. # INPUT:
  15173. # Returns number of player party shares in reg0
  15174. ("calculate_main_party_shares",
  15175. [
  15176. (assign, ":num_player_party_shares", player_loot_share),
  15177. # Add shares for player's party
  15178. (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),
  15179. (try_for_range, ":i_stack", 1, ":num_stacks"),
  15180. (party_stack_get_troop_id, ":stack_troop", "p_main_party", ":i_stack"),
  15181. (try_begin),
  15182. (neg|troop_is_hero, ":stack_troop"),
  15183. (party_stack_get_size, ":stack_size","p_main_party",":i_stack"),
  15184. (val_add, ":num_player_party_shares", ":stack_size"),
  15185. (else_try),
  15186. (val_add, ":num_player_party_shares", hero_loot_share),
  15187. (try_end),
  15188. (try_end),
  15189.  
  15190. (assign, reg0, ":num_player_party_shares"),
  15191. ]),
  15192.  
  15193. #script_party_give_xp_and_gold:
  15194. # INPUT:
  15195. # param1: destroyed Party-id
  15196. # calculates and gives player paty's share of gold and xp.
  15197.  
  15198. ("party_give_xp_and_gold",
  15199. [
  15200. (store_script_param_1, ":enemy_party"), #Party_id
  15201.  
  15202. (call_script, "script_calculate_main_party_shares"),
  15203. (assign, ":num_player_party_shares", reg0),
  15204.  
  15205. (assign, ":total_gain", 0),
  15206. (party_get_num_companion_stacks, ":num_stacks",":enemy_party"),
  15207. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15208. (party_stack_get_troop_id, ":stack_troop",":enemy_party",":i_stack"),
  15209. (neg|troop_is_hero, ":stack_troop"),
  15210. (party_stack_get_size, ":stack_size",":enemy_party",":i_stack"),
  15211. (store_character_level, ":level", ":stack_troop"),
  15212. (store_add, ":gain", ":level", 10),
  15213. (val_mul, ":gain", ":gain"),
  15214. (val_div, ":gain", 10),
  15215. (store_mul, ":stack_gain", ":gain", ":stack_size"),
  15216. (val_add, ":total_gain", ":stack_gain"),
  15217. (try_end),
  15218.  
  15219. (val_mul, ":total_gain", "$g_strength_contribution_of_player"),
  15220. (val_div, ":total_gain", 100),
  15221.  
  15222. (val_min, ":total_gain", 40000), #eliminate negative results
  15223.  
  15224. (assign, ":player_party_xp_gain", ":total_gain"),
  15225.  
  15226. (store_random_in_range, ":r", 50, 100),
  15227. (val_mul, ":player_party_xp_gain", ":r"),
  15228. (val_div, ":player_party_xp_gain", 100),
  15229.  
  15230. (party_add_xp, "p_main_party", ":player_party_xp_gain"),
  15231.  
  15232. (store_mul, ":player_gold_gain", ":total_gain", player_loot_share),
  15233. (val_min, ":player_gold_gain", 60000), #eliminate negative results
  15234. (store_random_in_range, ":r", 50, 100),
  15235. (val_mul, ":player_gold_gain", ":r"),
  15236. (val_div, ":player_gold_gain", 100),
  15237. (val_div, ":player_gold_gain", ":num_player_party_shares"),
  15238.  
  15239. #add gold now
  15240. (party_get_num_companion_stacks, ":num_stacks","p_main_party"),
  15241. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15242. (party_stack_get_troop_id, ":stack_troop","p_main_party",":i_stack"),
  15243. (try_begin),
  15244. (troop_is_hero, ":stack_troop"),
  15245. (call_script, "script_troop_add_gold", ":stack_troop", ":player_gold_gain"),
  15246. (try_end),
  15247. (try_end),
  15248. ]),
  15249.  
  15250.  
  15251. #script_setup_troop_meeting:
  15252. # INPUT:
  15253. # param1: troop_id with which meeting will be made.
  15254. # param2: troop_dna (optional)
  15255.  
  15256. ("setup_troop_meeting",
  15257. [
  15258. (store_script_param_1, ":meeting_troop"),
  15259. (store_script_param_2, ":troop_dna"),
  15260. (call_script, "script_get_meeting_scene"),
  15261. (assign, ":meeting_scene", reg0),
  15262. (modify_visitors_at_site,":meeting_scene"),
  15263. (reset_visitors),
  15264. (set_visitor,0,"trp_player"),
  15265. (try_begin),
  15266. (gt, ":troop_dna", -1),
  15267. (set_visitor,17,":meeting_troop",":troop_dna"),
  15268. (else_try),
  15269. (set_visitor,17,":meeting_troop"),
  15270. (try_end),
  15271. (set_jump_mission,"mt_conversation_encounter"),
  15272. (jump_to_scene,":meeting_scene"),
  15273. (change_screen_map_conversation, ":meeting_troop"),
  15274. ]),
  15275.  
  15276. #script_setup_party_meeting:
  15277. # INPUT:
  15278. # param1: Party-id with which meeting will be made.
  15279.  
  15280. ("setup_party_meeting",
  15281. [
  15282. (store_script_param_1, ":meeting_party"),
  15283. (try_begin),
  15284. (lt, "$g_encountered_party_relation", 0), #hostile
  15285. # (call_script, "script_music_set_situation_with_culture", mtf_sit_encounter_hostile),
  15286. (try_end),
  15287. (call_script, "script_get_meeting_scene"), (assign, ":meeting_scene", reg0),
  15288. (modify_visitors_at_site,":meeting_scene"),(reset_visitors),
  15289. (set_visitor,0,"trp_player"),
  15290. (party_stack_get_troop_id, ":meeting_troop",":meeting_party",0),
  15291. (party_stack_get_troop_dna,":troop_dna",":meeting_party",0),
  15292. (set_visitor,17,":meeting_troop",":troop_dna"),
  15293. (set_jump_mission,"mt_conversation_encounter"),
  15294. (jump_to_scene,":meeting_scene"),
  15295. (change_screen_map_conversation, ":meeting_troop"),
  15296. ]),
  15297.  
  15298. #script_get_meeting_scene:
  15299. # INPUT: none
  15300. # OUTPUT: reg0 contain suitable scene_no
  15301.  
  15302. ("get_meeting_scene",
  15303. [
  15304. (party_get_current_terrain, ":terrain_type", "p_main_party"),
  15305. (assign, ":scene_to_use", "scn_random_scene"),
  15306. (try_begin),
  15307. (eq, ":terrain_type", rt_steppe),
  15308. (assign, ":scene_to_use", "scn_meeting_scene_steppe"),
  15309. (else_try),
  15310. (eq, ":terrain_type", rt_plain),
  15311. (assign, ":scene_to_use", "scn_meeting_scene_plain"),
  15312. (else_try),
  15313. (eq, ":terrain_type", rt_snow),
  15314. (assign, ":scene_to_use", "scn_meeting_scene_snow"),
  15315. (else_try),
  15316. (eq, ":terrain_type", rt_desert),
  15317. (assign, ":scene_to_use", "scn_meeting_scene_desert"),
  15318. (else_try),
  15319. (eq, ":terrain_type", rt_steppe_forest),
  15320. (assign, ":scene_to_use", "scn_meeting_scene_steppe"),
  15321. (else_try),
  15322. (eq, ":terrain_type", rt_forest),
  15323. (assign, ":scene_to_use", "scn_meeting_scene_plain"),
  15324. (else_try),
  15325. (eq, ":terrain_type", rt_snow_forest),
  15326. (assign, ":scene_to_use", "scn_meeting_scene_snow"),
  15327. (else_try),
  15328. (eq, ":terrain_type", rt_desert_forest),
  15329. (assign, ":scene_to_use", "scn_meeting_scene_desert"),
  15330. (else_try),
  15331. (assign, ":scene_to_use", "scn_meeting_scene_plain"),
  15332. (try_end),
  15333. (assign, reg0, ":scene_to_use"),
  15334. ]),
  15335.  
  15336.  
  15337. #script_party_remove_all_companions:
  15338. # INPUT:
  15339. # param1: Party-id from which companions will be removed.
  15340. # "$g_move_heroes" : controls if heroes will also be removed.
  15341.  
  15342. ("party_remove_all_companions",
  15343. [
  15344. (store_script_param_1, ":party"), #Source Party_id
  15345. (party_get_num_companion_stacks, ":num_companion_stacks",":party"),
  15346. (try_for_range_backwards, ":stack_no", 0, ":num_companion_stacks"),
  15347. (party_stack_get_troop_id, ":stack_troop",":party",":stack_no"),
  15348.  
  15349. (party_stack_get_size, ":stack_size", ":party", ":stack_no"),
  15350.  
  15351. (try_begin),
  15352. (troop_is_hero, ":stack_troop"),
  15353. (neg|is_between, ":stack_troop", pretenders_begin, pretenders_end),
  15354. (neq, ":stack_troop", "trp_player"),
  15355. (eq, "$g_prison_heroes", 1),
  15356. (eq, ":party", "p_main_party"),
  15357. (store_random_in_range, ":succeed_escaping", 0, 2),
  15358. (neq, ":succeed_escaping", 0), #50% chance companion stays with us.
  15359. (troop_set_health, ":stack_troop", 100), #heal before leaving
  15360. (store_faction_of_party, ":enemy_faction", "$g_enemy_party"),
  15361. (assign, ":minimum_distance", 99999),
  15362. (assign, ":prison_center", -1),
  15363. (try_for_range, ":center", walled_centers_begin, walled_centers_end),
  15364. (store_faction_of_party, ":center_faction", ":center"),
  15365. (eq, ":center_faction", ":enemy_faction"),
  15366. (store_distance_to_party_from_party, ":dist", ":center", "p_main_party"),
  15367. (lt, ":dist", ":minimum_distance"),
  15368. (assign, ":minimum_distance", ":dist"),
  15369. (assign, ":prison_center", ":center"),
  15370. (try_end),
  15371. (assign, reg1, ":prison_center"),
  15372. #(display_message, "@{!}DEBUG : prison center is {reg1}"),
  15373. (try_begin),
  15374. (ge, ":prison_center", 0),
  15375. (store_random_in_range, ":succeed_escaping", 0, 4),
  15376. (neq, ":succeed_escaping", 0), #25% chance companion escapes to a tavern.
  15377. (party_add_prisoners, ":prison_center", ":stack_troop", ":stack_size"),
  15378. (troop_set_slot, ":stack_troop", slot_troop_prisoner_of_party, ":prison_center"),
  15379. (troop_set_slot, ":stack_troop", slot_troop_playerparty_history, pp_history_scattered),
  15380. (troop_set_slot, ":stack_troop", slot_troop_turned_down_twice, 0),
  15381. (troop_set_slot, ":stack_troop", slot_troop_occupation, 0),
  15382. (party_remove_members, ":party", ":stack_troop", ":stack_size"),
  15383. (try_begin),
  15384. (eq, "$cheat_mode", 1),
  15385. (str_store_party_name, s1, ":prison_center"),
  15386. (display_message, "str_your_hero_prisoned_at_s1"),
  15387. (try_end),
  15388. (else_try),
  15389. #bandits or deserters won and captured companion. So place it randomly in a town's tavern.
  15390. (assign, ":end_condition", 1000),
  15391. (try_for_range, ":unused", 0, ":end_condition"),
  15392. (store_random_in_range, ":town_no", towns_begin, towns_end),
  15393. (neg|troop_slot_eq, ":stack_troop", slot_troop_home, ":town_no"),
  15394. (neg|troop_slot_eq, ":stack_troop", slot_troop_first_encountered, ":town_no"),
  15395. (assign, ":end_condition", -1),
  15396. (try_end),
  15397. (troop_set_slot, ":stack_troop", slot_troop_cur_center, ":town_no"),
  15398. (troop_set_slot, ":stack_troop", slot_troop_playerparty_history, pp_history_scattered),
  15399. (troop_set_slot, ":stack_troop", slot_troop_turned_down_twice, 0),
  15400. (troop_set_slot, ":stack_troop", slot_troop_occupation, 0),
  15401. (party_remove_members, ":party", ":stack_troop", ":stack_size"),
  15402. (try_begin),
  15403. (eq, "$cheat_mode", 1),
  15404. (str_store_troop_name, 4, ":stack_troop"),
  15405. (str_store_party_name, 5, ":town_no"),
  15406. (display_message, "@{!}{s4} is sent to {s5} after defeat"),
  15407. (try_end),
  15408. (try_end),
  15409. (else_try),
  15410. (this_or_next|neg|troop_is_hero, ":stack_troop"),
  15411. (eq, "$g_move_heroes", 1),
  15412. (party_remove_members, ":party", ":stack_troop", ":stack_size"),
  15413. (try_end),
  15414. (try_end),
  15415. ]),
  15416.  
  15417. #script_party_remove_all_prisoners:
  15418. # INPUT:
  15419. # param1: Party-id from which prisoners will be removed.
  15420. # "$g_move_heroes" : controls if heroes will also be removed.
  15421.  
  15422. ("party_remove_all_prisoners",
  15423. [
  15424. (store_script_param_1, ":party"), #Source Party_id
  15425. (party_get_num_prisoner_stacks, ":num_prisoner_stacks",":party"),
  15426. (try_for_range_backwards, ":stack_no", 0, ":num_prisoner_stacks"),
  15427. (party_prisoner_stack_get_troop_id, ":stack_troop",":party",":stack_no"),
  15428. (this_or_next|neg|troop_is_hero, ":stack_troop"),
  15429. (eq, "$g_move_heroes", 1),
  15430. (party_prisoner_stack_get_size, ":stack_size",":party",":stack_no"),
  15431. (party_remove_prisoners, ":party", ":stack_troop", ":stack_size"),
  15432. (try_end),
  15433. ]),
  15434.  
  15435. #script_party_add_party_companions:
  15436. # INPUT:
  15437. # param1: Party-id to add the second part
  15438. # param2: Party-id which will be added to the first one.
  15439. # "$g_move_heroes" : controls if heroes will also be added.
  15440.  
  15441. ("party_add_party_companions",
  15442. [
  15443. (store_script_param_1, ":target_party"), #Target Party_id
  15444. (store_script_param_2, ":source_party"), #Source Party_id
  15445. (party_get_num_companion_stacks, ":num_stacks",":source_party"),
  15446. (try_for_range, ":stack_no", 0, ":num_stacks"),
  15447. (party_stack_get_troop_id, ":stack_troop",":source_party",":stack_no"),
  15448. (this_or_next|neg|troop_is_hero, ":stack_troop"),
  15449. (eq, "$g_move_heroes", 1),
  15450. (party_stack_get_size, ":stack_size",":source_party",":stack_no"),
  15451. (party_add_members, ":target_party", ":stack_troop", ":stack_size"),
  15452. (party_stack_get_num_wounded, ":num_wounded", ":source_party", ":stack_no"),
  15453. (party_wound_members, ":target_party", ":stack_troop", ":num_wounded"),
  15454. (try_end),
  15455. ]),
  15456.  
  15457. #script_party_add_party_prisoners:
  15458. # INPUT:
  15459. # param1: Party-id to add the second party
  15460. # param2: Party-id which will be added to the first one.
  15461. # "$g_move_heroes" : controls if heroes will also be added.
  15462.  
  15463. ("party_add_party_prisoners",
  15464. [
  15465. (store_script_param_1, ":target_party"), #Target Party_id
  15466. (store_script_param_2, ":source_party"), #Source Party_id
  15467. (party_get_num_prisoner_stacks, ":num_stacks",":source_party"),
  15468. (try_for_range, ":stack_no", 0, ":num_stacks"),
  15469. (party_prisoner_stack_get_troop_id, ":stack_troop",":source_party",":stack_no"),
  15470. (this_or_next|neg|troop_is_hero, ":stack_troop"),
  15471. (eq, "$g_move_heroes", 1),
  15472. (party_prisoner_stack_get_size, ":stack_size",":source_party",":stack_no"),
  15473. (party_add_members, ":target_party", ":stack_troop", ":stack_size"),
  15474. (try_end),
  15475. ]),
  15476.  
  15477. #script_party_prisoners_add_party_companions:
  15478. # INPUT:
  15479. # param1: Party-id to add the second part
  15480. # param2: Party-id which will be added to the first one.
  15481. # "$g_move_heroes" : controls if heroes will also be added.
  15482.  
  15483. ("party_prisoners_add_party_companions",
  15484. [
  15485. (store_script_param_1, ":target_party"), #Target Party_id
  15486. (store_script_param_2, ":source_party"), #Source Party_id
  15487. (party_get_num_companion_stacks, ":num_stacks",":source_party"),
  15488. (try_for_range, ":stack_no", 0, ":num_stacks"),
  15489. (party_stack_get_troop_id, ":stack_troop",":source_party",":stack_no"),
  15490. (this_or_next|neg|troop_is_hero, ":stack_troop"),
  15491. (eq, "$g_move_heroes", 1),
  15492. (party_stack_get_size, ":stack_size",":source_party",":stack_no"),
  15493. (party_add_prisoners, ":target_party", ":stack_troop", ":stack_size"),
  15494. (try_end),
  15495. ]),
  15496.  
  15497. #script_party_prisoners_add_party_prisoners:
  15498. # INPUT:
  15499. # param1: Party-id to add the second part
  15500. # param2: Party-id which will be added to the first one.
  15501. # "$g_move_heroes" : controls if heroes will also be added.
  15502.  
  15503. ("party_prisoners_add_party_prisoners",
  15504. [
  15505. (store_script_param_1, ":target_party"), #Target Party_id
  15506. (store_script_param_2, ":source_party"), #Source Party_id
  15507. (party_get_num_prisoner_stacks, ":num_stacks",":source_party"),
  15508. (try_for_range, ":stack_no", 0, ":num_stacks"),
  15509. (party_prisoner_stack_get_troop_id, ":stack_troop",":source_party",":stack_no"),
  15510. (this_or_next|neg|troop_is_hero, ":stack_troop"),
  15511. (eq, "$g_move_heroes", 1),
  15512. (party_prisoner_stack_get_size, ":stack_size",":source_party",":stack_no"),
  15513. (party_add_prisoners, ":target_party", ":stack_troop", ":stack_size"),
  15514. (try_end),
  15515. ]),
  15516.  
  15517. # script_party_add_party:
  15518. # INPUT:
  15519. # param1: Party-id to add the second part
  15520. # param2: Party-id which will be added to the first one.
  15521. # "$g_move_heroes" : controls if heroes will also be added.
  15522.  
  15523. ("party_add_party",
  15524. [
  15525. (store_script_param_1, ":target_party"), #Target Party_id
  15526. (store_script_param_2, ":source_party"), #Source Party_id
  15527. (call_script, "script_party_add_party_companions", ":target_party", ":source_party"),
  15528. (call_script, "script_party_prisoners_add_party_prisoners", ":target_party", ":source_party"),
  15529. ]),
  15530.  
  15531.  
  15532. #script_party_copy:
  15533. # INPUT:
  15534. # param1: Party-id to copy the second party
  15535. # param2: Party-id which will be copied to the first one.
  15536.  
  15537. ("party_copy",
  15538. [
  15539. (assign, "$g_move_heroes", 1),
  15540. (store_script_param_1, ":target_party"), #Target Party_id
  15541. (store_script_param_2, ":source_party"), #Source Party_id
  15542. (party_clear, ":target_party"),
  15543. (call_script, "script_party_add_party", ":target_party", ":source_party"),
  15544. ]),
  15545.  
  15546.  
  15547. #script_clear_party_group:
  15548. # INPUT:
  15549. # param1: Party-id of the root of the group.
  15550. # This script will clear the root party and all parties attached to it recursively.
  15551.  
  15552. ("clear_party_group",
  15553. [
  15554. (store_script_param_1, ":root_party"),
  15555.  
  15556. (party_clear, ":root_party"),
  15557. (party_get_num_attached_parties, ":num_attached_parties", ":root_party"),
  15558. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  15559. (party_get_attached_party_with_rank, ":attached_party", ":root_party", ":attached_party_rank"),
  15560. (call_script, "script_clear_party_group", ":attached_party"),
  15561. (try_end),
  15562. ]),
  15563.  
  15564.  
  15565. #script_party_add_wounded_members_as_prisoners:
  15566. # INPUT:
  15567. # param1: Party-id to add the second party
  15568. # param2: Party-id which will be added to the first one.
  15569. # "$g_move_heroes" : controls if heroes will also be added.
  15570.  
  15571. ("party_add_wounded_members_as_prisoners",
  15572. [
  15573. (store_script_param_1, ":target_party"), #Target Party_id
  15574. (store_script_param_2, ":source_party"), #Source Party_id
  15575. (party_get_num_companion_stacks, ":num_stacks", ":source_party"),
  15576. (try_for_range, ":stack_no", 0, ":num_stacks"),
  15577. (party_stack_get_num_wounded, ":num_wounded", ":source_party", ":stack_no"),
  15578. (ge, ":num_wounded", 1),
  15579. (party_stack_get_troop_id, ":stack_troop", ":source_party", ":stack_no"),
  15580. (this_or_next|neg|troop_is_hero, ":stack_troop"),
  15581. (eq, "$g_move_heroes", 1),
  15582. #(party_prisoner_stack_get_size, ":stack_size",":source_party",":stack_no"),
  15583. (party_add_prisoners, ":target_party", ":stack_troop", ":num_wounded"),
  15584. (try_end),
  15585. ]),
  15586.  
  15587.  
  15588. #script_get_nonempty_party_in_group:
  15589. # INPUT:
  15590. # param1: Party-id of the root of the group.
  15591. # OUTPUT: reg0: nonempy party-id
  15592.  
  15593. ("get_nonempty_party_in_group",
  15594. [
  15595. (store_script_param_1, ":party_no"),
  15596. (party_get_num_companion_stacks, ":num_companion_stacks", ":party_no"),
  15597. (try_begin),
  15598. (gt, ":num_companion_stacks", 0),
  15599. (assign, reg0, ":party_no"),
  15600. (else_try),
  15601. (assign, reg0, -1),
  15602.  
  15603. (party_get_num_attached_parties, ":num_attached_parties", ":party_no"),
  15604. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  15605. (lt, reg0, 0),
  15606. (party_get_attached_party_with_rank, ":attached_party", ":party_no", ":attached_party_rank"),
  15607. (call_script, "script_get_nonempty_party_in_group", ":attached_party"),
  15608. (try_end),
  15609. (try_end),
  15610. ]),
  15611.  
  15612. #script_collect_prisoners_from_empty_parties:
  15613. # INPUT:
  15614. # param1: Party-id of the root of the group.
  15615. # param2: Party to collect prisoners in.
  15616. # make sure collection party is cleared before calling this.
  15617.  
  15618. ("collect_prisoners_from_empty_parties",
  15619. [
  15620. (store_script_param_1, ":party_no"),
  15621. (store_script_param_2, ":collection_party"),
  15622.  
  15623. (party_get_num_companions, ":num_companions", ":party_no"),
  15624. (try_begin),
  15625. (eq, ":num_companions", 0), #party is empty (has no companions). Collect its prisoners.
  15626. (party_get_num_prisoner_stacks, ":num_stacks",":party_no"),
  15627. (try_for_range, ":stack_no", 0, ":num_stacks"),
  15628. (party_prisoner_stack_get_troop_id, ":stack_troop", ":party_no", ":stack_no"),
  15629. (troop_is_hero, ":stack_troop"),
  15630. (party_add_members, ":collection_party", ":stack_troop", 1),
  15631. (try_end),
  15632. (try_end),
  15633. (party_get_num_attached_parties, ":num_attached_parties", ":party_no"),
  15634. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  15635. (party_get_attached_party_with_rank, ":attached_party", ":party_no", ":attached_party_rank"),
  15636. (call_script, "script_collect_prisoners_from_empty_parties", ":attached_party", ":collection_party"),
  15637. (try_end),
  15638. ]),
  15639.  
  15640. #script_change_party_morale:
  15641. # INPUT: party_no, morale_gained
  15642. # OUTPUT: none
  15643.  
  15644. ("change_party_morale",
  15645. [
  15646. (store_script_param_1, ":party_no"),
  15647. (store_script_param_2, ":morale_dif"),
  15648.  
  15649. (party_get_morale, ":cur_morale", ":party_no"),
  15650. (store_add, ":new_morale", ":cur_morale", ":morale_dif"),
  15651. (val_clamp, ":new_morale", 0, 100),
  15652. (party_set_morale, ":party_no", ":new_morale"),
  15653. (str_store_party_name, s1, ":party_no"),
  15654.  
  15655. (try_begin),
  15656. (lt, ":new_morale", ":cur_morale"),
  15657. (store_sub, reg1, ":cur_morale", ":new_morale"),
  15658. (else_try),
  15659. (gt, ":new_morale", ":cur_morale"),
  15660. (store_sub, reg1, ":new_morale", ":cur_morale"),
  15661. (try_end),
  15662. ]),
  15663.  
  15664. #script_count_casualties_and_adjust_morale:
  15665. # INPUT: none
  15666. # OUTPUT: none
  15667.  
  15668. ("count_casualties_and_adjust_morale",
  15669. [
  15670. (call_script, "script_calculate_main_party_shares"),
  15671. (assign, ":num_player_party_shares", reg0),
  15672.  
  15673. (assign, ":our_loss_score", 0),
  15674. (party_get_num_companion_stacks, ":num_stacks","p_player_casualties"),
  15675. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15676. (party_stack_get_troop_id, ":stack_troop", "p_player_casualties", ":i_stack"),
  15677. (party_stack_get_size, ":stack_size", "p_player_casualties", ":i_stack"),
  15678.  
  15679. (party_stack_get_num_wounded, ":num_wounded", "p_player_casualties", ":i_stack"),
  15680. (store_mul, ":stack_size_mul_2", ":stack_size", 2),
  15681. (store_sub, ":stack_size_mul_2_sub_wounded", ":num_wounded"),
  15682.  
  15683. (store_character_level, ":level", ":stack_troop"),
  15684. (store_add, ":gain", ":level", 3),
  15685.  
  15686. #if died/wounded troop is player troop then give its level +30 while calculating troop die effect on morale
  15687. (try_begin),
  15688. (eq, ":stack_troop", "trp_player"),
  15689. (val_add, ":level", 75),
  15690. (else_try),
  15691. (troop_is_hero, ":stack_troop"),
  15692. (val_add, ":level", 50),
  15693. (try_end),
  15694.  
  15695. (val_mul, ":gain", ":gain"),
  15696. (val_div, ":gain", 10),
  15697. (assign, reg0, ":gain"),
  15698. (val_mul, ":gain", ":stack_size"),
  15699.  
  15700. (try_begin),
  15701. (neg|troop_is_hero, ":stack_troop"),
  15702. (val_mul, ":gain", ":stack_size_mul_2_sub_wounded"),
  15703. (val_div, ":gain", ":stack_size_mul_2"),
  15704. (try_end),
  15705.  
  15706. (try_begin),
  15707. (eq, "$cheat_mode", 1),
  15708. (assign, reg1, ":stack_size"),
  15709. (assign, reg2, ":gain"),
  15710. (display_message, "str_our_per_person__reg0_num_people__reg1_total_gain__reg2"),
  15711. (try_end),
  15712. (val_add, ":our_loss_score", ":gain"),
  15713. (try_end),
  15714.  
  15715. (assign, ":died_enemy_population", 0),
  15716. (assign, ":enemy_loss_score", 0),
  15717. (party_get_num_companion_stacks, ":num_stacks","p_enemy_casualties"),
  15718. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15719. (party_stack_get_troop_id, ":stack_troop", "p_enemy_casualties", ":i_stack"),
  15720. (party_stack_get_size, ":stack_size", "p_enemy_casualties", ":i_stack"),
  15721.  
  15722. (party_stack_get_num_wounded, ":num_wounded", "p_enemy_casualties", ":i_stack"),
  15723. (store_mul, ":stack_size_mul_2", ":stack_size", 2),
  15724. (store_sub, ":stack_size_mul_2_sub_wounded", ":stack_size_mul_2", ":num_wounded"),
  15725.  
  15726. (store_character_level, ":level", ":stack_troop"),
  15727. (store_add, ":gain", ":level", 3),
  15728.  
  15729. #if troop is hero give extra +15 level while calculating troop die effect on morale
  15730. (try_begin),
  15731. (troop_is_hero, ":stack_troop"),
  15732. (val_add, ":level", 50),
  15733. (try_end),
  15734.  
  15735. (val_mul, ":gain", ":gain"),
  15736. (val_div, ":gain", 10),
  15737. (assign, reg0, ":gain"),
  15738. (val_mul, ":gain", ":stack_size"),
  15739.  
  15740. (try_begin),
  15741. (neg|troop_is_hero, ":stack_troop"),
  15742. (val_mul, ":gain", ":stack_size_mul_2_sub_wounded"),
  15743. (val_div, ":gain", ":stack_size_mul_2"),
  15744. (try_end),
  15745.  
  15746. (try_begin),
  15747. (eq, "$cheat_mode", 1),
  15748. (assign, reg1, ":stack_size"),
  15749. (assign, reg2, ":gain"),
  15750. (display_message, "str_ene_per_person__reg0_num_people__reg1_total_gain__reg2"),
  15751. (try_end),
  15752. (val_add, ":enemy_loss_score", ":gain"),
  15753. (val_add, ":died_enemy_population", ":stack_size"),
  15754. (try_end),
  15755.  
  15756. (assign, ":ally_loss_score", 0),
  15757. (try_begin),
  15758. (eq, "$any_allies_at_the_last_battle", 1),
  15759. (party_get_num_companion_stacks, ":num_stacks","p_ally_casualties"),
  15760. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15761. (party_stack_get_troop_id, ":stack_troop", "p_ally_casualties", ":i_stack"),
  15762. (party_stack_get_size, ":stack_size", "p_ally_casualties", ":i_stack"),
  15763.  
  15764. (party_stack_get_num_wounded, ":num_wounded", "p_ally_casualties", ":i_stack"),
  15765. (store_mul, ":stack_size_mul_2", ":stack_size", 2),
  15766. (store_sub, ":stack_size_mul_2_sub_wounded", ":num_wounded"),
  15767.  
  15768. (store_character_level, ":level", ":stack_troop"),
  15769. (store_add, ":gain", ":level", 3),
  15770.  
  15771. #if troop is hero give extra +15 level while calculating troop die effect on morale
  15772. (try_begin),
  15773. (troop_is_hero, ":stack_troop"),
  15774. (val_add, ":level", 50),
  15775. (try_end),
  15776.  
  15777. (val_mul, ":gain", ":gain"),
  15778. (val_div, ":gain", 10),
  15779. (assign, reg0, ":gain"),
  15780. (val_mul, ":gain", ":stack_size"),
  15781.  
  15782. (try_begin),
  15783. (neg|troop_is_hero, ":stack_troop"),
  15784. (val_mul, ":gain", ":stack_size_mul_2_sub_wounded"),
  15785. (val_div, ":gain", ":stack_size_mul_2"),
  15786. (try_end),
  15787.  
  15788. (try_begin),
  15789. (eq, "$cheat_mode", 1),
  15790. (assign, reg1, ":stack_size"),
  15791. (assign, reg2, ":gain"),
  15792. (display_message, "str_all_per_person__reg0_num_people__reg1_total_gain__reg2"),
  15793. (try_end),
  15794. (val_add, ":ally_loss_score", ":gain"),
  15795. (try_end),
  15796. (try_end),
  15797.  
  15798. (store_add, ":our_losses", ":our_loss_score", ":ally_loss_score"),
  15799. (assign, ":enemy_losses", ":enemy_loss_score"),
  15800. (val_mul, ":our_losses", 100),
  15801.  
  15802. (try_begin),
  15803. (eq, "$cheat_mode", 1),
  15804. (assign, reg0, ":enemy_losses"),
  15805. (display_message, "@{!}DEBUGS : enemy_loses : {reg0}"),
  15806. (try_end),
  15807.  
  15808. (try_begin),
  15809. (gt, ":enemy_losses", 0),
  15810. (store_div, ":loss_ratio", ":our_losses", ":enemy_losses"),
  15811. (else_try),
  15812. (assign, ":loss_ratio", 1000),
  15813. (try_end),
  15814.  
  15815. (try_begin),
  15816. (eq, "$cheat_mode", 1),
  15817. (assign, reg1, ":loss_ratio"),
  15818. (display_message, "str_loss_ratio_is_reg1"),
  15819. (try_end),
  15820.  
  15821. (try_begin),
  15822. (neg|is_between, "$g_enemy_party", centers_begin, centers_end),
  15823. (store_sub, ":total_gain", 60, ":loss_ratio"),
  15824. (else_try),
  15825. (store_sub, ":total_gain", 100, ":loss_ratio"),
  15826. (try_end),
  15827.  
  15828. (try_begin),
  15829. (lt, ":total_gain", 0),
  15830. (val_div, ":total_gain", 2),
  15831. (try_end),
  15832.  
  15833. (try_begin),
  15834. (eq, "$cheat_mode", 1),
  15835. (assign, reg0, ":total_gain"),
  15836. (display_message, "@{!}DEBUGS1 : total_gain : {reg0}"),
  15837. (try_end),
  15838.  
  15839. (val_max, ":total_gain", -60), #total gain changes between -60(1.8+ loss ratio) and 60(0 loss ratio). We assumed average loss ratio is 0.6
  15840. (val_mul, ":total_gain", ":enemy_losses"),
  15841. (val_div, ":total_gain", 100),
  15842.  
  15843. (store_mul, ":total_enemy_morale_gain", ":total_gain", -1), #enemies get totally negative of the morale we get
  15844. (val_mul, ":total_gain", "$g_strength_contribution_of_player"),
  15845. (val_div, ":total_gain", 100),
  15846.  
  15847. (try_begin),
  15848. (eq, "$cheat_mode", 1),
  15849. (assign, reg0, ":total_gain"),
  15850. (display_message, "@{!}DEBUGS2 : total_gain : {reg0}"),
  15851. (try_end),
  15852.  
  15853. (try_begin),
  15854. (party_is_active, "$g_enemy_party"), #change enemy morale if and only if there is a valid enemy party
  15855.  
  15856. #main enemy party
  15857. (assign, ":total_enemy_population", 0),
  15858. (val_add, ":total_enemy_population", 10), #every part effect total population by number of agents they have plus 10
  15859. (party_get_num_companion_stacks, ":num_stacks", "$g_enemy_party"),
  15860. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15861. (party_stack_get_troop_id, ":stack_troop", "$g_enemy_party", ":i_stack"),
  15862. (party_stack_get_size, ":stack_size", "$g_enemy_party", ":i_stack"),
  15863. (val_add, ":total_enemy_population", ":stack_size"),
  15864. (try_end),
  15865. (assign, ":main_enemy_party_population", ":total_enemy_population"),
  15866.  
  15867. #enemy attachers
  15868. (party_get_num_attached_parties, ":num_attached_parties", "$g_enemy_party"),
  15869. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  15870. (val_add, ":total_enemy_population", 10), #every part effect total population by number of agents they have plus 10
  15871. (party_get_attached_party_with_rank, ":attached_party", "$g_enemy_party", ":attached_party_rank"),
  15872. (party_get_num_companion_stacks, ":num_stacks", ":attached_party"),
  15873. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15874. (party_stack_get_troop_id, ":stack_troop", ":attached_party", ":i_stack"),
  15875. (party_stack_get_size, ":stack_size", ":attached_party", ":i_stack"),
  15876. (val_add, ":total_enemy_population", ":stack_size"),
  15877. (try_end),
  15878. (try_end),
  15879.  
  15880. #(assign, reg3, ":total_enemy_population"),
  15881. #(assign, reg4, ":died_enemy_population"),
  15882. #(store_sub, ":remaining_enemy_population", ":total_enemy_population", ":died_enemy_population"),
  15883. #(val_add, ":remaining_enemy_population", 10),
  15884. #(assign, reg5, ":remaining_enemy_population"),
  15885. #(display_message, "@total : {reg3}, died : {reg4}, remaining : {reg5}"),
  15886.  
  15887. #remaining enemy population has 10+remaining soldiers in enemy party
  15888. (assign, ":remaining_enemy_population", ":total_enemy_population"),
  15889.  
  15890. (assign, reg5, ":remaining_enemy_population"),
  15891. (assign, reg6, ":total_enemy_morale_gain"),
  15892.  
  15893. (set_fixed_point_multiplier, 100),
  15894. (val_mul, ":remaining_enemy_population", 100),
  15895. (store_sqrt, ":sqrt_remaining_enemy_population", ":remaining_enemy_population"),
  15896. (val_div, ":sqrt_remaining_enemy_population", 100),
  15897. (val_div, ":total_enemy_morale_gain", ":sqrt_remaining_enemy_population"),
  15898. (val_div, ":total_enemy_morale_gain", 4),
  15899.  
  15900. (try_begin),
  15901. (eq, "$cheat_mode", 1),
  15902. (assign, reg7, ":total_enemy_morale_gain"),
  15903. (display_message, "str_total_enemy_morale_gain__reg6_last_total_enemy_morale_gain__reg7_remaining_enemy_population__reg5"),
  15904. (try_end),
  15905.  
  15906. (store_mul, ":party_morale_gain", ":total_enemy_morale_gain", ":main_enemy_party_population"),
  15907. (val_div, ":party_morale_gain", ":total_enemy_population"),
  15908.  
  15909. (try_begin),
  15910. (party_is_active, "$g_enemy_party"),
  15911.  
  15912. (call_script, "script_change_party_morale", "$g_enemy_party", ":party_morale_gain"),
  15913.  
  15914. (party_get_num_attached_parties, ":num_attached_parties", "$g_enemy_party"),
  15915. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  15916. (party_get_attached_party_with_rank, ":attached_party", "$g_enemy_party", ":attached_party_rank"),
  15917. (party_get_num_companion_stacks, ":num_stacks", ":attached_party"),
  15918. (assign, ":party_population", 0),
  15919. (try_for_range, ":i_stack", 0, ":num_stacks"),
  15920. (party_stack_get_troop_id, ":stack_troop", ":attached_party", ":i_stack"),
  15921. (party_stack_get_size, ":stack_size", ":attached_party", ":i_stack"),
  15922. (val_add, ":party_population", ":stack_size"),
  15923. (try_end),
  15924. #(store_div, ":party_ratio", ":total_enemy_population_multiplied_by_100", ":party_population"), #party ratio changes between 0..100, shows population ratio of that party among all enemy parties
  15925. (store_mul, ":party_morale_gain", ":total_enemy_morale_gain", ":party_population"),
  15926. (val_div, ":party_morale_gain", ":total_enemy_population"),
  15927. (call_script, "script_change_party_morale", ":attached_party", ":party_morale_gain"),
  15928. (try_end),
  15929. (try_end),
  15930. (try_end),
  15931.  
  15932. #Add morale
  15933. (assign, ":morale_gain", ":total_gain"),
  15934. (val_div, ":morale_gain", ":num_player_party_shares"),#if there are lots of soldiers in my party there will be less morale increase.
  15935.  
  15936. (try_begin),
  15937. (eq, "$cheat_mode", 1),
  15938. (assign, reg0, ":num_player_party_shares"),
  15939. (assign, reg1, ":total_gain"),
  15940. (display_message, "@{!}DEBUGS3 : num_player_party_shares:{reg0}, total_gain:{reg1}"),
  15941. (try_end),
  15942.  
  15943. (call_script, "script_change_player_party_morale", ":morale_gain"),
  15944.  
  15945. (store_mul, ":killed_enemies_by_our_soldiers", ":died_enemy_population", "$g_strength_contribution_of_player"),
  15946. (store_div, ":faction_morale_change", ":killed_enemies_by_our_soldiers", 8), #each 8 killed agent with any faction decreases morale of troops belong to that faction in our party by 1.
  15947. (try_begin),
  15948. (gt, ":faction_morale_change", 2000),
  15949. (assign, ":faction_morale_change", 2000),
  15950. (try_end),
  15951.  
  15952. (try_begin), #here we give positive morale to our troops of with same faction of ally party with 2/3x multipication.
  15953. (ge, "$g_ally_party", 0),
  15954.  
  15955. (store_div, ":ally_faction_morale_change", ":faction_morale_change", 3), #2/3x multipication (less than normal)
  15956. (val_mul, ":ally_faction_morale_change", 2),
  15957. (store_faction_of_party, ":ally_faction", "$g_ally_party"),
  15958. (faction_get_slot, ":faction_morale", ":ally_faction", slot_faction_morale_of_player_troops),
  15959. (val_add, ":faction_morale", ":ally_faction_morale_change"),
  15960. (faction_set_slot, ":ally_faction", slot_faction_morale_of_player_troops, ":faction_morale"),
  15961. (try_end),
  15962.  
  15963. (try_begin), #here we give positive morale to our troops of owner of rescued village's faction after saving village from bandits by x3 bonus.
  15964. (neg|party_is_active, "$g_enemy_party"),
  15965. (ge, "$current_town", 0),
  15966.  
  15967. (val_mul, ":faction_morale_change", 2), #2x bonus (more than normal)
  15968. (store_faction_of_party, ":ally_faction", "$current_town"),
  15969. (faction_get_slot, ":faction_morale", ":ally_faction", slot_faction_morale_of_player_troops),
  15970. (val_add, ":faction_morale", ":faction_morale_change"),
  15971. (faction_set_slot, ":ally_faction", slot_faction_morale_of_player_troops, ":faction_morale"),
  15972. (else_try),
  15973. (party_is_active, "$g_enemy_party"),
  15974. (assign, ":currently_in_rebellion", 0),
  15975. (try_begin),
  15976. (eq, "$players_kingdom", "fac_player_supporters_faction"),
  15977. (neg|faction_slot_eq, "fac_player_supporters_faction", slot_faction_leader, "trp_player"),
  15978. (assign, ":currently_in_rebellion", 1),
  15979. (try_end),
  15980. (eq, ":currently_in_rebellion", 0),
  15981.  
  15982. (store_div, ":faction_morale_change", ":faction_morale_change", 3), #2/3x multipication (less than normal)
  15983. (val_mul, ":faction_morale_change", 2),
  15984. (store_faction_of_party, ":enemy_faction", "$g_enemy_party"),
  15985. (faction_get_slot, ":faction_morale", ":enemy_faction", slot_faction_morale_of_player_troops),
  15986. (val_sub, ":faction_morale", ":faction_morale_change"),
  15987. (faction_set_slot, ":enemy_faction", slot_faction_morale_of_player_troops, ":faction_morale"),
  15988. (try_end),
  15989.  
  15990. ]),
  15991.  
  15992. #script_print_casualties_to_s0:
  15993. # INPUT:
  15994. # param1: Party_id, param2: 0 = use new line, 1 = use comma
  15995.  
  15996. #OUTPUT:
  15997. # string register 0.
  15998.  
  15999. ("print_casualties_to_s0",
  16000. [(store_script_param, ":party_no", 1),
  16001. (store_script_param, ":use_comma", 2),
  16002. (str_clear, s0),
  16003. (assign, ":total_reported", 0),
  16004. (assign, ":total_wounded", 0),
  16005. (assign, ":total_killed", 0),
  16006. (assign, ":total_routed", 0),
  16007. (party_get_num_companion_stacks, ":num_stacks",":party_no"),
  16008. (try_for_range, ":i_stack", 0, ":num_stacks"),
  16009. (party_stack_get_troop_id, ":stack_troop_id", ":party_no", ":i_stack"),
  16010. (party_stack_get_size, ":stack_size", ":party_no", ":i_stack"),
  16011. (party_stack_get_num_wounded, ":num_wounded", ":party_no", ":i_stack"),
  16012. #get number of routed agent numbers
  16013. (try_begin),
  16014. (this_or_next|eq, ":party_no", "p_main_party"),
  16015. (eq, ":party_no", "p_player_casualties"),
  16016. (troop_get_slot, ":num_routed", ":stack_troop_id", slot_troop_player_routed_agents),
  16017. (troop_set_slot, ":stack_troop_id", slot_troop_player_routed_agents, 0),
  16018. (else_try),
  16019. (party_get_attached_to, ":attached_to", ":party_no"),
  16020. (this_or_next|eq, ":party_no", "p_ally_casualties"),
  16021. (ge, ":attached_to", 0),
  16022. (this_or_next|eq, ":party_no", "p_ally_casualties"),
  16023. (eq, ":attached_to", "p_main_party"),
  16024. (troop_get_slot, ":num_routed", ":stack_troop_id", slot_troop_ally_routed_agents),
  16025. (troop_set_slot, ":stack_troop_id", slot_troop_ally_routed_agents, 0),
  16026. (else_try),
  16027. (troop_get_slot, ":num_routed", ":stack_troop_id", slot_troop_enemy_routed_agents),
  16028. (troop_set_slot, ":stack_troop_id", slot_troop_enemy_routed_agents, 0),
  16029. (try_end),
  16030. (store_sub, ":num_killed", ":stack_size", ":num_wounded"),
  16031. (val_sub, ":num_killed", ":num_routed"),
  16032. (val_add, ":total_killed", ":num_killed"),
  16033. (val_add, ":total_wounded", ":num_wounded"),
  16034. (val_add, ":total_routed", ":num_routed"),
  16035. (try_begin),
  16036. (this_or_next|gt, ":num_killed", 0),
  16037. (this_or_next|gt, ":num_wounded", 0),
  16038. (gt, ":num_routed", 0),
  16039. (store_add, reg3, ":num_killed", ":num_wounded"),
  16040. (store_add, reg3, reg3, ":num_routed"),
  16041. (str_store_troop_name_by_count, s1, ":stack_troop_id", reg3),
  16042. (try_begin),
  16043. (troop_is_hero, ":stack_troop_id"),
  16044. (assign, reg3, 0),
  16045. (try_end),
  16046. (try_begin), #there are people who killed, wounded and routed.
  16047. (gt, ":num_killed", 0),
  16048. (gt, ":num_wounded", 0),
  16049. (gt, ":num_routed", 0),
  16050. (assign, reg4, ":num_killed"),
  16051. (assign, reg5, ":num_wounded"),
  16052. (assign, reg6, ":num_routed"),
  16053. (str_store_string, s2, "str_reg4_killed_reg5_wounded_reg6_routed"),
  16054. (else_try), #there are people who killed and routed.
  16055. (gt, ":num_killed", 0),
  16056. (gt, ":num_routed", 0),
  16057. (assign, reg4, ":num_killed"),
  16058. (assign, reg5, ":num_routed"),
  16059. (str_store_string, s2, "str_reg4_killed_reg5_routed"),
  16060. (else_try), #there are people who killed and wounded.
  16061. (gt, ":num_killed", 0),
  16062. (gt, ":num_wounded", 0),
  16063. (assign, reg4, ":num_killed"),
  16064. (assign, reg5, ":num_wounded"),
  16065. (str_store_string, s2, "str_reg4_killed_reg5_wounded"),
  16066. (else_try), #there are people who wounded and routed.
  16067. (gt, ":num_wounded", 0),
  16068. (gt, ":num_routed", 0),
  16069. (assign, reg4, ":num_wounded"),
  16070. (assign, reg5, ":num_routed"),
  16071. (str_store_string, s2, "str_reg4_wounded_reg5_routed"),
  16072. (else_try), #there are people who only killed.
  16073. (gt, ":num_killed", 0),
  16074. (assign, reg1, ":num_killed"),
  16075. (str_store_string, s3, "@killed"),
  16076. (str_store_string, s2, "str_reg1_blank_s3"),
  16077. (else_try), #there are people who only wounded.
  16078. (gt, ":num_wounded", 0),
  16079. (assign, reg1, ":num_wounded"),
  16080. (str_store_string, s3, "@wounded"),
  16081. (str_store_string, s2, "str_reg1_blank_s3"),
  16082. (else_try), #there are people who only routed.
  16083. (assign, reg1, ":num_routed"),
  16084. (str_store_string, s3, "str_routed"),
  16085. (str_store_string, s2, "str_reg1_blank_s3"),
  16086. (try_end),
  16087. (try_begin),
  16088. (eq, ":use_comma", 1),
  16089. (try_begin),
  16090. (eq, ":total_reported", 0),
  16091. (str_store_string, s0, "@{!}{reg3?{reg3}:} {s1} ({s2})"),
  16092. (else_try),
  16093. (str_store_string, s0, "@{!}{s0}, {reg3?{reg3}:} {s1} ({s2})"),
  16094. (try_end),
  16095. (else_try),
  16096. (str_store_string, s0, "@{!}{s0}^{reg3?{reg3}:} {s1} ({s2})"),
  16097. (try_end),
  16098. (val_add, ":total_reported", 1),
  16099. (try_end),
  16100. (try_end),
  16101. (try_begin),
  16102. (this_or_next|gt, ":total_killed", 0),
  16103. (this_or_next|gt, ":total_wounded", 0),
  16104. (gt, ":total_routed", 0),
  16105. (store_add, ":total_agents", ":total_killed", ":total_wounded"),
  16106. (val_add, ":total_agents", ":total_routed"),
  16107. (assign, reg3, ":total_agents"),
  16108. (try_begin),
  16109. (gt, ":total_killed", 0),
  16110. (gt, ":total_wounded", 0),
  16111. (gt, ":total_routed", 0),
  16112. (assign, reg4, ":total_killed"),
  16113. (assign, reg5, ":total_wounded"),
  16114. (assign, reg6, ":total_routed"),
  16115. (str_store_string, s2, "str_reg4_killed_reg5_wounded_reg6_routed"),
  16116. (else_try),
  16117. (gt, ":total_killed", 0),
  16118. (gt, ":total_routed", 0),
  16119. (assign, reg4, ":total_killed"),
  16120. (assign, reg5, ":total_routed"),
  16121. (str_store_string, s2, "str_reg4_killed_reg5_routed"),
  16122. (else_try),
  16123. (gt, ":total_killed", 0),
  16124. (gt, ":total_wounded", 0),
  16125. (assign, reg4, ":total_killed"),
  16126. (assign, reg5, ":total_wounded"),
  16127. (str_store_string, s2, "str_reg4_killed_reg5_wounded"),
  16128. (else_try),
  16129. (gt, ":total_wounded", 0),
  16130. (gt, ":total_routed", 0),
  16131. (assign, reg4, ":total_wounded"),
  16132. (assign, reg5, ":total_routed"),
  16133. (str_store_string, s2, "str_reg4_wounded_reg5_routed"),
  16134. (else_try),
  16135. (gt, ":total_killed", 0),
  16136. (str_store_string, s2, "@killed"),
  16137. (else_try),
  16138. (gt, ":total_wounded", 0),
  16139. (str_store_string, s2, "@wounded"),
  16140. (else_try),
  16141. (str_store_string, s2, "str_routed"),
  16142. (else_try),
  16143. (try_end),
  16144. (str_store_string, s0, "@{s0}^TOTAL: {reg3} ({s2})"),
  16145. (else_try),
  16146. (try_begin),
  16147. (eq, ":use_comma", 1),
  16148. (str_store_string, s0, "@None"),
  16149. (else_try),
  16150. (str_store_string, s0, "@^None"),
  16151. (try_end),
  16152. (try_end),
  16153. ]),
  16154.  
  16155. #script_write_fit_party_members_to_stack_selection
  16156. # INPUT:
  16157. # param1: party_no, exclude_leader
  16158. #OUTPUT:
  16159. # trp_stack_selection_amounts slots (slot 0 = number of stacks, 1 = number of men fit, 2..n = stack sizes (fit))
  16160. # trp_stack_selection_ids slots (2..n = stack troops)
  16161. ("write_fit_party_members_to_stack_selection",
  16162. [
  16163. (store_script_param, ":party_no", 1),
  16164. (store_script_param, ":exclude_leader", 2),
  16165. (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
  16166. (assign, ":slot_index", 2),
  16167. (assign, ":total_fit", 0),
  16168. (try_for_range, ":stack_index", 0, ":num_stacks"),
  16169. (party_stack_get_troop_id, ":stack_troop", ":party_no", ":stack_index"),
  16170. (assign, ":num_fit", 0),
  16171. (try_begin),
  16172. (troop_is_hero, ":stack_troop"),
  16173. (try_begin),
  16174. (neg|troop_is_wounded, ":stack_troop"),
  16175. (this_or_next|eq, ":exclude_leader", 0),
  16176. (neq, ":stack_index", 0),
  16177. (assign, ":num_fit",1),
  16178. (try_end),
  16179. (else_try),
  16180. (party_stack_get_size, ":num_fit", ":party_no", ":stack_index"),
  16181. (party_stack_get_num_wounded, ":num_wounded", ":party_no", ":stack_index"),
  16182. (val_sub, ":num_fit", ":num_wounded"),
  16183. (try_end),
  16184. (try_begin),
  16185. (gt, ":num_fit", 0),
  16186. (troop_set_slot, "trp_stack_selection_amounts", ":slot_index", ":num_fit"),
  16187. (troop_set_slot, "trp_stack_selection_ids", ":slot_index", ":stack_troop"),
  16188. (val_add, ":slot_index", 1),
  16189. (try_end),
  16190. (val_add, ":total_fit", ":num_fit"),
  16191. (try_end),
  16192. (val_sub, ":slot_index", 2),
  16193. (troop_set_slot, "trp_stack_selection_amounts", 0, ":slot_index"),
  16194. (troop_set_slot, "trp_stack_selection_amounts", 1, ":total_fit"),
  16195. ]),
  16196.  
  16197. #script_remove_fit_party_member_from_stack_selection
  16198. # INPUT:
  16199. # param1: slot_index
  16200. #OUTPUT:
  16201. # reg0 = troop_no
  16202. # trp_stack_selection_amounts slots (slot 0 = number of stacks, 1 = number of men fit, 2..n = stack sizes (fit))
  16203. # trp_stack_selection_ids slots (2..n = stack troops)
  16204. ("remove_fit_party_member_from_stack_selection",
  16205. [
  16206. (store_script_param, ":slot_index", 1),
  16207. (val_add, ":slot_index", 2),
  16208. (troop_get_slot, ":amount", "trp_stack_selection_amounts", ":slot_index"),
  16209. (troop_get_slot, ":troop_no", "trp_stack_selection_ids", ":slot_index"),
  16210. (val_sub, ":amount", 1),
  16211. (troop_set_slot, "trp_stack_selection_amounts", ":slot_index", ":amount"),
  16212. (troop_get_slot, ":total_amount", "trp_stack_selection_amounts", 1),
  16213. (val_sub, ":total_amount", 1),
  16214. (troop_set_slot, "trp_stack_selection_amounts", 1, ":total_amount"),
  16215. (try_begin),
  16216. (le, ":amount", 0),
  16217. (troop_get_slot, ":num_slots", "trp_stack_selection_amounts", 0),
  16218. (store_add, ":end_cond", ":num_slots", 2),
  16219. (store_add, ":begin_cond", ":slot_index", 1),
  16220. (try_for_range, ":index", ":begin_cond", ":end_cond"),
  16221. (store_sub, ":prev_index", ":index", 1),
  16222. (troop_get_slot, ":value", "trp_stack_selection_amounts", ":index"),
  16223. (troop_set_slot, "trp_stack_selection_amounts", ":prev_index", ":value"),
  16224. (troop_get_slot, ":value", "trp_stack_selection_ids", ":index"),
  16225. (troop_set_slot, "trp_stack_selection_ids", ":prev_index", ":value"),
  16226. (try_end),
  16227. (val_sub, ":num_slots", 1),
  16228. (troop_set_slot, "trp_stack_selection_amounts", 0, ":num_slots"),
  16229. (try_end),
  16230. (assign, reg0, ":troop_no"),
  16231. ]),
  16232.  
  16233. #script_remove_random_fit_party_member_from_stack_selection
  16234. # INPUT:
  16235. # none
  16236. #OUTPUT:
  16237. # reg0 = troop_no
  16238. # trp_stack_selection_amounts slots (slot 0 = number of stacks, 1 = number of men fit, 2..n = stack sizes (fit))
  16239. # trp_stack_selection_ids slots (2..n = stack troops)
  16240. ("remove_random_fit_party_member_from_stack_selection",
  16241. [
  16242. (troop_get_slot, ":total_amount", "trp_stack_selection_amounts", 1),
  16243. (store_random_in_range, ":random_troop", 0, ":total_amount"),
  16244. (troop_get_slot, ":num_slots", "trp_stack_selection_amounts", 0),
  16245. (store_add, ":end_cond", ":num_slots", 2),
  16246. (try_for_range, ":index", 2, ":end_cond"),
  16247. (troop_get_slot, ":amount", "trp_stack_selection_amounts", ":index"),
  16248. (val_sub, ":random_troop", ":amount"),
  16249. (lt, ":random_troop", 0),
  16250. (assign, ":end_cond", 0),
  16251. (store_sub, ":slot_index", ":index", 2),
  16252. (try_end),
  16253. (call_script, "script_remove_fit_party_member_from_stack_selection", ":slot_index"),
  16254. ]),
  16255.  
  16256.  
  16257. #script_add_routed_party
  16258. #INPUT: none
  16259. #OUTPUT: none
  16260. ("add_routed_party",
  16261. [
  16262. (party_get_num_companion_stacks, ":num_stacks", "p_routed_enemies"), #question, I changed (total_enemy_casualties) with (p_routed_enemies) because this is not prisoner in p_routed_enemies party.
  16263. (assign, ":num_regulars", 0),
  16264. (assign, ":deleted_stacks", 0),
  16265. (try_for_range, ":stack_no", 0, ":num_stacks"),
  16266. (store_sub, ":difference", ":num_stacks", ":stack_no"),
  16267. (ge, ":difference", ":deleted_stacks"),
  16268. (store_sub, ":stack_no_minus_deleted", ":stack_no", ":deleted_stacks"),
  16269. (party_stack_get_troop_id, ":stack_troop", "p_routed_enemies", ":stack_no_minus_deleted"),
  16270. (try_begin),
  16271. (troop_is_hero, ":stack_troop"),
  16272. (party_stack_get_size, ":stack_size", "p_routed_enemies", ":stack_no_minus_deleted"),
  16273. (party_remove_members, "p_routed_enemies", ":stack_troop", 1),
  16274. (try_begin),
  16275. (le, ":stack_size", 1),
  16276. (val_add, ":deleted_stacks", 1), #if deleted hero is the only one in his troop, now we have one less stacks
  16277. (try_end),
  16278. (else_try),
  16279. (val_add, ":num_regulars", 1),
  16280. (try_end),
  16281. (try_end),
  16282.  
  16283. #add new party to map if there is at least one routed agent. (new party name : routed_party, template : routed_warriors)
  16284. (try_begin),
  16285. (ge, ":num_regulars", 1),
  16286.  
  16287. (set_spawn_radius, 2),
  16288. (spawn_around_party, "p_main_party", "pt_routed_warriors"),
  16289. (assign, ":routed_party", reg0),
  16290.  
  16291. (party_set_slot, ":routed_party", slot_party_commander_party, -1), #we need this because 0 is player's party!
  16292.  
  16293. (assign, ":max_routed_agents", 0),
  16294. (assign, ":routed_party_faction", "fac_neutral"),
  16295. (try_for_range, ":cur_faction", fac_kingdom_1, fac_kingdoms_end),
  16296. (faction_get_slot, ":num_routed_agents_in_this_faction", ":cur_faction", slot_faction_num_routed_agents),
  16297. (gt, ":num_routed_agents_in_this_faction", ":max_routed_agents"),
  16298. (assign, ":max_routed_agents", ":num_routed_agents_in_this_faction"),
  16299. (assign, ":routed_party_faction", ":cur_faction"),
  16300. (try_end),
  16301.  
  16302. (party_set_faction, ":routed_party", ":routed_party_faction"),
  16303.  
  16304. (party_set_ai_behavior, ":routed_party", ai_bhvr_travel_to_party),
  16305.  
  16306. (assign, ":minimum_distance", 1000000),
  16307. (try_for_parties, ":party_no"),
  16308. (party_is_active, ":party_no"),
  16309. (party_get_slot, ":cur_party_type", ":party_no", slot_party_type),
  16310. (this_or_next|eq, ":cur_party_type", spt_town),
  16311. (eq, ":cur_party_type", spt_castle),
  16312. (store_faction_of_party, ":cur_faction", ":party_no"),
  16313. (this_or_next|eq, ":routed_party_faction", "fac_neutral"),
  16314. (eq, ":cur_faction", ":routed_party_faction"),
  16315. (party_get_position, pos1, ":party_no"),
  16316. (store_distance_to_party_from_party, ":dist", ":party_no", "p_main_party"),
  16317. (try_begin),
  16318. (lt, ":dist", ":minimum_distance"),
  16319. (assign, ":minimum_distance", ":dist"),
  16320. (assign, ":nearest_ally_city", ":party_no"),
  16321. (try_end),
  16322. (try_end),
  16323.  
  16324. (party_get_position, pos1, "p_main_party"), #store position information of main party in pos1
  16325. (party_get_position, pos2, ":nearest_ally_city"), #store position information of target city in pos2
  16326.  
  16327. (assign, ":minimum_distance", 1000000),
  16328. (try_for_range, ":unused", 0, 10),
  16329. (map_get_random_position_around_position, pos3, pos1, 2), #store position of found random position (possible placing position for new routed party) around battle position in pos3
  16330. (get_distance_between_positions, ":dist", pos2, pos3), #store distance between found position and target city in ":dist".
  16331. (try_begin),
  16332. (lt, ":dist", ":minimum_distance"),
  16333. (assign, ":minimum_distance", ":dist"),
  16334. (copy_position, pos63, pos3),
  16335. (try_end),
  16336. (end_try),
  16337.  
  16338. (party_set_position, ":routed_party", pos63),
  16339.  
  16340. (party_set_ai_object, ":routed_party", ":nearest_ally_city"),
  16341. (party_set_flags, ":routed_party", pf_default_behavior, 1),
  16342.  
  16343. #adding party members of p_routed_enemies to routed_party
  16344. (party_clear, ":routed_party"),
  16345. (party_get_num_companion_stacks, ":num_stacks", "p_routed_enemies"), #question, I changed (total_enemy_casualties) with (p_routed_enemies) because this is not prisoner in p_routed_enemies party.
  16346. (try_for_range, ":stack_no", 0, ":num_stacks"),
  16347. (party_stack_get_troop_id, ":stack_troop", "p_routed_enemies", ":stack_no"),
  16348. (try_begin),
  16349. (neg|troop_is_hero, ":stack_troop"), #do not add routed heroes to (new created) routed party for now.
  16350.  
  16351. (party_stack_get_size, ":stack_size", "p_routed_enemies", ":stack_no"),
  16352. (party_add_members, ":routed_party", ":stack_troop", ":stack_size"),
  16353. (try_end),
  16354. (try_end),
  16355. (try_end),
  16356. ]), #ozan
  16357.  
  16358.  
  16359. #script_cf_training_ground_sub_routine_1_for_melee_details
  16360. # INPUT:
  16361. # value
  16362. #OUTPUT:
  16363. # none
  16364. ("cf_training_ground_sub_routine_1_for_melee_details",
  16365. [
  16366. (store_script_param, ":value", 1),
  16367. (ge, "$temp_3", ":value"),
  16368. (val_add, ":value", 1),
  16369. (troop_get_slot, ":troop_id", "trp_stack_selection_ids", ":value"),
  16370. (str_store_troop_name, s0, ":troop_id"),
  16371. ]),
  16372.  
  16373. #script_training_ground_sub_routine_2_for_melee_details
  16374. # INPUT:
  16375. # value
  16376. #OUTPUT:
  16377. # none
  16378. ("training_ground_sub_routine_2_for_melee_details",
  16379. [
  16380. (store_script_param, ":value", 1),
  16381. (val_sub, ":value", 1),
  16382. (try_begin),
  16383. (lt, ":value", 0),
  16384. (call_script, "script_remove_random_fit_party_member_from_stack_selection"),
  16385. (else_try),
  16386. (call_script, "script_remove_fit_party_member_from_stack_selection", ":value"),
  16387. (try_end),
  16388. (assign, ":troop_id", reg0),
  16389. (store_sub, ":slot_index", "$temp_2", 1),
  16390. (troop_set_slot, "trp_temp_array_a", ":slot_index", ":troop_id"),
  16391. (try_begin),
  16392. (eq, "$temp", "$temp_2"),
  16393. (call_script, "script_start_training_at_training_ground", -1, "$temp"),
  16394. (else_try),
  16395. (val_add, "$temp_2", 1),
  16396. (jump_to_menu, "mnu_training_ground_selection_details_melee_2"),
  16397. (try_end),
  16398. ]),
  16399.  
  16400. #script_cf_training_ground_sub_routine_for_training_result
  16401. # INPUT:
  16402. # arg1: troop_id, arg2: stack_no, arg3: troop_count, arg4: xp_ratio_to_add
  16403. #OUTPUT:
  16404. # none
  16405. ("cf_training_ground_sub_routine_for_training_result",
  16406. [
  16407. (store_script_param, ":troop_id", 1),
  16408. (store_script_param, ":stack_no", 2),
  16409. (store_script_param, ":amount", 3),
  16410. (store_script_param, ":xp_ratio_to_add", 4),
  16411.  
  16412. (store_character_level, ":level", ":troop_id"),
  16413. (store_add, ":level_added", ":level", 5),
  16414. (store_mul, ":min_hardness", ":level_added", 3),
  16415. (val_min, ":min_hardness", 100),
  16416. (store_sub, ":hardness_dif", ":min_hardness", "$g_training_ground_training_hardness"),
  16417. (val_max, ":hardness_dif", 0),
  16418. (store_sub, ":hardness_dif", 100, ":hardness_dif"),
  16419. (val_mul, ":hardness_dif", ":hardness_dif"),
  16420. (val_div, ":hardness_dif", 10), # value over 1000
  16421. ## (assign, reg0, ":hardness_dif"),
  16422. ## (display_message, "@Hardness difference: {reg0}/1000"),
  16423. (store_mul, ":xp_ratio_to_add_for_stack", ":xp_ratio_to_add", ":hardness_dif"),
  16424. (val_div, ":xp_ratio_to_add_for_stack", 1000),
  16425. (try_begin),
  16426. (eq, ":troop_id", "trp_player"),
  16427. (val_mul, ":xp_ratio_to_add_for_stack", 1),
  16428. (else_try),
  16429. (try_begin),
  16430. (eq, "$g_mt_mode", ctm_melee),
  16431. (try_begin),
  16432. (this_or_next|troop_is_guarantee_ranged, ":troop_id"),
  16433. (troop_is_guarantee_horse, ":troop_id"),
  16434. (val_div, ":xp_ratio_to_add_for_stack", 4),
  16435. (try_end),
  16436. (else_try),
  16437. (eq, "$g_mt_mode", ctm_mounted),
  16438. (try_begin),
  16439. (neg|troop_is_guarantee_horse, ":troop_id"),
  16440. (assign, ":xp_ratio_to_add_for_stack", 0),
  16441. (try_end),
  16442. (else_try),
  16443. (neg|troop_is_guarantee_ranged, ":troop_id"),
  16444. (assign, ":xp_ratio_to_add_for_stack", 0),
  16445. (try_end),
  16446. (try_end),
  16447. (val_add, ":level", 1),
  16448. (store_mul, ":xp_to_add", 100, ":level"),
  16449. (val_mul, ":xp_to_add", ":amount"),
  16450. (val_div, ":xp_to_add", 20),
  16451. (val_mul, ":xp_to_add", ":xp_ratio_to_add_for_stack"),
  16452. (val_div, ":xp_to_add", 1000),
  16453. (store_mul, ":max_xp_to_add", ":xp_to_add", 3),
  16454. (val_div, ":max_xp_to_add", 2),
  16455. (store_div, ":min_xp_to_add", ":xp_to_add", 2),
  16456. (store_random_in_range, ":random_xp_to_add", ":min_xp_to_add", ":max_xp_to_add"),
  16457. (gt, ":random_xp_to_add", 0),
  16458. (try_begin),
  16459. (troop_is_hero, ":troop_id"),
  16460. (add_xp_to_troop, ":random_xp_to_add", ":troop_id"),
  16461. (store_div, ":proficiency_to_add", ":random_xp_to_add", 50),
  16462. (try_begin),
  16463. (gt, ":proficiency_to_add", 0),
  16464. (troop_raise_proficiency, ":troop_id", "$g_training_ground_used_weapon_proficiency", ":proficiency_to_add"),
  16465. (try_end),
  16466. (else_try),
  16467. (party_add_xp_to_stack, "p_main_party", ":stack_no", ":random_xp_to_add"),
  16468. (try_end),
  16469. (assign, reg0, ":random_xp_to_add"),
  16470. ]),
  16471.  
  16472.  
  16473. ## #script_cf_print_troop_name_with_stack_index_to_s0
  16474. ## # INPUT:
  16475. ## # param1: stack_index
  16476. ##
  16477. ## #OUTPUT:
  16478. ## # string register 0.
  16479. ## ("cf_print_troop_name_with_stack_index_to_s0",
  16480. ## [
  16481. ## (store_script_param_1, ":stack_index"),
  16482. ## (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),
  16483. ## (lt, ":stack_index", ":num_stacks"),
  16484. ## (party_stack_get_troop_id, ":stack_troop", "p_main_party", ":stack_index"),
  16485. ## (str_store_troop_name, s0, ":stack_troop"),
  16486. ## ]),
  16487.  
  16488. #script_print_troop_owned_centers_in_numbers_to_s0
  16489. # INPUT:
  16490. # param1: troop_no
  16491. #OUTPUT:
  16492. # string register 0.
  16493. ("print_troop_owned_centers_in_numbers_to_s0",
  16494. [
  16495. (store_script_param_1, ":troop_no"),
  16496. (str_store_string, s0, "@nothing"),
  16497. (assign, ":owned_towns", 0),
  16498. (assign, ":owned_castles", 0),
  16499. (assign, ":owned_villages", 0),
  16500. (try_for_range_backwards, ":cur_center", centers_begin, centers_end),
  16501. (party_slot_eq, ":cur_center", slot_town_lord, ":troop_no"),
  16502. (try_begin),
  16503. (party_slot_eq, ":cur_center", slot_party_type, spt_town),
  16504. (val_add, ":owned_towns", 1),
  16505. (else_try),
  16506. (party_slot_eq, ":cur_center", slot_party_type, spt_castle),
  16507. (val_add, ":owned_castles", 1),
  16508. (else_try),
  16509. (val_add, ":owned_villages", 1),
  16510. (try_end),
  16511. (try_end),
  16512. (assign, ":num_types", 0),
  16513. (try_begin),
  16514. (gt, ":owned_villages", 0),
  16515. (assign, reg0, ":owned_villages"),
  16516. (store_sub, reg1, reg0, 1),
  16517. (str_store_string, s0, "@{reg0} village{reg1?s:}"),
  16518. (val_add, ":num_types", 1),
  16519. (try_end),
  16520. (try_begin),
  16521. (gt, ":owned_castles", 0),
  16522. (assign, reg0, ":owned_castles"),
  16523. (store_sub, reg1, reg0, 1),
  16524. (try_begin),
  16525. (eq, ":num_types", 0),
  16526. (str_store_string, s0, "@{reg0} castle{reg1?s:}"),
  16527. (else_try),
  16528. (str_store_string, s0, "@{reg0} castle{reg1?s:} and {s0}"),
  16529. (try_end),
  16530. (val_add, ":num_types", 1),
  16531. (try_end),
  16532. (try_begin),
  16533. (gt, ":owned_towns", 0),
  16534. (assign, reg0, ":owned_towns"),
  16535. (store_sub, reg1, reg0, 1),
  16536. (try_begin),
  16537. (eq, ":num_types", 0),
  16538. (str_store_string, s0, "@{reg0} town{reg1?s:}"),
  16539. (else_try),
  16540. (eq, ":num_types", 1),
  16541. (str_store_string, s0, "@{reg0} town{reg1?s:} and {s0}"),
  16542. (else_try),
  16543. (str_store_string, s0, "@{reg0} town{reg1?s:}, {s0}"),
  16544. (try_end),
  16545. (try_end),
  16546. (store_add, reg0, ":owned_villages", ":owned_castles"),
  16547. (val_add, reg0, ":owned_towns"),
  16548. ]),
  16549.  
  16550. #script_get_random_melee_training_weapon
  16551. # INPUT: none
  16552. # OUTPUT: reg0 = weapon_1, reg1 = weapon_2
  16553. ("get_random_melee_training_weapon",
  16554. [
  16555. (assign, ":weapon_1", -1),
  16556. (assign, ":weapon_2", -1),
  16557. (store_random_in_range, ":random_no", 0, 3),
  16558. (try_begin),
  16559. (eq, ":random_no", 0),
  16560. (assign, ":weapon_1", "itm_practice_staff"),
  16561. (else_try),
  16562. (eq, ":random_no", 1),
  16563. (assign, ":weapon_1", "itm_practice_sword"),
  16564. (assign, ":weapon_2", "itm_practice_shield"),
  16565. (else_try),
  16566. (assign, ":weapon_1", "itm_heavy_practice_sword"),
  16567. (try_end),
  16568. (assign, reg0, ":weapon_1"),
  16569. (assign, reg1, ":weapon_2"),
  16570. ]),
  16571.  
  16572. #script_start_training_at_training_ground
  16573. # INPUT:
  16574. # param1: training_weapon_type, param2: training_param
  16575. ("start_training_at_training_ground",
  16576. [
  16577. (val_add, "$g_training_ground_training_count", 1),
  16578. (store_script_param, ":mission_weapon_type", 1),
  16579. (store_script_param, ":training_param", 2),
  16580.  
  16581. (set_jump_mission, "mt_training_ground_training"),
  16582.  
  16583. (assign, ":training_default_weapon_1", -1),
  16584. (assign, ":training_default_weapon_2", -1),
  16585. (assign, ":training_default_weapon_3", -1),
  16586. (assign, "$scene_num_total_gourds_destroyed", 0),
  16587. (try_begin),
  16588. (eq, ":mission_weapon_type", itp_type_bow),
  16589. (assign, "$g_training_ground_used_weapon_proficiency", wpt_archery),
  16590. (assign, ":training_default_weapon_1", "itm_practice_bow"),
  16591. (try_begin),
  16592. (eq, "$g_mt_mode", ctm_mounted),
  16593. (assign, ":training_default_weapon_2", "itm_practice_arrows_100_amount"),
  16594. (else_try),
  16595. (assign, ":training_default_weapon_2", "itm_practice_arrows_10_amount"),
  16596. (try_end),
  16597. (else_try),
  16598. (eq, ":mission_weapon_type", itp_type_crossbow),
  16599. (assign, "$g_training_ground_used_weapon_proficiency", wpt_crossbow),
  16600. (assign, ":training_default_weapon_1", "itm_practice_crossbow"),
  16601. (assign, ":training_default_weapon_2", "itm_practice_bolts_9_amount"),
  16602. (else_try),
  16603. (eq, ":mission_weapon_type", itp_type_thrown),
  16604. (assign, "$g_training_ground_used_weapon_proficiency", wpt_throwing),
  16605. (try_begin),
  16606. (eq, "$g_mt_mode", ctm_mounted),
  16607. (assign, ":training_default_weapon_2", "itm_practice_throwing_daggers_100_amount"),
  16608. (else_try),
  16609. (assign, ":training_default_weapon_2", "itm_practice_throwing_daggers"),
  16610. (try_end),
  16611. (else_try),
  16612. (eq, ":mission_weapon_type", itp_type_one_handed_wpn),
  16613. (assign, "$g_training_ground_used_weapon_proficiency", wpt_one_handed_weapon),
  16614. (assign, ":training_default_weapon_1", "itm_practice_sword"),
  16615. (else_try),
  16616. (eq, ":mission_weapon_type", itp_type_polearm),
  16617. (assign, "$g_training_ground_used_weapon_proficiency", wpt_polearm),
  16618. (assign, ":training_default_weapon_1", "itm_practice_lance"),
  16619. (else_try),
  16620. #weapon_type comes as -1 when melee training is selected
  16621. (assign, "$g_training_ground_used_weapon_proficiency", wpt_one_handed_weapon),
  16622. (call_script, "script_get_random_melee_training_weapon"),
  16623. (assign, ":training_default_weapon_1", reg0),
  16624. (assign, ":training_default_weapon_2", reg1),
  16625. (try_end),
  16626.  
  16627. ## (assign, "$g_training_ground_training_troop_stack_index", ":stack_index"),
  16628. (try_begin),
  16629. (eq, "$g_mt_mode", ctm_mounted),
  16630. (assign, ":training_default_weapon_3", "itm_practice_horse"),
  16631. (store_add, "$g_training_ground_training_scene", "scn_training_ground_horse_track_1", "$g_encountered_party"),
  16632. (val_sub, "$g_training_ground_training_scene", training_grounds_begin),
  16633. (else_try),
  16634. (store_add, "$g_training_ground_training_scene", "scn_training_ground_ranged_melee_1", "$g_encountered_party"),
  16635. (val_sub, "$g_training_ground_training_scene", training_grounds_begin),
  16636. (try_end),
  16637.  
  16638. (modify_visitors_at_site, "$g_training_ground_training_scene"),
  16639. (reset_visitors),
  16640. (set_visitor, 0, "trp_player"),
  16641.  
  16642. (assign, ":selected_weapon", -1),
  16643. (try_for_range, ":cur_slot", 0, 4),#equipment slots
  16644. (troop_get_inventory_slot, ":cur_item", "trp_player", ":cur_slot"),
  16645. (ge, ":cur_item", 0),
  16646. (item_get_type, ":item_type", ":cur_item"),
  16647. (try_begin),
  16648. (eq, ":item_type", ":mission_weapon_type"),
  16649. (eq, ":selected_weapon", -1),
  16650. (assign, ":selected_weapon", ":cur_item"),
  16651. (try_end),
  16652. (try_end),
  16653. (mission_tpl_entry_clear_override_items, "mt_training_ground_training", 0),
  16654. (mission_tpl_entry_add_override_item, "mt_training_ground_training", 0, "itm_practice_boots"),
  16655. (try_begin),
  16656. (ge, ":training_default_weapon_1", 0),
  16657. (try_begin),
  16658. (ge, ":selected_weapon", 0),
  16659. (mission_tpl_entry_add_override_item, "mt_training_ground_training", 0, ":selected_weapon"),
  16660. (else_try),
  16661. (mission_tpl_entry_add_override_item, "mt_training_ground_training", 0, ":training_default_weapon_1"),
  16662. (try_end),
  16663. (try_end),
  16664. (try_begin),
  16665. (ge, ":training_default_weapon_2", 0),
  16666. (mission_tpl_entry_add_override_item, "mt_training_ground_training", 0, ":training_default_weapon_2"),
  16667. (try_end),
  16668. (try_begin),
  16669. (ge, ":training_default_weapon_3", 0),
  16670. (mission_tpl_entry_add_override_item, "mt_training_ground_training", 0, ":training_default_weapon_3"),
  16671. (try_end),
  16672.  
  16673. (assign, ":cur_visitor_point", 5),
  16674. (troop_get_slot, ":num_fit", "trp_stack_selection_amounts", 1),
  16675. (store_add, ":end_cond", 5, ":num_fit"),
  16676. (val_min, ":end_cond", 13),
  16677. (try_for_range, ":cur_visitor_point", 5, ":end_cond"),
  16678. (call_script, "script_remove_random_fit_party_member_from_stack_selection"),
  16679. (set_visitor, ":cur_visitor_point", reg0),
  16680. (val_add, ":cur_visitor_point", 1),
  16681. (try_end),
  16682. (try_begin),
  16683. (eq, "$g_mt_mode", ctm_melee),
  16684. (assign, ":total_difficulty", 0),
  16685. (try_for_range, ":i", 0, ":training_param"),
  16686. (troop_get_slot, ":cur_troop", "trp_temp_array_a", ":i"),
  16687. (store_add, ":cur_entry_point", ":i", 1),
  16688. (set_visitor, ":cur_entry_point", ":cur_troop"),
  16689. (mission_tpl_entry_clear_override_items, "mt_training_ground_training", ":cur_entry_point"),
  16690. (mission_tpl_entry_add_override_item, "mt_training_ground_training", ":cur_entry_point", "itm_practice_boots"),
  16691. (call_script, "script_get_random_melee_training_weapon"),
  16692. (mission_tpl_entry_add_override_item, "mt_training_ground_training", ":cur_entry_point", reg0),
  16693. (try_begin),
  16694. (ge, reg1, 0),
  16695. (mission_tpl_entry_add_override_item, "mt_training_ground_training", ":cur_entry_point", reg1),
  16696. (try_end),
  16697. (store_character_level, ":cur_troop_level", ":cur_troop"),
  16698. (val_add, ":cur_troop_level", 10),
  16699. (val_mul, ":cur_troop_level", ":cur_troop_level"),
  16700. (val_add, ":total_difficulty", ":cur_troop_level"),
  16701. (try_end),
  16702.  
  16703. (assign, "$g_training_ground_training_num_enemies", ":training_param"),
  16704. (assign, "$g_training_ground_training_hardness", ":total_difficulty"),
  16705. (store_add, ":number_multiplier", "$g_training_ground_training_num_enemies", 4),
  16706. (val_mul, "$g_training_ground_training_hardness", ":number_multiplier"),
  16707. (val_div, "$g_training_ground_training_hardness", 2400),
  16708. (str_store_string, s0, "@Your opponents are ready for the fight."),
  16709. (else_try),
  16710. (eq, "$g_mt_mode", ctm_mounted),
  16711. (try_begin),
  16712. (eq, ":mission_weapon_type", itp_type_bow),
  16713. (assign, "$g_training_ground_training_hardness", 350),
  16714. (assign, "$g_training_ground_training_num_gourds_to_destroy", 30),
  16715. (else_try),
  16716. (eq, ":mission_weapon_type", itp_type_thrown),
  16717. (assign, "$g_training_ground_training_hardness", 400),
  16718. (assign, "$g_training_ground_training_num_gourds_to_destroy", 30),
  16719. (else_try),
  16720. (eq, ":mission_weapon_type", itp_type_one_handed_wpn),
  16721. (assign, "$g_training_ground_training_hardness", 200),
  16722. (assign, "$g_training_ground_training_num_gourds_to_destroy", 45),
  16723. (else_try),
  16724. (eq, ":mission_weapon_type", itp_type_polearm),
  16725. (assign, "$g_training_ground_training_hardness", 280),
  16726. (assign, "$g_training_ground_training_num_gourds_to_destroy", 35),
  16727. (try_end),
  16728. (str_store_string, s0, "@Try to destroy as many targets as you can. You have two and a half minutes to clear the track."),
  16729. (else_try),
  16730. (eq, "$g_mt_mode", ctm_ranged),
  16731. (store_mul, "$g_training_ground_ranged_distance", ":training_param", 100),
  16732. (assign, ":hardness_modifier", ":training_param"),
  16733. (val_mul, ":hardness_modifier", ":hardness_modifier"),
  16734. (try_begin),
  16735. (eq, ":mission_weapon_type", itp_type_bow),
  16736. (val_mul, ":hardness_modifier", 3),
  16737. (val_div, ":hardness_modifier", 2),
  16738. (else_try),
  16739. (eq, ":mission_weapon_type", itp_type_thrown),
  16740. (val_mul, ":hardness_modifier", 5),
  16741. (val_div, ":hardness_modifier", 2),
  16742. (val_mul, ":hardness_modifier", ":training_param"),
  16743. (val_div, ":hardness_modifier", 2),
  16744. (try_end),
  16745. (store_mul, "$g_training_ground_training_hardness", 100, ":hardness_modifier"),
  16746. (val_div, "$g_training_ground_training_hardness", 6000),
  16747. (str_store_string, s0, "@Stay behind the line on the ground and shoot the targets. Try not to waste any shots."),
  16748. (try_end),
  16749. (jump_to_menu, "mnu_training_ground_description"),
  16750. ]),
  16751.  
  16752.  
  16753. #script_print_party_to_s0:
  16754. # INPUT:
  16755. # param1: Party-id
  16756.  
  16757. #OUTPUT:
  16758. # string register 0.
  16759.  
  16760. ## ("print_party_to_s0",
  16761. ## [
  16762. ## (store_script_param_1, ":party"), #Party_id
  16763. ## (party_get_num_companion_stacks, ":num_stacks",":party"),
  16764. ## (str_store_string, s50, "str_none"),
  16765. ## (try_for_range, ":i_stack", 0, ":num_stacks"),
  16766. ## (party_stack_get_troop_id, ":stack_troop",":party",":i_stack"),
  16767. ## (party_stack_get_size, ":stack_size",":party",":i_stack"),
  16768. ## (str_store_troop_name_by_count, s61, ":stack_troop", ":stack_size"),
  16769. ## (try_begin),
  16770. ## (troop_is_hero, ":stack_troop"),
  16771. ## (str_store_string_reg, s51, s61),
  16772. ## (else_try),
  16773. ## (assign, reg60, ":stack_size"),
  16774. ## (str_store_string, s63, "str_reg60_s61"),
  16775. ## (try_end),
  16776. ## (try_begin),
  16777. ## (eq, ":i_stack", 0),
  16778. ## (str_store_string_reg, s50, s51),
  16779. ## (else_try),
  16780. ## (str_store_string, s50, "str_s50_comma_s51"),
  16781. ## (try_end),
  16782. ## (try_end),
  16783. ## (str_store_string_reg, s0, s50),
  16784. ## ]),
  16785.  
  16786.  
  16787.  
  16788. #script_party_count_fit_regulars:
  16789. # Returns the number of unwounded regular companions in a party
  16790. # INPUT:
  16791. # param1: Party-id
  16792.  
  16793. ("party_count_fit_regulars",
  16794. [
  16795. (store_script_param_1, ":party"), #Party_id
  16796. (party_get_num_companion_stacks, ":num_stacks", ":party"),
  16797. (assign, reg0, 0),
  16798. (try_for_range, ":i_stack", 0, ":num_stacks"),
  16799. (party_stack_get_troop_id, ":stack_troop", ":party", ":i_stack"),
  16800. (neg|troop_is_hero, ":stack_troop"),
  16801. (party_stack_get_size, ":stack_size",":party",":i_stack"),
  16802. (party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
  16803. (val_sub, ":stack_size", ":num_wounded"),
  16804. (val_add, reg0, ":stack_size"),
  16805. (try_end),
  16806. ]),
  16807.  
  16808.  
  16809. #script_party_count_fit_for_battle:
  16810. # Returns the number of unwounded companions in a party
  16811. # INPUT:
  16812. # param1: Party-id
  16813. # OUTPUT: reg0 = result
  16814. ("party_count_fit_for_battle",
  16815. [
  16816. (store_script_param_1, ":party"), #Party_id
  16817. (party_get_num_companion_stacks, ":num_stacks",":party"),
  16818. (assign, reg0, 0),
  16819. (try_for_range, ":i_stack", 0, ":num_stacks"),
  16820. (party_stack_get_troop_id, ":stack_troop",":party",":i_stack"),
  16821. (assign, ":num_fit",0),
  16822. (try_begin),
  16823. (troop_is_hero, ":stack_troop"),
  16824. (try_begin),
  16825. (neg|troop_is_wounded, ":stack_troop"),
  16826. (assign, ":num_fit", 1),
  16827. (try_end),
  16828. (else_try),
  16829. (party_stack_get_size, ":num_fit",":party",":i_stack"),
  16830. (party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
  16831. (val_sub, ":num_fit", ":num_wounded"),
  16832. (try_end),
  16833. (val_add, reg0, ":num_fit"),
  16834. (try_end),
  16835. ]),
  16836.  
  16837.  
  16838. #script_party_count_members_with_full_health
  16839. # Returns the number of unwounded regulars, and heroes other than player with 100% hitpoints in a party
  16840. # INPUT:
  16841. # param1: Party-id
  16842. # OUTPUT: reg0 = result
  16843. ("party_count_members_with_full_health",
  16844. [
  16845. (store_script_param_1, ":party"), #Party_id
  16846. (party_get_num_companion_stacks, ":num_stacks",":party"),
  16847. (assign, reg0, 0),
  16848. (try_for_range, ":i_stack", 0, ":num_stacks"),
  16849. (party_stack_get_troop_id, ":stack_troop",":party",":i_stack"),
  16850. (neq, ":stack_troop", "trp_player"),
  16851. (assign, ":num_fit",0),
  16852. (try_begin),
  16853. (troop_is_hero, ":stack_troop"),
  16854. (store_troop_health, ":troop_hp", ":stack_troop"),
  16855. (try_begin),
  16856. (ge, ":troop_hp", 80),
  16857. (assign, ":num_fit",1),
  16858. (try_end),
  16859. (else_try),
  16860. (party_stack_get_size, ":num_fit",":party",":i_stack"),
  16861. (party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
  16862. (val_sub, ":num_fit", ":num_wounded"),
  16863. (val_max, ":num_fit", 0),
  16864. (try_end),
  16865. (val_add, reg0, ":num_fit"),
  16866. (try_end),
  16867. ]),
  16868.  
  16869.  
  16870. ## ("get_fit_stack_with_rank",
  16871. ## [
  16872. ## (store_script_param_1, ":party"), #Party_id
  16873. ## (store_script_param_2, ":rank"), #Rank
  16874. ## (party_get_num_companion_stacks, ":num_stacks",":party"),
  16875. ## (assign, reg0, -1),
  16876. ## (assign, ":num_total", 0),
  16877. ## (try_for_range, ":i_stack", 0, ":num_stacks"),
  16878. ## (eq, reg(0), -1), #continue only if we haven't found the result yet.
  16879. ## (party_stack_get_troop_id, ":stack_troop",":party",":i_stack"),
  16880. ## (assign, ":num_fit",0),
  16881. ## (try_begin),
  16882. ## (troop_is_hero, ":stack_troop"),
  16883. ## (store_troop_health, ":troop_hp", ":stack_troop"),
  16884. ## (try_begin),
  16885. ## (ge, ":troop_hp", 20),
  16886. ## (assign, ":num_fit",1),
  16887. ## (try_end),
  16888. ## (else_try),
  16889. ## (party_stack_get_size, ":num_fit",":party",":i_stack"),
  16890. ## (party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
  16891. ## (val_sub, ":num_fit", ":num_wounded"),
  16892. ## (try_end),
  16893. ## (val_add, ":num_total", ":num_fit"),
  16894. ## (try_begin),
  16895. ## (lt, ":rank", ":num_total"),
  16896. ## (assign, reg(0), ":i_stack"),
  16897. ## (try_end),
  16898. ## (try_end),
  16899. ## ]),
  16900.  
  16901. #script_get_stack_with_rank:
  16902. # Returns the stack no, containing unwounded regular companions with rank rank.
  16903. # INPUT:
  16904. # param1: Party-id
  16905. # param2: rank
  16906.  
  16907. ("get_stack_with_rank",
  16908. [
  16909. (store_script_param_1, ":party"), #Party_id
  16910. (store_script_param_2, ":rank"), #Rank
  16911. (party_get_num_companion_stacks, ":num_stacks",":party"),
  16912. (assign, reg(0), -1),
  16913. (assign, ":num_total", 0),
  16914. (try_for_range, ":i_stack", 0, ":num_stacks"),
  16915. (eq, reg(0), -1), #continue only if we haven't found the result yet.
  16916. (party_stack_get_troop_id, ":stack_troop",":party",":i_stack"),
  16917. (neg|troop_is_hero, ":stack_troop"),
  16918. (party_stack_get_size, ":stack_size",":party",":i_stack"),
  16919. (party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
  16920. (val_sub, ":stack_size", ":num_wounded"),
  16921. (val_add, ":num_total", ":stack_size"),
  16922. (try_begin),
  16923. (lt, ":rank", ":num_total"),
  16924. (assign, reg(0), ":i_stack"),
  16925. (try_end),
  16926. (try_end),
  16927. ]),
  16928.  
  16929. #script_inflict_casualties_to_party:
  16930. # INPUT:
  16931. # param1: Party-id
  16932. # param2: number of rounds
  16933.  
  16934. #OUTPUT:
  16935. # This script doesn't return a value but populates the parties p_temp_wounded and p_temp_killed with the wounded and killed.
  16936. #Example:
  16937. # (script_inflict_casualties_to_party, "_p_main_party" ,50),
  16938. # Simulate 50 rounds of casualties to main_party.
  16939.  
  16940. ("inflict_casualties_to_party",
  16941. [
  16942. (party_clear, "p_temp_casualties"),
  16943. (store_script_param_1, ":party"), #Party_id
  16944. (call_script, "script_party_count_fit_regulars", ":party"),
  16945. (assign, ":num_fit", reg(0)), #reg(47) = number of fit regulars.
  16946. (store_script_param_2, ":num_attack_rounds"), #number of attacks
  16947. (try_for_range, ":unused", 0, ":num_attack_rounds"),
  16948. (gt, ":num_fit", 0),
  16949. (store_random_in_range, ":attacked_troop_rank", 0 , ":num_fit"), #attack troop with rank reg(46)
  16950. (assign, reg1, ":attacked_troop_rank"),
  16951. (call_script, "script_get_stack_with_rank", ":party", ":attacked_troop_rank"),
  16952. (assign, ":attacked_stack", reg(0)), #reg(53) = stack no to attack.
  16953. (party_stack_get_troop_id, ":attacked_troop",":party",":attacked_stack"),
  16954. (store_character_level, ":troop_toughness", ":attacked_troop"),
  16955. (val_add, ":troop_toughness", 5), #troop-toughness = level + 5
  16956. (assign, ":casualty_chance", 10000),
  16957. (val_div, ":casualty_chance", ":troop_toughness"), #dying chance
  16958. (try_begin),
  16959. (store_random_in_range, ":rand_num", 0 ,10000),
  16960. (lt, ":rand_num", ":casualty_chance"), #check chance to be a casualty
  16961. (store_random_in_range, ":rand_num2", 0, 2), #check if this troop will be wounded or killed
  16962. (try_begin),
  16963. (troop_is_hero,":attacked_troop"), #currently troop can't be a hero, but no harm in keeping this.
  16964. (store_troop_health, ":troop_hp",":attacked_troop"),
  16965. (val_sub, ":troop_hp", 45),
  16966. (val_max, ":troop_hp", 1),
  16967. (troop_set_health, ":attacked_troop", ":troop_hp"),
  16968. (else_try),
  16969. (lt, ":rand_num2", 1), #wounded
  16970. (party_add_members, "p_temp_casualties", ":attacked_troop", 1),
  16971. (party_wound_members, "p_temp_casualties", ":attacked_troop", 1),
  16972. (party_wound_members, ":party", ":attacked_troop", 1),
  16973. (else_try), #killed
  16974. (party_add_members, "p_temp_casualties", ":attacked_troop", 1),
  16975. (party_remove_members, ":party", ":attacked_troop", 1),
  16976. (try_end),
  16977. (val_sub, ":num_fit", 1), #adjust number of fit regulars.
  16978. (try_end),
  16979. (try_end),
  16980. ]),
  16981.  
  16982.  
  16983. #script_move_members_with_ratio:
  16984. # INPUT:
  16985. # param1: Source Party-id
  16986. # param2: Target Party-id
  16987. # pin_number = ratio of members to move, multiplied by 1000
  16988.  
  16989. #OUTPUT:
  16990. # This script doesn't return a value but moves some of the members of source party to target party according to the given ratio.
  16991. ("move_members_with_ratio",
  16992. [
  16993. (store_script_param_1, ":source_party"), #Source Party_id
  16994. (store_script_param_2, ":target_party"), #Target Party_id
  16995. (party_get_num_prisoner_stacks, ":num_stacks",":source_party"),
  16996. (try_for_range_backwards, ":stack_no", 0, ":num_stacks"),
  16997. (party_prisoner_stack_get_troop_id, ":stack_troop",":source_party",":stack_no"),
  16998. (party_prisoner_stack_get_size, ":stack_size",":source_party",":stack_no"),
  16999. (store_mul, ":number_to_move",":stack_size","$pin_number"),
  17000. (val_div, ":number_to_move", 1000),
  17001. (party_remove_prisoners, ":source_party", ":stack_troop", ":number_to_move"),
  17002. (assign, ":number_moved", reg0),
  17003. (party_add_prisoners, ":target_party", ":stack_troop", ":number_moved"),
  17004. (try_end),
  17005. (party_get_num_companion_stacks, ":num_stacks",":source_party"),
  17006. (try_for_range_backwards, ":stack_no", 0, ":num_stacks"),
  17007. (party_stack_get_troop_id, ":stack_troop",":source_party",":stack_no"),
  17008. (party_stack_get_size, ":stack_size",":source_party",":stack_no"),
  17009. (store_mul, ":number_to_move",":stack_size","$pin_number"),
  17010. (val_div, ":number_to_move", 1000),
  17011. (party_remove_members, ":source_party", ":stack_troop", ":number_to_move"),
  17012. (assign, ":number_moved", reg0),
  17013. (party_add_members, ":target_party", ":stack_troop", ":number_moved"),
  17014. (try_end),
  17015. ]),
  17016.  
  17017.  
  17018. # script_count_parties_of_faction_and_party_type:
  17019. # counts number of active parties with a template and faction.
  17020. # Input: arg1 = faction_no, arg2 = party_type
  17021. # Output: reg0 = count
  17022.  
  17023. ("count_parties_of_faction_and_party_type",
  17024. [
  17025. (store_script_param_1, ":faction_no"),
  17026. (store_script_param_2, ":party_type"),
  17027. (assign, reg0, 0),
  17028. (try_for_parties, ":party_no"),
  17029. (party_is_active, ":party_no"),
  17030. (party_get_slot, ":cur_party_type", ":party_no", slot_party_type),
  17031. (store_faction_of_party, ":cur_faction", ":party_no"),
  17032. (eq, ":cur_party_type", ":party_type"),
  17033. (eq, ":cur_faction", ":faction_no"),
  17034. (val_add, reg0, 1),
  17035. (try_end),
  17036. ]),
  17037.  
  17038. # script_faction_get_number_of_armies
  17039. # Input: arg1 = faction_no
  17040. # Output: reg0 = number_of_armies
  17041. ("faction_get_number_of_armies",
  17042. [
  17043. (store_script_param_1, ":faction_no"),
  17044. (assign, ":num_armies", 0),
  17045. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  17046. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  17047. (store_troop_faction, ":hero_faction_no", ":troop_no"),
  17048. (eq, ":hero_faction_no", ":faction_no"),
  17049. (troop_get_slot, ":hero_party", ":troop_no", slot_troop_leaded_party),
  17050. (ge, ":hero_party", 0),
  17051. (party_is_active, ":hero_party"),
  17052. (call_script, "script_party_count_fit_regulars", ":hero_party"),
  17053. (assign, ":party_size", reg0),
  17054. (call_script, "script_party_get_ideal_size", ":hero_party"),
  17055. (assign, ":ideal_size", reg0),
  17056. (val_mul, ":ideal_size", 60),
  17057. (val_div, ":ideal_size", 100),
  17058. (gt, ":party_size", ":ideal_size"),
  17059. (val_add, ":num_armies", 1),
  17060. (try_end),
  17061. (assign, reg0, ":num_armies"),
  17062. ]),
  17063.  
  17064.  
  17065. # script_faction_recalculate_strength
  17066. # Input: arg1 = faction_no
  17067. # Output: reg0 = strength
  17068. ("faction_recalculate_strength",
  17069. [
  17070. (store_script_param_1, ":faction_no"),
  17071.  
  17072. (call_script, "script_faction_get_number_of_armies", ":faction_no"),
  17073. (assign, ":num_armies", reg0),
  17074. (assign, ":num_castles", 0),
  17075. (assign, ":num_towns", 0),
  17076.  
  17077. (try_for_range, ":center_no", centers_begin, centers_end),
  17078. (store_faction_of_party, ":center_faction", ":center_no"),
  17079. (eq, ":center_faction", ":faction_no"),
  17080. (try_begin),
  17081. (party_slot_eq, ":center_no", slot_party_type, spt_castle),
  17082. (val_add, ":num_castles", 1),
  17083. (else_try),
  17084. (party_slot_eq, ":center_no", slot_party_type, spt_town),
  17085. (val_add, ":num_towns", 1),
  17086. (try_end),
  17087. (try_end),
  17088.  
  17089. (faction_set_slot, ":faction_no", slot_faction_num_armies, ":num_armies"),
  17090. (faction_set_slot, ":faction_no", slot_faction_num_castles, ":num_castles"),
  17091. (faction_set_slot, ":faction_no", slot_faction_num_towns, ":num_towns"),
  17092.  
  17093. ]),
  17094.  
  17095. #script_select_random_town:
  17096. # This script selects a random town in range [towns_begin, towns_end)
  17097. # INPUTS:
  17098. # none
  17099.  
  17100. #OUTPUT:
  17101. # reg0: id of the selected random town
  17102. ## ("select_random_town",
  17103. ## [
  17104. ## (assign, ":num_towns", towns_end),
  17105. ## (val_sub,":num_towns", towns_begin),
  17106. ## (store_random, ":random_town", ":num_towns"),
  17107. ## (val_add,":random_town", towns_begin),
  17108. ## (assign, reg0, ":random_town"),
  17109. ## ]),
  17110.  
  17111. # ("select_random_spawn_point",
  17112. # [
  17113. # (assign, reg(20), spawn_points_end),
  17114. # (val_sub,reg(20), spawn_points_begin),
  17115. # (store_random, reg(21), reg(20)),
  17116. # (val_add,reg(21), spawn_points_begin),
  17117. # (assign, "$pout_town", reg(21)),
  17118. # ]),
  17119.  
  17120. #script_cf_select_random_town_with_faction:
  17121. # This script selects a random town in range [towns_begin, towns_end)
  17122. # such that faction of the town is equal to given_faction
  17123. # INPUT:
  17124. # arg1 = faction_no
  17125.  
  17126. #OUTPUT:
  17127. # This script may return false if there is no matching town.
  17128. # reg0 = town_no
  17129. ("cf_select_random_town_with_faction",
  17130. [
  17131. (store_script_param_1, ":faction_no"),
  17132. (assign, ":result", -1),
  17133. # First count num matching spawn points
  17134. (assign, ":no_towns", 0),
  17135. (try_for_range,":cur_town", towns_begin, towns_end),
  17136. (store_faction_of_party, ":cur_faction", ":cur_town"),
  17137. (eq, ":cur_faction", ":faction_no"),
  17138. (val_add, ":no_towns", 1),
  17139. (try_end),
  17140. (gt, ":no_towns", 0), #Fail if there are no towns
  17141. (store_random_in_range, ":random_town", 0, ":no_towns"),
  17142. (assign, ":no_towns", 0),
  17143. (try_for_range,":cur_town", towns_begin, towns_end),
  17144. (eq, ":result", -1),
  17145. (store_faction_of_party, ":cur_faction", ":cur_town"),
  17146. (eq, ":cur_faction", ":faction_no"),
  17147. (val_add, ":no_towns", 1),
  17148. (gt, ":no_towns", ":random_town"),
  17149. (assign, ":result", ":cur_town"),
  17150. (try_end),
  17151. (assign, reg0, ":result"),
  17152. ]),
  17153.  
  17154. #script_cf_select_random_village_with_faction:
  17155. # This script selects a random village in range [villages_begin, villages_end)
  17156. # such that faction of the village is equal to given_faction
  17157. # INPUT:
  17158. # arg1 = faction_no
  17159.  
  17160. #OUTPUT:
  17161. # This script may return false if there is no matching village.
  17162. # reg0 = village_no
  17163. ("cf_select_random_village_with_faction",
  17164. [
  17165. (store_script_param_1, ":faction_no"),
  17166. (assign, ":result", -1),
  17167. # First count num matching spawn points
  17168. (assign, ":no_villages", 0),
  17169. (try_for_range,":cur_village", villages_begin, villages_end),
  17170. (store_faction_of_party, ":cur_faction", ":cur_village"),
  17171. (eq, ":cur_faction", ":faction_no"),
  17172. (val_add, ":no_villages", 1),
  17173. (try_end),
  17174. (gt, ":no_villages", 0), #Fail if there are no villages
  17175. (store_random_in_range, ":random_village", 0, ":no_villages"),
  17176. (assign, ":no_villages", 0),
  17177. (try_for_range,":cur_village", villages_begin, villages_end),
  17178. (eq, ":result", -1),
  17179. (store_faction_of_party, ":cur_faction", ":cur_village"),
  17180. (eq, ":cur_faction", ":faction_no"),
  17181. (val_add, ":no_villages", 1),
  17182. (gt, ":no_villages", ":random_village"),
  17183. (assign, ":result", ":cur_village"),
  17184. (try_end),
  17185. (assign, reg0, ":result"),
  17186. ]),
  17187.  
  17188.  
  17189. #script_cf_select_random_walled_center_with_faction:
  17190. # This script selects a random center in range [centers_begin, centers_end)
  17191. # such that faction of the town is equal to given_faction
  17192. # INPUT:
  17193. # arg1 = faction_no
  17194. # arg2 = preferred_center_no
  17195.  
  17196. #OUTPUT:
  17197. # This script may return false if there is no matching town.
  17198. # reg0 = town_no (Can fail)
  17199. ("cf_select_random_walled_center_with_faction",
  17200. [
  17201. (store_script_param, ":faction_no", 1),
  17202. (store_script_param, ":preferred_center_no", 2),
  17203. (assign, ":result", -1),
  17204. # First count num matching spawn points
  17205. (assign, ":no_centers", 0),
  17206. (try_for_range,":cur_center", walled_centers_begin, walled_centers_end),
  17207. (store_faction_of_party, ":cur_faction", ":cur_center"),
  17208. (eq, ":cur_faction", ":faction_no"),
  17209. (val_add, ":no_centers", 1),
  17210. (eq, ":cur_center", ":preferred_center_no"),
  17211. (val_add, ":no_centers", 99),
  17212. (try_end),
  17213. (gt, ":no_centers", 0), #Fail if there are no centers
  17214. (store_random_in_range, ":random_center", 0, ":no_centers"),
  17215. (try_for_range,":cur_center", walled_centers_begin, walled_centers_end),
  17216. (eq, ":result", -1),
  17217. (store_faction_of_party, ":cur_faction", ":cur_center"),
  17218. (eq, ":cur_faction", ":faction_no"),
  17219. (val_sub, ":random_center", 1),
  17220. (try_begin),
  17221. (eq, ":cur_center", ":preferred_center_no"),
  17222. (val_sub, ":random_center", 99),
  17223. (try_end),
  17224. (lt, ":random_center", 0),
  17225. (assign, ":result", ":cur_center"),
  17226. (try_end),
  17227. (assign, reg0, ":result"),
  17228. ]),
  17229.  
  17230.  
  17231. #script_cf_select_random_walled_center_with_faction_and_owner_priority_no_siege:
  17232. # INPUT:
  17233. # arg1 = faction_no
  17234. # arg2 = owner_troop_no
  17235. #OUTPUT:
  17236. # This script may return false if there is no matching town.
  17237. # reg0 = center_no (Can fail)
  17238. ("cf_select_random_walled_center_with_faction_and_owner_priority_no_siege",
  17239. [
  17240. (store_script_param, ":faction_no", 1),
  17241. (store_script_param, ":troop_no", 2),
  17242. (assign, ":result", -1),
  17243. (assign, ":no_centers", 0),
  17244.  
  17245. (call_script, "script_lord_get_home_center", ":troop_no"),
  17246. (assign, ":home_center", reg0),
  17247.  
  17248. (try_for_range,":cur_center", walled_centers_begin, walled_centers_end),
  17249. (store_faction_of_party, ":cur_faction", ":cur_center"),
  17250. (eq, ":cur_faction", ":faction_no"),
  17251. (party_slot_eq, ":cur_center", slot_center_is_besieged_by, -1),
  17252. (val_add, ":no_centers", 1),
  17253.  
  17254. #(party_slot_eq, ":cur_center", slot_town_lord, ":troop_no"),
  17255. (eq, ":home_center", ":cur_center"), #I changed it with above line, now if lord is owner of any village its bound walled center is counted as 1000. Better this way. ozan-18.01.09
  17256.  
  17257. (val_add, ":no_centers", 1000),
  17258. (try_end),
  17259.  
  17260. #if no center is available count all centers not besieged do not care its faction.
  17261. (try_begin),
  17262. (le, ":no_centers", 0),
  17263.  
  17264. (assign, "$g_there_is_no_avaliable_centers", 1),
  17265.  
  17266. (try_for_range,":cur_center", walled_centers_begin, walled_centers_end),
  17267. (party_slot_eq, ":cur_center", slot_center_is_besieged_by, -1),
  17268. (val_add, ":no_centers", 1),
  17269. (try_end),
  17270. (else_try),
  17271. (assign, "$g_there_is_no_avaliable_centers", 0),
  17272. (try_end),
  17273.  
  17274. (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  17275. (this_or_next|eq, "$g_there_is_no_avaliable_centers", 0),
  17276. (neq, ":troop_no", ":faction_leader"), #faction leaders cannot spawn if they have no centers.
  17277.  
  17278. (store_random_in_range, ":random_center", 0, ":no_centers"),
  17279. (try_for_range,":cur_center", walled_centers_begin, walled_centers_end),
  17280. (eq, ":result", -1),
  17281. (store_faction_of_party, ":cur_faction", ":cur_center"),
  17282. (this_or_next|eq, "$g_there_is_no_avaliable_centers", 1),
  17283. (eq, ":cur_faction", ":faction_no"),
  17284. (party_slot_eq, ":cur_center", slot_center_is_besieged_by, -1),
  17285. (val_sub, ":random_center", 1),
  17286. (try_begin),
  17287. #(party_slot_eq, ":cur_center", slot_town_lord, ":troop_no"),
  17288. (eq, ":home_center", ":cur_center"), #I changed it with above line, now if lord is owner of any village its bound walled center is counted as 1000. Better this way. ozan-18.01.09
  17289. (eq, "$g_there_is_no_avaliable_centers", 0),
  17290.  
  17291. (val_sub, ":random_center", 1000),
  17292. (try_end),
  17293. (lt, ":random_center", 0),
  17294. (assign, ":result", ":cur_center"),
  17295. (try_end),
  17296. (assign, reg0, ":result"),
  17297. ]),
  17298.  
  17299.  
  17300. #script_cf_select_random_walled_center_with_faction_and_less_strength_priority:
  17301. # This script selects a random center in range [centers_begin, centers_end)
  17302. # such that faction of the town is equal to given_faction
  17303. # INPUT:
  17304. # arg1 = faction_no
  17305. # arg2 = preferred_center_no
  17306.  
  17307. #OUTPUT:
  17308. # This script may return false if there is no matching town.
  17309. # reg0 = town_no (Can fail)
  17310. ("cf_select_random_walled_center_with_faction_and_less_strength_priority",
  17311. [
  17312. (store_script_param, ":faction_no", 1),
  17313. (store_script_param, ":preferred_center_no", 2),
  17314. (assign, ":result", -1),
  17315. # First count num matching spawn points
  17316. (assign, ":no_centers", 0),
  17317. (try_for_range, ":cur_center", walled_centers_begin, walled_centers_end),
  17318. (store_faction_of_party, ":cur_faction", ":cur_center"),
  17319. (eq, ":cur_faction", ":faction_no"),
  17320. (party_slot_eq, ":cur_center", slot_center_is_besieged_by, -1),
  17321. (val_add, ":no_centers", 1),
  17322. (try_begin),
  17323. (eq, ":cur_center", ":preferred_center_no"),
  17324. (val_add, ":no_centers", 99),
  17325. (try_end),
  17326. ## (call_script, "script_party_calculate_regular_strength", ":cur_center"),
  17327. ## (assign, ":strength", reg0),
  17328. ## (lt, ":strength", 80),
  17329. ## (store_sub, ":strength", 100, ":strength"),
  17330. ## (val_div, ":strength", 20),
  17331. ## (val_add, ":no_centers", ":strength"),
  17332. (try_end),
  17333. (gt, ":no_centers", 0), #Fail if there are no centers
  17334. (store_random_in_range, ":random_center", 0, ":no_centers"),
  17335. (try_for_range, ":cur_center", walled_centers_begin, walled_centers_end),
  17336. (eq, ":result", -1),
  17337. (store_faction_of_party, ":cur_faction", ":cur_center"),
  17338. (eq, ":cur_faction", ":faction_no"),
  17339. (party_slot_eq, ":cur_center", slot_center_is_besieged_by, -1),
  17340. (val_sub, ":random_center", 1),
  17341. (try_begin),
  17342. (eq, ":cur_center", ":preferred_center_no"),
  17343. (val_sub, ":random_center", 99),
  17344. (try_end),
  17345. ## (try_begin),
  17346. ## (call_script, "script_party_calculate_regular_strength", ":cur_center"),
  17347. ## (assign, ":strength", reg0),
  17348. ## (lt, ":strength", 80),
  17349. ## (store_sub, ":strength", 100, ":strength"),
  17350. ## (val_div, ":strength", 20),
  17351. ## (val_sub, ":random_center", ":strength"),
  17352. ## (try_end),
  17353. (lt, ":random_center", 0),
  17354. (assign, ":result", ":cur_center"),
  17355. (try_end),
  17356. (assign, reg0, ":result"),
  17357. ]),
  17358.  
  17359.  
  17360. #script_cf_select_random_town_at_peace_with_faction:
  17361. # This script selects a random town in range [towns_begin, towns_end)
  17362. # such that faction of the town is friendly to given_faction
  17363. # INPUT:
  17364. # arg1 = faction_no
  17365.  
  17366. #OUTPUT:
  17367. # This script may return false if there is no matching town.
  17368. # reg0 = town_no
  17369. ("cf_select_random_town_at_peace_with_faction",
  17370. [
  17371. (store_script_param_1, ":faction_no"),
  17372. (assign, ":result", -1),
  17373. # First count num matching towns
  17374. (assign, ":no_towns", 0),
  17375. (try_for_range,":cur_town", towns_begin, towns_end),
  17376. (store_faction_of_party, ":cur_faction", ":cur_town"),
  17377. (store_relation,":reln", ":cur_faction", ":faction_no"),
  17378. (ge, ":reln", 0),
  17379. (val_add, ":no_towns", 1),
  17380. (try_end),
  17381. (gt, ":no_towns", 0), #Fail if there are no towns
  17382. (store_random_in_range, ":random_town", 0, ":no_towns"),
  17383. (assign, ":no_towns", 0),
  17384. (try_for_range,":cur_town", towns_begin, towns_end),
  17385. (eq, ":result", -1),
  17386. (store_faction_of_party, ":cur_faction", ":cur_town"),
  17387. (store_relation,":reln", ":cur_faction", ":faction_no"),
  17388. (ge, ":reln", 0),
  17389. (val_add, ":no_towns", 1),
  17390. (gt, ":no_towns", ":random_town"),
  17391. (assign, ":result", ":cur_town"),
  17392. (try_end),
  17393. (assign, reg0, ":result"),
  17394. ]),
  17395.  
  17396. #script_cf_select_random_town_at_peace_with_faction_in_trade_route
  17397. # INPUT:
  17398. # arg1 = town_no
  17399. # arg2 = faction_no
  17400.  
  17401. #OUTPUT:
  17402. # This script may return false if there is no matching town.
  17403. # reg0 = town_no
  17404. ("cf_select_random_town_at_peace_with_faction_in_trade_route",
  17405. [
  17406. (store_script_param, ":town_no", 1),
  17407. (store_script_param, ":faction_no", 2),
  17408. (assign, ":result", -1),
  17409. (assign, ":no_towns", 0),
  17410. (try_for_range, ":cur_slot", slot_town_trade_routes_begin, slot_town_trade_routes_end),
  17411. (party_get_slot, ":cur_town", ":town_no", ":cur_slot"),
  17412. (gt, ":cur_town", 0),
  17413. (store_faction_of_party, ":cur_faction", ":cur_town"),
  17414. (store_relation, ":reln", ":cur_faction", ":faction_no"),
  17415. (ge, ":reln", 0),
  17416. (val_add, ":no_towns", 1),
  17417. (try_end),
  17418. (gt, ":no_towns", 0), #Fail if there are no towns
  17419. (store_random_in_range, ":random_town", 0, ":no_towns"),
  17420. (try_for_range, ":cur_slot", slot_town_trade_routes_begin, slot_town_trade_routes_end),
  17421. (eq, ":result", -1),
  17422. (party_get_slot, ":cur_town", ":town_no", ":cur_slot"),
  17423. (gt, ":cur_town", 0),
  17424. (store_faction_of_party, ":cur_faction", ":cur_town"),
  17425. (store_relation, ":reln", ":cur_faction", ":faction_no"),
  17426. (ge, ":reln", 0),
  17427. (val_sub, ":random_town", 1),
  17428. (lt, ":random_town", 0),
  17429. (assign, ":result", ":cur_town"),
  17430. (try_end),
  17431. (assign, reg0, ":result"),
  17432. ]),
  17433.  
  17434.  
  17435.  
  17436. #the following is a very simple adjustment - it measures the difference in prices between two towns
  17437. #all goods are weighted equally except for luxuries
  17438. #it does not take into account the prices of the goods, nor cargo capacity
  17439. #to do that properly, a merchant would have to virtually fill his baggage, slot by slot, for each town
  17440. #i also found that one needed to introduce demand inelasticity -- prices should vary a lot for grain, relatively little for iron
  17441.  
  17442. ("cf_select_most_profitable_town_at_peace_with_faction_in_trade_route",
  17443. [
  17444. (store_script_param, ":town_no", 1),
  17445. (store_script_param, ":faction_no", 2),
  17446.  
  17447. (assign, ":result", -1),
  17448. (assign, ":best_town_score", 0),
  17449. (store_sub, ":item_to_price_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  17450.  
  17451. (try_for_range, ":cur_slot", slot_town_trade_routes_begin, slot_town_trade_routes_end),
  17452. (party_get_slot, ":cur_town", ":town_no", ":cur_slot"),
  17453. (gt, ":cur_town", 0),
  17454.  
  17455. (store_faction_of_party, ":cur_faction", ":cur_town"),
  17456. (store_relation, ":reln", ":cur_faction", ":faction_no"),
  17457. (ge, ":reln", 0),
  17458.  
  17459. (assign, ":cur_town_score", 0),
  17460. (try_for_range, ":cur_goods", trade_goods_begin, trade_goods_end),
  17461. (neq, ":cur_goods", "itm_butter"), #Don't count perishables
  17462. (neq, ":cur_goods", "itm_cattle_meat"),
  17463. (neq, ":cur_goods", "itm_chicken"),
  17464. (neq, ":cur_goods", "itm_pork"),
  17465.  
  17466. (store_add, ":cur_goods_price_slot", ":cur_goods", ":item_to_price_slot"),
  17467. (party_get_slot, ":origin_price", ":town_no", ":cur_goods_price_slot"),
  17468. (party_get_slot, ":destination_price", ":cur_town", ":cur_goods_price_slot"),
  17469.  
  17470. (gt, ":destination_price", ":origin_price"),
  17471. (store_sub, ":price_dif", ":destination_price", ":origin_price"),
  17472.  
  17473. (try_begin), #weight luxury goods double
  17474. (this_or_next|eq, ":cur_goods", "itm_spice"),
  17475. (eq, ":cur_goods", "itm_velvet"),
  17476. (val_mul, ":price_dif", 2),
  17477. (try_end),
  17478. (val_add, ":cur_town_score", ":price_dif"),
  17479. (try_end),
  17480.  
  17481. ## (try_begin),
  17482. ## (eq, "$cheat_mode", 1),
  17483. ## (str_store_party_name, s10, ":town_no"),
  17484. ## (str_store_party_name, s11, ":cur_town"),
  17485. ## (assign, reg3, ":cur_town_score"),
  17486. ## (display_message, "str_caravan_in_s10_considers_s11_total_price_dif_=_reg3"),
  17487. ## (try_end),
  17488.  
  17489. (gt, ":cur_town_score", ":best_town_score"),
  17490. (assign, ":best_town_score", ":cur_town_score"),
  17491. (assign, ":result", ":cur_town"),
  17492.  
  17493. (try_end),
  17494.  
  17495. (gt, ":result", -1), #Fail if there are no towns
  17496.  
  17497. (assign, reg0, ":result"),
  17498.  
  17499. # (store_current_hours, ":hour"),
  17500. # (party_set_slot, ":result", slot_town_caravan_last_visit, ":hour"),
  17501.  
  17502. ## (try_begin),
  17503. ## (eq, "$cheat_mode", 1),
  17504. ## (assign, reg3, ":best_town_score"),
  17505. ## (str_store_party_name, s3, ":town_no"),
  17506. ## (str_store_party_name, s4, ":result"),
  17507. ## (display_message, "str_test__caravan_in_s3_selects_for_s4_trade_score_reg3"),
  17508. ## (try_end),
  17509.  
  17510. ]),
  17511.  
  17512.  
  17513. ## ("cf_select_faction_spawn_point",
  17514. ## [
  17515. ## # First count num matching spawn points
  17516. ## (assign, reg(24), 0),
  17517. ## (try_for_range,reg(25), spawn_points_begin, spawn_points_end),
  17518. ## (store_faction_of_party, reg(23), reg(25)),
  17519. ## (eq, reg(23), "$pin_faction"),
  17520. ## (val_add, reg(24), 1),
  17521. ## (end_try,0),
  17522. ## # reg4 now holds num towns of this faction.
  17523. ## (gt, reg(24), 0), #Fail if there are no towns
  17524. ## (store_random, reg(26), reg(24)),
  17525. ##
  17526. ## (assign, reg(24), 0), # reg24 = num points of this faction.
  17527. ## (try_for_range,reg(25), spawn_points_begin, spawn_points_end),
  17528. ## (store_faction_of_party, reg(23), reg(25)),
  17529. ## (eq, reg(23), "$pin_faction"),
  17530. ## (try_begin,0),
  17531. ## (eq, reg(24), reg(26)),
  17532. ## (assign, "$pout_town", reg(25)), # result is this town
  17533. ## (end_try,0),
  17534. ## (val_add, reg(24), 1),
  17535. ## (end_try,0),
  17536. ## ]),
  17537.  
  17538.  
  17539. #script_spawn_party_at_random_town:
  17540. # This script selects a random town in range [towns_begin, towns_end)
  17541. # such that faction of the town is equal to given_faction
  17542. # and spawns a new party there.
  17543. # INPUT:
  17544. # $pin_faction: given_faction
  17545. # $pin_party_template: given_party_template
  17546.  
  17547. #OUTPUT:
  17548. # This script may return false if party cannot be spawned.
  17549. # $pout_party: id of the spawned party
  17550. ## ("spawn_party_at_random_town",
  17551. ## [
  17552. ## (call_script,"script_select_random_spawn_point"),
  17553. ## (set_spawn_radius,1),
  17554. ## (spawn_around_party,"$pout_town","$pin_party_template"),
  17555. ## (assign, "$pout_party", reg(0)),
  17556. ## ]),
  17557.  
  17558. #script_cf_spawn_party_at_faction_town:
  17559. # This script selects a random town in range [towns_begin, towns_end)
  17560. # such that faction of the town is equal to given_faction
  17561. # and spawns a new party there.
  17562. # INPUT:
  17563. # $pin_faction: given_faction
  17564. # $pin_party_template: given_party_template
  17565.  
  17566. #OUTPUT:
  17567. # This script may return false if party cannot be spawned.
  17568. # $pout_party: id of the spawned party
  17569. ## ("cf_spawn_party_at_faction_town",
  17570. ## [
  17571. ## (call_script,"script_cf_select_faction_spawn_point"),
  17572. ## (set_spawn_radius,1),
  17573. ## (spawn_around_party,"$pout_town","$pin_party_template"),
  17574. ## (assign, "$pout_party", reg(0)),
  17575. ## ]),
  17576.  
  17577. #script_spawn_party_at_random_town_if_below_limit:
  17578. # This script checks if number of parties
  17579. # of specified template is less than limit,
  17580. # If so, it selects a random town in range [towns_begin, towns_end)
  17581. # and spawns a new party there.
  17582. # INPUT:
  17583. # $pin_party_template: given_party_template
  17584. # $pin_limit: limit value
  17585.  
  17586. #OUTPUT:
  17587. # $pout_party: id of the spawned party
  17588. # $pout_town: id of the selected faction town
  17589. # Note:
  17590. # This script may return false if number of parties
  17591. # of specified template is greater or equal to limit,
  17592. # or if party cannot be spawned.
  17593. ## ("cf_spawn_party_at_random_town_if_below_limit",
  17594. ## [
  17595. ## (store_num_parties_of_template, reg(22), "$pin_party_template"),
  17596. ## (lt,reg(22),"$pin_limit"), #check if we are below limit.
  17597. ## (call_script,"script_select_random_spawn_point"),
  17598. ## (set_spawn_radius,1),
  17599. ## (spawn_around_party,"$pout_town","$pin_party_template"),
  17600. ## (assign, "$pout_party", reg(0)),
  17601. ## ]),
  17602.  
  17603. ## #script_spawn_party_at_faction_town_if_below_limit:
  17604. ## # This script checks if number of parties
  17605. ## # of specified template is less than limit,
  17606. ## # If so, it selects a random town in range [towns_begin, towns_end)
  17607. ## # such that faction of the town is equal to given_faction
  17608. ## # and spawns a new party there.
  17609. ## # INPUT:
  17610. ## # $pin_faction: given_faction
  17611. ## # $pin_party_template: given_party_template
  17612. ## # $pin_limit: limit value
  17613. ##
  17614. ## #OUTPUT:
  17615. ## # $pout_party: id of the spawned party
  17616. ## # $pout_town: id of the selected faction town
  17617. ## # Note:
  17618. ## # This script may return false if number of parties
  17619. ## # of specified template is greater or equal to limit,
  17620. ## # or if party cannot be spawned.
  17621. ## ("cf_spawn_party_at_faction_town_if_below_limit",
  17622. ## [
  17623. ## (store_num_parties_of_template, reg(22), "$pin_party_template"),
  17624. ## (lt,reg(22),"$pin_limit"), #check if we are below limit.
  17625. ## (call_script,"script_cf_select_faction_spawn_point"),
  17626. ## (set_spawn_radius,1),
  17627. ## (spawn_around_party,"$pout_town","$pin_party_template"),
  17628. ## (assign, "$pout_party", reg(0)),
  17629. ## ]),
  17630.  
  17631. # script_shuffle_troop_slots:
  17632. # Shuffles a range of slots of a given troop.
  17633. # Used for exploiting a troop as an array.
  17634. # Input: arg1 = troop_no, arg2 = slot_begin, arg3 = slot_end
  17635. ("shuffle_troop_slots",
  17636. [
  17637. (store_script_param, ":troop_no", 1),
  17638. (store_script_param, ":slots_begin", 2),
  17639. (store_script_param, ":slots_end", 3),
  17640. (try_for_range, ":cur_slot_no", ":slots_begin", ":slots_end"),
  17641. (store_random_in_range, ":random_slot_no", ":slots_begin", ":slots_end"), #reg(58) = random slot. Now exchange slots reg(57) and reg(58)
  17642. (troop_get_slot, ":cur_slot_value", ":troop_no", ":cur_slot_no"), #temporarily store the value in slot reg(57) in reg(59)
  17643. (troop_get_slot, ":random_slot_value", ":troop_no", ":random_slot_no"), #temporarily store the value in slot reg(58) in reg(60)
  17644. (troop_set_slot, ":troop_no", ":cur_slot_no", ":random_slot_value"), # Now exchange the two...
  17645. (troop_set_slot, ":troop_no", ":random_slot_no", ":cur_slot_value"),
  17646. (try_end),
  17647. ]),
  17648.  
  17649.  
  17650. # script_get_quest - combines old get_random_quest with new get_dynamic_quest
  17651.  
  17652. # Input: arg1 = troop_no (of the troop in conversation), arg2 = min_importance (of the quest)
  17653. # Output: reg0 = quest_no (the slots of the quest will be filled after calling this script)
  17654. ("get_quest",
  17655. [
  17656. (store_script_param_1, ":giver_troop"),
  17657.  
  17658. (store_character_level, ":player_level", "trp_player"),
  17659. (store_troop_faction, ":giver_faction_no", ":giver_troop"),
  17660.  
  17661. (troop_get_slot, ":giver_party_no", ":giver_troop", slot_troop_leaded_party),
  17662. (troop_get_slot, ":giver_reputation", ":giver_troop", slot_lord_reputation_type),
  17663.  
  17664. (assign, ":giver_center_no", -1),
  17665. (try_begin),
  17666. (gt, ":giver_party_no", 0),
  17667. (party_get_attached_to, ":giver_center_no", ":giver_party_no"),
  17668. (else_try),
  17669. (is_between, "$g_encountered_party", centers_begin, centers_end),
  17670. (assign, ":giver_center_no", "$g_encountered_party"),
  17671. (try_end),
  17672.  
  17673. (try_begin),
  17674. (troop_slot_eq, ":giver_troop", slot_troop_occupation, slto_kingdom_hero),
  17675. (try_begin),
  17676. (ge, "$g_talk_troop_faction_relation", 0),
  17677. (assign, ":quests_begin", lord_quests_begin),
  17678. (assign, ":quests_end", lord_quests_end),
  17679. (assign, ":quests_begin_2", lord_quests_begin_2),
  17680. (assign, ":quests_end_2", lord_quests_end_2),
  17681. (else_try),
  17682. (assign, ":quests_begin", enemy_lord_quests_begin),
  17683. (assign, ":quests_end", enemy_lord_quests_end),
  17684. (assign, ":quests_begin_2", 0),
  17685. (assign, ":quests_end_2", 0),
  17686. (try_end),
  17687. (else_try),
  17688. (is_between, ":giver_troop", village_elders_begin, village_elders_end),
  17689. (assign, ":quests_begin", village_elder_quests_begin),
  17690. (assign, ":quests_end", village_elder_quests_end),
  17691. (assign, ":quests_begin_2", village_elder_quests_begin_2),
  17692. (assign, ":quests_end_2", village_elder_quests_end_2),
  17693. (else_try),
  17694. (is_between, ":giver_troop", mayors_begin, mayors_end),
  17695. (assign, ":quests_begin", mayor_quests_begin),
  17696. (assign, ":quests_end", mayor_quests_end),
  17697. (assign, ":quests_begin_2", mayor_quests_begin_2),
  17698. (assign, ":quests_end_2", mayor_quests_end_2),
  17699. (else_try),
  17700. (assign, ":quests_begin", lady_quests_begin),
  17701. (assign, ":quests_end", lady_quests_end),
  17702. (assign, ":quests_begin_2", lady_quests_begin_2),
  17703. (assign, ":quests_end_2", lady_quests_end_2),
  17704. (try_end),
  17705.  
  17706. (assign, ":result", -1),
  17707. (assign, ":quest_target_troop", -1),
  17708. (assign, ":quest_target_center", -1),
  17709. (assign, ":quest_target_faction", -1),
  17710. (assign, ":quest_object_faction", -1),
  17711. (assign, ":quest_object_troop", -1),
  17712. (assign, ":quest_object_center", -1),
  17713. (assign, ":quest_target_party", -1),
  17714. (assign, ":quest_target_party_template", -1),
  17715. (assign, ":quest_target_amount", -1),
  17716. (assign, ":quest_target_dna", -1),
  17717. (assign, ":quest_target_item", -1),
  17718. (assign, ":quest_importance", 1),
  17719. (assign, ":quest_xp_reward", 0),
  17720. (assign, ":quest_gold_reward", 0),
  17721. (assign, ":quest_convince_value", 0),
  17722. (assign, ":quest_expiration_days", 0),
  17723. (assign, ":quest_dont_give_again_period", 0),
  17724.  
  17725. (try_begin), #get dynamic quest is a separate script, so that we can scan a number of different troops at once for it
  17726. (call_script, "script_get_dynamic_quest", "$g_talk_troop"),
  17727.  
  17728. (assign, ":result", reg0),
  17729. (assign, ":relevant_troop", reg1),
  17730. (assign, ":relevant_party", reg2),
  17731. (assign, ":relevant_faction", reg3),
  17732.  
  17733. #GUILDMASTER QUESTS
  17734. (try_begin),
  17735. (eq, ":result", "qst_track_down_bandits"),
  17736. (assign, ":quest_target_party", ":relevant_party"),
  17737. (assign ,":quest_expiration_days", 60),
  17738. (assign, ":quest_xp_reward", 1000),
  17739. (assign, ":quest_gold_reward", 1000),
  17740.  
  17741. (else_try),
  17742. (eq, ":result", "qst_retaliate_for_border_incident"),
  17743. (assign, ":quest_target_troop", ":relevant_troop"),
  17744. (assign, ":quest_target_faction", ":relevant_faction"),
  17745.  
  17746. (assign ,":quest_expiration_days", 30),
  17747. (assign, ":quest_xp_reward", 1000),
  17748. (assign, ":quest_gold_reward", 1000),
  17749.  
  17750. #KINGDOM LORD QUESTS
  17751. (else_try),
  17752. (eq, ":result", "qst_cause_provocation"),
  17753. (assign, ":quest_target_faction", ":relevant_faction"),
  17754. (assign, ":quest_expiration_days", 30),
  17755. (assign, ":quest_dont_give_again_period", 100),
  17756. (assign, ":quest_xp_reward", 1000),
  17757. (assign, ":quest_gold_reward", 1000),
  17758.  
  17759. (else_try),
  17760. (eq, ":result", "qst_destroy_bandit_lair"),
  17761. (assign, ":quest_target_party", ":relevant_party"),
  17762. (assign ,":quest_expiration_days", 60),
  17763. (assign, ":quest_xp_reward", 3000),
  17764. (assign, ":quest_gold_reward", 1500),
  17765.  
  17766. #KINGDOM LADY OR KINGDOM HERO QUESTS
  17767. (else_try),
  17768. (eq, ":result", "qst_rescue_prisoner"),
  17769. (assign, ":quest_target_troop", ":relevant_troop"),
  17770. (assign, ":quest_target_center", ":relevant_party"),
  17771.  
  17772. (assign, ":quest_expiration_days", 30),
  17773. (assign, ":quest_dont_give_again_period", 5),
  17774. (assign, ":quest_xp_reward", 1500),
  17775. (assign, ":quest_gold_reward", 3000),
  17776. (try_end),
  17777. (try_end),
  17778.  
  17779. #no dynamic quest available
  17780. (try_begin),
  17781. (eq, ":result", -1),
  17782.  
  17783. (try_for_range, ":unused", 0, 20), #Repeat trial twenty times
  17784. (eq, ":result", -1),
  17785. (assign, ":quest_target_troop", -1),
  17786. (assign, ":quest_target_center", -1),
  17787. (assign, ":quest_target_faction", -1),
  17788. (assign, ":quest_object_faction", -1),
  17789. (assign, ":quest_object_troop", -1),
  17790. (assign, ":quest_object_center", -1),
  17791. (assign, ":quest_target_party", -1),
  17792. (assign, ":quest_target_party_template", -1),
  17793. (assign, ":quest_target_amount", -1),
  17794. (assign, ":quest_target_dna", -1),
  17795. (assign, ":quest_target_item", -1),
  17796. (assign, ":quest_importance", 1),
  17797. (assign, ":quest_xp_reward", 0),
  17798. (assign, ":quest_gold_reward", 0),
  17799. (assign, ":quest_convince_value", 0),
  17800. (assign, ":quest_expiration_days", 0),
  17801. (assign, ":quest_dont_give_again_period", 0),
  17802.  
  17803. (store_sub, ":num_possible_old_quests", ":quests_end", ":quests_begin"),
  17804. (store_sub, ":num_possible_new_quests", ":quests_end_2", ":quests_begin_2"),
  17805. (store_add, ":num_possible_total_quests", ":num_possible_old_quests", ":num_possible_new_quests"),
  17806.  
  17807. (store_random_in_range, ":quest_no", 0, ":num_possible_total_quests"),
  17808.  
  17809. (try_begin),
  17810. (lt, ":quest_no", ":num_possible_old_quests"),
  17811. (store_random_in_range, ":quest_no", ":quests_begin", ":quests_end"),
  17812. (else_try),
  17813. (store_random_in_range, ":quest_no", ":quests_begin_2", ":quests_end_2"),
  17814. (try_end),
  17815.  
  17816. (neg|check_quest_active,":quest_no"),
  17817. (neg|quest_slot_ge, ":quest_no", slot_quest_dont_give_again_remaining_days, 1),
  17818. (try_begin),
  17819. # Village Elder quests
  17820. (eq, ":quest_no", "qst_deliver_grain"),
  17821. (try_begin),
  17822. (is_between, ":giver_center_no", villages_begin, villages_end),
  17823. #The quest giver is the village elder
  17824. (call_script, "script_get_troop_item_amount", ":giver_troop", "itm_grain"),
  17825. (eq, reg0, 0),
  17826. (neg|party_slot_ge, ":giver_center_no", slot_town_prosperity, 40),
  17827. (assign, ":quest_target_center", ":giver_center_no"),
  17828. (store_random_in_range, ":quest_target_amount", 4, 8),
  17829. (assign, ":quest_expiration_days", 30),
  17830. (assign, ":quest_dont_give_again_period", 20),
  17831. (assign, ":result", ":quest_no"),
  17832. (try_end),
  17833. (else_try),
  17834. (eq, ":quest_no", "qst_deliver_cattle"),
  17835. (try_begin),
  17836. (is_between, ":giver_center_no", villages_begin, villages_end),
  17837. #The quest giver is the village elder
  17838. (party_get_slot, ":num_cattle", ":giver_center_no", slot_village_number_of_cattle),
  17839. (lt, ":num_cattle", 50),
  17840. (assign, ":quest_target_center", ":giver_center_no"),
  17841. (store_random_in_range, ":quest_target_amount", 5, 10),
  17842. (assign, ":quest_expiration_days", 30),
  17843. (assign, ":quest_dont_give_again_period", 20),
  17844. (assign, ":result", ":quest_no"),
  17845. (try_end),
  17846. (else_try),
  17847. (eq, ":quest_no", "qst_train_peasants_against_bandits"),
  17848. (try_begin),
  17849. (is_between, ":giver_center_no", villages_begin, villages_end),
  17850. #The quest giver is the village elder
  17851. (store_skill_level, ":player_trainer", "skl_trainer", "trp_player"),
  17852. (gt, ":player_trainer", 0),
  17853. (store_random_in_range, ":quest_target_amount", 5, 8),
  17854. (assign, ":quest_target_center", ":giver_center_no"),
  17855. (assign, ":quest_expiration_days", 20),
  17856. (assign, ":quest_dont_give_again_period", 40),
  17857. (assign, ":result", ":quest_no"),
  17858. (try_end),
  17859. (else_try),
  17860. # Mayor quests
  17861. (eq, ":quest_no", "qst_escort_merchant_caravan"),
  17862. (is_between, ":giver_center_no", centers_begin, centers_end),
  17863. (store_random_party_in_range, ":quest_target_center", towns_begin, towns_end),
  17864. (store_distance_to_party_from_party, ":dist", ":giver_center_no",":quest_target_center"),
  17865. (assign, ":quest_gold_reward", ":dist"),
  17866. (val_add, ":quest_gold_reward", 25),
  17867. (val_mul, ":quest_gold_reward", 25),
  17868. (val_div, ":quest_gold_reward", 20),
  17869. (store_random_in_range, ":quest_target_amount", 6, 12),
  17870. (assign, "$escort_merchant_caravan_mode", 0),
  17871. (assign, ":result", ":quest_no"),
  17872. (else_try),
  17873. (eq, ":quest_no", "qst_deliver_wine"),
  17874. (is_between, ":giver_center_no", centers_begin, centers_end),
  17875. (store_random_party_in_range, ":quest_target_center", towns_begin, towns_end),
  17876. (store_random_in_range, ":random_no", 0, 2),
  17877. (try_begin),
  17878. (eq, ":random_no", 0),
  17879. (assign, ":quest_target_item", "itm_quest_wine"),
  17880. (else_try),
  17881. (assign, ":quest_target_item", "itm_quest_ale"),
  17882. (try_end),
  17883. (store_random_in_range, ":quest_target_amount", 6, 12),
  17884. (store_distance_to_party_from_party, ":dist", ":giver_center_no",":quest_target_center"),
  17885. (assign, ":quest_gold_reward", ":dist"),
  17886. (val_add, ":quest_gold_reward", 2),
  17887. (assign, ":multiplier", 5),
  17888. (val_add, ":multiplier", ":quest_target_amount"),
  17889. (val_mul, ":quest_gold_reward", ":multiplier"),
  17890. (val_div, ":quest_gold_reward", 100),
  17891. (val_mul, ":quest_gold_reward", 10),
  17892. (store_item_value,"$qst_deliver_wine_debt",":quest_target_item"),
  17893. (val_mul,"$qst_deliver_wine_debt",":quest_target_amount"),
  17894. (val_mul,"$qst_deliver_wine_debt", 6),
  17895. (val_div,"$qst_deliver_wine_debt",5),
  17896. (assign, ":quest_expiration_days", 7),
  17897. (assign, ":quest_dont_give_again_period", 20),
  17898. (assign, ":result", ":quest_no"),
  17899. (else_try),
  17900. (eq, ":quest_no", "qst_troublesome_bandits"),
  17901. (is_between, ":giver_center_no", centers_begin, centers_end),
  17902. (store_character_level, ":quest_gold_reward", "trp_player"),
  17903. (val_add, ":quest_gold_reward", 20),
  17904. (val_mul, ":quest_gold_reward", 35),
  17905. (val_div, ":quest_gold_reward",100),
  17906. (val_mul, ":quest_gold_reward", 10),
  17907. (assign, ":quest_expiration_days", 30),
  17908. (assign, ":quest_dont_give_again_period", 30),
  17909. (assign, ":result", ":quest_no"),
  17910. (else_try),
  17911. (eq, ":quest_no", "qst_kidnapped_girl"),
  17912. (is_between, ":giver_center_no", centers_begin, centers_end),
  17913. (store_random_in_range, ":quest_target_center", villages_begin, villages_end),
  17914. (store_character_level, ":quest_target_amount"),
  17915. (val_add, ":quest_target_amount", 15),
  17916. (store_distance_to_party_from_party, ":dist", ":giver_center_no", ":quest_target_center"),
  17917. (val_add, ":dist", 15),
  17918. (val_mul, ":dist", 2),
  17919. (val_mul, ":quest_target_amount", ":dist"),
  17920. (val_div, ":quest_target_amount",100),
  17921. (val_mul, ":quest_target_amount",10),
  17922. (assign, ":quest_gold_reward", ":quest_target_amount"),
  17923. (val_div, ":quest_gold_reward", 40),
  17924. (val_mul, ":quest_gold_reward", 10),
  17925. (assign, ":quest_expiration_days", 15),
  17926. (assign, ":quest_dont_give_again_period", 30),
  17927. (assign, ":result", ":quest_no"),
  17928. (else_try),
  17929. (eq, ":quest_no", "qst_move_cattle_herd"),
  17930. (is_between, ":giver_center_no", centers_begin, centers_end),
  17931. (call_script, "script_cf_select_random_town_at_peace_with_faction", ":giver_faction_no"),
  17932. (neq, ":giver_center_no", reg0),
  17933. (assign, ":quest_target_center", reg0),
  17934. (store_distance_to_party_from_party, ":dist",":giver_center_no",":quest_target_center"),
  17935. (assign, ":quest_gold_reward", ":dist"),
  17936. (val_add, ":quest_gold_reward", 25),
  17937. (val_mul, ":quest_gold_reward", 50),
  17938. (val_div, ":quest_gold_reward", 20),
  17939. (assign, ":quest_expiration_days", 30),
  17940. (assign, ":quest_dont_give_again_period", 20),
  17941. (assign, ":result", ":quest_no"),
  17942. (else_try),
  17943. (eq, ":quest_no", "qst_persuade_lords_to_make_peace"),
  17944. (is_between, ":giver_center_no", centers_begin, centers_end),
  17945. (store_faction_of_party, ":cur_object_faction", ":giver_center_no"),
  17946. (call_script, "script_cf_faction_get_random_enemy_faction", ":cur_object_faction"),
  17947. (assign, ":cur_target_faction", reg0),
  17948. (call_script, "script_cf_get_random_lord_except_king_with_faction", ":cur_object_faction"),
  17949. (assign, ":cur_object_troop", reg0),
  17950. (this_or_next|troop_slot_eq, ":cur_object_troop", slot_lord_reputation_type, lrep_quarrelsome),
  17951. (this_or_next|troop_slot_eq, ":cur_object_troop", slot_lord_reputation_type, lrep_selfrighteous),
  17952. (this_or_next|troop_slot_eq, ":cur_object_troop", slot_lord_reputation_type, lrep_martial),
  17953. (troop_slot_eq, ":cur_object_troop", slot_lord_reputation_type, lrep_debauched),
  17954.  
  17955. (call_script, "script_cf_get_random_lord_except_king_with_faction", ":cur_target_faction"),
  17956. (assign, ":quest_target_troop", reg0),
  17957. (this_or_next|troop_slot_eq, ":quest_target_troop", slot_lord_reputation_type, lrep_quarrelsome),
  17958. (this_or_next|troop_slot_eq, ":quest_target_troop", slot_lord_reputation_type, lrep_selfrighteous),
  17959. (this_or_next|troop_slot_eq, ":quest_target_troop", slot_lord_reputation_type, lrep_martial),
  17960. (troop_slot_eq, ":quest_target_troop", slot_lord_reputation_type, lrep_debauched),
  17961.  
  17962. (assign, ":quest_object_troop", ":cur_object_troop"),
  17963. (assign, ":quest_target_faction", ":cur_target_faction"),
  17964. (assign, ":quest_object_faction", ":cur_object_faction"),
  17965. (assign, ":quest_gold_reward", 12000),
  17966. (assign, ":quest_convince_value", 7000),
  17967. (assign, ":quest_expiration_days", 30),
  17968. (assign, ":quest_dont_give_again_period", 100),
  17969. (assign, ":result", ":quest_no"),
  17970. (else_try),
  17971. (eq, ":quest_no", "qst_deal_with_looters"),
  17972. (is_between, ":player_level", 0, 15),
  17973. (is_between, ":giver_center_no", centers_begin, centers_end),
  17974. (store_faction_of_party, ":cur_object_faction", ":giver_center_no"),
  17975. (store_num_parties_destroyed_by_player, ":num_looters_destroyed", "pt_looters"),
  17976. (party_template_set_slot,"pt_looters",slot_party_template_num_killed,":num_looters_destroyed"),
  17977. (quest_set_slot,":quest_no",slot_quest_current_state,0),
  17978. (quest_set_slot,":quest_no",slot_quest_target_party_template,"pt_looters"),
  17979. (assign, ":quest_gold_reward", 500),
  17980. (assign, ":quest_xp_reward", 500),
  17981. (assign, ":quest_expiration_days", 20),
  17982. (assign, ":quest_dont_give_again_period", 30),
  17983. (assign, ":result", ":quest_no"),
  17984. (else_try),
  17985. (eq, ":quest_no", "qst_deal_with_night_bandits"),
  17986. (is_between, ":player_level", 0, 15),
  17987. (is_between, ":giver_center_no", centers_begin, centers_end),
  17988. (party_slot_ge, ":giver_center_no", slot_center_has_bandits, 1),
  17989. (assign, ":quest_target_center", ":giver_center_no"),
  17990. (assign, ":quest_expiration_days", 4),
  17991. (assign, ":quest_dont_give_again_period", 15),
  17992. (assign, ":result", ":quest_no"),
  17993. (else_try),
  17994. # Lady quests
  17995. (eq, ":quest_no", "qst_rescue_lord_by_replace"),
  17996. (eq, 1, 0),
  17997. (try_begin),
  17998. (ge, "$g_talk_troop_faction_relation", 0),
  17999. (is_between, ":player_level", 5, 25),
  18000.  
  18001. (assign, ":prisoner_relative", -1),
  18002.  
  18003. (try_begin),
  18004. (troop_get_slot, ":cur_target_troop", ":giver_troop", slot_troop_father), #get giver_troop's father
  18005. (gt, ":cur_target_troop", 0), #if giver_troop has a father as a troop in game
  18006. (troop_slot_ge, ":cur_target_troop", slot_troop_prisoner_of_party, 0), #if giver_troop's father is in a prison
  18007. (assign, ":prisoner_relative", ":cur_target_troop"),
  18008. (try_end),
  18009.  
  18010. (try_begin),
  18011. (eq, ":prisoner_relative", -1), #if giver_troop has no father or giver_troop's father is not in prison.
  18012. (troop_get_slot, ":cur_target_troop", ":giver_troop", slot_troop_spouse), #get giver_troop's spouse
  18013. (gt, ":cur_target_troop", 0), #if giver_troop has a spouse as a troop in game
  18014. (troop_slot_ge, ":cur_target_troop", slot_troop_prisoner_of_party, 0), #if giver_troop's spouse is in a prison
  18015. (assign, ":prisoner_relative", ":cur_target_troop"),
  18016. (try_end),
  18017.  
  18018. (try_begin),
  18019. (eq, ":prisoner_relative", -1), #if ((giver_troop has no father) or (giver_troop's father is not in prison)) and ((giver_troop has no spouse) or (giver_troop's spouse is not in prison)).
  18020. (troop_get_slot, ":cur_target_troop", ":giver_troop", slot_troop_guardian), #get giver_troop's spouse
  18021. (gt, ":cur_target_troop", 0), #if giver_troop has a guardian as a troop in game
  18022. (troop_slot_ge, ":cur_target_troop", slot_troop_prisoner_of_party, 0), #if giver_troop's guardian is in a prison
  18023. (assign, ":prisoner_relative", ":cur_target_troop"),
  18024. (try_end),
  18025.  
  18026. (try_begin),
  18027. (eq, "$cheat_mode", 1),
  18028. (assign, reg0, ":prisoner_relative"),
  18029. (display_message, "str_prisoner_relative_is_reg0"),
  18030. (try_end),
  18031.  
  18032. (gt, ":prisoner_relative", -1),
  18033. #(changed 2) no need to this anymore (troop_slot_ge, ":prisoner_relative", slot_troop_prisoner_of_party, 0),
  18034. (call_script, "script_search_troop_prisoner_of_party", ":prisoner_relative"),
  18035. (assign, ":cur_target_center", reg0),
  18036.  
  18037. #(changed 3) no need to check only towns anymore (is_between, ":cur_target_center", towns_begin, towns_end),#Skip if he is not in a town
  18038. (is_between, ":cur_target_center", walled_centers_begin, walled_centers_end), #Skip if he is not in a walled center
  18039.  
  18040. (assign, ":quest_target_center", ":cur_target_center"),
  18041. (assign, ":quest_target_troop", ":prisoner_relative"),
  18042. (assign, ":quest_expiration_days", 30),
  18043. (assign, ":quest_dont_give_again_period", 73),
  18044. (assign, ":result", ":quest_no"),
  18045. (try_end),
  18046. (else_try),
  18047. (eq, ":quest_no", "qst_deliver_message_to_prisoner_lord"),
  18048. (eq, "$player_has_homage", 0),
  18049.  
  18050. (try_begin),
  18051. (ge, "$g_talk_troop_faction_relation", 0),
  18052. (is_between, ":player_level", 5, 25),
  18053. (troop_get_slot, ":cur_target_troop", ":giver_troop", slot_troop_father),
  18054. (try_begin),
  18055. (eq, ":cur_target_troop", 0),
  18056. (troop_get_slot, ":cur_target_troop", ":giver_troop", slot_troop_spouse),
  18057. (try_end),
  18058. #(troop_slot_eq, ":cur_target_troop", slot_troop_is_prisoner, 1),#Skip if the lady's father/husband is not in prison
  18059. (gt, ":cur_target_troop", -1),
  18060. (troop_slot_ge, ":cur_target_troop", slot_troop_prisoner_of_party, 0),
  18061. (call_script, "script_search_troop_prisoner_of_party", ":cur_target_troop"),
  18062. (assign, ":cur_target_center", reg0),
  18063. (is_between, ":cur_target_center", towns_begin, towns_end),#Skip if he is not in a town
  18064. (assign, ":quest_target_center", ":cur_target_center"),
  18065. (assign, ":quest_target_troop", ":cur_target_troop"),
  18066. (assign, ":quest_expiration_days", 30),
  18067. (assign, ":quest_dont_give_again_period", 30),
  18068. (assign, ":result", ":quest_no"),
  18069. (try_end),
  18070. (else_try),
  18071. (eq, ":quest_no", "qst_duel_for_lady"),
  18072. (try_begin),
  18073. (ge, "$g_talk_troop_faction_relation", 0),
  18074. (ge, ":player_level", 10),
  18075. (call_script, "script_cf_troop_get_random_enemy_troop_with_occupation", ":giver_troop", slto_kingdom_hero),#Can fail
  18076. (assign, ":cur_target_troop", reg0),
  18077. (neg|troop_slot_eq, ":giver_troop", slot_troop_spouse, ":cur_target_troop"), #must not be in the family
  18078. (neg|troop_slot_eq, ":giver_troop", slot_troop_father, ":cur_target_troop"),
  18079. (neg|troop_slot_ge, ":cur_target_troop", slot_troop_prisoner_of_party, 0),
  18080. (troop_slot_ge, ":cur_target_troop", slot_troop_leaded_party, 0),
  18081. (neg|troop_slot_eq, ":cur_target_troop", slot_lord_reputation_type, lrep_goodnatured),
  18082. (neg|troop_slot_eq, ":cur_target_troop", slot_lord_reputation_type, lrep_upstanding),
  18083. (neg|troop_slot_eq, ":cur_target_troop", slot_lord_reputation_type, lrep_martial),
  18084.  
  18085. (assign, ":quest_target_troop", ":cur_target_troop"),
  18086. (assign, ":quest_expiration_days", 30),
  18087. (assign, ":quest_dont_give_again_period", 50),
  18088. (assign, ":result", ":quest_no"),
  18089. (try_end),
  18090. # Enemy Lord Quests
  18091. (else_try),
  18092. (eq, ":quest_no", "qst_lend_surgeon"),
  18093. (try_begin),
  18094. (eq, "$g_defending_against_siege", 0),#Skip if the center is under siege (because of resting)
  18095. (neq, ":giver_reputation", lrep_quarrelsome),
  18096. (neq, ":giver_reputation", lrep_debauched),
  18097. (assign, ":max_surgery_level", 0),
  18098. (assign, ":best_surgeon", -1),
  18099. (party_get_num_companion_stacks, ":num_stacks","p_main_party"),
  18100. (try_for_range, ":i_stack", 1, ":num_stacks"),
  18101. (party_stack_get_troop_id, ":stack_troop","p_main_party",":i_stack"),
  18102. (troop_is_hero, ":stack_troop"),
  18103. (store_skill_level, ":cur_surgery_skill", skl_surgery, ":stack_troop"),
  18104. (gt, ":cur_surgery_skill", ":max_surgery_level"),
  18105. (assign, ":max_surgery_level", ":cur_surgery_skill"),
  18106. (assign, ":best_surgeon", ":stack_troop"),
  18107. (try_end),
  18108.  
  18109. (store_character_level, ":cur_level", "trp_player"),
  18110. (assign, ":required_skill", 5),
  18111. (val_div, ":cur_level", 10),
  18112. (val_add, ":required_skill", ":cur_level"),
  18113. (ge, ":max_surgery_level", ":required_skill"), #Skip if party skill level is less than the required value
  18114.  
  18115. (assign, ":quest_object_troop", ":best_surgeon"),
  18116. (assign, ":quest_importance", 1),
  18117. (assign, ":quest_xp_reward", 10),
  18118. (assign, ":quest_gold_reward", 10),
  18119. (assign, ":quest_dont_give_again_period", 50),
  18120. (assign, ":result", ":quest_no"),
  18121. (try_end),
  18122. # Lord Quests
  18123. (else_try),
  18124. (eq, ":quest_no", "qst_meet_spy_in_enemy_town"),
  18125. (eq, "$player_has_homage", 0),
  18126.  
  18127. (try_begin),
  18128. (eq, "$players_kingdom", ":giver_faction_no"),
  18129. (neq, ":giver_reputation", lrep_goodnatured),
  18130. (neq, ":giver_reputation", lrep_martial),
  18131.  
  18132. (call_script, "script_troop_get_player_relation", ":giver_troop"),
  18133. (assign, ":giver_relation", reg0),
  18134. (gt, ":giver_relation", 3),
  18135. (call_script, "script_cf_faction_get_random_enemy_faction", ":giver_faction_no"),
  18136. (assign, ":enemy_faction", reg0),
  18137. (store_relation, ":reln", ":enemy_faction", "fac_player_supporters_faction"),
  18138. (lt, ":reln", 0),
  18139. (call_script, "script_cf_select_random_town_with_faction", ":enemy_faction"),
  18140. (assign, ":cur_target_center", reg0),
  18141. #Just to make sure that there is a free walker
  18142. (call_script, "script_cf_center_get_free_walker", ":cur_target_center"),
  18143. (assign, ":quest_target_center", ":cur_target_center"),
  18144. (store_random_in_range, ":quest_target_amount", secret_signs_begin, secret_signs_end),
  18145. (assign, ":result", ":quest_no"),
  18146. (assign, ":quest_gold_reward", 500),
  18147. (assign, ":quest_expiration_days", 30),
  18148. (assign, ":quest_dont_give_again_period", 50),
  18149. (quest_set_slot, "qst_meet_spy_in_enemy_town", slot_quest_gold_reward, 500),
  18150. (try_end),
  18151. (else_try),
  18152. (eq, ":quest_no", "qst_raid_caravan_to_start_war"),
  18153. (eq, 1, 0), #disable this as a random quest
  18154.  
  18155. (try_begin),
  18156. (eq, "$players_kingdom", ":giver_faction_no"),
  18157. (this_or_next|eq, ":giver_reputation", lrep_cunning),
  18158. (this_or_next|eq, ":giver_reputation", lrep_quarrelsome),
  18159. ( eq, ":giver_reputation", lrep_debauched),
  18160. (gt, ":player_level", 10),
  18161. (eq, 1, 0), #disable this as a random quest
  18162.  
  18163. (neg|faction_slot_eq, ":giver_faction_no", slot_faction_leader, ":giver_troop"),#Can not take the quest from the king
  18164. (call_script, "script_cf_faction_get_random_friendly_faction", ":giver_faction_no"),#Can fail
  18165. (assign, ":quest_target_faction", reg0),
  18166. (store_troop_faction, ":quest_object_faction", ":giver_troop"),
  18167. (assign, ":quest_target_party_template", "pt_kingdom_caravan_party"),
  18168. (assign, ":quest_target_amount", 2),
  18169. (assign, ":result", ":quest_no"),
  18170. (assign, ":quest_expiration_days", 30),
  18171. (assign, ":quest_dont_give_again_period", 100),
  18172. (try_end),
  18173. (else_try),
  18174. (eq, ":quest_no", "qst_deliver_message"),
  18175. (eq, "$player_has_homage", 0),
  18176.  
  18177. (try_begin),
  18178. (ge, "$g_talk_troop_faction_relation", 0),
  18179. (lt, ":player_level", 20),
  18180. (neg|troop_slot_ge, "trp_player", slot_troop_renown, 125),
  18181. (call_script, "script_cf_get_random_lord_in_a_center_with_faction", ":giver_faction_no"),#Can fail
  18182. (assign, ":cur_target_troop", reg0),
  18183. (neq, ":cur_target_troop", ":giver_troop"),#Skip himself
  18184. (call_script, "script_get_troop_attached_party", ":cur_target_troop"),
  18185. (assign, ":cur_target_center", reg0),#cur_target_center will definitely be a valid center
  18186. (neq,":giver_center_no", ":cur_target_center"),#Skip current center
  18187.  
  18188. (assign, ":quest_target_center", ":cur_target_center"),
  18189. (assign, ":quest_target_troop", ":cur_target_troop"),
  18190. (assign, ":quest_xp_reward", 30),
  18191. (assign, ":quest_gold_reward", 40),
  18192. (assign, ":quest_dont_give_again_period", 10),
  18193.  
  18194. (assign, ":result", ":quest_no"),
  18195.  
  18196. (assign, ":quest_expiration_days", 30),
  18197. (try_end),
  18198. (else_try),
  18199. (eq, ":quest_no", "qst_escort_lady"),
  18200. (try_begin),
  18201. (ge, "$g_talk_troop_faction_relation", 0),
  18202. (ge, ":player_level", 10),
  18203.  
  18204. (ge, ":giver_troop", 0), #skip troops without fathers in range
  18205.  
  18206. (assign, ":cur_object_troop", -1),
  18207. (try_for_range, ":lady", kingdom_ladies_begin, kingdom_ladies_end),
  18208. (troop_slot_eq, ":lady", slot_troop_father, ":giver_troop"),
  18209. (assign, ":cur_object_troop", ":lady"),
  18210. (try_end),
  18211.  
  18212. (ge, ":cur_object_troop", 0),
  18213.  
  18214. (troop_get_slot, ":giver_troop_confirm", ":cur_object_troop", slot_troop_father), # just to make sure
  18215. (eq, ":giver_troop", ":giver_troop_confirm"), # just to make sure
  18216.  
  18217. (store_random_in_range, ":random_no", 0, 2),
  18218. (try_begin),
  18219. (eq, ":random_no", 0),
  18220. (troop_get_slot, ":cur_object_troop_2", ":giver_troop", slot_troop_spouse),
  18221. (is_between, ":cur_object_troop_2", kingdom_ladies_begin, kingdom_ladies_end),
  18222. (troop_get_slot, ":giver_troop_confirm", ":cur_object_troop_2", slot_troop_spouse), # just to make sure
  18223. (eq, ":giver_troop", ":giver_troop_confirm"), # just to make sure
  18224. (assign, ":cur_object_troop", ":cur_object_troop_2"),
  18225. (try_end),
  18226. (gt, ":cur_object_troop", 0),#Skip lords without a lady
  18227. (troop_get_type, ":cur_troop_gender", ":cur_object_troop"),
  18228. (eq, ":cur_troop_gender", 1),#Skip if it is not female
  18229. (gt, ":giver_center_no", 0),#Skip if lord is outside the center
  18230. (troop_slot_eq, ":cur_object_troop", slot_troop_cur_center, ":giver_center_no"),#Skip if the lady is not at the same center
  18231. (call_script, "script_cf_select_random_town_with_faction", ":giver_faction_no"),#Can fail
  18232. (assign, ":cur_target_center", reg0),
  18233. (neq, ":cur_target_center", ":giver_center_no"),
  18234. (hero_can_join),#Skip if player has no available slots
  18235.  
  18236. (assign, ":quest_object_troop", ":cur_object_troop"),
  18237. (assign, ":quest_target_center", ":cur_target_center"),
  18238. (assign, ":quest_expiration_days", 20),
  18239. (assign, ":quest_dont_give_again_period", 30),
  18240. (assign, ":result", ":quest_no"),
  18241. (try_end),
  18242. ## (else_try),
  18243. ## (eq, ":quest_no", "qst_hunt_down_raiders"),
  18244. ## (try_begin),
  18245. ## (gt, ":player_level", 10),
  18246. ## (faction_slot_eq, ":giver_faction_no", slot_faction_leader, ":giver_troop"),
  18247. ## (call_script, "script_cf_select_random_town_with_faction", ":giver_faction_no"),#Can fail
  18248. ## (assign, ":cur_object_center", reg0),
  18249. ## (neq, ":cur_object_center", ":giver_center_no"),#Skip current center
  18250. ## (call_script, "script_get_random_enemy_center", ":giver_party_no"),
  18251. ## (assign, ":cur_target_center", reg0),
  18252. ## (ge, ":cur_target_center", 0),
  18253. ## (store_faction_of_party, ":cur_target_faction", ":cur_target_center"),
  18254. ## (is_between, ":cur_target_faction", kingdoms_begin, kingdoms_end),
  18255. ##
  18256. ## (assign, ":quest_object_center", ":cur_object_center"),
  18257. ## (assign, ":quest_target_center", ":cur_target_center"),
  18258. ## (assign, ":quest_importance", 1),
  18259. ## (assign, ":quest_xp_reward", 1500),
  18260. ## (assign, ":quest_gold_reward", 1000),
  18261. ## (assign, ":result", ":quest_no"),
  18262. ## (try_end),
  18263. ## (else_try),
  18264. ## (eq, ":quest_no", "qst_bring_back_deserters"),
  18265. ## (try_begin),
  18266. ## (gt, ":player_level", 5),
  18267. ## (faction_get_slot, ":cur_target_party_template", ":giver_faction_no", slot_faction_deserter_party_template),
  18268. ## (faction_get_slot, ":cur_target_troop", ":giver_faction_no", slot_faction_deserter_troop),
  18269. ## (gt, ":cur_target_party_template", 0),#Skip factions with no deserter party templates
  18270. ## (store_num_parties_of_template, ":num_deserters", ":cur_target_party_template"),
  18271. ## (ge, ":num_deserters", 2),#Skip if there are less than 2 active deserter parties
  18272. ##
  18273. ## (assign, ":quest_target_troop", ":cur_target_troop"),
  18274. ## (assign, ":quest_target_party_template", ":cur_target_party_template"),
  18275. ## (assign, ":quest_target_amount", 5),
  18276. ## (assign, ":quest_importance", 1),
  18277. ## (assign, ":quest_xp_reward", 500),
  18278. ## (assign, ":quest_gold_reward", 300),
  18279. ## (assign, ":result", ":quest_no"),
  18280. ## (try_end),
  18281. ## (else_try),
  18282. ## (eq, ":quest_no", "qst_deliver_supply_to_center_under_siege"),
  18283. ## (try_begin),
  18284. ## (gt, ":player_level", 10),
  18285. ## (gt, ":giver_center_no", 0),#Skip if lord is outside the center
  18286. ## (call_script, "script_cf_get_random_siege_location_with_faction", ":giver_faction_no"),#Can fail
  18287. ## (assign, ":quest_target_center", reg0),
  18288. ## (assign, ":quest_target_amount", 10),
  18289. ## (assign, ":quest_importance", 1),
  18290. ## (assign, ":quest_xp_reward", 500),
  18291. ## (assign, ":quest_gold_reward", 300),
  18292. ## (assign, ":result", ":quest_no"),
  18293. ## (try_end),
  18294. ## (else_try),
  18295. ## (eq, ":quest_no", "qst_rescue_lady_under_siege"),
  18296. ## (try_begin),
  18297. ## (gt, ":player_level", 15),
  18298. ## (troop_get_slot, ":cur_object_troop", ":giver_troop", slot_troop_daughter),
  18299. ## (store_random_in_range, ":random_no", 0, 2),
  18300. ## (try_begin),
  18301. ## (this_or_next|eq, ":cur_object_troop", 0),
  18302. ## (eq, ":random_no", 0),
  18303. ## (troop_get_slot, ":cur_object_troop_2", ":giver_troop", slot_troop_spouse),
  18304. ## (gt, ":cur_object_troop_2", 0),
  18305. ## (assign, ":cur_object_troop", ":cur_object_troop_2"),
  18306. ## (try_end),
  18307. ## (gt, ":cur_object_troop", 0),#Skip lords without a lady
  18308. ## (troop_get_type, ":cur_troop_gender", ":cur_object_troop"),
  18309. ## (eq, ":cur_troop_gender", 1),#Skip if lady is not female
  18310. ## (troop_get_slot, ":cur_target_center", ":cur_object_troop", slot_troop_cur_center),
  18311. ## (is_between, ":cur_target_center", centers_begin, centers_end),#Skip if she is not in a center
  18312. ## (neq,":giver_center_no", ":cur_target_center"),#Skip current center
  18313. ## (call_script, "script_cf_get_random_siege_location_with_faction", ":giver_faction_no"),#Can fail
  18314. ## (assign, ":cur_target_center", reg0),
  18315. ## (troop_set_slot, ":cur_object_troop", slot_troop_cur_center, ":cur_target_center"),#Move lady to the siege location
  18316. ## (assign, ":quest_object_troop", ":cur_object_troop"),
  18317. ## (assign, ":quest_target_center", ":cur_target_center"),
  18318. ## (assign, ":quest_target_troop", ":giver_troop"),
  18319. ## (assign, ":quest_importance", 1),
  18320. ## (assign, ":quest_xp_reward", 200),
  18321. ## (assign, ":quest_gold_reward", 750),
  18322. ## (assign, ":result", ":quest_no"),
  18323. ## (try_end),
  18324. ## (else_try),
  18325. ## (eq, ":quest_no", "qst_deliver_message_to_lover"),
  18326. ## (try_begin),
  18327. ## (is_between, ":player_level", 5, 30),
  18328. ## (troop_get_slot, ":cur_target_troop", ":giver_troop", slot_troop_lover),
  18329. ## (gt, ":cur_target_troop", 0),#Skip lords without a lover
  18330. ## (troop_get_slot, ":cur_target_center", ":cur_target_troop", slot_troop_cur_center),
  18331. ## (is_between, ":cur_target_center", centers_begin, centers_end),#Skip if she is not in a center
  18332. ## (neq,":giver_center_no", ":cur_target_center"),#Skip current center
  18333. ## (assign, ":quest_target_troop", ":cur_target_troop"),
  18334. ## (assign, ":quest_target_center", ":cur_target_center"),
  18335. ## (assign, ":result", ":quest_no"),
  18336. ## (try_end),
  18337. ## (else_try),
  18338. ## (eq, ":quest_no", "qst_bring_reinforcements_to_siege"),
  18339. ## (try_begin),
  18340. ## (gt, ":player_level", 10),
  18341. ## (call_script, "script_cf_get_random_siege_location_with_attacker_faction", ":giver_faction_no"),#Can fail
  18342. ## (assign, ":cur_target_center", reg0),
  18343. ## (store_random_in_range, ":random_no", 5, 11),
  18344. ## (troops_can_join, ":random_no"),#Skip if the player doesn't have enough room
  18345. ## (call_script, "script_cf_get_number_of_random_troops_from_party", ":giver_party_no", ":random_no"),#Can fail
  18346. ## (assign, ":cur_object_troop", reg0),
  18347. ## (party_get_battle_opponent, ":cur_target_party", ":cur_target_center"),
  18348. ## (party_get_num_companion_stacks, ":num_stacks", ":cur_target_party"),
  18349. ## (gt, ":num_stacks", 0),#Skip if the besieger party has no troops
  18350. ## (party_stack_get_troop_id, ":cur_target_troop", ":cur_target_party", 0),
  18351. ## (troop_is_hero, ":cur_target_troop"),#Skip if the besieger party has no heroes
  18352. ## (neq, ":cur_target_troop", ":giver_troop"),#Skip if the quest giver is the same troop
  18353. ## (assign, ":quest_target_troop", ":cur_target_troop"),
  18354. ## (assign, ":quest_object_troop", ":cur_object_troop"),
  18355. ## (assign, ":quest_target_party", ":cur_target_party"),
  18356. ## (assign, ":quest_target_center", ":cur_target_center"),
  18357. ## (assign, ":quest_target_amount", ":random_no"),
  18358. ## (assign, ":quest_importance", 1),
  18359. ## (assign, ":quest_xp_reward", 400),
  18360. ## (assign, ":quest_gold_reward", 200),
  18361. ## (assign, ":result", ":quest_no"),
  18362. ## (try_end),
  18363. (else_try),
  18364. (eq, ":quest_no", "qst_deliver_message_to_enemy_lord"),
  18365. (try_begin),
  18366. (ge, "$g_talk_troop_faction_relation", 0),
  18367. (is_between, ":player_level", 5,25),
  18368. (call_script, "script_cf_get_random_lord_from_another_faction_in_a_center", ":giver_faction_no"),#Can fail
  18369. (assign, ":cur_target_troop", reg0),
  18370. (call_script, "script_get_troop_attached_party", ":cur_target_troop"),
  18371. (assign, ":quest_target_center", reg0),#quest_target_center will definitely be a valid center
  18372. (assign, ":quest_target_troop", ":cur_target_troop"),
  18373. (assign, ":quest_importance", 1),
  18374. (assign, ":quest_xp_reward", 200),
  18375. (assign, ":quest_gold_reward", 0),
  18376. (assign, ":result", ":quest_no"),
  18377. (assign, ":quest_expiration_days", 40),
  18378. (try_end),
  18379. ## (else_try),
  18380. ## (eq, ":quest_no", "qst_bring_prisoners_to_enemy"),
  18381. ## (try_begin),
  18382. ## (gt, ":player_level", 10),
  18383. ## (is_between, ":giver_center_no", centers_begin, centers_end),#Skip if the quest giver is not at a center
  18384. ## (store_random_in_range, ":random_no", 5, 11),
  18385. ## (troops_can_join_as_prisoner, ":random_no"),#Skip if the player doesn't have enough room
  18386. ## (call_script, "script_get_random_enemy_town", ":giver_center_no"),
  18387. ## (assign, ":cur_target_center", reg0),
  18388. ## (ge, ":cur_target_center", 0),#Skip if there are no enemy towns
  18389. ## (store_faction_of_party, ":cur_target_faction", ":cur_target_center"),
  18390. ## (faction_get_slot, ":cur_object_troop", ":cur_target_faction", slot_faction_tier_5_troop),
  18391. ## (assign, ":quest_target_center", ":cur_target_center"),
  18392. ## (assign, ":quest_object_troop", ":cur_object_troop"),
  18393. ## (assign, ":quest_target_amount", ":random_no"),
  18394. ## (assign, ":quest_importance", 1),
  18395. ## (assign, ":quest_xp_reward", 300),
  18396. ## (assign, ":quest_gold_reward", 200),
  18397. ## (assign, ":result", ":quest_no"),
  18398. ## (try_end),
  18399. (else_try),
  18400. (eq, ":quest_no", "qst_deal_with_bandits_at_lords_village"),
  18401. (try_begin),
  18402. (neq, ":giver_reputation", lrep_debauched),
  18403. (neq, ":giver_reputation", lrep_quarrelsome),
  18404. (ge, "$g_talk_troop_faction_relation", 0),
  18405. (assign, ":end_cond", villages_end),
  18406. (assign, ":cur_target_center", -1),
  18407. (try_for_range, ":cur_village", villages_begin, ":end_cond"),
  18408. (party_slot_eq, ":cur_village", slot_town_lord, ":giver_troop"),
  18409. (party_slot_eq, ":cur_village", slot_village_infested_by_bandits, 1),
  18410. (party_slot_eq, ":cur_village", slot_village_state, svs_normal),
  18411. (assign, ":cur_target_center", ":cur_village"),
  18412. (assign, ":end_cond", 0),
  18413. (try_end),
  18414. (ge, ":cur_target_center", 0),
  18415. (neg|check_quest_active, "qst_eliminate_bandits_infesting_village"),
  18416. (assign, ":quest_target_center", ":cur_target_center"),
  18417. (assign, ":result", ":quest_no"),
  18418. (assign, ":quest_expiration_days", 30),
  18419. (try_end),
  18420. (else_try),
  18421. (eq, ":quest_no", "qst_raise_troops"),
  18422. (try_begin),
  18423. (neq, ":giver_reputation", lrep_martial),
  18424. (neq, ":giver_faction_no", "fac_player_supporters_faction"), #we need tier_1_troop a valid value
  18425. (ge, "$g_talk_troop_faction_relation", 0),
  18426. (store_character_level, ":cur_level", "trp_player"),
  18427. (gt, ":cur_level", 5),
  18428. (troop_slot_ge, "trp_player", slot_troop_renown, 100),
  18429.  
  18430. (store_random_in_range, ":quest_target_amount", 5, 8),
  18431. (party_get_free_companions_capacity, ":free_capacity", "p_main_party"),
  18432. (le, ":quest_target_amount", ":free_capacity"),
  18433. (faction_get_slot, ":quest_object_troop", ":giver_faction_no", slot_faction_tier_1_troop),
  18434. (store_random_in_range, ":level_up", 20, 40),
  18435. (val_add, ":level_up", ":cur_level"),
  18436. (val_div, ":level_up", 10),
  18437.  
  18438. (store_mul, ":quest_gold_reward", ":quest_target_amount", 10),
  18439.  
  18440. (assign, ":quest_target_troop", ":quest_object_troop"),
  18441. (try_for_range, ":unused", 0, ":level_up"),
  18442. (troop_get_upgrade_troop, ":level_up_troop", ":quest_target_troop", 0),
  18443. (gt, ":level_up_troop", 0),
  18444. (assign, ":quest_target_troop", ":level_up_troop"),
  18445. (val_mul, ":quest_gold_reward", ":quest_gold_reward", 7),
  18446. (val_div, ":quest_gold_reward", ":quest_gold_reward", 4),
  18447. (try_end),
  18448.  
  18449. (assign, ":quest_xp_reward", ":quest_gold_reward"),
  18450. (val_mul, ":quest_xp_reward", 3),
  18451. (val_div, ":quest_xp_reward", 10),
  18452. (assign, ":result", ":quest_no"),
  18453. (assign, ":quest_expiration_days", 120),
  18454. (assign, ":quest_dont_give_again_period", 15),
  18455. (try_end),
  18456. (else_try),
  18457. (eq, ":quest_no", "qst_collect_taxes"),
  18458. (eq, "$player_has_homage", 0),
  18459.  
  18460. (try_begin),
  18461. (neq, ":giver_reputation", lrep_goodnatured),
  18462. (neq, ":giver_reputation", lrep_upstanding),
  18463. (ge, "$g_talk_troop_faction_relation", 0),
  18464. (call_script, "script_cf_troop_get_random_leaded_town_or_village_except_center", ":giver_troop", ":giver_center_no"),
  18465. (assign, ":quest_target_center", reg0),
  18466. (assign, ":quest_importance", 1),
  18467. (assign, ":quest_gold_reward", 0),
  18468. (assign, ":quest_xp_reward", 100),
  18469. (assign, ":result", ":quest_no"),
  18470. (assign, ":quest_expiration_days", 50),
  18471. (assign, ":quest_dont_give_again_period", 20),
  18472. (try_end),
  18473. (else_try),
  18474. (eq, ":quest_no", "qst_hunt_down_fugitive"),
  18475. (try_begin),
  18476. (ge, "$g_talk_troop_faction_relation", 0),
  18477. (call_script, "script_cf_select_random_village_with_faction", ":giver_faction_no"),
  18478. (assign, ":quest_target_center", reg0),
  18479. (store_random_in_range, ":quest_target_dna", 0, 1000000),
  18480. (assign, ":result", ":quest_no"),
  18481. (assign, ":quest_expiration_days", 30),
  18482. (assign, ":quest_dont_give_again_period", 30),
  18483. (try_end),
  18484. ## (else_try),
  18485. ## (eq, ":quest_no", "qst_capture_messenger"),
  18486. ## (try_begin),
  18487. ## (call_script, "script_cf_faction_get_random_enemy_faction", ":giver_faction_no"),
  18488. ## (assign, ":cur_target_faction", reg0),
  18489. ## (faction_get_slot, ":cur_target_troop", ":cur_target_faction", slot_faction_messenger_troop),
  18490. ## (gt, ":cur_target_troop", 0),#Checking the validiy of cur_target_troop
  18491. ## (store_num_parties_destroyed_by_player, ":quest_target_amount", "pt_messenger_party"),
  18492. ##
  18493. ## (assign, ":quest_target_troop", ":cur_target_troop"),
  18494. ## (assign, ":quest_target_party_template", ":cur_target_party_template"),
  18495. ## (assign, ":quest_importance", 1),
  18496. ## (assign, ":quest_xp_reward", 700),
  18497. ## (assign, ":quest_gold_reward", 400),
  18498. ## (assign, ":result", ":quest_no"),
  18499. ## (try_end),
  18500. (else_try),
  18501. (eq, ":quest_no", "qst_kill_local_merchant"),
  18502. (eq, "$player_has_homage", 0),
  18503.  
  18504. (try_begin),
  18505. (this_or_next|eq, ":giver_reputation", lrep_quarrelsome),
  18506. (this_or_next|eq, ":giver_reputation", lrep_cunning),
  18507. ( eq, ":giver_reputation", lrep_debauched),
  18508. (neg|faction_slot_eq, ":giver_faction_no", slot_faction_leader, ":giver_troop"),#Can not take the quest from the king
  18509. (ge, "$g_talk_troop_faction_relation", 0),
  18510. (gt, ":player_level", 5),
  18511. (is_between, ":giver_center_no", towns_begin, towns_end),
  18512. (assign, ":quest_importance", 1),
  18513. (assign, ":quest_xp_reward", 300),
  18514. (assign, ":quest_gold_reward", 1000),
  18515. (assign, ":result", ":quest_no"),
  18516. (assign, ":quest_expiration_days", 10),
  18517. (assign, ":quest_dont_give_again_period", 30),
  18518. (try_end),
  18519. (else_try),
  18520. (eq, ":quest_no", "qst_bring_back_runaway_serfs"),
  18521. (try_begin),
  18522. (neq, ":giver_reputation", lrep_goodnatured),
  18523. (neq, ":giver_reputation", lrep_upstanding),
  18524. (ge, "$g_talk_troop_faction_relation", 0),
  18525. (ge, ":player_level", 5),
  18526. (gt, ":giver_center_no", 0),#Skip if lord is outside the center
  18527. (eq, "$g_defending_against_siege", 0),#Skip if the center is under siege (because of resting)
  18528.  
  18529. (assign, ":cur_object_center", -1),
  18530. (try_for_range, ":cur_village", villages_begin, villages_end),
  18531. (party_slot_eq, ":cur_village", slot_town_lord, ":giver_troop"),
  18532. (store_distance_to_party_from_party, ":dist", ":cur_village", ":giver_center_no"),
  18533. (lt, ":dist", 25),
  18534. (assign, ":cur_object_center", ":cur_village"),
  18535. (try_end),
  18536. (ge, ":cur_object_center", 0),#Skip if the quest giver is not the owner of any villages around the center
  18537. (call_script, "script_cf_select_random_town_with_faction", ":giver_faction_no"),
  18538. (assign, ":cur_target_center", reg0),
  18539. (neq, ":cur_target_center", ":giver_center_no"),#Skip current center
  18540. (store_distance_to_party_from_party, ":dist", ":cur_target_center", ":giver_center_no"),
  18541. (ge, ":dist", 20),
  18542. (assign, ":quest_target_party_template", "pt_runaway_serfs"),
  18543. (assign, ":quest_object_center", ":cur_object_center"),
  18544. (assign, ":quest_target_center", ":cur_target_center"),
  18545. (assign, ":quest_importance", 1),
  18546. (assign, ":quest_xp_reward", 200),
  18547. (assign, ":quest_gold_reward", 150),
  18548. (assign, ":result", ":quest_no"),
  18549. (assign, ":quest_expiration_days", 30),
  18550. (assign, ":quest_dont_give_again_period", 20),
  18551. (assign, "$qst_bring_back_runaway_serfs_num_parties_returned", 0),
  18552. (assign, "$qst_bring_back_runaway_serfs_num_parties_fleed", 0),
  18553. (try_end),
  18554. (else_try),
  18555. (eq, ":quest_no", "qst_follow_spy"),
  18556. (eq, "$player_has_homage", 0),
  18557.  
  18558. (try_begin),
  18559. (ge, "$g_talk_troop_faction_relation", 0),
  18560. (neq, ":giver_reputation", lrep_goodnatured),
  18561. (party_get_skill_level, ":tracking_skill", "p_main_party", "skl_tracking"),
  18562. (ge, ":tracking_skill", 2),
  18563. (ge, ":player_level", 10),
  18564. (eq, "$g_defending_against_siege", 0), #Skip if the center is under siege (because of resting)
  18565. (gt, ":giver_party_no", 0), #Skip if the quest giver doesn't have a party
  18566. (gt, ":giver_center_no", 0), #skip if the quest giver is not in a center
  18567. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_town), #skip if we are not in a town.
  18568. (party_get_position, pos2, "p_main_party"),
  18569. (assign, ":min_distance", 99999),
  18570. (assign, ":cur_object_center", -1),
  18571. (try_for_range, ":unused_2", 0, 10),
  18572. (call_script, "script_cf_get_random_enemy_center", ":giver_party_no"),
  18573. (assign, ":random_object_center", reg0),
  18574. (party_get_position, pos3, ":random_object_center"),
  18575. (map_get_random_position_around_position, pos4, pos3, 6),
  18576. (get_distance_between_positions, ":cur_distance", pos2, pos4),
  18577. (lt, ":cur_distance", ":min_distance"),
  18578. (assign, ":min_distance", ":cur_distance"),
  18579. (assign, ":cur_object_center", ":random_object_center"),
  18580. (copy_position, pos63, pos4), #Do not change pos63 until quest is accepted
  18581. (try_end),
  18582. (gt, ":cur_object_center", 0), #Skip if there are no enemy centers
  18583.  
  18584. (assign, ":quest_object_center", ":cur_object_center"),
  18585. (assign, ":quest_dont_give_again_period", 50),
  18586. (assign, ":result", ":quest_no"),
  18587. (assign, "$qst_follow_spy_run_away", 0),
  18588. (assign, "$qst_follow_spy_meeting_state", 0),
  18589. (assign, "$qst_follow_spy_meeting_counter", 0),
  18590. (assign, "$qst_follow_spy_spy_back_in_town", 0),
  18591. (assign, "$qst_follow_spy_partner_back_in_town", 0),
  18592. (assign, "$qst_follow_spy_no_active_parties", 0),
  18593. (try_end),
  18594. (else_try),
  18595. (eq, ":quest_no", "qst_capture_enemy_hero"),
  18596. (try_begin),
  18597. (eq, "$players_kingdom", ":giver_faction_no"),
  18598. (neg|faction_slot_eq, "$players_kingdom", slot_faction_marshall, "trp_player"),
  18599. (ge, ":player_level", 15),
  18600. (call_script, "script_cf_faction_get_random_enemy_faction", ":giver_faction_no"),#Can fail
  18601. (assign, ":quest_target_faction", reg0),
  18602. (assign, ":quest_expiration_days", 30),
  18603. (assign, ":quest_dont_give_again_period", 80),
  18604. (assign, ":quest_gold_reward", 2000),
  18605. (assign, ":result", ":quest_no"),
  18606. (try_end),
  18607. (else_try),
  18608. (eq, ":quest_no", "qst_lend_companion"),
  18609. (try_begin),
  18610. (ge, "$g_talk_troop_faction_relation", 0),
  18611. (assign, ":total_heroes", 0),
  18612. (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),
  18613. (try_for_range, ":i_stack", 0, ":num_stacks"),
  18614. (party_stack_get_troop_id, ":stack_troop","p_main_party",":i_stack"),
  18615. (troop_is_hero, ":stack_troop"),
  18616. (is_between, ":stack_troop", companions_begin, companions_end),
  18617. (store_character_level, ":stack_level", ":stack_troop"),
  18618. (ge, ":stack_level", 15),
  18619. (assign, ":is_quest_hero", 0),
  18620. (try_for_range, ":i_quest", 0, all_quests_end),
  18621. (check_quest_active, ":i_quest"),
  18622. (this_or_next|quest_slot_eq, ":i_quest", slot_quest_target_troop, ":stack_troop"),
  18623. (quest_slot_eq, ":i_quest", slot_quest_object_troop, ":stack_troop"),
  18624. (assign, ":is_quest_hero", 1),
  18625. (try_end),
  18626. (eq, ":is_quest_hero", 0),
  18627. (val_add, ":total_heroes", 1),
  18628. (try_end),
  18629. (gt, ":total_heroes", 0),#Skip if party has no eligible heroes
  18630. (store_random_in_range, ":random_hero", 0, ":total_heroes"),
  18631. (assign, ":total_heroes", 0),
  18632. (assign, ":cur_target_troop", -1),
  18633. (try_for_range, ":i_stack", 0, ":num_stacks"),
  18634. (eq, ":cur_target_troop", -1),
  18635. (party_stack_get_troop_id, ":stack_troop","p_main_party",":i_stack"),
  18636. (troop_is_hero, ":stack_troop"),
  18637. (is_between, ":stack_troop", companions_begin, companions_end),
  18638. (neq, ":stack_troop", "trp_player"),
  18639. (store_character_level, ":stack_level", ":stack_troop"),
  18640. (ge, ":stack_level", 15),
  18641. (assign, ":is_quest_hero", 0),
  18642. (try_for_range, ":i_quest", 0, all_quests_end),
  18643. (check_quest_active, ":i_quest"),
  18644. (this_or_next|quest_slot_eq, ":i_quest", slot_quest_target_troop, ":stack_troop"),
  18645. (quest_slot_eq, ":i_quest", slot_quest_object_troop, ":stack_troop"),
  18646. (assign, ":is_quest_hero", 1),
  18647. (try_end),
  18648. (eq, ":is_quest_hero", 0),
  18649. (val_add, ":total_heroes", 1),
  18650. (gt, ":total_heroes", ":random_hero"),
  18651. (assign, ":cur_target_troop", ":stack_troop"),
  18652. (try_end),
  18653. (is_between, ":cur_target_troop", companions_begin, companions_end),
  18654.  
  18655. (assign, ":quest_target_troop", ":cur_target_troop"),
  18656. (store_current_day, ":quest_target_amount"),
  18657. (val_add, ":quest_target_amount", 8),
  18658.  
  18659. (assign, ":quest_importance", 1),
  18660. (assign, ":quest_xp_reward", 300),
  18661. (assign, ":quest_gold_reward", 400),
  18662. (assign, ":result", ":quest_no"),
  18663. (assign, ":quest_dont_give_again_period", 30),
  18664. (try_end),
  18665. (else_try),
  18666. (eq, ":quest_no", "qst_collect_debt"),
  18667. (eq, 1, 0), #disable this quest pending talk with armagan
  18668. (try_begin),
  18669. (ge, "$g_talk_troop_faction_relation", 0),
  18670. # Find a vassal (within the same kingdom?)
  18671. (call_script, "script_cf_get_random_lord_in_a_center_with_faction", ":giver_faction_no"),#Can fail
  18672. (assign, ":quest_target_troop", reg0),
  18673. (neq, ":quest_target_troop", ":giver_troop"),#Skip himself
  18674. (call_script, "script_get_troop_attached_party", ":quest_target_troop"),
  18675. (assign, ":quest_target_center", reg0),#cur_target_center will definitely be a valid center
  18676. (neq,":giver_center_no", ":quest_target_center"),#Skip current center
  18677.  
  18678. (assign, ":quest_xp_reward", 30),
  18679. (assign, ":quest_gold_reward", 40),
  18680. (assign, ":result", ":quest_no"),
  18681. (store_random_in_range, ":quest_target_amount", 6, 9),
  18682. (val_mul, ":quest_target_amount", 500),
  18683. (store_div, ":quest_convince_value", ":quest_target_amount", 5),
  18684. (assign, ":quest_expiration_days", 90),
  18685. (assign, ":quest_dont_give_again_period", 20),
  18686. (try_end),
  18687. ## (else_try),
  18688. ## (eq, ":quest_no", "qst_capture_conspirators"),
  18689. ## (try_begin),
  18690. ## (eq, 1,0), #TODO: disable this for now
  18691. ## (ge, ":player_level", 10),
  18692. ## (is_between, ":giver_center_no", towns_begin, towns_end),#Skip if quest giver's center is not a town
  18693. ## (party_slot_eq, ":giver_center_no", slot_town_lord, ":giver_troop"),#Skip if the current center is not ruled by the quest giver
  18694. ## (call_script, "script_cf_get_random_kingdom_hero", ":giver_faction_no"),#Can fail
  18695. ##
  18696. ## (assign, ":quest_target_troop", reg0),
  18697. ## (assign, ":quest_target_center", ":giver_center_no"),
  18698. ## (assign, ":quest_importance", 1),
  18699. ## (assign, ":quest_xp_reward", 10),
  18700. ## (assign, ":quest_gold_reward", 10),
  18701. ## (assign, ":result", ":quest_no"),
  18702. ## (store_character_level, ":cur_level"),
  18703. ## (val_div, ":cur_level", 5),
  18704. ## (val_max, ":cur_level", 3),
  18705. ## (store_add, ":max_parties", 4, ":cur_level"),
  18706. ## (store_random_in_range, "$qst_capture_conspirators_num_parties_to_spawn", 4, ":max_parties"),
  18707. ## (assign, "$qst_capture_conspirators_num_troops_to_capture", 0),
  18708. ## (assign, "$qst_capture_conspirators_num_parties_spawned", 0),
  18709. ## (assign, "$qst_capture_conspirators_leave_meeting_counter", 0),
  18710. ## (assign, "$qst_capture_conspirators_party_1", 0),
  18711. ## (assign, "$qst_capture_conspirators_party_2", 0),
  18712. ## (assign, "$qst_capture_conspirators_party_3", 0),
  18713. ## (assign, "$qst_capture_conspirators_party_4", 0),
  18714. ## (assign, "$qst_capture_conspirators_party_5", 0),
  18715. ## (assign, "$qst_capture_conspirators_party_6", 0),
  18716. ## (assign, "$qst_capture_conspirators_party_7", 0),
  18717. ## (try_end),
  18718. ## (else_try),
  18719. ## (eq, ":quest_no", "qst_defend_nobles_against_peasants"),
  18720. ## (try_begin),
  18721. ## (eq, 1,0), #TODO: disable this for now
  18722. ## (ge, ":player_level", 10),
  18723. ## (is_between, ":giver_center_no", towns_begin, towns_end),#Skip if quest giver's center is not a town
  18724. ## (party_slot_eq, ":giver_center_no", slot_town_lord, ":giver_troop"),#Skip if the current center is not ruled by the quest giver
  18725. ##
  18726. ## (assign, ":quest_target_center", ":giver_center_no"),
  18727. ## (assign, ":quest_importance", 1),
  18728. ## (assign, ":quest_xp_reward", 10),
  18729. ## (assign, ":quest_gold_reward", 10),
  18730. ## (assign, ":result", ":quest_no"),
  18731. ## (store_character_level, ":cur_level"),
  18732. ## (val_div, ":cur_level", 5),
  18733. ## (val_max, ":cur_level", 4),
  18734. ## (store_add, ":max_parties", 4, ":cur_level"),
  18735. ## (store_random_in_range, "$qst_defend_nobles_against_peasants_num_peasant_parties_to_spawn", 4, ":cur_level"),
  18736. ## (store_random_in_range, "$qst_defend_nobles_against_peasants_num_noble_parties_to_spawn", 4, ":cur_level"),
  18737. ## (assign, "$qst_defend_nobles_against_peasants_num_nobles_to_save", 0),
  18738. ## (assign, "$qst_defend_nobles_against_peasants_num_nobles_saved", 0),
  18739. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_1", 0),
  18740. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_2", 0),
  18741. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_3", 0),
  18742. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_4", 0),
  18743. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_5", 0),
  18744. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_6", 0),
  18745. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_7", 0),
  18746. ## (assign, "$qst_defend_nobles_against_peasants_peasant_party_8", 0),
  18747. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_1", 0),
  18748. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_2", 0),
  18749. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_3", 0),
  18750. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_4", 0),
  18751. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_5", 0),
  18752. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_6", 0),
  18753. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_7", 0),
  18754. ## (assign, "$qst_defend_nobles_against_peasants_noble_party_8", 0),
  18755. ## (try_end),
  18756. (else_try),
  18757. (eq, ":quest_no", "qst_incriminate_loyal_commander"),
  18758. (eq, "$player_has_homage", 0),
  18759.  
  18760. (try_begin),
  18761. (neq, ":giver_reputation", lrep_upstanding),
  18762. (neq, ":giver_reputation", lrep_goodnatured),
  18763. (eq, "$players_kingdom", ":giver_faction_no"),
  18764. (ge, ":player_level", 10),
  18765. (faction_slot_eq, ":giver_faction_no", slot_faction_leader, ":giver_troop"),
  18766. (assign, ":try_times", 1),
  18767. (assign, ":found", 0),
  18768. (try_for_range, ":unused", 0, ":try_times"),
  18769. (call_script, "script_cf_faction_get_random_enemy_faction", ":giver_faction_no"),#Can fail
  18770. (assign, ":cur_target_faction", reg0),
  18771.  
  18772. (faction_get_slot, ":cur_target_troop", ":cur_target_faction", slot_faction_leader),
  18773. (assign, ":num_centerless_heroes", 0),
  18774. (try_for_range, ":cur_kingdom_hero", active_npcs_begin, active_npcs_end),
  18775. (troop_slot_eq, ":cur_kingdom_hero", slot_troop_occupation, slto_kingdom_hero),
  18776. #(troop_slot_eq, ":cur_kingdom_hero", slot_troop_is_prisoner, 0),
  18777. (neg|troop_slot_ge, ":cur_kingdom_hero", slot_troop_prisoner_of_party, 0),
  18778. (neq, ":cur_target_troop", ":cur_kingdom_hero"),
  18779. (store_troop_faction, ":cur_kingdom_hero_faction", ":cur_kingdom_hero"),
  18780. (eq, ":cur_target_faction", ":cur_kingdom_hero_faction"),
  18781. ## (call_script, "script_get_number_of_hero_centers", ":cur_kingdom_hero"),
  18782. ## (eq, reg0, 0),
  18783. (val_add, ":num_centerless_heroes", 1),
  18784. (try_end),
  18785. (gt, ":num_centerless_heroes", 0),
  18786. (assign, ":cur_object_troop", -1),
  18787. (store_random_in_range, ":random_kingdom_hero", 0, ":num_centerless_heroes"),
  18788. (try_for_range, ":cur_kingdom_hero", active_npcs_begin, active_npcs_end),
  18789. (eq, ":cur_object_troop", -1),
  18790. (troop_slot_eq, ":cur_kingdom_hero", slot_troop_occupation, slto_kingdom_hero),
  18791. (neq, ":cur_target_troop", ":cur_kingdom_hero"),
  18792. (store_troop_faction, ":cur_kingdom_hero_faction", ":cur_kingdom_hero"),
  18793. (eq, ":cur_target_faction", ":cur_kingdom_hero_faction"),
  18794. ## (call_script, "script_get_number_of_hero_centers", ":cur_kingdom_hero"),
  18795. ## (eq, reg0, 0),
  18796. (val_sub, ":random_kingdom_hero", 1),
  18797. (lt, ":random_kingdom_hero", 0),
  18798. (assign, ":cur_object_troop", ":cur_kingdom_hero"),
  18799. (try_end),
  18800.  
  18801. (assign, ":cur_target_center", -1),
  18802. (call_script, "script_get_troop_attached_party", ":cur_target_troop"),
  18803. (is_between, reg0, towns_begin, towns_end),
  18804. (party_slot_eq, reg0, slot_town_lord, ":cur_target_troop"),
  18805. (assign, ":cur_target_center", reg0),
  18806.  
  18807. (assign, ":try_times", -1),#Exit the second loop
  18808. (assign, ":found", 1),
  18809. (try_end),
  18810. (eq, ":found", 1),
  18811.  
  18812. (assign, "$incriminate_quest_sacrificed_troop", 0),
  18813.  
  18814. (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),
  18815. (try_for_range, ":i_stack", 1, ":num_stacks"),
  18816. (eq ,"$incriminate_quest_sacrificed_troop", 0),
  18817. (party_stack_get_troop_id, ":stack_troop","p_main_party",":i_stack"),
  18818. (neg|troop_is_hero, ":stack_troop"),
  18819. (store_character_level, ":stack_troop_level", ":stack_troop"),
  18820. (ge, ":stack_troop_level", 25),
  18821. (assign, "$incriminate_quest_sacrificed_troop", ":stack_troop"),
  18822. (try_end),
  18823. (gt, "$incriminate_quest_sacrificed_troop", 0),
  18824.  
  18825. (assign, ":quest_target_troop", ":cur_target_troop"),
  18826. (assign, ":quest_object_troop", ":cur_object_troop"),
  18827. (assign, ":quest_target_center", ":cur_target_center"),
  18828. (assign, ":quest_target_faction", ":cur_target_faction"),
  18829.  
  18830. (assign, ":quest_importance", 1),
  18831. (assign, ":quest_xp_reward", 700),
  18832. (assign, ":quest_gold_reward", 1000),
  18833. (assign, ":result", ":quest_no"),
  18834. (assign, ":quest_expiration_days", 30),
  18835. (assign, ":quest_dont_give_again_period", 180),
  18836. (try_end),
  18837. (else_try),
  18838. (eq, ":quest_no", "qst_capture_prisoners"),
  18839. (eq, "$player_has_homage", 0),
  18840.  
  18841. (try_begin),
  18842. (eq, "$players_kingdom", ":giver_faction_no"),
  18843. (call_script, "script_cf_faction_get_random_enemy_faction", ":giver_faction_no"),#Can fail
  18844. (assign, ":cur_target_faction", reg0),
  18845. (store_add, ":max_tier_no", slot_faction_tier_5_troop, 1),
  18846. (store_random_in_range, ":random_tier_no", slot_faction_tier_2_troop, ":max_tier_no"),
  18847. (faction_get_slot, ":cur_target_troop", ":cur_target_faction", ":random_tier_no"),
  18848. (gt, ":cur_target_troop", 0),
  18849. (store_random_in_range, ":quest_target_amount", 3, 7),
  18850. (assign, ":quest_target_troop", ":cur_target_troop"),
  18851. (assign, ":quest_target_faction", ":cur_target_faction"),
  18852. (assign, ":quest_importance", 1),
  18853. (store_character_level, ":quest_gold_reward", ":cur_target_troop"),
  18854. (val_add, ":quest_gold_reward", 5),
  18855. (val_mul, ":quest_gold_reward", ":quest_gold_reward"),
  18856. (val_div, ":quest_gold_reward", 5),
  18857. (val_mul, ":quest_gold_reward", ":quest_target_amount"),
  18858. (assign, ":quest_xp_reward", ":quest_gold_reward"),
  18859. (assign, ":result", ":quest_no"),
  18860. (assign, ":quest_expiration_days", 90),
  18861. (assign, ":quest_dont_give_again_period", 20),
  18862. (try_end),
  18863. (try_end),
  18864. (try_end),
  18865. (try_end),
  18866. #end of quest finding
  18867.  
  18868.  
  18869. (try_begin),
  18870. (neq, ":result", -1),
  18871.  
  18872. (try_begin),
  18873. (party_is_active, ":quest_target_center"),
  18874. (store_faction_of_party, ":quest_target_faction", ":quest_target_center"),
  18875. (try_end),
  18876.  
  18877. (quest_set_slot, ":result", slot_quest_target_troop, ":quest_target_troop"),
  18878. (quest_set_slot, ":result", slot_quest_target_center, ":quest_target_center"),
  18879. (quest_set_slot, ":result", slot_quest_object_troop, ":quest_object_troop"),
  18880. (quest_set_slot, ":result", slot_quest_target_faction, ":quest_target_faction"),
  18881. (quest_set_slot, ":result", slot_quest_object_faction, ":quest_object_faction"),
  18882. (quest_set_slot, ":result", slot_quest_object_center, ":quest_object_center"),
  18883. (quest_set_slot, ":result", slot_quest_target_party, ":quest_target_party"),
  18884. (quest_set_slot, ":result", slot_quest_target_party_template, ":quest_target_party_template"),
  18885. (quest_set_slot, ":result", slot_quest_target_amount, ":quest_target_amount"),
  18886. (quest_set_slot, ":result", slot_quest_importance, ":quest_importance"),
  18887. (quest_set_slot, ":result", slot_quest_xp_reward, ":quest_xp_reward"),
  18888. (quest_set_slot, ":result", slot_quest_gold_reward, ":quest_gold_reward"),
  18889. (quest_set_slot, ":result", slot_quest_convince_value, ":quest_convince_value"),
  18890. (quest_set_slot, ":result", slot_quest_expiration_days, ":quest_expiration_days"),
  18891. (quest_set_slot, ":result", slot_quest_dont_give_again_period, ":quest_dont_give_again_period"),
  18892. (quest_set_slot, ":result", slot_quest_current_state, 0),
  18893. (quest_set_slot, ":result", slot_quest_giver_troop, ":giver_troop"),
  18894. (quest_set_slot, ":result", slot_quest_giver_center, ":giver_center_no"),
  18895. (quest_set_slot, ":result", slot_quest_target_dna, ":quest_target_dna"),
  18896. (quest_set_slot, ":result", slot_quest_target_item, ":quest_target_item"),
  18897. (try_end),
  18898.  
  18899. (assign, reg0, ":result"),
  18900. ]),
  18901.  
  18902. ("get_dynamic_quest",
  18903. #Dynamic quests are rarer, more important quests
  18904. #this is a separate script from get_quest, so that tavern keepers can scan all NPCs for quests
  18905. [
  18906. (store_script_param_1, ":giver_troop"),
  18907.  
  18908. (assign, ":result", -1),
  18909. (assign, ":relevant_troop", -1),
  18910. (assign, ":relevant_party", -1),
  18911. (assign, ":relevant_faction", -1),
  18912.  
  18913. (try_begin),
  18914. (eq, ":giver_troop", -1),
  18915.  
  18916. (else_try),
  18917. #1 rescue prisoner
  18918. (neg|check_quest_active, "qst_rescue_prisoner"),
  18919. (this_or_next|troop_slot_eq, ":giver_troop", slot_troop_occupation, slto_kingdom_hero),
  18920. (troop_slot_eq, ":giver_troop", slot_troop_occupation, slto_kingdom_lady),
  18921.  
  18922. (assign, ":target_troop", -1),
  18923. (try_for_range, ":possible_prisoner", active_npcs_begin, active_npcs_end),
  18924. (troop_get_slot, ":captor_location", ":possible_prisoner", slot_troop_prisoner_of_party),
  18925. (is_between, ":captor_location", walled_centers_begin, walled_centers_end),
  18926. (store_troop_faction, ":giver_troop_faction_no", ":giver_troop"),
  18927. (store_faction_of_party, ":captor_location_faction_no", ":captor_location"),
  18928. (store_relation, ":giver_captor_relation", ":giver_troop_faction_no", ":captor_location_faction_no"),
  18929. (lt, ":giver_captor_relation", 0),
  18930.  
  18931. (call_script, "script_troop_get_family_relation_to_troop", ":giver_troop", ":possible_prisoner"),
  18932. (ge, reg0, 10),
  18933.  
  18934. (assign, ":offered_parole", 0),
  18935. (try_begin),
  18936. (call_script, "script_cf_prisoner_offered_parole", ":possible_prisoner"),
  18937. (assign, ":offered_parole", 1),
  18938. (try_end),
  18939. (eq, ":offered_parole", 0),
  18940.  
  18941. (neg|party_slot_eq, ":captor_location", slot_town_lord, "trp_player"),
  18942.  
  18943. (assign, ":target_troop", ":possible_prisoner"),
  18944. (assign, ":target_party", ":captor_location"),
  18945. (try_end),
  18946.  
  18947. (gt, ":target_troop", -1),
  18948. (assign, ":result", "qst_rescue_prisoner"),
  18949. (assign, ":relevant_troop", ":target_troop"),
  18950. (assign, ":relevant_party", ":target_party"),
  18951.  
  18952. (else_try),
  18953. #2 retaliate for border incident
  18954. (is_between, ":giver_troop", mayors_begin, mayors_end),
  18955. (store_faction_of_troop, ":giver_faction", ":giver_troop"),
  18956.  
  18957. (neg|check_quest_active, "qst_retaliate_for_border_incident"),
  18958. (quest_slot_eq, "qst_retaliate_for_border_incident", slot_quest_dont_give_again_remaining_days, 0),
  18959. (assign, ":target_leader", 0),
  18960.  
  18961. (try_for_range, ":kingdom", "fac_kingdom_1", kingdoms_end),
  18962. (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":giver_faction", ":kingdom"),
  18963. (assign, ":diplomatic_status", reg0),
  18964. (eq, ":diplomatic_status", -1),
  18965. (assign, ":duration", reg1),
  18966. (ge, ":duration", 10),
  18967.  
  18968.  
  18969. (try_for_range, ":lord", active_npcs_begin, active_npcs_end),
  18970. (store_faction_of_troop, ":lord_faction", ":lord"),
  18971. (eq, ":lord_faction", ":kingdom"),
  18972.  
  18973. (troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_debauched),
  18974.  
  18975. (assign, ":target_leader", ":lord"),
  18976. (assign, ":target_faction", ":kingdom"),
  18977. (try_end),
  18978. (try_end),
  18979. (is_between, ":target_leader", active_npcs_begin, active_npcs_end),
  18980.  
  18981. (assign, ":result", "qst_retaliate_for_border_incident"),
  18982. (assign, ":relevant_troop", ":target_leader"),
  18983. (assign, ":relevant_faction", ":target_faction"),
  18984. (else_try), #Find bandit hideout
  18985. (troop_slot_eq, ":giver_troop", slot_troop_occupation, slto_kingdom_hero),
  18986. (neg|check_quest_active, "qst_destroy_bandit_lair"),
  18987. (quest_slot_eq, "qst_destroy_bandit_lair", slot_quest_dont_give_again_remaining_days, 0),
  18988.  
  18989. # (display_message, "@Checking for bandit lair quest"),
  18990.  
  18991. (assign, ":lair_found", -1),
  18992.  
  18993. (try_for_range, ":bandit_template", "pt_steppe_bandits", "pt_deserters"),
  18994. (party_template_get_slot, ":bandit_lair", ":bandit_template", slot_party_template_lair_party),
  18995.  
  18996. #No party is active because bandit lairs are removed as soon as they are attacked, by the player -- but can only be removed by the player. This will reset bandit lair to zero
  18997. (gt, ":bandit_lair", "p_spawn_points_end"),
  18998.  
  18999. (assign, ":closest_town", -1),
  19000. (assign, ":score_to_beat", 99999),
  19001.  
  19002. (try_for_range, ":town_no", towns_begin, towns_end),
  19003. (store_distance_to_party_from_party, ":distance", ":bandit_lair", ":town_no"),
  19004. (lt, ":distance", ":score_to_beat"),
  19005. (assign, ":closest_town", ":town_no"),
  19006. (assign, ":score_to_beat", ":distance"),
  19007. (try_end),
  19008.  
  19009. #(str_store_party_name, s7, ":closest_town"),
  19010. #(party_get_slot, ":closest_town_lord", ":closest_town", slot_town_lord),
  19011. #(str_store_troop_name, s8, ":closest_town_lord"),
  19012.  
  19013. (party_slot_eq, ":closest_town", slot_town_lord, ":giver_troop"),
  19014. (assign, ":lair_found", ":bandit_lair"),
  19015. (try_end),
  19016.  
  19017. (gt, ":lair_found", "p_spawn_points_end"),
  19018.  
  19019. (assign ,":result", "qst_destroy_bandit_lair"),
  19020. (assign, ":relevant_party", ":lair_found"),
  19021. (else_try), #3 - bounty on bandit party
  19022. (is_between, ":giver_troop", mayors_begin, mayors_end),
  19023. (neg|check_quest_active, "qst_track_down_bandits"),
  19024. (quest_slot_eq, "qst_track_down_bandits", slot_quest_dont_give_again_remaining_days, 0),
  19025.  
  19026. (assign, ":cur_town", -1),
  19027. (try_for_range, ":town", towns_begin, towns_end),
  19028. (party_slot_eq, ":town", slot_town_elder, ":giver_troop"),
  19029. (assign, ":cur_town", ":town"),
  19030. (try_end),
  19031. (gt, ":cur_town", -1),
  19032.  
  19033. (call_script, "script_merchant_road_info_to_s42", ":cur_town"),
  19034. (assign, ":bandit_party_found", reg0),
  19035. (party_is_active, ":bandit_party_found"),
  19036. (gt, ":bandit_party_found", 0),
  19037.  
  19038. (try_begin),
  19039. (eq, "$cheat_mode", 1),
  19040. (display_message, "str_traveller_attack_found"),
  19041. (try_end),
  19042.  
  19043. (assign ,":result", "qst_track_down_bandits"),
  19044. (assign, ":relevant_party", ":bandit_party_found"),
  19045. (else_try), #raid a caravan to start war
  19046. (troop_slot_eq, ":giver_troop", slot_lord_reputation_type, lrep_debauched),
  19047. (store_faction_of_troop, ":giver_troop_faction", ":giver_troop"),
  19048.  
  19049. (assign, ":junior_debauched_lord_in_faction", -1),
  19050. (try_for_range, ":lord_in_faction", active_npcs_begin, active_npcs_end),
  19051. (troop_slot_eq, ":lord_in_faction", slot_lord_reputation_type, lrep_debauched),
  19052. (store_faction_of_troop, ":debauched_lord_faction", ":lord_in_faction"),
  19053. (eq, ":debauched_lord_faction", ":giver_troop_faction"),
  19054. (assign, ":junior_debauched_lord_in_faction", ":lord_in_faction"),
  19055. (try_end),
  19056. (eq, ":giver_troop", ":junior_debauched_lord_in_faction"),
  19057.  
  19058. (assign, ":faction_to_attack", -1),
  19059. (assign, ":faction_to_attack_score", -1),
  19060.  
  19061. (try_for_range, ":faction_candidate", kingdoms_begin, kingdoms_end),
  19062. (neq, ":faction_candidate", ":giver_troop_faction"),
  19063. (faction_slot_eq, ":faction_candidate", slot_faction_state, sfs_active),
  19064. (neq, ":faction_candidate", "$players_kingdom"),
  19065.  
  19066. (store_relation, ":relation", ":faction_candidate", ":giver_troop_faction"),
  19067.  
  19068. (store_add, ":provocation_slot", ":giver_troop_faction", slot_faction_provocation_days_with_factions_begin),
  19069. (val_sub, ":provocation_slot", kingdoms_begin),
  19070. (faction_get_slot, ":provocation_days", ":faction_candidate", ":provocation_slot"),
  19071.  
  19072. (ge, ":relation", 0), #disqualifies if the faction is already at war
  19073. (le, ":provocation_days", 0), #disqualifies if the faction has already provoked someone
  19074.  
  19075. (store_random_in_range, ":faction_candidate_score", 0, 100),
  19076. #add in scores - no truce?
  19077. # (store_add, ":truce_slot", ":giver_troop_faction", slot_faction_truce_days_with_factions_begin),
  19078. # (store_add, ":provocation_slot", ":giver_troop_faction", slot_faction_provocation_days_with_factions_begin),
  19079. # (val_sub, ":truce_slot", kingdoms_begin),
  19080. # (val_sub, ":provocation_slot", kingdoms_begin),
  19081. # (faction_slot_eq, ":faction_candidate", ":provocation_slot", 0),
  19082. # (try_begin),
  19083. # (faction_slot_ge, ":faction_candidate", ":truce_slot", 1),
  19084. # (val_sub, ":faction_to_attack_temp_score", 1),
  19085. # (try_end),
  19086.  
  19087. (gt, ":faction_candidate_score", ":faction_to_attack_score"),
  19088. (assign, ":faction_to_attack", ":faction_candidate"),
  19089. (assign, ":faction_to_attack_score", ":faction_candidate_score"),
  19090. (try_end),
  19091.  
  19092. (is_between, ":faction_to_attack", kingdoms_begin, kingdoms_end),
  19093.  
  19094. (assign ,":result", "qst_cause_provocation"),
  19095. (assign, ":relevant_faction", ":faction_to_attack"),
  19096.  
  19097. (try_end),
  19098.  
  19099. (assign, reg0, ":result"),
  19100. (assign, reg1, ":relevant_troop"),
  19101. (assign, reg2, ":relevant_party"),
  19102. (assign, reg3, ":relevant_faction"),
  19103.  
  19104. ]),
  19105.  
  19106. ("get_political_quest",
  19107. #Political quests are given by the player's political "coach" -- ie, a spouse or the minister -- to improve standing in the faction
  19108. [
  19109. (store_script_param, ":giver_troop", 1),
  19110.  
  19111. (assign, ":result", -1),
  19112. (assign, ":quest_target_troop", -1),
  19113. (assign, ":quest_object_troop", -1),
  19114. (assign, ":quest_dont_give_again_period", 7), #one week on average
  19115.  
  19116.  
  19117.  
  19118. (try_begin), #this for kingdom hero, "we have a mutual enemy"
  19119. (neg|check_quest_active, "qst_denounce_lord"),
  19120. (try_begin),
  19121. (ge, "$cheat_mode", 1),
  19122. (quest_get_slot, reg4, "qst_denounce_lord", slot_quest_dont_give_again_remaining_days),
  19123. (display_message, "@{!}DEBUG -- Checking for denounce lord, eligible in {reg4} days"),
  19124. (try_end),
  19125.  
  19126. (neg|quest_slot_ge, "qst_denounce_lord", slot_quest_dont_give_again_remaining_days, 1),
  19127. (neq, ":giver_troop", "$g_player_minister"),
  19128. (neg|troop_slot_eq, "trp_player", slot_troop_spouse, ":giver_troop"),
  19129. (neg|faction_slot_eq, "$players_kingdom", slot_faction_leader, "trp_player"),
  19130.  
  19131.  
  19132. # (neg|troop_slot_eq, "$g_talk_troop", slot_lord_reputation_type, lrep_martial),
  19133. (neg|troop_slot_eq, "$g_talk_troop", slot_lord_reputation_type, lrep_quarrelsome),
  19134. (neg|troop_slot_eq, "$g_talk_troop", slot_lord_reputation_type, lrep_goodnatured),
  19135.  
  19136. # (neg|troop_slot_ge, "trp_player", slot_troop_controversy, 10),
  19137.  
  19138.  
  19139. (assign, ":target_lord", -1),
  19140. (assign, ":score_to_beat", 1),
  19141.  
  19142. (try_for_range, ":potential_target", active_npcs_begin, active_npcs_end),
  19143. (store_faction_of_troop, ":potential_target_faction", ":potential_target"),
  19144. (eq, ":potential_target_faction", "$players_kingdom"),
  19145. (neq, ":potential_target", ":giver_troop"),
  19146. (neg|faction_slot_eq, ":potential_target_faction", slot_faction_leader, ":potential_target"),
  19147.  
  19148. #cannot denounce if you also have an intrigue against lord active
  19149. (this_or_next|neg|check_quest_active, "qst_intrigue_against_lord"),
  19150. (neg|quest_slot_eq, "qst_intrigue_against_lord", slot_quest_target_troop, ":potential_target"),
  19151.  
  19152. (call_script, "script_troop_get_relation_with_troop", ":potential_target", ":giver_troop"),
  19153. (assign, ":relation_with_giver_troop", reg0),
  19154. (lt, ":relation_with_giver_troop", ":score_to_beat"),
  19155.  
  19156. (str_store_troop_name, s4, ":potential_target"),
  19157. (try_begin),
  19158. (ge, "$cheat_mode", 1),
  19159. (display_message, "@{!}DEBUG -- Rival found in {s4}"),
  19160. (try_end),
  19161.  
  19162. (try_begin),
  19163. (troop_slot_eq, "$g_talk_troop", slot_lord_reputation_type, lrep_debauched),
  19164. (assign, ":max_rel_w_player", 15),
  19165. (else_try),
  19166. (troop_slot_eq, "$g_talk_troop", slot_lord_reputation_type, lrep_quarrelsome),
  19167. (assign, ":max_rel_w_player", 10),
  19168. (else_try),
  19169. (assign, ":max_rel_w_player", 5),
  19170. (try_end),
  19171.  
  19172. (call_script, "script_troop_get_relation_with_troop", ":potential_target", "trp_player"),
  19173. (assign, ":relation_with_player", reg0),
  19174. (lt, ":relation_with_player", ":max_rel_w_player"),
  19175.  
  19176. (str_store_troop_name, s4, ":potential_target"),
  19177. (try_begin),
  19178. (ge, "$cheat_mode", 1),
  19179. (display_message, "@{!}DEBUG -- {s4} is not close friend of player"),
  19180. (try_end),
  19181.  
  19182. (assign, ":enemies_in_faction", 0),
  19183. (try_for_range, ":other_lord", active_npcs_begin, active_npcs_end),
  19184. (store_faction_of_troop, ":other_lord_faction", ":other_lord"),
  19185. (eq, ":other_lord_faction", "$players_kingdom"),
  19186. (call_script, "script_troop_get_relation_with_troop", ":potential_target", ":other_lord"),
  19187. (lt, reg0, 0),
  19188. (val_add, ":enemies_in_faction", 1),
  19189. (try_end),
  19190.  
  19191. (str_store_troop_name, s4, ":potential_target"),
  19192. (try_begin),
  19193. (ge, "$cheat_mode", 1),
  19194. (assign, reg3, ":enemies_in_faction"),
  19195. (display_message, "@{!}DEBUG -- {s4} has {reg3} rivals"),
  19196. (try_end),
  19197.  
  19198. (this_or_next|ge, ":enemies_in_faction", 3),
  19199. (ge, "$cheat_mode", 1),
  19200.  
  19201. (assign, ":score_to_beat", ":relation_with_giver_troop"),
  19202. (assign, ":target_lord", ":potential_target"),
  19203. (try_end),
  19204.  
  19205. (is_between, ":target_lord", active_npcs_begin, active_npcs_end),
  19206.  
  19207.  
  19208. (assign, ":result", "qst_denounce_lord"),
  19209. (assign, ":quest_target_troop", ":target_lord"),
  19210.  
  19211. (else_try),
  19212. (neg|check_quest_active, "qst_intrigue_against_lord"),
  19213. (try_begin),
  19214. (eq, "$cheat_mode", 1),
  19215. (quest_get_slot, reg4, "qst_intrigue_against_lord", slot_quest_dont_give_again_remaining_days),
  19216. (display_message, "@{!}DEBUG -- Checking for intrigue, eligible in {reg4} days"),
  19217. (try_end),
  19218.  
  19219. (neg|quest_slot_ge, "qst_intrigue_against_lord", slot_quest_dont_give_again_remaining_days, 1),
  19220.  
  19221.  
  19222.  
  19223. (neq, ":giver_troop", "$g_player_minister"),
  19224. (neg|troop_slot_eq, "trp_player", slot_troop_spouse, ":giver_troop"),
  19225. (neg|faction_slot_eq, "$players_kingdom", slot_faction_leader, "trp_player"),
  19226.  
  19227. (try_begin),
  19228. (ge, "$cheat_mode", 1),
  19229. (display_message, "@{!}DEBUG -- Trying for intrigue against lord"),
  19230. (try_end),
  19231.  
  19232.  
  19233. (assign, ":target_lord", -1),
  19234. (assign, ":score_to_beat", 10),
  19235.  
  19236. (try_for_range, ":potential_target", active_npcs_begin, active_npcs_end),
  19237. (store_faction_of_troop, ":potential_target_faction", ":potential_target"),
  19238. (eq, ":potential_target_faction", "$players_kingdom"),
  19239. (neq, ":potential_target", ":giver_troop"),
  19240. (neg|faction_slot_eq, ":potential_target_faction", slot_faction_leader, ":potential_target"),
  19241.  
  19242.  
  19243. (this_or_next|neg|check_quest_active, "qst_denounce_lord"),
  19244. (neg|quest_slot_eq, "qst_denounce_lord", slot_quest_target_troop, ":potential_target"),
  19245.  
  19246. (faction_get_slot, ":faction_liege", "$players_kingdom", slot_faction_leader),
  19247. (call_script, "script_troop_get_relation_with_troop", ":potential_target", ":faction_liege"),
  19248. (assign, ":relation_with_liege", reg0),
  19249. (lt, ":relation_with_liege", ":score_to_beat"),
  19250.  
  19251. (str_store_troop_name, s4, ":potential_target"),
  19252. (try_begin),
  19253. (ge, "$cheat_mode", 1),
  19254. (display_message, "@{!}DEBUG -- {s4} has sufficiently low relation with liege"),
  19255. (try_end),
  19256.  
  19257.  
  19258. (call_script, "script_troop_get_relation_with_troop", ":potential_target", ":giver_troop"),
  19259. (assign, ":relation_with_giver_troop", reg0),
  19260. (lt, ":relation_with_giver_troop", 0),
  19261.  
  19262. (str_store_troop_name, s4, ":potential_target"),
  19263. (try_begin),
  19264. (ge, "$cheat_mode", 1),
  19265. (display_message, "@{!}DEBUG -- {s4} has sufficiently low relation with giver troop"),
  19266. (try_end),
  19267.  
  19268.  
  19269. (call_script, "script_troop_get_relation_with_troop", ":potential_target", "trp_player"),
  19270. (assign, ":relation_with_player", reg0),
  19271. (lt, ":relation_with_player", 0),
  19272.  
  19273. (str_store_troop_name, s4, ":potential_target"),
  19274. (try_begin),
  19275. (ge, "$cheat_mode", 1),
  19276. (display_message, "@{!}DEBUG -- {s4} has sufficiently low relation with player"),
  19277. (try_end),
  19278.  
  19279. (assign, ":score_to_beat", ":relation_with_liege"),
  19280. (assign, ":target_lord", ":potential_target"),
  19281. (try_end),
  19282.  
  19283. (is_between, ":target_lord", active_npcs_begin, active_npcs_end),
  19284.  
  19285.  
  19286. (assign, ":result", "qst_intrigue_against_lord"),
  19287. (assign, ":quest_target_troop", ":target_lord"),
  19288.  
  19289.  
  19290. (else_try),
  19291. #Resolve dispute, if there is a good chance of achieving the result
  19292. (try_begin),
  19293. (ge, "$cheat_mode", 1),
  19294. (quest_get_slot, reg4, "qst_resolve_dispute", slot_quest_dont_give_again_remaining_days),
  19295. (display_message, "@{!}DEBUG -- Checking for resolve dispute, eligible in {reg4} days"),
  19296. (try_end),
  19297.  
  19298. (neg|quest_slot_ge, "qst_resolve_dispute", slot_quest_dont_give_again_remaining_days, 1),
  19299.  
  19300.  
  19301.  
  19302. (this_or_next|troop_slot_eq, "trp_player", slot_troop_spouse, "$g_talk_troop"),
  19303. (eq, "$g_talk_troop", "$g_player_minister"),
  19304.  
  19305. (assign, ":target_lord", -1),
  19306. (assign, ":object_lord", -1),
  19307. (assign, ":best_chance_of_success", 20),
  19308.  
  19309. (try_for_range, ":lord_1", active_npcs_begin, active_npcs_end),
  19310. (store_faction_of_troop, ":lord_1_faction", ":lord_1"),
  19311. (eq, ":lord_1_faction", "$players_kingdom"),
  19312. (neq, ":lord_1", "$g_talk_troop"),
  19313.  
  19314. (try_for_range, ":lord_2", active_npcs_begin, active_npcs_end),
  19315. (store_faction_of_troop, ":lord_2_faction", ":lord_2"),
  19316. (eq, ":lord_2_faction", "$players_kingdom"),
  19317.  
  19318. (neq, ":lord_1", ":lord_2"),
  19319. (neq, ":lord_2", "$g_talk_troop"),
  19320.  
  19321. (call_script, "script_troop_get_relation_with_troop", ":lord_1", ":lord_2"),
  19322. (assign, ":lord_1_relation_with_lord_2", reg0),
  19323. (lt, ":lord_1_relation_with_lord_2", -5),
  19324.  
  19325. (call_script, "script_troop_get_relation_with_troop", ":lord_1", "trp_player"),
  19326. (assign, ":relation_with_lord_1", reg0),
  19327.  
  19328. (call_script, "script_troop_get_relation_with_troop", ":lord_2", "trp_player"),
  19329. (assign, ":relation_with_lord_2", reg0),
  19330.  
  19331. (gt, ":relation_with_lord_1", 0),
  19332. (gt, ":relation_with_lord_2", 0),
  19333.  
  19334. (store_mul, ":chance_of_success", ":relation_with_lord_1", ":relation_with_lord_2"),
  19335.  
  19336.  
  19337. (gt, ":chance_of_success", ":best_chance_of_success"),
  19338. (assign, ":best_chance_of_success", ":chance_of_success"),
  19339. (assign, ":target_lord", ":lord_1"),
  19340. (assign, ":object_lord", ":lord_2"),
  19341. (try_end),
  19342. (try_end),
  19343.  
  19344.  
  19345. (is_between, ":target_lord", active_npcs_begin, active_npcs_end),
  19346.  
  19347. (assign, ":result", "qst_resolve_dispute"),
  19348. (assign, ":quest_target_troop", ":target_lord"),
  19349. (assign, ":quest_object_troop", ":object_lord"),
  19350.  
  19351. (else_try),
  19352. (try_begin),
  19353. (ge, "$cheat_mode", 1),
  19354. (quest_get_slot, reg4, "qst_offer_gift", slot_quest_dont_give_again_remaining_days),
  19355. (display_message, "@{!}DEBUG -- Checking for offer gift, eligible in {reg4} days"),
  19356. (try_end),
  19357.  
  19358. (neg|quest_slot_ge, "qst_offer_gift", slot_quest_dont_give_again_remaining_days, 1),
  19359.  
  19360. (assign, ":relative_found", -1),
  19361. (assign, ":score_to_beat", 5),
  19362.  
  19363. (try_for_range, ":potential_relative", active_npcs_begin, active_npcs_end),
  19364. (store_faction_of_troop, ":relative_faction", ":potential_relative"),
  19365. (eq, ":relative_faction", "$players_kingdom"),
  19366. (neq, ":potential_relative", ":giver_troop"),
  19367. (neg|faction_slot_eq, ":relative_faction", slot_faction_leader, ":potential_relative"),
  19368.  
  19369. (call_script, "script_troop_get_family_relation_to_troop", ":giver_troop", ":potential_relative"),
  19370. (assign, ":family_relation", reg0),
  19371. (ge, ":family_relation", ":score_to_beat"),
  19372.  
  19373. (store_sub, ":min_relation_w_player", 0, ":family_relation"),
  19374.  
  19375. (call_script, "script_troop_get_relation_with_troop", "trp_player", ":potential_relative"),
  19376. (assign, ":relation_with_player", reg0),
  19377. (is_between, ":relation_with_player", ":min_relation_w_player", 0),
  19378.  
  19379. (assign, ":score_to_beat", ":family_relation"),
  19380. (assign, ":relative_found", ":potential_relative"),
  19381.  
  19382. (try_end),
  19383.  
  19384. (is_between, ":relative_found", active_npcs_begin, active_npcs_end),
  19385.  
  19386. (assign, ":result", "qst_offer_gift"),
  19387. (assign, ":quest_target_troop", ":relative_found"),
  19388. (try_end),
  19389.  
  19390.  
  19391. (try_begin),
  19392. (gt, ":result", -1),
  19393. (quest_set_slot, ":result", slot_quest_target_troop, ":quest_target_troop"),
  19394. (quest_set_slot, ":result", slot_quest_target_troop, ":quest_object_troop"),
  19395.  
  19396. (quest_set_slot, ":result", slot_quest_giver_troop, ":giver_troop"),
  19397. (quest_set_slot, ":result", slot_quest_dont_give_again_period, ":quest_dont_give_again_period"),
  19398. (try_end),
  19399.  
  19400. (assign, reg0, ":result"),
  19401. (assign, reg1, ":quest_target_troop"),
  19402. (assign, reg2, ":quest_object_troop"),
  19403.  
  19404. ]),
  19405.  
  19406.  
  19407. ("npc_find_quest_for_player_to_s11",
  19408. [
  19409. (store_script_param, ":faction", 1),
  19410.  
  19411. (assign, ":quest_giver_found", -1),
  19412. (try_for_range, ":quest_giver", active_npcs_begin, mayors_end),
  19413. (eq, ":quest_giver_found", -1),
  19414.  
  19415. (neg|troop_slot_eq, "trp_player", slot_troop_spouse, ":quest_giver"),
  19416.  
  19417. (gt, ":quest_giver", "$g_troop_list_no"),
  19418.  
  19419. (assign, "$g_troop_list_no", ":quest_giver"),
  19420.  
  19421. (this_or_next|troop_slot_eq, ":quest_giver", slot_troop_occupation, slto_kingdom_hero),
  19422. (is_between, ":quest_giver", mayors_begin, mayors_end),
  19423.  
  19424. (neg|troop_slot_ge, ":quest_giver", slot_troop_prisoner_of_party, centers_begin),
  19425.  
  19426. (try_begin),
  19427. (is_between, ":quest_giver", mayors_begin, mayors_end),
  19428. (assign, ":quest_giver_faction", -1),
  19429. (try_for_range,":town", towns_begin, towns_end),
  19430. (party_slot_eq, ":town", slot_town_elder, ":quest_giver"),
  19431. (store_faction_of_party, ":quest_giver_faction", ":town"),
  19432. (try_end),
  19433. (else_try),
  19434. (store_faction_of_troop, ":quest_giver_faction", ":quest_giver"),
  19435. (try_end),
  19436. (eq, ":faction", ":quest_giver_faction"),
  19437.  
  19438. (call_script, "script_get_dynamic_quest", ":quest_giver"),
  19439. (gt, reg0, -1),
  19440.  
  19441. (assign, ":quest_giver_found", ":quest_giver"),
  19442. (try_begin),
  19443. (eq, "$cheat_mode", 1),
  19444. (str_store_troop_name, s4, ":quest_giver_found"),
  19445. (display_message, "str_test_diagnostic_quest_found_for_s4"),
  19446. (try_end),
  19447.  
  19448. (try_end),
  19449.  
  19450. (assign, reg0, ":quest_giver_found"),
  19451.  
  19452. ]),
  19453.  
  19454.  
  19455.  
  19456. # script_cf_get_random_enemy_center_within_range
  19457. # Input: arg1 = party_no, arg2 = range (in kms)
  19458. # Output: reg0 = center_no
  19459. ("cf_get_random_enemy_center_within_range",
  19460. [
  19461. (store_script_param, ":party_no", 1),
  19462. (store_script_param, ":range", 2),
  19463.  
  19464. (assign, ":num_centers", 0),
  19465. (store_faction_of_party, ":faction_no", ":party_no"),
  19466. (try_for_range, ":cur_center", centers_begin, centers_end),
  19467. (store_faction_of_party, ":cur_faction", ":cur_center"),
  19468. (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19469. (lt, ":cur_relation", 0),
  19470. (store_distance_to_party_from_party, ":dist", ":party_no", ":cur_center"),
  19471. (le, ":dist", ":range"),
  19472. (val_add, ":num_centers", 1),
  19473. (try_end),
  19474. (gt, ":num_centers", 0),
  19475. (store_random_in_range, ":random_center", 0, ":num_centers"),
  19476. (assign, ":end_cond", centers_end),
  19477. (try_for_range, ":cur_center", centers_begin, ":end_cond"),
  19478. (store_faction_of_party, ":cur_faction", ":cur_center"),
  19479. (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19480. (lt, ":cur_relation", 0),
  19481. (store_distance_to_party_from_party, ":dist", ":party_no", ":cur_center"),
  19482. (le, ":dist", ":range"),
  19483. (val_sub, ":random_center", 1),
  19484. (lt, ":random_center", 0),
  19485. (assign, ":result", ":cur_center"),
  19486. (assign, ":end_cond", 0),#break
  19487. (try_end),
  19488. (assign, reg0, ":result"),
  19489. ]),
  19490.  
  19491. # script_cf_faction_get_random_enemy_faction
  19492. # Input: arg1 = faction_no
  19493. # Output: reg0 = faction_no (Can fail)
  19494. ("cf_faction_get_random_enemy_faction",
  19495. [
  19496. (store_script_param_1, ":faction_no"),
  19497.  
  19498. (assign, ":result", -1),
  19499. (assign, ":count_factions", 0),
  19500. (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  19501. (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  19502. (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19503. (le, ":cur_relation", -1),
  19504. (val_add, ":count_factions", 1),
  19505. (try_end),
  19506. (store_random_in_range,":random_faction",0,":count_factions"),
  19507. (assign, ":count_factions", 0),
  19508. (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  19509. (eq, ":result", -1),
  19510. (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  19511. (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19512. (le, ":cur_relation", -1),
  19513. (val_add, ":count_factions", 1),
  19514. (gt, ":count_factions", ":random_faction"),
  19515. (assign, ":result", ":cur_faction"),
  19516. (try_end),
  19517.  
  19518. (neq, ":result", -1),
  19519. (assign, reg0, ":result"),
  19520. ]),
  19521.  
  19522. # script_cf_faction_get_random_friendly_faction
  19523. # Input: arg1 = faction_no
  19524. # Output: reg0 = faction_no (Can fail)
  19525. ("cf_faction_get_random_friendly_faction",
  19526. [
  19527. (store_script_param_1, ":faction_no"),
  19528.  
  19529. (assign, ":result", -1),
  19530. (assign, ":count_factions", 0),
  19531. (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  19532. (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  19533. (neq, ":cur_faction", ":faction_no"),
  19534. (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19535. (ge, ":cur_relation", 0),
  19536. (val_add, ":count_factions", 1),
  19537. (try_end),
  19538. (store_random_in_range,":random_faction",0,":count_factions"),
  19539. (assign, ":count_factions", 0),
  19540. (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  19541. (eq, ":result", -1),
  19542. (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  19543. (neq, ":cur_faction", ":faction_no"),
  19544. (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19545. (ge, ":cur_relation", 0),
  19546. (val_add, ":count_factions", 1),
  19547. (gt, ":count_factions", ":random_faction"),
  19548. (assign, ":result", ":cur_faction"),
  19549. (try_end),
  19550.  
  19551. (neq, ":result", -1),
  19552. (assign, reg0, ":result"),
  19553. ]),
  19554.  
  19555. # script_cf_troop_get_random_enemy_troop_with_occupation
  19556. # Input: arg1 = troop_no,
  19557. # Output: reg0 = enemy_troop_no (Can fail)
  19558. ("cf_troop_get_random_enemy_troop_with_occupation",
  19559. [
  19560. (store_script_param_1, ":troop_no"),
  19561. (store_script_param_2, ":occupation"),
  19562.  
  19563. (assign, ":result", -1),
  19564. (assign, ":count_enemies", 0),
  19565. (try_for_range, ":enemy_troop_no", active_npcs_begin, active_npcs_end),
  19566. (troop_slot_eq, ":enemy_troop_no", slot_troop_occupation, ":occupation"),
  19567. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":enemy_troop_no"),
  19568. (lt, reg0, -10),
  19569. (val_add, ":count_enemies", 1),
  19570. (try_end),
  19571.  
  19572. (gt, ":count_enemies", 0),
  19573. (store_random_in_range,":random_enemy",0,":count_enemies"),
  19574.  
  19575. (assign, ":count_enemies", 0),
  19576. (try_for_range, ":enemy_troop_no", active_npcs_begin, active_npcs_end),
  19577. (troop_slot_eq, ":enemy_troop_no", slot_troop_occupation, ":occupation"),
  19578. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":enemy_troop_no"),
  19579. (lt, reg0, -10),
  19580. (val_add, ":count_enemies", 1),
  19581. (eq, ":random_enemy", ":count_enemies"),
  19582. (assign, ":result", ":enemy_troop_no"),
  19583. (try_end),
  19584.  
  19585. (neq, ":result", -1),
  19586. (assign, reg0, ":result"),
  19587. ]),
  19588.  
  19589.  
  19590. ## # script_cf_troop_get_random_enemy_troop_as_a_town_lord
  19591. ## # Input: arg1 = troop_no
  19592. ## # Output: reg0 = enemy_troop_no (Can fail)
  19593. ## ("cf_troop_get_random_enemy_troop_as_a_town_lord",
  19594. ## [
  19595. ## (store_script_param_1, ":troop_no"),
  19596. ##
  19597. ## (assign, ":result", -1),
  19598. ## (assign, ":count_enemies", 0),
  19599. ## (try_for_range, ":cur_slot", slot_troop_enemies_begin, slot_troop_enemies_end),
  19600. ## (troop_get_slot, ":cur_enemy", ":troop_no", ":cur_slot"),
  19601. ## (gt, ":cur_enemy", 0),
  19602. ## (troop_slot_eq, ":cur_enemy", slot_troop_occupation, slto_kingdom_hero),
  19603. ## (call_script, "script_get_number_of_hero_centers", ":cur_enemy"),
  19604. ## (gt, reg0, 0),
  19605. ## (val_add, ":count_enemies", 1),
  19606. ## (try_end),
  19607. ## (store_random_in_range,":random_enemy",0,":count_enemies"),
  19608. ## (assign, ":count_enemies", 0),
  19609. ## (try_for_range, ":cur_slot", slot_troop_enemies_begin, slot_troop_enemies_end),
  19610. ## (eq, ":result", -1),
  19611. ## (troop_get_slot, ":cur_enemy", ":troop_no", ":cur_slot"),
  19612. ## (gt, ":cur_enemy", 0),
  19613. ## (troop_slot_eq, ":cur_enemy", slot_troop_occupation, slto_kingdom_hero),
  19614. ## (call_script, "script_get_number_of_hero_centers", ":cur_enemy"),
  19615. ## (gt, reg0, 0),
  19616. ## (val_add, ":count_enemies", 1),
  19617. ## (gt, ":count_enemies", ":random_enemy"),
  19618. ## (assign, ":result", ":cur_enemy"),
  19619. ## (try_end),
  19620. ## (neq, ":result", -1),
  19621. ## (assign, reg0, ":result"),
  19622. ## ]),
  19623.  
  19624.  
  19625. ## # script_cf_get_random_enemy_with_valid_slot
  19626. ## # Input: arg1 = faction_no, arg2 = slot_no
  19627. ## # Output: reg0 = faction_no (Can fail)
  19628. ## ("cf_get_random_enemy_with_valid_slot",
  19629. ## [
  19630. ## (store_script_param_1, ":faction_no"),
  19631. ## (store_script_param_2, ":slot_no"),
  19632. ##
  19633. ## (assign, ":result", -1),
  19634. ## (assign, ":count_factions", 0),
  19635. ## (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  19636. ## (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19637. ## (le, ":cur_relation", -10),
  19638. ## (faction_get_slot, ":cur_value", ":cur_faction", ":slot_no"),
  19639. ## (gt, ":cur_value", 0),#Checking validity
  19640. ## (val_add, ":count_factions", 1),
  19641. ## (try_end),
  19642. ## (store_random_in_range,":random_faction",0,":count_factions"),
  19643. ## (assign, ":count_factions", 0),
  19644. ## (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  19645. ## (eq, ":result", -1),
  19646. ## (store_relation, ":cur_relation", ":faction_no", ":cur_faction"),
  19647. ## (le, ":cur_relation", -10),
  19648. ## (faction_get_slot, ":cur_value", ":cur_faction", ":slot_no"),
  19649. ## (gt, ":cur_value", 0),#Checking validity
  19650. ## (val_add, ":count_factions", 1),
  19651. ## (gt, ":count_factions", ":random_faction"),
  19652. ## (assign, ":result", ":cur_faction"),
  19653. ## (try_end),
  19654. ##
  19655. ## (neq, ":result", -1),
  19656. ## (assign, reg0, ":result"),
  19657. ## ]),
  19658.  
  19659.  
  19660. ## # script_cf_get_random_kingdom_hero
  19661. ## # Input: arg1 = faction_no
  19662. ## # Output: reg0 = troop_no (Can fail)
  19663. ## ("cf_get_random_kingdom_hero",
  19664. ## [
  19665. ## (store_script_param_1, ":faction_no"),
  19666. ## (assign, ":count_heroes", 0),
  19667. ## (try_for_range, ":center_no", centers_begin, centers_end),
  19668. ## (store_faction_of_party, ":cur_faction", ":center_no"),
  19669. ## (eq, ":cur_faction", ":faction_no"),
  19670. ## (party_get_slot, ":cur_lord", ":center_no", slot_town_lord),
  19671. ## (is_between, ":cur_lord", heroes_begin, heroes_end),
  19672. ## (val_add, ":count_heroes", 1),
  19673. ## (try_end),
  19674. ## (store_random_in_range, ":random_hero", 0, ":count_heroes"),
  19675. ## (assign, ":result", -1),
  19676. ## (assign, ":count_heroes", 0),
  19677. ## (try_for_range, ":center_no", centers_begin, centers_end),
  19678. ## (eq, ":result", -1),
  19679. ## (store_faction_of_party, ":cur_faction", ":center_no"),
  19680. ## (eq, ":cur_faction", ":faction_no"),
  19681. ## (party_get_slot, ":cur_lord", ":center_no", slot_town_lord),
  19682. ## (is_between, ":cur_lord", heroes_begin, heroes_end),
  19683. ## (val_add, ":count_heroes", 1),
  19684. ## (lt, ":random_hero", ":count_heroes"),
  19685. ## (assign, ":result", ":cur_lord"),
  19686. ## (try_end),
  19687. ## (neq, ":result", -1),
  19688. ## (assign, reg0, ":result"),
  19689. ## ]),
  19690.  
  19691.  
  19692. # script_cf_get_random_kingdom_hero_as_lover - removed
  19693.  
  19694.  
  19695.  
  19696. ## # script_cf_get_random_siege_location_with_faction
  19697. ## # Input: arg1 = faction_no
  19698. ## # Output: reg0 = center_no, Can Fail!
  19699. ## ("cf_get_random_siege_location_with_faction",
  19700. ## [
  19701. ## (store_script_param_1, ":faction_no"),
  19702. ## (assign, ":result", -1),
  19703. ## (assign, ":count_sieges", 0),
  19704. ## (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  19705. ## (party_get_battle_opponent, ":besieger_party", ":center_no"),
  19706. ## (gt, ":besieger_party", 0),
  19707. ## (store_faction_of_party, ":cur_faction_no", ":center_no"),
  19708. ## (eq, ":cur_faction_no", ":faction_no"),
  19709. ## (val_add, ":count_sieges", 1),
  19710. ## (try_end),
  19711. ## (store_random_in_range,":random_center",0,":count_sieges"),
  19712. ## (assign, ":count_sieges", 0),
  19713. ## (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  19714. ## (eq, ":result", -1),
  19715. ## (party_get_battle_opponent, ":besieger_party", ":center_no"),
  19716. ## (gt, ":besieger_party", 0),
  19717. ## (store_faction_of_party, ":cur_faction_no", ":center_no"),
  19718. ## (eq, ":cur_faction_no", ":faction_no"),
  19719. ## (val_add, ":count_sieges", 1),
  19720. ## (gt, ":count_sieges", ":random_center"),
  19721. ## (assign, ":result", ":center_no"),
  19722. ## (try_end),
  19723. ## (neq, ":result", -1),
  19724. ## (assign, reg0, ":result"),
  19725. ## ]),
  19726.  
  19727. ## # script_cf_get_random_siege_location_with_attacker_faction
  19728. ## # Input: arg1 = faction_no
  19729. ## # Output: reg0 = center_no, Can Fail!
  19730. ## ("cf_get_random_siege_location_with_attacker_faction",
  19731. ## [
  19732. ## (store_script_param_1, ":faction_no"),
  19733. ## (assign, ":result", -1),
  19734. ## (assign, ":count_sieges", 0),
  19735. ## (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  19736. ## (party_get_battle_opponent, ":besieger_party", ":center_no"),
  19737. ## (gt, ":besieger_party", 0),
  19738. ## (store_faction_of_party, ":cur_faction_no", ":besieger_party"),
  19739. ## (eq, ":cur_faction_no", ":faction_no"),
  19740. ## (val_add, ":count_sieges", 1),
  19741. ## (try_end),
  19742. ## (store_random_in_range,":random_center",0,":count_sieges"),
  19743. ## (assign, ":count_sieges", 0),
  19744. ## (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  19745. ## (eq, ":result", -1),
  19746. ## (party_get_battle_opponent, ":besieger_party", ":center_no"),
  19747. ## (gt, ":besieger_party", 0),
  19748. ## (store_faction_of_party, ":cur_faction_no", ":besieger_party"),
  19749. ## (eq, ":cur_faction_no", ":faction_no"),
  19750. ## (val_add, ":count_sieges", 1),
  19751. ## (gt, ":count_sieges", ":random_center"),
  19752. ## (assign, ":result", ":center_no"),
  19753. ## (try_end),
  19754. ## (neq, ":result", -1),
  19755. ## (assign, reg0, ":result"),
  19756. ## ]),
  19757.  
  19758.  
  19759.  
  19760. ## # script_cf_get_number_of_random_troops_from_party
  19761. ## # Input: arg1 = party_no, arg2 = number of troops to remove
  19762. ## # Output: reg0 = troop_no, Can fail if there are no slots having the required number of units!
  19763. ## ("cf_get_number_of_random_troops_from_party",
  19764. ## [
  19765. ## (store_script_param_1, ":party_no"),
  19766. ## (store_script_param_2, ":no_to_remove"),
  19767. ##
  19768. ## (assign, ":result", -1),
  19769. ## (assign, ":count_stacks", 0),
  19770. ##
  19771. ## (party_get_num_companion_stacks, ":num_stacks",":party_no"),
  19772. ## (try_for_range, ":i_stack", 0, ":num_stacks"),
  19773. ## (party_stack_get_size, ":stack_size",":party_no",":i_stack"),
  19774. ## (party_stack_get_num_wounded, ":num_wounded",":party_no",":i_stack"),
  19775. ## (val_sub, ":stack_size", ":num_wounded"),
  19776. ## (ge, ":stack_size", ":no_to_remove"),
  19777. ## (party_stack_get_troop_id, ":stack_troop",":party_no",":i_stack"),
  19778. ## (neg|troop_is_hero, ":stack_troop"),
  19779. ## (val_add, ":count_stacks", 1),
  19780. ## (try_end),
  19781. ## (store_random_in_range,":random_stack",0,":count_stacks"),
  19782. ## (assign, ":count_stacks", 0),
  19783. ## (try_for_range, ":i_stack", 0, ":num_stacks"),
  19784. ## (eq, ":result", -1),
  19785. ## (party_stack_get_size, ":stack_size",":party_no",":i_stack"),
  19786. ## (party_stack_get_num_wounded, ":num_wounded",":party_no",":i_stack"),
  19787. ## (val_sub, ":stack_size", ":num_wounded"),
  19788. ## (ge, ":stack_size", ":no_to_remove"),
  19789. ## (party_stack_get_troop_id, ":stack_troop",":party_no",":i_stack"),
  19790. ## (neg|troop_is_hero, ":stack_troop"),
  19791. ## (val_add, ":count_stacks", 1),
  19792. ## (gt, ":count_stacks", ":random_stack"),
  19793. ## (assign, ":result", ":stack_troop"),
  19794. ## (try_end),
  19795. ##
  19796. ## (neq, ":result", -1),
  19797. ## (assign, reg0, ":result"),
  19798. ## ]),
  19799.  
  19800.  
  19801.  
  19802.  
  19803. # script_cf_get_random_lord_in_a_center_with_faction
  19804. # Input: arg1 = faction_no
  19805. # Output: reg0 = troop_no, Can Fail!
  19806. ("cf_get_random_lord_in_a_center_with_faction",
  19807. [
  19808. (store_script_param_1, ":faction_no"),
  19809. (assign, ":result", -1),
  19810. (assign, ":count_lords", 0),
  19811. (try_for_range, ":lord_no", heroes_begin, heroes_end),
  19812. (store_troop_faction, ":lord_faction_no", ":lord_no"),
  19813. (eq, ":faction_no", ":lord_faction_no"),
  19814. (troop_slot_eq, ":lord_no", slot_troop_occupation, slto_kingdom_hero),
  19815. #(troop_slot_eq, ":lord_no", slot_troop_is_prisoner, 0),
  19816. (neg|troop_slot_ge, ":lord_no", slot_troop_prisoner_of_party, 0),
  19817. (troop_get_slot, ":lord_party", ":lord_no", slot_troop_leaded_party),
  19818. (ge, ":lord_party", 0),
  19819. (party_get_attached_to, ":lord_attachment", ":lord_party"),
  19820. (is_between, ":lord_attachment", centers_begin, centers_end), #is troop in a center?
  19821. (val_add, ":count_lords", 1),
  19822. (try_end),
  19823. (store_random_in_range, ":random_lord", 0, ":count_lords"),
  19824. (assign, ":count_lords", 0),
  19825. (try_for_range, ":lord_no", heroes_begin, heroes_end),
  19826. (eq, ":result", -1),
  19827. (store_troop_faction, ":lord_faction_no", ":lord_no"),
  19828. (eq, ":faction_no", ":lord_faction_no"),
  19829. (troop_slot_eq, ":lord_no", slot_troop_occupation, slto_kingdom_hero),
  19830. #(troop_slot_eq, ":lord_no", slot_troop_is_prisoner, 0),
  19831. (neg|troop_slot_ge, ":lord_no", slot_troop_prisoner_of_party, 0),
  19832. (troop_get_slot, ":lord_party", ":lord_no", slot_troop_leaded_party),
  19833. (ge, ":lord_party", 0),
  19834. (party_get_attached_to, ":lord_attachment", ":lord_party"),
  19835. (is_between, ":lord_attachment", centers_begin, centers_end), #is troop in a center?
  19836. (val_add, ":count_lords", 1),
  19837. (lt, ":random_lord", ":count_lords"),
  19838. (assign, ":result", ":lord_no"),
  19839. (try_end),
  19840. (neq, ":result", -1),
  19841. (assign, reg0, ":result"),
  19842. ]),
  19843.  
  19844. # script_cf_get_random_lord_except_king_with_faction
  19845. # Input: arg1 = faction_no
  19846. # Output: reg0 = troop_no, Can Fail!
  19847. ("cf_get_random_lord_except_king_with_faction",
  19848. [
  19849. (store_script_param_1, ":faction_no"),
  19850. (assign, ":result", -1),
  19851. (assign, ":count_lords", 0),
  19852. (try_for_range, ":lord_no", heroes_begin, heroes_end),
  19853. (store_troop_faction, ":lord_faction_no", ":lord_no"),
  19854. (eq, ":faction_no", ":lord_faction_no"),
  19855. (neg|faction_slot_eq, ":faction_no", slot_faction_leader, ":lord_no"),
  19856. (troop_slot_eq, ":lord_no", slot_troop_occupation, slto_kingdom_hero),
  19857. #(troop_slot_eq, ":lord_no", slot_troop_is_prisoner, 0),
  19858. (neg|troop_slot_ge, ":lord_no", slot_troop_prisoner_of_party, 0),
  19859. (troop_get_slot, ":lord_party", ":lord_no", slot_troop_leaded_party),
  19860. (ge, ":lord_party", 0),
  19861. (val_add, ":count_lords", 1),
  19862. (try_end),
  19863. (store_random_in_range, ":random_lord", 0, ":count_lords"),
  19864. (assign, ":count_lords", 0),
  19865. (try_for_range, ":lord_no", heroes_begin, heroes_end),
  19866. (eq, ":result", -1),
  19867. (store_troop_faction, ":lord_faction_no", ":lord_no"),
  19868. (eq, ":faction_no", ":lord_faction_no"),
  19869. (neg|faction_slot_eq, ":faction_no", slot_faction_leader, ":lord_no"),
  19870. (troop_slot_eq, ":lord_no", slot_troop_occupation, slto_kingdom_hero),
  19871. #(troop_slot_eq, ":lord_no", slot_troop_is_prisoner, 0),
  19872. (neg|troop_slot_ge, ":lord_no", slot_troop_prisoner_of_party, 0),
  19873. (troop_get_slot, ":lord_party", ":lord_no", slot_troop_leaded_party),
  19874. (ge, ":lord_party", 0),
  19875. (val_add, ":count_lords", 1),
  19876. (lt, ":random_lord", ":count_lords"),
  19877. (assign, ":result", ":lord_no"),
  19878. (try_end),
  19879. (neq, ":result", -1),
  19880. (assign, reg0, ":result"),
  19881. ]),
  19882.  
  19883.  
  19884. # script_cf_get_random_lord_from_another_faction_in_a_center
  19885. # Input: arg1 = faction_no
  19886. # Output: reg0 = troop_no, Can Fail!
  19887. ("cf_get_random_lord_from_another_faction_in_a_center",
  19888. [
  19889. (store_script_param_1, ":faction_no"),
  19890. (assign, ":result", -1),
  19891. (assign, ":count_lords", 0),
  19892. (try_for_range, ":lord_no", heroes_begin, heroes_end),
  19893. (store_troop_faction, ":lord_faction_no", ":lord_no"),
  19894. (neq, ":lord_faction_no", ":faction_no"),
  19895. (store_relation, ":our_relation", ":lord_faction_no", "fac_player_supporters_faction"),
  19896. (store_relation, ":lord_relation", ":lord_faction_no", ":faction_no"),
  19897. (lt, ":lord_relation", 0),
  19898. (ge, ":our_relation", 0),
  19899. (troop_slot_eq, ":lord_no", slot_troop_occupation, slto_kingdom_hero),
  19900. #(troop_slot_eq, ":lord_no", slot_troop_is_prisoner, 0),
  19901. (neg|troop_slot_ge, ":lord_no", slot_troop_prisoner_of_party, 0),
  19902. (troop_get_slot, ":lord_party", ":lord_no", slot_troop_leaded_party),
  19903. (ge, ":lord_party", 0),
  19904. (party_get_attached_to, ":lord_attachment", ":lord_party"),
  19905. (is_between, ":lord_attachment", centers_begin, centers_end), #is troop in a center?
  19906. (val_add, ":count_lords", 1),
  19907. (try_end),
  19908. (store_random_in_range, ":random_lord", 0, ":count_lords"),
  19909. (assign, ":count_lords", 0),
  19910. (try_for_range, ":lord_no", heroes_begin, heroes_end),
  19911. (eq, ":result", -1),
  19912. (store_troop_faction, ":lord_faction_no", ":lord_no"),
  19913. (neq, ":lord_faction_no", ":faction_no"),
  19914. (store_relation, ":our_relation", ":lord_faction_no", "fac_player_supporters_faction"),
  19915. (store_relation, ":lord_relation", ":lord_faction_no", ":faction_no"),
  19916. (lt, ":lord_relation", 0),
  19917. (ge, ":our_relation", 0),
  19918. (troop_slot_eq, ":lord_no", slot_troop_occupation, slto_kingdom_hero),
  19919. #(troop_slot_eq, ":lord_no", slot_troop_is_prisoner, 0),
  19920. (neg|troop_slot_ge, ":lord_no", slot_troop_prisoner_of_party, 0),
  19921. (troop_get_slot, ":lord_party", ":lord_no", slot_troop_leaded_party),
  19922. (ge, ":lord_party", 0),
  19923. (party_get_attached_to, ":lord_attachment", ":lord_party"),
  19924. (is_between, ":lord_attachment", centers_begin, centers_end), #is troop in a center?
  19925. (val_add, ":count_lords", 1),
  19926. (lt, ":random_lord", ":count_lords"),
  19927. (assign, ":result", ":lord_no"),
  19928. (try_end),
  19929. (neq, ":result", -1),
  19930. (assign, reg0, ":result"),
  19931. ]),
  19932.  
  19933. # script_get_closest_walled_center
  19934. # Input: arg1 = party_no
  19935. # Output: reg0 = center_no (closest)
  19936. ("get_closest_walled_center",
  19937. [
  19938. (store_script_param_1, ":party_no"),
  19939. (assign, ":min_distance", 9999999),
  19940. (assign, reg0, -1),
  19941. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  19942. (store_distance_to_party_from_party, ":party_distance", ":party_no", ":center_no"),
  19943. (lt, ":party_distance", ":min_distance"),
  19944. (assign, ":min_distance", ":party_distance"),
  19945. (assign, reg0, ":center_no"),
  19946. (try_end),
  19947. ]),
  19948.  
  19949. # script_get_closest_center
  19950. # Input: arg1 = party_no
  19951. # Output: reg0 = center_no (closest)
  19952. ("get_closest_center",
  19953. [
  19954. (store_script_param_1, ":party_no"),
  19955. (assign, ":min_distance", 9999999),
  19956. (assign, reg0, -1),
  19957. (try_for_range, ":center_no", centers_begin, centers_end),
  19958. (store_distance_to_party_from_party, ":party_distance", ":party_no", ":center_no"),
  19959. (lt, ":party_distance", ":min_distance"),
  19960. (assign, ":min_distance", ":party_distance"),
  19961. (assign, reg0, ":center_no"),
  19962. (try_end),
  19963. ]),
  19964.  
  19965.  
  19966. # script_get_closest_center_of_faction
  19967. # Input: arg1 = party_no, arg2 = kingdom_no
  19968. # Output: reg0 = center_no (closest)
  19969. ("get_closest_center_of_faction",
  19970. [
  19971. (store_script_param_1, ":party_no"),
  19972. (store_script_param_2, ":kingdom_no"),
  19973. (assign, ":min_distance", 99999),
  19974. (assign, ":result", -1),
  19975. (try_for_range, ":center_no", centers_begin, centers_end),
  19976. (store_faction_of_party, ":faction_no", ":center_no"),
  19977. (eq, ":faction_no", ":kingdom_no"),
  19978. (store_distance_to_party_from_party, ":party_distance", ":party_no", ":center_no"),
  19979. (lt, ":party_distance", ":min_distance"),
  19980. (assign, ":min_distance", ":party_distance"),
  19981. (assign, ":result", ":center_no"),
  19982. (try_end),
  19983. (assign, reg0, ":result"),
  19984. ]),
  19985.  
  19986. # script_get_closest_walled_center_of_faction
  19987. # Input: arg1 = party_no, arg2 = kingdom_no
  19988. # Output: reg0 = center_no (closest)
  19989. ("get_closest_walled_center_of_faction",
  19990. [
  19991. (store_script_param_1, ":party_no"),
  19992. (store_script_param_2, ":kingdom_no"),
  19993. (assign, ":min_distance", 99999),
  19994. (assign, ":result", -1),
  19995. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  19996. (store_faction_of_party, ":faction_no", ":center_no"),
  19997. (eq, ":faction_no", ":kingdom_no"),
  19998. (store_distance_to_party_from_party, ":party_distance", ":party_no", ":center_no"),
  19999. (lt, ":party_distance", ":min_distance"),
  20000. (assign, ":min_distance", ":party_distance"),
  20001. (assign, ":result", ":center_no"),
  20002. (try_end),
  20003. (assign, reg0, ":result"),
  20004. ]),
  20005.  
  20006.  
  20007. ## # script_get_closest_town_of_faction
  20008. ## # Input: arg1 = party_no, arg2 = kingdom_no
  20009. ## # Output: reg0 = center_no (closest)
  20010. ## ("get_closest_town_of_faction",
  20011. ## [
  20012. ## (store_script_param_1, ":party_no"),
  20013. ## (store_script_param_2, ":kingdom_no"),
  20014. ## (assign, ":min_distance", 9999999),
  20015. ## (assign, ":result", -1),
  20016. ## (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  20017. ## (store_faction_of_party, ":faction_no", ":center_no"),
  20018. ## (eq, ":faction_no", ":kingdom_no"),
  20019. ## (party_slot_eq, ":center_no", slot_party_type, spt_town),
  20020. ## (store_distance_to_party_from_party, ":party_distance", ":party_no", ":center_no"),
  20021. ## (lt, ":party_distance", ":min_distance"),
  20022. ## (assign, ":min_distance", ":party_distance"),
  20023. ## (assign, ":result", ":center_no"),
  20024. ## (try_end),
  20025. ## (assign, reg0, ":result"),
  20026. ## ]),
  20027.  
  20028.  
  20029. # script_let_nearby_parties_join_current_battle
  20030. # Input: arg1 = besiege_mode, arg2 = dont_add_friends_other_than_accompanying
  20031. # Output: none
  20032. ("let_nearby_parties_join_current_battle",
  20033. [
  20034. (store_script_param, ":besiege_mode", 1),
  20035. (store_script_param, ":dont_add_friends_other_than_accompanying", 2),
  20036.  
  20037. (store_character_level, ":player_level", "trp_player"),
  20038. (try_for_parties, ":party_no"),
  20039. (party_is_active, ":party_no"),
  20040. (party_get_battle_opponent, ":opponent",":party_no"),
  20041. (lt, ":opponent", 0), #party is not itself involved in a battle
  20042. (party_get_attached_to, ":attached_to",":party_no"),
  20043. (lt, ":attached_to", 0), #party is not attached to another party
  20044. (get_party_ai_behavior, ":behavior", ":party_no"),
  20045. (neq, ":behavior", ai_bhvr_in_town),
  20046.  
  20047. (party_stack_get_troop_id, ":stack_troop", ":party_no", 0),
  20048. (try_begin),
  20049. (neg|is_between, ":stack_troop", "trp_looter", "trp_black_khergit_horseman"),
  20050.  
  20051. (assign, ":join_distance", 5), #day/not bandit
  20052. (try_begin),
  20053. (is_currently_night),
  20054. (assign, ":join_distance", 3), #nigh/not bandit
  20055. (try_end),
  20056. (else_try),
  20057. (assign, ":join_distance", 3), #day/bandit
  20058. (try_begin),
  20059. (is_currently_night),
  20060. (assign, ":join_distance", 2), #night/bandit
  20061. (try_end),
  20062. (try_end),
  20063.  
  20064. #Quest bandits do not join battle
  20065. (this_or_next|neg|check_quest_active, "qst_track_down_bandits"),
  20066. (neg|quest_slot_eq, "qst_track_down_bandits", slot_quest_target_party, ":party_no"),
  20067. (this_or_next|neg|check_quest_active, "qst_troublesome_bandits"),
  20068. (neg|quest_slot_eq, "qst_troublesome_bandits", slot_quest_target_party, ":party_no"),
  20069.  
  20070.  
  20071.  
  20072. (store_distance_to_party_from_party, ":distance", ":party_no", "p_main_party"),
  20073. (lt, ":distance", ":join_distance"),
  20074.  
  20075. (store_faction_of_party, ":faction_no", ":party_no"),
  20076. (store_faction_of_party, ":enemy_faction", "$g_enemy_party"),
  20077. (try_begin),
  20078. (eq, ":faction_no", "fac_player_supporters_faction"),
  20079. (assign, ":reln_with_player", 100),
  20080. (else_try),
  20081. (store_relation, ":reln_with_player", ":faction_no", "fac_player_supporters_faction"),
  20082. (try_end),
  20083. (try_begin),
  20084. (eq, ":faction_no", ":enemy_faction"),
  20085. (assign, ":reln_with_enemy", 100),
  20086. (else_try),
  20087. (store_relation, ":reln_with_enemy", ":faction_no", ":enemy_faction"),
  20088. (try_end),
  20089.  
  20090. (assign, ":enemy_side", 1),
  20091. (try_begin),
  20092. (neq, "$g_enemy_party", "$g_encountered_party"),
  20093. (assign, ":enemy_side", 2),
  20094. (try_end),
  20095.  
  20096. (try_begin),
  20097. (eq, ":besiege_mode", 0),
  20098. (lt, ":reln_with_player", 0),
  20099. (gt, ":reln_with_enemy", 0),
  20100. (party_get_slot, ":party_type", ":party_no"),
  20101.  
  20102. (assign, ":enemy_is_bandit_party_and_level_is_greater_than_6", 0),
  20103. (try_begin),
  20104. (party_stack_get_troop_id, ":stack_troop", ":party_no", 0),
  20105. (is_between, ":stack_troop", "trp_looter", "trp_black_khergit_horseman"),
  20106. (gt, ":player_level", 6),
  20107. (assign, ":enemy_is_bandit_party_and_level_is_greater_than_6", 1),
  20108. (try_end),
  20109.  
  20110. (this_or_next|eq, ":party_type", spt_kingdom_hero_party),
  20111. (eq, ":enemy_is_bandit_party_and_level_is_greater_than_6", 1),
  20112.  
  20113. (get_party_ai_behavior, ":ai_bhvr", ":party_no"),
  20114. (neq, ":ai_bhvr", ai_bhvr_avoid_party),
  20115. (party_quick_attach_to_current_battle, ":party_no", ":enemy_side"), #attach as enemy
  20116. (str_store_party_name, s1, ":party_no"),
  20117. (display_message, "str_s1_joined_battle_enemy"),
  20118. (else_try),
  20119. (try_begin),
  20120. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  20121. (party_slot_eq, ":party_no", slot_party_ai_object, "trp_player"),
  20122. (assign, ":party_is_accompanying_player", 1),
  20123. (else_try),
  20124. (assign, ":party_is_accompanying_player", 0),
  20125. (try_end),
  20126.  
  20127. (this_or_next|eq, ":dont_add_friends_other_than_accompanying", 0),
  20128. (eq, ":party_is_accompanying_player", 1),
  20129. (gt, ":reln_with_player", 0),
  20130. (lt, ":reln_with_enemy", 0),
  20131.  
  20132. (assign, ":following_player", 0),
  20133. (try_begin),
  20134. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  20135. (party_slot_eq, ":party_no", slot_party_ai_object, "p_main_party"),
  20136. (assign, ":following_player", 1),
  20137. (try_end),
  20138.  
  20139. (assign, ":do_join", 1),
  20140. (try_begin),
  20141. (eq, ":besiege_mode", 1),
  20142. (eq, ":following_player", 0),
  20143. (assign, ":do_join", 0),
  20144. (eq, ":faction_no", "$players_kingdom"),
  20145. (faction_slot_eq, "$players_kingdom", slot_faction_marshall, "trp_player"),
  20146. (assign, ":do_join", 1),
  20147. (try_end),
  20148. (eq, ":do_join", 1),
  20149.  
  20150. (party_get_slot, ":party_type", ":party_no"),
  20151. (eq, ":party_type", spt_kingdom_hero_party),
  20152. (party_stack_get_troop_id, ":leader", ":party_no", 0),
  20153. #(troop_get_slot, ":player_relation", ":leader", slot_troop_player_relation),
  20154. (call_script, "script_troop_get_player_relation", ":leader"),
  20155. (assign, ":player_relation", reg0),
  20156.  
  20157. (assign, ":join_even_you_do_not_like_player", 0),
  20158. (try_begin),
  20159. (faction_slot_eq, "$players_kingdom", slot_faction_marshall, "trp_player"), #new added, if player is marshal and if he is accompanying then join battle even lord do not like player
  20160. (eq, ":following_player", 1),
  20161. (assign, ":join_even_you_do_not_like_player", 1),
  20162. (try_end),
  20163.  
  20164. (this_or_next|ge, ":player_relation", 0),
  20165. (eq, ":join_even_you_do_not_like_player", 1),
  20166.  
  20167. (party_quick_attach_to_current_battle, ":party_no", 0), #attach as friend
  20168. (str_store_party_name, s1, ":party_no"),
  20169. (display_message, "str_s1_joined_battle_friend"),
  20170. (try_end),
  20171. (try_end),
  20172. ]),
  20173.  
  20174. # script_party_wound_all_members_aux
  20175. # Input: arg1 = party_no
  20176. ("party_wound_all_members_aux",
  20177. [
  20178. (store_script_param_1, ":party_no"),
  20179.  
  20180. (party_get_num_companion_stacks, ":num_stacks",":party_no"),
  20181. (try_for_range, ":i_stack", 0, ":num_stacks"),
  20182. (party_stack_get_troop_id, ":stack_troop",":party_no",":i_stack"),
  20183. (try_begin),
  20184. (neg|troop_is_hero, ":stack_troop"),
  20185. (party_stack_get_size, ":stack_size",":party_no",":i_stack"),
  20186. (party_wound_members, ":party_no", ":stack_troop", ":stack_size"),
  20187. (else_try),
  20188. (troop_set_health, ":stack_troop", 0),
  20189. (try_end),
  20190. (try_end),
  20191. (party_get_num_attached_parties, ":num_attached_parties", ":party_no"),
  20192. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  20193. (party_get_attached_party_with_rank, ":attached_party", ":party_no", ":attached_party_rank"),
  20194. (call_script, "script_party_wound_all_members_aux", ":attached_party"),
  20195. (try_end),
  20196. ]),
  20197.  
  20198. # script_party_wound_all_members
  20199. # Input: arg1 = party_no
  20200. ("party_wound_all_members",
  20201. [
  20202. (store_script_param_1, ":party_no"),
  20203.  
  20204. (call_script, "script_party_wound_all_members_aux", ":party_no"),
  20205. ]),
  20206.  
  20207.  
  20208.  
  20209. # script_calculate_battle_advantage
  20210. # Output: reg0 = battle advantage
  20211. ("calculate_battle_advantage",
  20212. [
  20213. (call_script, "script_party_count_fit_for_battle", "p_collective_friends"),
  20214. (assign, ":friend_count", reg(0)),
  20215.  
  20216. (party_get_skill_level, ":player_party_tactics", "p_main_party", skl_tactics),
  20217. (party_get_skill_level, ":ally_party_tactics", "p_collective_friends", skl_tactics),
  20218. (val_max, ":player_party_tactics", ":ally_party_tactics"),
  20219.  
  20220. (call_script, "script_party_count_fit_for_battle", "p_collective_enemy"),
  20221. (assign, ":enemy_count", reg(0)),
  20222.  
  20223. (party_get_skill_level, ":enemy_party_tactics", "p_collective_enemy", skl_tactics),
  20224.  
  20225. (val_add, ":friend_count", 1),
  20226. (val_add, ":enemy_count", 1),
  20227.  
  20228. (try_begin),
  20229. (ge, ":friend_count", ":enemy_count"),
  20230. (val_mul, ":friend_count", 100),
  20231. (store_div, ":ratio", ":friend_count", ":enemy_count"),
  20232. (store_sub, ":raw_advantage", ":ratio", 100),
  20233. (else_try),
  20234. (val_mul, ":enemy_count", 100),
  20235. (store_div, ":ratio", ":enemy_count", ":friend_count"),
  20236. (store_sub, ":raw_advantage", 100, ":ratio"),
  20237. (try_end),
  20238. (val_mul, ":raw_advantage", 2),
  20239.  
  20240. (val_mul, ":player_party_tactics", 30),
  20241. (val_mul, ":enemy_party_tactics", 30),
  20242. (val_add, ":raw_advantage", ":player_party_tactics"),
  20243. (val_sub, ":raw_advantage", ":enemy_party_tactics"),
  20244. (val_div, ":raw_advantage", 100),
  20245.  
  20246.  
  20247. (assign, reg0, ":raw_advantage"),
  20248. (display_message, "@Battle Advantage = {reg0}.", 0xFFFFFFFF),
  20249. ]),
  20250.  
  20251.  
  20252. # script_cf_check_enemies_nearby
  20253. # Input: none
  20254. # Output: none, fails when enemies are nearby
  20255. ("cf_check_enemies_nearby",
  20256. [
  20257. (get_player_agent_no, ":player_agent"),
  20258. (agent_is_alive, ":player_agent"),
  20259. (agent_get_position, pos1, ":player_agent"),
  20260. (assign, ":result", 0),
  20261. (set_fixed_point_multiplier, 100),
  20262. (try_for_agents,":cur_agent"),
  20263. (neq, ":cur_agent", ":player_agent"),
  20264. (agent_is_alive, ":cur_agent"),
  20265. (agent_is_human, ":cur_agent"),
  20266. (neg|agent_is_ally, ":cur_agent"),
  20267. (agent_get_position, pos2, ":cur_agent"),
  20268. (get_distance_between_positions, ":cur_distance", pos1, pos2),
  20269. (le, ":cur_distance", 1500), #15 meters
  20270. (assign, ":result", 1),
  20271. (try_end),
  20272. (eq, ":result", 0),
  20273. ]),
  20274.  
  20275. # script_get_heroes_attached_to_center_aux
  20276. # For internal use only
  20277. ("get_heroes_attached_to_center_aux",
  20278. [
  20279. (store_script_param_1, ":center_no"),
  20280. (store_script_param_2, ":party_no_to_collect_heroes"),
  20281. (party_get_num_companion_stacks, ":num_stacks",":center_no"),
  20282. (try_for_range, ":i_stack", 0, ":num_stacks"),
  20283. (party_stack_get_troop_id, ":stack_troop",":center_no",":i_stack"),
  20284. (troop_is_hero, ":stack_troop"),
  20285. (party_add_members, ":party_no_to_collect_heroes", ":stack_troop", 1),
  20286. (try_end),
  20287. (party_get_num_attached_parties, ":num_attached_parties", ":center_no"),
  20288. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  20289. (party_get_attached_party_with_rank, ":attached_party", ":center_no", ":attached_party_rank"),
  20290. (call_script, "script_get_heroes_attached_to_center_aux", ":attached_party", ":party_no_to_collect_heroes"),
  20291. (try_end),
  20292. ]),
  20293.  
  20294. # script_get_heroes_attached_to_center
  20295. # Input: arg1 = center_no, arg2 = party_no_to_collect_heroes
  20296. # Output: none, adds heroes to the party_no_to_collect_heroes party
  20297. ("get_heroes_attached_to_center",
  20298. [
  20299. (store_script_param_1, ":center_no"),
  20300. (store_script_param_2, ":party_no_to_collect_heroes"),
  20301. (party_clear, ":party_no_to_collect_heroes"),
  20302. (call_script, "script_get_heroes_attached_to_center_aux", ":center_no", ":party_no_to_collect_heroes"),
  20303.  
  20304. #rebellion changes begin -Arma
  20305. (try_for_range, ":pretender", pretenders_begin, pretenders_end),
  20306. (neq, ":pretender", "$supported_pretender"),
  20307. (troop_slot_eq, ":pretender", slot_troop_cur_center, ":center_no"),
  20308. (party_add_members, ":party_no_to_collect_heroes", ":pretender", 1),
  20309. (try_end),
  20310.  
  20311. # (try_for_range, ":rebel_faction", rebel_factions_begin, rebel_factions_end),
  20312. # (faction_slot_eq, ":rebel_faction", slot_faction_state, sfs_inactive_rebellion),
  20313. # (faction_slot_eq, ":rebel_faction", slot_faction_inactive_leader_location, ":center_no"),
  20314. # (faction_get_slot, ":pretender", ":rebel_faction", slot_faction_leader),
  20315. # (party_add_members, ":party_no_to_collect_heroes", ":pretender", 1),
  20316. # (try_end),
  20317. #rebellion changes end
  20318.  
  20319.  
  20320. ]),
  20321.  
  20322.  
  20323. # script_get_heroes_attached_to_center_as_prisoner_aux
  20324. # For internal use only
  20325. ("get_heroes_attached_to_center_as_prisoner_aux",
  20326. [
  20327. (store_script_param_1, ":center_no"),
  20328. (store_script_param_2, ":party_no_to_collect_heroes"),
  20329. (party_get_num_prisoner_stacks, ":num_stacks",":center_no"),
  20330. (try_for_range, ":i_stack", 0, ":num_stacks"),
  20331. (party_prisoner_stack_get_troop_id, ":stack_troop",":center_no",":i_stack"),
  20332. (troop_is_hero, ":stack_troop"),
  20333. (party_add_members, ":party_no_to_collect_heroes", ":stack_troop", 1),
  20334. (try_end),
  20335. (party_get_num_attached_parties, ":num_attached_parties", ":center_no"),
  20336. (try_for_range, ":attached_party_rank", 0, ":num_attached_parties"),
  20337. (party_get_attached_party_with_rank, ":attached_party", ":center_no", ":attached_party_rank"),
  20338. (call_script, "script_get_heroes_attached_to_center_as_prisoner_aux", ":attached_party", ":party_no_to_collect_heroes"),
  20339. (try_end),
  20340. ]),
  20341.  
  20342.  
  20343. # script_get_heroes_attached_to_center_as_prisoner
  20344. # Input: arg1 = center_no, arg2 = party_no_to_collect_heroes
  20345. # Output: none, adds heroes to the party_no_to_collect_heroes party
  20346. ("get_heroes_attached_to_center_as_prisoner",
  20347. [
  20348. (store_script_param_1, ":center_no"),
  20349. (store_script_param_2, ":party_no_to_collect_heroes"),
  20350. (party_clear, ":party_no_to_collect_heroes"),
  20351. (call_script, "script_get_heroes_attached_to_center_as_prisoner_aux", ":center_no", ":party_no_to_collect_heroes"),
  20352. ]),
  20353.  
  20354. ##
  20355. ## # script_cf_get_party_leader
  20356. ## # Input: arg1 = party_no
  20357. ## # Output: reg0 = troop_no of the leader (Can fail)
  20358. ## ("cf_get_party_leader",
  20359. ## [
  20360. ## (store_script_param_1, ":party_no"),
  20361. ##
  20362. ## (party_get_num_companion_stacks, ":num_stacks",":party_no"),
  20363. ## (gt, ":num_stacks", 0),
  20364. ## (party_stack_get_troop_id, ":stack_troop", ":party_no", 0),
  20365. ## (troop_is_hero, ":stack_troop"),
  20366. ## (assign, reg0, ":stack_troop"),
  20367. ## ]),
  20368.  
  20369. # script_give_center_to_faction
  20370. # Input: arg1 = center_no, arg2 = faction
  20371. ("give_center_to_faction",
  20372. [
  20373. (store_script_param_1, ":center_no"),
  20374. (store_script_param_2, ":faction_no"),
  20375.  
  20376. (try_begin),
  20377. (eq, ":faction_no", "fac_player_supporters_faction"),
  20378. (faction_get_slot, ":player_faction_king", "fac_player_supporters_faction", slot_faction_leader),
  20379. (eq, ":player_faction_king", "trp_player"),
  20380.  
  20381. (try_begin),
  20382. (is_between, ":center_no", walled_centers_begin, walled_centers_end),
  20383. (assign, ":number_of_walled_centers_players_kingdom_has", 1),
  20384. (else_try),
  20385. (assign, ":number_of_walled_centers_players_kingdom_has", 0),
  20386. (try_end),
  20387.  
  20388. (try_for_range, ":walled_center", walled_centers_begin, walled_centers_end),
  20389. (store_faction_of_party, ":owner_faction_no", ":walled_center"),
  20390. (eq, ":owner_faction_no", "fac_player_supporters_faction"),
  20391. (val_add, ":number_of_walled_centers_players_kingdom_has", 1),
  20392. (try_end),
  20393.  
  20394. (ge, ":number_of_walled_centers_players_kingdom_has", 10),
  20395. (unlock_achievement, ACHIEVEMENT_VICTUM_SEQUENS),
  20396. (try_end),
  20397.  
  20398. (try_begin),
  20399. (check_quest_active, "qst_join_siege_with_army"),
  20400. (quest_slot_eq, "qst_join_siege_with_army", slot_quest_target_center, ":center_no"),
  20401. (call_script, "script_abort_quest", "qst_join_siege_with_army", 0),
  20402. #Reactivating follow army quest
  20403. (faction_get_slot, ":faction_marshall", "$players_kingdom", slot_faction_marshall),
  20404. (str_store_troop_name_link, s9, ":faction_marshall"),
  20405. (setup_quest_text, "qst_follow_army"),
  20406. (str_store_string, s2, "@{s9} wants you to resume following his army until further notice."),
  20407. (call_script, "script_start_quest", "qst_follow_army", ":faction_marshall"),
  20408. (assign, "$g_player_follow_army_warnings", 0),
  20409. (try_end),
  20410.  
  20411. #(store_faction_of_party, ":old_faction", ":center_no"),
  20412. (call_script, "script_give_center_to_faction_aux", ":center_no", ":faction_no"),
  20413. (call_script, "script_update_village_market_towns"),
  20414.  
  20415. (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  20416. (call_script, "script_faction_recalculate_strength", ":cur_faction"),
  20417. (try_end),
  20418. (assign, "$g_recalculate_ais", 1),
  20419.  
  20420. (try_begin),
  20421. (eq, ":faction_no", "fac_player_supporters_faction"),
  20422. (faction_slot_eq, "fac_player_supporters_faction", slot_faction_state, sfs_inactive),
  20423. (call_script, "script_activate_player_faction", "trp_player"),
  20424. (try_end),
  20425.  
  20426. #(call_script, "script_activate_deactivate_player_faction", ":old_faction"),
  20427. #(try_begin),
  20428. #(eq, ":faction_no", "fac_player_supporters_faction"),
  20429. #(faction_slot_eq, "fac_player_supporters_faction", slot_faction_leader, "trp_player"),
  20430. #(call_script, "script_give_center_to_lord", ":center_no", "trp_player", 0),
  20431.  
  20432. #check with Armagan -- what is this here for?
  20433. #(try_for_range, ":cur_village", villages_begin, villages_end),
  20434. #(store_faction_of_party, ":cur_village_faction", ":cur_village"),
  20435. #(eq, ":cur_village_faction", "fac_player_supporters_faction"),
  20436. #(neg|party_slot_eq, ":cur_village", slot_town_lord, "trp_player"),
  20437. #(call_script, "script_give_center_to_lord", ":cur_village", "trp_player", 0),
  20438. #(try_end),
  20439. #(try_end),
  20440. ]),
  20441.  
  20442. # script_give_center_to_faction_aux
  20443. # Input: arg1 = center_no, arg2 = faction
  20444. ("give_center_to_faction_aux",
  20445. [
  20446. (store_script_param_1, ":center_no"),
  20447. (store_script_param_2, ":faction_no"),
  20448.  
  20449. (store_faction_of_party, ":old_faction", ":center_no"),
  20450. (party_set_faction, ":center_no", ":faction_no"),
  20451.  
  20452. (try_begin),
  20453. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  20454. (party_get_slot, ":farmer_party", ":center_no", slot_village_farmer_party),
  20455. (gt, ":farmer_party", 0),
  20456. (party_is_active, ":farmer_party"),
  20457. (party_set_faction, ":farmer_party", ":faction_no"),
  20458. (try_end),
  20459.  
  20460. (try_begin),
  20461. #This bit of seemingly redundant code (the neq condition) is designed to prevent a bug that occurs when a player first conquers a center -- apparently this script is called again AFTER it is handed to a lord
  20462. #Without this line, then the player's dialog selection does not have any affect, because town_lord is set again to stl_unassigned after the player makes his or her choice
  20463. (neq, ":faction_no", ":old_faction"),
  20464.  
  20465. (party_set_slot, ":center_no", slot_center_ex_faction, ":old_faction"),
  20466. (party_get_slot, ":old_town_lord", ":center_no", slot_town_lord),
  20467. (party_set_slot, ":center_no", slot_town_lord, stl_unassigned),
  20468. (party_set_banner_icon, ":center_no", 0),#Removing banner
  20469. (call_script, "script_update_faction_notes", ":old_faction"),
  20470. (try_end),
  20471.  
  20472. (call_script, "script_update_faction_notes", ":faction_no"),
  20473. (call_script, "script_update_center_notes", ":center_no"),
  20474.  
  20475. (try_begin),
  20476. (ge, ":old_town_lord", 0),
  20477. (neq, ":faction_no", "fac_player_supporters_faction"),
  20478. (call_script, "script_update_troop_notes", ":old_town_lord"),
  20479. (try_end),
  20480.  
  20481. (try_for_range, ":other_center", centers_begin, centers_end),
  20482. (party_slot_eq, ":other_center", slot_village_bound_center, ":center_no"),
  20483. (call_script, "script_give_center_to_faction_aux", ":other_center", ":faction_no"),
  20484. (try_end),
  20485. ]),
  20486.  
  20487. # script_change_troop_faction
  20488. # Input: arg1 = troop_no, arg2 = faction
  20489. ("change_troop_faction",
  20490. [
  20491. (store_script_param_1, ":troop_no"),
  20492. (store_script_param_2, ":faction_no"),
  20493. (try_begin),
  20494. #Reactivating inactive or defeated faction
  20495. (is_between, ":faction_no", kingdoms_begin, kingdoms_end),
  20496. (neg|faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  20497. (faction_set_slot, ":faction_no", slot_faction_state, sfs_active),
  20498. #(call_script, "script_store_average_center_value_per_faction"),
  20499. (try_end),
  20500.  
  20501. #Political ramifications
  20502. (store_faction_of_troop, ":orig_faction", ":troop_no"),
  20503.  
  20504. #remove if he is marshal
  20505. (try_begin),
  20506. (faction_slot_eq, ":orig_faction", slot_faction_marshall, ":troop_no"),
  20507. (call_script, "script_check_and_finish_active_army_quests_for_faction", ":orig_faction"),
  20508.  
  20509. #No current issue on the agenda
  20510. (try_begin),
  20511. (faction_slot_eq, ":orig_faction", slot_faction_political_issue, 0),
  20512.  
  20513. (faction_set_slot, ":orig_faction", slot_faction_political_issue, 1), #Appointment of marshal
  20514. (store_current_hours, ":hours"),
  20515. (val_max, ":hours", 0),
  20516. (faction_set_slot, ":orig_faction", slot_faction_political_issue_time, ":hours"), #Appointment of marshal
  20517. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  20518. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  20519. (eq, ":active_npc_faction", ":orig_faction"),
  20520. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  20521. (try_end),
  20522. (try_begin),
  20523. (eq, "$players_kingdom", ":orig_faction"),
  20524. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  20525. (try_end),
  20526. (try_end),
  20527.  
  20528. (try_begin),
  20529. (troop_get_slot, ":old_marshall_party", ":troop_no", slot_troop_leaded_party),
  20530. (party_is_active, ":old_marshall_party"),
  20531. (party_set_marshall, ":old_marshall_party", 0),
  20532. (try_end),
  20533.  
  20534. (faction_set_slot, ":orig_faction", slot_faction_marshall, -1),
  20535. (try_end),
  20536. #Removal as marshal ends
  20537.  
  20538. #Other political ramifications
  20539. (troop_set_slot, ":troop_no", slot_troop_stance_on_faction_issue, -1),
  20540. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  20541. (troop_slot_eq, ":active_npc", slot_troop_stance_on_faction_issue, ":troop_no"),
  20542. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  20543. (try_end),
  20544. #Political ramifications end
  20545.  
  20546.  
  20547. (try_begin),
  20548. (ge, "$cheat_mode", 1),
  20549. (str_store_troop_name, s4, ":troop_no"),
  20550. (display_message, "@{!}DEBUG - {s4} faction changed in normal faction change"),
  20551. (try_end),
  20552.  
  20553. (troop_set_faction, ":troop_no", ":faction_no"),
  20554. (troop_set_slot, ":troop_no", slot_troop_recruitment_random, 0),
  20555. (troop_set_slot, ":troop_no", slot_lord_recruitment_argument, 0),
  20556. (troop_set_slot, ":troop_no", slot_lord_recruitment_candidate, 0),
  20557. (troop_set_slot, ":troop_no", slot_troop_promised_fief, 0),
  20558.  
  20559. #Give new title
  20560. (call_script, "script_troop_set_title_according_to_faction", ":troop_no", ":faction_no"),
  20561.  
  20562. (try_begin),
  20563. (this_or_next|eq, ":faction_no", "$players_kingdom"),
  20564. (eq, ":faction_no", "fac_player_supporters_faction"),
  20565. (call_script, "script_check_concilio_calradi_achievement"),
  20566. (try_end),
  20567.  
  20568. #Takes walled centers and dependent villages with him
  20569. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  20570. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  20571. (party_set_faction, ":center_no", ":faction_no"),
  20572. (try_for_range, ":village_no", villages_begin, villages_end),
  20573. (party_slot_eq, ":village_no", slot_village_bound_center, ":center_no"),
  20574. (party_set_faction, ":village_no", ":faction_no"),
  20575. (party_get_slot, ":farmer_party_no", ":village_no", slot_village_farmer_party),
  20576. (try_begin),
  20577. (gt, ":farmer_party_no", 0),
  20578. (party_is_active, ":farmer_party_no"),
  20579. (party_set_faction, ":farmer_party_no", ":faction_no"),
  20580. (try_end),
  20581. (try_begin),
  20582. (party_get_slot, ":old_town_lord", ":village_no", slot_town_lord),
  20583. (neq, ":old_town_lord", ":troop_no"),
  20584. (party_set_slot, ":village_no", slot_town_lord, stl_unassigned),
  20585. (try_end),
  20586. (try_end),
  20587. (try_end),
  20588.  
  20589. #Dependant kingdom ladies switch faction
  20590. (try_for_range, ":kingdom_lady", kingdom_ladies_begin, kingdom_ladies_end),
  20591. (call_script, "script_get_kingdom_lady_social_determinants", ":kingdom_lady"),
  20592. (assign, ":closest_male_relative", reg0),
  20593. (assign, ":new_center", reg1),
  20594.  
  20595. (eq, ":closest_male_relative", ":troop_no"),
  20596.  
  20597. (try_begin),
  20598. (ge, "$cheat_mode", 1),
  20599. (str_store_troop_name, s4, ":kingdom_lady"),
  20600. (display_message, "@{!}DEBUG - {s4} faction changed by guardian moving"),
  20601. (try_end),
  20602.  
  20603. (troop_set_faction, ":kingdom_lady", ":faction_no"),
  20604. (troop_slot_eq, ":kingdom_lady", slot_troop_prisoner_of_party, -1),
  20605. (troop_set_slot, ":kingdom_lady", slot_troop_cur_center, ":new_center"),
  20606. (try_end),
  20607.  
  20608. #Remove his control over villages under another fortress
  20609. (try_for_range, ":village_no", villages_begin, villages_end),
  20610. (party_slot_eq, ":village_no", slot_town_lord, ":troop_no"),
  20611. (store_faction_of_party, ":village_faction", ":village_no"),
  20612. (try_begin),
  20613. (neq, ":village_faction", ":faction_no"),
  20614. (party_set_slot, ":village_no", slot_town_lord, stl_unassigned),
  20615. (try_end),
  20616. (try_end),
  20617.  
  20618. #Free prisoners
  20619. (try_begin),
  20620. (troop_get_slot, ":leaded_party", ":troop_no", slot_troop_leaded_party),
  20621. (gt, ":leaded_party", 0),
  20622. (party_set_faction, ":leaded_party", ":faction_no"),
  20623. (party_get_num_prisoner_stacks, ":num_stacks", ":leaded_party"),
  20624. (try_for_range_backwards, ":troop_iterator", 0, ":num_stacks"),
  20625. (party_prisoner_stack_get_troop_id, ":cur_troop_id", ":leaded_party", ":troop_iterator"),
  20626. (store_troop_faction, ":cur_faction", ":cur_troop_id"),
  20627. (troop_is_hero, ":cur_troop_id"),
  20628. (eq, ":cur_faction", ":faction_no"),
  20629. (call_script, "script_remove_troop_from_prison", ":cur_troop_id"),
  20630. (party_remove_prisoners, ":leaded_party", ":cur_troop_id", 1),
  20631. (try_end),
  20632. (try_end),
  20633.  
  20634. #Annull all quests of which the lord is giver
  20635. (try_for_range, ":quest", all_quests_begin, all_quests_end),
  20636. (check_quest_active, ":quest"),
  20637. (quest_slot_eq, ":quest", slot_quest_giver_troop, ":troop_no"),
  20638.  
  20639. (str_store_troop_name, s4, ":troop_no"),
  20640. (try_begin),
  20641. (eq, "$cheat_mode", 1),
  20642. (display_message, "str_s4_changing_sides_aborts_quest"),
  20643. (try_end),
  20644. (call_script, "script_abort_quest", ":quest", 0),
  20645. (try_end),
  20646.  
  20647. #Boot all lords out of centers whose faction has changed
  20648. (try_for_range, ":lord_to_move", active_npcs_begin, active_npcs_end),
  20649. (troop_get_slot, ":lord_led_party", ":lord_to_move", slot_troop_leaded_party),
  20650. (party_is_active, ":lord_led_party"),
  20651. (party_get_attached_to, ":led_party_attached", ":lord_led_party"),
  20652. (is_between, ":led_party_attached", walled_centers_begin, walled_centers_end),
  20653. (store_faction_of_party, ":led_party_faction", ":lord_led_party"),
  20654. (store_faction_of_party, ":attached_party_faction", ":led_party_attached"),
  20655. (neq, ":led_party_faction", ":attached_party_faction"),
  20656.  
  20657. (party_detach, ":lord_led_party"),
  20658. (try_end),
  20659.  
  20660. #Increase relation with lord in new faction by 5
  20661. #Or, if player kingdom, make inactive pending confirmation
  20662. (faction_get_slot, ":faction_liege", ":faction_no", slot_faction_leader),
  20663. (try_begin),
  20664. (eq, ":faction_liege", "trp_player"),
  20665. (neq, ":troop_no", "$g_talk_troop"),
  20666. (troop_set_slot, ":troop_no", slot_troop_occupation, slto_inactive), #POSSIBLE REASON 1
  20667. (else_try),
  20668. (is_between, ":faction_liege", active_npcs_begin, active_npcs_end),
  20669. (is_between, ":troop_no", active_npcs_begin, active_npcs_end),
  20670. (call_script, "script_troop_change_relation_with_troop", ":faction_liege", ":troop_no", 5),
  20671. (val_add, "$total_indictment_changes", 5),
  20672. (try_end),
  20673.  
  20674. #Break courtship relations
  20675. (try_begin),
  20676. (troop_slot_ge, ":troop_no", slot_troop_spouse, 0),
  20677. #Already married, do nothing
  20678. (else_try),
  20679. (is_between, ":troop_no", active_npcs_begin, active_npcs_end),
  20680. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  20681. (troop_get_slot, ":courted_lady", ":troop_no", ":love_interest_slot"),
  20682. (call_script, "script_courtship_event_lady_break_relation_with_suitor", ":courted_lady", ":troop_no"),
  20683. (try_end),
  20684. (call_script, "script_assign_troop_love_interests", ":troop_no"),
  20685. (else_try),
  20686. (is_between, ":troop_no", kingdom_ladies_begin, kingdom_ladies_end),
  20687. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  20688. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  20689. (troop_slot_eq, ":active_npc", ":love_interest_slot", ":troop_no"),
  20690. (call_script, "script_courtship_event_lady_break_relation_with_suitor", ":troop_no", ":active_npc"),
  20691. (try_end),
  20692. (try_end),
  20693. (try_end),
  20694.  
  20695. #Stop raidings/sieges of new faction's fief if there is any
  20696. (troop_get_slot, ":troop_party", ":troop_no", slot_troop_leaded_party),
  20697. (try_for_range, ":center_no", centers_begin, centers_end),
  20698. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  20699. (party_get_slot, ":raided_by", ":center_no", slot_village_raided_by),
  20700. (eq, ":raided_by", ":troop_party"),
  20701. (party_set_slot, ":center_no", slot_village_raided_by, -1),
  20702. (try_begin),
  20703. (party_slot_eq, ":center_no", slot_village_state, svs_being_raided),
  20704. (party_set_slot, ":center_no", slot_village_state, svs_normal),
  20705. (party_set_extra_text, ":center_no", "str_empty_string"),
  20706. (try_end),
  20707. (else_try),
  20708. (party_get_slot, ":besieged_by", ":center_no", slot_center_is_besieged_by),
  20709. (eq, ":besieged_by", ":troop_party"),
  20710. (party_set_slot, ":center_no", slot_center_is_besieged_by, -1),
  20711. (try_begin),
  20712. (party_slot_eq, ":center_no", slot_village_state, svs_under_siege),
  20713. (party_set_slot, ":center_no", slot_village_state, svs_normal),
  20714. (party_set_extra_text, ":center_no", "str_empty_string"),
  20715. (try_end),
  20716. (try_end),
  20717.  
  20718. (call_script, "script_update_all_notes"),
  20719.  
  20720. (call_script, "script_update_village_market_towns"),
  20721. (assign, "$g_recalculate_ais", 1),
  20722. ]),
  20723.  
  20724. # script_troop_set_title_according_to_faction
  20725. # Input: arg1 = troop_no, arg2 = faction_no
  20726. ("troop_set_title_according_to_faction",
  20727. [
  20728. (store_script_param, ":troop_no", 1),
  20729. (store_script_param, ":faction_no", 2),
  20730. (try_begin),
  20731. (is_between, ":faction_no", kingdoms_begin, kingdoms_end),
  20732. (str_store_troop_name_plural, s0, ":troop_no"),
  20733. (troop_get_type, ":gender", ":troop_no"),
  20734. (store_sub, ":title_index", ":faction_no", kingdoms_begin),
  20735. (try_begin),
  20736. (eq, ":gender", 0), #male
  20737. (val_add, ":title_index", kingdom_titles_male_begin),
  20738. (else_try),
  20739. (val_add, ":title_index", kingdom_titles_female_begin),
  20740. (try_end),
  20741. (str_store_string, s1, ":title_index"),
  20742. (troop_set_name, ":troop_no", s1),
  20743. (troop_get_slot, ":troop_party", ":troop_no", slot_troop_leaded_party),
  20744. (gt, ":troop_party", 0),
  20745. (str_store_troop_name, s5, ":troop_no"),
  20746. (party_set_name, ":troop_party", "str_s5_s_party"),
  20747. (try_end),
  20748. ]),
  20749.  
  20750. # script_give_center_to_lord
  20751. # Input: arg1 = center_no, arg2 = lord_troop, arg3 = add_garrison_to_center
  20752. ("give_center_to_lord",
  20753. [
  20754. (store_script_param, ":center_no", 1),
  20755. (store_script_param, ":lord_troop_id", 2), #-1 only in the case of a player deferring ownership of a center
  20756. (store_script_param, ":add_garrison", 3),
  20757.  
  20758. (try_begin),
  20759. (eq, "$cheat_mode", 1),
  20760. (ge, ":lord_troop_id", 0),
  20761. (str_store_party_name, s4, ":center_no"),
  20762. (str_store_troop_name, s5, ":lord_troop_id"),
  20763. (display_message, "@{!}DEBUG -- {s4} awarded to {s5}"),
  20764. (try_end),
  20765.  
  20766. (try_begin),
  20767. (eq, ":lord_troop_id", "trp_player"),
  20768. (unlock_achievement, ACHIEVEMENT_ROYALITY_PAYMENT),
  20769.  
  20770. (assign, ":number_of_fiefs_player_have", 1),
  20771. (try_for_range, ":cur_center", centers_begin, centers_end),
  20772. (neq, ":cur_center", ":center_no"),
  20773. (party_slot_eq, ":cur_center", slot_town_lord, "trp_player"),
  20774. (val_add, ":number_of_fiefs_player_have", 1),
  20775. (try_end),
  20776.  
  20777. (ge, ":number_of_fiefs_player_have", 5),
  20778. (unlock_achievement, ACHIEVEMENT_MEDIEVAL_EMLAK),
  20779. (try_end),
  20780.  
  20781. (party_get_slot, ":old_lord_troop_id", ":center_no", slot_town_lord),
  20782.  
  20783. (try_begin), #This script is ONLY called with lord_troop_id = -1 when it is the player faction
  20784. (eq, ":lord_troop_id", -1),
  20785. (assign, ":lord_troop_faction", "fac_player_supporters_faction"),
  20786. (party_set_banner_icon, ":center_no", 0),#Removing banner
  20787.  
  20788. (else_try),
  20789. (eq, ":lord_troop_id", "trp_player"),
  20790. (assign, ":lord_troop_faction", "$players_kingdom"), #was changed on Apr 27 from fac_plyr_sup_fac
  20791.  
  20792. (else_try),
  20793. (store_troop_faction, ":lord_troop_faction", ":lord_troop_id"),
  20794. (try_end),
  20795. (faction_get_slot, ":faction_leader", ":lord_troop_faction", slot_faction_leader),
  20796.  
  20797. (try_begin),
  20798. (eq, ":faction_leader", "trp_player"),
  20799.  
  20800. (try_begin),
  20801. (troop_get_type, ":is_female", "trp_player"),
  20802. (eq, ":is_female", 1),
  20803. (unlock_achievement, ACHIEVEMENT_QUEEN),
  20804. (try_end),
  20805. (try_end),
  20806.  
  20807. (try_begin),
  20808. (eq, ":faction_leader", ":old_lord_troop_id"),
  20809. (call_script, "script_add_log_entry", logent_liege_grants_fief_to_vassal, ":faction_leader", ":center_no", ":lord_troop_id", ":lord_troop_faction"),
  20810. (troop_set_slot, ":lord_troop_id", slot_troop_promised_fief, 0),
  20811. (try_end),
  20812.  
  20813. (try_begin),
  20814. (eq, ":lord_troop_id", -1), #Lord troop ID -1 is only used when a player is deferring assignment of a fief
  20815. (party_set_faction, ":center_no", "$players_kingdom"),
  20816. (else_try),
  20817. (eq, ":lord_troop_id", "trp_player"),
  20818. (gt, "$players_kingdom", 0),
  20819. (party_set_faction, ":center_no", "$players_kingdom"),
  20820. (else_try),
  20821. (eq, ":lord_troop_id", "trp_player"),
  20822. (neg|is_between, "$players_kingdom", kingdoms_begin, kingdoms_end),
  20823. (party_set_faction, ":center_no", "fac_player_supporters_faction"),
  20824. (else_try),
  20825. (party_set_faction, ":center_no", ":lord_troop_faction"),
  20826. (try_end),
  20827. (party_set_slot, ":center_no", slot_town_lord, ":lord_troop_id"),
  20828.  
  20829. (try_begin),
  20830. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  20831. (party_get_slot, ":farmer_party_no", ":center_no", slot_village_farmer_party),
  20832. (gt, ":farmer_party_no", 0),
  20833. (party_is_active, ":farmer_party_no"),
  20834. (store_faction_of_party, ":center_faction", ":center_no"),
  20835. (party_set_faction, ":farmer_party_no", ":center_faction"),
  20836. (try_end),
  20837.  
  20838. (try_begin),
  20839. (this_or_next|party_slot_eq, ":center_no", slot_party_type, spt_town),
  20840. (party_slot_eq, ":center_no", slot_party_type, spt_castle),
  20841. (gt, ":lord_troop_id", -1),
  20842.  
  20843. #normal_banner_begin
  20844. (troop_get_slot, ":cur_banner", ":lord_troop_id", slot_troop_banner_scene_prop),
  20845. (gt, ":cur_banner", 0),
  20846. (val_sub, ":cur_banner", banner_scene_props_begin),
  20847. (val_add, ":cur_banner", banner_map_icons_begin),
  20848. (party_set_banner_icon, ":center_no", ":cur_banner"),
  20849. # custom_banner_begin
  20850. # (troop_get_slot, ":flag_icon", ":lord_troop_id", slot_troop_custom_banner_map_flag_type),
  20851. # (ge, ":flag_icon", 0),
  20852. # (val_add, ":flag_icon", custom_banner_map_icons_begin),
  20853. # (party_set_banner_icon, ":center_no", ":flag_icon"),
  20854. (try_end),
  20855.  
  20856. # (try_begin),
  20857. # (eq, 1, 0),
  20858. # (eq, ":lord_troop_id", "trp_player"),
  20859. # (neq, ":old_lord_troop_id", "trp_player"),
  20860. # (party_get_slot, ":center_relation", ":center_no", slot_center_player_relation),
  20861. # (is_between, ":center_relation", -4, 5),
  20862. # (call_script, "script_change_player_relation_with_center", ":center_no", 5),
  20863. # (gt, ":old_lord_troop_id", 0),
  20864. # (call_script, "script_change_player_relation_with_troop", ":old_lord_troop_id", -25),
  20865. # (try_end),
  20866. (try_begin),
  20867. (gt, ":lord_troop_id", -1),
  20868. (call_script, "script_update_troop_notes", ":lord_troop_id"),
  20869. (try_end),
  20870.  
  20871. (call_script, "script_update_center_notes", ":center_no"),
  20872.  
  20873. (try_begin),
  20874. (gt, ":lord_troop_faction", 0),
  20875. (call_script, "script_update_faction_notes", ":lord_troop_faction"),
  20876. (try_end),
  20877.  
  20878. (try_begin),
  20879. (ge, ":old_lord_troop_id", 0),
  20880. (call_script, "script_update_troop_notes", ":old_lord_troop_id"),
  20881. (store_troop_faction, ":old_lord_troop_faction", ":old_lord_troop_id"),
  20882. (call_script, "script_update_faction_notes", ":old_lord_troop_faction"),
  20883. (try_end),
  20884.  
  20885. (try_begin),
  20886. (eq, ":add_garrison", 1),
  20887. (this_or_next|party_slot_eq, ":center_no", slot_party_type, spt_town),
  20888. (party_slot_eq, ":center_no", slot_party_type, spt_castle),
  20889. (assign, ":garrison_strength", 3),
  20890. (try_begin),
  20891. (party_slot_eq, ":center_no", slot_party_type, spt_town),
  20892. (assign, ":garrison_strength", 9),
  20893. (try_end),
  20894. (try_for_range, ":unused", 0, ":garrison_strength"),
  20895. (call_script, "script_cf_reinforce_party", ":center_no"),
  20896. (try_end),
  20897. ## ADD some XP initially
  20898. (try_for_range, ":unused", 0, 7),
  20899. (store_mul, ":xp_range_min", 150, ":garrison_strength"),
  20900. (store_mul, ":xp_range_max", 200, ":garrison_strength"),
  20901. (store_random_in_range, ":xp", ":xp_range_min", ":xp_range_max"),
  20902. (party_upgrade_with_xp, ":center_no", ":xp", 0),
  20903. (try_end),
  20904. (try_end),
  20905.  
  20906. (faction_get_slot, ":faction_leader", ":lord_troop_faction", slot_faction_leader),
  20907. (store_current_hours, ":hours"),
  20908.  
  20909. #the next block handles gratitude, objections and jealousies
  20910. (try_begin),
  20911. (gt, ":hours", 0),
  20912. (gt, ":lord_troop_id", 0),
  20913.  
  20914. (call_script, "script_troop_change_relation_with_troop", ":lord_troop_id", ":faction_leader", 10),
  20915. (val_add, "$total_promotion_changes", 10),
  20916.  
  20917. #smaller factions are more dramatically influenced by internal jealousies
  20918. #Disabled as of NOV 2010
  20919. # (try_begin),
  20920. # (neg|faction_slot_ge, ":lord_troop_faction", slot_faction_number_of_parties, 4),
  20921. # (assign, ":faction_size_multiplier", 6),
  20922. # (else_try),
  20923. # (neg|faction_slot_ge, ":lord_troop_faction", slot_faction_number_of_parties, 8),
  20924. # (assign, ":faction_size_multiplier", 5),
  20925. # (else_try),
  20926. # (neg|faction_slot_ge, ":lord_troop_faction", slot_faction_number_of_parties, 16),
  20927. # (assign, ":faction_size_multiplier", 4),
  20928. # (else_try),
  20929. # (neg|faction_slot_ge, ":lord_troop_faction", slot_faction_number_of_parties, 32),
  20930. # (assign, ":faction_size_multiplier", 3),
  20931. # (else_try),
  20932. # (assign, ":faction_size_multiplier", 2),
  20933. # (try_end),
  20934.  
  20935. #factional politics -- each lord in the faction adjusts his relation according to the relation with the lord receiving the faction
  20936. (try_for_range, ":other_lord", active_npcs_begin, active_npcs_end),
  20937. (troop_slot_eq, ":other_lord", slot_troop_occupation, slto_kingdom_hero),
  20938. (neq, ":other_lord", ":lord_troop_id"),
  20939.  
  20940. (store_troop_faction, ":other_troop_faction", ":other_lord"),
  20941. (eq, ":lord_troop_faction", ":other_troop_faction"),
  20942.  
  20943. (neq, ":other_lord", ":faction_leader"),
  20944.  
  20945. (call_script, "script_troop_get_relation_with_troop", ":other_lord", ":lord_troop_id"),
  20946. (assign, ":relation_with_troop", reg0),
  20947.  
  20948. #relation reduction = relation/10 minus 2. So,0 = -2, 8 = -1, 16+ = no change or bonus, 24+ gain one point
  20949. (store_div, ":relation_with_liege_change", ":relation_with_troop", 8), #changed from 16
  20950. (val_sub, ":relation_with_liege_change", 2),
  20951.  
  20952. (val_clamp, ":relation_with_liege_change", -5, 3),
  20953.  
  20954. (try_begin),
  20955. #upstanding and goodnatured lords will not lose relation unless they actively dislike the other lord
  20956. (this_or_next|troop_slot_eq, ":other_lord", slot_lord_reputation_type, lrep_upstanding),
  20957. (troop_slot_eq, ":other_lord", slot_lord_reputation_type, lrep_goodnatured),
  20958. (ge, ":relation_with_troop", 0),
  20959. (val_max, ":relation_with_liege_change", 0),
  20960. (else_try),
  20961. #penalty is increased for lords who have the more unpleasant reputation types
  20962. (this_or_next|troop_slot_eq, ":other_lord", slot_lord_reputation_type, lrep_selfrighteous),
  20963. (this_or_next|troop_slot_eq, ":other_lord", slot_lord_reputation_type, lrep_debauched),
  20964. (troop_slot_eq, ":other_lord", slot_lord_reputation_type, lrep_quarrelsome),
  20965. (lt, ":relation_with_liege_change", 0),
  20966. (val_mul, ":relation_with_liege_change", 3),
  20967. (val_div, ":relation_with_liege_change", 2),
  20968. (try_end),
  20969.  
  20970.  
  20971. (neq, ":relation_with_liege_change", 0),
  20972. #removed Nov 2010
  20973. # (val_mul, ":relation_reduction", ":faction_size_multiplier"),
  20974. # (val_div, ":relation_reduction", 2),
  20975. #removed Nov 2010
  20976.  
  20977. (try_begin),
  20978. (troop_slot_eq, ":other_lord", slot_troop_stance_on_faction_issue, ":lord_troop_id"),
  20979. (val_add, ":relation_with_liege_change", 1),
  20980. (val_max, ":relation_with_liege_change", 1),
  20981. (try_end),
  20982.  
  20983. (call_script, "script_troop_change_relation_with_troop", ":other_lord", ":faction_leader", ":relation_with_liege_change"),
  20984. (val_add, "$total_promotion_changes", ":relation_with_liege_change"),
  20985.  
  20986. (try_begin),
  20987. (this_or_next|le, ":relation_with_liege_change", -4), #Nov 2010 - changed from -8
  20988. (this_or_next|troop_slot_eq, ":other_lord", slot_troop_promised_fief, 1), #1 is any fief
  20989. (troop_slot_eq, ":other_lord", slot_troop_promised_fief, ":center_no"),
  20990. (call_script, "script_add_log_entry", logent_troop_feels_cheated_by_troop_over_land, ":other_lord", ":center_no", ":lord_troop_id", ":lord_troop_faction"),
  20991. (try_end),
  20992.  
  20993. (try_end),
  20994. (try_end),
  20995.  
  20996. #Villages from another faction will also be transferred along with a fortress
  20997. (try_begin),
  20998. (is_between, ":center_no", walled_centers_begin, walled_centers_end),
  20999. (try_for_range, ":cur_village", villages_begin, villages_end),
  21000. (party_slot_eq, ":cur_village", slot_village_bound_center, ":center_no"),
  21001. (store_faction_of_party, ":cur_village_faction", ":cur_village"),
  21002. (neq, ":cur_village_faction", ":lord_troop_faction"),
  21003.  
  21004. (call_script, "script_give_center_to_lord", ":cur_village", ":lord_troop_id", 0),
  21005. (try_end),
  21006. (try_end),
  21007. ]),
  21008.  
  21009. ## # script_give_town_to_besiegers
  21010. ## # Input: arg1 = center_no, arg2 = besieger_party
  21011. ## ("give_town_to_besiegers",
  21012. ## [
  21013. ## (store_script_param_1, ":center_no"),
  21014. ## (store_script_param_2, ":besieger_party"),
  21015. ## (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  21016. ##
  21017. ## (try_begin),
  21018. ## (call_script, "script_cf_get_party_leader", ":besieger_party"),
  21019. ## (assign, ":new_leader", reg0),
  21020. ## (else_try),
  21021. ## (call_script, "script_select_kingdom_hero_for_new_center", ":besieger_faction"),
  21022. ## (assign, ":new_leader", reg0),
  21023. ## (try_end),
  21024. ##
  21025. ## (call_script, "script_give_center_to_lord", ":center_no", ":new_leader"),
  21026. ##
  21027. ## (try_for_parties, ":party_no"),
  21028. ## (get_party_ai_object, ":object", ":party_no"),
  21029. ## (get_party_ai_behavior, ":behavior", ":party_no"),
  21030. ## (eq, ":object", ":center_no"),
  21031. ## (this_or_next|eq, ":behavior", ai_bhvr_travel_to_party),
  21032. ## (eq, ":behavior", ai_bhvr_attack_party),
  21033. ## (party_set_ai_behavior, ":party_no", ai_bhvr_hold),
  21034. ## (party_set_slot, ":party_no", slot_party_ai_state, spai_undefined),
  21035. ## (party_set_flags, ":party_no", pf_default_behavior, 0),
  21036. ## (try_end),
  21037. ##
  21038. ## #Staying at the center for a while
  21039. ## (party_set_ai_behavior, ":besieger_party", ai_bhvr_hold),
  21040. ## (party_set_slot, ":besieger_party", slot_party_ai_state, spai_undefined),
  21041. ## (party_set_flags, ":besieger_party", pf_default_behavior, 0),
  21042. ##
  21043. ## (faction_get_slot, ":reinforcement_a", ":besieger_faction", slot_faction_reinforcements_a),
  21044. ## (faction_get_slot, ":reinforcement_b", ":besieger_faction", slot_faction_reinforcements_b),
  21045. ## (party_add_template, ":center_no", ":reinforcement_a"),
  21046. ## (party_add_template, ":center_no", ":reinforcement_b"),
  21047. ## ]),
  21048. ##
  21049.  
  21050. # script_get_number_of_hero_centers
  21051. # Input: arg1 = troop_no
  21052. # Output: reg0 = number of centers that are ruled by the hero
  21053. ("get_number_of_hero_centers",
  21054. [
  21055. (store_script_param_1, ":troop_no"),
  21056. (assign, ":result", 0),
  21057. (try_for_range, ":center_no", centers_begin, centers_end),
  21058. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  21059. (val_add, ":result", 1),
  21060. (try_end),
  21061. (assign, reg0, ":result"),
  21062. ]),
  21063.  
  21064.  
  21065. ## # script_cf_get_new_center_leader_chance_for_troop
  21066. ## # Input: arg1 = troop_no
  21067. ## # Output: reg0 = chance of the troop to rule a new center
  21068. ## ("cf_get_new_center_leader_chance_for_troop",
  21069. ## [
  21070. ## (store_script_param_1, ":troop_no"),
  21071. ## (troop_get_slot, ":troop_rank", ":troop_no", slot_troop_kingdom_rank),
  21072. ## (try_begin),
  21073. ## (eq, ":troop_rank", 4),
  21074. ## (assign, ":troop_chance", 1000),
  21075. ## (else_try),
  21076. ## (eq, ":troop_rank", 3),
  21077. ## (assign, ":troop_chance", 800),
  21078. ## (else_try),
  21079. ## (eq, ":troop_rank", 2),
  21080. ## (assign, ":troop_chance", 400),
  21081. ## (else_try),
  21082. ## (eq, ":troop_rank", 1),
  21083. ## (assign, ":troop_chance", 100),
  21084. ## (else_try),
  21085. ## (assign, ":troop_chance", 10),
  21086. ## (try_end),
  21087. ##
  21088. ## (call_script, "script_get_number_of_hero_centers", ":troop_no"),
  21089. ## (assign, ":number_of_hero_centers", reg0),
  21090. ## (try_begin),
  21091. ## (gt, ":number_of_hero_centers", 0),
  21092. ## (val_mul, ":number_of_hero_centers", 2),
  21093. ## (val_mul, ":number_of_hero_centers", ":number_of_hero_centers"),
  21094. ## (val_div, ":troop_chance", ":number_of_hero_centers"),
  21095. ## (try_end),
  21096. ## (assign, reg0, ":troop_chance"),
  21097. ## (eq, reg0, 0),
  21098. ## (assign, reg0, 1),
  21099. ## ]),
  21100.  
  21101.  
  21102. ## # script_select_kingdom_hero_for_new_center
  21103. ## # Input: arg1 = faction_no
  21104. ## # Output: reg0 = troop_no as the new leader
  21105. ## ("select_kingdom_hero_for_new_center",
  21106. ## [
  21107. ## (store_script_param_1, ":kingdom"),
  21108. ##
  21109. ## (assign, ":min_num_centers", -1),
  21110. ## (assign, ":min_num_centers_troop", -1),
  21111. ##
  21112. ## (try_for_range, ":troop_no", kingdom_heroes_begin, kingdom_heroes_end),
  21113. ## (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  21114. ## (store_troop_faction, ":troop_faction", ":troop_no"),
  21115. ## (eq, ":troop_faction", ":kingdom"),
  21116. ## (call_script, "script_get_number_of_hero_centers", ":troop_no"),
  21117. ## (assign, ":num_centers", reg0),
  21118. ## (try_begin),
  21119. ## (lt, ":num_centers", ":min_num_centers"),
  21120. ## (assign, ":min_num_centers", ":num_centers"),
  21121. ## (assign, ":min_num_centers_troop", ":troop_no"),
  21122. ## (try_end),
  21123. ## (try_end),
  21124. ## (assign, reg0, ":min_num_centers_troop"),
  21125. ## ]),
  21126.  
  21127.  
  21128. # script_cf_get_random_enemy_center
  21129. # Input: arg1 = party_no
  21130. # Output: reg0 = center_no
  21131. ("cf_get_random_enemy_center",
  21132. [
  21133. (store_script_param_1, ":party_no"),
  21134.  
  21135. (assign, ":result", -1),
  21136. (assign, ":total_enemy_centers", 0),
  21137. (store_faction_of_party, ":party_faction", ":party_no"),
  21138.  
  21139. (try_for_range, ":center_no", centers_begin, centers_end),
  21140. (store_faction_of_party, ":center_faction", ":center_no"),
  21141. (store_relation, ":party_relation", ":center_faction", ":party_faction"),
  21142. (lt, ":party_relation", 0),
  21143. (val_add, ":total_enemy_centers", 1),
  21144. (try_end),
  21145.  
  21146. (gt, ":total_enemy_centers", 0),
  21147. (store_random_in_range, ":random_center", 0, ":total_enemy_centers"),
  21148. (assign, ":total_enemy_centers", 0),
  21149. (try_for_range, ":center_no", centers_begin, centers_end),
  21150. (eq, ":result", -1),
  21151. (store_faction_of_party, ":center_faction", ":center_no"),
  21152. (store_relation, ":party_relation", ":center_faction", ":party_faction"),
  21153. (lt, ":party_relation", 0),
  21154. (val_sub, ":random_center", 1),
  21155. (lt, ":random_center", 0),
  21156. (assign, ":result", ":center_no"),
  21157. (try_end),
  21158. (assign, reg0, ":result"),
  21159. ]),
  21160.  
  21161.  
  21162. ## # script_get_random_enemy_town
  21163. ## # Input: arg1 = party_no
  21164. ## # Output: reg0 = center_no
  21165. ## ("get_random_enemy_town",
  21166. ## [
  21167. ## (store_script_param_1, ":party_no"),
  21168. ##
  21169. ## (assign, ":result", -1),
  21170. ## (assign, ":total_enemy_centers", 0),
  21171. ## (store_faction_of_party, ":party_faction", ":party_no"),
  21172. ##
  21173. ## (try_for_range, ":center_no", towns_begin, towns_end),
  21174. ## (store_faction_of_party, ":center_faction", ":center_no"),
  21175. ## (neq, ":center_faction", ":party_faction"),
  21176. ## (val_add, ":total_enemy_centers", 1),
  21177. ## (try_end),
  21178. ##
  21179. ## (try_begin),
  21180. ## (eq, ":total_enemy_centers", 0),
  21181. ## (else_try),
  21182. ## (store_random_in_range, ":random_center", 0, ":total_enemy_centers"),
  21183. ## (assign, ":total_enemy_centers", 0),
  21184. ## (try_for_range, ":center_no", towns_begin, towns_end),
  21185. ## (eq, ":result", -1),
  21186. ## (store_faction_of_party, ":center_faction", ":center_no"),
  21187. ## (neq, ":center_faction", ":party_faction"),
  21188. ## (store_relation, ":party_relation", ":center_faction", ":party_faction"),
  21189. ## (le, ":party_relation", -10),
  21190. ## (val_add, ":total_enemy_centers", 1),
  21191. ## (lt, ":random_center", ":total_enemy_centers"),
  21192. ## (assign, ":result", ":center_no"),
  21193. ## (try_end),
  21194. ## (try_end),
  21195. ## (assign, reg0, ":result"),
  21196. ## ]),
  21197.  
  21198.  
  21199.  
  21200. # script_find_travel_location
  21201. # Input: arg1 = center_no
  21202. # Output: reg0 = new_center_no (to travel within the same faction)
  21203. ("find_travel_location",
  21204. [
  21205. (store_script_param_1, ":center_no"),
  21206. (store_faction_of_party, ":faction_no", ":center_no"),
  21207. (assign, ":total_weight", 0),
  21208. (try_for_range, ":cur_center_no", centers_begin, centers_end),
  21209. (neq, ":center_no", ":cur_center_no"),
  21210. (store_faction_of_party, ":center_faction_no", ":cur_center_no"),
  21211. (eq, ":faction_no", ":center_faction_no"),
  21212.  
  21213. (store_distance_to_party_from_party, ":cur_distance", ":center_no", ":cur_center_no"),
  21214. (val_add, ":cur_distance", 1),
  21215.  
  21216. (assign, ":new_weight", 100000),
  21217. (val_div, ":new_weight", ":cur_distance"),
  21218. (val_add, ":total_weight", ":new_weight"),
  21219. (try_end),
  21220.  
  21221. (assign, reg0, -1),
  21222.  
  21223. (try_begin),
  21224. (eq, ":total_weight", 0),
  21225. (else_try),
  21226. (store_random_in_range, ":random_weight", 0 , ":total_weight"),
  21227. (assign, ":total_weight", 0),
  21228. (assign, ":done", 0),
  21229. (try_for_range, ":cur_center_no", centers_begin, centers_end),
  21230. (eq, ":done", 0),
  21231. (neq, ":center_no", ":cur_center_no"),
  21232. (store_faction_of_party, ":center_faction_no", ":cur_center_no"),
  21233. (eq, ":faction_no", ":center_faction_no"),
  21234.  
  21235. (store_distance_to_party_from_party, ":cur_distance", ":center_no", ":cur_center_no"),
  21236. (val_add, ":cur_distance", 1),
  21237.  
  21238. (assign, ":new_weight", 100000),
  21239. (val_div, ":new_weight", ":cur_distance"),
  21240. (val_add, ":total_weight", ":new_weight"),
  21241. (lt, ":random_weight", ":total_weight"),
  21242. (assign, reg0, ":cur_center_no"),
  21243. (assign, ":done", 1),
  21244. (try_end),
  21245. (try_end),
  21246. ]),
  21247.  
  21248.  
  21249. # script_get_relation_between_parties
  21250. # Input: arg1 = party_no_1, arg2 = party_no_2
  21251. # Output: reg0 = relation between parties
  21252. ("get_relation_between_parties",
  21253. [
  21254. (store_script_param_1, ":party_no_1"),
  21255. (store_script_param_2, ":party_no_2"),
  21256.  
  21257. (store_faction_of_party, ":party_no_1_faction", ":party_no_1"),
  21258. (store_faction_of_party, ":party_no_2_faction", ":party_no_2"),
  21259. (try_begin),
  21260. (eq, ":party_no_1_faction", ":party_no_2_faction"),
  21261. (assign, reg0, 100),
  21262. (else_try),
  21263. (store_relation, ":relation", ":party_no_1_faction", ":party_no_2_faction"),
  21264. (assign, reg0, ":relation"),
  21265. (try_end),
  21266. ]),
  21267. # script_calculate_weekly_party_wage
  21268. # Input: arg1 = party_no
  21269. # Output: reg0 = weekly wage
  21270. ("calculate_weekly_party_wage",
  21271. [
  21272. (store_script_param_1, ":party_no"),
  21273.  
  21274. (assign, ":result", 0),
  21275. (party_get_num_companion_stacks, ":num_stacks",":party_no"),
  21276. (try_for_range, ":i_stack", 0, ":num_stacks"),
  21277. (party_stack_get_troop_id, ":stack_troop",":party_no",":i_stack"),
  21278. (party_stack_get_size, ":stack_size",":party_no",":i_stack"),
  21279. (call_script, "script_npc_get_troop_wage", ":stack_troop", ":party_no"),
  21280. (assign, ":cur_wage", reg0),
  21281. (val_mul, ":cur_wage", ":stack_size"),
  21282. (val_add, ":result", ":cur_wage"),
  21283. (try_end),
  21284. (assign, reg0, ":result"),
  21285. ]),
  21286.  
  21287. # script_calculate_player_faction_wage
  21288. # Input: arg1 = party_no
  21289. # Output: reg0 = weekly wage
  21290. ("calculate_player_faction_wage",
  21291. [(assign, ":nongarrison_wages", 0),
  21292. (assign, ":garrison_wages", 0),
  21293. (try_for_parties, ":party_no"),
  21294. (assign, ":garrison_troop", 0),
  21295. (try_begin),
  21296. (this_or_next|party_slot_eq, ":party_no", slot_party_type, spt_town),
  21297. (party_slot_eq, ":party_no", slot_party_type, spt_castle),
  21298. (party_slot_eq, ":party_no", slot_town_lord, "trp_player"),
  21299. (assign, ":garrison_troop", 1),
  21300. (try_end),
  21301. (this_or_next|eq, ":party_no", "p_main_party"),
  21302. (eq, ":garrison_troop", 1),
  21303. (party_get_num_companion_stacks, ":num_stacks",":party_no"),
  21304. (try_for_range, ":i_stack", 0, ":num_stacks"),
  21305. (party_stack_get_troop_id, ":stack_troop",":party_no",":i_stack"),
  21306. (party_stack_get_size, ":stack_size",":party_no",":i_stack"),
  21307. (call_script, "script_game_get_troop_wage", ":stack_troop", ":party_no"),
  21308. (assign, ":cur_wage", reg0),
  21309. (val_mul, ":cur_wage", ":stack_size"),
  21310. (try_begin),
  21311. (eq, ":garrison_troop", 1),
  21312. (val_add, ":garrison_wages", ":cur_wage"),
  21313. (else_try),
  21314. (val_add, ":nongarrison_wages", ":cur_wage"),
  21315. (try_end),
  21316. (try_end),
  21317. (try_end),
  21318. (val_div, ":garrison_wages", 2),#Half payment for garrisons
  21319. (store_sub, ":total_payment", 14, "$g_cur_week_half_daily_wage_payments"), #between 0 and 7
  21320. (val_mul, ":nongarrison_wages", ":total_payment"),
  21321. (val_div, ":nongarrison_wages", 14),
  21322. (store_add, reg0, ":nongarrison_wages", ":garrison_wages"),
  21323. ]),
  21324.  
  21325. # script_calculate_hero_weekly_net_income_and_add_to_wealth
  21326. # Input: arg1 = troop_no
  21327. # Output: none
  21328. ("calculate_hero_weekly_net_income_and_add_to_wealth",
  21329. [
  21330. (store_script_param_1, ":troop_no"),
  21331.  
  21332. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  21333. (troop_get_slot, ":cur_wealth", ":troop_no", slot_troop_wealth),
  21334.  
  21335. (assign, ":weekly_income", 750), #let every hero receive 750 denars by default
  21336.  
  21337. (store_character_level, ":troop_level", ":troop_no"),
  21338. (store_mul, ":level_income", ":troop_level", 10),
  21339. (val_add, ":weekly_income", ":level_income"),
  21340.  
  21341. (store_troop_faction,":faction_no", ":troop_no"),
  21342. (try_begin), #check if troop is kingdom leader
  21343. (faction_slot_eq, ":faction_no", slot_faction_leader, ":troop_no"),
  21344. (val_add, ":weekly_income", 1000),
  21345. (try_end),
  21346.  
  21347. (try_begin), #check if troop is marshall
  21348. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  21349. (val_add, ":weekly_income", 1000),
  21350. (try_end),
  21351.  
  21352. (assign, ":cur_weekly_wage", 0),
  21353. (try_begin),
  21354. (gt, ":party_no",0),
  21355. (call_script, "script_calculate_weekly_party_wage", ":party_no"),
  21356. (assign, ":cur_weekly_wage", reg0),
  21357. (try_end),
  21358. (val_sub, ":weekly_income", ":cur_weekly_wage"),
  21359.  
  21360. (val_add, ":cur_wealth", ":weekly_income"),
  21361.  
  21362. (try_begin),
  21363. (lt, ":cur_wealth", 0),
  21364. (store_sub, ":percent_under", 0, ":cur_wealth"),
  21365. (val_mul, ":percent_under", 100),
  21366. (val_div, ":percent_under", ":cur_weekly_wage"),
  21367. (val_div, ":percent_under", 5), #Max 20 percent
  21368.  
  21369. (call_script, "script_party_inflict_attrition", ":party_no", ":percent_under", 1),
  21370. (try_end),
  21371.  
  21372. (val_max, ":cur_wealth", 0),
  21373. (troop_set_slot, ":troop_no", slot_troop_wealth, ":cur_wealth"),
  21374. ]),
  21375.  
  21376. # script_cf_reinforce_party
  21377. # Input: arg1 = party_no,
  21378. # Output: none
  21379. # Adds reinforcement to party according to its type and faction
  21380. # Called from several places, simple_triggers for centers, script_hire_men_to_kingdom_hero_party for hero parties
  21381. ("cf_reinforce_party",
  21382. [
  21383. (store_script_param_1, ":party_no"),
  21384.  
  21385. (store_faction_of_party, ":party_faction", ":party_no"),
  21386. (party_get_slot, ":party_type",":party_no", slot_party_type),
  21387.  
  21388. #Rebellion changes begin:
  21389. (try_begin),
  21390. (eq, ":party_type", spt_kingdom_hero_party),
  21391. (party_stack_get_troop_id, ":leader", ":party_no"),
  21392. (troop_get_slot, ":party_faction", ":leader", slot_troop_original_faction),
  21393. (try_end),
  21394. #Rebellion changes end
  21395.  
  21396. (try_begin),
  21397. (eq, ":party_faction", "fac_player_supporters_faction"),
  21398. (party_get_slot, ":town_lord", ":party_no", slot_town_lord),
  21399. (try_begin),
  21400. (gt, ":town_lord", 0),
  21401. (troop_get_slot, ":party_faction", ":town_lord", slot_troop_original_faction),
  21402. (else_try),
  21403. (party_get_slot, ":party_faction", ":party_no", slot_center_original_faction),
  21404. (try_end),
  21405. (try_end),
  21406.  
  21407. (faction_get_slot, ":party_template_a", ":party_faction", slot_faction_reinforcements_a),
  21408. (faction_get_slot, ":party_template_b", ":party_faction", slot_faction_reinforcements_b),
  21409. (faction_get_slot, ":party_template_c", ":party_faction", slot_faction_reinforcements_c),
  21410.  
  21411. (assign, ":party_template", 0),
  21412. (store_random_in_range, ":rand", 0, 100),
  21413. (try_begin),
  21414. (this_or_next|eq, ":party_type", spt_town),
  21415. (eq, ":party_type", spt_castle), #CASTLE OR TOWN
  21416. (try_begin),
  21417. (lt, ":rand", 65),
  21418. (assign, ":party_template", ":party_template_a"),
  21419. (else_try),
  21420. (assign, ":party_template", ":party_template_b"),
  21421. (try_end),
  21422. (else_try),
  21423. (eq, ":party_type", spt_kingdom_hero_party),
  21424. (try_begin),
  21425. (lt, ":rand", 50),
  21426. (assign, ":party_template", ":party_template_a"),
  21427. (else_try),
  21428. (lt, ":rand", 75),
  21429. (assign, ":party_template", ":party_template_b"),
  21430. (else_try),
  21431. (assign, ":party_template", ":party_template_c"),
  21432. (try_end),
  21433. (else_try),
  21434. (try_end),
  21435.  
  21436. (try_begin),
  21437. (gt, ":party_template", 0),
  21438. (party_add_template, ":party_no", ":party_template"),
  21439. (try_end),
  21440. ]),
  21441.  
  21442. # script_hire_men_to_kingdom_hero_party
  21443. # Input: arg1 = troop_no (hero of the party)
  21444. # Output: none
  21445. ("hire_men_to_kingdom_hero_party",
  21446. [
  21447. (store_script_param_1, ":troop_no"),
  21448.  
  21449. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  21450. (troop_get_slot, ":cur_wealth", ":troop_no", slot_troop_wealth),
  21451.  
  21452. #while hiring reinforcements party leaders can only use 3/4 of their budget. This value is holding in ":hiring budget".
  21453. (assign, ":hiring_budget", ":cur_wealth"),
  21454. (val_mul, ":hiring_budget", 3),
  21455. (val_div, ":hiring_budget", 4),
  21456.  
  21457. (call_script, "script_party_get_ideal_size", ":party_no"),
  21458. (assign, ":ideal_size", reg0),
  21459. (store_mul, ":ideal_top_size", ":ideal_size", 3),
  21460. (val_div, ":ideal_top_size", 2),
  21461.  
  21462. #(try_begin),
  21463. # (ge, "$cheat_mode", 1),
  21464. # (str_store_troop_name, s7, ":troop_no"),
  21465. # (assign, reg9, ":cur_wealth"),
  21466. # (display_message, "@{!}DEBUGS : {s7} total budget is {reg9}"),
  21467. # (assign, reg6, ":ideal_size"),
  21468. # (assign, reg7, ":ideal_top_size"),
  21469. # (assign, reg8, ":hiring_budget"),
  21470. # (display_message, "str_debug__hiring_men_to_s7_ideal_size__reg6_ideal_top_size__reg7_hiring_budget__reg8"),
  21471. #(try_end),
  21472.  
  21473. (party_get_num_companions, ":party_size", ":party_no"),
  21474.  
  21475. (store_faction_of_party, ":party_faction", ":party_no"),
  21476. (try_begin),
  21477. (this_or_next|eq, ":party_faction", "fac_player_supporters_faction"),
  21478. (eq, ":party_faction", "$players_kingdom"),
  21479. (assign, ":reinforcement_cost", reinforcement_cost_moderate),
  21480. (else_try),
  21481. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  21482. (assign, ":reinforcement_cost", reinforcement_cost_moderate),
  21483. (try_begin),
  21484. (eq, ":reduce_campaign_ai", 0), #hard
  21485. (assign, ":reinforcement_cost", reinforcement_cost_hard),
  21486. (else_try),
  21487. (eq, ":reduce_campaign_ai", 1), #moderate
  21488. (assign, ":reinforcement_cost", reinforcement_cost_moderate),
  21489. (else_try),
  21490. (eq, ":reduce_campaign_ai", 2), #easy
  21491. (assign, ":reinforcement_cost", reinforcement_cost_easy),
  21492. (try_end),
  21493. (try_end),
  21494.  
  21495. (assign, ":num_rounds", 1),
  21496. (try_for_range, ":unused", 0 , ":num_rounds"),
  21497. (try_begin),
  21498. (lt, ":party_size", ":ideal_size"),
  21499. (gt, ":hiring_budget", ":reinforcement_cost"),
  21500. (gt, ":party_no", 0),
  21501. (call_script, "script_cf_reinforce_party", ":party_no"),
  21502. (val_sub, ":cur_wealth", ":reinforcement_cost"),
  21503. (troop_set_slot, ":troop_no", slot_troop_wealth, ":cur_wealth"),
  21504. (else_try),
  21505. (gt, ":party_size", ":ideal_top_size"),
  21506. (store_troop_faction, ":troop_faction", ":troop_no"),
  21507. (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
  21508. (assign, ":total_regulars", 0),
  21509. (assign, ":total_regular_levels", 0),
  21510. (try_for_range_backwards, ":i_stack", 0, ":num_stacks"),
  21511. (party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
  21512. (neg|troop_is_hero, ":stack_troop"),
  21513. (party_stack_get_size, ":stack_size", ":party_no", ":i_stack"),
  21514. (store_character_level, ":stack_level", ":stack_troop"),
  21515. (store_troop_faction, ":stack_faction", ":stack_troop"),
  21516. (try_begin),
  21517. (eq, ":troop_faction", ":stack_faction"),
  21518. (val_mul, ":stack_level", 3), #reducing the chance of the faction troops' removal
  21519. (try_end),
  21520. (val_mul, ":stack_level", ":stack_size"),
  21521. (val_add, ":total_regulars", ":stack_size"),
  21522. (val_add, ":total_regular_levels", ":stack_level"),
  21523. (try_end),
  21524. (gt, ":total_regulars", 0),
  21525. (store_div, ":average_level", ":total_regular_levels", ":total_regulars"),
  21526. (try_for_range_backwards, ":i_stack", 0, ":num_stacks"),
  21527. (party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
  21528. (neg|troop_is_hero, ":stack_troop"),
  21529. (party_stack_get_size, ":stack_size", ":party_no", ":i_stack"),
  21530. (store_character_level, ":stack_level", ":stack_troop"),
  21531. (store_troop_faction, ":stack_faction", ":stack_troop"),
  21532. (try_begin),
  21533. (eq, ":troop_faction", ":stack_faction"),
  21534. (val_mul, ":stack_level", 3),
  21535. (try_end),
  21536. (store_sub, ":level_dif", ":average_level", ":stack_level"),
  21537. (val_div, ":level_dif", 3),
  21538. (store_add, ":prune_chance", 10, ":level_dif"),
  21539. (gt, ":prune_chance", 0),
  21540. (call_script, "script_get_percentage_with_randomized_round", ":stack_size", ":prune_chance"),
  21541. (gt, reg0, 0),
  21542. (party_remove_members, ":party_no", ":stack_troop", reg0),
  21543. (try_end),
  21544. (try_end),
  21545. (try_end),
  21546. ]),
  21547.  
  21548. # script_get_percentage_with_randomized_round
  21549. # Input: arg1 = value, arg2 = percentage
  21550. # Output: none
  21551. ("get_percentage_with_randomized_round",
  21552. [
  21553. (store_script_param, ":value", 1),
  21554. (store_script_param, ":percentage", 2),
  21555.  
  21556. (store_mul, ":result", ":value", ":percentage"),
  21557. (val_div, ":result", 100),
  21558. (store_mul, ":used_amount", ":result", 100),
  21559. (val_div, ":used_amount", ":percentage"),
  21560. (store_sub, ":left_amount", ":value", ":used_amount"),
  21561. (try_begin),
  21562. (gt, ":left_amount", 0),
  21563. (store_mul, ":chance", ":left_amount", ":percentage"),
  21564. (store_random_in_range, ":random_no", 0, 100),
  21565. (lt, ":random_no", ":chance"),
  21566. (val_add, ":result", 1),
  21567. (try_end),
  21568. (assign, reg0, ":result"),
  21569. ]),
  21570.  
  21571. # script_create_cattle_herd
  21572. # Input: arg1 = center_no, arg2 = amount (0 = default)
  21573. # Output: reg0 = party_no
  21574. ("create_cattle_herd",
  21575. [
  21576. (store_script_param_1, ":center_no"),
  21577. (store_script_param_2, ":amount"),
  21578.  
  21579. (assign, ":herd_party", -1),
  21580. (set_spawn_radius,1),
  21581.  
  21582. (spawn_around_party,":center_no", "pt_cattle_herd"),
  21583. (assign, ":herd_party", reg0),
  21584. (party_get_position, pos1, ":center_no"),
  21585. (call_script, "script_map_get_random_position_around_position_within_range", 1, 2),
  21586. (party_set_position, ":herd_party", pos2),
  21587.  
  21588. (party_set_slot, ":herd_party", slot_party_type, spt_cattle_herd),
  21589. (party_set_slot, ":herd_party", slot_party_ai_state, spai_undefined),
  21590. (party_set_ai_behavior, ":herd_party", ai_bhvr_hold),
  21591.  
  21592. (party_set_slot, ":herd_party", slot_party_commander_party, -1), #we need this because 0 is player's party!
  21593.  
  21594. (try_begin),
  21595. (gt, ":amount", 0),
  21596. (party_clear, ":herd_party"),
  21597. (party_add_members, ":herd_party", "trp_cattle", ":amount"),
  21598. (try_end),
  21599.  
  21600. (assign, reg0, ":herd_party"),
  21601. ]),
  21602.  
  21603. #script_buy_cattle_from_village
  21604. # Input: arg1 = village_no, arg2 = amount, arg3 = single_cost
  21605. # Output: reg0 = party_no
  21606. ("buy_cattle_from_village",
  21607. [
  21608. (store_script_param, ":village_no", 1),
  21609. (store_script_param, ":amount", 2),
  21610. (store_script_param, ":single_cost", 3),
  21611.  
  21612. #Changing price of the cattle
  21613. (try_for_range, ":unused", 0, ":amount"),
  21614. (call_script, "script_game_event_buy_item", "itm_cattle_meat", 0),
  21615. (call_script, "script_game_event_buy_item", "itm_cattle_meat", 0),
  21616. (try_end),
  21617.  
  21618. (party_get_slot, ":num_cattle", ":village_no", slot_village_number_of_cattle),
  21619. (val_sub, ":num_cattle", ":amount"),
  21620. (party_set_slot, ":village_no", slot_village_number_of_cattle, ":num_cattle"),
  21621. (store_mul, ":cost", ":single_cost", ":amount"),
  21622. (troop_remove_gold, "trp_player", ":cost"),
  21623.  
  21624. (assign, ":continue", 1),
  21625. (try_for_parties, ":cur_party"),
  21626. (eq, ":continue", 1),
  21627. (party_slot_eq, ":cur_party", slot_party_type, spt_cattle_herd),
  21628. (store_distance_to_party_from_party, ":dist", ":village_no", ":cur_party"),
  21629. (lt, ":dist", 6),
  21630. (assign, ":subcontinue", 1),
  21631. (try_begin),
  21632. (check_quest_active, "qst_move_cattle_herd"),
  21633. (quest_slot_eq, "qst_move_cattle_herd", slot_quest_target_party, ":cur_party"),
  21634. (assign, ":subcontinue", 0),
  21635. (try_end),
  21636. (eq, ":subcontinue", 1),
  21637. (party_add_members, ":cur_party", "trp_cattle", ":amount"),
  21638. (assign, ":continue", 0),
  21639. (assign, reg0, ":cur_party"),
  21640. (try_end),
  21641. (try_begin),
  21642. (eq, ":continue", 1),
  21643. (call_script, "script_create_cattle_herd", ":village_no", ":amount"),
  21644. (try_end),
  21645. ]),
  21646.  
  21647. #script_kill_cattle_from_herd
  21648. # Input: arg1 = party_no, arg2 = amount
  21649. # Output: none (fills trp_temp_troop's inventory)
  21650. ("kill_cattle_from_herd",
  21651. [
  21652. (store_script_param_1, ":party_no"),
  21653. (store_script_param_2, ":amount"),
  21654.  
  21655. (troop_clear_inventory, "trp_temp_troop"),
  21656. (store_mul, ":meat_amount", ":amount", 2),
  21657. (troop_add_items, "trp_temp_troop", "itm_cattle_meat", ":meat_amount"),
  21658.  
  21659. (troop_get_inventory_capacity, ":inv_size", "trp_temp_troop"),
  21660. (try_for_range, ":i_slot", 0, ":inv_size"),
  21661. (troop_get_inventory_slot, ":item_id", "trp_temp_troop", ":i_slot"),
  21662. (eq, ":item_id", "itm_cattle_meat"),
  21663. (troop_set_inventory_slot_modifier, "trp_temp_troop", ":i_slot", imod_fresh),
  21664. (try_end),
  21665.  
  21666. (party_get_num_companions, ":num_cattle", ":party_no"),
  21667. (try_begin),
  21668. (ge, ":amount", ":num_cattle"),
  21669. (remove_party, ":party_no"),
  21670. (else_try),
  21671. (party_remove_members, ":party_no", "trp_cattle", ":amount"),
  21672. (try_end),
  21673. ]),
  21674.  
  21675. # script_create_kingdom_hero_party
  21676. # Input: arg1 = troop_no, arg2 = center_no
  21677. # Output: $pout_party = party_no
  21678. ("create_kingdom_hero_party",
  21679. [
  21680. (store_script_param, ":troop_no", 1),
  21681. (store_script_param, ":center_no", 2),
  21682.  
  21683. (store_troop_faction, ":troop_faction_no", ":troop_no"),
  21684.  
  21685. (assign, "$pout_party", -1),
  21686. (try_begin),
  21687. (eq, "$g_there_is_no_avaliable_centers", 0),
  21688. (set_spawn_radius, 0),
  21689. (else_try),
  21690. (set_spawn_radius, 15),
  21691. (try_end),
  21692. (spawn_around_party, ":center_no", "pt_kingdom_hero_party"),
  21693.  
  21694. (assign, "$pout_party", reg0),
  21695.  
  21696. (party_set_faction, "$pout_party", ":troop_faction_no"),
  21697. (party_set_slot, "$pout_party", slot_party_type, spt_kingdom_hero_party),
  21698. (call_script, "script_party_set_ai_state", "$pout_party", spai_undefined, -1),
  21699. (troop_set_slot, ":troop_no", slot_troop_leaded_party, "$pout_party"),
  21700. (party_add_leader, "$pout_party", ":troop_no"),
  21701. (str_store_troop_name, s5, ":troop_no"),
  21702. (party_set_name, "$pout_party", "str_s5_s_party"),
  21703.  
  21704. (party_set_slot, "$pout_party", slot_party_commander_party, -1), #we need this because 0 is player's party!
  21705.  
  21706. #Setting the flag icon
  21707. #normal_banner_begin
  21708. (troop_get_slot, ":cur_banner", ":troop_no", slot_troop_banner_scene_prop),
  21709. (try_begin),
  21710. (gt, ":cur_banner", 0),
  21711. (val_sub, ":cur_banner", banner_scene_props_begin),
  21712. (val_add, ":cur_banner", banner_map_icons_begin),
  21713. (party_set_banner_icon, "$pout_party", ":cur_banner"),
  21714. #custom_banner_begin
  21715. #(troop_get_slot, ":flag_icon", ":troop_no", slot_troop_custom_banner_map_flag_type),
  21716. #(try_begin),
  21717. # (ge, ":flag_icon", 0),
  21718. # (val_add, ":flag_icon", custom_banner_map_icons_begin),
  21719. # (party_set_banner_icon, "$pout_party", ":flag_icon"),
  21720. (try_end),
  21721.  
  21722. (try_begin),
  21723. #because of below two lines, lords can only hire more than one party_template(stack) at game start once a time during all game.
  21724. (troop_slot_eq, ":troop_no", slot_troop_spawned_before, 0),
  21725. (troop_set_slot, ":troop_no", slot_troop_spawned_before, 1),
  21726. (assign, ":num_tries", 20),
  21727. (try_begin),
  21728. (store_troop_faction, ":troop_kingdom", ":troop_no"),
  21729. (faction_slot_eq, ":troop_kingdom", slot_faction_leader, ":troop_no"),
  21730. (assign, ":num_tries", 50),
  21731. (try_end),
  21732.  
  21733. #(str_store_troop_name, s0, ":troop_no"),
  21734. #(display_message, "{!}str_debug__hiring_men_to_party_for_s0"),
  21735.  
  21736. (try_for_range, ":unused", 0, ":num_tries"),
  21737. (call_script, "script_hire_men_to_kingdom_hero_party", ":troop_no"),
  21738. (try_end),
  21739.  
  21740. (assign, ":xp_rounds", 0),
  21741.  
  21742. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  21743. (try_begin),
  21744. (this_or_next|eq, ":troop_faction_no", "$players_kingdom"),
  21745. (eq, ":troop_faction_no", "fac_player_supporters_faction"),
  21746. (assign, ":xp_rounds", 0),
  21747. (else_try),
  21748. (eq, ":reduce_campaign_ai", 0), #hard
  21749. (assign, ":xp_rounds", 2),
  21750. (else_try),
  21751. (eq, ":reduce_campaign_ai", 1), #moderate
  21752. (assign, ":xp_rounds", 1),
  21753. (else_try),
  21754. (eq, ":reduce_campaign_ai", 2), #easy
  21755. (assign, ":xp_rounds", 0),
  21756. (try_end),
  21757.  
  21758. (troop_get_slot, ":renown", ":troop_no", slot_troop_renown),
  21759. (store_div, ":renown_xp_rounds", ":renown", 100),
  21760. (val_add, ":xp_rounds", ":renown_xp_rounds"),
  21761. (try_for_range, ":unused", 0, ":xp_rounds"),
  21762. (call_script, "script_upgrade_hero_party", "$pout_party", 4000),
  21763. (try_end),
  21764. (try_end),
  21765. ]),
  21766.  
  21767. # script_create_kingdom_party_if_below_limit
  21768. # Input: arg1 = faction_no, arg2 = party_type (variables beginning with spt_)
  21769. # Output: reg0 = party_no
  21770. ("create_kingdom_party_if_below_limit",
  21771. [
  21772. (store_script_param_1, ":faction_no"),
  21773. (store_script_param_2, ":party_type"),
  21774.  
  21775. (call_script, "script_count_parties_of_faction_and_party_type", ":faction_no", ":party_type"),
  21776. (assign, ":party_count", reg0),
  21777.  
  21778. (assign, ":party_count_limit", 0),
  21779.  
  21780. (faction_get_slot, ":num_towns", ":faction_no", slot_faction_num_towns),
  21781.  
  21782. (try_begin),
  21783. ## (eq, ":party_type", spt_forager),
  21784. ## (assign, ":party_count_limit", 1),
  21785. ## (else_try),
  21786. ## (eq, ":party_type", spt_scout),
  21787. ## (assign, ":party_count_limit", 1),
  21788. ## (else_try),
  21789. ## (eq, ":party_type", spt_patrol),
  21790. ## (assign, ":party_count_limit", 1),
  21791. ## (else_try),
  21792. ## (eq, ":party_type", spt_messenger),
  21793. ## (assign, ":party_count_limit", 1),
  21794. ## (else_try),
  21795. (eq, ":party_type", spt_kingdom_caravan),
  21796. (try_begin),
  21797. (eq, ":num_towns", 0),
  21798. (assign, ":party_count_limit", 0),
  21799. (else_try),
  21800. (eq, ":num_towns", 1),
  21801. (assign, ":party_count_limit", 1),
  21802. (else_try),
  21803. (eq, ":num_towns", 2),
  21804. (assign, ":party_count_limit", 3),
  21805. (else_try),
  21806. (assign, ":party_count_limit", 5),
  21807. (try_end),
  21808. ## (else_try),
  21809. ## (eq, ":party_type", spt_prisoner_train),
  21810. ## (assign, ":party_count_limit", 1),
  21811. (try_end),
  21812.  
  21813. (assign, reg0, -1),
  21814. (try_begin),
  21815. (lt, ":party_count", ":party_count_limit"),
  21816. (call_script,"script_cf_create_kingdom_party", ":faction_no", ":party_type"),
  21817. (try_end),
  21818. ]),
  21819.  
  21820.  
  21821. # script_cf_create_kingdom_party
  21822. # Input: arg1 = faction_no, arg2 = party_type (variables beginning with spt_)
  21823. # Output: reg0 = party_no
  21824. ("cf_create_kingdom_party",
  21825. [
  21826. (store_script_param_1, ":faction_no"),
  21827. (store_script_param_2, ":party_type"),
  21828.  
  21829. (str_store_faction_name, s7, ":faction_no"),
  21830. (assign, ":party_name_str", "str_no_string"),
  21831.  
  21832. ## (faction_get_slot, ":reinforcements_a", ":faction_no", slot_faction_reinforcements_a),
  21833. (faction_get_slot, ":reinforcements_b", ":faction_no", slot_faction_reinforcements_b),
  21834. ## (faction_get_slot, ":reinforcements_c", ":faction_no", slot_faction_reinforcements_c),
  21835.  
  21836. (try_begin),
  21837. ## (eq, ":party_type", spt_forager),
  21838. ## (assign, ":party_template", "pt_forager_party"),
  21839. # (assign, ":party_name_str", "str_s7_foragers"),
  21840. ## (else_try),
  21841. ## (eq, ":party_type", spt_scout),
  21842. ## (assign, ":party_template", "pt_scout_party"),
  21843. # (assign, ":party_name_str", "str_s7_scouts"),
  21844. ## (else_try),
  21845. ## (eq, ":party_type", spt_patrol),
  21846. ## (assign, ":party_template", "pt_patrol_party"),
  21847. # (assign, ":party_name_str", "str_s7_patrol"),
  21848. ## (else_try),
  21849. (eq, ":party_type", spt_kingdom_caravan),
  21850. (assign, ":party_template", "pt_kingdom_caravan_party"),
  21851. # (assign, ":party_name_str", "str_s7_caravan"),
  21852. ## (else_try),
  21853. ## (eq, ":party_type", spt_messenger),
  21854. ## (assign, ":party_template", "pt_messenger_party"),
  21855. # (assign, ":party_name_str", "str_s7_messenger"),
  21856. ## (else_try),
  21857. ## (eq, ":party_type", spt_raider),
  21858. ## (assign, ":party_template", "pt_raider_party"),
  21859. ## (assign, ":party_name_str", "str_s7_raiders"),
  21860. ## (else_try),
  21861. ## (eq, ":party_type", spt_prisoner_train),
  21862. ## (assign, ":party_template", "pt_prisoner_train_party"),
  21863. # (assign, ":party_name_str", "str_s7_prisoner_train"),
  21864. (try_end),
  21865.  
  21866. (assign, ":result", -1),
  21867. (try_begin),
  21868. (try_begin),
  21869. (eq, ":party_type", spt_kingdom_caravan),
  21870. (call_script,"script_cf_select_random_town_with_faction", ":faction_no", -1),
  21871. (set_spawn_radius, 0),
  21872. (else_try), #not used at the moment
  21873. (call_script,"script_cf_select_random_walled_center_with_faction", ":faction_no", -1),
  21874. (set_spawn_radius, 1),
  21875. (try_end),
  21876. (assign, ":spawn_center", reg0),
  21877. (is_between, ":spawn_center", centers_begin, centers_end),
  21878. (spawn_around_party,":spawn_center",":party_template"),
  21879. (assign, ":result", reg0),
  21880. (party_set_faction, ":result", ":faction_no"),
  21881. (try_begin),
  21882. (eq, ":party_type", spt_kingdom_caravan),
  21883. (party_set_slot, ":result", slot_party_home_center, ":spawn_center"),
  21884. (party_set_slot, ":result", slot_party_last_traded_center, ":spawn_center"),
  21885. (try_end),
  21886. (party_set_slot, ":result", slot_party_type, ":party_type"),
  21887. (party_set_slot, ":result", slot_party_ai_state, spai_undefined),
  21888. (try_begin),
  21889. (neq, ":party_name_str", "str_no_string"),
  21890. (party_set_name, ":result", ":party_name_str"),
  21891. (try_end),
  21892.  
  21893. (try_begin),
  21894. ## (eq, ":party_type", spt_forager),
  21895. ## (party_add_template, ":result", ":reinforcements_a"),
  21896. ## (else_try),
  21897. ## (eq, ":party_type", spt_scout),
  21898. ## (party_add_template, ":result", ":reinforcements_c"),
  21899. ## (else_try),
  21900. ## (eq, ":party_type", spt_patrol),
  21901. ## (party_add_template, ":result", ":reinforcements_a"),
  21902. ## (party_add_template, ":result", ":reinforcements_b"),
  21903. ## (else_try),
  21904. (eq, ":party_type", spt_kingdom_caravan),
  21905. (try_begin),
  21906. (eq, ":faction_no", "fac_player_supporters_faction"),
  21907. (party_get_slot, ":reinforcement_faction", ":spawn_center", slot_center_original_faction),
  21908. (faction_get_slot, ":reinforcements_b", ":reinforcement_faction", slot_faction_reinforcements_b),
  21909. (try_end),
  21910. (party_add_template, ":result", ":reinforcements_b"),
  21911. (party_add_template, ":result", ":reinforcements_b"),
  21912. (party_set_ai_behavior,":result",ai_bhvr_travel_to_party),
  21913. (party_set_ai_object,":result",":spawn_center"),
  21914. (party_set_flags, ":result", pf_default_behavior, 1),
  21915. (store_sub, ":item_to_price_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  21916. (try_for_range, ":cur_goods", trade_goods_begin, trade_goods_end),
  21917. (store_add, ":cur_goods_price_slot", ":cur_goods", ":item_to_price_slot"),
  21918. (party_set_slot, ":result", ":cur_goods_price_slot", average_price_factor),
  21919. (try_end),
  21920. ## (else_try),
  21921. ## (eq, ":party_type", spt_messenger),
  21922. ## (faction_get_slot, ":messenger_troop", ":faction_no", slot_faction_messenger_troop),
  21923. ## (party_add_leader, ":result", ":messenger_troop"),
  21924. ## (party_set_ai_behavior,":result",ai_bhvr_travel_to_party),
  21925. ## (party_set_ai_object,":result",":spawn_center"),
  21926. ## (party_set_flags, ":result", pf_default_behavior, 0),
  21927. ## (else_try),
  21928. ## (eq, ":party_type", spt_raider),
  21929. ## (party_add_template, ":result", ":reinforcements_c"),
  21930. ## (party_add_template, ":result", ":reinforcements_b"),
  21931. ## (party_add_template, ":result", "pt_raider_captives"),
  21932. ## (else_try),
  21933. ## (eq, ":party_type", spt_prisoner_train),
  21934. ## (party_add_template, ":result", ":reinforcements_b"),
  21935. ## (party_add_template, ":result", ":reinforcements_a"),
  21936. ## (try_begin),
  21937. ## (call_script,"script_cf_faction_get_random_enemy_faction",":faction_no"),
  21938. ## (store_random_in_range,":r",0,3),
  21939. ## (try_begin),
  21940. ## (lt, ":r", 1),
  21941. ## (faction_get_slot, ":captive_reinforcements", reg0, slot_faction_reinforcements_b),
  21942. ## (else_try),
  21943. ## (faction_get_slot, ":captive_reinforcements", reg0, slot_faction_reinforcements_a),
  21944. ## (try_end),
  21945. ## (party_add_template, ":result", ":captive_reinforcements",1),
  21946. ## (else_try),
  21947. ## (party_add_template, ":result", "pt_default_prisoners"),
  21948. ## (try_end),
  21949. (try_end),
  21950. (try_end),
  21951. (ge, ":result", 0),
  21952. (assign, reg0, ":result"),
  21953. ]),
  21954.  
  21955. # script_get_troop_attached_party
  21956. # Input: arg1 = troop_no
  21957. # Output: reg0 = party_no (-1 if troop's party is not attached to a party)
  21958. ("get_troop_attached_party",
  21959. [
  21960. (store_script_param_1, ":troop_no"),
  21961.  
  21962. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  21963. (assign, ":attached_party_no", -1),
  21964. (try_begin),
  21965. (ge, ":party_no", 0),
  21966. (party_get_attached_to, ":attached_party_no", ":party_no"),
  21967. (try_end),
  21968. (assign, reg0, ":attached_party_no"),
  21969. ]),
  21970.  
  21971.  
  21972. # script_center_get_food_consumption
  21973. # Input: arg1 = center_no
  21974. # Output: reg0: food consumption (1 food item counts as 100 units)
  21975. ("center_get_food_consumption",
  21976. [
  21977. (store_script_param_1, ":center_no"),
  21978. (assign, ":food_consumption", 0),
  21979. (try_begin),
  21980. (party_slot_eq, ":center_no", slot_party_type, spt_town),
  21981. (assign, ":food_consumption", 500),
  21982. (else_try),
  21983. (party_slot_eq, ":center_no", slot_party_type, spt_castle),
  21984. (assign, ":food_consumption", 50),
  21985. (try_end),
  21986. (assign, reg0, ":food_consumption"),
  21987. ]),
  21988.  
  21989. # script_center_get_food_store_limit
  21990. # Input: arg1 = center_no
  21991. # Output: reg0: food consumption (1 food item counts as 100 units)
  21992. ("center_get_food_store_limit",
  21993. [
  21994. (store_script_param_1, ":center_no"),
  21995. (assign, ":food_store_limit", 0),
  21996. (try_begin),
  21997. (party_slot_eq, ":center_no", slot_party_type, spt_town),
  21998. (assign, ":food_store_limit", 50000),
  21999. (else_try),
  22000. (party_slot_eq, ":center_no", slot_party_type, spt_castle),
  22001. (assign, ":food_store_limit", 1500),
  22002. (try_end),
  22003. (assign, reg0, ":food_store_limit"),
  22004. ]),
  22005.  
  22006. # script_refresh_village_merchant_inventory
  22007. # Input: arg1 = village_no
  22008. # Output: none
  22009. ("refresh_village_merchant_inventory",
  22010. [
  22011. (store_script_param_1, ":village_no"),
  22012. (party_get_slot, ":merchant_troop", ":village_no", slot_town_elder),
  22013. (reset_item_probabilities,0),
  22014.  
  22015. (party_get_slot, ":bound_center", ":village_no", slot_village_bound_center),
  22016.  
  22017. (assign, ":total_probability", 0),
  22018. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  22019. (call_script, "script_center_get_production", ":village_no", ":cur_good"),
  22020. (assign, ":cur_probability", reg0),
  22021.  
  22022. (call_script, "script_center_get_production", ":bound_center", ":cur_good"),
  22023. (val_div, reg0, 5), #also add 1/5 of bound center production to village's inventory.
  22024. (val_add, ":cur_probability", reg0),
  22025.  
  22026. (val_max, ":cur_probability", 5),
  22027. (val_add, ":total_probability", ":cur_probability"),
  22028. (try_end),
  22029.  
  22030. (try_begin),
  22031. (party_get_slot, ":prosperity", ":village_no", slot_town_prosperity),
  22032. (val_div, ":prosperity", 15), #up to 6
  22033. (store_add, ":number_of_items_in_village", ":prosperity", 1),
  22034. (try_end),
  22035.  
  22036. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  22037. (call_script, "script_center_get_production", ":village_no", ":cur_good"),
  22038. (assign, ":cur_probability", reg0),
  22039.  
  22040. (call_script, "script_center_get_production", ":bound_center", ":cur_good"),
  22041. (val_div, reg0, 5), #also add 1/5 of bound center production to village's inventory.
  22042. (val_add, ":cur_probability", reg0),
  22043.  
  22044. (val_max, ":cur_probability", 5),
  22045. (val_mul, ":cur_probability", ":number_of_items_in_village"),
  22046. (val_mul, ":cur_probability", 100),
  22047. (val_div, ":cur_probability", ":total_probability"),
  22048.  
  22049. (set_item_probability_in_merchandise, ":cur_good", ":cur_probability"),
  22050. (try_end),
  22051.  
  22052. (troop_clear_inventory, ":merchant_troop"),
  22053. (troop_add_merchandise, ":merchant_troop", itp_type_goods, ":number_of_items_in_village"),
  22054. (troop_ensure_inventory_space, ":merchant_troop", 80),
  22055.  
  22056. #Adding 1 prosperity to the village while reducing each 3000 gold from the elder
  22057. (store_troop_gold, ":gold",":merchant_troop"),
  22058. (try_begin),
  22059. (gt, ":gold", 3500),
  22060. (store_div, ":prosperity_added", ":gold", 3000),
  22061. (store_mul, ":gold_removed", ":prosperity_added", 3000),
  22062. (troop_remove_gold, ":merchant_troop", ":gold_removed"),
  22063. (call_script, "script_change_center_prosperity", ":village_no", ":prosperity_added"),
  22064. (try_end),
  22065. ]),
  22066.  
  22067. # script_refresh_village_defenders
  22068. # Input: arg1 = village_no
  22069. # Output: none
  22070. ("refresh_village_defenders",
  22071. [
  22072. (store_script_param_1, ":village_no"),
  22073.  
  22074. (assign, ":ideal_size", 50),
  22075. (try_begin),
  22076. (party_get_num_companions, ":party_size", ":village_no"),
  22077. (lt, ":party_size", ":ideal_size"),
  22078. (party_add_template, ":village_no", "pt_village_defenders"),
  22079. (try_end),
  22080. ]),
  22081.  
  22082. # script_village_set_state
  22083. # Input: arg1 = center_no arg2:new_state
  22084. # Output: reg0: food consumption (1 food item counts as 100 units)
  22085. ("village_set_state",
  22086. [
  22087. (store_script_param_1, ":village_no"),
  22088. (store_script_param_2, ":new_state"),
  22089. (try_begin),
  22090. (eq, ":new_state", 0),
  22091. (party_set_extra_text, ":village_no", "str_empty_string"),
  22092. (party_set_slot, ":village_no", slot_village_raided_by, -1),
  22093. (else_try),
  22094. (eq, ":new_state", svs_being_raided),
  22095. (party_set_extra_text, ":village_no", "@(Being Raided)"),
  22096. (else_try),
  22097. (eq, ":new_state", svs_looted),
  22098. (party_set_extra_text, ":village_no", "@(Looted)"),
  22099.  
  22100. (party_set_slot, ":village_no", slot_village_raided_by, -1),
  22101. (call_script, "script_change_center_prosperity", ":village_no", -60),
  22102. (val_add, "$newglob_total_prosperity_from_villageloot", -60),
  22103.  
  22104. (try_begin), #optional - lowers the relationship between a lord and his liege if his fief is looted
  22105. (eq, 5, 0),
  22106. (party_get_slot, ":town_lord", ":village_no", slot_town_lord),
  22107. (is_between, ":town_lord", active_npcs_begin, active_npcs_end),
  22108. (store_faction_of_troop, ":town_lord_faction", ":town_lord"),
  22109. (faction_get_slot, ":faction_leader", ":town_lord_faction", slot_faction_leader),
  22110. (call_script, "script_troop_change_relation_with_troop", ":town_lord", ":faction_leader", -1),
  22111. (val_add, "$total_battle_ally_changes", -1),
  22112. (try_end),
  22113. (else_try),
  22114. (eq, ":new_state", svs_under_siege),
  22115. (party_set_extra_text, ":village_no", "@(Under Siege)"),
  22116.  
  22117. #Divert all caravans heading to the center
  22118. #Note that occasionally, no alternative center will be found. In that case, the caravan will try to run the blockade
  22119. (try_for_parties, ":party_no"),
  22120. (gt, ":party_no", "p_spawn_points_end"),
  22121. (party_slot_eq, ":party_no", slot_party_type, spt_kingdom_caravan),
  22122. (party_slot_eq, ":party_no", slot_party_ai_object, ":village_no"),
  22123.  
  22124. (party_get_slot, ":origin", ":party_no", slot_party_last_traded_center),
  22125. (store_faction_of_party, ":merchant_faction", ":party_no"),
  22126.  
  22127. (call_script, "script_cf_select_most_profitable_town_at_peace_with_faction_in_trade_route", ":origin", ":merchant_faction"),
  22128. (assign, ":target_center", reg0),
  22129. (is_between, ":target_center", centers_begin, centers_end),
  22130.  
  22131. (party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_party),
  22132. (party_set_ai_object, ":party_no", ":target_center"),
  22133. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22134. (party_set_slot, ":party_no", slot_party_ai_state, spai_trading_with_town),
  22135. (party_set_slot, ":party_no", slot_party_ai_object, ":target_center"),
  22136. (try_end),
  22137. (try_end),
  22138. (party_set_slot, ":village_no", slot_village_state, ":new_state"),
  22139. ]),
  22140.  
  22141.  
  22142. # script_process_village_raids
  22143. # Input: none
  22144. # Output: none
  22145. # called from triggers every two hours
  22146. ("process_village_raids",
  22147. [
  22148. (try_for_range, ":village_no", villages_begin, villages_end),
  22149. ##CABA Fix
  22150. (try_begin),
  22151. (this_or_next|is_between, ":village_no", "p_village_16", "p_village_23"), #Shapeshte through Shulus (up to Ilvia)
  22152. (this_or_next|is_between, ":village_no", "p_village_49", "p_village_51"), #Tismirr and Karindi
  22153. (this_or_next|eq, ":village_no", "p_village_75"), #Bhulaban
  22154. (is_between, ":village_no", "p_village_85", "p_village_87"), #Ismirala and Slezkh
  22155. (assign, ":normal_village_icon", "icon_village_snow_a"),
  22156. (assign, ":burnt_village_icon", "icon_village_snow_burnt_a"),
  22157. (assign, ":deserted_village_icon", "icon_village_snow_deserted_a"),
  22158. (else_try),
  22159. (is_between, ":village_no", "p_village_91", "p_salt_mine"), #Ayn Assuadi through Rushdigh
  22160. (assign, ":normal_village_icon", "icon_village_c"),
  22161. (assign, ":burnt_village_icon", "icon_village_burnt_c"),
  22162. (assign, ":deserted_village_icon", "icon_village_deserted_c"),
  22163. (else_try),
  22164. (assign, ":normal_village_icon", "icon_village_a"),
  22165. (assign, ":burnt_village_icon", "icon_village_burnt_a"),
  22166. (assign, ":deserted_village_icon", "icon_village_deserted_a"),
  22167. (try_end),
  22168. ##CABA Fix
  22169. (party_get_slot, ":village_raid_progress", ":village_no", slot_village_raid_progress),
  22170. (try_begin),
  22171. (party_slot_eq, ":village_no", slot_village_state, 0), #village is normal
  22172. (val_sub, ":village_raid_progress", 5),
  22173. (val_max, ":village_raid_progress", 0),
  22174. (party_set_slot, ":village_no", slot_village_raid_progress, ":village_raid_progress"),
  22175. (try_begin),
  22176. (lt, ":village_raid_progress", 50),
  22177.  
  22178. (try_begin),
  22179. (party_get_icon, ":village_icon", ":village_no"),
  22180. (neq, ":village_icon", ":normal_village_icon"), ##CABA FIX
  22181. (party_set_icon, ":village_no", ":normal_village_icon"), ##CABA FIX
  22182. (try_end),
  22183.  
  22184. (party_slot_ge, ":village_no", slot_village_smoke_added, 1),
  22185. (party_set_slot, ":village_no", slot_village_smoke_added, 0),
  22186. (party_clear_particle_systems, ":village_no"),
  22187. (try_end),
  22188. (else_try),
  22189. (party_slot_eq, ":village_no", slot_village_state, svs_being_raided), #village is being raided
  22190. #End raid unless there is an enemy party nearby
  22191. (assign, ":raid_ended", 1),
  22192. (party_get_slot, ":raider_party", ":village_no", slot_village_raided_by),
  22193.  
  22194. (try_begin),
  22195. (ge, ":raider_party", 0),
  22196. (party_is_active, ":raider_party"),
  22197. (this_or_next|neq, ":raider_party", "p_main_party"),
  22198. (eq, "$g_player_is_captive", 0),
  22199. (store_distance_to_party_from_party, ":distance", ":village_no", ":raider_party"),
  22200. (lt, ":distance", raid_distance),
  22201. (assign, ":raid_ended", 0),
  22202. (try_end),
  22203.  
  22204. (try_begin),
  22205. (eq, ":raid_ended", 1),
  22206. (call_script, "script_village_set_state", ":village_no", svs_normal), #clear raid flag
  22207. (party_set_slot, ":village_no", slot_village_smoke_added, 0),
  22208. (party_clear_particle_systems, ":village_no"),
  22209. (else_try),
  22210. (assign, ":raid_progress_increase", 11),
  22211. (party_get_slot, ":looter_party", ":village_no", slot_village_raided_by),
  22212. (try_begin),
  22213. (party_get_skill_level, ":looting_skill", ":looter_party", "skl_looting"),
  22214. (val_add, ":raid_progress_increase", ":looting_skill"),
  22215. (try_end),
  22216. (try_begin),
  22217. (party_slot_eq, ":village_no", slot_center_has_watch_tower, 1),
  22218. (val_mul, ":raid_progress_increase", 2),
  22219. (val_div, ":raid_progress_increase", 3),
  22220. (try_end),
  22221. (val_add, ":village_raid_progress", ":raid_progress_increase"),
  22222. (party_set_slot, ":village_no", slot_village_raid_progress, ":village_raid_progress"),
  22223. (try_begin),
  22224. (ge, ":village_raid_progress", 50),
  22225. (party_slot_eq, ":village_no", slot_village_smoke_added, 0),
  22226. (party_add_particle_system, ":village_no", "psys_map_village_fire"),
  22227. (party_add_particle_system, ":village_no", "psys_map_village_fire_smoke"),
  22228. (party_set_icon, ":village_no", ":burnt_village_icon"), ##CABA FIX
  22229. (party_set_slot, ":village_no", slot_village_smoke_added, 1),
  22230. (try_end),
  22231. (try_begin),
  22232. (gt, ":village_raid_progress", 100),
  22233. (str_store_party_name_link, s1, ":village_no"),
  22234. (party_stack_get_troop_id, ":raid_leader", ":looter_party", 0),
  22235. (ge, ":raid_leader", 0),
  22236. (str_store_party_name, s2, ":looter_party"),
  22237. (display_log_message, "@The village of {s1} has been looted by {s2}."),
  22238.  
  22239. (try_begin),
  22240. (party_get_slot, ":village_lord", ":village_no", slot_town_lord),
  22241. (is_between, ":village_lord", active_npcs_begin, active_npcs_end),
  22242. (call_script, "script_troop_change_relation_with_troop", ":raid_leader", ":village_lord", -1),
  22243. (val_add, "$total_battle_enemy_changes", -1),
  22244. (try_end),
  22245.  
  22246. #give loot gold to raid leader
  22247. (troop_get_slot, ":raid_leader_gold", ":raid_leader", slot_troop_wealth),
  22248. (party_get_slot, ":village_prosperity", ":village_no"),
  22249. (store_mul, ":value_of_loot", ":village_prosperity", 60), #average is 3000
  22250. (val_add, ":raid_leader_gold", ":value_of_loot"),
  22251. (troop_set_slot, ":raid_leader", slot_troop_wealth, ":raid_leader_gold"),
  22252.  
  22253. #take loot gold from village lord #new 1.126
  22254. (try_begin),
  22255. (is_between, ":village_lord", active_npcs_begin, active_npcs_end),
  22256. (troop_get_slot, ":village_lord_gold", ":village_lord", slot_troop_wealth),
  22257. (val_sub, ":village_lord_gold", ":value_of_loot"),
  22258. (val_max, ":village_lord_gold", 0),
  22259. (troop_set_slot, ":village_lord", slot_troop_wealth, ":village_lord_gold"),
  22260. (try_end),
  22261.  
  22262. (call_script, "script_village_set_state", ":village_no", svs_looted),
  22263. (party_set_slot, ":village_no", slot_center_accumulated_rents, 0), #new 1.126
  22264. (party_set_slot, ":village_no", slot_center_accumulated_tariffs, 0), #new 1.126
  22265.  
  22266. (party_set_slot, ":village_no", slot_village_raid_progress, 0),
  22267. (party_set_slot, ":village_no", slot_village_recover_progress, 0),
  22268. (try_begin),
  22269. (store_faction_of_party, ":village_faction", ":village_no"),
  22270. (this_or_next|party_slot_eq, ":village_no", slot_town_lord, "trp_player"),
  22271. (eq, ":village_faction", "fac_player_supporters_faction"),
  22272. (call_script, "script_add_notification_menu", "mnu_notification_village_raided", ":village_no", ":raid_leader"),
  22273. (try_end),
  22274. (call_script, "script_add_log_entry", logent_village_raided, ":raid_leader", ":village_no", -1, -1),
  22275. (store_faction_of_party, ":looter_faction", ":looter_party"),
  22276. (call_script, "script_faction_inflict_war_damage_on_faction", ":looter_faction", ":village_faction", 5),
  22277. (try_end),
  22278. (try_end),
  22279. (else_try),
  22280. (party_slot_eq, ":village_no", slot_village_state, svs_looted), #village is looted
  22281. (party_get_slot, ":recover_progress", ":village_no", slot_village_recover_progress),
  22282. (val_add, ":recover_progress", 1),
  22283. (party_set_slot, ":village_no", slot_village_recover_progress, ":recover_progress"), #village looted
  22284. (try_begin),
  22285. (ge, ":recover_progress", 10),
  22286. (party_slot_eq, ":village_no", slot_village_smoke_added, 1),
  22287. (party_clear_particle_systems, ":village_no"),
  22288. (party_add_particle_system, ":village_no", "psys_map_village_looted_smoke"),
  22289. (party_set_slot, ":village_no", slot_village_smoke_added, 2),
  22290. (try_end),
  22291. (try_begin),
  22292. (gt, ":recover_progress", 50),
  22293. (party_slot_eq, ":village_no", slot_village_smoke_added, 2),
  22294. (party_clear_particle_systems, ":village_no"),
  22295. (party_set_slot, ":village_no", slot_village_smoke_added, 3),
  22296. (party_set_icon, ":village_no", ":deserted_village_icon"), ##CABA FIX
  22297. (try_end),
  22298. (try_begin),
  22299. (gt, ":recover_progress", 100),
  22300. (call_script, "script_village_set_state", ":village_no", 0),#village back to normal
  22301. (party_set_slot, ":village_no", slot_village_recover_progress, 0),
  22302. (party_clear_particle_systems, ":village_no"),
  22303. (party_set_slot, ":village_no", slot_village_smoke_added, 0),
  22304. (party_set_icon, ":village_no", ":normal_village_icon"), ##CABA FIX
  22305. (try_end),
  22306. (try_end),
  22307. (try_end),
  22308. ]),
  22309.  
  22310.  
  22311. # script_process_sieges
  22312. # Input: none
  22313. # Output: none
  22314. #called from triggers
  22315. ("process_sieges",
  22316. [
  22317. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  22318. #Reducing siege hardness every day by 20
  22319. (party_get_slot, ":siege_hardness", ":center_no", slot_center_siege_hardness),
  22320. (val_sub, ":siege_hardness", 20),
  22321. (val_max, ":siege_hardness", 0),
  22322. (party_set_slot, ":center_no", slot_center_siege_hardness, ":siege_hardness"),
  22323.  
  22324. (party_get_slot, ":town_food_store", ":center_no", slot_party_food_store),
  22325. (call_script, "script_center_get_food_store_limit", ":center_no"),
  22326. (assign, ":food_store_limit", reg0),
  22327. (try_begin),
  22328. (party_get_slot, ":besieger_party", ":center_no", slot_center_is_besieged_by),
  22329. (ge, ":besieger_party", 0), #town is under siege
  22330.  
  22331. #Reduce prosperity of besieged castle/town by -0.33/-4 every day.
  22332. (try_begin),
  22333. (try_begin),
  22334. (is_between, ":center_no", castles_begin, castles_end),
  22335. (store_random_in_range, ":random_value", 0, 3),
  22336. (try_begin),
  22337. (eq, ":random_value", 0),
  22338. (assign, ":daily_siege_effect_on_prosperity", -1),
  22339. (else_try),
  22340. (assign, ":daily_siege_effect_on_prosperity", 0),
  22341. (try_end),
  22342. (else_try),
  22343. (assign, ":daily_siege_effect_on_prosperity", -4),
  22344. (try_end),
  22345.  
  22346. (call_script, "script_change_center_prosperity", ":center_no", ":daily_siege_effect_on_prosperity"),
  22347. (val_add, "$newglob_total_prosperity_from_townloot", ":daily_siege_effect_on_prosperity"),
  22348. (try_end),
  22349.  
  22350. (store_faction_of_party, ":center_faction", ":center_no"),
  22351. # Lift siege unless there is an enemy party nearby
  22352. (assign, ":siege_lifted", 0),
  22353. (try_begin),
  22354. (try_begin),
  22355. (neg|party_is_active, ":besieger_party"),
  22356. (assign, ":siege_lifted", 1),
  22357. (else_try),
  22358. (store_distance_to_party_from_party, ":besieger_distance", ":center_no", ":besieger_party"),
  22359. (gt, ":besieger_distance", 5),
  22360. (assign, ":siege_lifted", 1),
  22361. (else_try),
  22362. (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  22363. (store_relation, ":reln", ":besieger_faction", ":center_faction"),
  22364. (ge, ":reln", 0),
  22365. (assign, ":siege_lifted", 1),
  22366. (try_end),
  22367.  
  22368.  
  22369. (eq, ":siege_lifted", 1),
  22370. #If another lord can take over the siege, it isn't lifted
  22371. (try_for_range, ":enemy_hero", active_npcs_begin, active_npcs_end),
  22372. (troop_slot_eq, ":enemy_hero", slot_troop_occupation, slto_kingdom_hero),
  22373. (troop_get_slot, ":enemy_party", ":enemy_hero", slot_troop_leaded_party),
  22374. (ge, ":enemy_party", 0),
  22375. (party_is_active, ":enemy_party"),
  22376. (store_faction_of_party, ":party_faction", ":enemy_party"),
  22377. (store_relation, ":reln", ":party_faction", ":center_faction"),
  22378. (lt, ":reln", 0),
  22379. (store_distance_to_party_from_party, ":distance", ":center_no", ":enemy_party"),
  22380. (lt, ":distance", 4),
  22381. (assign, ":besieger_party", ":enemy_party"),
  22382. (party_set_slot, ":center_no", slot_center_is_besieged_by, ":enemy_party"),
  22383. (assign, ":siege_lifted", 0),
  22384. (try_end),
  22385. (try_end),
  22386. (try_begin),
  22387. (eq, ":siege_lifted", 1),
  22388. (call_script, "script_lift_siege", ":center_no", 1),
  22389. (else_try),
  22390. (call_script, "script_center_get_food_consumption", ":center_no"),
  22391. (assign, ":food_consumption", reg0),
  22392. (val_sub, ":town_food_store", ":food_consumption"), # reduce food only under siege???
  22393. (try_begin),
  22394. (le, ":town_food_store", 0), #town is starving
  22395. (store_random_in_range, ":r", 0, 100),
  22396. (lt, ":r", 10),
  22397. (call_script, "script_party_wound_all_members", ":center_no"), # town falls with 10% chance if starving
  22398. (try_end),
  22399. (try_end),
  22400. (else_try),
  22401. #town is not under siege...
  22402. (val_add, ":town_food_store", 30), #add 30 food (significant for castles only.
  22403. (try_end),
  22404.  
  22405. (val_min, ":town_food_store", ":food_store_limit"),
  22406. (val_max, ":town_food_store", 0),
  22407. (party_set_slot, ":center_no", slot_party_food_store, ":town_food_store"),
  22408. (try_end),
  22409. ]),
  22410.  
  22411. # script_lift_siege
  22412. # Input: arg1 = center_no, arg2 = display_message
  22413. # Output: none
  22414. #called from triggers
  22415. ("lift_siege",
  22416. [
  22417. (store_script_param, ":center_no", 1),
  22418. (store_script_param, ":display_message", 2),
  22419. (party_set_slot, ":center_no", slot_center_is_besieged_by, -1), #clear siege
  22420. (call_script, "script_village_set_state", ":center_no", 0), #clear siege flag
  22421. (try_begin),
  22422. (eq, ":center_no", "$g_player_besiege_town"),
  22423. (assign, "$g_siege_method", 0), #remove siege progress
  22424. (try_end),
  22425. (try_begin),
  22426. (eq, ":display_message", 1),
  22427. (str_store_party_name_link, s3, ":center_no"),
  22428. (display_message, "@{s3} is no longer under siege."),
  22429. (try_end),
  22430. ]),
  22431.  
  22432.  
  22433. # script_process_alarms
  22434. # Input: none
  22435. # Output: none
  22436. #called from triggers
  22437. ("process_alarms",
  22438. [
  22439. (assign, ":current_modula", "$g_alarm_modula"),
  22440. (val_add, "$g_alarm_modula", 1),
  22441. (try_begin),
  22442. (eq, "$g_alarm_modula", 3),
  22443. (assign, "$g_alarm_modula", 0),
  22444. (try_end),
  22445.  
  22446. (try_for_range, ":center_no", centers_begin, centers_end),
  22447. (store_mod, ":center_modula", ":center_no", 3),
  22448. (eq, ":center_modula", ":current_modula"),
  22449.  
  22450. (party_set_slot, ":center_no", slot_center_last_spotted_enemy, -1),
  22451. (party_set_slot, ":center_no", slot_center_sortie_strength, 0),
  22452. (party_set_slot, ":center_no", slot_center_sortie_enemy_strength, 0),
  22453.  
  22454. (assign, ":spotting_range", 3),
  22455. (try_begin),
  22456. (is_currently_night),
  22457. (assign, ":spotting_range", 2),
  22458. (try_end),
  22459.  
  22460. (try_begin),
  22461. (party_slot_eq, ":center_no", slot_center_has_watch_tower, 1),
  22462. (val_mul, ":spotting_range", 2),
  22463. (else_try),
  22464. (neg|is_between, ":center_no", villages_begin, villages_end),
  22465. (val_add, ":spotting_range", 1),
  22466. (val_mul, ":spotting_range", 2),
  22467. (try_end),
  22468.  
  22469. (store_faction_of_party, ":center_faction", ":center_no"),
  22470.  
  22471. (try_for_parties, ":party_no"),
  22472. (this_or_next|party_slot_eq, ":party_no", slot_party_type, spt_kingdom_hero_party),
  22473. (eq, ":party_no", "p_main_party"),
  22474.  
  22475. (store_faction_of_party, ":party_faction", ":party_no"),
  22476.  
  22477. (try_begin),
  22478. (eq, ":party_no", "p_main_party"),
  22479. (assign, ":party_faction", "$players_kingdom"),
  22480. (try_end),
  22481.  
  22482. (try_begin),
  22483. (eq, ":party_faction", ":center_faction"),
  22484.  
  22485. (store_distance_to_party_from_party, ":distance", ":party_no", ":center_no"),
  22486. (le, ":distance", ":spotting_range"),
  22487.  
  22488. (party_get_slot, ":cached_strength", ":party_no", slot_party_cached_strength),
  22489. (party_get_slot, ":sortie_strength", ":center_no", slot_center_sortie_strength),
  22490. (val_add, ":sortie_strength", ":cached_strength"),
  22491. (party_set_slot, ":center_no", slot_center_sortie_strength, ":sortie_strength"),
  22492. (else_try),
  22493. (neq, ":party_faction", ":center_faction"),
  22494.  
  22495. (store_distance_to_party_from_party, ":distance", ":party_no", ":center_no"),
  22496.  
  22497. (try_begin),
  22498. (lt, ":distance", 10),
  22499. (store_current_hours, ":hours"),
  22500. (store_sub, ":faction_recce_slot", ":party_faction", kingdoms_begin),
  22501. (val_add, ":faction_recce_slot", slot_center_last_reconnoitered_by_faction_time),
  22502. (party_set_slot, ":center_no", ":faction_recce_slot", ":hours"),
  22503.  
  22504. #(eq, "$cheat_mode", 1),
  22505. #(str_store_faction_name, s4, ":party_faction"),
  22506. #(str_store_party_name, s5, ":center_no"),
  22507. #(display_message, "@{!}DEBUG -- {s4} reconnoiters {s5}"),
  22508. (try_end),
  22509.  
  22510. (store_relation, ":reln", ":center_faction", ":party_faction"),
  22511. (lt, ":reln", 0),
  22512. (try_begin),
  22513. (le, ":distance", ":spotting_range"),
  22514.  
  22515. (party_get_slot, ":cached_strength", ":party_no", slot_party_cached_strength),
  22516. (party_get_slot, ":enemy_strength", ":center_no", slot_center_sortie_enemy_strength),
  22517. (val_add, ":enemy_strength", ":cached_strength"),
  22518. (party_set_slot, ":center_no", slot_center_sortie_enemy_strength, ":enemy_strength"),
  22519. (party_set_slot, ":center_no", slot_center_last_spotted_enemy, ":party_no"),
  22520. (try_end),
  22521.  
  22522. (try_end),
  22523. (try_end),
  22524. (try_end),
  22525.  
  22526. (try_for_range, ":center_no", centers_begin, centers_end),
  22527. (store_mod, ":center_modula", ":center_no", 3),
  22528. (eq, ":center_modula", ":current_modula"),
  22529.  
  22530. (try_begin), #eligible units sortie out of castle
  22531. (is_between, ":center_no", walled_centers_begin, walled_centers_end),
  22532. (party_slot_ge, ":center_no", slot_center_last_spotted_enemy, 0),
  22533.  
  22534. (party_get_slot, ":sortie_strength", ":center_no", slot_center_sortie_strength),
  22535. (party_get_slot, ":enemy_strength", ":center_no", slot_center_sortie_enemy_strength),
  22536.  
  22537. #Below two lines are new added by ozan. While AI want to drive nearby besieging enemy parties by making sortie them, they give up current battle if they are already joining one.
  22538. #Lets assume there is a battle inside the castle, because enemies are inside castle and they are so close to castle they will be also added to slot_center_sortie_enemy_strength
  22539. #But in this scenario, they are not outside the castle, so searching/patrolling enemy outside the castle is useless at this point.
  22540. #So if there is already a battle inside the center, do not sortie and search enemy outside.
  22541. (party_get_battle_opponent, ":center_battle_opponent", ":center_no"),
  22542. (try_begin),
  22543. (ge, "$cheat_mode", 1),
  22544. (ge, ":center_battle_opponent", 0),
  22545. (str_store_party_name, s7, ":center_no"),
  22546. (str_store_party_name, s6, ":center_battle_opponent"),
  22547. (display_message, "@{!}DEBUG : There are already enemies ({s6}) inside {s7}."),
  22548. (try_end),
  22549. (lt, ":center_battle_opponent", 0),
  22550. #New added by ozan ended.
  22551.  
  22552. (try_begin),
  22553. (eq, "$cheat_mode", 1),
  22554. (str_store_party_name, s4, ":center_no"),
  22555. (assign, reg3, ":sortie_strength"),
  22556. (assign, reg4, ":enemy_strength"),
  22557. (display_message, "@{!}DEBUG -- Calculating_sortie for {s4} strength of {reg3} vs {reg4} enemies"),
  22558. (try_end),
  22559.  
  22560. (store_mul, ":enemy_strength_mul_14_div_10", ":enemy_strength", 14),
  22561. (val_div, ":enemy_strength_mul_14_div_10", 10),
  22562. (gt, ":sortie_strength", ":enemy_strength_mul_14_div_10"),
  22563.  
  22564. (assign, ":at_least_one_party_sorties", 0),
  22565. (try_for_parties, ":sortie_party"),
  22566. (party_get_attached_to, ":town", ":sortie_party"),
  22567. (eq, ":town", ":center_no"),
  22568.  
  22569. (party_slot_eq, ":sortie_party", slot_party_type, spt_kingdom_hero_party),
  22570.  
  22571. (party_get_slot, ":cached_strength", ":sortie_party", slot_party_cached_strength),
  22572. (ge, ":cached_strength", 100),
  22573.  
  22574. (party_detach, ":sortie_party"),
  22575. (call_script, "script_party_set_ai_state", ":sortie_party", spai_patrolling_around_center, ":center_no"),
  22576.  
  22577. (try_begin),
  22578. (eq, "$cheat_mode", 1),
  22579. (str_store_party_name, s4, ":sortie_party"),
  22580. (display_message, "str_s4_sorties"),
  22581. (try_end),
  22582.  
  22583. (eq, ":at_least_one_party_sorties", 0),
  22584. (assign, ":at_least_one_party_sorties", ":sortie_party"),
  22585. (try_end),
  22586.  
  22587. (try_begin),
  22588. (party_is_in_town, "p_main_party", ":center_no"),
  22589. (eq, "$g_player_is_captive", 0),
  22590. (gt, ":at_least_one_party_sorties", 0),
  22591. (call_script, "script_add_notification_menu", "mnu_notification_sortie_possible", ":center_no", ":sortie_party"),
  22592. (try_end),
  22593. (try_end),
  22594.  
  22595. (store_faction_of_party, ":center_faction", ":center_no"),
  22596.  
  22597. #Send message
  22598. (this_or_next|eq, "$cheat_mode", 1), #this is message
  22599. (this_or_next|party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
  22600. (eq, ":center_faction", "$players_kingdom"),
  22601.  
  22602. (party_get_slot, ":enemy_party", ":center_no", slot_center_last_spotted_enemy),
  22603. (ge, ":enemy_party", 0),
  22604. (store_distance_to_party_from_party, ":dist", "p_main_party", ":center_no"),
  22605. (assign, ":has_messenger", 0),
  22606. (try_begin),
  22607. (this_or_next|party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
  22608. (eq, ":center_faction", "fac_player_supporters_faction"),
  22609. (party_slot_eq, ":center_no", slot_center_has_messenger_post, 1),
  22610. (assign, ":has_messenger", 1),
  22611. (try_end),
  22612.  
  22613. (this_or_next|eq, "$cheat_mode", 1),
  22614. (this_or_next|lt, ":dist", 30),
  22615. (eq, ":has_messenger", 1),
  22616.  
  22617. (str_store_party_name_link, s1, ":center_no"),
  22618. (party_get_slot, ":exact_enemy_strength", ":center_no", slot_center_sortie_enemy_strength),
  22619.  
  22620. (try_begin),
  22621. (lt, ":exact_enemy_strength", 500),
  22622. (display_message, "@Small bands of enemies spotted near {s1}."),
  22623. (else_try),
  22624. (lt, ":exact_enemy_strength", 1000),
  22625. (display_message, "@Enemy patrols spotted near {s1}."),
  22626. (else_try),
  22627. (lt, ":exact_enemy_strength", 2000),
  22628. (display_message, "@Medium-sized group of enemies spotted near {s1}."),
  22629. (else_try),
  22630. (lt, ":exact_enemy_strength", 4000),
  22631. (display_message, "@Significant group of enemies spotted near {s1}."),
  22632. (else_try),
  22633. (lt, ":exact_enemy_strength", 8000),
  22634. (display_message, "@Army of enemies spotted near {s1}."),
  22635. (else_try),
  22636. (lt, ":exact_enemy_strength", 16000),
  22637. (display_message, "@Large army of enemies spotted near {s1}."),
  22638. (else_try),
  22639. (display_message, "@Great host of enemies spotted near {s1}."),
  22640. (try_end),
  22641. #maybe do audio sound?
  22642.  
  22643. (try_end),
  22644. ]),
  22645.  
  22646. # script_allow_vassals_to_join_indoor_battle
  22647. # Input: none
  22648. # Output: none
  22649. ("allow_vassals_to_join_indoor_battle",
  22650. [
  22651. #if our commander attacks an enemy army
  22652. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  22653. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  22654. (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
  22655. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  22656. (gt, ":party_no", 0),
  22657. (party_is_active, ":party_no"),
  22658.  
  22659. (party_get_attached_to, ":party_is_attached_to", ":party_no"),
  22660. (lt, ":party_is_attached_to", 0),
  22661.  
  22662. (store_troop_faction, ":faction_no", ":troop_no"),
  22663.  
  22664. (try_begin),
  22665. #(faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  22666. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  22667. (party_get_slot, ":commander_party", ":party_no", slot_party_ai_object),
  22668. (gt, ":commander_party", 0),
  22669. (party_is_active, ":commander_party"),
  22670.  
  22671. (assign, ":besieged_center", -1),
  22672. (try_begin),
  22673. (party_slot_eq, ":commander_party", slot_party_ai_state, spai_holding_center), #if commander is holding a center
  22674. (party_get_slot, ":commander_object", ":commander_party", slot_party_ai_object), #get commander's ai object (center they are holding)
  22675. (party_get_battle_opponent, ":besieger_enemy", ":commander_object"), #get this object's battle opponent
  22676. (party_is_active, ":besieger_enemy"),
  22677. (assign, ":besieged_center", ":commander_object"),
  22678. (assign, ":commander_object", ":besieger_enemy"),
  22679. (else_try),
  22680. (party_slot_eq, ":commander_party", slot_party_ai_state, spai_engaging_army), #if commander is engaging an army
  22681. (party_get_slot, ":commander_object", ":commander_party", slot_party_ai_object), #get commander's ai object (army which they engaded)
  22682. (ge, ":commander_object", 0), #if commander has an object
  22683. (neg|is_between, ":commander_object", centers_begin, centers_end), #if this object is not a center, so it is a party
  22684. (party_is_active, ":commander_object"),
  22685. (party_get_battle_opponent, ":besieged_center", ":commander_object"), #get this object's battle opponent
  22686. (else_try),
  22687. (assign, ":besieged_center", -1),
  22688. (try_end),
  22689.  
  22690. (is_between, ":besieged_center", walled_centers_begin, walled_centers_end), #if battle opponent of our commander's ai object is a walled center
  22691.  
  22692. (party_get_attached_to, ":attached_to_party", ":commander_party"), #if commander is attached to besieged center already.
  22693. (eq, ":attached_to_party", ":besieged_center"),
  22694.  
  22695. (store_faction_of_party, ":besieged_center_faction", ":besieged_center"),#get (battle opponent of our commander's ai object)'s faction
  22696. (eq, ":besieged_center_faction", ":faction_no"), #if battle opponent of our commander's ai object is from same faction with current party
  22697. (party_is_active, ":commander_object"),
  22698. #make also follow_or_not check if needed
  22699.  
  22700. (call_script, "script_party_set_ai_state", ":party_no", spai_engaging_army, ":commander_object"), #go and help commander
  22701.  
  22702. (try_begin),
  22703. (eq, "$cheat_mode", 1),
  22704. (str_store_party_name, s7, ":party_no"),
  22705. (str_store_party_name, s6, ":commander_object"),
  22706. (display_message, "@{!}DEBUG : {s7} is helping his commander by fighting with {s6}."),
  22707. (try_end),
  22708. (else_try),
  22709. #(faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_center),
  22710.  
  22711. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  22712. (party_get_slot, ":commander_party", ":party_no", slot_party_ai_object),
  22713. (gt, ":commander_party", 0),
  22714. (party_is_active, ":commander_party"),
  22715.  
  22716. (party_get_battle_opponent, ":besieged_center", ":commander_party"), #get this object's battle opponent
  22717.  
  22718. #make also follow_or_not check if needed
  22719.  
  22720. (is_between, ":besieged_center", walled_centers_begin, walled_centers_end), #if this object is a center
  22721. (party_get_attached_to, ":attached_to_party", ":party_no"),
  22722. (neq, ":attached_to_party", ":besieged_center"),
  22723. (party_is_active, ":besieged_center"),
  22724.  
  22725. (call_script, "script_party_set_ai_state", ":party_no", spai_engaging_army, ":besieged_center"), #go and help commander
  22726.  
  22727. #(try_begin),
  22728. # (eq, "$cheat_mode", 1),
  22729. # (str_store_party_name, s7, ":party_no"),
  22730. # (str_store_party_name, s6, ":besieged_center"),
  22731. # (display_message, "@{!}DEBUG : {s7} is helping his commander by attacking {s6}."),
  22732. #(try_end),
  22733.  
  22734. #(party_set_ai_behavior, ":party_no", ai_bhvr_attack_party),
  22735. #(party_set_ai_object, ":party_no", ":besieged_center"),
  22736. #(party_set_flags, ":party_no", pf_default_behavior, 1), #is these needed?
  22737. #(party_set_slot, ":party_no", slot_party_ai_substate, 1), #is these needed?
  22738. (try_end),
  22739. (try_end),
  22740. ]),
  22741.  
  22742. # script_party_set_ai_state
  22743. # Input: arg1 = party_no, arg2 = new_ai_state, arg3 = action_object (if necessary)
  22744. # Output: none (Can fail)
  22745.  
  22746. #Redone somewhat on Feb 18 to make sure that initative is set properly
  22747.  
  22748. ("party_set_ai_state",
  22749. [
  22750. (store_script_param, ":party_no", 1),
  22751. (store_script_param, ":new_ai_state", 2),
  22752. (store_script_param, ":new_ai_object", 3),
  22753.  
  22754. (party_get_slot, ":old_ai_state", ":party_no", slot_party_ai_state),
  22755. (party_get_slot, ":old_ai_object", ":party_no", slot_party_ai_object),
  22756. (party_get_attached_to, ":attached_to_party", ":party_no"),
  22757. (assign, ":party_is_in_town", 0),
  22758. (try_begin),
  22759. (is_between, ":attached_to_party", centers_begin, centers_end),
  22760. (assign, ":party_is_in_town", ":attached_to_party"),
  22761. (try_end),
  22762.  
  22763. (assign, ":commander", -1),
  22764. (try_begin),
  22765. (party_is_active, ":party_no"),
  22766. (party_stack_get_troop_id, ":commander", ":party_no", 0),
  22767. (store_faction_of_party, ":faction_no", ":party_no"),
  22768. (try_end),
  22769.  
  22770. (try_begin),
  22771. (lt, ":commander", 0),
  22772. #sometimes 0 sized parties enter "party_set_ai_state" script. So only discard them
  22773. #(try_begin),
  22774. # (eq, "$cheat_mode", 1),
  22775. # (str_store_troop_name, s6, ":party_no"),
  22776. # (party_get_num_companions, reg6, ":party_no"),
  22777. # (display_message, "@{!}DEBUGS : party name is : {s6}, party size is : {reg6}, new ai discarded."),
  22778. #(try_end),
  22779. (else_try),
  22780. #Party does any business in town
  22781. (try_begin),
  22782. (is_between, ":party_is_in_town", walled_centers_begin, walled_centers_end),
  22783. (party_slot_eq, ":party_is_in_town", slot_center_is_besieged_by, -1),
  22784. (call_script, "script_troop_does_business_in_center", ":commander", ":party_is_in_town"),
  22785. (else_try),
  22786. (party_slot_eq, ":party_no", slot_party_ai_state, spai_visiting_village),
  22787. (party_get_slot, ":party_is_in_village", ":party_no", slot_party_ai_object),
  22788. (is_between, ":party_is_in_village", villages_begin, villages_end),
  22789. #(party_slot_eq, ":party_is_in_village", slot_center_is_looted_by, -1),
  22790. (neg|party_slot_eq, ":party_is_in_village", slot_village_state, svs_being_raided),
  22791. (neg|party_slot_eq, ":party_is_in_village", slot_village_state, svs_looted),
  22792. (store_distance_to_party_from_party, ":distance", ":party_no", ":party_is_in_village"),
  22793. (lt, ":distance", 3),
  22794. (call_script, "script_troop_does_business_in_center", ":commander", ":party_is_in_village"),
  22795. (try_end),
  22796.  
  22797. (party_set_slot, ":party_no", slot_party_follow_me, 0),
  22798.  
  22799. (try_begin),
  22800. (eq, ":old_ai_state", ":new_ai_state"),
  22801. (eq, ":old_ai_object", ":new_ai_object"),
  22802. #do nothing. Nothing is changed.
  22803. (else_try),
  22804. (assign, ":initiative", 100),
  22805. (assign, ":aggressiveness", 8),
  22806. (assign, ":courage", 8),
  22807.  
  22808. (try_begin),
  22809. (this_or_next|eq, ":new_ai_state", spai_accompanying_army),
  22810. (eq, ":new_ai_state", spai_screening_army),
  22811.  
  22812. (party_set_ai_behavior, ":party_no", ai_bhvr_escort_party),
  22813. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22814. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22815.  
  22816. (try_begin),
  22817. (gt, ":party_is_in_town", 0),
  22818. (party_detach, ":party_no"),
  22819. (try_end),
  22820.  
  22821. (try_begin),
  22822. (eq, ":new_ai_state", spai_screening_army),
  22823. (assign, ":aggressiveness", 9),
  22824. (assign, ":courage", 9),
  22825. (assign, ":initiative", 80),
  22826. (else_try),
  22827. (assign, ":aggressiveness", 6),
  22828. (assign, ":courage", 9),
  22829. (assign, ":initiative", 10),
  22830. (try_end),
  22831. (else_try),
  22832. (eq, ":new_ai_state", spai_besieging_center),
  22833.  
  22834. (party_get_position, pos1, ":new_ai_object"),
  22835. (map_get_random_position_around_position, pos2, pos1, 2),
  22836. (party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_point),
  22837. (party_set_ai_target_position, ":party_no", pos2),
  22838. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22839. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22840. (party_set_slot, ":party_no", slot_party_follow_me, 1),
  22841. (party_set_slot, ":party_no", slot_party_ai_substate, 0),
  22842.  
  22843. (try_begin),
  22844. (gt, ":party_is_in_town", 0),
  22845. (neq, ":party_is_in_town", ":new_ai_object"),
  22846. (party_detach, ":party_no"),
  22847. (try_end),
  22848.  
  22849. (assign, ":aggressiveness", 1),
  22850. (assign, ":courage", 9),
  22851. (assign, ":initiative", 20),
  22852. #(assign, ":initiative", 100),
  22853. (else_try),
  22854. (eq, ":new_ai_state", spai_holding_center),
  22855.  
  22856. (party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_party),
  22857. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22858. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22859.  
  22860. (try_begin),
  22861. (gt, ":party_is_in_town", 0),
  22862. (neq, ":party_is_in_town", ":new_ai_object"),
  22863. (party_detach, ":party_no"),
  22864. (try_end),
  22865.  
  22866. (assign, ":aggressiveness", 7),
  22867. (assign, ":courage", 9),
  22868. (assign, ":initiative", 100),
  22869. #(party_set_ai_initiative, ":party_no", 99),
  22870. (else_try),
  22871. (eq, ":new_ai_state", spai_patrolling_around_center),
  22872. (party_get_position, pos1, ":new_ai_object"),
  22873. (map_get_random_position_around_position, pos2, pos1, 1),
  22874. (party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_point),
  22875. (party_set_ai_target_position, ":party_no", pos2),
  22876. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22877.  
  22878. (try_begin),
  22879. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  22880. (party_set_ai_patrol_radius, ":party_no", 1), #line 100
  22881. (else_try),
  22882. (party_set_ai_patrol_radius, ":party_no", 5), #line 100
  22883. (try_end),
  22884.  
  22885. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22886. (party_set_slot, ":party_no", slot_party_follow_me, 1),
  22887. (party_set_slot, ":party_no", slot_party_ai_substate, 0),
  22888.  
  22889. (try_begin),
  22890. (gt, ":party_is_in_town", 0),
  22891. (party_detach, ":party_no"),
  22892. (try_end),
  22893.  
  22894. (try_begin),
  22895. #new to avoid losing time of marshal with attacking unimportant targets while there is a threat in our centers.
  22896. (ge, ":commander", 0),
  22897. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":commander"),
  22898. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  22899.  
  22900. (party_get_position, pos3, ":party_no"),
  22901. (get_distance_between_positions, ":distance_to_center", pos1, pos3),
  22902.  
  22903. (try_begin),
  22904. (ge, ":distance_to_center", 800), #added new (1.122)
  22905. (assign, ":initiative", 10),
  22906. (assign, ":aggressiveness", 1),
  22907. (assign, ":courage", 8),
  22908. (else_try), #below added new (1.122)
  22909. (assign, ":initiative", 100),
  22910. (assign, ":aggressiveness", 8),
  22911. (assign, ":courage", 8),
  22912. (try_end),
  22913. (else_try),
  22914. (assign, ":aggressiveness", 8),
  22915. (assign, ":courage", 8),
  22916. (assign, ":initiative", 100),
  22917. (try_end),
  22918. (else_try),
  22919. (eq, ":new_ai_state", spai_visiting_village),
  22920. (party_get_position, pos1, ":new_ai_object"),
  22921. (map_get_random_position_around_position, pos2, pos1, 2),
  22922. (party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_point),
  22923. (party_set_ai_target_position, ":party_no", pos2),
  22924. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22925. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22926. (party_set_slot, ":party_no", slot_party_ai_substate, 0),
  22927. (try_begin),
  22928. (gt, ":party_is_in_town", 0),
  22929. (neq, ":party_is_in_town", ":new_ai_object"),
  22930. (party_detach, ":party_no"),
  22931. (try_end),
  22932.  
  22933. (assign, ":aggressiveness", 8),
  22934. (assign, ":courage", 8),
  22935. (assign, ":initiative", 100),
  22936. (else_try), #0.660: this is where the 1625/1640 bugs happen with an improper ai_object
  22937. (eq, ":new_ai_state", spai_raiding_around_center),
  22938. (party_get_position, pos1, ":new_ai_object"),
  22939. (map_get_random_position_around_position, pos2, pos1, 1),
  22940. (party_set_ai_behavior, ":party_no", ai_bhvr_patrol_location),
  22941. (party_set_ai_patrol_radius, ":party_no", 10),
  22942. (party_set_ai_target_position, ":party_no", pos2),
  22943. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22944. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22945. (party_set_slot, ":party_no", slot_party_follow_me, 1),
  22946. (party_set_slot, ":party_no", slot_party_ai_substate, 0),
  22947. (try_begin),
  22948. (gt, ":party_is_in_town", 0),
  22949. (neq, ":party_is_in_town", ":new_ai_object"),
  22950. (party_detach, ":party_no"),
  22951. (try_end),
  22952.  
  22953. (try_begin),
  22954. (ge, ":commander", 0),
  22955. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":commander"),
  22956. (assign, ":aggressiveness", 1),
  22957. (assign, ":courage", 8),
  22958. (assign, ":initiative", 20),
  22959. (else_try),
  22960. (assign, ":aggressiveness", 7),
  22961. (assign, ":courage", 8),
  22962. (assign, ":initiative", 100),
  22963. (try_end),
  22964. (else_try),
  22965. (eq, ":new_ai_state", spai_engaging_army),
  22966.  
  22967. (party_set_ai_behavior, ":party_no", ai_bhvr_attack_party),
  22968. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22969. (party_set_flags, ":party_no", pf_default_behavior, 0),
  22970. (try_begin),
  22971. (gt, ":party_is_in_town", 0),
  22972. (party_detach, ":party_no"),
  22973. (try_end),
  22974.  
  22975. (try_begin),
  22976. #new to avoid losing time of marshal with attacking unimportant targets while there is a threat in our centers.
  22977. (ge, ":commander", 0),
  22978. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":commander"),
  22979. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  22980. (assign, ":initiative", 10),
  22981. (assign, ":aggressiveness", 1),
  22982. (assign, ":courage", 8),
  22983. (else_try),
  22984. (assign, ":aggressiveness", 8),
  22985. (assign, ":courage", 8),
  22986. (assign, ":initiative", 100),
  22987. (try_end),
  22988. (else_try),
  22989. (eq, ":new_ai_state", spai_retreating_to_center),
  22990. (party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_party),
  22991. (party_set_ai_object, ":party_no", ":new_ai_object"),
  22992. (party_set_flags, ":party_no", pf_default_behavior, 1),
  22993. (party_set_slot, ":party_no", slot_party_commander_party, -1),
  22994. (try_begin),
  22995. (gt, ":party_is_in_town", 0),
  22996. (neq, ":party_is_in_town", ":new_ai_object"),
  22997. (party_detach, ":party_no"),
  22998. (try_end),
  22999.  
  23000. (assign, ":aggressiveness", 3),
  23001. (assign, ":courage", 4),
  23002. (assign, ":initiative", 100),
  23003. (else_try),
  23004. (eq, ":new_ai_state", spai_undefined),
  23005. (party_set_ai_behavior, ":party_no", ai_bhvr_hold),
  23006. (party_set_flags, ":party_no", pf_default_behavior, 0),
  23007. (try_end),
  23008.  
  23009. (try_begin),
  23010. (troop_slot_eq, ":commander", slot_lord_reputation_type, lrep_martial),
  23011. (val_add, ":aggressiveness", 2),
  23012. (val_add, ":courage", 2),
  23013. (else_try),
  23014. (troop_slot_eq, ":commander", slot_lord_reputation_type, lrep_debauched),
  23015. (val_sub, ":aggressiveness", 1),
  23016. (val_sub, ":courage", 1),
  23017. (try_end),
  23018.  
  23019. (party_set_slot, ":party_no", slot_party_ai_state, ":new_ai_state"),
  23020. (party_set_slot, ":party_no", slot_party_ai_object, ":new_ai_object"),
  23021. (party_set_aggressiveness, ":party_no", ":aggressiveness"),
  23022. (party_set_courage, ":party_no", ":courage"),
  23023. (party_set_ai_initiative, ":party_no", ":initiative"),
  23024. (try_end),
  23025. (try_end),
  23026.  
  23027. #Helpfulness
  23028. (try_begin),
  23029. (ge, ":commander", 0),
  23030.  
  23031. (party_set_helpfulness, ":party_no", 101),
  23032. (try_begin),
  23033. (troop_slot_eq, ":commander", slot_lord_reputation_type, lrep_martial),
  23034. (party_set_helpfulness, ":party_no", 200),
  23035. (else_try),
  23036. (troop_slot_eq, ":commander", slot_lord_reputation_type, lrep_upstanding),
  23037. (party_set_helpfulness, ":party_no", 150),
  23038. (else_try),
  23039. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  23040. (party_set_helpfulness, ":party_no", 110),
  23041. (else_try),
  23042. (troop_slot_eq, ":commander", slot_lord_reputation_type, lrep_quarrelsome),
  23043. (party_set_helpfulness, ":party_no", 90),
  23044. (else_try),
  23045. (troop_slot_eq, ":commander", slot_lord_reputation_type, lrep_selfrighteous),
  23046. (party_set_helpfulness, ":party_no", 80),
  23047. (else_try),
  23048. (troop_slot_eq, ":commander", slot_lord_reputation_type, lrep_debauched),
  23049. (party_set_helpfulness, ":party_no", 50),
  23050. (try_end),
  23051. (try_end),
  23052. ]),
  23053.  
  23054. ("cf_party_under_player_suggestion",
  23055. [
  23056. (store_script_param, ":party_no", 1),
  23057.  
  23058. (party_slot_eq, ":party_no", slot_party_following_orders_of_troop, "trp_kingdom_heroes_including_player_begin"),
  23059.  
  23060. (party_get_slot, ":ai_state", ":party_no", slot_party_ai_state),
  23061. (party_slot_eq, ":party_no", slot_party_orders_type, ":ai_state"),
  23062.  
  23063. (party_get_slot, ":ai_object", ":party_no", slot_party_ai_object),
  23064. (party_slot_eq, ":party_no", slot_party_orders_object, ":ai_object"),
  23065.  
  23066. (store_current_hours, ":hours_since_orders_given"),
  23067. (party_get_slot, ":orders_time", ":party_no", slot_party_orders_time),
  23068.  
  23069. (val_sub, ":hours_since_orders_given", ":orders_time"),
  23070. (lt, ":hours_since_orders_given", 12),
  23071. ]),
  23072.  
  23073. #Currently called from process_ai_state, could be called from elsewhere
  23074. #It is used for lord to (1)Court ladies (2)Collect rents (3)Look for volunteers
  23075. ("troop_does_business_in_center",
  23076. [
  23077. (store_script_param, ":troop_no", 1),
  23078. (store_script_param, ":center_no", 2),
  23079.  
  23080. (troop_get_slot, ":led_party", ":troop_no", slot_troop_leaded_party),
  23081.  
  23082. (store_current_hours, ":current_time"),
  23083. (try_begin),
  23084. # (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"), #this was added to get lords in centers out and visiting their fiefs, but I've adjusted the decision checklist
  23085. (is_between, ":center_no", walled_centers_begin, walled_centers_end),
  23086. (party_set_slot, ":led_party", slot_party_last_in_any_center, ":current_time"),
  23087. (try_begin),
  23088. (call_script, "script_lord_get_home_center", ":troop_no"),
  23089. (eq, ":center_no", reg0),
  23090. (party_set_slot, ":led_party", slot_party_last_in_home_center, ":current_time"),
  23091. (try_end),
  23092. (try_end),
  23093.  
  23094. #Collect the rents
  23095. (try_begin),
  23096. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  23097.  
  23098. (party_get_slot, ":accumulated_rents", ":center_no", slot_center_accumulated_rents),
  23099. (party_get_slot, ":accumulated_tariffs", ":center_no", slot_center_accumulated_tariffs),
  23100. (troop_get_slot, ":troop_wealth", ":troop_no", slot_troop_wealth),
  23101. (val_add, ":troop_wealth", ":accumulated_rents"),
  23102. (val_add, ":troop_wealth", ":accumulated_tariffs"),
  23103.  
  23104. (troop_set_slot, ":troop_no", slot_troop_wealth, ":troop_wealth"),
  23105. (party_set_slot, ":center_no", slot_center_accumulated_rents, 0),
  23106. (party_set_slot, ":center_no", slot_center_accumulated_tariffs, 0),
  23107.  
  23108. (try_begin),
  23109. (this_or_next|eq, "$cheat_mode", 1),
  23110. (eq, "$cheat_mode", 3),
  23111. (assign, reg1, ":troop_wealth"),
  23112. (str_store_party_name, s4, ":center_no"),
  23113. (add_troop_note_from_sreg, ":troop_no", 1, "str_current_wealth_reg1_taxes_last_collected_from_s4", 0),
  23114. (try_end),
  23115. (try_end),
  23116.  
  23117. #Recruit volunteers
  23118. (try_begin),
  23119. (is_between, ":center_no", villages_begin, villages_end),
  23120.  
  23121. (party_get_slot, ":troop_type", ":center_no", slot_center_npc_volunteer_troop_type),
  23122. (party_get_slot, ":troop_amount", ":center_no", slot_center_npc_volunteer_troop_amount),
  23123. (party_set_slot, ":center_no", slot_center_npc_volunteer_troop_amount, -1),
  23124. (party_add_members, ":led_party", ":troop_type", ":troop_amount"),
  23125. (try_end),
  23126.  
  23127. #Courtship
  23128. (try_begin),
  23129. (party_get_slot, ":time_of_last_courtship", ":led_party", slot_party_leader_last_courted),
  23130. (store_sub, ":hours_since_last_courtship", ":current_time", ":time_of_last_courtship"),
  23131. (gt, ":hours_since_last_courtship", 72),
  23132.  
  23133. (troop_slot_eq, ":troop_no", slot_troop_spouse, -1),
  23134. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  23135. (troop_get_slot, ":love_interest", ":troop_no", ":love_interest_slot"),
  23136. (gt, ":love_interest", 0),
  23137. (troop_get_slot, ":love_interest_town", ":love_interest", slot_troop_cur_center),
  23138. (eq, ":center_no", ":love_interest_town"),
  23139.  
  23140. (call_script, "script_courtship_event_troop_court_lady", ":troop_no", ":love_interest"),
  23141. (party_set_slot, ":led_party", slot_party_leader_last_courted, ":current_time"),
  23142. (try_end),
  23143. (try_end),
  23144. ]),
  23145.  
  23146. # script_process_kingdom_parties_ai
  23147. # This is called more frequently than decide_kingdom_parties_ai
  23148. # Input: none
  23149. # Output: none
  23150. #called from triggers
  23151. ("process_kingdom_parties_ai",
  23152. [
  23153. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  23154. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  23155. (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
  23156. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  23157. (gt, ":party_no", 0),
  23158. (call_script, "script_process_hero_ai", ":troop_no"),
  23159. (try_end),
  23160. ]),
  23161.  
  23162. # script_process_hero_ai
  23163. # This is called more frequently than script_decide_kingdom_party_ais
  23164. #Handles sieges, raids, etc -- does not change the party's basic mission.
  23165. # Input: none
  23166. # Output: none
  23167. #called from triggers
  23168. ("process_hero_ai",
  23169. [
  23170. (store_script_param_1, ":troop_no"),
  23171. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  23172. (try_begin),
  23173. (party_is_active, ":party_no"),
  23174. (store_faction_of_party, ":faction_no", ":party_no"),
  23175. (party_get_slot, ":ai_state", ":party_no", slot_party_ai_state),
  23176. (party_get_slot, ":ai_object", ":party_no", slot_party_ai_object),
  23177. (try_begin),
  23178. (eq, ":ai_state", spai_besieging_center),
  23179. (try_begin),
  23180. (party_slot_eq, ":ai_object", slot_center_is_besieged_by, -1),
  23181. (store_distance_to_party_from_party, ":distance", ":party_no", ":ai_object"),
  23182. (lt, ":distance", 3),
  23183. (try_begin),
  23184. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  23185. (party_get_slot, ":commander_party", ":party_no", slot_party_ai_object),
  23186. (party_set_slot, ":ai_object", slot_center_is_besieged_by, ":commander_party"),
  23187. (else_try),
  23188. (party_set_slot, ":ai_object", slot_center_is_besieged_by, ":party_no"),
  23189. (try_end),
  23190. (store_current_hours, ":cur_hours"),
  23191. (party_set_slot, ":ai_object", slot_center_siege_begin_hours, ":cur_hours"),
  23192.  
  23193. (str_store_party_name_link, s1, ":ai_object"),
  23194. (str_store_troop_name_link, s2, ":troop_no"),
  23195. (str_store_faction_name_link, s3, ":faction_no"),
  23196. (display_log_message, "@{s1} has been besieged by {s2} of {s3}."),
  23197. (try_begin),
  23198. (store_faction_of_party, ":ai_object_faction", ":ai_object"),
  23199. (this_or_next|party_slot_eq, ":ai_object", slot_town_lord, "trp_player"),
  23200. (eq, ":ai_object_faction", "fac_player_supporters_faction"),
  23201. (call_script, "script_add_notification_menu", "mnu_notification_center_under_siege", ":ai_object", ":troop_no"),
  23202. (try_end),
  23203. (call_script, "script_village_set_state", ":ai_object", svs_under_siege),
  23204. (assign, "$g_recalculate_ais", 1),
  23205. (try_end),
  23206. (else_try),
  23207. (eq, ":ai_state", spai_raiding_around_center),
  23208. (party_slot_eq, ":party_no", slot_party_ai_substate, 0),
  23209. (assign, ":selected_village", 0),
  23210. (try_for_range, ":enemy_village_no", villages_begin, villages_end),
  23211. (eq, ":selected_village", 0),
  23212. (store_faction_of_party, ":enemy_village_faction", ":enemy_village_no"),
  23213. (try_begin),
  23214. (party_slot_eq, ":enemy_village_no", slot_town_lord, "trp_player"),
  23215. (store_relation, ":reln", "fac_player_supporters_faction", ":faction_no"),
  23216. (else_try),
  23217. (store_relation, ":reln", ":enemy_village_faction", ":faction_no"),
  23218. (try_end),
  23219. (lt, ":reln", 0),
  23220. (store_distance_to_party_from_party, ":dist", ":enemy_village_no", ":party_no"),
  23221. (lt, ":dist", 15),
  23222. (party_slot_eq, ":enemy_village_no", slot_village_state, 0), #village is not already raided
  23223. #CHANGE STATE TO RAID THIS VILLAGE
  23224. (assign, ":selected_village", ":enemy_village_no"),
  23225. (try_end),
  23226. (try_begin),
  23227. (eq, ":selected_village", 0),
  23228. (is_between, ":ai_object", villages_begin, villages_end),
  23229. (assign, ":selected_village", ":ai_object"),
  23230. (try_end),
  23231. (try_begin),
  23232. (gt, ":selected_village", 0),
  23233. (call_script, "script_party_set_ai_state", ":party_no", spai_raiding_around_center, ":selected_village"),
  23234. (try_begin),
  23235. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  23236. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_raiding_village),
  23237. (faction_set_slot, ":faction_no", slot_faction_ai_object, ":selected_village"),
  23238. (try_end),
  23239. (party_get_position, pos1, ":selected_village"),
  23240. (map_get_random_position_around_position, pos2, pos1, 1),
  23241. (party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_point),
  23242. (party_set_ai_target_position, ":party_no", pos2),
  23243. (party_set_ai_object, ":party_no", ":selected_village"),
  23244. (party_set_slot, ":party_no", slot_party_ai_substate, 1),
  23245. (try_end),
  23246. (else_try),
  23247. (eq, ":ai_state", spai_raiding_around_center),#substate is 1
  23248. (try_begin),
  23249. (store_distance_to_party_from_party, ":distance", ":party_no", ":ai_object"),
  23250. (lt, ":distance", 2),
  23251. (try_begin),
  23252. (party_slot_eq, ":ai_object", slot_village_state, 0),
  23253. (call_script, "script_village_set_state", ":ai_object", svs_being_raided),
  23254. (party_set_slot, ":ai_object", slot_village_raided_by, ":party_no"),
  23255. (try_begin),
  23256. (store_faction_of_party, ":village_faction", ":ai_object"),
  23257. (this_or_next|party_slot_eq, ":ai_object", slot_town_lord, "trp_player"),
  23258. (eq, ":village_faction", "fac_player_supporters_faction"),
  23259. (store_distance_to_party_from_party, ":dist", "p_main_party", ":ai_object"),
  23260. (this_or_next|lt, ":dist", 30),
  23261. (party_slot_eq, ":ai_object", slot_center_has_messenger_post, 1),
  23262. (call_script, "script_add_notification_menu", "mnu_notification_village_raid_started", ":ai_object", ":troop_no"),
  23263. (try_end),
  23264. (else_try),
  23265. (party_slot_eq, ":ai_object", slot_village_state, svs_being_raided),
  23266. (else_try),
  23267. #if anything other than being_raided leave
  23268. (party_set_slot, ":party_no", slot_party_ai_substate, 0),
  23269. (try_end),
  23270. (try_end),
  23271. (else_try),
  23272. (eq, ":ai_state", spai_retreating_to_center),
  23273. (try_begin),
  23274. (party_get_battle_opponent, ":enemy_party", ":party_no"),
  23275. (ge, ":enemy_party", 0), #we are in a battle! we may be caught in a loop!
  23276. (call_script, "script_party_set_ai_state", ":party_no", spai_undefined, -1),
  23277. (party_set_flags, ":party_no", pf_default_behavior, 0),
  23278. (party_set_slot, ":party_no", slot_party_commander_party, -1),
  23279. (try_end),
  23280. (else_try),
  23281. (eq, ":ai_state", spai_patrolling_around_center),
  23282.  
  23283. (try_begin),
  23284. (party_slot_eq, ":party_no", slot_party_ai_substate, 0),
  23285. (store_distance_to_party_from_party, ":distance", ":party_no", ":ai_object"),
  23286. (lt, ":distance", 6),
  23287. (party_set_slot, ":party_no", slot_party_ai_substate, 1),
  23288.  
  23289. (party_set_aggressiveness, ":party_no", 8),
  23290. (party_set_courage, ":party_no", 8),
  23291. (party_set_ai_initiative, ":party_no", 100),
  23292.  
  23293. (party_set_ai_behavior, ":party_no", ai_bhvr_patrol_party),
  23294. (party_set_ai_object, ":party_no", ":ai_object"),
  23295. (try_end),
  23296. (else_try),
  23297. (eq, ":ai_state", spai_holding_center),
  23298. (try_end),
  23299. (try_end),
  23300. ]),
  23301.  
  23302. # script_begin_assault_on_center
  23303. # Input: arg1: faction_no
  23304. # Output: none
  23305. #called from triggers
  23306. ("begin_assault_on_center",
  23307. [
  23308. (store_script_param, ":center_no", 1),
  23309.  
  23310. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  23311. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  23312. (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
  23313. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  23314. (gt, ":party_no", 0),
  23315. (party_is_active, ":party_no"),
  23316.  
  23317. (assign, ":continue", 0),
  23318. (try_begin),
  23319. (party_slot_eq, ":party_no", slot_party_ai_state, spai_besieging_center),
  23320. (party_slot_eq, ":party_no", slot_party_ai_object, ":center_no"),
  23321. (party_slot_eq, ":party_no", slot_party_ai_substate, 0),
  23322. (assign, ":continue", 1),
  23323. (else_try),
  23324. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  23325. (party_get_slot, ":commander_party", ":party_no", slot_party_ai_object),
  23326. (gt, ":commander_party", 0),
  23327. (party_is_active, ":commander_party"),
  23328. (party_slot_eq, ":commander_party", slot_party_ai_state, spai_besieging_center),
  23329. (party_slot_eq, ":commander_party", slot_party_ai_object, ":center_no"),
  23330. (call_script, "script_party_set_ai_state", ":party_no", spai_besieging_center, ":center_no"),
  23331. (assign, ":continue", 1),
  23332. (try_end),
  23333.  
  23334. (eq, ":continue", 1),
  23335.  
  23336. (party_set_ai_behavior, ":party_no", ai_bhvr_attack_party),
  23337. (party_set_ai_object, ":party_no", ":center_no"),
  23338. (party_set_flags, ":party_no", pf_default_behavior, 1),
  23339. (party_set_slot, ":party_no", slot_party_ai_substate, 1),
  23340. (try_end),
  23341. ]),
  23342.  
  23343. #DEPRECATED - Using new political issue system instead
  23344. ("select_faction_marshall",
  23345. [
  23346. # (store_script_param_1, ":faction_no"),
  23347. # (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  23348. # (faction_get_slot, ":old_faction_marshall", ":faction_no", slot_faction_marshall),
  23349.  
  23350. # (assign, ":old_marshal_is_avaliable", 0),
  23351. # (try_begin),
  23352. # (gt, ":old_faction_marshall", 0),
  23353. # (troop_get_slot, ":old_marshal_party", ":old_faction_marshall", slot_troop_leaded_party),
  23354. # (party_is_active, ":old_marshal_party"),
  23355. # (assign, ":old_marshal_is_avaliable", 1),
  23356. # (try_end),
  23357.  
  23358. #Ozan : I am adding some codes here because sometimes armies demobilize during last seconds of an
  23359. #important event like taking a castle, ext because of marshal change. When marshal changes during
  23360. #an important event occurs new marshal's followers become 0 and continueing siege attack seems less
  23361. #valuable then armies demobilize, faction ai become "do nothing", "I cannot think anything to do" ext.
  23362.  
  23363. # (assign, ":there_is_an_important_situation", 0),
  23364. # (faction_get_slot, ":current_ai_object", ":faction_no", slot_faction_ai_object),
  23365.  
  23366. # (try_begin), #do not demobilize during taking a castle/town (fighting in the castle)
  23367. # (is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  23368. # (party_get_battle_opponent, ":besieger_party", ":current_ai_object"),
  23369. # (ge, ":besieger_party", 0),
  23370. # (party_is_active, ":besieger_party"),
  23371. # (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  23372. # (this_or_next|eq, ":besieger_faction", ":faction_no"),
  23373. # (eq, ":besieger_faction", "fac_player_faction"),
  23374. # (assign, ":there_is_an_important_situation", 1),
  23375. # (try_end),
  23376.  
  23377. # (try_begin), #do not demobilize during raiding a village (holding around village)
  23378. # (is_between, ":current_ai_object", centers_begin, centers_end),
  23379. # (neg|is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  23380. # (party_slot_eq, ":current_ai_object", slot_village_state, svs_being_raided),
  23381. # (assign, ":there_is_an_important_situation", 1),
  23382. # (try_end),
  23383.  
  23384. # (try_begin), #do not demobilize during besigning a siege (holding around castle)
  23385. # (is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  23386. # #(str_store_party_name, s7, ":current_ai_object"),
  23387. # (party_get_slot, ":besieger_party", ":current_ai_object", slot_center_is_besieged_by),
  23388. # (ge, ":besieger_party", 0),
  23389. # (party_is_active, ":besieger_party"),
  23390. # #(str_store_party_name, s7, ":besieger_party"),
  23391. # (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  23392. # (this_or_next|eq, ":besieger_faction", ":faction_no"),
  23393. # (eq, ":besieger_faction", "fac_player_faction"),
  23394. # (assign, ":there_is_an_important_situation", 1),
  23395. # (try_end),
  23396.  
  23397. # (try_begin),
  23398. # (this_or_next|eq, ":there_is_an_important_situation", 0),
  23399. # (eq, ":old_marshal_is_avaliable", 0),
  23400. #end addition ozan
  23401.  
  23402.  
  23403. # (assign, ":total_renown", 0),
  23404. # (try_for_range, ":loop_var", active_npcs_including_player_begin, active_npcs_end),
  23405. # (assign, ":cur_troop", ":loop_var"),
  23406. # (assign, ":continue", 0),
  23407. # (try_begin),
  23408. # (eq, ":loop_var", "trp_kingdom_heroes_including_player_begin"),
  23409. # (assign, ":cur_troop", "trp_player"),
  23410. # (try_begin),
  23411. # (eq, ":faction_no", "$players_kingdom"),
  23412. # (assign, ":continue", 1),
  23413. # (try_end),
  23414. # (else_try),
  23415. # (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  23416. # (store_troop_faction, ":cur_faction", ":cur_troop"),
  23417. # (eq, ":cur_faction", ":faction_no"),
  23418. # (troop_get_slot, ":cur_party", ":cur_troop", slot_troop_leaded_party),
  23419. # (gt, ":cur_party", 0),
  23420. # (party_is_active, ":cur_party"),
  23421. # (call_script, "script_party_count_fit_for_battle", ":cur_party"),
  23422. # (assign, ":party_fit_for_battle", reg0),
  23423. # (call_script, "script_party_get_ideal_size", ":cur_party"),
  23424. # (assign, ":ideal_size", reg0),
  23425. # (store_mul, ":relative_strength", ":party_fit_for_battle", 100),
  23426. # (val_div, ":relative_strength", ":ideal_size"),
  23427. # (ge, ":relative_strength", 25),
  23428. # (assign, ":continue", 1),
  23429. # (try_end),
  23430.  
  23431. # (eq, ":continue", 1),
  23432.  
  23433. # (troop_get_slot, ":renown", ":cur_troop", slot_troop_renown),
  23434. # (call_script, "script_troop_get_relation_with_troop", ":cur_troop", ":faction_leader"),
  23435. # (store_mul, ":relation_modifier", reg0, 15),
  23436. # (val_add, ":renown", ":relation_modifier"),
  23437. # (val_max, ":renown", 1),
  23438. #
  23439. # (try_begin),
  23440. # (eq, ":cur_troop", "trp_player"),
  23441. # (neq, ":old_faction_marshall", "trp_player"),
  23442. # (assign, ":renown", 0),
  23443. # (try_end),
  23444. # (try_begin),
  23445. # (eq, ":cur_troop", ":faction_leader"),
  23446. # (val_mul, ":renown", 3),
  23447. # (val_div, ":renown", 4),
  23448. # (try_end),
  23449. # (try_begin),
  23450. # (eq, ":cur_troop", ":old_faction_marshall"),
  23451. # (val_mul, ":renown", 1000),
  23452. # (try_end),
  23453. # (val_add, ":total_renown", ":renown"),
  23454. # (try_end),
  23455. # (assign, ":result", -1),
  23456. # (try_begin),
  23457. # (gt, ":total_renown", 0),
  23458. # (store_random_in_range, ":random_renown", 0, ":total_renown"),
  23459. # (try_for_range, ":loop_var", active_npcs_including_player_begin, active_npcs_end),
  23460. # (eq, ":result", -1),
  23461. # (assign, ":cur_troop", ":loop_var"),
  23462. # (assign, ":continue", 0),
  23463. # (try_begin),
  23464. # (eq, ":loop_var", "trp_kingdom_heroes_including_player_begin"),
  23465. # (assign, ":cur_troop", "trp_player"),
  23466. # (try_begin),
  23467. # (eq, ":faction_no", "$players_kingdom"),
  23468. # (assign, ":continue", 1),
  23469. # (try_end),
  23470. # (else_try),
  23471. # (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  23472. # (store_troop_faction, ":cur_faction", ":cur_troop"),
  23473. # (eq, ":cur_faction", ":faction_no"),
  23474. # (troop_get_slot, ":cur_party", ":cur_troop", slot_troop_leaded_party),
  23475. # (gt, ":cur_party", 0),
  23476. # (party_is_active, ":cur_party"),
  23477. # (call_script, "script_party_count_fit_for_battle", ":cur_party"),
  23478. # (assign, ":party_fit_for_battle", reg0),
  23479. # (call_script, "script_party_get_ideal_size", ":cur_party"),
  23480. # (assign, ":ideal_size", reg0),
  23481. # (store_mul, ":relative_strength", ":party_fit_for_battle", 100),
  23482. # (val_div, ":relative_strength", ":ideal_size"),
  23483. # (ge, ":relative_strength", 25),
  23484. # (assign, ":continue", 1),
  23485. # (try_end),
  23486. # (eq, ":continue", 1),
  23487.  
  23488. # (troop_get_slot, ":renown", ":cur_troop", slot_troop_renown),
  23489. # (call_script, "script_troop_get_relation_with_troop", ":cur_troop", ":faction_leader"),
  23490. # (store_mul, ":relation_modifier", reg0, 15),
  23491. # (val_add, ":renown", ":relation_modifier"),
  23492. # (val_max, ":renown", 1),
  23493. #
  23494. # (try_begin),
  23495. # (eq, ":cur_troop", "trp_player"),
  23496. # (neq, ":old_faction_marshall", "trp_player"),
  23497. # (assign, ":renown", 0),
  23498. # (try_end),
  23499. # (try_begin),
  23500. # (eq, ":cur_troop", ":faction_leader"),
  23501. # (val_mul, ":renown", 3),
  23502. # (val_div, ":renown", 4),
  23503. # (try_end),
  23504. # (try_begin),
  23505. # (eq, ":cur_troop", ":old_faction_marshall"),
  23506. # (val_mul, ":renown", 1000),
  23507. # (try_end),
  23508. # (val_sub, ":random_renown", ":renown"),
  23509. # (lt, ":random_renown", 0),
  23510. # (assign, ":result", ":cur_troop"),
  23511. # (try_end),
  23512. # (try_end),
  23513. # (try_begin),
  23514. #(eq, "$cheat_mode", 1),
  23515. # (ge, ":result", 0),
  23516. # (str_store_troop_name, s1, ":result"),
  23517. # (str_store_faction_name, s2, ":faction_no"),
  23518. # (display_message, "@{!}{s1} is chosen as the marshall of {s2}."),
  23519. # (try_end),
  23520. # (else_try),
  23521. # (faction_get_slot, ":old_faction_marshall", ":faction_no", slot_faction_marshall),
  23522. # (assign, ":result", ":old_faction_marshall"),
  23523. # (try_end),
  23524.  
  23525. # (assign, reg0, ":result"),
  23526. ]),
  23527.  
  23528.  
  23529.  
  23530.  
  23531. # script_get_center_faction_relation_including_player
  23532. # Input: arg1: center_no, arg2: target_faction_no
  23533. # Output: reg0: relation
  23534. #called from triggers
  23535. ("get_center_faction_relation_including_player",
  23536. [
  23537. (store_script_param, ":center_no", 1),
  23538. (store_script_param, ":target_faction_no", 2),
  23539. (store_faction_of_party, ":center_faction", ":center_no"),
  23540. (store_relation, ":relation", ":center_faction", ":target_faction_no"),
  23541. (try_begin),
  23542. (party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
  23543. (store_relation, ":relation", "fac_player_supporters_faction", ":target_faction_no"),
  23544. (try_end),
  23545. (assign, reg0, ":relation"),
  23546. ]),
  23547.  
  23548. #script_update_report_to_army_quest_note
  23549. ("update_report_to_army_quest_note",
  23550. [
  23551. (store_script_param, ":faction_no", 1),
  23552. (store_script_param, ":new_strategy", 2),
  23553. (store_script_param, ":old_faction_ai_state", 3),
  23554.  
  23555. (try_begin),
  23556. (le, "$number_of_report_to_army_quest_notes", 13),
  23557.  
  23558. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  23559.  
  23560. (try_begin), #updating quest notes for only report to army quest
  23561. (eq, ":faction_no", "$players_kingdom"),
  23562. (neq, ":new_strategy", ":old_faction_ai_state"),
  23563. (check_quest_active, "qst_report_to_army"),
  23564. (ge, ":faction_marshal", 0),
  23565.  
  23566. (str_store_troop_name_link, s11, ":faction_marshal"),
  23567. (store_current_hours, ":hours"),
  23568. (call_script, "script_game_get_date_text", 0, ":hours"),
  23569.  
  23570. (try_begin),
  23571. (this_or_next|eq, ":new_strategy", sfai_attacking_enemies_around_center),
  23572. (this_or_next|eq, ":new_strategy", sfai_attacking_center),
  23573. (eq, ":new_strategy", sfai_gathering_army),
  23574. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  23575. (ge, ":faction_object", 0),
  23576. (str_store_party_name_link, s21, ":faction_object"),
  23577. (try_end),
  23578.  
  23579. (try_begin),
  23580. (eq, ":new_strategy", sfai_gathering_army),
  23581.  
  23582. (try_begin),
  23583. (ge, "$g_gathering_reason", 0),
  23584. (str_store_party_name_link, s21, "$g_gathering_reason"),
  23585. (str_store_string, s14, "str_we_should_prepare_to_defend_s21_but_we_should_gather_our_forces_until_we_are_strong_enough_to_engage_them"),
  23586. (else_try),
  23587. (str_store_string, s14, "str_it_is_time_to_go_on_the_offensive_and_we_must_first_assemble_the_army"),
  23588. (try_end),
  23589.  
  23590. (str_store_string, s14, "@({s1}) {s11}: {s14}"),
  23591. (add_quest_note_from_sreg, "qst_report_to_army", "$number_of_report_to_army_quest_notes", s14, 0),
  23592. (val_add, "$number_of_report_to_army_quest_notes", 1),
  23593. (else_try),
  23594. (eq, ":new_strategy", sfai_attacking_enemies_around_center),
  23595.  
  23596. (try_begin),
  23597. (is_between, ":faction_object", walled_centers_begin, walled_centers_end),
  23598. (str_store_string, s14, "str_we_should_ride_to_break_the_siege_of_s21"),
  23599. (str_store_string, s14, "@({s1}) {s11}: {s14}"),
  23600. (add_quest_note_from_sreg, "qst_report_to_army", "$number_of_report_to_army_quest_notes", s14, 0),
  23601. (val_add, "$number_of_report_to_army_quest_notes", 1),
  23602. (else_try),
  23603. (is_between, ":faction_object", villages_begin, villages_end),
  23604. (str_store_string, s14, "str_we_should_ride_to_defeat_the_enemy_gathered_near_s21"),
  23605. (str_store_string, s14, "@({s1}) {s11}: {s14}"),
  23606. (add_quest_note_from_sreg, "qst_report_to_army", "$number_of_report_to_army_quest_notes", s14, 0),
  23607. (val_add, "$number_of_report_to_army_quest_notes", 1),
  23608. (try_end),
  23609. (else_try),
  23610. (this_or_next|eq, ":new_strategy", sfai_attacking_center),
  23611. (eq, ":new_strategy", sfai_raiding_village),
  23612.  
  23613. (try_begin),
  23614. (is_between, ":faction_object", walled_centers_begin, walled_centers_end),
  23615. (str_store_string, s14, "str_we_believe_the_fortress_will_be_worth_the_effort_to_take_it"),
  23616. (str_store_string, s14, "@{s14} ({s21})"),
  23617. (str_store_string, s14, "@({s1}) {s11}: {s14}"),
  23618. (add_quest_note_from_sreg, "qst_report_to_army", "$number_of_report_to_army_quest_notes", s14, 0),
  23619. (val_add, "$number_of_report_to_army_quest_notes", 1),
  23620. (else_try),
  23621. (is_between, ":faction_object", villages_begin, villages_end),
  23622. (str_store_string, s14, "str_we_shall_leave_a_fiery_trail_through_the_heart_of_the_enemys_lands_targeting_the_wealthy_settlements_if_we_can"),
  23623. (str_store_string, s14, "@{s14} ({s21})"),
  23624. (str_store_string, s14, "@({s1}) {s11}: {s14}"),
  23625. (add_quest_note_from_sreg, "qst_report_to_army", "$number_of_report_to_army_quest_notes", s14, 0),
  23626. (val_add, "$number_of_report_to_army_quest_notes", 1),
  23627. (try_end),
  23628. (try_end),
  23629. (try_end),
  23630. (try_end),
  23631. ]),
  23632.  
  23633.  
  23634. # script_decide_faction_ai
  23635. # Input: arg1: faction_no
  23636. # Output: none
  23637. #called from triggers
  23638. ("decide_faction_ai",
  23639. #This handles political issues and faction issues
  23640. [
  23641. (store_script_param_1, ":faction_no"),
  23642.  
  23643.  
  23644. (faction_get_slot, ":old_faction_ai_state", ":faction_no", slot_faction_ai_state),
  23645. (faction_get_slot, ":old_faction_ai_object", ":faction_no", slot_faction_ai_object),
  23646. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  23647.  
  23648.  
  23649. #Remove marshal if he has become too controversial,, or he has defected, or has been taken prisoner
  23650. (try_begin),
  23651. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  23652. (neq, ":faction_no", "fac_player_supporters_faction"),
  23653. (ge, ":faction_marshal", "trp_player"),
  23654.  
  23655. (store_faction_of_troop, ":marshal_faction", ":faction_marshal"),
  23656. (try_begin),
  23657. (eq, ":faction_marshal", "trp_player"),
  23658. (assign, ":marshal_faction", "$players_kingdom"),
  23659. (try_end),
  23660.  
  23661.  
  23662. (assign, ":player_marshal_is_prisoner", 0),
  23663. (try_begin),
  23664. (eq, ":faction_marshal", "trp_player"),
  23665. (eq, "$g_player_is_captive", 1),
  23666. (assign, ":player_marshal_is_prisoner", 1),
  23667. (try_end),
  23668.  
  23669.  
  23670. #High controversy level, or marshal has defected, or is prisoner
  23671. (this_or_next|neq, ":marshal_faction", ":faction_no"),
  23672. (this_or_next|troop_slot_ge, ":faction_marshal", slot_troop_controversy, 80),
  23673. (this_or_next|eq, ":player_marshal_is_prisoner", 1),
  23674. (troop_slot_ge, ":faction_marshal", slot_troop_prisoner_of_party, 0),
  23675.  
  23676. (assign, ":few_following_player_campaign", 0),
  23677. (try_begin),
  23678. (eq, ":faction_marshal", "trp_player"),
  23679. (assign, ":vassals_following_player_campaign", 0),
  23680. (gt, "$g_player_days_as_marshal", 1),
  23681. (try_for_range, ":vassal", active_npcs_begin, active_npcs_end),
  23682. (troop_slot_eq, ":vassal", slot_troop_occupation, slto_kingdom_hero),
  23683. (store_faction_of_troop, ":vassal_faction", ":vassal"),
  23684. (eq, ":vassal_faction", ":faction_no"),
  23685. (call_script, "script_npc_decision_checklist_troop_follow_or_not", ":vassal"),
  23686. (eq, reg0, 1),
  23687. (val_add, ":vassals_following_player_campaign", 1),
  23688. (try_end),
  23689. (lt, ":vassals_following_player_campaign", 4),
  23690. (assign, ":few_following_player_campaign", 1),
  23691. (try_end),
  23692.  
  23693. #Only remove marshal for controversy if offensive campaign in progress
  23694. (this_or_next|eq, ":old_faction_ai_state", sfai_default),
  23695. (this_or_next|eq, ":old_faction_ai_state", sfai_feast),
  23696. (this_or_next|neq, ":marshal_faction", ":faction_no"),
  23697. (this_or_next|eq, ":few_following_player_campaign", 1),
  23698. (this_or_next|eq, ":player_marshal_is_prisoner", 1),
  23699. (troop_slot_ge, ":faction_marshal", slot_troop_prisoner_of_party, 0),
  23700.  
  23701. #No current issue on the agenda
  23702. (this_or_next|faction_slot_eq, ":faction_no", slot_faction_political_issue, 0),
  23703. (this_or_next|eq, ":player_marshal_is_prisoner", 1),
  23704. (troop_slot_ge, ":faction_marshal", slot_troop_prisoner_of_party, 0),
  23705.  
  23706. (faction_set_slot, ":faction_no", slot_faction_political_issue, 1), #Appointment of marshal
  23707. (store_current_hours, ":hours"),
  23708. (val_max, ":hours", 0),
  23709. (faction_set_slot, ":faction_no", slot_faction_political_issue_time, ":hours"), #Appointment of marshal
  23710.  
  23711. (faction_get_slot, ":old_marshall", ":faction_no", slot_faction_marshall),
  23712. (try_begin),
  23713. (ge, ":old_marshall", 0),
  23714. (troop_get_slot, ":old_marshall_party", ":old_marshall", slot_troop_leaded_party),
  23715. (party_is_active, ":old_marshall_party"),
  23716. (party_set_marshall, ":old_marshall_party", 0),
  23717. (try_end),
  23718.  
  23719. (try_begin),
  23720. (eq, "$players_kingdom", ":faction_no"),
  23721. (faction_slot_eq, "$players_kingdom", slot_faction_marshall, "trp_player"),
  23722. (call_script, "script_add_notification_menu", "mnu_notification_relieved_as_marshal", 0, 0),
  23723. (else_try),
  23724. (neq, ":old_marshall", "trp_player"),
  23725. (call_script, "script_change_troop_renown", ":old_marshall", 15),
  23726. (try_end),
  23727. (faction_set_slot, ":faction_no", slot_faction_marshall, -1),
  23728. (assign, ":faction_marshal", -1),
  23729.  
  23730.  
  23731.  
  23732. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  23733. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  23734. (eq, ":active_npc_faction", ":faction_no"),
  23735. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  23736. (try_end),
  23737. (try_begin),
  23738. (eq, "$players_kingdom", ":faction_no"),
  23739. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  23740. (try_end),
  23741.  
  23742. (else_try), #If marshal not present, and not already on agenda, make political issue
  23743. (eq, ":faction_marshal", -1),
  23744. (neg|faction_slot_ge, ":faction_no", slot_faction_political_issue, 1), #This to avoid resetting votes every time
  23745.  
  23746. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  23747. (neq, ":faction_no", "fac_player_supporters_faction"),
  23748.  
  23749. (faction_set_slot, ":faction_no", slot_faction_political_issue, 1), #Appointment of marshal
  23750. (store_current_hours, ":hours"),
  23751. (val_max, ":hours", 0),
  23752. (faction_set_slot, ":faction_no", slot_faction_political_issue_time, ":hours"), #Appointment of marshal
  23753.  
  23754. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  23755. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  23756. (eq, ":active_npc_faction", ":faction_no"),
  23757. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  23758. (try_end),
  23759. (try_begin),
  23760. (eq, "$players_kingdom", ":faction_no"),
  23761. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  23762. (try_end),
  23763.  
  23764.  
  23765. (else_try), #If player is marshal, but not part of faction
  23766. (eq, ":faction_marshal", "trp_player"),
  23767. (neq, "$players_kingdom", ":faction_no"),
  23768.  
  23769. (faction_set_slot, ":faction_no", slot_faction_political_issue, 1), #Appointment of marshal
  23770. (store_current_hours, ":hours"),
  23771. (val_max, ":hours", 0),
  23772. (faction_set_slot, ":faction_no", slot_faction_political_issue_time, ":hours"), #Appointment of marshal
  23773.  
  23774. (faction_get_slot, ":old_marshall", ":faction_no", slot_faction_marshall),
  23775. (try_begin),
  23776. (ge, ":old_marshall", 0),
  23777. (troop_get_slot, ":old_marshall_party", ":old_marshall", slot_troop_leaded_party),
  23778. (party_is_active, ":old_marshall_party"),
  23779. (party_set_marshall, ":old_marshall_party", 0),
  23780. (try_end),
  23781.  
  23782. (faction_set_slot, ":faction_no", slot_faction_marshall, -1),
  23783. (assign, ":faction_marshal", -1),
  23784.  
  23785. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  23786. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  23787. (eq, ":active_npc_faction", ":faction_no"),
  23788. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  23789. (try_end),
  23790. (try_begin),
  23791. (eq, "$players_kingdom", ":faction_no"),
  23792. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  23793. (try_end),
  23794.  
  23795. (try_end),
  23796.  
  23797. #If the faction issue is a center no longer under faction control, remove and reset
  23798. (try_begin),
  23799. (faction_get_slot, ":faction_political_issue", ":faction_no", slot_faction_political_issue),
  23800. (is_between, ":faction_political_issue", centers_begin, centers_end),
  23801. (store_faction_of_party, ":disputed_center_faction", ":faction_political_issue"),
  23802. (neq, ":disputed_center_faction", ":faction_no"),
  23803.  
  23804. (try_begin),
  23805. (eq, "$cheat_mode", 1),
  23806. (str_store_faction_name, s4, ":faction_no"),
  23807. (str_store_party_name, s5, ":disputed_center_faction"),
  23808. (display_message, "@{!}DEBUG -- {s4} drops {s5} as issue as it has changed hands"),
  23809. (try_end),
  23810.  
  23811. #Reset political issue
  23812. (faction_set_slot, ":faction_no", slot_faction_political_issue, 0),
  23813. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  23814. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  23815. (eq, ":active_npc_faction", ":faction_no"),
  23816. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  23817. (try_end),
  23818. (try_begin),
  23819. (eq, "$players_kingdom", ":faction_no"),
  23820. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  23821. (try_end),
  23822.  
  23823. (try_end),
  23824.  
  23825.  
  23826. #Resolve the political issue on the agenda
  23827. (try_begin),
  23828. (faction_slot_ge, ":faction_no", slot_faction_political_issue, 1),
  23829. (neq, ":faction_no", "fac_player_supporters_faction"),
  23830.  
  23831. #Do not switch marshals during a campaign
  23832. (this_or_next|faction_slot_ge, ":faction_no", slot_faction_political_issue, centers_begin),
  23833. (this_or_next|faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_default),
  23834. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_feast),
  23835.  
  23836.  
  23837. (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  23838.  
  23839. (assign, ":total_lords", 0),
  23840. (assign, ":lords_who_have_voted", 0),
  23841. (assign, ":popular_favorite", -1),
  23842.  
  23843. #Reset number of votes
  23844. (troop_set_slot, "trp_player", slot_troop_temp_slot, 0),
  23845. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  23846. (troop_set_slot, ":active_npc", slot_troop_temp_slot, 0),
  23847. (try_end),
  23848.  
  23849. #Tabulate votes
  23850. (try_for_range, ":voting_lord", active_npcs_begin, active_npcs_end),
  23851. (store_faction_of_troop, ":voting_lord_faction", ":voting_lord"),
  23852. (eq, ":voting_lord_faction", ":faction_no"),
  23853. (val_add, ":total_lords", 1),
  23854. (troop_get_slot, ":lord_chosen_candidate", ":voting_lord", slot_troop_stance_on_faction_issue),
  23855. (gt, ":lord_chosen_candidate", -1),
  23856. (val_add, ":lords_who_have_voted", 1),
  23857. (troop_get_slot, ":total_votes", ":lord_chosen_candidate", slot_troop_temp_slot),
  23858. (val_add, ":total_votes", 1),
  23859. (troop_set_slot, ":lord_chosen_candidate", slot_troop_temp_slot, ":total_votes"),
  23860. (try_begin),
  23861. (gt, ":popular_favorite", -1),
  23862. (troop_get_slot, ":current_winner_votes", ":popular_favorite", slot_troop_temp_slot),
  23863. (gt, ":total_votes", ":current_winner_votes"),
  23864. (assign, ":popular_favorite", ":lord_chosen_candidate"),
  23865. (else_try),
  23866. (eq, ":popular_favorite", -1),
  23867. (assign, ":popular_favorite", ":lord_chosen_candidate"),
  23868. (try_end),
  23869. (try_end),
  23870.  
  23871. #Check to see if enough lords have voted
  23872. (store_div, ":number_required_for_quorum", ":total_lords", 5),
  23873. (val_mul, ":number_required_for_quorum", 4),
  23874.  
  23875.  
  23876. # (gt, ":lords_who_have_voted", ":number_required_for_quorum"),
  23877.  
  23878. (store_current_hours, ":hours_on_agenda"),
  23879. (faction_get_slot, ":hours_when_put_on_agenda", ":faction_no", slot_faction_political_issue_time), #Appointment of marshal
  23880. (val_sub, ":hours_on_agenda", ":hours_when_put_on_agenda"),
  23881.  
  23882. (this_or_next|gt, ":lords_who_have_voted", ":number_required_for_quorum"),
  23883. (ge, ":hours_on_agenda", 120),
  23884.  
  23885. (try_begin),
  23886. (eq, "$cheat_mode", 1),
  23887. (assign, reg4, ":lords_who_have_voted"),
  23888. (assign, reg5, ":number_required_for_quorum"),
  23889. (assign, reg7, ":hours_on_agenda"),
  23890. (str_store_faction_name, s4, ":faction_no"),
  23891. (display_message, "@{!}DEBUG -- Issue resolution for {s4}: {reg4} votes for a quorum of {reg5}, {reg7} hours on agenda"),
  23892. (try_end),
  23893.  
  23894.  
  23895. (try_begin),
  23896. (eq, "$cheat_mode", 1),
  23897. (display_message, "@{!}DEBUG -- Faction resolves political issue"),
  23898. (try_end),
  23899.  
  23900.  
  23901. #Resolve faction political issue
  23902. (assign, ":winning_candidate", -1),
  23903. (try_begin),
  23904. (call_script, "script_troop_get_relation_with_troop", ":faction_leader", ":popular_favorite"),
  23905.  
  23906. (this_or_next|ge, reg0, 10),
  23907. (this_or_next|troop_slot_eq, ":faction_leader", slot_troop_stance_on_faction_issue, ":popular_favorite"),
  23908. (troop_slot_eq, ":faction_leader", slot_troop_stance_on_faction_issue, -1),
  23909.  
  23910. (assign, ":winning_candidate", ":popular_favorite"),
  23911. (else_try),#Lord overrules lords' opinion
  23912. (gt, ":faction_leader", -1), #not sure why this is necessary
  23913. (troop_get_slot, ":liege_choice", ":faction_leader", slot_troop_stance_on_faction_issue),
  23914. (ge, ":liege_choice", -1),
  23915.  
  23916. (assign, ":winning_candidate", ":liege_choice"),
  23917. (try_end),
  23918.  
  23919. #Carry out faction decision
  23920. (try_begin), #Nothing happens
  23921. (eq, ":winning_candidate", -1),
  23922.  
  23923. (else_try), #For player, create a menu to accept or refuse
  23924. (eq, ":winning_candidate", "trp_player"),
  23925. (eq, "$players_kingdom", ":faction_no"),
  23926. (call_script, "script_add_notification_menu", "mnu_notification_player_faction_political_issue_resolved_for_player", 0, 0),
  23927. (else_try),
  23928. (eq, ":winning_candidate", "trp_player"),
  23929. (neq, "$players_kingdom", ":faction_no"),
  23930.  
  23931. (try_begin),
  23932. (eq, "$cheat_mode", 1),
  23933. (str_store_faction_name, s4, ":faction_no"),
  23934. (str_store_party_name, s5, ":winning_candidate"),
  23935. (display_message, "@{!}DEBUG -- {s4} drops {s5} as winner, for having changed sides"),
  23936. (try_end),
  23937.  
  23938. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  23939. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  23940. (eq, ":active_npc_faction", ":faction_no"),
  23941. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  23942. (try_end),
  23943. (try_begin),
  23944. (eq, "$players_kingdom", ":faction_no"),
  23945. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  23946. (try_end),
  23947.  
  23948. (else_try), #If candidate is not of winning faction, reset lrod votes
  23949. (store_faction_of_troop, ":winning_candidate_faction", ":winning_candidate"),
  23950. (neq, ":winning_candidate_faction", ":faction_no"),
  23951.  
  23952. (try_begin),
  23953. (eq, "$cheat_mode", 1),
  23954. (str_store_faction_name, s4, ":faction_no"),
  23955. (str_store_party_name, s5, ":winning_candidate"),
  23956. (display_message, "@{!}DEBUG -- {s4} drops {s5} as winner, for having changed sides"),
  23957. (try_end),
  23958.  
  23959. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  23960. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  23961. (eq, ":active_npc_faction", ":faction_no"),
  23962. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  23963. (try_end),
  23964. (try_begin),
  23965. (eq, "$players_kingdom", ":faction_no"),
  23966. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  23967. (try_end),
  23968.  
  23969. (else_try), #Honor awarded to another
  23970. (faction_get_slot, ":issue_on_table", ":faction_no", slot_faction_political_issue),
  23971. (try_begin), #A marshalship awarded to another
  23972. (eq, ":issue_on_table", 1),
  23973. (is_between, ":winning_candidate", active_npcs_begin, active_npcs_end),
  23974.  
  23975. (this_or_next|is_between, ":winning_candidate", active_npcs_begin, active_npcs_end), #Prevents bug in which player given marshaldom of kingdom of which he/she is not a member
  23976. (eq, "$players_kingdom", ":faction_no"),
  23977.  
  23978. (assign, ":faction_marshal", ":winning_candidate"),
  23979. (else_try), #A fief awarded to another
  23980. (is_between, ":issue_on_table", centers_begin, centers_end),
  23981.  
  23982. #If given to the player, resolved above
  23983. (call_script, "script_give_center_to_lord", ":issue_on_table", ":winning_candidate", 0), #Zero means don't add garrison
  23984.  
  23985. #If the player had requested a captured castle
  23986. (try_begin),
  23987. (eq, ":issue_on_table", "$g_castle_requested_by_player"),
  23988. (party_slot_ge, ":issue_on_table", slot_town_lord, active_npcs_begin),
  23989. (store_faction_of_party, ":faction_of_issue", ":issue_on_table"),
  23990. (eq, ":faction_of_issue", "$players_kingdom"),
  23991. (assign, "$g_center_to_give_to_player", ":issue_on_table"),
  23992. (try_begin),
  23993. (troop_get_slot, ":husband", "trp_player", slot_troop_spouse),
  23994. (is_between, ":husband", active_npcs_begin, active_npcs_end),
  23995. (eq, "$g_castle_requested_for_troop", ":husband"),
  23996. (neq, ":winning_candidate", ":husband"),
  23997. (jump_to_menu, "mnu_requested_castle_granted_to_another_female"),
  23998. (else_try),
  23999. (jump_to_menu, "mnu_requested_castle_granted_to_another"),
  24000. (try_end),
  24001. (try_end),
  24002.  
  24003. (try_end),
  24004.  
  24005. (try_begin),
  24006. (eq, ":faction_no", "$players_kingdom"),
  24007. (call_script, "script_add_notification_menu", "mnu_notification_player_faction_political_issue_resolved", ":issue_on_table", ":winning_candidate"),
  24008. (try_end),
  24009.  
  24010. #Reset political issue
  24011. (faction_set_slot, ":faction_no", slot_faction_political_issue, 0),
  24012. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  24013. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  24014. (eq, ":active_npc_faction", ":faction_no"),
  24015. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  24016. (try_end),
  24017. (try_begin),
  24018. (eq, "$players_kingdom", ":faction_no"),
  24019. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  24020. (try_end),
  24021. (try_end),
  24022. (try_end),
  24023.  
  24024. #Add fief to faction issues
  24025. (try_begin),
  24026. (faction_get_slot, ":faction_issue", ":faction_no", slot_faction_political_issue),
  24027. (le, ":faction_issue", 0),
  24028.  
  24029. (assign, ":landless_lords", 0),
  24030. (assign, ":unassigned_centers", 0),
  24031. (assign, ":first_unassigned_center_found", 0),
  24032.  
  24033. (troop_set_slot, "trp_player", slot_troop_temp_slot, 0),
  24034. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  24035. (troop_set_slot, ":active_npc", slot_troop_temp_slot, 0),
  24036. (try_end),
  24037.  
  24038. (try_for_range, ":center", centers_begin, centers_end),
  24039. (store_faction_of_party, ":center_faction", ":center"),
  24040. (eq, ":center_faction", ":faction_no"),
  24041.  
  24042. (party_get_slot, ":town_lord", ":center", slot_town_lord),
  24043.  
  24044. (try_begin),
  24045. (lt, ":town_lord", 0),
  24046. (val_add, ":unassigned_centers", 1),
  24047. (try_begin),
  24048. (eq, ":first_unassigned_center_found", 0),
  24049. (assign, ":first_unassigned_center_found", ":center"),
  24050. (try_end),
  24051. (else_try),
  24052. (troop_set_slot, ":town_lord", slot_troop_temp_slot, 1),
  24053. (try_end),
  24054. (try_end),
  24055.  
  24056. (store_add, ":landless_lords_plus_unassigned_centers", ":landless_lords", ":unassigned_centers"),
  24057. (ge, ":landless_lords_plus_unassigned_centers", 2),
  24058.  
  24059. (faction_set_slot, ":faction_no", slot_faction_political_issue, ":first_unassigned_center_found"),
  24060. (store_current_hours, ":hours"),
  24061. (faction_set_slot, ":faction_no", slot_faction_political_issue_time, ":hours"), #Fief put on agenda
  24062.  
  24063. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  24064. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  24065. (eq, ":active_npc_faction", ":faction_no"),
  24066. (troop_set_slot, ":active_npc", slot_troop_stance_on_faction_issue, -1),
  24067. (try_end),
  24068. (try_begin),
  24069. (eq, "$players_kingdom", ":faction_no"),
  24070. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  24071. (try_end),
  24072. (try_end),
  24073.  
  24074.  
  24075. (try_begin), #If the marshal is changed
  24076. (neg|faction_slot_eq, ":faction_no", slot_faction_marshall, ":faction_marshal"),
  24077. #(assign, ":marshall_changed", 1),
  24078. (eq, "$players_kingdom", ":faction_no"),
  24079. (str_store_troop_name_link, s1, ":faction_marshal"),
  24080. (str_store_faction_name_link, s2, ":faction_no"),
  24081. (display_message, "@{s1} is the new marshal of {s2}."),
  24082. (call_script, "script_check_and_finish_active_army_quests_for_faction", ":faction_no"),
  24083. (try_end),
  24084.  
  24085. (try_begin), #If the marshal is changed
  24086. (neg|faction_slot_eq, ":faction_no", slot_faction_marshall, ":faction_marshal"),
  24087. (gt, ":faction_marshal", -1),
  24088. (call_script, "script_appoint_faction_marshall", ":faction_no", ":faction_marshal"),
  24089. (try_end),
  24090.  
  24091. #DO FACTION AI HERE
  24092. (try_begin),
  24093. (eq, ":faction_no", "$players_kingdom"),
  24094. (eq, ":faction_marshal", "trp_player"),
  24095. (assign, ":faction_ai_decider", "trp_player"),
  24096. (else_try),
  24097. (is_between, ":faction_marshal", active_npcs_begin, active_npcs_end),
  24098. (assign, ":faction_ai_decider", ":faction_marshal"),
  24099. (else_try),
  24100. (faction_get_slot, ":faction_ai_decider", ":faction_no", slot_faction_leader),
  24101. (try_end),
  24102.  
  24103. (call_script, "script_npc_decision_checklist_faction_ai_alt", ":faction_ai_decider"),
  24104. (assign, ":new_strategy", reg0),
  24105. (assign, ":new_object", reg1),
  24106.  
  24107. #new ozan
  24108. (try_begin),
  24109. (neq, ":new_strategy", ":old_faction_ai_state"),
  24110. (eq, ":new_strategy", sfai_gathering_army),
  24111. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  24112. (ge, ":faction_marshal", 0),
  24113. (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  24114. (party_set_slot, ":marshal_party", slot_party_ai_object, -1),
  24115. (assign, "$g_gathering_new_started", 1),
  24116. (call_script, "script_npc_decision_checklist_party_ai", ":faction_marshal"), #This handles AI for both marshal and other parties
  24117. (call_script, "script_party_set_ai_state", ":marshal_party", reg0, reg1),
  24118. (assign, "$g_gathering_new_started", 0),
  24119. (else_try),
  24120. #check if marshal arrived his target city during active gathering
  24121.  
  24122. #for now i disabled below lines because after always/active gathering armies become very large.
  24123. #in current style marshal makes active gathering only at first, it travels to a city and waits there.
  24124.  
  24125. (eq, ":new_strategy", ":old_faction_ai_state"),
  24126. (eq, ":new_strategy", sfai_gathering_army),
  24127. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  24128. (ge, ":faction_marshal", 0),
  24129. (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  24130. (party_get_slot, ":party_ai_object", ":marshal_party", slot_party_ai_object),
  24131.  
  24132. (ge, ":party_ai_object", 0),
  24133. (ge, ":marshal_party", 0),
  24134. (party_is_active, ":marshal_party"),
  24135. (party_is_active, ":party_ai_object"),
  24136. (store_distance_to_party_from_party, ":dist", ":marshal_party", ":party_ai_object"),
  24137. (le, ":dist", 5),
  24138.  
  24139. (party_set_slot, ":marshal_party", slot_party_ai_object, -1),
  24140. (try_end),
  24141. #end ozan
  24142.  
  24143. #The following logic is mostly transplanted to the new decision_checklist
  24144. #Decision_checklist is used because I want to be able to reproduce the logic for strings
  24145. #(call_script, "script_old_faction_ai"),
  24146. #ozan - I collected all comment-out lines in here (faction ai script) and placed most bottom of scripts.py to avoid confusing.
  24147.  
  24148. (faction_set_slot, ":faction_no", slot_faction_ai_state, ":new_strategy"),
  24149. (faction_set_slot, ":faction_no", slot_faction_ai_object, ":new_object"),
  24150.  
  24151. (call_script, "script_update_report_to_army_quest_note", ":faction_no", ":new_strategy", ":old_faction_ai_state"),
  24152.  
  24153. (try_begin),
  24154. (eq, ":new_strategy", sfai_feast),
  24155.  
  24156. (store_current_hours, ":hours"),
  24157. (faction_set_slot, ":faction_no", slot_faction_last_feast_start_time, ":hours"), #new
  24158.  
  24159. (try_begin),
  24160. (eq, "$g_player_eligible_feast_center_no", ":new_object"),
  24161. (assign, "$g_player_eligible_feast_center_no", -1), #reset needed
  24162. (try_end),
  24163. (try_begin),
  24164. (is_between, ":new_object", towns_begin, towns_end),
  24165. (party_set_slot, ":new_object", slot_town_has_tournament, 2),
  24166. (try_end),
  24167. (try_end),
  24168.  
  24169. #Change of strategy
  24170. (try_begin),
  24171. (neq, ":new_strategy", ":old_faction_ai_state"),
  24172.  
  24173. (try_begin),
  24174. (ge, "$cheat_mode", 1),
  24175. (str_store_faction_name, s5, ":faction_no"),
  24176. (display_message, "str_s5_decides_s14"),
  24177. (try_end),
  24178.  
  24179. (store_current_hours, ":hours"),
  24180. (faction_set_slot, ":faction_no", slot_faction_ai_current_state_started, ":hours"),
  24181.  
  24182. #Feast ends
  24183. (try_begin),
  24184. (eq, ":old_faction_ai_state", sfai_feast),
  24185. (call_script, "script_faction_conclude_feast", ":faction_no", ":old_faction_ai_object"),
  24186. (try_end),
  24187.  
  24188.  
  24189. #Feast begins
  24190. (try_begin),
  24191. (eq, ":new_strategy", sfai_feast),
  24192. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  24193.  
  24194. ## (str_store_faction_name, s1, ":faction_no"),
  24195. ## (str_store_party_name, s2, ":faction_object"),
  24196. ## (display_message, "str_lords_of_the_s1_gather_for_a_feast_at_s2"),
  24197.  
  24198. (party_get_slot, ":feast_host", ":faction_object", slot_town_lord),
  24199.  
  24200. (try_begin),
  24201. (check_quest_active, "qst_wed_betrothed"),
  24202.  
  24203. (quest_slot_eq, "qst_wed_betrothed", slot_quest_giver_troop, ":feast_host"),
  24204. (neg|quest_slot_ge, "qst_wed_betrothed", slot_quest_expiration_days, 362),
  24205. (call_script, "script_add_notification_menu", "mnu_notification_player_wedding_day", ":feast_host", ":faction_object"),
  24206. (else_try),
  24207. (check_quest_active, "qst_wed_betrothed_female"),
  24208.  
  24209. (quest_get_slot, ":player_betrothed", "qst_wed_betrothed", slot_quest_giver_troop),
  24210. (store_faction_of_troop, ":player_betrothed_faction", ":player_betrothed"),
  24211. (eq, ":player_betrothed_faction", ":faction_no"),
  24212. (neg|quest_slot_ge, "qst_wed_betrothed", slot_quest_expiration_days, 362),
  24213. (call_script, "script_add_notification_menu", "mnu_notification_player_kingdom_holds_feast", ":feast_host", ":faction_object"),
  24214. (else_try),
  24215. (eq, "$players_kingdom", ":faction_no"),
  24216. (troop_slot_ge, "trp_player", slot_troop_renown, 150),
  24217.  
  24218.  
  24219. (party_get_slot, ":feast_host", ":faction_object", slot_town_lord),
  24220. (call_script, "script_add_notification_menu", "mnu_notification_player_kingdom_holds_feast", ":feast_host", ":faction_object"),
  24221. (try_end),
  24222. (try_end),
  24223.  
  24224.  
  24225. #Offensive begins
  24226. (try_begin),
  24227. (eq, ":old_faction_ai_state", sfai_gathering_army),
  24228. (is_between, ":new_strategy", sfai_attacking_center, sfai_feast),
  24229. (try_begin),
  24230. (eq, "$cheat_mode", 1),
  24231. (str_store_faction_name, s5, ":faction_no"),
  24232. (display_message, "str_s5_begins_offensive"),
  24233. (try_end),
  24234.  
  24235. #Appoint screening party
  24236. (try_begin),
  24237. (assign, ":total_lords_participating", 0),
  24238. (assign, ":best_screening_party", -1),
  24239. (assign, ":score_to_beat", 30), #closest in size to 50
  24240. (troop_get_slot, ":faction_marshal_party", ":faction_marshal", slot_troop_leaded_party),
  24241. (party_is_active, ":faction_marshal_party"),
  24242.  
  24243. (try_for_range, ":screen_leader", active_npcs_begin, active_npcs_end),
  24244. (store_faction_of_troop, ":screen_leader_faction", ":screen_leader"),
  24245. (eq, ":screen_leader_faction", ":faction_no"),
  24246.  
  24247. (troop_get_slot, ":screening_party", ":screen_leader", slot_troop_leaded_party),
  24248. (party_is_active, ":screening_party"),
  24249. (party_slot_eq, ":screening_party", slot_party_ai_state, spai_accompanying_army),
  24250. (party_slot_eq, ":screening_party", slot_party_ai_object, ":faction_marshal_party"),
  24251. (val_add, ":total_lords_participating", 1),
  24252.  
  24253. (try_begin),
  24254. (ge, "$cheat_mode", 1),
  24255. (str_store_party_name, s4, ":screening_party"),
  24256. (display_message, "@{!}DEBUG -- {s4} participates in offensive"),
  24257. (try_end),
  24258.  
  24259.  
  24260. (store_party_size_wo_prisoners, ":screening_party_score", ":screening_party"),
  24261. (val_sub, ":screening_party_score", 50),
  24262. (val_abs, ":screening_party_score"),
  24263.  
  24264.  
  24265. (lt, ":screening_party_score", ":score_to_beat"),
  24266.  
  24267. #set party and score
  24268. (assign, ":best_screening_party", ":screening_party"),
  24269. (assign, ":score_to_beat", ":screening_party_score"),
  24270. (try_end),
  24271.  
  24272. (gt, ":total_lords_participating", 2),
  24273. (party_is_active, ":best_screening_party"),
  24274. (party_is_active, ":faction_marshal_party"),
  24275. (call_script, "script_party_set_ai_state", ":best_screening_party", spai_screening_army, ":faction_marshal_party"),
  24276. (try_begin),
  24277. (ge, "$cheat_mode", 1),
  24278. (str_store_party_name, s4, ":best_screening_party"),
  24279. (display_message, "@{!}DEBUG -- {s4} chosen as screen"),
  24280. (try_end),
  24281. #after this - dialogs on what doing, npc_decision_checklist
  24282. (try_end),
  24283.  
  24284. #Offensive concludes
  24285. (else_try),
  24286. (store_current_hours, ":hours"),
  24287. (this_or_next|eq, ":old_faction_ai_state", sfai_gathering_army),
  24288. (this_or_next|eq, ":old_faction_ai_state", sfai_attacking_center),
  24289. (this_or_next|eq, ":old_faction_ai_state", sfai_raiding_village),
  24290. #(this_or_next|eq, ":old_faction_ai_state", sfai_attacking_enemies_around_center),
  24291. (eq, ":old_faction_ai_state", sfai_attacking_enemy_army),
  24292.  
  24293. (this_or_next|eq, ":new_strategy", sfai_default),
  24294. (eq, ":new_strategy", sfai_feast),
  24295.  
  24296. (call_script, "script_check_and_finish_active_army_quests_for_faction", ":faction_no"),
  24297. (faction_set_slot, ":faction_no", slot_faction_last_offensive_concluded, ":hours"),
  24298. (try_end),
  24299. (try_end),
  24300.  
  24301. (try_begin),
  24302. (eq, "$players_kingdom", ":faction_no"),
  24303. (neg|faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_center),
  24304. (check_quest_active, "qst_join_siege_with_army"),
  24305. (call_script, "script_abort_quest", "qst_join_siege_with_army", 0),
  24306. (try_end),
  24307.  
  24308. (try_begin),
  24309. #old condition to rest, I changed below part - ozan, to rest (a faction's old strategy should be feast or default) and (a faction's new strategy should be feast or default)
  24310. #(this_or_next|eq, ":new_strategy", sfai_default),
  24311. #(this_or_next|eq, ":new_strategy", sfai_feast),
  24312. #(this_or_next|eq, ":old_faction_ai_state", sfai_default),
  24313. #(eq, ":old_faction_ai_state", sfai_feast),
  24314.  
  24315. #new condition to rest, (a faction's new strategy should be feast or default) and (":hours_at_current_state" > 20)
  24316. (this_or_next|eq, ":new_strategy", sfai_default),
  24317. (eq, ":new_strategy", sfai_feast),
  24318.  
  24319. (store_current_hours, ":hours_at_current_state"),
  24320. (faction_get_slot, ":current_state_started", ":faction_no", slot_faction_ai_current_state_started),
  24321. (val_sub, ":hours_at_current_state", ":current_state_started"),
  24322. (ge, ":hours_at_current_state", 18), #Must have at least 18 hours to reset
  24323.  
  24324. (store_current_hours, ":hours"),
  24325. (faction_set_slot, ":faction_no", slot_faction_ai_last_rest_time, ":hours"),
  24326. (try_end),
  24327. ]),
  24328.  
  24329. # script_check_and_finish_active_army_quests_for_faction
  24330. # Input: faction_no
  24331. # Output: none
  24332. ("check_and_finish_active_army_quests_for_faction",
  24333. [
  24334. (store_script_param_1, ":faction_no"),
  24335. (try_begin),
  24336. (eq, "$players_kingdom", ":faction_no"),
  24337. (try_begin),
  24338. (check_quest_active, "qst_report_to_army"),
  24339. (call_script, "script_cancel_quest", "qst_report_to_army"),
  24340. (try_end),
  24341. (assign, ":one_active", 0),
  24342. (try_for_range, ":quest_no", army_quests_begin, army_quests_end),
  24343. (check_quest_active, ":quest_no"),
  24344. (call_script, "script_cancel_quest", ":quest_no"),
  24345. (troop_get_slot, ":army_quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  24346. (assign, ":one_active", 1),
  24347. (try_end),
  24348. (try_begin),
  24349. (check_quest_active, "qst_follow_army"),
  24350. (assign, ":one_active", 1),
  24351. (troop_get_slot, ":army_quest_giver_troop", "qst_follow_army", slot_quest_giver_troop),
  24352. (call_script, "script_end_quest", "qst_follow_army"),
  24353. (try_end),
  24354. (eq, ":one_active", 1),
  24355. (faction_get_slot, ":last_offensive_time", ":faction_no", slot_faction_last_offensive_concluded),
  24356. (store_current_hours, ":cur_hours"),
  24357. (store_sub, ":total_time_served", ":cur_hours", ":last_offensive_time"),
  24358. (store_mul, ":xp_reward", ":total_time_served", 5),
  24359. (val_div, ":xp_reward", 50),
  24360. (val_mul, ":xp_reward", 50),
  24361. (val_add, ":xp_reward", 50),
  24362. (add_xp_as_reward, ":xp_reward"),
  24363. (call_script, "script_troop_change_relation_with_troop", "trp_player", ":army_quest_giver_troop", 2),
  24364. (try_end),
  24365. ]),
  24366.  
  24367. # script_troop_get_player_relation
  24368. # Input: arg1 = troop_no
  24369. # Output: reg0 = effective relation (modified by troop reputation, honor, etc.)
  24370. ("troop_get_player_relation",
  24371. [
  24372. (store_script_param_1, ":troop_no"),
  24373. (troop_get_slot, ":reputation", ":troop_no", slot_lord_reputation_type),
  24374. (troop_get_slot, ":effective_relation", ":troop_no", slot_troop_player_relation),
  24375. (assign, ":honor_bonus", 0),
  24376. (try_begin),
  24377. (eq, ":reputation", lrep_quarrelsome),
  24378. (val_add, ":effective_relation", -3),
  24379. (try_end),
  24380. (try_begin),
  24381. (ge, "$player_honor", 0),
  24382. (try_begin),
  24383. (this_or_next|eq, ":reputation", lrep_upstanding),
  24384. ( eq, ":reputation", lrep_goodnatured),
  24385. (store_div, ":honor_bonus", "$player_honor", 3),
  24386. (try_end),
  24387. (try_end),
  24388. (try_begin),
  24389. (lt, "$player_honor", 0),
  24390. (try_begin),
  24391. (this_or_next|eq, ":reputation", lrep_upstanding),
  24392. ( eq, ":reputation", lrep_goodnatured),
  24393. (store_div, ":honor_bonus", "$player_honor", 3),
  24394. (else_try),
  24395. (eq, ":reputation", lrep_martial),
  24396. (store_div, ":honor_bonus", "$player_honor", 5),
  24397. (try_end),
  24398. (try_end),
  24399. (val_add, ":effective_relation", ":honor_bonus"),
  24400. (val_clamp, ":effective_relation", -100, 101),
  24401. (assign, reg0, ":effective_relation"),
  24402. ]),
  24403.  
  24404. # script_change_troop_renown
  24405. # Input: arg1 = troop_no, arg2 = relation difference
  24406. # Output: none
  24407. ("change_troop_renown",
  24408. [
  24409. (store_script_param_1, ":troop_no"),
  24410. (store_script_param_2, ":renown_change"),
  24411.  
  24412. (troop_get_slot, ":old_renown", ":troop_no", slot_troop_renown),
  24413.  
  24414. (try_begin),
  24415. (gt, ":renown_change", 0),
  24416. (assign, reg4, ":renown_change"),
  24417.  
  24418. (store_div, ":subtraction", ":old_renown", 200),
  24419. (val_sub, ":renown_change", ":subtraction"),
  24420. (val_max, ":renown_change", 0),
  24421.  
  24422. (eq, ":troop_no", "trp_player"),
  24423.  
  24424. (assign, reg5, ":renown_change"),
  24425.  
  24426. (eq, "$cheat_mode", 1),
  24427. (display_message, "str_renown_change_of_reg4_reduced_to_reg5_because_of_high_existing_renown"),
  24428. (try_end),
  24429.  
  24430. (store_add, ":new_renown", ":old_renown", ":renown_change"),
  24431. (val_max, ":new_renown", 0),
  24432. (troop_set_slot, ":troop_no", slot_troop_renown, ":new_renown"),
  24433.  
  24434. (try_begin),
  24435. (eq, ":troop_no", "trp_player"),
  24436.  
  24437. (try_begin),
  24438. (ge, ":new_renown", 50),
  24439.  
  24440. (try_begin),
  24441. (troop_get_type, ":is_female", "trp_player"),
  24442. (eq, ":is_female", 1),
  24443. (unlock_achievement, ACHIEVEMENT_TALK_OF_THE_TOWN),
  24444. (try_end),
  24445. (try_end),
  24446.  
  24447. (str_store_troop_name, s1, ":troop_no"),
  24448. (assign, reg12, ":renown_change"),
  24449. (val_abs, reg12),
  24450. (try_begin),
  24451. (gt, ":renown_change", 0),
  24452. (display_message, "@You gained {reg12} renown."),
  24453. (else_try),
  24454. (lt, ":renown_change", 0),
  24455. (display_message, "@You lose {reg12} renown."),
  24456. (try_end),
  24457. (try_end),
  24458. (call_script, "script_update_troop_notes", ":troop_no"),
  24459. ]),
  24460.  
  24461.  
  24462. # script_change_player_relation_with_troop
  24463. # Input: arg1 = troop_no, arg2 = relation difference
  24464. # Output: none
  24465. ("change_player_relation_with_troop",
  24466. [
  24467. (store_script_param_1, ":troop_no"),
  24468. (store_script_param_2, ":difference"),
  24469.  
  24470. (try_begin),
  24471. (neq, ":troop_no", "trp_player"),
  24472. (neg|is_between, ":troop_no", soldiers_begin, soldiers_end),
  24473. (neq, ":troop_no", -1),
  24474. (neq, ":difference", 0),
  24475. (call_script, "script_troop_get_player_relation", ":troop_no"),
  24476. (assign, ":old_effective_relation", reg0),
  24477. (troop_get_slot, ":player_relation", ":troop_no", slot_troop_player_relation),
  24478. (val_add, ":player_relation", ":difference"),
  24479. (val_clamp, ":player_relation", -100, 101),
  24480. (try_begin),
  24481. (troop_set_slot, ":troop_no", slot_troop_player_relation, ":player_relation"),
  24482.  
  24483. (try_begin),
  24484. (le, ":player_relation", -50),
  24485. (unlock_achievement, ACHIEVEMENT_OLD_DIRTY_SCOUNDREL),
  24486. (try_end),
  24487.  
  24488. (str_store_troop_name_link, s1, ":troop_no"),
  24489. (call_script, "script_troop_get_player_relation", ":troop_no"),
  24490. (assign, ":new_effective_relation", reg0),
  24491. (neq, ":old_effective_relation", ":new_effective_relation"),
  24492. (assign, reg1, ":old_effective_relation"),
  24493. (assign, reg2, ":new_effective_relation"),
  24494. (try_begin),
  24495. (gt, ":difference", 0),
  24496. (display_message, "str_troop_relation_increased"),
  24497. (else_try),
  24498. (lt, ":difference", 0),
  24499. (display_message, "str_troop_relation_detoriated"),
  24500. (try_end),
  24501. (try_begin),
  24502. (eq, ":troop_no", "$g_talk_troop"),
  24503. (assign, "$g_talk_troop_relation", ":new_effective_relation"),
  24504. (call_script, "script_setup_talk_info"),
  24505. (try_end),
  24506. (call_script, "script_update_troop_notes", ":troop_no"),
  24507. (try_end),
  24508. (try_end),
  24509. ]),
  24510.  
  24511. # script_change_player_relation_with_center
  24512. # Input: arg1 = party_no, arg2 = relation difference
  24513. # Output: none
  24514. ("change_player_relation_with_center",
  24515. [
  24516. (store_script_param_1, ":center_no"),
  24517. (store_script_param_2, ":difference"),
  24518.  
  24519. (party_get_slot, ":player_relation", ":center_no", slot_center_player_relation),
  24520. (assign, reg1, ":player_relation"),
  24521. (val_add, ":player_relation", ":difference"),
  24522. (val_clamp, ":player_relation", -100, 100),
  24523. (assign, reg2, ":player_relation"),
  24524. (party_set_slot, ":center_no", slot_center_player_relation, ":player_relation"),
  24525.  
  24526. (try_begin),
  24527. (le, ":player_relation", -50),
  24528. (unlock_achievement, ACHIEVEMENT_OLD_DIRTY_SCOUNDREL),
  24529. (try_end),
  24530.  
  24531.  
  24532. (str_store_party_name_link, s1, ":center_no"),
  24533. (try_begin),
  24534. (gt, ":difference", 0),
  24535. (display_message, "@Your relation with {s1} has improved."),
  24536. (else_try),
  24537. (lt, ":difference", 0),
  24538. (display_message, "@Your relation with {s1} has deteriorated."),
  24539. (try_end),
  24540. (try_begin),
  24541. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  24542. (call_script, "script_update_volunteer_troops_in_village", ":center_no"),
  24543. (try_end),
  24544.  
  24545. (try_begin),
  24546. (this_or_next|is_between, "$g_talk_troop", village_elders_begin, village_elders_end),
  24547. (is_between, "$g_talk_troop", mayors_begin, mayors_end),
  24548. (assign, "$g_talk_troop_relation", ":player_relation"),
  24549. (call_script, "script_setup_talk_info"),
  24550. (try_end),
  24551. ]),
  24552.  
  24553.  
  24554. # script_change_player_relation_with_faction
  24555. # Input: arg1 = faction_no, arg2 = relation difference
  24556. # Output: none
  24557. ("change_player_relation_with_faction",
  24558. [
  24559. (store_script_param_1, ":faction_no"),
  24560. (store_script_param_2, ":difference"),
  24561.  
  24562. (store_relation, ":player_relation", ":faction_no", "fac_player_supporters_faction"),
  24563. (assign, reg1, ":player_relation"),
  24564. (val_add, ":player_relation", ":difference"),
  24565. (assign, reg2, ":player_relation"),
  24566. (set_relation, ":faction_no", "fac_player_faction", ":player_relation"),
  24567. (set_relation, ":faction_no", "fac_player_supporters_faction", ":player_relation"),
  24568.  
  24569. (try_begin),
  24570. (le, ":player_relation", -50),
  24571. (unlock_achievement, ACHIEVEMENT_OLD_DIRTY_SCOUNDREL),
  24572. (try_end),
  24573.  
  24574.  
  24575. (str_store_faction_name_link, s1, ":faction_no"),
  24576. (try_begin),
  24577. (gt, ":difference", 0),
  24578. (display_message, "str_faction_relation_increased"),
  24579. (else_try),
  24580. (lt, ":difference", 0),
  24581. (display_message, "str_faction_relation_detoriated"),
  24582. (try_end),
  24583. (call_script, "script_update_all_notes"),
  24584. ]),
  24585.  
  24586. # script_set_player_relation_with_faction
  24587. # Input: arg1 = faction_no, arg2 = relation
  24588. # Output: none
  24589. ("set_player_relation_with_faction",
  24590. [
  24591. (store_script_param_1, ":faction_no"),
  24592. (store_script_param_2, ":relation"),
  24593.  
  24594. (store_relation, ":player_relation", ":faction_no", "fac_player_supporters_faction"),
  24595. (store_sub, ":reln_dif", ":relation", ":player_relation"),
  24596. (call_script, "script_change_player_relation_with_faction", ":faction_no", ":reln_dif"),
  24597. ]),
  24598.  
  24599.  
  24600.  
  24601. # script_change_player_relation_with_faction_ex
  24602. # changes relations with other factions also (according to their relations between each other)
  24603. # Input: arg1 = faction_no, arg2 = relation difference
  24604. # Output: none
  24605. ("change_player_relation_with_faction_ex",
  24606. [
  24607. (store_script_param_1, ":faction_no"),
  24608. (store_script_param_2, ":difference"),
  24609.  
  24610. (store_relation, ":player_relation", ":faction_no", "fac_player_supporters_faction"),
  24611. (assign, reg1, ":player_relation"),
  24612. (val_add, ":player_relation", ":difference"),
  24613. (assign, reg2, ":player_relation"),
  24614. (set_relation, ":faction_no", "fac_player_faction", ":player_relation"),
  24615. (set_relation, ":faction_no", "fac_player_supporters_faction", ":player_relation"),
  24616.  
  24617. (str_store_faction_name_link, s1, ":faction_no"),
  24618. (try_begin),
  24619. (gt, ":difference", 0),
  24620. (display_message, "str_faction_relation_increased"),
  24621. (else_try),
  24622. (lt, ":difference", 0),
  24623. (display_message, "str_faction_relation_detoriated"),
  24624. (try_end),
  24625.  
  24626. (try_for_range, ":other_faction", kingdoms_begin, kingdoms_end),
  24627. (faction_slot_eq, ":other_faction", slot_faction_state, sfs_active),
  24628. (neq, ":faction_no", ":other_faction"),
  24629. (store_relation, ":other_faction_relation", ":faction_no", ":other_faction"),
  24630. (store_relation, ":player_relation", ":other_faction", "fac_player_supporters_faction"),
  24631. (store_mul, ":relation_change", ":difference", ":other_faction_relation"),
  24632. (val_div, ":relation_change", 100),
  24633. (val_add, ":player_relation", ":relation_change"),
  24634. (set_relation, ":other_faction", "fac_player_faction", ":player_relation"),
  24635. (set_relation, ":other_faction", "fac_player_supporters_faction", ":player_relation"),
  24636. (try_end),
  24637. (try_begin),
  24638. (faction_slot_eq, "fac_player_supporters_faction", slot_faction_state, sfs_active),
  24639. (try_for_range, ":kingdom_no", kingdoms_begin, kingdoms_end),
  24640. (faction_slot_eq, ":kingdom_no", slot_faction_state, sfs_active),
  24641. (call_script, "script_update_faction_notes", ":kingdom_no"),
  24642. (try_end),
  24643. (try_end),
  24644. ]),
  24645.  
  24646. # script_cf_get_random_active_faction_except_player_faction_and_faction
  24647. # Input: arg1 = except_faction_no
  24648. # Output: reg0 = random_faction
  24649. ("cf_get_random_active_faction_except_player_faction_and_faction",
  24650. [
  24651. (store_script_param_1, ":except_faction_no"),
  24652. (assign, ":num_factions", 0),
  24653. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  24654. (neq, ":faction_no", "fac_player_supporters_faction"),
  24655. (neq, ":faction_no", ":except_faction_no"),
  24656. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  24657. (val_add, ":num_factions", 1),
  24658. (try_end),
  24659. (gt, ":num_factions", 0),
  24660. (assign, ":selected_faction", -1),
  24661. (store_random_in_range, ":random_faction", 0, ":num_factions"),
  24662. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  24663. (ge, ":random_faction", 0),
  24664. (neq, ":faction_no", "fac_player_supporters_faction"),
  24665. (neq, ":faction_no", ":except_faction_no"),
  24666. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  24667. (val_sub, ":random_faction", 1),
  24668. (lt, ":random_faction", 0),
  24669. (assign, ":selected_faction", ":faction_no"),
  24670. (try_end),
  24671. (assign, reg0, ":selected_faction"),
  24672. ]),
  24673.  
  24674. # script_make_kingdom_hostile_to_player
  24675. # Input: arg1 = faction_no, arg2 = relation difference
  24676. # Output: none
  24677. ("make_kingdom_hostile_to_player",
  24678. [
  24679. (store_script_param_1, ":kingdom_no"),
  24680. (store_script_param_2, ":difference"),
  24681.  
  24682. (try_begin),
  24683. (lt, ":difference", 0),
  24684. (store_relation, ":player_relation", ":kingdom_no", "fac_player_supporters_faction"),
  24685. (val_min, ":player_relation", 0),
  24686. (val_add, ":player_relation", ":difference"),
  24687. (call_script, "script_set_player_relation_with_faction", ":kingdom_no", ":player_relation"),
  24688. (try_end),
  24689. ]),
  24690.  
  24691. # script_change_player_honor
  24692. # Input: arg1 = honor difference
  24693. # Output: none
  24694. ("change_player_honor",
  24695. [
  24696. (store_script_param_1, ":honor_dif"),
  24697. (val_add, "$player_honor", ":honor_dif"),
  24698. (try_begin),
  24699. (gt, ":honor_dif", 0),
  24700. (display_message, "@You gain honour."),
  24701. (else_try),
  24702. (lt, ":honor_dif", 0),
  24703. (display_message, "@You lose honour."),
  24704. (try_end),
  24705.  
  24706. ## (val_mul, ":honor_dif", 1000),
  24707. ## (assign, ":temp_honor", 0),
  24708. ## (assign, ":num_nonlinear_steps", 10),
  24709. ## (try_begin),
  24710. ## (gt, "$player_honor", 0),
  24711. ## (lt, ":honor_dif", 0),
  24712. ## (assign, ":num_nonlinear_steps", 0),
  24713. ## (else_try),
  24714. ## (lt, "$player_honor", 0),
  24715. ## (gt, ":honor_dif", 0),
  24716. ## (assign, ":num_nonlinear_steps", 3),
  24717. ## (try_end),
  24718. ##
  24719. ## (try_begin),
  24720. ## (ge, "$player_honor", 0),
  24721. ## (assign, ":temp_honor", "$player_honor"),
  24722. ## (else_try),
  24723. ## (val_sub, ":temp_honor", "$player_honor"),
  24724. ## (try_end),
  24725. ## (try_for_range, ":unused",0,":num_nonlinear_steps"),
  24726. ## (ge, ":temp_honor", 10000),
  24727. ## (val_div, ":temp_honor", 2),
  24728. ## (val_div, ":honor_dif", 2),
  24729. ## (try_end),
  24730. ## (val_add, "$player_honor", ":honor_dif"),
  24731. ]),
  24732.  
  24733. # script_change_player_party_morale
  24734. # Input: arg1 = morale difference
  24735. # Output: none
  24736. ("change_player_party_morale",
  24737. [
  24738. (store_script_param_1, ":morale_dif"),
  24739. (party_get_morale, ":cur_morale", "p_main_party"),
  24740. (val_clamp, ":cur_morale", 0, 100),
  24741.  
  24742. (store_add, ":new_morale", ":cur_morale", ":morale_dif"),
  24743. (val_clamp, ":new_morale", 0, 100),
  24744.  
  24745. (party_set_morale, "p_main_party", ":new_morale"),
  24746. (try_begin),
  24747. (lt, ":new_morale", ":cur_morale"),
  24748. (store_sub, reg1, ":cur_morale", ":new_morale"),
  24749. (display_message, "str_party_lost_morale"),
  24750. (else_try),
  24751. (gt, ":new_morale", ":cur_morale"),
  24752. (store_sub, reg1, ":new_morale", ":cur_morale"),
  24753. (display_message, "str_party_gained_morale"),
  24754. (try_end),
  24755. ]),
  24756.  
  24757. # script_cf_player_has_item_without_modifier
  24758. # Input: arg1 = item_id, arg2 = modifier
  24759. # Output: none (can_fail)
  24760. ("cf_player_has_item_without_modifier",
  24761. [
  24762. (store_script_param, ":item_id", 1),
  24763. (store_script_param, ":modifier", 2),
  24764. (player_has_item, ":item_id"),
  24765. #checking if any of the meat is not rotten
  24766. (assign, ":has_without_modifier", 0),
  24767. (troop_get_inventory_capacity, ":inv_size", "trp_player"),
  24768. (try_for_range, ":i_slot", 0, ":inv_size"),
  24769. (troop_get_inventory_slot, ":cur_item", "trp_player", ":i_slot"),
  24770. (eq, ":cur_item", ":item_id"),
  24771. (troop_get_inventory_slot_modifier, ":cur_modifier", "trp_player", ":i_slot"),
  24772. (neq, ":cur_modifier", ":modifier"),
  24773. (assign, ":has_without_modifier", 1),
  24774. (assign, ":inv_size", 0), #break
  24775. (try_end),
  24776. (eq, ":has_without_modifier", 1),
  24777. ]),
  24778.  
  24779. # script_get_player_party_morale_values
  24780. # Output: reg0 = player_party_morale_target
  24781. ("get_player_party_morale_values",
  24782. [
  24783. (party_get_num_companion_stacks, ":num_stacks","p_main_party"),
  24784. (assign, ":num_men", 0),
  24785. (try_for_range, ":i_stack", 1, ":num_stacks"),
  24786. (party_stack_get_troop_id, ":stack_troop","p_main_party",":i_stack"),
  24787. (try_begin),
  24788. (troop_is_hero, ":stack_troop"),
  24789. (val_add, ":num_men", 1), #it was 3 in "Mount&Blade", now it is 1 in Warband
  24790. (else_try),
  24791. (party_stack_get_size, ":stack_size","p_main_party",":i_stack"),
  24792. (val_add, ":num_men", ":stack_size"),
  24793. (try_end),
  24794. (try_end),
  24795. (assign, "$g_player_party_morale_modifier_party_size", ":num_men"),
  24796.  
  24797. (store_skill_level, ":player_leadership", "skl_leadership", "trp_player"),
  24798.  
  24799. (try_begin),
  24800. (eq, "$players_kingdom", "fac_player_supporters_faction"),
  24801. (faction_get_slot, ":cur_faction_king", "$players_kingdom", slot_faction_leader),
  24802. (eq, ":cur_faction_king", "trp_player"),
  24803. (store_mul, "$g_player_party_morale_modifier_leadership", ":player_leadership", 15),
  24804. (else_try),
  24805. (store_mul, "$g_player_party_morale_modifier_leadership", ":player_leadership", 12),
  24806. (try_end),
  24807.  
  24808. (assign, ":new_morale", "$g_player_party_morale_modifier_leadership"),
  24809. (val_sub, ":new_morale", "$g_player_party_morale_modifier_party_size"),
  24810.  
  24811. (val_add, ":new_morale", 50),
  24812.  
  24813. (assign, "$g_player_party_morale_modifier_food", 0),
  24814. (try_for_range, ":cur_edible", food_begin, food_end),
  24815. (call_script, "script_cf_player_has_item_without_modifier", ":cur_edible", imod_rotten),
  24816. (item_get_slot, ":food_bonus", ":cur_edible", slot_item_food_bonus),
  24817.  
  24818. (val_mul, ":food_bonus", 3),
  24819. (val_div, ":food_bonus", 2),
  24820.  
  24821. (val_add, "$g_player_party_morale_modifier_food", ":food_bonus"),
  24822. (try_end),
  24823. (val_add, ":new_morale", "$g_player_party_morale_modifier_food"),
  24824.  
  24825. (try_begin),
  24826. (eq, "$g_player_party_morale_modifier_food", 0),
  24827. (assign, "$g_player_party_morale_modifier_no_food", 30),
  24828. (val_sub, ":new_morale", "$g_player_party_morale_modifier_no_food"),
  24829. (else_try),
  24830. (assign, "$g_player_party_morale_modifier_no_food", 0),
  24831. (try_end),
  24832.  
  24833. (assign, "$g_player_party_morale_modifier_debt", 0),
  24834. (try_begin),
  24835. (gt, "$g_player_debt_to_party_members", 0),
  24836. (call_script, "script_calculate_player_faction_wage"),
  24837. (assign, ":total_wages", reg0),
  24838. (store_mul, "$g_player_party_morale_modifier_debt", "$g_player_debt_to_party_members", 10),
  24839. (val_max, ":total_wages", 1),
  24840. (val_div, "$g_player_party_morale_modifier_debt", ":total_wages"),
  24841. (val_clamp, "$g_player_party_morale_modifier_debt", 1, 31),
  24842. (val_sub, ":new_morale", "$g_player_party_morale_modifier_debt"),
  24843. (try_end),
  24844.  
  24845. (val_clamp, ":new_morale", 0, 100),
  24846. (assign, reg0, ":new_morale"),
  24847. ]),
  24848.  
  24849. # script_diplomacy_start_war_between_kingdoms
  24850. # Input: arg1 = kingdom_1, arg2 = kingdom_2, arg3 = initializing_war_peace_cond
  24851. # Output: none
  24852. ("diplomacy_start_war_between_kingdoms", #sets relations between two kingdoms and their vassals.
  24853. [
  24854. (store_script_param, ":kingdom_a", 1),
  24855. (store_script_param, ":kingdom_b", 2),
  24856. (store_script_param, ":initializing_war_peace_cond", 3), #1 = after start of game
  24857.  
  24858. (call_script, "script_npc_decision_checklist_peace_or_war", ":kingdom_a", ":kingdom_b", -1),
  24859. (assign, ":explainer_string", reg1),
  24860.  
  24861. #
  24862. (try_begin),
  24863. (eq, ":kingdom_a", "fac_player_supporters_faction"),
  24864. (assign, ":war_event", logent_player_faction_declares_war),
  24865. (else_try),
  24866. (eq, ":explainer_string", "str_s12s15_declared_war_to_control_calradia"),
  24867. (assign, ":war_event", logent_player_faction_declares_war), #for savegame compatibility, this event stands in for the attempt to declare war on all of calradia
  24868. (else_try),
  24869. (eq, ":explainer_string", "str_s12s15_considers_s16_to_be_dangerous_and_untrustworthy_and_shehe_wants_to_bring_s16_down"),
  24870. (assign, ":war_event", logent_faction_declares_war_out_of_personal_enmity),
  24871. (else_try),
  24872. (eq, ":explainer_string", "str_s12s15_is_anxious_to_reclaim_old_lands_such_as_s18_now_held_by_s16"),
  24873. (assign, ":war_event", logent_faction_declares_war_to_regain_territory),
  24874. (else_try),
  24875. (eq, ":explainer_string", "str_s12s15_faces_too_much_internal_discontent_to_feel_comfortable_ignoring_recent_provocations_by_s16s_subjects"),
  24876. (assign, ":war_event", logent_faction_declares_war_to_respond_to_provocation),
  24877. (else_try),
  24878. (eq, ":explainer_string", "str_s12s15_is_alarmed_by_the_growing_power_of_s16"),
  24879. (assign, ":war_event", logent_faction_declares_war_to_curb_power),
  24880. (try_end),
  24881. (call_script, "script_add_log_entry", ":war_event", ":kingdom_a", 0, 0, ":kingdom_b"),
  24882.  
  24883.  
  24884.  
  24885. (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":kingdom_a", ":kingdom_b"),
  24886. (assign, ":current_diplomatic_status", reg0),
  24887. (try_begin), #effects of policy only after the start of the game
  24888. (eq, ":initializing_war_peace_cond", 1),
  24889. (eq, ":current_diplomatic_status", -1),
  24890. (call_script, "script_faction_follows_controversial_policy", ":kingdom_a", logent_policy_ruler_declares_war_with_justification),
  24891. (else_try),
  24892. (eq, ":initializing_war_peace_cond", 1),
  24893. (eq, ":current_diplomatic_status", 0),
  24894. (call_script, "script_faction_follows_controversial_policy", ":kingdom_a", logent_policy_ruler_attacks_without_provocation),
  24895. (else_try),
  24896. (eq, ":current_diplomatic_status", 1),
  24897. (call_script, "script_faction_follows_controversial_policy", ":kingdom_a", logent_policy_ruler_breaks_truce),
  24898. (try_end),
  24899.  
  24900. (store_relation, ":relation", ":kingdom_a", ":kingdom_b"),
  24901. (val_min, ":relation", -10),
  24902. (val_add, ":relation", -30),
  24903. (set_relation, ":kingdom_a", ":kingdom_b", ":relation"),
  24904.  
  24905. (try_begin),
  24906. (eq, "$players_kingdom", ":kingdom_a"),
  24907. (store_relation, ":relation", "fac_player_supporters_faction", ":kingdom_b"),
  24908. (val_min, ":relation", -30),
  24909. (call_script, "script_set_player_relation_with_faction", ":kingdom_b", ":relation"),
  24910. (else_try),
  24911. (eq, "$players_kingdom", ":kingdom_b"),
  24912. (store_relation, ":relation", "fac_player_supporters_faction", ":kingdom_a"),
  24913. (val_min, ":relation", -30),
  24914. (call_script, "script_set_player_relation_with_faction", ":kingdom_a", ":relation"),
  24915. (try_end),
  24916.  
  24917. (try_begin),
  24918. (eq, ":initializing_war_peace_cond", 1),
  24919.  
  24920. #Remove this -- this scrambles who declares war on whom
  24921. # (try_begin),
  24922. # (store_random_in_range, ":random_no", 0, 2),
  24923. # (this_or_next|eq, ":kingdom_a", "fac_player_supporters_faction"),
  24924. # (eq, ":random_no", 0),
  24925. # (assign, ":local_temp", ":kingdom_a"),
  24926. # (assign, ":kingdom_a", ":kingdom_b"),
  24927. # (assign, ":kingdom_b", ":local_temp"),
  24928. #(try_end),
  24929.  
  24930. (str_store_faction_name_link, s1, ":kingdom_a"),
  24931. (str_store_faction_name_link, s2, ":kingdom_b"),
  24932. (display_log_message, "@{s1} has declared war against {s2}."),
  24933.  
  24934. (store_current_hours, ":hours"),
  24935. (faction_set_slot, ":kingdom_a", slot_faction_ai_last_decisive_event, ":hours"),
  24936. (faction_set_slot, ":kingdom_b", slot_faction_ai_last_decisive_event, ":hours"),
  24937.  
  24938. #set provocation and truce days
  24939. (store_add, ":truce_slot", ":kingdom_b", slot_faction_truce_days_with_factions_begin),
  24940. (store_add, ":provocation_slot", ":kingdom_b", slot_faction_provocation_days_with_factions_begin),
  24941. (val_sub, ":truce_slot", kingdoms_begin),
  24942. (val_sub, ":provocation_slot", kingdoms_begin),
  24943. (faction_set_slot, ":kingdom_a", ":truce_slot", 0),
  24944. (faction_set_slot, ":kingdom_a", ":provocation_slot", 0),
  24945.  
  24946. (store_add, ":truce_slot", ":kingdom_a", slot_faction_truce_days_with_factions_begin),
  24947. (store_add, ":provocation_slot", ":kingdom_a", slot_faction_provocation_days_with_factions_begin),
  24948. (val_sub, ":truce_slot", kingdoms_begin),
  24949. (val_sub, ":provocation_slot", kingdoms_begin),
  24950. (faction_set_slot, ":kingdom_b", ":truce_slot", 0),
  24951. (faction_set_slot, ":kingdom_b", ":provocation_slot", 0),
  24952.  
  24953. (call_script, "script_add_notification_menu", "mnu_notification_war_declared", ":kingdom_a", ":kingdom_b"),
  24954.  
  24955. (call_script, "script_update_faction_notes", ":kingdom_a"),
  24956. (call_script, "script_update_faction_notes", ":kingdom_b"),
  24957. (assign, "$g_recalculate_ais", 1),
  24958. (try_end),
  24959.  
  24960. (try_begin),
  24961. (check_quest_active, "qst_cause_provocation"),
  24962. (neg|check_quest_succeeded, "qst_cause_provocation"),
  24963. (this_or_next|eq, "$players_kingdom", ":kingdom_a"),
  24964. (eq, "$players_kingdom", ":kingdom_b"),
  24965. (call_script, "script_abort_quest", "qst_cause_provocation", 0),
  24966. (try_end),
  24967. ]),
  24968.  
  24969.  
  24970. ("diplomacy_party_attacks_neutral", #called from game_menus (plundering a village, raiding a village), from dialogs: surprise attacking a neutral lord, any attack on caravan or villagers
  24971. #Has no effect if factions are already at war
  24972. [
  24973. (store_script_param, ":attacker_party", 1),
  24974. (store_script_param, ":defender_party", 2),
  24975.  
  24976. (store_faction_of_party, ":attacker_faction", ":attacker_party"),
  24977. (store_faction_of_party, ":defender_faction", ":defender_party"),
  24978.  
  24979. (party_stack_get_troop_id, ":attacker_leader", ":attacker_party", 0),
  24980.  
  24981. (try_begin),
  24982. (eq, ":attacker_party", "p_main_party"),
  24983. (neq, ":attacker_faction", "fac_player_supporters_faction"),
  24984. (assign, ":attacker_faction", "$players_kingdom"),
  24985. (else_try),
  24986. (eq, ":attacker_party", "p_main_party"),
  24987. (eq, ":attacker_faction", "fac_player_supporters_faction"),
  24988. (try_end),
  24989.  
  24990. (try_begin),
  24991. (eq, ":attacker_party", "p_main_party"),
  24992. (store_relation, ":relation", ":attacker_faction", ":defender_faction"),
  24993. (ge, ":relation", 0),
  24994. (call_script, "script_change_player_honor", -2),
  24995. (try_end),
  24996.  
  24997.  
  24998. (try_begin),
  24999. (check_quest_active, "qst_cause_provocation"),
  25000. (quest_slot_eq, "qst_cause_provocation", slot_quest_target_faction, ":defender_faction"),
  25001. (quest_get_slot, ":giver_troop", "qst_cause_provocation", slot_quest_giver_troop),
  25002. (store_faction_of_troop, ":attacker_faction", ":giver_troop"),
  25003. (call_script, "script_succeed_quest", "qst_cause_provocation"),
  25004. (try_end),
  25005.  
  25006. (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":attacker_faction", ":defender_faction"),
  25007. (assign, ":diplomatic_status", reg0),
  25008.  
  25009. (try_begin),
  25010. (eq, ":attacker_faction", "fac_player_supporters_faction"),
  25011. (neg|faction_slot_eq, "fac_player_supporters_faction", slot_faction_state, sfs_active),
  25012. #player faction inactive, no effect
  25013. (else_try),
  25014. (eq, ":diplomatic_status", -2),
  25015. #war, no effect
  25016. (else_try),
  25017. (eq, ":attacker_faction", "fac_player_supporters_faction"),
  25018. (faction_slot_eq, ":attacker_faction", slot_faction_leader, "trp_player"),
  25019. (call_script, "script_faction_follows_controversial_policy", "fac_player_supporters_faction",logent_policy_ruler_attacks_without_provocation),
  25020. (else_try),
  25021. (eq, ":diplomatic_status", 1),
  25022. #truce
  25023. (party_stack_get_troop_id, ":defender_party_leader", ":defender_party", 0),
  25024. (try_begin),
  25025. (neg|is_between, ":defender_party_leader", active_npcs_begin, active_npcs_end),
  25026. (store_faction_of_party, ":defender_party_faction", ":defender_party"),
  25027. (faction_get_slot, ":defender_party_leader", ":defender_party_faction", slot_faction_leader),
  25028. (try_end),
  25029.  
  25030. (call_script, "script_add_log_entry", logent_border_incident_troop_breaks_truce, ":attacker_leader", -1, ":defender_party_leader", ":attacker_faction"),
  25031. (else_try),
  25032. #truce
  25033. (call_script, "script_add_log_entry", logent_border_incident_troop_attacks_neutral, ":attacker_leader", -1, ":defender_party_leader", ":attacker_faction"),
  25034. (try_end),
  25035.  
  25036. (try_begin),
  25037. (is_between, ":defender_party", villages_begin, villages_end),
  25038. (call_script, "script_add_log_entry", logent_village_raided, ":attacker_leader", ":defender_party", -1, ":defender_faction"),
  25039. (else_try),
  25040. (party_get_template_id, ":template", ":defender_party"),
  25041. (neq, ":template", "pt_kingdom_hero_party"),
  25042. (try_begin),
  25043. (ge, "$cheat_mode", 1),
  25044. (str_store_faction_name, s5, ":defender_faction"),
  25045. (display_message, "@{!}DEbug - {s5} caravan attacked"),
  25046. (try_end),
  25047.  
  25048. (call_script, "script_add_log_entry", logent_caravan_accosted, ":attacker_leader", -1, -1, ":defender_faction"),
  25049. (try_end),
  25050.  
  25051. (store_add, ":slot_truce_days", ":attacker_faction", slot_faction_provocation_days_with_factions_begin),
  25052. (val_sub, ":slot_truce_days", kingdoms_begin),
  25053. (faction_set_slot, ":defender_faction", ":slot_truce_days", 0),
  25054.  
  25055. (store_add, ":slot_provocation_days", ":attacker_faction", slot_faction_provocation_days_with_factions_begin),
  25056. (val_sub, ":slot_provocation_days", kingdoms_begin),
  25057. (try_begin),
  25058. (neq, ":diplomatic_status", -2),
  25059. (faction_slot_eq, ":defender_faction", ":slot_provocation_days", 0),
  25060. (faction_set_slot, ":defender_faction", ":slot_provocation_days", 30),
  25061. (try_end),
  25062. ]),
  25063.  
  25064. # script_party_calculate_and_set_nearby_friend_enemy_follower_strengths
  25065. # Input: party_no
  25066. # Output: none
  25067. ("party_calculate_and_set_nearby_friend_enemy_follower_strengths",
  25068. [
  25069. (store_script_param, ":party_no", 1),
  25070. (assign, ":follower_strength", 0),
  25071. (assign, ":friend_strength", 0),
  25072. (assign, ":enemy_strength", 0),
  25073. (store_faction_of_party, ":party_faction", ":party_no"),
  25074.  
  25075. (store_add, ":end_cond", active_npcs_end, 1),
  25076. (try_for_range, ":iteration", active_npcs_begin, ":end_cond"),
  25077. (try_begin),
  25078. (eq, ":iteration", active_npcs_end),
  25079. (assign, ":cur_troop", "trp_player"),
  25080. (else_try),
  25081. (assign, ":cur_troop", ":iteration"),
  25082. (try_end),
  25083.  
  25084. (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  25085. (troop_get_slot, ":cur_troop_party", ":cur_troop", slot_troop_leaded_party),
  25086. (ge, ":cur_troop_party", 0),
  25087. (party_is_active, ":cur_troop_party"),
  25088.  
  25089.  
  25090. #I moved these lines here from (*1) to faster process, ozan.
  25091. (store_troop_faction, ":army_faction", ":cur_troop"),
  25092. (store_relation, ":relation", ":army_faction", ":party_faction"),
  25093. (this_or_next|neq, ":relation", 0),
  25094. (eq, ":army_faction", ":party_faction"),
  25095. #ozan end
  25096.  
  25097.  
  25098. (neq, ":party_no", ":cur_troop_party"),
  25099. (party_get_slot, ":str", ":cur_troop_party", slot_party_cached_strength),
  25100. (try_begin),
  25101. (neg|is_between, ":party_no", centers_begin, centers_end),
  25102. (party_slot_eq, ":cur_troop_party", slot_party_ai_state, spai_accompanying_army),
  25103. (party_get_slot, ":commander_party", ":cur_troop_party", slot_party_ai_object),
  25104. (eq, ":commander_party", ":party_no"),
  25105. (val_add, ":follower_strength", ":str"),
  25106. (else_try),
  25107. (store_distance_to_party_from_party, ":distance", ":cur_troop_party", ":party_no"),
  25108. (lt, ":distance", 20),
  25109.  
  25110. #(*1)
  25111.  
  25112. (try_begin),
  25113. (lt, ":distance", 5),
  25114. (assign, ":str_divided", ":str"),
  25115. (else_try),
  25116. (lt, ":distance", 10),
  25117. (store_div, ":str_divided", ":str", 2),
  25118. (else_try),
  25119. (lt, ":distance", 15),
  25120. (store_div, ":str_divided", ":str", 4),
  25121. (else_try),
  25122. (store_div, ":str_divided", ":str", 8),
  25123. (try_end),
  25124.  
  25125. (try_begin),
  25126. (this_or_next|eq, ":army_faction", ":party_faction"),
  25127. (gt, ":relation", 0),
  25128. (val_add, ":friend_strength", ":str_divided"),
  25129. (else_try),
  25130. (lt, ":relation", 0),
  25131. (val_add, ":enemy_strength", ":str_divided"),
  25132. (try_end),
  25133. (try_end),
  25134. (try_end),
  25135.  
  25136. (party_set_slot, ":party_no", slot_party_follower_strength, ":follower_strength"),
  25137. (party_set_slot, ":party_no", slot_party_nearby_friend_strength, ":friend_strength"),
  25138. (party_set_slot, ":party_no", slot_party_nearby_enemy_strength, ":enemy_strength"),
  25139. ]),
  25140.  
  25141. # script_init_ai_calculation
  25142. # Input: none
  25143. # Output: none
  25144. ("init_ai_calculation",
  25145. [
  25146. (try_for_range, ":cur_troop", heroes_begin, heroes_end),
  25147. (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  25148. (troop_get_slot, ":cur_party", ":cur_troop", slot_troop_leaded_party),
  25149. (party_is_active, ":cur_party"),
  25150. (call_script, "script_party_calculate_strength", ":cur_party", 0), #will update slot_party_cached_strength
  25151. (try_end),
  25152. (call_script, "script_party_calculate_strength", "p_main_party", 0), #will update slot_party_cached_strength
  25153. (try_for_range, ":cur_center", walled_centers_begin, walled_centers_end),
  25154. (call_script, "script_party_calculate_strength", ":cur_center", 0), #will update slot_party_cached_strength
  25155. (try_end),
  25156.  
  25157. (try_for_range, ":cur_center", walled_centers_begin, walled_centers_end),
  25158. (call_script, "script_party_calculate_and_set_nearby_friend_enemy_follower_strengths", ":cur_center"),
  25159. (try_end),
  25160.  
  25161. (try_for_range, ":cur_troop", heroes_begin, heroes_end),
  25162. (troop_get_slot, ":cur_troop_party", ":cur_troop", slot_troop_leaded_party),
  25163. (gt, ":cur_troop_party", 0),
  25164. (party_is_active, ":cur_troop_party"),
  25165. (call_script, "script_party_calculate_and_set_nearby_friend_enemy_follower_strengths", ":cur_troop_party"),
  25166. (try_end),
  25167. (call_script, "script_party_calculate_and_set_nearby_friend_enemy_follower_strengths", "p_main_party"),
  25168. ]),
  25169.  
  25170.  
  25171. # script_recalculate_ais
  25172. # Input: none
  25173. # Output: none
  25174.  
  25175. #When a lord changes factions
  25176. #When a center changes factions
  25177. #When a center is captured
  25178. #When a marshal is defeated
  25179. #Every 23 hours
  25180. ("recalculate_ais",
  25181. [
  25182. (call_script, "script_init_ai_calculation"),
  25183.  
  25184. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  25185. (assign, reg8, ":faction_no"),
  25186. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  25187. #(neg|faction_slot_eq, ":faction_no", slot_faction_marshall, "trp_player"),
  25188. (call_script, "script_decide_faction_ai", ":faction_no"),
  25189. (try_end),
  25190.  
  25191. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  25192. (store_troop_faction, ":faction_no", ":troop_no"),
  25193. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  25194. (call_script, "script_calculate_troop_ai", ":troop_no"),
  25195. (try_end),
  25196. ]),
  25197.  
  25198. # script_calculate_troop_ai
  25199. # Input: troop_no
  25200. # Output: none
  25201. #Now called directly from scripts
  25202. ("calculate_troop_ai",
  25203. [
  25204. (store_script_param, ":troop_no", 1),
  25205.  
  25206. (try_begin),
  25207. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  25208. (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
  25209. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  25210. (gt, ":party_no", 0),
  25211. (party_is_active, ":party_no"),
  25212.  
  25213. (call_script, "script_npc_decision_checklist_party_ai", ":troop_no"), #This handles AI for both marshal and other parties
  25214. (call_script, "script_party_set_ai_state", ":party_no", reg0, reg1),
  25215. (try_end),
  25216. ]),
  25217.  
  25218. # script_diplomacy_start_peace_between_kingdoms
  25219. # Input: arg1 = kingdom_1, arg2 = kingdom_2, arg3 = initializing_war_peace_cond
  25220. # Output: none
  25221. ("diplomacy_start_peace_between_kingdoms", #sets relations between two kingdoms
  25222. [
  25223. (store_script_param, ":kingdom_a", 1),
  25224. (store_script_param, ":kingdom_b", 2),
  25225. (store_script_param, ":initializing_war_peace_cond", 3), #set to 1 if not the start of the game
  25226.  
  25227. (store_relation, ":relation", ":kingdom_a", ":kingdom_b"),
  25228. (val_max, ":relation", 0),
  25229. (set_relation, ":kingdom_a", ":kingdom_b", ":relation"),
  25230. (call_script, "script_exchange_prisoners_between_factions", ":kingdom_a", ":kingdom_b"),
  25231.  
  25232. (try_begin),
  25233. (eq, "$players_kingdom", ":kingdom_a"),
  25234. (store_relation, ":relation", "fac_player_supporters_faction", ":kingdom_b"),
  25235. (val_max, ":relation", 0),
  25236. (call_script, "script_set_player_relation_with_faction", ":kingdom_b", ":relation"),
  25237. (call_script, "script_event_kingdom_make_peace_with_kingdom", ":kingdom_b", "fac_player_supporters_faction"), #event cancels certain quests
  25238. (else_try),
  25239. (eq, "$players_kingdom", ":kingdom_b"),
  25240. (store_relation, ":relation", "fac_player_supporters_faction", ":kingdom_a"),
  25241. (val_max, ":relation", 0),
  25242. (call_script, "script_set_player_relation_with_faction", ":kingdom_a", ":relation"),
  25243. (call_script, "script_event_kingdom_make_peace_with_kingdom", ":kingdom_a", "fac_player_supporters_faction"), #event cancels certain quests
  25244. (try_end),
  25245.  
  25246. (try_for_range, ":cur_center", centers_begin, centers_end),
  25247. (store_faction_of_party, ":faction_no", ":cur_center"),
  25248. (this_or_next|eq, ":faction_no", ":kingdom_a"),
  25249. (eq, ":faction_no", ":kingdom_b"),
  25250. (party_get_slot, ":besieger_party", ":cur_center", slot_center_is_besieged_by),
  25251. (ge, ":besieger_party", 0), #town is under siege
  25252. (party_is_active, ":besieger_party"),
  25253. (store_faction_of_party, ":besieger_party_faction_no", ":besieger_party"),
  25254. (this_or_next|eq, ":besieger_party_faction_no", ":kingdom_a"),
  25255. (eq, ":besieger_party_faction_no", ":kingdom_b"),
  25256. (call_script, "script_lift_siege", ":cur_center", 0),
  25257. (try_end),
  25258.  
  25259. (try_begin),
  25260. (this_or_next|eq, "$players_kingdom", ":kingdom_a"),
  25261. (eq, "$players_kingdom", ":kingdom_b"),
  25262.  
  25263. (ge, "$g_player_besiege_town", 0),
  25264. (party_is_active, "$g_player_besiege_town"),
  25265.  
  25266. (store_faction_of_party, ":besieged_center_faction_no", "$g_player_besiege_town"),
  25267.  
  25268. (this_or_next|eq, ":besieged_center_faction_no", ":kingdom_a"),
  25269. (eq, ":besieged_center_faction_no", ":kingdom_b"),
  25270.  
  25271. (call_script, "script_lift_siege", "$g_player_besiege_town", 0),
  25272. (assign, "$g_player_besiege_town", -1),
  25273. (try_end),
  25274.  
  25275. (try_begin),
  25276. (eq, ":initializing_war_peace_cond", 1),
  25277. (str_store_faction_name_link, s1, ":kingdom_a"),
  25278. (str_store_faction_name_link, s2, ":kingdom_b"),
  25279. (display_log_message, "@{s1} and {s2} have made peace with each other."),
  25280. (call_script, "script_add_notification_menu", "mnu_notification_peace_declared", ":kingdom_a", ":kingdom_b"), #stability penalty for early peace is in the menu
  25281. (call_script, "script_event_kingdom_make_peace_with_kingdom", ":kingdom_a", ":kingdom_b"), #cancels quests
  25282. (call_script, "script_event_kingdom_make_peace_with_kingdom", ":kingdom_b", ":kingdom_a"), #cancels quests
  25283. (assign, "$g_recalculate_ais", 1),
  25284. (try_end),
  25285.  
  25286. (try_begin), #add truce
  25287. (store_add, ":truce_slot", ":kingdom_a", slot_faction_truce_days_with_factions_begin),
  25288. (val_sub, ":truce_slot", kingdoms_begin),
  25289. (faction_set_slot, ":kingdom_b", ":truce_slot", 40),
  25290. (store_add, ":truce_slot", ":kingdom_b", slot_faction_truce_days_with_factions_begin),
  25291. (val_sub, ":truce_slot", kingdoms_begin),
  25292. (faction_set_slot, ":kingdom_a", ":truce_slot", 40),
  25293. (store_add, ":slot_war_damage_inflicted_on_b", ":kingdom_b", slot_faction_war_damage_inflicted_on_factions_begin),
  25294. (val_sub, ":slot_war_damage_inflicted_on_b", kingdoms_begin),
  25295. #(faction_get_slot, ":damage_inflicted_by_a", ":kingdom_a", ":slot_war_damage_inflicted_on_b"),
  25296. (faction_set_slot, ":kingdom_a", ":slot_war_damage_inflicted_on_b", 0),
  25297. (store_add, ":slot_war_damage_inflicted_on_a", ":kingdom_a", slot_faction_war_damage_inflicted_on_factions_begin),
  25298. (val_sub, ":slot_war_damage_inflicted_on_a", kingdoms_begin),
  25299. #(faction_get_slot, ":damage_inflicted_by_b", ":kingdom_b", ":slot_war_damage_inflicted_on_a"),
  25300. (faction_set_slot, ":kingdom_b", ":slot_war_damage_inflicted_on_a", 0),
  25301. (try_end),
  25302. ]),
  25303.  
  25304.  
  25305.  
  25306. ("event_kingdom_make_peace_with_kingdom",
  25307. [
  25308. (store_script_param_1, ":source_kingdom"),
  25309. (store_script_param_2, ":target_kingdom"),
  25310. (try_begin),
  25311. (check_quest_active, "qst_capture_prisoners"),
  25312. (try_begin),
  25313. (eq, "$players_kingdom", ":source_kingdom"),
  25314. (quest_slot_eq, "qst_capture_prisoners", slot_quest_target_faction, ":target_kingdom"),
  25315. (call_script, "script_cancel_quest", "qst_capture_prisoners"),
  25316. (else_try),
  25317. (eq, "$players_kingdom", ":target_kingdom"),
  25318. (quest_slot_eq, "qst_capture_prisoners", slot_quest_target_faction, ":source_kingdom"),
  25319. (call_script, "script_cancel_quest", "qst_capture_prisoners"),
  25320. (try_end),
  25321. (try_end),
  25322.  
  25323. (try_begin),
  25324. (check_quest_active, "qst_capture_enemy_hero"),
  25325. (try_begin),
  25326. (eq, "$players_kingdom", ":source_kingdom"),
  25327. (quest_slot_eq, "qst_capture_enemy_hero", slot_quest_target_faction, ":target_kingdom"),
  25328. (call_script, "script_cancel_quest", "qst_capture_enemy_hero"),
  25329. (else_try),
  25330. (eq, "$players_kingdom", ":target_kingdom"),
  25331. (quest_slot_eq, "qst_capture_enemy_hero", slot_quest_target_faction, ":source_kingdom"),
  25332. (call_script, "script_cancel_quest", "qst_capture_enemy_hero"),
  25333. (try_end),
  25334. (try_end),
  25335.  
  25336.  
  25337.  
  25338. (try_begin),
  25339. (check_quest_active, "qst_persuade_lords_to_make_peace"),
  25340. (quest_get_slot, ":lord_1", "qst_persuade_lords_to_make_peace", slot_quest_target_troop),
  25341. (quest_get_slot, ":lord_2", "qst_persuade_lords_to_make_peace", slot_quest_object_troop),
  25342.  
  25343. (try_begin),
  25344. (lt, ":lord_1", 0),
  25345. (val_mul, ":lord_1", -1),
  25346. (try_end),
  25347. (try_begin),
  25348. (lt, ":lord_2", 0),
  25349. (val_mul, ":lord_2", -1),
  25350. (try_end),
  25351.  
  25352.  
  25353. (store_faction_of_troop, ":lord_1_faction", ":lord_1"),
  25354. (store_faction_of_troop, ":lord_2_faction", ":lord_2"),
  25355.  
  25356. (this_or_next|eq, ":lord_1_faction", ":source_kingdom"),
  25357. (eq, ":lord_2_faction", ":source_kingdom"),
  25358.  
  25359. (this_or_next|eq, ":lord_1_faction", ":target_kingdom"),
  25360. (eq, ":lord_2_faction", ":target_kingdom"),
  25361.  
  25362. (call_script, "script_cancel_quest", "qst_persuade_lords_to_make_peace"),
  25363.  
  25364. (try_end),
  25365.  
  25366. #Rescue prisoners cancelled in simple_triggers
  25367.  
  25368. (try_begin),
  25369. (this_or_next|faction_slot_eq, ":target_kingdom", slot_faction_leader, "trp_player"),
  25370. (faction_slot_eq, ":source_kingdom", slot_faction_leader, "trp_player"),
  25371.  
  25372. (call_script, "script_change_player_right_to_rule", 3),
  25373. (try_end),
  25374.  
  25375. ]),
  25376.  
  25377. # script_randomly_start_war_peace
  25378. # Input: arg1 = initializing_war_peace_cond (1 = true, 0 = false)
  25379. # Output: none
  25380.  
  25381. #Aims to introduce a slightly simpler system in which the AI kings' reasoning could be made more transparent to the player. At the start of the game, this may lead to less variation in outcomes, though
  25382. ("randomly_start_war_peace_new",
  25383. [
  25384. (store_script_param_1, ":initializing_war_peace_cond"),
  25385.  
  25386. (assign, ":players_kingdom_at_peace", 0), #if the player kingdom is at peace, then create an enmity
  25387. (try_begin),
  25388. (is_between, "$players_kingdom", "fac_kingdom_1", kingdoms_end),
  25389. (assign, ":players_kingdom_at_peace", 1),
  25390. (try_end),
  25391.  
  25392. (try_for_range, ":cur_kingdom", "fac_kingdom_1", kingdoms_end),
  25393. (faction_slot_eq, ":cur_kingdom", slot_faction_state, sfs_active),
  25394.  
  25395. (try_for_range, ":cur_kingdom_2", kingdoms_begin, kingdoms_end),
  25396. (neq, ":cur_kingdom", ":cur_kingdom_2"),
  25397. (faction_slot_eq, ":cur_kingdom_2", slot_faction_state, sfs_active),
  25398.  
  25399. (call_script, "script_npc_decision_checklist_peace_or_war", ":cur_kingdom", ":cur_kingdom_2", -1),
  25400. (assign, ":kingdom_1_to_kingdom_2", reg0),
  25401.  
  25402. (store_relation, ":cur_relation", ":cur_kingdom", ":cur_kingdom_2"),
  25403. (try_begin),
  25404. (lt, ":cur_relation", 0), #AT WAR
  25405.  
  25406. (try_begin),
  25407. (eq, ":cur_kingdom", "$players_kingdom"),
  25408. (assign, ":players_kingdom_at_peace", 0),
  25409. (try_end),
  25410.  
  25411. (ge, ":kingdom_1_to_kingdom_2", 1),
  25412.  
  25413. (try_begin),
  25414. (eq, ":cur_kingdom_2", "fac_player_supporters_faction"),
  25415.  
  25416. (store_mul, ":goodwill_level", ":kingdom_1_to_kingdom_2", 2),
  25417. (store_random_in_range, ":random", 0, 20),
  25418. (try_begin),
  25419. (lt, ":random", ":goodwill_level"),
  25420. (call_script, "script_add_notification_menu", "mnu_question_peace_offer", ":cur_kingdom", 0),
  25421. (try_end),
  25422. (else_try),
  25423. (call_script, "script_npc_decision_checklist_peace_or_war", ":cur_kingdom_2", ":cur_kingdom", -1),
  25424. (assign, ":kingdom_2_to_kingdom_1", reg0),
  25425. (ge, ":kingdom_2_to_kingdom_1", 1),
  25426.  
  25427. (store_mul, ":goodwill_level", ":kingdom_1_to_kingdom_2", ":kingdom_2_to_kingdom_1"),
  25428. (store_random_in_range, ":random", 0, 20),
  25429. (lt, ":random", ":goodwill_level"),
  25430.  
  25431. (try_begin),
  25432. (eq, "$g_include_diplo_explanation", 0),
  25433. (assign, "$g_include_diplo_explanation", ":cur_kingdom"),
  25434. (str_store_string, s57, "str_s14"),
  25435. (try_end),
  25436.  
  25437. (call_script, "script_diplomacy_start_peace_between_kingdoms", ":cur_kingdom", ":cur_kingdom_2", ":initializing_war_peace_cond"),
  25438. (try_end),
  25439. (else_try),
  25440. (ge, ":cur_relation", 0), #AT PEACE
  25441.  
  25442. (call_script, "script_npc_decision_checklist_peace_or_war", ":cur_kingdom", ":cur_kingdom_2", -1),
  25443.  
  25444. #negative, leans towards war/positive, leans towards peace
  25445. (le, reg0, 0), #still no chance of war unless provocation, or at start of game
  25446.  
  25447. (assign, ":hostility", reg0),
  25448.  
  25449. (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":cur_kingdom", ":cur_kingdom_2"),
  25450.  
  25451. (le, reg0, 0), #no truce
  25452.  
  25453. (val_add, ":hostility", reg0), #increase hostility if there is a provocation
  25454.  
  25455. (val_sub, ":hostility", 1), #greater chance at start of game
  25456. (val_add, ":hostility", ":initializing_war_peace_cond"), #this variable = 1 after the start
  25457.  
  25458. (store_mul, ":hostility_squared", ":hostility", ":hostility"),
  25459. (store_random_in_range, ":random", 0, 50),
  25460.  
  25461. (lt, ":random", ":hostility_squared"),
  25462.  
  25463. (try_begin),
  25464. (eq, "$g_include_diplo_explanation", 0),
  25465. (assign, "$g_include_diplo_explanation", ":cur_kingdom"),
  25466. (str_store_string, s57, "str_s14"),
  25467. (try_end),
  25468. (call_script, "script_diplomacy_start_war_between_kingdoms", ":cur_kingdom", ":cur_kingdom_2", ":initializing_war_peace_cond"),
  25469.  
  25470. (try_begin), #do some war damage for
  25471. (eq, ":initializing_war_peace_cond", 0),
  25472. (store_random_in_range, ":war_damage_inflicted", 10, 120),
  25473. (store_add, ":slot_war_damage_inflicted", ":cur_kingdom", slot_faction_war_damage_inflicted_on_factions_begin),
  25474. (val_sub, ":slot_war_damage_inflicted", kingdoms_begin),
  25475. (faction_set_slot, ":cur_kingdom_2", ":slot_war_damage_inflicted", ":war_damage_inflicted"),
  25476.  
  25477. (store_add, ":slot_war_damage_inflicted", ":cur_kingdom_2", slot_faction_war_damage_inflicted_on_factions_begin),
  25478. (val_sub, ":slot_war_damage_inflicted", kingdoms_begin),
  25479. (faction_set_slot, ":cur_kingdom", ":slot_war_damage_inflicted", ":war_damage_inflicted"),
  25480. (try_end),
  25481. (try_end),
  25482. (try_end),
  25483. (try_end),
  25484.  
  25485. (try_begin),
  25486. (eq, ":players_kingdom_at_peace", 1),
  25487. (val_add, "$players_kingdom_days_at_peace", 1),
  25488. (try_begin),
  25489. (eq, "$cheat_mode", 1),
  25490. (assign, reg3, "$players_kingdom_days_at_peace"),
  25491. (display_message, "@{!}DEBUG -- Player's kingdom has had {reg3} days of peace"),
  25492. (try_end),
  25493. (else_try),
  25494. (assign, "$players_kingdom_days_at_peace", 0),
  25495. (try_end),
  25496.  
  25497. ]),
  25498.  
  25499.  
  25500. # script_randomly_start_war_peace
  25501. # Input: arg1 = initializing_war_peace_cond (1 = true, 0 = false)
  25502. # Output: none
  25503. # ("randomly_start_war_peace",
  25504. # [
  25505. # (store_script_param_1, ":initializing_war_peace_cond"),
  25506. # (assign, ":total_resources", 0),
  25507. # (assign, ":total_active_kingdoms", 0),
  25508. # (try_for_range, ":cur_kingdom", kingdoms_begin, kingdoms_end),
  25509. # (faction_slot_eq, ":cur_kingdom", slot_faction_state, sfs_active),
  25510. # (val_add, ":total_active_kingdoms", 1),
  25511. # (faction_get_slot, ":num_towns", ":cur_kingdom", slot_faction_num_towns),
  25512. # (store_mul, ":kingdom_resources_value", ":num_towns", 2),
  25513. # (faction_get_slot, ":num_castles", ":cur_kingdom", slot_faction_num_castles),
  25514. # (val_add, ":kingdom_resources_value", ":num_castles"),
  25515. # (val_mul, ":kingdom_resources_value", 10),
  25516. # (val_max, ":kingdom_resources_value", 1),
  25517. # (val_mul, ":kingdom_resources_value", 1000),
  25518. # (faction_get_slot, ":num_armies", ":cur_kingdom", slot_faction_num_armies),
  25519. # (val_max, ":num_armies", 1),
  25520. # (val_div, ":kingdom_resources_value", ":num_armies"),
  25521. # (val_add, ":total_resources", ":kingdom_resources_value"),
  25522. # (try_end),
  25523. # (val_max, ":total_active_kingdoms", 1),
  25524. # (store_div, ":average_resources", ":total_resources", ":total_active_kingdoms"),
  25525.  
  25526. # (try_for_range, ":cur_kingdom", kingdoms_begin, kingdoms_end),
  25527. ## (neq, ":cur_kingdom", "fac_player_supporters_faction"),
  25528. # (faction_slot_eq, ":cur_kingdom", slot_faction_state, sfs_active),
  25529. # (assign, ":num_ongoing_wars", 0),
  25530. # (try_for_range, ":other_kingdom", kingdoms_begin, kingdoms_end),
  25531. # (faction_slot_eq, ":other_kingdom", slot_faction_state, sfs_active),
  25532. # (store_relation, ":other_relation", ":cur_kingdom", ":other_kingdom"),
  25533. # (lt, ":other_relation", 0),
  25534. # (val_add, ":num_ongoing_wars", 1),
  25535. # (try_end),
  25536.  
  25537. # (faction_get_slot, ":num_towns", ":cur_kingdom", slot_faction_num_towns),
  25538. # (store_mul, ":kingdom_1_resources_value", ":num_towns", 2),
  25539. # (faction_get_slot, ":num_castles", ":cur_kingdom", slot_faction_num_castles),
  25540. # (val_add, ":kingdom_1_resources_value", ":num_castles"),
  25541. # (val_mul, ":kingdom_1_resources_value", 10),
  25542. # (val_max, ":kingdom_1_resources_value", 1),
  25543. # (val_mul, ":kingdom_1_resources_value", 1000),
  25544. # (faction_get_slot, ":num_armies", ":cur_kingdom", slot_faction_num_armies),
  25545. # (val_max, ":num_armies", 1),
  25546. # (val_div, ":kingdom_1_resources_value", ":num_armies"),
  25547.  
  25548. # (store_add, ":start_cond", ":cur_kingdom", 1),
  25549. # (try_for_range, ":cur_kingdom_2", ":start_cond", kingdoms_end),
  25550. ## (neq, ":cur_kingdom", "fac_player_supporters_faction"),
  25551. # (faction_slot_eq, ":cur_kingdom_2", slot_faction_state, sfs_active),
  25552.  
  25553. # (assign, ":num_ongoing_wars_2", 0),
  25554. # (try_for_range, ":other_kingdom", kingdoms_begin, kingdoms_end),
  25555. # (faction_slot_eq, ":other_kingdom", slot_faction_state, sfs_active),
  25556. # (store_relation, ":other_relation", ":cur_kingdom_2", ":other_kingdom"),
  25557. # (lt, ":other_relation", 0),
  25558. # (val_add, ":num_ongoing_wars_2", 1),
  25559. # (try_end),
  25560.  
  25561. # (store_add, ":total_ongoing_wars", ":num_ongoing_wars", ":num_ongoing_wars_2"),
  25562.  
  25563. # (faction_get_slot, ":num_towns", ":cur_kingdom_2", slot_faction_num_towns),
  25564. # (store_mul, ":kingdom_2_resources_value", ":num_towns", 2),
  25565. # (faction_get_slot, ":num_castles", ":cur_kingdom_2", slot_faction_num_castles),
  25566. # (val_add, ":kingdom_2_resources_value", ":num_castles"),
  25567. # (val_mul, ":kingdom_2_resources_value", 10),
  25568. # (val_max, ":kingdom_2_resources_value", 1),
  25569. # (val_mul, ":kingdom_2_resources_value", 1000),
  25570. # (faction_get_slot, ":num_armies", ":cur_kingdom_2", slot_faction_num_armies),
  25571. # (val_max, ":num_armies", 1),
  25572. # (val_div, ":kingdom_2_resources_value", ":num_armies"),
  25573.  
  25574. # (assign, ":max_resources_value", ":kingdom_1_resources_value"),
  25575. # (val_max, ":max_resources_value", ":kingdom_2_resources_value"),
  25576. # (val_mul, ":max_resources_value", 100),
  25577. # (val_div, ":max_resources_value", ":average_resources"),
  25578.  
  25579. # (assign, ":cur_king", -1),
  25580. # (try_begin),
  25581. # (eq, ":cur_kingdom", "fac_player_supporters_faction"),
  25582. # (faction_get_slot, ":cur_king", ":cur_kingdom_2", slot_faction_leader),
  25583. # (assign, ":cur_relation", reg0),
  25584. # (store_sub, ":relation_effect", 200, ":cur_relation"),
  25585. # (val_mul, ":kingdom_1_resources_value", ":relation_effect"),
  25586. # (val_div, ":kingdom_1_resources_value", 200),
  25587. # (else_try),
  25588. # (eq, ":cur_kingdom_2", "fac_player_supporters_faction"),
  25589. # (faction_get_slot, ":cur_king", ":cur_kingdom", slot_faction_leader),
  25590. # (try_end),
  25591.  
  25592. # (try_begin),
  25593. # (ge, ":cur_king", 0),
  25594. # (call_script, "script_troop_get_player_relation", ":cur_king"),
  25595. # (assign, ":cur_relation", reg0),
  25596. # (store_sub, ":relation_effect", 200, ":cur_relation"),
  25597. # (val_mul, ":max_resources_value", ":relation_effect"),
  25598. # (val_div, ":max_resources_value", 200),
  25599. # (try_end),
  25600.  
  25601. #max_resources_value is the obtained value that gives us how tempting the kingdom's values are
  25602. #average is 100
  25603. # (val_clamp, ":max_resources_value", 20, 500),
  25604. #not letting more than 5 times higher chance of declaring war or peace
  25605.  
  25606. # (store_random_in_range, ":random_no", 0, 10000),
  25607. # (store_relation, ":cur_relation", ":cur_kingdom", ":cur_kingdom_2"),
  25608. # (try_begin),
  25609. # (lt, ":cur_relation", 0), #AT WAR
  25610. # (store_mul, ":chance_to_make_peace", ":total_ongoing_wars", 50),
  25611. # (val_mul, ":chance_to_make_peace", 100),
  25612. # (val_div, ":chance_to_make_peace", ":max_resources_value"),
  25613. # (try_begin),
  25614. #disable random peace for special conditions
  25615. # (this_or_next|eq, ":cur_kingdom", "fac_player_supporters_faction"),
  25616. # (eq, ":cur_kingdom_2", "fac_player_supporters_faction"),
  25617. # (assign, ":continue", 0),
  25618. # (try_begin),
  25619. # (gt, "$supported_pretender", 0),
  25620. # (this_or_next|eq, ":cur_kingdom", "$supported_pretender_old_faction"),
  25621. # (eq, ":cur_kingdom_2", "$supported_pretender_old_faction"),
  25622. # (assign, ":continue", 1),
  25623. # (else_try),
  25624. # (is_between, "$players_oath_renounced_against_kingdom", kingdoms_begin, kingdoms_end),
  25625. # (this_or_next|eq, ":cur_kingdom", "$players_oath_renounced_against_kingdom"),
  25626. # (eq, ":cur_kingdom_2", "$players_oath_renounced_against_kingdom"),
  25627. # (assign, ":continue", 1),
  25628. # (try_end),
  25629. # (eq, ":continue", 1),
  25630. # (assign, ":chance_to_make_peace", 0),
  25631. # (try_end),
  25632. # (try_begin),
  25633. # (lt, ":random_no", ":chance_to_make_peace"),
  25634. # (assign, ":continue", 1),
  25635. # (try_begin),
  25636. # (check_quest_active, "qst_persuade_lords_to_make_peace"),
  25637. # (quest_get_slot, ":quest_target_faction", "qst_persuade_lords_to_make_peace", slot_quest_target_faction),
  25638. # (quest_get_slot, ":quest_object_faction", "qst_persuade_lords_to_make_peace", slot_quest_object_faction),
  25639. # (this_or_next|eq, ":cur_kingdom", ":quest_target_faction"),
  25640. # (eq, ":cur_kingdom", ":quest_object_faction"),
  25641. # (this_or_next|eq, ":cur_kingdom_2", ":quest_target_faction"),
  25642. # (eq, ":cur_kingdom_2", ":quest_object_faction"),
  25643. # (assign, ":continue", 0), #Do not declare war if the quest is active for the specific kingdoms
  25644. # (try_end),
  25645. # (eq, ":continue", 1),
  25646. # (try_begin),
  25647. # (eq, ":cur_kingdom", "fac_player_supporters_faction"),
  25648. # (call_script, "script_add_notification_menu", "mnu_question_peace_offer", ":cur_kingdom_2", 0),
  25649. # (else_try),
  25650. # (eq, ":cur_kingdom_2", "fac_player_supporters_faction"),
  25651. # (call_script, "script_add_notification_menu", "mnu_question_peace_offer", ":cur_kingdom", 0),
  25652. # (else_try),
  25653. # (call_script, "script_diplomacy_start_peace_between_kingdoms", ":cur_kingdom", ":cur_kingdom_2", ":initializing_war_peace_cond"),
  25654. # (try_end),
  25655. # (try_end),
  25656. # (else_try), # AT PEACE
  25657. # (assign, ":chance_to_declare_war", 6),
  25658. # (val_sub, ":chance_to_declare_war", ":total_ongoing_wars"),
  25659. # (val_mul, ":chance_to_declare_war", 50),
  25660. # (val_mul, ":chance_to_declare_war", ":max_resources_value"),
  25661. # (val_div, ":chance_to_declare_war", 100),
  25662. # (try_begin),
  25663. # (lt, ":random_no", ":chance_to_declare_war"),
  25664. # (assign, ":continue", 1),
  25665. # (try_begin),
  25666. # (check_quest_active, "qst_raid_caravan_to_start_war"),
  25667. # (quest_get_slot, ":quest_target_faction", "qst_raid_caravan_to_start_war", slot_quest_target_faction),
  25668. # (quest_get_slot, ":quest_object_faction", "qst_raid_caravan_to_start_war", slot_quest_object_faction),
  25669. # (this_or_next|eq, ":cur_kingdom", ":quest_target_faction"),
  25670. # (eq, ":cur_kingdom", ":quest_object_faction"),
  25671. # (this_or_next|eq, ":cur_kingdom_2", ":quest_target_faction"),
  25672. # (eq, ":cur_kingdom_2", ":quest_object_faction"),
  25673. # (assign, ":continue", 0), #Do not declare war if the quest is active for the specific kingdoms
  25674. # (try_end),
  25675. # (eq, ":continue", 1),
  25676. # (call_script, "script_diplomacy_start_war_between_kingdoms", ":cur_kingdom", ":cur_kingdom_2", ":initializing_war_peace_cond"),
  25677. # (try_end),
  25678. # (try_end),
  25679. # (try_end),
  25680. # (try_end),
  25681. # ]),
  25682.  
  25683.  
  25684.  
  25685. # script_exchange_prisoners_between_factions
  25686. # Input: arg1 = faction_no_1, arg2 = faction_no_2
  25687. ("exchange_prisoners_between_factions",
  25688. [
  25689. (store_script_param_1, ":faction_no_1"),
  25690. (store_script_param_2, ":faction_no_2"),
  25691. (assign, ":faction_no_3", -1),
  25692. (assign, ":faction_no_4", -1),
  25693. (assign, ":free_companions_too", 0),
  25694. (try_begin),
  25695. (this_or_next|eq, "$players_kingdom", ":faction_no_1"),
  25696. (eq, "$players_kingdom", ":faction_no_2"),
  25697. (assign, ":faction_no_3", "fac_player_faction"),
  25698. (assign, ":faction_no_4", "fac_player_supporters_faction"),
  25699. (assign, ":free_companions_too", 1),
  25700. (try_end),
  25701.  
  25702. (try_for_parties, ":party_no"),
  25703. (store_faction_of_party, ":party_faction", ":party_no"),
  25704. (this_or_next|eq, ":party_faction", ":faction_no_1"),
  25705. (this_or_next|eq, ":party_faction", ":faction_no_2"),
  25706. (this_or_next|eq, ":party_faction", ":faction_no_3"),
  25707. (eq, ":party_faction", ":faction_no_4"),
  25708. (party_get_num_prisoner_stacks, ":num_stacks", ":party_no"),
  25709. (try_for_range_backwards, ":troop_iterator", 0, ":num_stacks"),
  25710. (party_prisoner_stack_get_troop_id, ":cur_troop_id", ":party_no", ":troop_iterator"),
  25711.  
  25712. (assign, ":continue", 0),
  25713. (try_begin),
  25714. (is_between, ":cur_troop_id", companions_begin, companions_end),
  25715. (eq, ":free_companions_too", 1),
  25716. (assign, ":continue", 1),
  25717. (else_try),
  25718. (neg|is_between, ":cur_troop_id", companions_begin, companions_end),
  25719. (store_troop_faction, ":cur_faction", ":cur_troop_id"),
  25720. (this_or_next|eq, ":cur_faction", ":faction_no_1"),
  25721. (this_or_next|eq, ":cur_faction", ":faction_no_2"),
  25722. (this_or_next|eq, ":cur_faction", ":faction_no_3"),
  25723. (eq, ":cur_faction", ":faction_no_4"),
  25724. (assign, ":continue", 1),
  25725. (try_end),
  25726. (eq, ":continue", 1),
  25727.  
  25728. (try_begin),
  25729. (troop_is_hero, ":cur_troop_id"),
  25730. (call_script, "script_remove_troop_from_prison", ":cur_troop_id"),
  25731. (try_end),
  25732. (party_prisoner_stack_get_size, ":stack_size", ":party_no", ":troop_iterator"),
  25733. (party_remove_prisoners, ":party_no", ":cur_troop_id", ":stack_size"),
  25734. (try_end),
  25735. (try_end),
  25736.  
  25737. ]),
  25738.  
  25739. # script_add_notification_menu
  25740. # Input: arg1 = menu_no, arg2 = menu_var_1, arg3 = menu_var_2
  25741. # Output: none
  25742. ("add_notification_menu",
  25743. [
  25744. (try_begin),
  25745. (eq, "$g_infinite_camping", 0),
  25746. (store_script_param, ":menu_no", 1),
  25747. (store_script_param, ":menu_var_1", 2),
  25748. (store_script_param, ":menu_var_2", 3),
  25749. (assign, ":end_cond", 1),
  25750. (try_for_range, ":cur_slot", 0, ":end_cond"),
  25751. (try_begin),
  25752. (troop_slot_ge, "trp_notification_menu_types", ":cur_slot", 1),
  25753. (val_add, ":end_cond", 1),
  25754. (else_try),
  25755. (troop_set_slot, "trp_notification_menu_types", ":cur_slot", ":menu_no"),
  25756. (troop_set_slot, "trp_notification_menu_var1", ":cur_slot", ":menu_var_1"),
  25757. (troop_set_slot, "trp_notification_menu_var2", ":cur_slot", ":menu_var_2"),
  25758. (try_end),
  25759. (try_end),
  25760. (try_end),
  25761. ]),
  25762.  
  25763. # script_finish_quest
  25764. # Input: arg1 = quest_no, arg2 = finish_percentage
  25765. # Output: none
  25766. ("finish_quest",
  25767. [
  25768. (store_script_param_1, ":quest_no"),
  25769. (store_script_param_2, ":finish_percentage"),
  25770.  
  25771. (quest_get_slot, ":quest_giver", ":quest_no", slot_quest_giver_troop),
  25772. (quest_get_slot, ":quest_importance", ":quest_no", slot_quest_importance),
  25773. (quest_get_slot, ":quest_xp_reward", ":quest_no", slot_quest_xp_reward),
  25774. (quest_get_slot, ":quest_gold_reward", ":quest_no", slot_quest_gold_reward),
  25775.  
  25776. (try_begin),
  25777. (lt, ":finish_percentage", 100),
  25778. (val_mul, ":quest_xp_reward", ":finish_percentage"),
  25779. (val_div, ":quest_xp_reward", 100),
  25780. (val_mul, ":quest_gold_reward", ":finish_percentage"),
  25781. (val_div, ":quest_gold_reward", 100),
  25782. #Changing the relation factor. Negative relation if less than 75% of the quest is finished.
  25783. #Positive relation if more than 75% of the quest is finished.
  25784. (assign, ":importance_multiplier", ":finish_percentage"),
  25785. (val_sub, ":importance_multiplier", 75),
  25786. (val_mul, ":quest_importance", ":importance_multiplier"),
  25787. (val_div, ":quest_importance", 100),
  25788. (else_try),
  25789. (val_mul, ":quest_importance", 4), #was div 4. Relation was increasing very less. I changed it to mul 4.
  25790. (val_add, ":quest_importance", 1),
  25791. (call_script, "script_change_player_relation_with_troop", ":quest_giver", ":quest_importance"),
  25792. (try_end),
  25793.  
  25794. (add_xp_as_reward, ":quest_xp_reward"),
  25795. (call_script, "script_troop_add_gold", "trp_player", ":quest_gold_reward"),
  25796. (call_script, "script_end_quest", ":quest_no"),
  25797. ]),
  25798.  
  25799.  
  25800. # script_get_information_about_troops_position
  25801. # Input: arg1 = troop_no, arg2 = time (0 if present tense, 1 if past tense)
  25802. # Output: s1 = String, reg0 = knows-or-not
  25803. ("get_information_about_troops_position",
  25804. [
  25805. (store_script_param_1, ":troop_no"),
  25806. (store_script_param_2, reg3),
  25807. (troop_get_type, reg4, ":troop_no"),
  25808. (str_store_troop_name, s2, ":troop_no"),
  25809.  
  25810. (assign, ":found", 0),
  25811. (troop_get_slot, ":center_no", ":troop_no", slot_troop_cur_center),
  25812. (try_begin),
  25813. (gt, ":center_no", 0),
  25814. (is_between, ":center_no", centers_begin, centers_end),
  25815. (str_store_party_name_link, s3, ":center_no"),
  25816. (str_store_string, s1, "@{s2} {reg3?was:is currently} at {s3}."),
  25817. (assign, ":found", 1),
  25818. (else_try),
  25819. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  25820. (gt, ":party_no", 0),
  25821. (call_script, "script_get_troop_attached_party", ":troop_no"),
  25822. (assign, ":center_no", reg0),
  25823. (try_begin),
  25824. (is_between, ":center_no", centers_begin, centers_end),
  25825. (str_store_party_name_link, s3, ":center_no"),
  25826. (str_store_string, s1, "@{s2} {reg3?was:is currently} at {s3}."),
  25827. (assign, ":found", 1),
  25828. (else_try),
  25829. (get_party_ai_behavior, ":ai_behavior", ":party_no"),
  25830. (eq, ":ai_behavior", ai_bhvr_travel_to_party),
  25831. (get_party_ai_object, ":ai_object", ":party_no"),
  25832. (is_between, ":ai_object", centers_begin, centers_end),
  25833. (call_script, "script_get_closest_center", ":party_no"),
  25834. (str_store_party_name_link, s4, reg0),
  25835. (str_store_party_name_link, s3, ":ai_object"),
  25836. (str_store_string, s1, "@{s2} {reg3?was:is} travelling to {s3} and {reg4?she:he} {reg3?was:should be} close to {s4}{reg3?: at the moment}."),
  25837. (assign, ":found", 1),
  25838. (else_try),
  25839. (call_script, "script_get_closest_center", ":party_no"),
  25840. (str_store_party_name_link, s3, reg0),
  25841. (str_store_string, s1, "@{s2} {reg3?was:is} in the field and {reg4?she:he} {reg3?was:should be} close to {s3}{reg3?: at the moment}."),
  25842. (assign, ":found", 1),
  25843. (try_end),
  25844. (else_try),
  25845. #(troop_slot_ge, ":troop_no", slot_troop_is_prisoner, 1),
  25846. (troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
  25847. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  25848. (party_count_prisoners_of_type, ":num_prisoners", ":center_no", ":troop_no"),
  25849. (gt, ":num_prisoners", 0),
  25850. (assign, ":found", 1),
  25851. (str_store_party_name_link, s3, ":center_no"),
  25852. (str_store_string, s1, "@{s2} {reg3?was:is} being held captive at {s3}."),
  25853. (try_end),
  25854. (try_begin),
  25855. (eq, ":found", 0),
  25856. (str_store_string, s1, "@{s2} {reg3?was:has been} taken captive by {reg4?her:his} enemies."),
  25857. (assign, ":found", 1),
  25858. (try_end),
  25859. (try_end),
  25860. (try_begin),
  25861. (eq, ":found", 0),
  25862. (str_store_string, s1, "@{reg3?{s2}'s location was unknown:I don't know where {s2} is}."),
  25863. (try_end),
  25864. (assign, reg0, ":found"),
  25865. ]),
  25866.  
  25867. # script_recruit_troop_as_companion
  25868. # Input: arg1 = troop_no,
  25869. # Output: none
  25870. ("recruit_troop_as_companion",
  25871. [
  25872. (store_script_param_1, ":troop_no"),
  25873. (troop_set_slot, ":troop_no", slot_troop_occupation, slto_player_companion),
  25874. (troop_set_slot, ":troop_no", slot_troop_cur_center, -1),
  25875. (troop_set_auto_equip, ":troop_no", 0),
  25876. (party_add_members, "p_main_party", ":troop_no", 1),
  25877. (str_store_troop_name, s6, ":troop_no"),
  25878. (display_message, "@{s6} has joined your party."),
  25879. (troop_set_note_available, ":troop_no", 1),
  25880.  
  25881. (try_begin),
  25882. (is_between, ":troop_no", companions_begin, companions_end),
  25883. (store_sub, ":companion_number", ":troop_no", companions_begin),
  25884.  
  25885. (set_achievement_stat, ACHIEVEMENT_KNIGHTS_OF_THE_ROUND, ":companion_number", 1),
  25886.  
  25887. (assign, ":number_of_companions_hired", 0),
  25888. (try_for_range, ":cur_companion", 0, 16),
  25889. (get_achievement_stat, ":is_hired", ACHIEVEMENT_KNIGHTS_OF_THE_ROUND, ":cur_companion"),
  25890. (eq, ":is_hired", 1),
  25891. (val_add, ":number_of_companions_hired", 1),
  25892. (try_end),
  25893.  
  25894. (try_begin),
  25895. (ge, ":number_of_companions_hired", 6),
  25896. (unlock_achievement, ACHIEVEMENT_KNIGHTS_OF_THE_ROUND),
  25897. (try_end),
  25898. (try_end),
  25899. ]),
  25900.  
  25901.  
  25902. # script_setup_random_scene
  25903. # Input: arg1 = center_no, arg2 = mission_template_no
  25904. # Output: none
  25905. ("setup_random_scene",
  25906. [
  25907. (party_get_current_terrain, ":terrain_type", "p_main_party"),
  25908. (assign, ":scene_to_use", "scn_random_scene"),
  25909. (try_begin),
  25910. (eq, ":terrain_type", rt_steppe),
  25911. (assign, ":scene_to_use", "scn_random_scene_steppe"),
  25912. (else_try),
  25913. (eq, ":terrain_type", rt_plain),
  25914. (assign, ":scene_to_use", "scn_random_scene_plain"),
  25915. (else_try),
  25916. (eq, ":terrain_type", rt_snow),
  25917. (assign, ":scene_to_use", "scn_random_scene_snow"),
  25918. (else_try),
  25919. (eq, ":terrain_type", rt_desert),
  25920. (assign, ":scene_to_use", "scn_random_scene_desert"),
  25921. (else_try),
  25922. (eq, ":terrain_type", rt_steppe_forest),
  25923. (assign, ":scene_to_use", "scn_random_scene_steppe_forest"),
  25924. (else_try),
  25925. (eq, ":terrain_type", rt_forest),
  25926. (assign, ":scene_to_use", "scn_random_scene_plain_forest"),
  25927. (else_try),
  25928. (eq, ":terrain_type", rt_snow_forest),
  25929. (assign, ":scene_to_use", "scn_random_scene_snow_forest"),
  25930. (else_try),
  25931. (eq, ":terrain_type", rt_desert_forest),
  25932. (assign, ":scene_to_use", "scn_random_scene_desert_forest"),
  25933. (else_try),
  25934. (eq, ":terrain_type", rt_water),
  25935. (assign, ":scene_to_use", "scn_water"),
  25936. (else_try),
  25937. (eq, ":terrain_type", rt_bridge),
  25938. (assign, ":scene_to_use", "scn_random_scene_plain"),
  25939. (try_end),
  25940. (jump_to_scene,":scene_to_use"),
  25941. ]),
  25942.  
  25943. # script_enter_dungeon
  25944. # Input: arg1 = center_no, arg2 = mission_template_no
  25945. # Output: none
  25946. ("enter_dungeon",
  25947. [
  25948. (store_script_param_1, ":center_no"),
  25949. (store_script_param_2, ":mission_template_no"),
  25950.  
  25951. (set_jump_mission,":mission_template_no"),
  25952. #new added...
  25953. (mission_tpl_entry_set_override_flags, ":mission_template_no", 0, af_override_horse),
  25954. (try_begin),
  25955. (eq, "$sneaked_into_town", 1),
  25956. (mission_tpl_entry_set_override_flags, ":mission_template_no", 0, af_override_all),
  25957.  
  25958. (mission_tpl_entry_clear_override_items, ":mission_template_no", 0),
  25959. (mission_tpl_entry_add_override_item, ":mission_template_no", 0, "itm_pilgrim_hood"),
  25960. (mission_tpl_entry_add_override_item, ":mission_template_no", 0, "itm_pilgrim_disguise"),
  25961. (mission_tpl_entry_add_override_item, ":mission_template_no", 0, "itm_practice_staff"),
  25962. (mission_tpl_entry_add_override_item, ":mission_template_no", 0, "itm_throwing_daggers"),
  25963. (try_end),
  25964. #new added end
  25965.  
  25966. (party_get_slot, ":dungeon_scene", ":center_no", slot_town_prison),
  25967.  
  25968. (modify_visitors_at_site,":dungeon_scene"),
  25969. (reset_visitors),
  25970. (assign, ":cur_pos", 16),
  25971.  
  25972.  
  25973. (call_script, "script_get_heroes_attached_to_center_as_prisoner", ":center_no", "p_temp_party"),
  25974. (party_get_num_companion_stacks, ":num_stacks","p_temp_party"),
  25975. (try_for_range, ":i_stack", 0, ":num_stacks"),
  25976. (party_stack_get_troop_id, ":stack_troop","p_temp_party",":i_stack"),
  25977.  
  25978. (assign, ":prisoner_offered_parole", 0),
  25979. (try_begin),
  25980. (party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
  25981. (else_try),
  25982. (call_script, "script_cf_prisoner_offered_parole", ":stack_troop"),
  25983. (assign, ":prisoner_offered_parole", 1),
  25984. (else_try),
  25985. (assign, ":prisoner_offered_parole", 0),
  25986. (try_end),
  25987. (eq, ":prisoner_offered_parole", 0),
  25988.  
  25989. (lt, ":cur_pos", 32), # spawn up to entry point 32
  25990. (set_visitor, ":cur_pos", ":stack_troop"),
  25991. (val_add,":cur_pos", 1),
  25992. (try_end),
  25993.  
  25994. # (set_visitor, ":cur_pos", "trp_npc3"),
  25995. # (troop_set_slot, "trp_npc3", slot_troop_prisoner_of_party, "$g_encountered_party"),
  25996.  
  25997. (set_jump_entry, 0),
  25998. (jump_to_scene,":dungeon_scene"),
  25999. (scene_set_slot, ":dungeon_scene", slot_scene_visited, 1),
  26000. (change_screen_mission),
  26001. ]),
  26002.  
  26003. # script_enter_court
  26004. # Input: arg1 = center_no
  26005. # Output: none
  26006. #other search term: setup_court
  26007. ("enter_court",
  26008. [
  26009. (store_script_param_1, ":center_no"),
  26010.  
  26011. (assign, "$talk_context", tc_court_talk),
  26012.  
  26013. (set_jump_mission,"mt_visit_town_castle"),
  26014.  
  26015. (mission_tpl_entry_clear_override_items, "mt_visit_town_castle", 0),
  26016. #(mission_tpl_entry_set_override_flags, "mt_visit_town_castle", 0, af_override_all),
  26017.  
  26018. (party_get_slot, ":castle_scene", ":center_no", slot_town_castle),
  26019. (modify_visitors_at_site,":castle_scene"),
  26020. (reset_visitors),
  26021. #Adding guards
  26022. (store_faction_of_party, ":center_faction", ":center_no"),
  26023. (faction_get_slot, ":guard_troop", ":center_faction", slot_faction_guard_troop),
  26024. (try_begin),
  26025. (le, ":guard_troop", 0),
  26026. (assign, ":guard_troop", "trp_swadian_sergeant"),
  26027. (try_end),
  26028. (set_visitor, 6, ":guard_troop"),
  26029. (set_visitor, 7, ":guard_troop"),
  26030.  
  26031. (assign, ":cur_pos", 16),
  26032.  
  26033. (try_begin),
  26034. (troop_get_slot, ":player_spouse", "trp_player", slot_troop_spouse),
  26035. (gt, ":player_spouse", 0),
  26036. (troop_slot_eq, ":player_spouse", slot_troop_cur_center, ":center_no"),
  26037. (set_visitor, ":cur_pos", ":player_spouse"),
  26038. (val_add,":cur_pos", 1),
  26039. (else_try),
  26040. (troop_get_slot, ":player_betrothed", "trp_player", slot_troop_betrothed),
  26041. (gt, ":player_betrothed", 0),
  26042. (troop_slot_eq, ":player_betrothed", slot_troop_cur_center, ":center_no"),
  26043. (set_visitor, ":cur_pos", ":player_betrothed"),
  26044. (val_add,":cur_pos", 1),
  26045. (try_end),
  26046.  
  26047. (try_begin),
  26048. (eq, "$g_player_court", ":center_no"),
  26049. (gt, "$g_player_minister", 0),
  26050. (neg|troop_slot_eq, "trp_player", slot_troop_spouse, "$g_player_minister"),
  26051. (set_visitor, ":cur_pos", "$g_player_minister"),
  26052. (val_add,":cur_pos", 1),
  26053. (try_end),
  26054.  
  26055. #Lords wishing to pledge allegiance - inactive, but part of player faction
  26056. (try_begin),
  26057. (eq, "$g_player_court", ":center_no"),
  26058. (faction_slot_eq, ":center_faction", slot_faction_leader, "trp_player"),
  26059. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  26060. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  26061. (eq, ":active_npc_faction", "fac_player_supporters_faction"),
  26062. (troop_slot_eq, ":active_npc", slot_troop_occupation, slto_inactive),
  26063. (neg|troop_slot_ge, ":active_npc", slot_troop_prisoner_of_party, 0), #if he/she is not prisoner in any center.
  26064. (neq, ":active_npc", "$g_player_minister"),
  26065. (set_visitor, ":cur_pos", ":active_npc"),
  26066. (val_add,":cur_pos", 1),
  26067. (try_end),
  26068. (try_end),
  26069.  
  26070. (call_script, "script_get_heroes_attached_to_center", ":center_no", "p_temp_party"),
  26071. (party_get_num_companion_stacks, ":num_stacks","p_temp_party"),
  26072. (try_for_range, ":i_stack", 0, ":num_stacks"),
  26073. (party_stack_get_troop_id, ":stack_troop","p_temp_party",":i_stack"),
  26074. (lt, ":cur_pos", 32), # spawn up to entry point 32 - is it possible to add another 10 spots?
  26075. (set_visitor, ":cur_pos", ":stack_troop"),
  26076. (val_add,":cur_pos", 1),
  26077. (try_end),
  26078. (try_for_range, ":cur_troop", kingdom_ladies_begin, kingdom_ladies_end),
  26079. (neq, ":cur_troop", "trp_knight_1_1_wife"), #The one who should not appear in game
  26080. #(troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_lady),
  26081. (troop_slot_eq, ":cur_troop", slot_troop_cur_center, ":center_no"),
  26082.  
  26083. (assign, ":lady_meets_visitors", 0),
  26084. (try_begin),
  26085. (this_or_next|troop_slot_eq, "trp_player", slot_troop_spouse, ":cur_troop"), #player spouse goes in position of honor
  26086. (this_or_next|troop_slot_eq, "trp_player", slot_troop_betrothed, ":cur_troop"), #player spouse goes in position of honor
  26087. (this_or_next|troop_slot_eq, ":cur_troop", slot_troop_spouse, "trp_player"), #player spouse goes in position of honor
  26088. (troop_slot_eq, ":cur_troop", slot_troop_betrothed, "trp_player"),
  26089.  
  26090. (assign, ":lady_meets_visitors", 0), #She is already in the place of honor
  26091.  
  26092. (try_begin),
  26093. (eq, "$cheat_mode", 1),
  26094. (str_store_troop_name, s4, ":cur_troop"),
  26095. (display_message, "str_s4_is_present_at_the_center_and_in_place_of_honor"),
  26096. (try_end),
  26097.  
  26098. (else_try), #lady is troop
  26099. (store_faction_of_troop, ":lady_faction", ":cur_troop"),
  26100. (neq, ":lady_faction", ":center_faction"),
  26101.  
  26102. (assign, ":lady_meets_visitors", 1),
  26103.  
  26104.  
  26105. (try_begin),
  26106. (eq, "$cheat_mode", 1),
  26107. (str_store_troop_name, s4, ":cur_troop"),
  26108. (display_message, "str_s4_is_present_at_the_center_as_a_refugee"),
  26109. (try_end),
  26110.  
  26111. (else_try),
  26112. (troop_slot_ge, ":cur_troop", slot_troop_spouse, 1),
  26113.  
  26114. (try_begin),
  26115. #married ladies at a feast will not mingle - this is ahistorical, as married women and widows probably had much more freedom than unmarried ones, at least in the West, but the game needs to leave slots for them to show off their unmarried daughters
  26116. (faction_slot_eq, ":center_faction", slot_faction_ai_state, sfai_feast),
  26117. (faction_slot_eq, ":center_faction", slot_faction_ai_object, ":center_no"),
  26118. (assign, ":lady_meets_visitors", 0),
  26119.  
  26120. (try_begin),
  26121. (eq, "$cheat_mode", 1),
  26122. (str_store_troop_name, s4, ":cur_troop"),
  26123. (display_message, "str_s4_is_present_at_the_center_and_not_attending_the_feast"),
  26124. (try_end),
  26125. (else_try),
  26126. (assign, ":lady_meets_visitors", 1),
  26127.  
  26128. (try_begin),
  26129. (eq, "$cheat_mode", 1),
  26130. (str_store_troop_name, s4, ":cur_troop"),
  26131. (display_message, "str_s4_is_present_at_the_center_and_is_married"),
  26132. (try_end),
  26133. (try_end),
  26134.  
  26135. (else_try), #feast is in progress
  26136. (faction_slot_eq, ":center_faction", slot_faction_ai_state, sfai_feast),
  26137. (faction_slot_eq, ":center_faction", slot_faction_ai_object, ":center_no"),
  26138. (assign, ":lady_meets_visitors", 1),
  26139.  
  26140. (try_begin),
  26141. (eq, "$cheat_mode", 1),
  26142. (str_store_troop_name, s4, ":cur_troop"),
  26143. (display_message, "@{!}DEBUG -- {s4} is present at the center and is attending the feast"),
  26144. (try_end),
  26145.  
  26146. (else_try), #already met - awaits in private
  26147. (troop_slot_ge, ":cur_troop", slot_troop_met, 2),
  26148. (assign, ":lady_meets_visitors", 0),
  26149.  
  26150. (try_begin),
  26151. (eq, "$cheat_mode", 1),
  26152. (str_store_troop_name, s4, ":cur_troop"),
  26153. (display_message, "@{!}DEBUG -- {s4} is present at the center and is awaiting the player in private"),
  26154. (try_end),
  26155.  
  26156. (else_try),
  26157. (call_script, "script_get_kingdom_lady_social_determinants", ":cur_troop"),
  26158. (call_script, "script_npc_decision_checklist_male_guardian_assess_suitor", reg0, "trp_player"),
  26159. (gt, reg0, 0),
  26160. (assign, ":lady_meets_visitors", 1),
  26161.  
  26162. (try_begin),
  26163. (eq, "$cheat_mode", 1),
  26164. (str_store_troop_name, s4, ":cur_troop"),
  26165. (display_message, "@{!}DEBUG -- {s4} is_present_at_the_center_and_is_allowed_to_meet_the_player"),
  26166. (try_end),
  26167.  
  26168. (else_try),
  26169. (try_begin),
  26170. (eq, "$cheat_mode", 1),
  26171. (str_store_troop_name, s4, ":cur_troop"),
  26172. (display_message, "@{!}DEBUG -- {s4}is_present_at_the_center_and_is_not_allowed_to_meet_the_player"),
  26173. (try_end),
  26174.  
  26175. (try_end),
  26176.  
  26177. (eq, ":lady_meets_visitors", 1),
  26178.  
  26179. (lt, ":cur_pos", 32), # spawn up to entry point 32
  26180. (set_visitor, ":cur_pos", ":cur_troop"),
  26181. (val_add,":cur_pos", 1),
  26182. (try_end),
  26183.  
  26184. (set_jump_entry, 0),
  26185.  
  26186. (jump_to_scene,":castle_scene"),
  26187. (scene_set_slot, ":castle_scene", slot_scene_visited, 1),
  26188. (change_screen_mission),
  26189. ]),
  26190.  
  26191.  
  26192. ("setup_meet_lady",
  26193. [
  26194. (store_script_param_1, ":lady_no"),
  26195. (store_script_param_2, ":center_no"),
  26196.  
  26197. #(mission_tpl_entry_set_override_flags, "mt_visit_town_castle", 0, af_override_horse),
  26198. (troop_set_slot, ":lady_no", slot_lady_last_suitor, "trp_player"),
  26199.  
  26200. (set_jump_mission,"mt_visit_town_castle"),
  26201. (party_get_slot, ":castle_scene", ":center_no", slot_town_castle),
  26202. (modify_visitors_at_site,":castle_scene"),
  26203. (reset_visitors),
  26204.  
  26205. (troop_set_age, "trp_nurse_for_lady", 100),
  26206. (set_visitor, 7, "trp_nurse_for_lady"),
  26207.  
  26208. (assign, ":cur_pos", 16),
  26209. (set_visitor, ":cur_pos", ":lady_no"),
  26210.  
  26211. (assign, "$talk_context", tc_garden),
  26212.  
  26213. (jump_to_scene,":castle_scene"),
  26214. (scene_set_slot, ":castle_scene", slot_scene_visited, 1),
  26215. (change_screen_mission),
  26216. ]),
  26217.  
  26218. # script_find_high_ground_around_pos1
  26219. # Input: pos1 should hold center_position_no
  26220. # arg1: team_no
  26221. # arg2: search_radius (in meters)
  26222. # Output: pos52 contains highest ground within <search_radius> meters of team leader
  26223. # Destroys position registers: pos10, pos11, pos15
  26224. ("find_high_ground_around_pos1",
  26225. [
  26226. (store_script_param, ":team_no", 1),
  26227. (store_script_param, ":search_radius", 2),
  26228. (val_mul, ":search_radius", 100),
  26229. (get_scene_boundaries, pos10,pos11),
  26230. (team_get_leader, ":ai_leader", ":team_no"),
  26231. (agent_get_position, pos1, ":ai_leader"),
  26232. (set_fixed_point_multiplier, 100),
  26233. (position_get_x, ":o_x", pos1),
  26234. (position_get_y, ":o_y", pos1),
  26235. (store_sub, ":min_x", ":o_x", ":search_radius"),
  26236. (store_sub, ":min_y", ":o_y", ":search_radius"),
  26237. (store_add, ":max_x", ":o_x", ":search_radius"),
  26238. (store_add, ":max_y", ":o_y", ":search_radius"),
  26239. (position_get_x, ":scene_min_x", pos10),
  26240. (position_get_x, ":scene_max_x", pos11),
  26241. (position_get_y, ":scene_min_y", pos10),
  26242. (position_get_y, ":scene_max_y", pos11),
  26243. #do not find positions close to borders (20 m)
  26244. (val_add, ":scene_min_x", 2000),
  26245. (val_sub, ":scene_max_x", 2000),
  26246. (val_add, ":scene_min_y", 2000),
  26247. (val_sub, ":scene_max_y", 2000),
  26248. (val_max, ":min_x", ":scene_min_x"),
  26249. (val_max, ":min_y", ":scene_min_y"),
  26250. (val_min, ":max_x", ":scene_max_x"),
  26251. (val_min, ":max_y", ":scene_max_y"),
  26252.  
  26253. (store_div, ":min_x_meters", ":min_x", 100),
  26254. (store_div, ":min_y_meters", ":min_y", 100),
  26255. (store_div, ":max_x_meters", ":max_x", 100),
  26256. (store_div, ":max_y_meters", ":max_y", 100),
  26257.  
  26258. (assign, ":highest_pos_z", -10000),
  26259. (copy_position, pos52, pos1),
  26260. (init_position, pos15),
  26261.  
  26262. (try_for_range, ":i_x", ":min_x_meters", ":max_x_meters"),
  26263. (store_mul, ":i_x_cm", ":i_x", 100),
  26264. (try_for_range, ":i_y", ":min_y_meters", ":max_y_meters"),
  26265. (store_mul, ":i_y_cm", ":i_y", 100),
  26266. (position_set_x, pos15, ":i_x_cm"),
  26267. (position_set_y, pos15, ":i_y_cm"),
  26268. (position_set_z, pos15, 10000),
  26269. (position_set_z_to_ground_level, pos15),
  26270. (position_get_z, ":cur_pos_z", pos15),
  26271. (try_begin),
  26272. (gt, ":cur_pos_z", ":highest_pos_z"),
  26273. (copy_position, pos52, pos15),
  26274. (assign, ":highest_pos_z", ":cur_pos_z"),
  26275. (try_end),
  26276. (try_end),
  26277. (try_end),
  26278. ]),
  26279.  
  26280. # script_select_battle_tactic
  26281. # Input: none
  26282. # Output: none
  26283. ("select_battle_tactic",
  26284. [
  26285. (assign, "$ai_team_1_battle_tactic", 0),
  26286. (get_player_agent_no, ":player_agent"),
  26287. (agent_get_team, ":player_team", ":player_agent"),
  26288. (try_begin),
  26289. (num_active_teams_le, 2),
  26290. (try_begin),
  26291. (eq, ":player_team", 0),
  26292. (assign, "$ai_team_1", 1),
  26293. (else_try),
  26294. (assign, "$ai_team_1", 0),
  26295. (try_end),
  26296. (assign, "$ai_team_2", -1),
  26297. (else_try),
  26298. (try_begin),
  26299. (eq, ":player_team", 0),
  26300. (assign, "$ai_team_1", 1),
  26301. (else_try),
  26302. (assign, "$ai_team_1", 0),
  26303. (try_end),
  26304. (store_add, "$ai_team_2", ":player_team", 2),
  26305. (try_end),
  26306. (call_script, "script_select_battle_tactic_aux", "$ai_team_1", 0),
  26307. (assign, "$ai_team_1_battle_tactic", reg0),
  26308. (try_begin),
  26309. (ge, "$ai_team_2", 0),
  26310. (assign, ":defense_not_an_option", 0),
  26311. (try_begin),
  26312. (eq, "$ai_team_1_battle_tactic", btactic_hold),
  26313. (assign, ":defense_not_an_option", 1), #don't let two AI defend at the same time
  26314. (try_end),
  26315. (call_script, "script_select_battle_tactic_aux", "$ai_team_2", ":defense_not_an_option"),
  26316. (assign, "$ai_team_2_battle_tactic", reg0),
  26317. (try_end),
  26318. ]),
  26319.  
  26320. # script_select_battle_tactic_aux
  26321. # Input: team_no
  26322. # Output: battle_tactic
  26323. ("select_battle_tactic_aux",
  26324. [
  26325. (store_script_param, ":team_no", 1),
  26326. (store_script_param, ":defense_not_an_option", 2),
  26327. (assign, ":battle_tactic", 0),
  26328. (get_player_agent_no, ":player_agent"),
  26329. (agent_get_team, ":player_team", ":player_agent"),
  26330. (try_begin),
  26331. (eq, "$cant_leave_encounter", 1),
  26332. (teams_are_enemies, ":team_no", ":player_team"),
  26333. (assign, ":defense_not_an_option", 1),
  26334. (try_end),
  26335. (call_script, "script_team_get_class_percentages", ":team_no", 0),
  26336. # (assign, ":ai_perc_infantry", reg0),
  26337. (assign, ":ai_perc_archers", reg1),
  26338. (assign, ":ai_perc_cavalry", reg2),
  26339. (call_script, "script_team_get_class_percentages", ":team_no", 1),#enemies of the ai_team
  26340. # (assign, ":enemy_perc_infantry", reg0),
  26341. # (assign, ":enemy_perc_archers", reg1),
  26342. # (assign, ":enemy_perc_cavalry", reg2),
  26343.  
  26344. (store_random_in_range, ":rand", 0, 100),
  26345. (try_begin),
  26346. (assign, ":continue", 0),
  26347. (try_begin),
  26348. (teams_are_enemies, ":team_no", ":player_team"),
  26349. (party_slot_eq, "$g_enemy_party", slot_party_type, spt_kingdom_hero_party),
  26350. (assign, ":continue", 1),
  26351. (else_try),
  26352. (neg|teams_are_enemies, ":team_no", ":player_team"),
  26353. (gt, "$g_ally_party", 0),
  26354. (party_slot_eq, "$g_ally_party", slot_party_type, spt_kingdom_hero_party),
  26355. (assign, ":continue", 1),
  26356. (try_end),
  26357. #(this_or_next|lt, ":rand", 20),
  26358. (eq, ":continue", 1),
  26359. (store_faction_of_party, ":enemy_faction_no", "$g_enemy_party"),
  26360. (neq, ":enemy_faction_no", "fac_kingdom_3"), #don't let khergits use battle tactics
  26361. (try_begin),
  26362. (eq, ":defense_not_an_option", 0),
  26363. (gt, ":ai_perc_archers", 50),
  26364. (lt, ":ai_perc_cavalry", 35),
  26365. (assign, ":battle_tactic", btactic_hold),
  26366. (else_try),
  26367. (lt, ":rand", 80),
  26368. (assign, ":battle_tactic", btactic_follow_leader),
  26369. (try_end),
  26370. (try_end),
  26371. (assign, reg0, ":battle_tactic"),
  26372. ]),
  26373.  
  26374. # script_battle_calculate_initial_powers
  26375. # Input: none
  26376. # Output: none
  26377. #("battle_calculate_initial_powers",
  26378. # [
  26379. # (try_for_agents, ":agent_no"),
  26380. # (agent_is_human, ":agent_no"),
  26381. #
  26382. # (call_script, "script_calculate_team_powers", ":agent_no"),
  26383. # (assign, ":ally_power", reg0),
  26384. # (assign, ":enemy_power", reg1),
  26385. #
  26386. # (agent_set_slot, ":agent_no", slot_agent_initial_ally_power, ":ally_power"),
  26387. # (agent_set_slot, ":agent_no", slot_agent_initial_enemy_power, ":enemy_power"),
  26388. # (try_end),
  26389. #]),
  26390.  
  26391. # script_battle_tactic_init
  26392. # Input: none
  26393. # Output: none
  26394. ("battle_tactic_init",
  26395. [
  26396. (call_script, "script_battle_tactic_init_aux", "$ai_team_1", "$ai_team_1_battle_tactic"),
  26397. (try_begin),
  26398. (ge, "$ai_team_2", 0),
  26399. (call_script, "script_battle_tactic_init_aux", "$ai_team_2", "$ai_team_2_battle_tactic"),
  26400. (try_end),
  26401.  
  26402. (try_for_agents, ":cur_agent"),
  26403. (agent_set_slot, ":cur_agent", slot_agent_is_running_away, 0), #initially nobody is running away.
  26404. (try_end),
  26405. ]),
  26406.  
  26407. # script_battle_tactic_init_aux
  26408. # Input: team_no, battle_tactic
  26409. # Output: none
  26410. ("battle_tactic_init_aux",
  26411. [
  26412. (store_script_param, ":team_no", 1),
  26413. (store_script_param, ":battle_tactic", 2),
  26414. (team_get_leader, ":ai_leader", ":team_no"),
  26415. (try_begin),
  26416. (eq, ":battle_tactic", btactic_hold),
  26417. (agent_get_position, pos1, ":ai_leader"),
  26418. (call_script, "script_find_high_ground_around_pos1", ":team_no", 30),
  26419. (copy_position, pos1, pos52),
  26420. (call_script, "script_find_high_ground_around_pos1", ":team_no", 30), # call again just in case we are not at peak point.
  26421. (copy_position, pos1, pos52),
  26422. (call_script, "script_find_high_ground_around_pos1", ":team_no", 30), # call again just in case we are not at peak point.
  26423. (team_give_order, ":team_no", grc_everyone, mordr_hold),
  26424. (team_set_order_position, ":team_no", grc_everyone, pos52),
  26425. (team_give_order, ":team_no", grc_archers, mordr_advance),
  26426. (team_give_order, ":team_no", grc_archers, mordr_advance),
  26427. (else_try),
  26428. (eq, ":battle_tactic", btactic_follow_leader),
  26429. (team_get_leader, ":ai_leader", ":team_no"),
  26430. (ge, ":ai_leader", 0),
  26431. (agent_set_speed_limit, ":ai_leader", 8),
  26432. (agent_get_position, pos60, ":ai_leader"),
  26433. (team_give_order, ":team_no", grc_everyone, mordr_hold),
  26434. (team_set_order_position, ":team_no", grc_everyone, pos60),
  26435. (try_end),
  26436. ]),
  26437.  
  26438. # script_calculate_team_powers
  26439. # Input: none
  26440. # Output: ally_power, enemy_power
  26441. ("calculate_team_powers",
  26442. [
  26443. (store_script_param, ":agent_no", 1),
  26444.  
  26445. (try_begin),
  26446. (assign, ":agent_side", 0),
  26447. (agent_is_ally, ":agent_no"),
  26448. (assign, ":agent_side", 1),
  26449. (try_end),
  26450.  
  26451. (assign, ":ally_power", 0),
  26452. (assign, ":enemy_power", 0),
  26453.  
  26454. (try_for_agents, ":cur_agent"),
  26455. (agent_is_human, ":cur_agent"),
  26456. (agent_is_alive, ":cur_agent"),
  26457.  
  26458. (try_begin),
  26459. (assign, ":agent_side_cur", 0),
  26460. (agent_is_ally, ":cur_agent"),
  26461. (assign, ":agent_side_cur", 1),
  26462. (try_end),
  26463.  
  26464. (try_begin),
  26465. (agent_get_horse, ":agent_horse_id", ":cur_agent"),
  26466. (neq, ":agent_horse_id", -1),
  26467. (assign, ":agent_power", 2), #if this agent is horseman then his power effect is 2
  26468. (else_try),
  26469. (assign, ":agent_power", 1), #if this agent is walker then his power effect is 1
  26470. (try_end),
  26471.  
  26472. (try_begin),
  26473. (eq, ":agent_side", ":agent_side_cur"),
  26474. (val_add, ":ally_power", ":agent_power"),
  26475. (else_try),
  26476. (val_add, ":enemy_power", ":agent_power"),
  26477. (try_end),
  26478. (try_end),
  26479.  
  26480. (assign, reg0, ":ally_power"),
  26481. (assign, reg1, ":enemy_power"),
  26482. ]), #ozan
  26483.  
  26484. # script_apply_effect_of_other_people_on_courage_scores
  26485. # Input: none
  26486. # Output: none
  26487. ("apply_effect_of_other_people_on_courage_scores",
  26488. [
  26489. (get_player_agent_no, ":player_agent"),
  26490.  
  26491. (try_for_agents, ":centered_agent_no"),
  26492. (agent_is_human, ":centered_agent_no"),
  26493. (agent_is_alive, ":centered_agent_no"),
  26494. (neq, ":centered_agent_no", ":player_agent"),
  26495. (agent_get_position, pos0, ":centered_agent_no"),
  26496. (try_begin),
  26497. (agent_is_ally, ":centered_agent_no"),
  26498. (assign, ":is_centered_agent_ally", 1),
  26499. (else_try),
  26500. (assign, ":is_centered_agent_ally", 0),
  26501. (try_end),
  26502.  
  26503. (try_for_agents, ":agent_no"),
  26504. (agent_is_human, ":agent_no"),
  26505. (agent_is_alive, ":agent_no"),
  26506. (neq, ":centered_agent_no", ":agent_no"),
  26507.  
  26508. (try_begin),
  26509. (agent_is_ally, ":agent_no"),
  26510. (assign, ":is_agent_ally", 1),
  26511. (else_try),
  26512. (assign, ":is_agent_ally", 0),
  26513. (try_end),
  26514.  
  26515. (eq, ":is_centered_agent_ally", ":is_agent_ally"), #if centered agent and other agent is at same team then continue.
  26516. (agent_get_slot, ":agent_is_running_away_or_not", ":agent_no", slot_agent_is_running_away),
  26517.  
  26518. (try_begin),
  26519. (eq, ":agent_no", ":player_agent"),
  26520. (assign, ":agent_delta_courage_score", 6),
  26521. (else_try),
  26522. (agent_get_troop_id, ":troop_id", ":agent_no"),
  26523. (troop_is_hero, ":troop_id"),
  26524.  
  26525. #Hero Agent : if near agent (hero, agent_no) is not running away his positive effect on centered agent (centered_agent_no) fighting at his side is effected by his hit points.
  26526. (try_begin),
  26527. (neq, ":agent_is_running_away_or_not", 1), #if agent is not running away
  26528. (store_agent_hit_points, ":agent_hit_points", ":agent_no"),
  26529. (try_begin),
  26530. (eq, ":agent_hit_points", 100),
  26531. (assign, ":agent_delta_courage_score", 6),
  26532. (else_try),
  26533. (ge, ":agent_hit_points", 75),
  26534. (assign, ":agent_delta_courage_score", 5),
  26535. (else_try),
  26536. (ge, ":agent_hit_points", 60),
  26537. (assign, ":agent_delta_courage_score", 4),
  26538. (else_try),
  26539. (ge, ":agent_hit_points", 45),
  26540. (assign, ":agent_delta_courage_score", 3),
  26541. (else_try),
  26542. (ge, ":agent_hit_points", 30),
  26543. (assign, ":agent_delta_courage_score", 2),
  26544. (else_try),
  26545. (ge, ":agent_hit_points", 15),
  26546. (assign, ":agent_delta_courage_score", 1),
  26547. (end_try),
  26548. (else_try),
  26549. (assign, ":agent_delta_courage_score", 4),
  26550. (end_try),
  26551. (else_try),
  26552. #Normal Agent : if near agent (agent_no) is not running away his positive effect on centered agent (centered_agent_no) fighting at his side is effected by his hit points.
  26553. (try_begin),
  26554. (neq, ":agent_is_running_away_or_not", 1), # if agent is not running away
  26555. (store_agent_hit_points, ":agent_hit_points", ":agent_no"),
  26556. (try_begin),
  26557. (eq, ":agent_hit_points", 100),
  26558. (assign, ":agent_delta_courage_score", 4),
  26559. (else_try),
  26560. (ge, ":agent_hit_points", 75),
  26561. (assign, ":agent_delta_courage_score", 3),
  26562. (else_try),
  26563. (ge, ":agent_hit_points", 50),
  26564. (assign, ":agent_delta_courage_score", 2),
  26565. (else_try),
  26566. (ge, ":agent_hit_points", 25),
  26567. (assign, ":agent_delta_courage_score", 1),
  26568. (try_end),
  26569. (try_begin), # to make our warrior run away easier we decrease one, because they have player_agent (+6) advantage.
  26570. (agent_is_ally, ":agent_no"),
  26571. (val_sub, ":agent_delta_courage_score", 1),
  26572. (try_end),
  26573. (else_try),
  26574. (assign, ":agent_delta_courage_score", 2),
  26575. (end_try),
  26576. (try_end),
  26577.  
  26578. (try_begin),
  26579. (neq, ":agent_is_running_away_or_not", 1),
  26580. (val_mul, ":agent_delta_courage_score", 1),
  26581. (try_begin), # centered agent not running away cannot take positive courage score from one another agent not running away.
  26582. (agent_get_slot, ":agent_is_running_away_or_not", ":centered_agent_no", slot_agent_is_running_away),
  26583. (eq, ":agent_is_running_away_or_not", 0),
  26584. (val_mul, ":agent_delta_courage_score", 0),
  26585. (try_end),
  26586. (else_try),
  26587. (try_begin),
  26588. (agent_get_slot, ":agent_is_running_away_or_not", ":agent_no", slot_agent_is_running_away),
  26589. (eq, ":agent_is_running_away_or_not", 0),
  26590. (val_mul, ":agent_delta_courage_score", -2), # running away agent fears not running away agent more.
  26591. (else_try),
  26592. (val_mul, ":agent_delta_courage_score", -1),
  26593. (try_end),
  26594. (try_end),
  26595.  
  26596. (neq, ":agent_delta_courage_score", 0),
  26597.  
  26598. (agent_get_position, pos1, ":agent_no"),
  26599. (get_distance_between_positions, ":dist", pos0, pos1),
  26600.  
  26601. (try_begin),
  26602. (ge, ":agent_delta_courage_score", 0),
  26603. (try_begin),
  26604. (lt, ":dist", 2000), #0-20 meter
  26605. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26606. (val_mul, ":agent_delta_courage_score", 50),
  26607. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26608. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26609. (else_try),
  26610. (lt, ":dist", 4000), #21-40 meter
  26611. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26612. (val_mul, ":agent_delta_courage_score", 40),
  26613. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26614. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26615. (else_try),
  26616. (lt, ":dist", 7000), #41-70 meter
  26617. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26618. (val_mul, ":agent_delta_courage_score", 30),
  26619. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26620. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26621. (else_try),
  26622. (lt, ":dist", 11000), #71-110 meter
  26623. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26624. (val_mul, ":agent_delta_courage_score", 20),
  26625. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26626. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26627. (else_try),
  26628. (lt, ":dist", 16000), # 111-160 meter, assumed that eye can see agents friendly at most 160 meters far while fighting.
  26629. # this is more than below limit (108 meters) because we hear that allies come from further.
  26630. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26631. (val_mul, ":agent_delta_courage_score", 10),
  26632. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26633. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26634. (try_end),
  26635. (else_try), # negative effect of running agent on other ally agents are lower then positive effects above, to avoid starting
  26636. (try_begin), # run away of all agents at a moment. I want to see agents running away one by one during battle, not all together.
  26637. (lt, ":dist", 200), #1-2 meter, # this would create better game play.
  26638. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26639. (val_mul, ":agent_delta_courage_score", 15),
  26640. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26641. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26642. (else_try),
  26643. (lt, ":dist", 400), #3-4 meter,
  26644. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26645. (val_mul, ":agent_delta_courage_score", 13),
  26646. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26647. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26648. (else_try),
  26649. (lt, ":dist", 600), #5-6 meter
  26650. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26651. (val_mul, ":agent_delta_courage_score", 11),
  26652. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26653. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26654. (else_try),
  26655. (lt, ":dist", 800), #7-8 meter
  26656. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26657. (val_mul, ":agent_delta_courage_score", 9),
  26658. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26659. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26660. (else_try),
  26661. (lt, ":dist", 1200), #9-12 meters
  26662. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26663. (val_mul, ":agent_delta_courage_score", 7),
  26664. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26665. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26666. (else_try),
  26667. (lt, ":dist", 2400), #13-24 meters
  26668. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26669. (val_mul, ":agent_delta_courage_score", 5),
  26670. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26671. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26672. (else_try),
  26673. (lt, ":dist", 4800), #25-48 meters
  26674. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26675. (val_mul, ":agent_delta_courage_score", 3),
  26676. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26677. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26678. (else_try),
  26679. (lt, ":dist", 9600), #49-98 meters, assumed that eye can see agents running away at most 98 meters far while fighting.
  26680. (agent_get_slot, ":agent_courage_score", ":centered_agent_no", slot_agent_courage_score),
  26681. (val_mul, ":agent_delta_courage_score", 1),
  26682. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26683. (agent_set_slot, ":centered_agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26684. (try_end),
  26685. (try_end),
  26686. (try_end),
  26687. (try_end),
  26688. ]), #ozan
  26689.  
  26690.  
  26691. # script_apply_death_effect_on_courage_scores
  26692. # Input: dead agent id, killer agent id
  26693. # Output: none
  26694. ("apply_death_effect_on_courage_scores",
  26695. [
  26696. (store_script_param, ":dead_agent_no", 1),
  26697. (store_script_param, ":killer_agent_no", 2),
  26698.  
  26699. (try_begin),
  26700. (agent_is_human, ":dead_agent_no"),
  26701.  
  26702. (try_begin),
  26703. (agent_is_ally, ":dead_agent_no"),
  26704. (assign, ":is_dead_agent_ally", 1),
  26705. (else_try),
  26706. (assign, ":is_dead_agent_ally", 0),
  26707. (try_end),
  26708.  
  26709. (agent_get_position, pos0, ":dead_agent_no"),
  26710. (assign, ":number_of_near_allies_to_dead_agent", 0),
  26711.  
  26712. (try_for_agents, ":agent_no"),
  26713. (agent_is_human, ":agent_no"),
  26714. (agent_is_alive, ":agent_no"),
  26715.  
  26716. (agent_get_position, pos1, ":agent_no"),
  26717. (get_distance_between_positions, ":dist", pos0, pos1),
  26718.  
  26719. (le, ":dist", 1300), # to count number of allies within 13 meters to dead agent.
  26720.  
  26721. (try_begin),
  26722. (agent_is_ally, ":agent_no"),
  26723. (assign, ":is_agent_ally", 1),
  26724. (else_try),
  26725. (assign, ":is_agent_ally", 0),
  26726. (try_end),
  26727.  
  26728. (try_begin),
  26729. (eq, ":is_dead_agent_ally", ":is_agent_ally"),
  26730. (val_add, ":number_of_near_allies_to_dead_agent", 1), # (number_of_near_allies_to_dead_agent) is counted because if there are
  26731. (try_end), # many allies of dead agent around him, negative courage effect become less.
  26732. (try_end),
  26733.  
  26734. (try_for_agents, ":agent_no"),
  26735. (agent_is_human, ":agent_no"),
  26736. (agent_is_alive, ":agent_no"),
  26737.  
  26738. (try_begin),
  26739. (agent_is_ally, ":agent_no"),
  26740. (assign, ":is_agent_ally", 1),
  26741. (else_try),
  26742. (assign, ":is_agent_ally", 0),
  26743. (try_end),
  26744.  
  26745. (try_begin), # each agent is effected by a killed agent positively if he is rival or negatively if he is ally.
  26746. (neq, ":is_dead_agent_ally", ":is_agent_ally"),
  26747. (assign, ":agent_delta_courage_score", 10), # if killed agent is agent of rival side, add points to fear score
  26748. (else_try),
  26749. (assign, ":agent_delta_courage_score", -15), # if killed agent is agent of our side, decrease points from fear score
  26750. (val_add, ":agent_delta_courage_score", ":number_of_near_allies_to_dead_agent"), # ":number_of_near_allies_to_dead_agent" is added because if there are many
  26751. (try_begin), # allies of dead agent around him, negative courage effect become less.
  26752. (gt, ":agent_delta_courage_score", -5),
  26753. (assign, ":agent_delta_courage_score", -5),
  26754. (try_end),
  26755.  
  26756. (agent_get_slot, ":dead_agent_was_running_away_or_not", ":dead_agent_no", slot_agent_is_running_away), #look dead agent was running away or not.
  26757. (try_begin),
  26758. (eq, ":dead_agent_was_running_away_or_not", 1),
  26759. (val_div, ":agent_delta_courage_score", 3), # if killed agent was running away his negative effect on ally courage scores become very less. This added because
  26760. (try_end), # running away agents are easily killed and courage scores become very in a running away group after a time, and
  26761. (try_end), # they do not stop running away althought they pass near a new powerfull ally party.
  26762. (agent_get_position, pos1, ":agent_no"),
  26763. (get_distance_between_positions, ":dist", pos0, pos1),
  26764.  
  26765. (try_begin),
  26766. (eq, ":killer_agent_no", ":agent_no"),
  26767. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26768. (val_mul, ":agent_delta_courage_score", 20),
  26769. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26770. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26771. (try_end),
  26772.  
  26773. (try_begin),
  26774. (lt, ":dist", 100), #0-1 meters
  26775. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26776. (val_mul, ":agent_delta_courage_score", 150),
  26777. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26778. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26779. (else_try),
  26780. (lt, ":dist", 200), #2 meters
  26781. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26782. (val_mul, ":agent_delta_courage_score", 120),
  26783. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26784. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26785. (else_try),
  26786. (lt, ":dist", 300), #3 meter
  26787. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26788. (val_mul, ":agent_delta_courage_score", 100),
  26789. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26790. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26791. (else_try),
  26792. (lt, ":dist", 400), #4 meters
  26793. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26794. (val_mul, ":agent_delta_courage_score", 90),
  26795. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26796. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26797. (else_try),
  26798. (lt, ":dist", 600), #5-6 meters
  26799. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26800. (val_mul, ":agent_delta_courage_score", 80),
  26801. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26802. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26803. (else_try),
  26804. (lt, ":dist", 800), #7-8 meters
  26805. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26806. (val_mul, ":agent_delta_courage_score", 70),
  26807. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26808. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26809. (else_try),
  26810. (lt, ":dist", 1000), #9-10 meters
  26811. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26812. (val_mul, ":agent_delta_courage_score", 60),
  26813. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26814. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26815. (else_try),
  26816. (lt, ":dist", 1500), #11-15 meter
  26817. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26818. (val_mul, ":agent_delta_courage_score", 50),
  26819. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26820. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26821. (else_try),
  26822. (lt, ":dist", 2500), #16-25 meters
  26823. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26824. (val_mul, ":agent_delta_courage_score", 40),
  26825. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26826. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26827. (else_try),
  26828. (lt, ":dist", 4000), #26-40 meters
  26829. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26830. (val_mul, ":agent_delta_courage_score", 30),
  26831. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26832. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26833. (else_try),
  26834. (lt, ":dist", 6500), #41-65 meters
  26835. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26836. (val_mul, ":agent_delta_courage_score", 20),
  26837. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26838. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26839. (else_try),
  26840. (lt, ":dist", 10000), #61-100 meters
  26841. (agent_get_slot, ":agent_courage_score", ":agent_no", slot_agent_courage_score),
  26842. (val_mul, ":agent_delta_courage_score", 10),
  26843. (val_add, ":agent_courage_score", ":agent_delta_courage_score"),
  26844. (agent_set_slot, ":agent_no", slot_agent_courage_score, ":agent_courage_score"),
  26845. (try_end),
  26846. (try_end),
  26847. (try_end),
  26848. ]), #ozan
  26849.  
  26850. # script_decide_run_away_or_not
  26851. # Input: none
  26852. # Output: none
  26853. ("decide_run_away_or_not",
  26854. [
  26855. (store_script_param, ":cur_agent", 1),
  26856. (store_script_param, ":mission_time", 2),
  26857.  
  26858. (assign, ":force_retreat", 0),
  26859. (agent_get_team, ":agent_team", ":cur_agent"),
  26860. (agent_get_division, ":agent_division", ":cur_agent"),
  26861. (try_begin),
  26862. (lt, ":agent_division", 9), #static classes
  26863. (team_get_movement_order, ":agent_movement_order", ":agent_team", ":agent_division"),
  26864. (eq, ":agent_movement_order", mordr_retreat),
  26865. (assign, ":force_retreat", 1),
  26866. (try_end),
  26867.  
  26868. (agent_get_slot, ":is_cur_agent_running_away", ":cur_agent", slot_agent_is_running_away),
  26869. (try_begin),
  26870. (eq, ":is_cur_agent_running_away", 0),
  26871. (try_begin),
  26872. (eq, ":force_retreat", 1),
  26873. (agent_start_running_away, ":cur_agent"),
  26874. (agent_set_slot, ":cur_agent", slot_agent_is_running_away, 1),
  26875. (else_try),
  26876. (ge, ":mission_time", 45), #first 45 seconds anyone does not run away whatever happens.
  26877. (agent_get_slot, ":agent_courage_score", ":cur_agent", slot_agent_courage_score),
  26878. (store_agent_hit_points, ":agent_hit_points", ":cur_agent"),
  26879. (val_mul, ":agent_hit_points", 4),
  26880. (try_begin),
  26881. (agent_is_ally, ":cur_agent"),
  26882. (val_sub, ":agent_hit_points", 100), #ally agents will be more tend to run away, to make game more funnier/harder
  26883. (try_end),
  26884. (val_mul, ":agent_hit_points", 10),
  26885. (store_sub, ":start_running_away_courage_score_limit", 3500, ":agent_hit_points"),
  26886. (lt, ":agent_courage_score", ":start_running_away_courage_score_limit"), #if (courage score < 3500 - (agent hit points * 40)) and (agent is not running away) then start running away, average hit points : 50, average running away limit = 1500
  26887.  
  26888. (agent_get_troop_id, ":troop_id", ":cur_agent"), #for now do not let heroes to run away from battle
  26889. (neg|troop_is_hero, ":troop_id"),
  26890.  
  26891. (agent_start_running_away, ":cur_agent"),
  26892. (agent_set_slot, ":cur_agent", slot_agent_is_running_away, 1),
  26893. (try_end),
  26894. (else_try),
  26895. (neq, ":force_retreat", 1),
  26896. (agent_get_slot, ":agent_courage_score", ":cur_agent", slot_agent_courage_score),
  26897. (store_agent_hit_points, ":agent_hit_points", ":cur_agent"),
  26898. (val_mul, ":agent_hit_points", 4),
  26899. (try_begin),
  26900. (agent_is_ally, ":cur_agent"),
  26901. (val_sub, ":agent_hit_points", 100), #ally agents will be more tend to run away, to make game more funnier/harder
  26902. (try_end),
  26903. (val_mul, ":agent_hit_points", 10),
  26904. (store_sub, ":stop_running_away_courage_score_limit", 3700, ":agent_hit_points"),
  26905. (ge, ":agent_courage_score", ":stop_running_away_courage_score_limit"), #if (courage score > 3700 - agent hit points) and (agent is running away) then stop running away, average hit points : 50, average running away limit = 1700
  26906. (agent_stop_running_away, ":cur_agent"),
  26907. (agent_set_slot, ":cur_agent", slot_agent_is_running_away, 0),
  26908. (try_end),
  26909. ]), #ozan
  26910.  
  26911. # script_battle_tactic_apply
  26912. # Input: none
  26913. # Output: none
  26914. ("battle_tactic_apply",
  26915. [
  26916. (call_script, "script_battle_tactic_apply_aux", "$ai_team_1", "$ai_team_1_battle_tactic"),
  26917. (assign, "$ai_team_1_battle_tactic", reg0),
  26918. (try_begin),
  26919. (ge, "$ai_team_2", 0),
  26920. (call_script, "script_battle_tactic_apply_aux", "$ai_team_2", "$ai_team_2_battle_tactic"),
  26921. (assign, "$ai_team_2_battle_tactic", reg0),
  26922. (try_end),
  26923. ]),
  26924.  
  26925. # script_battle_tactic_apply_aux
  26926. # Input: team_no, battle_tactic
  26927. # Output: battle_tactic
  26928. ("battle_tactic_apply_aux",
  26929. [
  26930. (store_script_param, ":team_no", 1),
  26931. (store_script_param, ":battle_tactic", 2),
  26932. (store_mission_timer_a, ":mission_time"),
  26933. (try_begin),
  26934. (eq, ":battle_tactic", btactic_hold),
  26935. (copy_position, pos1, pos52),
  26936. (call_script, "script_get_closest3_distance_of_enemies_at_pos1", ":team_no", 1),
  26937. (assign, ":avg_dist", reg0),
  26938. (assign, ":min_dist", reg1),
  26939. (try_begin),
  26940. (this_or_next|lt, ":min_dist", 1000),
  26941. (lt, ":avg_dist", 4000),
  26942. (assign, ":battle_tactic", 0),
  26943. (team_give_order, ":team_no", grc_everyone, mordr_charge),
  26944. (try_end),
  26945. (else_try),
  26946. (eq, ":battle_tactic", btactic_follow_leader),
  26947. (team_get_leader, ":ai_leader", ":team_no"),
  26948. (try_begin),
  26949. (ge, ":ai_leader", 0),
  26950. (agent_is_alive, ":ai_leader"),
  26951. (agent_set_speed_limit, ":ai_leader", 9),
  26952. (call_script, "script_team_get_average_position_of_enemies", ":team_no"),
  26953. (copy_position, pos60, pos0),
  26954. (agent_get_position, pos61, ":ai_leader"),
  26955. (position_transform_position_to_local, pos62, pos61, pos60), #pos62 = vector to enemy w.r.t leader
  26956. (position_normalize_origin, ":distance_to_enemy", pos62),
  26957. (convert_from_fixed_point, ":distance_to_enemy"),
  26958. (assign, reg17, ":distance_to_enemy"),
  26959. (position_get_x, ":dir_x", pos62),
  26960. (position_get_y, ":dir_y", pos62),
  26961. (val_mul, ":dir_x", 23),
  26962. (val_mul, ":dir_y", 23), #move 23 meters
  26963. (position_set_x, pos62, ":dir_x"),
  26964. (position_set_y, pos62, ":dir_y"),
  26965.  
  26966. (position_transform_position_to_parent, pos63, pos61, pos62), #pos63 is 23m away from leader in the direction of the enemy.
  26967. (position_set_z_to_ground_level, pos63),
  26968.  
  26969. (team_give_order, ":team_no", grc_everyone, mordr_hold),
  26970. (team_set_order_position, ":team_no", grc_everyone, pos63),
  26971. (agent_get_position, pos1, ":ai_leader"),
  26972. (try_begin),
  26973. (lt, ":distance_to_enemy", 50),
  26974. (ge, ":mission_time", 30),
  26975. (assign, ":battle_tactic", 0),
  26976. (team_give_order, ":team_no", grc_everyone, mordr_charge),
  26977. (agent_set_speed_limit, ":ai_leader", 60),
  26978. (try_end),
  26979. (else_try),
  26980. (assign, ":battle_tactic", 0),
  26981. (team_give_order, ":team_no", grc_everyone, mordr_charge),
  26982. (try_end),
  26983. (try_end),
  26984.  
  26985. (try_begin), # charge everyone after a while
  26986. (neq, ":battle_tactic", 0),
  26987. (ge, ":mission_time", 300),
  26988. (assign, ":battle_tactic", 0),
  26989. (team_give_order, ":team_no", grc_everyone, mordr_charge),
  26990. (team_get_leader, ":ai_leader", ":team_no"),
  26991. (agent_set_speed_limit, ":ai_leader", 60),
  26992. (try_end),
  26993. (assign, reg0, ":battle_tactic"),
  26994. ]),
  26995.  
  26996.  
  26997. ## # script_siege_defender_tactic_apply
  26998. ## # Input: none
  26999. ## # Output: none
  27000. ## ("siege_defender_tactic_apply",
  27001. ## [
  27002. ## (try_begin),
  27003. ## (eq, "$defender_team", 1),
  27004. ## (ge, "$belfry_positioned", 2),
  27005. ##
  27006. ## (assign, ":enemy_too_weak", 0),
  27007. ## (try_begin),
  27008. ## (ge, "$attacker_reinforcement_stage", 2),
  27009. ## (call_script, "script_calculate_team_strength", "$defender_team"),
  27010. ## (assign, ":defender_strength", reg0),
  27011. ## (call_script, "script_calculate_team_strength", "$attacker_team"),
  27012. ## (assign, ":attacker_strength", reg0),
  27013. ## (store_mul, ":attacker_strength_multiplied", ":attacker_strength", 2),
  27014. ## (ge, ":defender_strength", ":attacker_strength_multiplied"),
  27015. ## (assign, ":enemy_too_weak", 1),
  27016. ## (try_end),
  27017. ##
  27018. ## (try_begin),
  27019. ## (eq, ":enemy_too_weak", 1),
  27020. ## (neq, "$ai_battle_tactic", btactic_charge),
  27021. ## (assign, "$ai_battle_tactic", btactic_charge),
  27022. ## (team_give_order, "$defender_team", grc_infantry, mordr_charge),
  27023. ## (else_try),
  27024. ## (neq, "$ai_battle_tactic", btactic_charge),
  27025. ## (neq, "$ai_battle_tactic", btactic_hold),
  27026. ## (assign, "$ai_battle_tactic", btactic_hold),
  27027. ## (team_give_order, "$defender_team", grc_infantry, mordr_hold),
  27028. ## (team_give_order, "$defender_team", grc_heroes, mordr_hold),
  27029. ## (entry_point_get_position,pos1,10),
  27030. ## (team_set_order_position, "$defender_team", grc_infantry, pos1),
  27031. ## (team_set_order_position, "$defender_team", grc_heroes, pos1),
  27032. ## (try_end),
  27033. ## (try_end),
  27034. ## ]),
  27035.  
  27036.  
  27037. # script_team_get_class_percentages
  27038. # Input: arg1: team_no, arg2: try for team's enemies
  27039. # Output: reg0: percentage infantry, reg1: percentage archers, reg2: percentage cavalry
  27040. ("team_get_class_percentages",
  27041. [
  27042. (assign, ":num_infantry", 0),
  27043. (assign, ":num_archers", 0),
  27044. (assign, ":num_cavalry", 0),
  27045. (assign, ":num_total", 0),
  27046. (store_script_param, ":team_no", 1),
  27047. (store_script_param, ":negate", 2),
  27048. (try_for_agents,":cur_agent"),
  27049. (agent_is_alive, ":cur_agent"),
  27050. (agent_is_human, ":cur_agent"),
  27051. (agent_get_team, ":agent_team", ":cur_agent"),
  27052. (assign, ":continue", 0),
  27053. (try_begin),
  27054. (eq, ":negate", 1),
  27055. (teams_are_enemies, ":agent_team", ":team_no"),
  27056. (assign, ":continue", 1),
  27057. (else_try),
  27058. (eq, ":agent_team", ":team_no"),
  27059. (assign, ":continue", 1),
  27060. (try_end),
  27061. (eq, ":continue", 1),
  27062. (val_add, ":num_total", 1),
  27063. (agent_get_class, ":agent_class", ":cur_agent"),
  27064. (try_begin),
  27065. (eq, ":agent_class", grc_infantry),
  27066. (val_add, ":num_infantry", 1),
  27067. (else_try),
  27068. (eq, ":agent_class", grc_archers),
  27069. (val_add, ":num_archers", 1),
  27070. (else_try),
  27071. (eq, ":agent_class", grc_cavalry),
  27072. (val_add, ":num_cavalry", 1),
  27073. (try_end),
  27074. (try_end),
  27075. (try_begin),
  27076. (eq, ":num_total", 0),
  27077. (assign, ":num_total", 1),
  27078. (try_end),
  27079. (store_mul, ":perc_infantry",":num_infantry",100),
  27080. (val_div, ":perc_infantry",":num_total"),
  27081. (store_mul, ":perc_archers",":num_archers",100),
  27082. (val_div, ":perc_archers",":num_total"),
  27083. (store_mul, ":perc_cavalry",":num_cavalry",100),
  27084. (val_div, ":perc_cavalry",":num_total"),
  27085. (assign, reg0, ":perc_infantry"),
  27086. (assign, reg1, ":perc_archers"),
  27087. (assign, reg2, ":perc_cavalry"),
  27088. ]),
  27089.  
  27090. # script_get_closest3_distance_of_enemies_at_pos1
  27091. # Input: arg1: team_no, pos1
  27092. # Output: reg0: distance in cms.
  27093. ("get_closest3_distance_of_enemies_at_pos1",
  27094. [
  27095. (assign, ":min_distance_1", 100000),
  27096. (assign, ":min_distance_2", 100000),
  27097. (assign, ":min_distance_3", 100000),
  27098.  
  27099. (store_script_param, ":team_no", 1),
  27100. (try_for_agents,":cur_agent"),
  27101. (agent_is_alive, ":cur_agent"),
  27102. (agent_is_human, ":cur_agent"),
  27103. (agent_get_team, ":agent_team", ":cur_agent"),
  27104. (teams_are_enemies, ":agent_team", ":team_no"),
  27105.  
  27106. (agent_get_position, pos2, ":cur_agent"),
  27107. (get_distance_between_positions,":cur_dist",pos2,pos1),
  27108. (try_begin),
  27109. (lt, ":cur_dist", ":min_distance_1"),
  27110. (assign, ":min_distance_3", ":min_distance_2"),
  27111. (assign, ":min_distance_2", ":min_distance_1"),
  27112. (assign, ":min_distance_1", ":cur_dist"),
  27113. (else_try),
  27114. (lt, ":cur_dist", ":min_distance_2"),
  27115. (assign, ":min_distance_3", ":min_distance_2"),
  27116. (assign, ":min_distance_2", ":cur_dist"),
  27117. (else_try),
  27118. (lt, ":cur_dist", ":min_distance_3"),
  27119. (assign, ":min_distance_3", ":cur_dist"),
  27120. (try_end),
  27121. (try_end),
  27122.  
  27123. (assign, ":total_distance", 0),
  27124. (assign, ":total_count", 0),
  27125. (try_begin),
  27126. (lt, ":min_distance_1", 100000),
  27127. (val_add, ":total_distance", ":min_distance_1"),
  27128. (val_add, ":total_count", 1),
  27129. (try_end),
  27130. (try_begin),
  27131. (lt, ":min_distance_2", 100000),
  27132. (val_add, ":total_distance", ":min_distance_2"),
  27133. (val_add, ":total_count", 1),
  27134. (try_end),
  27135. (try_begin),
  27136. (lt, ":min_distance_3", 100000),
  27137. (val_add, ":total_distance", ":min_distance_3"),
  27138. (val_add, ":total_count", 1),
  27139. (try_end),
  27140. (assign, ":average_distance", 100000),
  27141. (try_begin),
  27142. (gt, ":total_count", 0),
  27143. (store_div, ":average_distance", ":total_distance", ":total_count"),
  27144. (try_end),
  27145. (assign, reg0, ":average_distance"),
  27146. (assign, reg1, ":min_distance_1"),
  27147. (assign, reg2, ":min_distance_2"),
  27148. (assign, reg3, ":min_distance_3"),
  27149. ]),
  27150.  
  27151. # script_team_get_average_position_of_enemies
  27152. # Input: arg1: team_no,
  27153. # Output: pos0: average position.
  27154. ("team_get_average_position_of_enemies",
  27155. [
  27156. (store_script_param_1, ":team_no"),
  27157. (init_position, pos0),
  27158. (assign, ":num_enemies", 0),
  27159. (assign, ":accum_x", 0),
  27160. (assign, ":accum_y", 0),
  27161. (assign, ":accum_z", 0),
  27162. (try_for_agents,":enemy_agent"),
  27163. (agent_is_alive, ":enemy_agent"),
  27164. (agent_is_human, ":enemy_agent"),
  27165. (agent_get_team, ":enemy_team", ":enemy_agent"),
  27166. (teams_are_enemies, ":team_no", ":enemy_team"),
  27167.  
  27168. (agent_get_position, pos62, ":enemy_agent"),
  27169.  
  27170. (position_get_x, ":x", pos62),
  27171. (position_get_y, ":y", pos62),
  27172. (position_get_z, ":z", pos62),
  27173.  
  27174. (val_add, ":accum_x", ":x"),
  27175. (val_add, ":accum_y", ":y"),
  27176. (val_add, ":accum_z", ":z"),
  27177. (val_add, ":num_enemies", 1),
  27178. (try_end),
  27179.  
  27180. (try_begin), #to avoid division by zeros at below division part.
  27181. (le, ":num_enemies", 0),
  27182. (assign, ":num_enemies", 1),
  27183. (try_end),
  27184.  
  27185. (store_div, ":average_x", ":accum_x", ":num_enemies"),
  27186. (store_div, ":average_y", ":accum_y", ":num_enemies"),
  27187. (store_div, ":average_z", ":accum_z", ":num_enemies"),
  27188.  
  27189. (position_set_x, pos0, ":average_x"),
  27190. (position_set_y, pos0, ":average_y"),
  27191. (position_set_z, pos0, ":average_z"),
  27192.  
  27193. (assign, reg0, ":num_enemies"),
  27194. ]),
  27195.  
  27196.  
  27197. # script_search_troop_prisoner_of_party
  27198. # Input: arg1 = troop_no
  27199. # Output: reg0 = party_no (-1 if troop is not a prisoner.)
  27200. ("search_troop_prisoner_of_party",
  27201. [
  27202. (store_script_param_1, ":troop_no"),
  27203. (assign, ":prisoner_of", -1),
  27204. (try_for_parties, ":party_no"),
  27205. (eq, ":prisoner_of", -1),
  27206. (this_or_next|eq, ":party_no", "p_main_party"),
  27207. (ge, ":party_no", centers_begin),
  27208. (party_count_prisoners_of_type, ":troop_found", ":party_no", ":troop_no"),
  27209. (gt, ":troop_found", 0),
  27210. (assign, ":prisoner_of", ":party_no"),
  27211. (try_end),
  27212. (assign, reg0, ":prisoner_of"),
  27213. ]),
  27214.  
  27215.  
  27216. ## # script_clear_last_quest
  27217. ## # Input: arg1 = troop_no
  27218. ## # Output: none
  27219. ## ("clear_last_quest",
  27220. ## [
  27221. ## (store_script_param_1, ":troop_no"),
  27222. ##
  27223. ## (troop_set_slot, ":troop_no",slot_troop_last_quest, 0),
  27224. ## (troop_set_slot, ":troop_no",slot_troop_last_quest_betrayed, 0)
  27225. ## ]),
  27226.  
  27227.  
  27228.  
  27229. # script_change_debt_to_troop
  27230. # Input: arg1 = troop_no, arg2 = new debt amount
  27231. # Output: none
  27232. ("change_debt_to_troop",
  27233. [
  27234. (store_script_param_1, ":troop_no"),
  27235. (store_script_param_2, ":new_debt"),
  27236.  
  27237. (troop_get_slot, ":cur_debt", ":troop_no", slot_troop_player_debt),
  27238. (assign, reg1, ":cur_debt"),
  27239. (val_add, ":cur_debt", ":new_debt"),
  27240. (assign, reg2, ":cur_debt"),
  27241. (troop_set_slot, ":troop_no", slot_troop_player_debt, ":cur_debt"),
  27242. (str_store_troop_name_link, s1, ":troop_no"),
  27243. (display_message, "@You now owe {reg2} denars to {s1}."),
  27244. ]),
  27245.  
  27246.  
  27247.  
  27248.  
  27249. # script_abort_quest
  27250. # Input: arg1 = quest_no, arg2 = apply relation penalty
  27251. # Output: none
  27252. ("abort_quest",
  27253. [
  27254. (store_script_param_1, ":quest_no"),
  27255. (store_script_param_2, ":abort_type"), #0=aborted by event, 1=abort by talking 2=abort by expire
  27256.  
  27257. (assign, ":quest_return_penalty", -1),
  27258. (assign, ":quest_expire_penalty", -2),
  27259.  
  27260. # (quest_get_slot, ":quest_object_troop", ":quest_no", slot_quest_object_troop),
  27261. (try_begin),
  27262. (this_or_next|eq, ":quest_no", "qst_deliver_message"),
  27263. (eq, ":quest_no", "qst_deliver_message_to_enemy_lord"),
  27264. (assign, ":quest_return_penalty", -2),
  27265. (assign, ":quest_expire_penalty", -3),
  27266. (else_try),
  27267. (eq, ":quest_no", "qst_kidnapped_girl"),
  27268. (party_remove_members, "p_main_party", "trp_kidnapped_girl", 1),
  27269. (quest_get_slot, ":quest_target_party", "qst_kidnapped_girl", slot_quest_target_party),
  27270. (try_begin),
  27271. (party_is_active, ":quest_target_party"),
  27272. (remove_party, ":quest_target_party"),
  27273. (try_end),
  27274. (else_try),
  27275. (eq, ":quest_no", "qst_escort_lady"),
  27276. (quest_get_slot, ":quest_object_troop", "qst_escort_lady", slot_quest_object_troop),
  27277. (party_remove_members, "p_main_party", ":quest_object_troop", 1),
  27278. (assign, ":quest_return_penalty", -2),
  27279. (assign, ":quest_expire_penalty", -3),
  27280. ## (else_try),
  27281. ## (eq, ":quest_no", "qst_rescue_lady_under_siege"),
  27282. ## (party_remove_members, "p_main_party", ":quest_object_troop", 1),
  27283. ## (else_try),
  27284. ## (eq, ":quest_no", "qst_deliver_message_to_lover"),
  27285. ## (else_try),
  27286. ## (eq, ":quest_no", "qst_bring_prisoners_to_enemy"),
  27287. ## (try_begin),
  27288. ## (check_quest_succeeded, ":quest_no"),
  27289. ## (quest_get_slot, ":quest_target_amount", ":quest_no", slot_quest_target_amount),
  27290. ## (quest_get_slot, ":quest_object_troop", ":quest_no", slot_quest_object_troop),
  27291. ## (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  27292. ## (call_script, "script_game_get_join_cost", ":quest_object_troop"),
  27293. ## (assign, ":reward", reg0),
  27294. ## (val_mul, ":reward", ":quest_target_amount"),
  27295. ## (val_div, ":reward", 2),
  27296. ## (else_try),
  27297. ## (quest_get_slot, ":reward", ":quest_no", slot_quest_target_amount),
  27298. ## (try_end),
  27299. ## (call_script, "script_change_debt_to_troop", ":quest_giver_troop", ":reward"),
  27300. ## (else_try),
  27301. ## (eq, ":quest_no", "qst_bring_reinforcements_to_siege"),
  27302. ## (quest_get_slot, ":quest_target_amount", ":quest_no", slot_quest_target_amount),
  27303. ## (quest_get_slot, ":quest_object_troop", ":quest_no", slot_quest_object_troop),
  27304. ## (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  27305. ## (call_script, "script_game_get_join_cost", ":quest_object_troop"),
  27306. ## (assign, ":reward", reg0),
  27307. ## (val_mul, ":reward", ":quest_target_amount"),
  27308. ## (val_mul, ":reward", 2),
  27309. ## (call_script, "script_change_debt_to_troop", ":quest_giver_troop", ":reward"),
  27310. ## (else_try),
  27311. ## (eq, ":quest_no", "qst_deliver_supply_to_center_under_siege"),
  27312. ## (quest_get_slot, ":quest_target_amount", ":quest_no", slot_quest_target_amount),
  27313. ## (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  27314. ## (store_item_value, ":reward", "itm_siege_supply"),
  27315. ## (val_mul, ":reward", ":quest_target_amount"),
  27316. ## (call_script, "script_change_debt_to_troop", ":quest_giver_troop", ":reward"),
  27317. (else_try),
  27318. (eq, ":quest_no", "qst_raise_troops"),
  27319. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  27320. (call_script, "script_change_debt_to_troop", ":quest_giver_troop", 100),
  27321. (assign, ":quest_return_penalty", -4),
  27322. (assign, ":quest_expire_penalty", -5),
  27323. (else_try),
  27324. (eq, ":quest_no", "qst_deal_with_looters"),
  27325. (try_for_parties, ":cur_party_no"),
  27326. (party_get_template_id, ":cur_party_template", ":cur_party_no"),
  27327. (eq, ":cur_party_template", "pt_looters"),
  27328. (party_set_flags, ":cur_party_no", pf_quest_party, 0),
  27329. (try_end),
  27330. (assign, ":quest_return_penalty", -4),
  27331. (assign, ":quest_expire_penalty", -5),
  27332. (else_try),
  27333. (eq, ":quest_no", "qst_deal_with_bandits_at_lords_village"),
  27334. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  27335. (call_script, "script_change_debt_to_troop", ":quest_giver_troop", 200),
  27336. (assign, ":quest_return_penalty", -5),
  27337. (assign, ":quest_expire_penalty", -6),
  27338. (else_try),
  27339. (eq, ":quest_no", "qst_collect_taxes"),
  27340. (quest_get_slot, ":gold_reward", ":quest_no", slot_quest_gold_reward),
  27341. (quest_set_slot, ":quest_no", slot_quest_gold_reward, 0),
  27342. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  27343. (call_script, "script_change_debt_to_troop", ":quest_giver_troop", ":gold_reward"),
  27344. (assign, ":quest_return_penalty", -4),
  27345. (assign, ":quest_expire_penalty", -6),
  27346. ## (else_try),
  27347. ## (eq, ":quest_no", "qst_capture_messenger"),
  27348. ## (else_try),
  27349. ## (eq, ":quest_no", "qst_bring_back_deserters"),
  27350. (else_try),
  27351. (eq, ":quest_no", "qst_hunt_down_fugitive"),
  27352. (assign, ":quest_return_penalty", -3),
  27353. (assign, ":quest_expire_penalty", -4),
  27354. (else_try),
  27355. (eq, ":quest_no", "qst_kill_local_merchant"),
  27356. (else_try),
  27357. (eq, ":quest_no", "qst_bring_back_runaway_serfs"),
  27358. (assign, ":quest_return_penalty", -1),
  27359. (assign, ":quest_expire_penalty", -1),
  27360. (else_try),
  27361. (eq, ":quest_no", "qst_collect_debt"),
  27362. (try_begin),
  27363. (quest_slot_eq, "qst_collect_debt", slot_quest_current_state, 1), #debt collected but not delivered
  27364. (quest_get_slot, ":debt", "qst_collect_debt", slot_quest_target_amount),
  27365. (quest_get_slot, ":quest_giver", "qst_collect_debt", slot_quest_giver_troop),
  27366. (call_script, "script_change_debt_to_troop", ":quest_giver", ":debt"),
  27367. (assign, ":quest_return_penalty", -3),
  27368. (assign, ":quest_expire_penalty", -6),
  27369. (else_try),
  27370. (assign, ":quest_return_penalty", -3),
  27371. (assign, ":quest_expire_penalty", -4),
  27372. (try_end),
  27373. (else_try),
  27374. (eq, ":quest_no", "qst_deal_with_bandits_at_lords_village"),
  27375. (assign, ":quest_return_penalty", -6),
  27376. (assign, ":quest_expire_penalty", -6),
  27377. (else_try),
  27378. (eq, ":quest_no", "qst_cause_provocation"),
  27379. (assign, ":quest_return_penalty", -10),
  27380. (assign, ":quest_expire_penalty", -13),
  27381. (else_try),
  27382. (eq, ":quest_no", "qst_persuade_lords_to_make_peace"),
  27383. (assign, ":quest_return_penalty", -10),
  27384. (assign, ":quest_expire_penalty", -13),
  27385. (else_try),
  27386. (eq, ":quest_no", "qst_deal_with_night_bandits"),
  27387. (assign, ":quest_return_penalty", -1),
  27388. (assign, ":quest_expire_penalty", -1),
  27389.  
  27390. (else_try),
  27391. (eq, ":quest_no", "qst_follow_spy"),
  27392. (assign, ":quest_return_penalty", -2),
  27393. (assign, ":quest_expire_penalty", -3),
  27394. (try_begin),
  27395. (party_is_active, "$qst_follow_spy_spy_party"),
  27396. (remove_party, "$qst_follow_spy_spy_party"),
  27397. (try_end),
  27398. (try_begin),
  27399. (party_is_active, "$qst_follow_spy_spy_partners_party"),
  27400. (remove_party, "$qst_follow_spy_spy_partners_party"),
  27401. (try_end),
  27402. (else_try),
  27403. (eq, ":quest_no", "qst_capture_enemy_hero"),
  27404. (assign, ":quest_return_penalty", -3),
  27405. (assign, ":quest_expire_penalty", -4),
  27406. (else_try),
  27407. (eq, ":quest_no", "qst_lend_companion"),
  27408. (quest_get_slot, ":quest_target_troop", "qst_lend_companion", slot_quest_target_troop),
  27409. (troop_set_slot, ":quest_target_troop", slot_troop_current_mission, npc_mission_rejoin_when_possible),
  27410. (troop_set_slot, ":quest_target_troop", slot_troop_days_on_mission, 0),
  27411. (else_try),
  27412. (eq, ":quest_no", "qst_lend_surgeon"),
  27413. (quest_get_slot, ":quest_target_troop", "qst_lend_surgeon", slot_quest_target_troop),
  27414. (troop_set_slot, ":quest_target_troop", slot_troop_current_mission, npc_mission_rejoin_when_possible),
  27415. (troop_set_slot, ":quest_target_troop", slot_troop_days_on_mission, 0),
  27416. ## (party_add_members, "p_main_party", ":quest_target_troop", 1),
  27417. ## (else_try),
  27418. ## (eq, ":quest_no", "qst_capture_conspirators"),
  27419. ## (else_try),
  27420. ## (eq, ":quest_no", "qst_defend_nobles_against_peasants"),
  27421. (else_try),
  27422. (eq, ":quest_no", "qst_incriminate_loyal_commander"),
  27423. (assign, ":quest_return_penalty", -5),
  27424. (assign, ":quest_expire_penalty", -6),
  27425. ## (else_try),
  27426. ## (eq, ":quest_no", "qst_hunt_down_raiders"),
  27427. ## (else_try),
  27428. ## (eq, ":quest_no", "qst_capture_prisoners"),
  27429. ## #Enemy lord quests
  27430. (else_try),
  27431. (eq, ":quest_no", "qst_lend_surgeon"),
  27432.  
  27433. #Kingdom lady quests
  27434. (else_try),
  27435. (eq, ":quest_no", "qst_rescue_lord_by_replace"),
  27436. (assign, ":quest_return_penalty", -1),
  27437. (assign, ":quest_expire_penalty", -1),
  27438. (else_try),
  27439. (eq, ":quest_no", "qst_deliver_message_to_prisoner_lord"),
  27440. (assign, ":quest_return_penalty", 0),
  27441. (assign, ":quest_expire_penalty", -1),
  27442. (else_try),
  27443. (eq, ":quest_no", "qst_duel_for_lady"),
  27444. (assign, ":quest_return_penalty", -1),
  27445. (assign, ":quest_expire_penalty", -1),
  27446.  
  27447. #Kingdom Army quests
  27448. (else_try),
  27449. (eq, ":quest_no", "qst_follow_army"),
  27450. (assign, ":quest_return_penalty", 0), #was -4
  27451. (assign, ":quest_expire_penalty", 0), #was -5
  27452. (else_try),
  27453. (eq, ":quest_no", "qst_deliver_cattle_to_army"),
  27454. (assign, ":quest_return_penalty", 0),
  27455. (assign, ":quest_expire_penalty", 0),
  27456. (else_try),
  27457. (eq, ":quest_no", "qst_join_siege_with_army"),
  27458. (assign, ":quest_return_penalty", -1),
  27459. (assign, ":quest_expire_penalty", -2),
  27460. (else_try),
  27461. (eq, ":quest_no", "qst_scout_waypoints"),
  27462. (assign, ":quest_return_penalty", 0),
  27463. (assign, ":quest_expire_penalty", 0),
  27464.  
  27465. #Village Elder quests
  27466. (else_try),
  27467. (eq, ":quest_no", "qst_deliver_grain"),
  27468. (assign, ":quest_return_penalty", -6),
  27469. (assign, ":quest_expire_penalty", -7),
  27470. (else_try),
  27471. (eq, ":quest_no", "qst_deliver_cattle"),
  27472. (assign, ":quest_return_penalty", -3),
  27473. (assign, ":quest_expire_penalty", -4),
  27474. (else_try),
  27475. (eq, ":quest_no", "qst_train_peasants_against_bandits"),
  27476. (assign, ":quest_return_penalty", -4),
  27477. (assign, ":quest_expire_penalty", -5),
  27478.  
  27479. #Mayor quests
  27480. (else_try),
  27481. (eq, ":quest_no", "qst_deliver_wine"),
  27482. (assign, ":quest_return_penalty", -1),
  27483. (assign, ":quest_expire_penalty", -3),
  27484. (val_add, "$debt_to_merchants_guild", "$qst_deliver_wine_debt"),
  27485. (else_try),
  27486. (eq, ":quest_no", "qst_move_cattle_herd"),
  27487. (assign, ":quest_return_penalty", -1),
  27488. (assign, ":quest_expire_penalty", -3),
  27489. (else_try),
  27490. (eq, ":quest_no", "qst_escort_merchant_caravan"),
  27491. (assign, ":quest_return_penalty", -1),
  27492. (assign, ":quest_expire_penalty", -3),
  27493. (else_try),
  27494. (eq, ":quest_no", "qst_troublesome_bandits"),
  27495. (assign, ":quest_return_penalty", -1),
  27496. (assign, ":quest_expire_penalty", -2),
  27497. #Other quests
  27498. (else_try),
  27499. (eq, ":quest_no", "qst_join_faction"),
  27500. (assign, ":quest_return_penalty", -3),
  27501. (assign, ":quest_expire_penalty", -3),
  27502. (try_begin),
  27503. (call_script, "script_get_number_of_hero_centers", "trp_player"),
  27504. (gt, reg0, 0),
  27505. (call_script, "script_change_player_relation_with_faction", "$g_invite_faction", -10),
  27506. (try_end),
  27507.  
  27508.  
  27509. (try_begin), #if the vassalage is part of a surrender option, then the faction returns to a state of war
  27510. (quest_slot_eq, "qst_join_faction", slot_quest_failure_consequence, 1),
  27511. (call_script, "script_diplomacy_start_war_between_kingdoms", "fac_player_supporters_faction", "$g_invite_faction", 0),
  27512. (call_script, "script_change_player_honor", -5),
  27513. (quest_set_slot, "qst_join_faction", slot_quest_failure_consequence, 0),
  27514. (try_end),
  27515.  
  27516.  
  27517. (assign, "$g_invite_faction", 0),
  27518. (assign, "$g_invite_faction_lord", 0),
  27519. (assign, "$g_invite_offered_center", 0),
  27520. (else_try),
  27521. (eq, ":quest_no", "qst_eliminate_bandits_infesting_village"),
  27522. (assign, ":quest_return_penalty", -3),
  27523. (assign, ":quest_expire_penalty", -3),
  27524. (else_try),
  27525. (ge, ":quest_no", "qst_resolve_dispute"),
  27526. (assign, ":authority_loss", -2),
  27527. (assign, ":quest_return_penalty", 0),
  27528. (assign, ":quest_expire_penalty", 0),
  27529. (else_try),
  27530. (ge, ":quest_no", "qst_consult_with_minister"),
  27531. (assign, ":authority_loss", -2),
  27532. (assign, ":quest_return_penalty", 0),
  27533. (assign, ":quest_expire_penalty", 0),
  27534. (try_end),
  27535.  
  27536. (try_begin),
  27537. (gt, ":abort_type", 0),
  27538. (lt, ":quest_no", "qst_resolve_dispute"),
  27539.  
  27540. (quest_get_slot, ":quest_giver", ":quest_no", slot_quest_giver_troop),
  27541. (assign, ":relation_penalty", ":quest_return_penalty"),
  27542. (try_begin),
  27543. (eq, ":abort_type", 2),
  27544. (assign, ":relation_penalty", ":quest_expire_penalty"),
  27545. (try_end),
  27546. (try_begin),
  27547. (this_or_next|is_between, ":quest_giver", village_elders_begin, village_elders_end),
  27548. (is_between, ":quest_giver", mayors_begin, mayors_end),
  27549. (quest_get_slot, ":quest_giver_center", ":quest_no", slot_quest_giver_center),
  27550. (call_script, "script_change_player_relation_with_center", ":quest_giver_center", ":relation_penalty"),
  27551. (else_try),
  27552. (call_script, "script_change_player_relation_with_troop", ":quest_giver", ":relation_penalty"),
  27553. (try_end),
  27554. (try_end),
  27555.  
  27556. (fail_quest, ":quest_no"),
  27557.  
  27558. #NPC companion changes begin
  27559. (try_begin),
  27560. (gt, ":abort_type", 0),
  27561. (neq, ":quest_no", "qst_consult_with_minister"),
  27562. (neq, ":quest_no", "qst_resolve_dispute"),
  27563. (neq, ":quest_no", "qst_visit_lady"),
  27564. (neq, ":quest_no", "qst_formal_marriage_proposal"),
  27565. (neq, ":quest_no", "qst_duel_courtship_rival"),
  27566. (neq, ":quest_no", "qst_follow_army"),
  27567. (neq, ":quest_no", "qst_denounce_lord"),
  27568. (neq, ":quest_no", "qst_intrigue_against_lord"),
  27569. (neq, ":quest_no", "qst_offer_gift"),
  27570. (neq, ":quest_no", "qst_organize_feast"),
  27571.  
  27572. (call_script, "script_objectionable_action", tmt_honest, "str_fail_quest"),
  27573. (try_end),
  27574. #NPC companion changes end
  27575.  
  27576. (try_begin),
  27577. (eq, ":quest_no", "qst_resolve_dispute"),
  27578. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "trp_player"),
  27579. (call_script, "script_change_player_right_to_rule", ":authority_loss"),
  27580. (try_for_range, ":lord", active_npcs_begin, active_npcs_end),
  27581. (store_faction_of_troop, ":lord_faction", ":lord"),
  27582. (eq, ":lord_faction", "fac_player_supporters_faction"),
  27583. (call_script, "script_troop_change_relation_with_troop", ":lord", "trp_player", ":authority_loss"),
  27584. (try_end),
  27585. (try_end),
  27586.  
  27587.  
  27588. (try_begin),
  27589. (eq, ":quest_no", "qst_organize_feast"),
  27590. (call_script, "script_add_notification_menu", "mnu_notification_feast_quest_expired", 0, 0),
  27591. (try_end),
  27592.  
  27593.  
  27594. (call_script, "script_end_quest", ":quest_no"),
  27595. ]),
  27596.  
  27597.  
  27598. ## # script_event_center_captured
  27599. ## # Input: arg1 = center_no, arg2 = old_faction_no
  27600. ## # Output: none
  27601. ## ("event_center_captured",
  27602. ## [
  27603. ## # (store_script_param_1, ":center_no"),
  27604. ## # (store_script_param_2, ":old_faction_no"),
  27605. ## # (store_faction_of_party, ":faction_no"),
  27606. ##
  27607. ## (try_begin),
  27608. ## (check_quest_active, "qst_deliver_message"),
  27609. ## (try_end),
  27610. ## (try_begin),
  27611. ## (check_quest_active, "qst_escort_lady"),
  27612. ## (quest_slot_eq, "qst_escort_lady", slot_quest_target_center, ":center_no"),
  27613. ## (call_script, "script_abort_quest", "qst_escort_lady"),
  27614. ## (try_end),
  27615. ## (try_begin),
  27616. ## (check_quest_active, "qst_rescue_lady_under_siege"),
  27617. ## (quest_slot_eq, "qst_rescue_lady_under_siege", slot_quest_target_center, ":center_no"),
  27618. ## (quest_slot_eq, "qst_rescue_lady_under_siege", slot_quest_current_state, 0),
  27619. ## (call_script, "script_abort_quest", "qst_rescue_lady_under_siege", 1),
  27620. ## (try_end),
  27621. ## (try_begin),
  27622. ## (check_quest_active, "qst_deliver_message_to_lover"),
  27623. ## (try_end),
  27624. ## (try_begin),
  27625. ## (check_quest_active, "qst_deliver_message_to_enemy_lord"),
  27626. ## (try_end),
  27627. ## (try_begin),
  27628. ## (check_quest_active, "qst_bring_prisoners_to_enemy"),
  27629. ## (quest_slot_eq, "qst_bring_prisoners_to_enemy", slot_quest_target_center, ":center_no"),
  27630. ## (neg|check_quest_succeeded, "qst_bring_prisoners_to_enemy"),
  27631. ## (call_script, "script_abort_quest", "qst_bring_prisoners_to_enemy"),
  27632. ## (try_end),
  27633. ## (try_begin),
  27634. ## (check_quest_active, "qst_bring_reinforcements_to_siege"),
  27635. ## (try_end),
  27636. ## (try_begin),
  27637. ## (check_quest_active, "qst_deliver_supply_to_center_under_siege"),
  27638. ## (quest_slot_eq, "qst_deliver_supply_to_center_under_siege", slot_quest_target_center, ":center_no"),
  27639. ## (call_script, "script_abort_quest", "qst_deliver_supply_to_center_under_siege", 1),
  27640. ## (try_end),
  27641. ## (try_begin),
  27642. ## (check_quest_active, "qst_raise_troops"),
  27643. ## (try_end),
  27644. ## (try_begin),
  27645. ## (check_quest_active, "qst_capture_messenger"),
  27646. ## (try_end),
  27647. ## (try_begin),
  27648. ## (check_quest_active, "qst_bring_back_deserters"),
  27649. ## (try_end),
  27650. ## (try_begin),
  27651. ## (check_quest_active, "qst_kill_local_merchant"),
  27652. ## (try_end),
  27653. ## (try_begin),
  27654. ## (check_quest_active, "qst_bring_back_runaway_serfs"),
  27655. ## (quest_slot_eq, "qst_bring_back_runaway_serfs", slot_quest_object_center, ":center_no"),
  27656. ## (neg|check_quest_succeeded, "qst_bring_back_runaway_serfs"),
  27657. ## (neg|check_quest_failed, "qst_bring_back_runaway_serfs"),
  27658. ## (call_script, "script_abort_quest", "qst_bring_back_runaway_serfs"),
  27659. ## (try_end),
  27660. ## (try_begin),
  27661. ## (check_quest_active, "qst_follow_spy"),
  27662. ## (try_end),
  27663. ## (try_begin),
  27664. ## (check_quest_active, "qst_capture_enemy_hero"),
  27665. ## (try_end),
  27666. ## (try_begin),
  27667. ## (check_quest_active, "qst_lend_companion"),
  27668. ## (try_end),
  27669. ## (try_begin),
  27670. ## (check_quest_active, "qst_capture_conspirators"),
  27671. ## (try_end),
  27672. ## (try_begin),
  27673. ## (check_quest_active, "qst_defend_nobles_against_peasants"),
  27674. ## (try_end),
  27675. ## (try_begin),
  27676. ## (check_quest_active, "qst_incriminate_loyal_commander"),
  27677. ## (try_end),
  27678. ## (try_begin),
  27679. ## (check_quest_active, "qst_hunt_down_raiders"),
  27680. ## (try_end),
  27681. ## (try_begin),
  27682. ## (check_quest_active, "qst_capture_prisoners"),
  27683. ## (try_end),
  27684. ## #Enemy lord quests
  27685. ## (try_begin),
  27686. ## (check_quest_active, "qst_lend_surgeon"),
  27687. ## (try_end),
  27688. ## #Kingdom lady quests
  27689. ## (try_begin),
  27690. ## (check_quest_active, "qst_rescue_lord_by_replace"),
  27691. ## (quest_get_slot, ":quest_target_troop", "qst_rescue_lord_by_replace", slot_quest_target_troop),
  27692. ## (troop_slot_eq, ":quest_target_troop", slot_troop_is_prisoner, 0),
  27693. ## (neg|check_quest_succeeded, "qst_rescue_lord_by_replace"),
  27694. ## (call_script, "script_abort_quest", "qst_rescue_lord_by_replace"),
  27695. ## (try_end),
  27696. ## (try_begin),
  27697. ## (check_quest_active, "qst_deliver_message_to_prisoner_lord"),
  27698. ## (try_end),
  27699. ## (try_begin),
  27700. ## (check_quest_active, "qst_duel_for_lady"),
  27701. ## (try_end),
  27702. ## ]),
  27703.  
  27704. # script_cf_is_quest_troop
  27705. # Input: arg1 = troop_no
  27706. # Output: none (can fail)
  27707. ("cf_is_quest_troop",
  27708. [
  27709. (store_script_param_1, ":troop_no"),
  27710. (assign, ":is_quest_troop", 0),
  27711. (try_for_range, ":cur_quest", all_quests_begin, all_quests_end),
  27712. (check_quest_active, ":cur_quest"),
  27713. (quest_get_slot, ":quest_troop_1", ":cur_quest", slot_quest_target_troop),
  27714. (quest_get_slot, ":quest_troop_2", ":cur_quest", slot_quest_object_troop),
  27715. (quest_get_slot, ":quest_troop_3", ":cur_quest", slot_quest_giver_troop),
  27716. (this_or_next|eq, ":quest_troop_1", ":troop_no"),
  27717. (this_or_next|eq, ":quest_troop_2", ":troop_no"),
  27718. (eq, ":quest_troop_3", ":troop_no"),
  27719. (assign, ":is_quest_troop", 1),
  27720. (try_end),
  27721. (eq, ":is_quest_troop", 1),
  27722. ]),
  27723.  
  27724.  
  27725. ## # script_calculate_team_strength
  27726. ## # Input: arg1 = team_no
  27727. ## # Output: strength
  27728. ## ("calculate_team_strength",
  27729. ## [
  27730. ## (store_script_param_1, ":team_no"),
  27731. ## (assign, ":total_strength", 0),
  27732. ## (try_for_agents, ":cur_agent"),
  27733. ## (agent_get_team, ":agent_team", ":cur_agent"),
  27734. ## (eq, ":team_no", ":agent_team"),
  27735. ## (agent_is_human, ":cur_agent"),
  27736. ## (agent_is_alive, ":cur_agent"),
  27737. ##
  27738. ## (agent_get_troop_id, ":cur_troop", ":cur_agent"),
  27739. ## (store_character_level, ":cur_level", ":cur_troop"),
  27740. ## (val_add, ":cur_level", 5),
  27741. ## (try_begin),
  27742. ## (troop_is_hero, ":cur_troop"),
  27743. ## (val_add, ":cur_level", 5),
  27744. ## (try_end),
  27745. ## (val_add, ":total_strength", ":cur_level"),
  27746. ## (try_end),
  27747. ## (assign, reg0, ":total_strength"),
  27748. ## ]),
  27749.  
  27750. # script_check_friendly_kills
  27751. # Input: none
  27752. # Output: none (changes the morale of the player's party)
  27753. ("check_friendly_kills",
  27754. [(get_player_agent_own_troop_kill_count, ":count"),
  27755. (try_begin),
  27756. (neq, "$g_player_current_own_troop_kills", ":count"),
  27757. (val_sub, ":count", "$g_player_current_own_troop_kills"),
  27758. (val_add, "$g_player_current_own_troop_kills", ":count"),
  27759. (val_mul, ":count", -1),
  27760. (call_script, "script_change_player_party_morale", ":count"),
  27761. (try_end),
  27762. ]),
  27763.  
  27764. # script_simulate_retreat
  27765. # Input: arg1 = players_side_damage, arg2 = enemy_side_damage, arg3 = continue_battle s5 = title_string
  27766. # Output: none
  27767. ("simulate_retreat",
  27768. [
  27769. (call_script, "script_music_set_situation_with_culture", mtf_sit_killed),
  27770. (set_show_messages, 0),
  27771. (store_script_param, ":players_side_damage", 1),
  27772. (store_script_param, ":enemy_side_damage", 2),
  27773. (store_script_param, ":continue_battle", 3),
  27774.  
  27775. (assign, ":players_side_strength", 0),
  27776. (assign, ":enemy_side_strength", 0),
  27777.  
  27778. (assign, ":do_calculate", 1),
  27779. (try_begin),
  27780. (try_for_agents, ":cur_agent"),
  27781. (agent_is_human, ":cur_agent"),
  27782. (agent_is_alive, ":cur_agent"),
  27783. (agent_set_slot, ":cur_agent", slot_agent_is_alive_before_retreat, 1),#needed for simulation
  27784.  
  27785. (agent_get_troop_id, ":cur_troop", ":cur_agent"),
  27786. (store_character_level, ":cur_level", ":cur_troop"),
  27787. (val_add, ":cur_level", 5),
  27788. (try_begin),
  27789. (troop_is_hero, ":cur_troop"),
  27790. (val_add, ":cur_level", 5),
  27791. (try_end),
  27792. (try_begin),
  27793. (agent_is_ally, ":cur_agent"),
  27794. (val_add, ":players_side_strength", ":cur_level"),
  27795. (else_try),
  27796. (val_add, ":enemy_side_strength", ":cur_level"),
  27797. (try_end),
  27798. (try_end),
  27799. (eq, "$pin_player_fallen", 0),
  27800. (lt, ":enemy_side_strength", ":players_side_strength"),
  27801. (eq, ":continue_battle", 1),
  27802. (assign, ":do_calculate", 0),
  27803. (try_end),
  27804.  
  27805. (try_begin),
  27806. (eq, ":do_calculate", 1),
  27807.  
  27808. (assign, "$g_last_mission_player_damage", 0),
  27809. (party_clear, "p_temp_party"),
  27810. (party_clear, "p_temp_party_2"),
  27811. (call_script, "script_simulate_battle_with_agents_aux", 0, ":players_side_damage"),
  27812. (call_script, "script_simulate_battle_with_agents_aux", 1, ":enemy_side_damage"),
  27813.  
  27814. (assign, ":display_casualties", 0),
  27815.  
  27816. (try_begin),
  27817. (gt, "$g_last_mission_player_damage", 0),
  27818. (assign, ":display_casualties", 1),
  27819. (assign, reg1, "$g_last_mission_player_damage"),
  27820. (str_store_string, s12, "str_casualty_display_hp"),
  27821. (else_try),
  27822. (str_clear, s12),
  27823. (try_end),
  27824.  
  27825. (call_script, "script_print_casualties_to_s0", "p_temp_party", 1),
  27826. (try_begin),
  27827. (party_get_num_companion_stacks, ":num_stacks", "p_temp_party"),
  27828. (gt, ":num_stacks", 0),
  27829. (assign, ":display_casualties", 1),
  27830. (try_end),
  27831. (str_store_string_reg, s10, s0),
  27832.  
  27833. (call_script, "script_print_casualties_to_s0", "p_temp_party_2", 1),
  27834. (try_begin),
  27835. (party_get_num_companion_stacks, ":num_stacks", "p_temp_party_2"),
  27836. (gt, ":num_stacks", 0),
  27837. (assign, ":display_casualties", 1),
  27838. (try_end),
  27839. (str_store_string_reg, s11, s0),
  27840. (try_begin),
  27841. (eq, ":display_casualties", 1),
  27842. (dialog_box,"str_casualty_display", s5),
  27843. (try_end),
  27844. (try_end),
  27845. (set_show_messages, 1),
  27846.  
  27847. #Calculating morale penalty (can be between 0-30)
  27848. (assign, ":ally_casualties", 0),
  27849. (assign, ":enemy_casualties", 0),
  27850. (assign, ":total_allies", 0),
  27851.  
  27852. (try_for_agents, ":cur_agent"),
  27853. (agent_is_human, ":cur_agent"),
  27854. (try_begin),
  27855. (agent_is_ally, ":cur_agent"),
  27856. (val_add, ":total_allies", 1),
  27857. (try_begin),
  27858. (neg|agent_is_alive, ":cur_agent"),
  27859. (val_add, ":ally_casualties", 1),
  27860. (try_end),
  27861. (else_try),
  27862. (neg|agent_is_alive, ":cur_agent"),
  27863. (val_add, ":enemy_casualties", 1),
  27864. (try_end),
  27865. (try_end),
  27866. (store_add, ":total_casualties", ":ally_casualties", ":enemy_casualties"),
  27867. (try_begin),
  27868. (gt, ":total_casualties", 0),
  27869. (store_mul, ":morale_adder", ":ally_casualties", 100),
  27870. (val_div, ":morale_adder", ":total_casualties"),
  27871. (val_mul, ":morale_adder", ":ally_casualties"),
  27872. (val_div, ":morale_adder", ":total_allies"),
  27873. (val_mul, ":morale_adder", -30),
  27874. (val_div, ":morale_adder", 100),
  27875. (call_script, "script_change_player_party_morale", ":morale_adder"),
  27876. (try_end),
  27877. ]),
  27878.  
  27879.  
  27880.  
  27881. # script_simulate_battle_with_agents_aux
  27882. # For internal use only
  27883. # Input: arg1 = attacker_side (0 = ally, 1 = enemy), arg2 = damage amount
  27884. # Output: none
  27885. ("simulate_battle_with_agents_aux",
  27886. [
  27887. (store_script_param_1, ":attacker_side"),
  27888. (store_script_param_2, ":damage"),
  27889.  
  27890. (get_player_agent_no, ":player_agent"),
  27891. (try_for_agents, ":cur_agent"),
  27892. (neq, ":player_agent", ":cur_agent"),
  27893. (agent_is_human, ":cur_agent"),
  27894. #do not check agent_is_alive, check slot_agent_is_alive_before_retreat instead, so that dead agents can still hit enemies
  27895. (agent_slot_eq, ":cur_agent", slot_agent_is_alive_before_retreat, 1),
  27896. (try_begin),
  27897. (agent_is_ally, ":cur_agent"),
  27898. (assign, ":cur_agents_side", 0),
  27899. (else_try),
  27900. (assign, ":cur_agents_side", 1),
  27901. (try_end),
  27902. (eq, ":cur_agents_side", ":attacker_side"),
  27903. (agent_get_position, pos2, ":cur_agent"),
  27904. (assign, ":closest_agent", -1),
  27905. (assign, ":min_distance", 100000),
  27906. (try_for_agents, ":cur_agent_2"),
  27907. (agent_is_human, ":cur_agent_2"),
  27908. (agent_is_alive, ":cur_agent_2"),
  27909. (try_begin),
  27910. (agent_is_ally, ":cur_agent_2"),
  27911. (assign, ":cur_agents_side_2", 0),
  27912. (else_try),
  27913. (assign, ":cur_agents_side_2", 1),
  27914. (try_end),
  27915. (this_or_next|neq, ":cur_agent_2", ":player_agent"),
  27916. (eq, "$pin_player_fallen", 0),
  27917. (neq, ":attacker_side", ":cur_agents_side_2"),
  27918. (agent_get_position, pos3, ":cur_agent_2"),
  27919. (get_distance_between_positions, ":cur_distance", pos2, pos3),
  27920. (lt, ":cur_distance", ":min_distance"),
  27921. (assign, ":min_distance", ":cur_distance"),
  27922. (assign, ":closest_agent", ":cur_agent_2"),
  27923. (try_end),
  27924. (ge, ":closest_agent", 0),
  27925. #Fight
  27926. (agent_get_class, ":agent_class", ":cur_agent"),
  27927. (assign, ":agents_speed", 1),
  27928. (assign, ":agents_additional_hit", 0),
  27929. (try_begin),
  27930. (eq, ":agent_class", grc_archers),
  27931. (assign, ":agents_additional_hit", 2),
  27932. (else_try),
  27933. (eq, ":agent_class", grc_cavalry),
  27934. (assign, ":agents_speed", 2),
  27935. (try_end),
  27936. (agent_get_class, ":agent_class", ":closest_agent"),
  27937. (assign, ":agents_speed_2", 1),
  27938. (try_begin),
  27939. (eq, ":agent_class", grc_cavalry),
  27940. (assign, ":agents_speed_2", 2),
  27941. (try_end),
  27942. (assign, ":agents_hit", 18000),
  27943. (val_add, ":min_distance", 3000),
  27944. (val_div, ":agents_hit", ":min_distance"),
  27945. (val_mul, ":agents_hit", 2),# max 10, min 2 hits within 150 meters
  27946.  
  27947. (val_mul, ":agents_hit", ":agents_speed"),
  27948. (val_div, ":agents_hit", ":agents_speed_2"),
  27949. (val_add, ":agents_hit", ":agents_additional_hit"),
  27950.  
  27951. (assign, ":cur_damage", ":damage"),
  27952. (agent_get_troop_id, ":closest_troop", ":closest_agent"),
  27953. (agent_get_troop_id, ":cur_troop", ":cur_agent"),
  27954. (store_character_level, ":closest_level", ":closest_troop"),
  27955. (store_character_level, ":cur_level", ":cur_troop"),
  27956. (store_sub, ":level_dif", ":cur_level", ":closest_level"),
  27957. (val_div, ":level_dif", 5),
  27958. (val_add, ":cur_damage", ":level_dif"),
  27959.  
  27960. (try_begin),
  27961. (eq, ":closest_agent", ":player_agent"),
  27962. (val_div, ":cur_damage", 2),
  27963. (store_agent_hit_points, ":init_player_hit_points", ":player_agent", 1),
  27964. (try_end),
  27965.  
  27966. (try_for_range, ":unused", 0, ":agents_hit"),
  27967. (store_random_in_range, ":random_damage", 0, 100),
  27968. (lt, ":random_damage", ":cur_damage"),
  27969. (agent_deliver_damage_to_agent, ":cur_agent", ":closest_agent"),
  27970. (try_end),
  27971.  
  27972. (try_begin),
  27973. (eq, ":closest_agent", ":player_agent"),
  27974. (store_agent_hit_points, ":final_player_hit_points", ":player_agent", 1),
  27975. (store_sub, ":hit_points_difference", ":init_player_hit_points", ":final_player_hit_points"),
  27976. (val_add, "$g_last_mission_player_damage", ":hit_points_difference"),
  27977. (try_end),
  27978.  
  27979. (neg|agent_is_alive, ":closest_agent"),
  27980. (try_begin),
  27981. (eq, ":attacker_side", 1),
  27982. (party_add_members, "p_temp_party", ":closest_troop", 1),
  27983. (try_begin),
  27984. (agent_is_wounded, ":closest_agent"),
  27985. (party_wound_members, "p_temp_party", ":closest_troop", 1),
  27986. (try_end),
  27987. (else_try),
  27988. (party_add_members, "p_temp_party_2", ":closest_troop", 1),
  27989. (try_begin),
  27990. (agent_is_wounded, ":closest_agent"),
  27991. (party_wound_members, "p_temp_party_2", ":closest_troop", 1),
  27992. (try_end),
  27993. (try_end),
  27994. (try_end),
  27995. ]),
  27996.  
  27997.  
  27998. # script_map_get_random_position_around_position_within_range
  27999. # Input: arg1 = minimum_distance in km, arg2 = maximum_distance in km, pos1 = origin position
  28000. # Output: pos2 = result position
  28001. ("map_get_random_position_around_position_within_range",
  28002. [
  28003. (store_script_param_1, ":min_distance"),
  28004. (store_script_param_2, ":max_distance"),
  28005. (val_mul, ":min_distance", 100),
  28006. (assign, ":continue", 1),
  28007. (try_for_range, ":unused", 0, 20),
  28008. (eq, ":continue", 1),
  28009. (map_get_random_position_around_position, pos2, pos1, ":max_distance"),
  28010. (get_distance_between_positions, ":distance", pos2, pos1),
  28011. (ge, ":distance", ":min_distance"),
  28012. (assign, ":continue", 0),
  28013. (try_end),
  28014. ]),
  28015.  
  28016.  
  28017. # script_get_number_of_unclaimed_centers_by_player
  28018. # Input: none
  28019. # Output: reg0 = number of unclaimed centers, reg1 = last unclaimed center_no
  28020. ("get_number_of_unclaimed_centers_by_player",
  28021. [
  28022. (assign, ":unclaimed_centers", 0),
  28023. (assign, reg1, -1),
  28024. (try_for_range, ":center_no", centers_begin, centers_end),
  28025. (store_faction_of_party, ":faction_no", ":center_no"),
  28026. (eq, ":faction_no", "fac_player_supporters_faction"),
  28027. (party_slot_eq, ":center_no", slot_town_claimed_by_player, 0),
  28028. (party_get_num_companion_stacks, ":num_stacks", ":center_no"),
  28029. (ge, ":num_stacks", 1), #castle is garrisoned
  28030. (assign, reg1, ":center_no"),
  28031. (val_add, ":unclaimed_centers", 1),
  28032. (try_end),
  28033. (assign, reg0, ":unclaimed_centers"),
  28034. ]),
  28035.  
  28036. # script_troop_count_number_of_enemy_troops
  28037. # Input: arg1 = troop_no
  28038. # Output: reg0 = number_of_enemy_troops
  28039. # ("troop_count_number_of_enemy_troops",
  28040. # [
  28041. # (store_script_param_1, ":troop_no"),
  28042. # (assign, ":enemy_count", 0),
  28043. # (try_for_range, ":i_enemy_slot", slot_troop_enemies_begin, slot_troop_enemies_end),
  28044. # (troop_slot_ge, ":troop_no", ":i_enemy_slot", 1),
  28045. # (val_add, ":enemy_count", 1),
  28046. # (try_end),
  28047. # (assign, reg0, ":enemy_count"),
  28048. # ]),
  28049.  
  28050.  
  28051. # script_cf_troop_check_troop_is_enemy
  28052. # Input: arg1 = troop_no, arg2 = checked_troop_no
  28053. # Output: none (Can fail)
  28054. ("cf_troop_check_troop_is_enemy",
  28055. [
  28056. (store_script_param_1, ":troop_no"),
  28057. (store_script_param_2, ":checked_troop_no"),
  28058. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":checked_troop_no"),
  28059. (lt, reg0, -10),
  28060. ]),
  28061.  
  28062.  
  28063. # script_troop_get_leaded_center_with_index
  28064. # Input: arg1 = troop_no, arg2 = center index within range between zero and the number of centers that troop owns
  28065. # Output: reg0 = center_no
  28066. ("troop_get_leaded_center_with_index",
  28067. [
  28068. (store_script_param_1, ":troop_no"),
  28069. (store_script_param_2, ":random_center"),
  28070. (assign, ":result", -1),
  28071. (assign, ":center_count", 0),
  28072. (try_for_range, ":center_no", centers_begin, centers_end),
  28073. (eq, ":result", -1),
  28074. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  28075. (val_add, ":center_count", 1),
  28076. (gt, ":center_count", ":random_center"),
  28077. (assign, ":result", ":center_no"),
  28078. (try_end),
  28079. (assign, reg0, ":result"),
  28080. ]),
  28081.  
  28082. # script_cf_troop_get_random_leaded_walled_center_with_less_strength_priority
  28083. # Input: arg1 = troop_no, arg2 = preferred_center_no
  28084. # Output: reg0 = center_no (Can fail)
  28085. ("cf_troop_get_random_leaded_walled_center_with_less_strength_priority",
  28086. [
  28087. (store_script_param, ":troop_no", 1),
  28088. (store_script_param, ":preferred_center_no", 2),
  28089.  
  28090. (assign, ":num_centers", 0),
  28091. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  28092. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  28093. (party_slot_eq, ":center_no", slot_center_is_besieged_by, -1),
  28094. (val_add, ":num_centers", 1),
  28095. (try_begin),
  28096. (eq, ":center_no", ":preferred_center_no"),
  28097. (val_add, ":num_centers", 99),
  28098. (try_end),
  28099. ## (call_script, "script_party_calculate_regular_strength", ":center_no"),
  28100. ## (assign, ":strength", reg0),
  28101. ## (lt, ":strength", 80),
  28102. ## (store_sub, ":strength", 100, ":strength"),
  28103. ## (val_div, ":strength", 20),
  28104. ## (val_add, ":num_centers", ":strength"),
  28105. (try_end),
  28106. (gt, ":num_centers", 0),
  28107. (store_random_in_range, ":random_center", 0, ":num_centers"),
  28108. (assign, ":result", -1),
  28109. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  28110. (eq, ":result", -1),
  28111. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  28112. (party_slot_eq, ":center_no", slot_center_is_besieged_by, -1),
  28113. (val_sub, ":random_center", 1),
  28114. (try_begin),
  28115. (eq, ":center_no", ":preferred_center_no"),
  28116. (val_sub, ":random_center", 99),
  28117. (try_end),
  28118. ## (try_begin),
  28119. ## (call_script, "script_party_calculate_regular_strength", ":center_no"),
  28120. ## (assign, ":strength", reg0),
  28121. ## (lt, ":strength", 80),
  28122. ## (store_sub, ":strength", 100, ":strength"),
  28123. ## (val_div, ":strength", 20),
  28124. ## (val_sub, ":random_center", ":strength"),
  28125. ## (try_end),
  28126. (lt, ":random_center", 0),
  28127. (assign, ":result", ":center_no"),
  28128. (try_end),
  28129. (assign, reg0, ":result"),
  28130. ]),
  28131.  
  28132. # script_cf_troop_get_random_leaded_town_or_village_except_center
  28133. # Input: arg1 = troop_no, arg2 = except_center_no
  28134. # Output: reg0 = center_no (Can fail)
  28135. ("cf_troop_get_random_leaded_town_or_village_except_center",
  28136. [
  28137. (store_script_param_1, ":troop_no"),
  28138. (store_script_param_2, ":except_center_no"),
  28139.  
  28140. (assign, ":num_centers", 0),
  28141. (try_for_range, ":center_no", centers_begin, centers_end),
  28142. (neg|party_slot_eq, ":center_no", slot_party_type, spt_castle),
  28143. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  28144. (neq, ":center_no", ":except_center_no"),
  28145. (val_add, ":num_centers", 1),
  28146. (try_end),
  28147.  
  28148. (gt, ":num_centers", 0),
  28149. (store_random_in_range, ":random_center", 0, ":num_centers"),
  28150. (assign, ":end_cond", centers_end),
  28151. (try_for_range, ":center_no", centers_begin, ":end_cond"),
  28152. (neg|party_slot_eq, ":center_no", slot_party_type, spt_castle),
  28153. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  28154. (neq, ":center_no", ":except_center_no"),
  28155. (val_sub, ":random_center", 1),
  28156. (lt, ":random_center", 0),
  28157. (assign, ":target_center", ":center_no"),
  28158. (assign, ":end_cond", 0),
  28159. (try_end),
  28160. (assign, reg0, ":target_center"),
  28161. ]),
  28162.  
  28163. # script_troop_write_owned_centers_to_s2
  28164. # Input: arg1 = troop_no
  28165. # Output: none
  28166. ("troop_write_owned_centers_to_s2",
  28167. [
  28168. (store_script_param_1, ":troop_no"),
  28169.  
  28170. (call_script, "script_get_number_of_hero_centers", ":troop_no"),
  28171. (assign, ":no_centers", reg0),
  28172.  
  28173. (str_store_troop_name, s5, ":troop_no"),
  28174.  
  28175. (try_begin),
  28176. (gt, ":no_centers", 1),
  28177. (try_for_range, ":i_center", 1, ":no_centers"),
  28178. (call_script, "script_troop_get_leaded_center_with_index", ":troop_no", ":i_center"),
  28179. (str_store_party_name_link, s50, reg0),
  28180. (try_begin),
  28181. (eq, ":i_center", 1),
  28182. (call_script, "script_troop_get_leaded_center_with_index", ":troop_no", 0),
  28183. (str_store_party_name_link, s51, reg0),
  28184. (str_store_string, s51, "str_s50_and_s51"),
  28185. (else_try),
  28186. (str_store_string, s51, "str_s50_comma_s51"),
  28187. (try_end),
  28188. (try_end),
  28189. (str_store_string, s2, "str_s5_is_the_ruler_of_s51"),
  28190. (else_try),
  28191. (eq, ":no_centers", 1),
  28192. (call_script, "script_troop_get_leaded_center_with_index", ":troop_no", 0),
  28193. (str_store_party_name_link, s51, reg0),
  28194. (str_store_string, s2, "str_s5_is_the_ruler_of_s51"),
  28195. (else_try),
  28196. (store_troop_faction, ":faction_no", ":troop_no"),
  28197. (str_store_faction_name_link, s6, ":faction_no"),
  28198. (str_store_string, s2, "str_s5_is_a_nobleman_of_s6"),
  28199. (try_end),
  28200. ]),
  28201.  
  28202. ("troop_write_family_relations_to_s1",
  28203. [
  28204. (str_clear, s1),
  28205. #redo, possibly using base from update_troop_notes
  28206.  
  28207. ]),
  28208.  
  28209. # script_write_family_relation_as_s3s_s2_to_s4
  28210.  
  28211. # Inputs: arg1 = troop_no, arg2 = family_no (valid slot no after slot_troop_family_begin)
  28212. # Outputs: s11 = what troop_1 is to troop_2, reg0 = strength of relationship. Normally, "$g_talk_troop" should be troop_2
  28213.  
  28214. ("troop_get_family_relation_to_troop",
  28215. [
  28216. (store_script_param_1, ":troop_1"),
  28217. (store_script_param_2, ":troop_2"),
  28218.  
  28219. (troop_get_type, ":gender_1", ":troop_1"),
  28220. (assign, ":relation_strength", 0),
  28221.  
  28222. (troop_get_slot, ":spouse_of_1", ":troop_1", slot_troop_spouse),
  28223. (troop_get_slot, ":spouse_of_2", ":troop_2", slot_troop_spouse),
  28224.  
  28225. (try_begin),
  28226. (gt, ":spouse_of_1", -1),
  28227. (troop_get_slot, ":father_of_spouse_of_1", ":spouse_of_1", slot_troop_father),
  28228. (else_try),
  28229. (assign, ":father_of_spouse_of_1", -1),
  28230. (try_end),
  28231.  
  28232. (try_begin),
  28233. (gt, ":spouse_of_2", -1),
  28234. (troop_get_slot, ":father_of_spouse_of_2", ":spouse_of_2", slot_troop_father),
  28235. (else_try),
  28236. (assign, ":father_of_spouse_of_2", -1),
  28237. (try_end),
  28238.  
  28239. (try_begin),
  28240. (gt, ":spouse_of_2", -1),
  28241. (troop_get_slot, ":mother_of_spouse_of_2", ":spouse_of_2", slot_troop_mother),
  28242. (else_try),
  28243. (assign, ":mother_of_spouse_of_2", -1),
  28244. (try_end),
  28245.  
  28246. (troop_get_slot, ":father_of_1", ":troop_1", slot_troop_father),
  28247. (troop_get_slot, ":father_of_2", ":troop_2", slot_troop_father),
  28248.  
  28249. #For the sake of simplicity, we can assume that all male aristocrats in prior generations either married commoners or procured their brides from the Old Country, thus discounting intermarriage
  28250. (troop_get_slot, ":mother_of_1", ":troop_1", slot_troop_mother),
  28251. (troop_get_slot, ":mother_of_2", ":troop_2", slot_troop_mother),
  28252.  
  28253. (try_begin),
  28254. (is_between, ":father_of_1", companions_begin, kingdom_ladies_end),
  28255. (troop_get_slot, ":paternal_grandfather_of_1", ":father_of_1", slot_troop_father),
  28256. (else_try),
  28257. (assign, ":paternal_grandfather_of_1", -1),
  28258. (try_end),
  28259.  
  28260. (try_begin),
  28261. (is_between, ":father_of_2", companions_begin, kingdom_ladies_end),
  28262. (troop_get_slot, ":paternal_grandfather_of_2", ":father_of_2", slot_troop_father),
  28263. (else_try),
  28264. (assign, ":paternal_grandfather_of_2", -1),
  28265. (try_end),
  28266.  
  28267. (troop_get_slot, ":guardian_of_1", ":troop_1", slot_troop_guardian),
  28268. (troop_get_slot, ":guardian_of_2", ":troop_2", slot_troop_guardian),
  28269.  
  28270. (str_store_string, s11, "str_no_relation"),
  28271.  
  28272. (try_begin),
  28273. (eq, ":troop_1", ":troop_2"),
  28274. #self
  28275. (else_try),
  28276. (eq, ":spouse_of_1", ":troop_2"),
  28277. (assign, ":relation_strength", 20),
  28278. (try_begin),
  28279. (eq, ":gender_1", 1),
  28280. (str_store_string, s11, "str_wife"),
  28281. (else_try),
  28282. (str_store_string, s11, "str_husband"),
  28283. (try_end),
  28284. (else_try),
  28285. (eq, ":father_of_2", ":troop_1"),
  28286. (assign, ":relation_strength", 15),
  28287. (str_store_string, s11, "str_father"),
  28288. (else_try),
  28289. (eq, ":mother_of_2", ":troop_1"),
  28290. (assign, ":relation_strength", 15),
  28291. (str_store_string, s11, "str_mother"),
  28292. (else_try),
  28293. (this_or_next|eq, ":father_of_1", ":troop_2"),
  28294. (eq, ":mother_of_1", ":troop_2"),
  28295. (assign, ":relation_strength", 15),
  28296. (try_begin),
  28297. (eq, ":gender_1", 1),
  28298. (str_store_string, s11, "str_daughter"),
  28299. (else_try),
  28300. (str_store_string, s11, "str_son"),
  28301. (try_end),
  28302. (else_try),
  28303. (gt, ":father_of_1", -1), #necessary, as some lords do not have the father registered
  28304. (eq, ":father_of_1", ":father_of_2"),
  28305. (assign, ":relation_strength", 10),
  28306. (try_begin),
  28307. (eq, ":gender_1", 1),
  28308. (str_store_string, s11, "str_sister"),
  28309. (else_try),
  28310. (str_store_string, s11, "str_brother"),
  28311. (try_end),
  28312. (else_try),
  28313. (eq, ":guardian_of_2", ":troop_1"),
  28314. (assign, ":relation_strength", 10),
  28315. (try_begin),
  28316. (eq, ":gender_1", 1),
  28317. (str_store_string, s11, "str_sister"),
  28318. (else_try),
  28319. (str_store_string, s11, "str_brother"),
  28320. (try_end),
  28321. (else_try),
  28322. (eq, ":guardian_of_1", ":troop_2"),
  28323. (assign, ":relation_strength", 10),
  28324. (try_begin),
  28325. (eq, ":gender_1", 1),
  28326. (str_store_string, s11, "str_sister"),
  28327. (else_try),
  28328. (str_store_string, s11, "str_brother"),
  28329. (try_end),
  28330. (else_try),
  28331. (gt, ":paternal_grandfather_of_1", -1),
  28332. (eq, ":paternal_grandfather_of_1", ":father_of_2"),
  28333. (assign, ":relation_strength", 4),
  28334. (try_begin),
  28335. (eq, ":gender_1", 1),
  28336. (str_store_string, s11, "str_niece"),
  28337. (else_try),
  28338. (str_store_string, s11, "str_nephew"),
  28339. (try_end),
  28340. (else_try), #specifically aunt and uncle by blood -- i assume that in a medieval society with lots of internal family conflicts, they would not include aunts and uncles by marriage
  28341. (gt, ":paternal_grandfather_of_2", -1),
  28342. (eq, ":paternal_grandfather_of_2", ":father_of_1"),
  28343. (assign, ":relation_strength", 4),
  28344. (try_begin),
  28345. (eq, ":gender_1", 1),
  28346. (str_store_string, s11, "str_aunt"),
  28347. (else_try),
  28348. (str_store_string, s11, "str_uncle"),
  28349. (try_end),
  28350. (else_try),
  28351. (gt, ":paternal_grandfather_of_1", 0),
  28352. (eq, ":paternal_grandfather_of_2", ":paternal_grandfather_of_1"),
  28353. (assign, ":relation_strength", 2),
  28354. (str_store_string, s11, "str_cousin"),
  28355. (else_try),
  28356. (eq, ":father_of_spouse_of_1", ":troop_2"),
  28357. (assign, ":relation_strength", 5),
  28358. (try_begin),
  28359. (eq, ":gender_1", 1),
  28360. (str_store_string, s11, "str_daughterinlaw"),
  28361. (else_try),
  28362. (str_store_string, s11, "str_soninlaw"),
  28363. (try_end),
  28364. (else_try),
  28365. (eq, ":father_of_spouse_of_2", ":troop_1"),
  28366. (assign, ":relation_strength", 5),
  28367. (str_store_string, s11, "str_fatherinlaw"),
  28368. (else_try),
  28369. (eq, ":mother_of_spouse_of_2", ":troop_1"),
  28370. (neq, ":mother_of_spouse_of_2", "trp_player"), #May be necessary if mother for troops not set to -1
  28371. (assign, ":relation_strength", 5),
  28372. (str_store_string, s11, "str_motherinlaw"),
  28373.  
  28374. (else_try),
  28375. (gt, ":father_of_spouse_of_1", -1), #necessary
  28376. (eq, ":father_of_spouse_of_1", ":father_of_2"),
  28377. (assign, ":relation_strength", 5),
  28378. (try_begin),
  28379. (eq, ":gender_1", 1),
  28380. (str_store_string, s11, "str_sisterinlaw"),
  28381. (else_try),
  28382. (str_store_string, s11, "str_brotherinlaw"),
  28383. (try_end),
  28384. (else_try),
  28385. (gt, ":father_of_spouse_of_2", -1), #necessary
  28386. (eq, ":father_of_spouse_of_2", ":father_of_1"),
  28387. (assign, ":relation_strength", 5),
  28388. (try_begin),
  28389. (eq, ":gender_1", 1),
  28390. (str_store_string, s11, "str_sisterinlaw"),
  28391. (else_try),
  28392. (str_store_string, s11, "str_brotherinlaw"),
  28393. (try_end),
  28394. (else_try),
  28395. (gt, ":spouse_of_2", -1), #necessary to avoid bug
  28396. (troop_slot_eq, ":spouse_of_2", slot_troop_guardian, ":troop_1"),
  28397. (assign, ":relation_strength", 5),
  28398. (try_begin),
  28399. (eq, ":gender_1", 1),
  28400. (str_store_string, s11, "str_sisterinlaw"),
  28401. (else_try),
  28402. (str_store_string, s11, "str_brotherinlaw"),
  28403. (try_end),
  28404. (else_try),
  28405. (gt, ":spouse_of_1", -1), #necessary to avoid bug
  28406. (troop_slot_eq, ":spouse_of_1", slot_troop_guardian, ":troop_2"),
  28407. (assign, ":relation_strength", 5),
  28408. (try_begin),
  28409. (eq, ":gender_1", 1),
  28410. (str_store_string, s11, "str_sisterinlaw"),
  28411. (else_try),
  28412. (str_store_string, s11, "str_brotherinlaw"),
  28413. (try_end),
  28414. (try_end),
  28415.  
  28416. (assign, reg4, ":gender_1"),
  28417. (assign, reg0, ":relation_strength"),
  28418. ]),
  28419.  
  28420.  
  28421. # script_complete_family_relations
  28422. # Inputs: none
  28423. # Outputs: none
  28424.  
  28425. #complete family relations removed
  28426.  
  28427. # script_collect_friendly_parties
  28428. # Fills the party p_collective_friends with the members of parties attached to main_party and ally_party_no
  28429. ("collect_friendly_parties",
  28430. [
  28431. (party_collect_attachments_to_party, "p_main_party", "p_collective_friends"),
  28432. (try_begin),
  28433. (gt, "$g_ally_party", 0),
  28434. (party_collect_attachments_to_party, "$g_ally_party", "p_temp_party"),
  28435. (assign, "$g_move_heroes", 1),
  28436. (call_script, "script_party_add_party", "p_collective_friends", "p_temp_party"),
  28437. (try_end),
  28438. ]),
  28439.  
  28440. # script_encounter_calculate_fit
  28441. # Input: arg1 = troop_no
  28442. # Output: none
  28443. ("encounter_calculate_fit",
  28444. [
  28445. #(assign, "$g_enemy_fit_for_battle_old", "$g_enemy_fit_for_battle"),
  28446. #(assign, "$g_friend_fit_for_battle_old", "$g_friend_fit_for_battle"),
  28447. #(assign, "$g_main_party_fit_for_battle_old", "$g_main_party_fit_for_battle"),
  28448. (call_script, "script_party_count_fit_for_battle", "p_main_party"),
  28449. #(assign, "$g_main_party_fit_for_battle", reg(0)),
  28450. (call_script, "script_collect_friendly_parties"),
  28451. (call_script, "script_party_count_fit_for_battle", "p_collective_friends"),
  28452. (assign, "$g_friend_fit_for_battle", reg(0)),
  28453.  
  28454. (party_clear, "p_collective_ally"),
  28455. (try_begin),
  28456. (gt, "$g_ally_party", 0),
  28457. (party_is_active, "$g_ally_party"),
  28458. (party_collect_attachments_to_party, "$g_ally_party", "p_collective_ally"),
  28459. #(call_script, "script_party_count_fit_for_battle", "p_collective_ally"),
  28460. #(val_add, "$g_friend_fit_for_battle", reg(0)),
  28461. (try_end),
  28462.  
  28463. (party_clear, "p_collective_enemy"),
  28464. (try_begin),
  28465. (party_is_active, "$g_enemy_party"),
  28466. (party_collect_attachments_to_party, "$g_enemy_party", "p_collective_enemy"),
  28467. (try_end),
  28468. (call_script, "script_party_count_fit_for_battle", "p_collective_enemy"),
  28469. (assign, "$g_enemy_fit_for_battle", reg(0)),
  28470. (assign, reg11, "$g_enemy_fit_for_battle"),
  28471. (assign, reg10, "$g_friend_fit_for_battle"),
  28472. ]),
  28473.  
  28474. # script_encounter_init_variables
  28475. # Input: arg1 = troop_no
  28476. # Output: none
  28477. ("encounter_init_variables",
  28478. [
  28479. (assign, "$capture_screen_shown", 0),
  28480. (assign, "$loot_screen_shown", 0),
  28481. (assign, "$thanked_by_ally_leader", 0),
  28482. (assign, "$g_battle_result", 0),
  28483. (assign, "$cant_leave_encounter", 0),
  28484. (assign, "$cant_talk_to_enemy", 0),
  28485. (assign, "$last_defeated_hero", 0),
  28486. (assign, "$last_freed_hero", 0),
  28487.  
  28488. (call_script, "script_encounter_calculate_fit"),
  28489. (call_script, "script_party_copy", "p_main_party_backup", "p_main_party"),
  28490. (call_script, "script_party_calculate_strength", "p_main_party", 0),
  28491. (assign, "$g_starting_strength_main_party", reg0),
  28492. (call_script, "script_party_copy", "p_encountered_party_backup", "p_collective_enemy"),
  28493. (call_script, "script_party_calculate_strength", "p_collective_enemy", 0),
  28494. (assign, "$g_starting_strength_enemy_party", reg0),
  28495. (assign, "$g_strength_contribution_of_player", 100),
  28496.  
  28497. (call_script, "script_party_copy", "p_collective_friends_backup", "p_collective_friends"),
  28498. (call_script, "script_party_calculate_strength", "p_collective_friends", 0),
  28499. (assign, "$g_starting_strength_friends", reg0),
  28500.  
  28501. (store_mul, "$g_strength_contribution_of_player","$g_starting_strength_main_party", 100), # reduce contribution if we are helping someone.
  28502.  
  28503. (try_begin),
  28504. (gt, "$g_starting_strength_friends", 0), #this new to prevent occasional div by zero error
  28505. (val_div, "$g_strength_contribution_of_player","$g_starting_strength_friends"),
  28506. (else_try),
  28507. (assign, "$g_strength_contribution_of_player", 100), #Or zero, maybe
  28508. (try_end),
  28509.  
  28510. (party_clear, "p_routed_enemies"), #new
  28511. (assign, "$num_routed_us", 0),#newtoday
  28512. (assign, "$num_routed_allies", 0),#newtoday
  28513. (assign, "$num_routed_enemies", 0),#newtoday
  28514. (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),
  28515. (try_for_range, ":i_stack", 0, ":num_stacks"),
  28516. (party_stack_get_troop_id, ":stack_troop_id", "p_main_party", ":i_stack"),
  28517. (try_begin),
  28518. (troop_set_slot, ":stack_troop_id", slot_troop_player_routed_agents, 0),
  28519. #(troop_set_slot, ":stack_troop_id", slot_troop_enemy_routed_agents, 0),
  28520. #(troop_set_slot, ":stack_troop_id", slot_troop_ally_routed_agents, 0),
  28521. (try_end),
  28522. (try_end),
  28523.  
  28524. (party_get_num_companion_stacks, ":num_stacks", "p_collective_friends"),
  28525. (try_for_range, ":i_stack", 0, ":num_stacks"),
  28526. (party_stack_get_troop_id, ":stack_troop_id", "p_collective_friends", ":i_stack"),
  28527. (try_begin),
  28528. #(troop_set_slot, ":stack_troop_id", slot_troop_player_routed_agents, 0),
  28529. #(troop_set_slot, ":stack_troop_id", slot_troop_enemy_routed_agents, 0),
  28530. (troop_set_slot, ":stack_troop_id", slot_troop_ally_routed_agents, 0),
  28531. (try_end),
  28532. (try_end),
  28533.  
  28534. (party_get_num_companion_stacks, ":num_stacks", "p_collective_enemy"),
  28535. (try_for_range, ":i_stack", 0, ":num_stacks"),
  28536. (party_stack_get_troop_id, ":stack_troop_id", "p_collective_enemy", ":i_stack"),
  28537. (try_begin),
  28538. #(troop_set_slot, ":stack_troop_id", slot_troop_player_routed_agents, 0),
  28539. (troop_set_slot, ":stack_troop_id", slot_troop_enemy_routed_agents, 0),
  28540. #(troop_set_slot, ":stack_troop_id", slot_troop_ally_routed_agents, 0),
  28541. (try_end),
  28542. (try_end),
  28543.  
  28544. (try_for_range, ":cur_faction", fac_kingdom_1, fac_kingdoms_end),
  28545. (faction_set_slot, ":cur_faction", slot_faction_num_routed_agents, 0),
  28546. (try_end),
  28547.  
  28548. (assign, "$routed_party_added", 0), #new
  28549. (party_clear, "p_total_enemy_casualties"), #new
  28550.  
  28551. # (try_begin),
  28552. # (gt, "$g_ally_party", 0),
  28553. # (call_script, "script_party_copy", "p_ally_party_backup", "p_collective_ally"),
  28554. # (call_script, "script_party_calculate_strength", "p_collective_ally"),
  28555. # (assign, "$g_starting_strength_ally_party", reg0),
  28556. # (store_add, ":starting_strength_factor_combined","$g_starting_strength_ally_party","$g_starting_strength_main_party"),
  28557. # (store_mul, "$g_strength_contribution_of_player","$g_starting_strength_main_party", 80), #reduce contribution if we are helping someone.
  28558. # (val_div, "$g_strength_contribution_of_player",":starting_strength_factor_combined"),
  28559. # (try_end),
  28560. ]),
  28561.  
  28562. # script_calculate_renown_value
  28563. # Input: arg1 = troop_no
  28564. # Output: fills $battle_renown_value
  28565. ("calculate_renown_value",
  28566. [
  28567. (call_script, "script_party_calculate_strength", "p_main_party", 0),
  28568. (assign, ":main_party_strength", reg0),
  28569. (call_script, "script_party_calculate_strength", "p_collective_enemy", 0),
  28570. (assign, ":enemy_strength", reg0),
  28571. (call_script, "script_party_calculate_strength", "p_collective_friends", 0),
  28572. (assign, ":friends_strength", reg0),
  28573.  
  28574. (val_add, ":friends_strength", 1),
  28575. (store_mul, ":enemy_strength_ratio", ":enemy_strength", 100),
  28576. (val_div, ":enemy_strength_ratio", ":friends_strength"),
  28577.  
  28578. (assign, ":renown_val", ":enemy_strength"),
  28579. (val_mul, ":renown_val", ":enemy_strength_ratio"),
  28580. (val_div, ":renown_val", 100),
  28581.  
  28582. (val_mul, ":renown_val", ":main_party_strength"),
  28583. (val_div, ":renown_val",":friends_strength"),
  28584.  
  28585. (store_div, "$battle_renown_value", ":renown_val", 5),
  28586. (val_min, "$battle_renown_value", 2500),
  28587. (convert_to_fixed_point, "$battle_renown_value"),
  28588. (store_sqrt, "$battle_renown_value", "$battle_renown_value"),
  28589. (convert_from_fixed_point, "$battle_renown_value"),
  28590. (assign, reg8, "$battle_renown_value"),
  28591. (display_message, "@Renown value for this battle is {reg8}.",0xFFFFFFFF),
  28592. ]),
  28593.  
  28594.  
  28595. ## # script_calculate_weekly_wage_for_player
  28596. ## # Input: none
  28597. ## # Output: none
  28598. ## ("calculate_weekly_wage_for_player",
  28599. ## [
  28600. ## (call_script, "script_calculate_weekly_party_wage", "p_main_party"),
  28601. ## (assign, ":result", reg0),
  28602. ## (try_for_parties, ":party_no"),
  28603. ## (store_faction_of_party, ":party_faction", ":party_no"),
  28604. ## (eq, ":party_faction", "fac_player_supporters_faction"),
  28605. ## (call_script, "script_calculate_weekly_party_wage", ":party_no"),
  28606. ## (val_add, ":result", reg0),
  28607. ## (try_end),
  28608. ## (assign, reg0, ":result"),
  28609. ## ]),
  28610.  
  28611.  
  28612. # script_get_first_agent_with_troop_id
  28613. # Input: arg1 = troop_no
  28614. # Output: agent_id
  28615. ("cf_get_first_agent_with_troop_id",
  28616. [
  28617. (store_script_param_1, ":troop_no"),
  28618. # (store_script_param_2, ":agent_no_to_begin_searching_after"),
  28619. (assign, ":result", -1),
  28620. (try_for_agents, ":cur_agent"),
  28621. (eq, ":result", -1),
  28622. ## (try_begin),
  28623. ## (eq, ":cur_agent", ":agent_no_to_begin_searching_after"),
  28624. ## (assign, ":agent_no_to_begin_searching_after", -1),
  28625. ## (try_end),
  28626. ## (eq, ":agent_no_to_begin_searching_after", -1),
  28627. (agent_get_troop_id, ":cur_troop_no", ":cur_agent"),
  28628. (eq, ":cur_troop_no", ":troop_no"),
  28629. (assign, ":result", ":cur_agent"),
  28630. (try_end),
  28631. (assign, reg0, ":result"),
  28632. (neq, reg0, -1),
  28633. ]),
  28634.  
  28635.  
  28636. # script_cf_team_get_average_position_of_agents_with_type_to_pos1
  28637. # Input: arg1 = team_no, arg2 = class_no (grc_everyone, grc_infantry, grc_cavalry, grc_archers, grc_heroes)
  28638. # Output: none, pos1 = average_position (0,0,0 if there are no matching agents)
  28639. ("cf_team_get_average_position_of_agents_with_type_to_pos1",
  28640. [
  28641. (store_script_param_1, ":team_no"),
  28642. (store_script_param_2, ":division_no"),
  28643. (assign, ":total_pos_x", 0),
  28644. (assign, ":total_pos_y", 0),
  28645. (assign, ":total_pos_z", 0),
  28646. (assign, ":num_agents", 0),
  28647. (set_fixed_point_multiplier, 100),
  28648. (try_for_agents, ":cur_agent"),
  28649. (agent_is_alive, ":cur_agent"),
  28650. (agent_is_human, ":cur_agent"),
  28651. (agent_get_team, ":cur_team_no", ":cur_agent"),
  28652. (eq, ":cur_team_no", ":team_no"),
  28653. (agent_get_division, ":cur_agent_division", ":cur_agent"),
  28654. (this_or_next|eq, ":division_no", grc_everyone),
  28655. (eq, ":division_no", ":cur_agent_division"),
  28656. (agent_get_position, pos1, ":cur_agent"),
  28657. (position_get_x, ":cur_pos_x", pos1),
  28658. (val_add, ":total_pos_x", ":cur_pos_x"),
  28659. (position_get_y, ":cur_pos_y", pos1),
  28660. (val_add, ":total_pos_y", ":cur_pos_y"),
  28661. (position_get_z, ":cur_pos_z", pos1),
  28662. (val_add, ":total_pos_z", ":cur_pos_z"),
  28663. (val_add, ":num_agents", 1),
  28664. (try_end),
  28665. (gt, ":num_agents", 1),
  28666. (val_div, ":total_pos_x", ":num_agents"),
  28667. (val_div, ":total_pos_y", ":num_agents"),
  28668. (val_div, ":total_pos_z", ":num_agents"),
  28669. (init_position, pos1),
  28670. (position_move_x, pos1, ":total_pos_x"),
  28671. (position_move_y, pos1, ":total_pos_y"),
  28672. (position_move_z, pos1, ":total_pos_z"),
  28673. ]),
  28674.  
  28675. # script_cf_turn_windmill_fans
  28676. # Input: arg1 = instance_no (none = 0)
  28677. # Output: none
  28678. ("cf_turn_windmill_fans",
  28679. [(store_script_param_1, ":instance_no"),
  28680. (scene_prop_get_instance, ":windmill_fan_object", "spr_windmill_fan_turning", ":instance_no"),
  28681. (ge, ":windmill_fan_object", 0),
  28682. (prop_instance_get_position, pos1, ":windmill_fan_object"),
  28683. (position_rotate_y, pos1, 10),
  28684. (prop_instance_animate_to_position, ":windmill_fan_object", pos1, 100),
  28685. (val_add, ":instance_no", 1),
  28686. (call_script, "script_cf_turn_windmill_fans", ":instance_no"),
  28687. ]),
  28688.  
  28689. # script_print_party_members
  28690. # Input: arg1 = party_no
  28691. # Output: s51 = output string. "noone" if the party is empty
  28692. ("print_party_members",
  28693. [
  28694. (store_script_param_1, ":party_no"),
  28695. (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
  28696. (assign, reg10, ":num_stacks"),
  28697. (try_for_range, ":i_stack", 0, ":num_stacks"),
  28698. (party_stack_get_troop_id, ":stack_troop",":party_no",":i_stack"),
  28699. (troop_is_hero, ":stack_troop"),
  28700. (try_begin),
  28701. (eq, ":i_stack", 0),
  28702. (str_store_troop_name, s51, ":stack_troop"),
  28703. (try_end),
  28704. (str_store_troop_name, s52, ":stack_troop"),
  28705. (try_begin),
  28706. (eq, ":i_stack", 1),
  28707. (str_store_string, s51, "str_s52_and_s51"),
  28708. (else_try),
  28709. (gt, ":i_stack", 1),
  28710. (str_store_string, s51, "str_s52_comma_s51"),
  28711. (try_end),
  28712. (try_end),
  28713. (try_begin),
  28714. (eq, ":num_stacks", 0),
  28715. (str_store_string, s51, "str_noone"),
  28716. (try_end),
  28717. ]),
  28718.  
  28719. # script_round_value
  28720. # Input: arg1 = value
  28721. # Output: reg0 = rounded_value
  28722. ("round_value",
  28723. [
  28724. (store_script_param_1, ":value"),
  28725. (try_begin),
  28726. (lt, ":value", 100),
  28727. (neq, ":value", 0),
  28728. (val_add, ":value", 5),
  28729. (val_div, ":value", 10),
  28730. (val_mul, ":value", 10),
  28731. (try_begin),
  28732. (eq, ":value", 0),
  28733. (assign, ":value", 5),
  28734. (try_end),
  28735. (else_try),
  28736. (lt, ":value", 300),
  28737. (val_add, ":value", 25),
  28738. (val_div, ":value", 50),
  28739. (val_mul, ":value", 50),
  28740. (else_try),
  28741. (val_add, ":value", 50),
  28742. (val_div, ":value", 100),
  28743. (val_mul, ":value", 100),
  28744. (try_end),
  28745. (assign, reg0, ":value"),
  28746. ]),
  28747.  
  28748.  
  28749. # script_change_banners_and_chest
  28750. # Input: none
  28751. # Output: none
  28752. ("change_banners_and_chest",
  28753. [(party_get_slot, ":cur_leader", "$g_encountered_party", slot_town_lord),
  28754. (try_begin),
  28755. (ge, ":cur_leader", 0),
  28756. #normal_banner_begin
  28757. (troop_get_slot, ":troop_banner_object", ":cur_leader", slot_troop_banner_scene_prop),
  28758. (gt, ":troop_banner_object", 0),
  28759. (replace_scene_props, banner_scene_props_begin, ":troop_banner_object"),
  28760. (else_try),
  28761. (replace_scene_props, banner_scene_props_begin, "spr_empty"),
  28762. (try_end),
  28763. (try_begin),
  28764. (neq, ":cur_leader", "trp_player"),
  28765. (replace_scene_props, "spr_player_chest", "spr_locked_player_chest"),
  28766. (try_end),
  28767. ]),
  28768.  
  28769.  
  28770. # script_remove_siege_objects
  28771. # Input: none
  28772. # Output: none
  28773. ("remove_siege_objects",
  28774. [
  28775. (replace_scene_props, "spr_battlement_a_destroyed", "spr_battlement_a"),
  28776. (replace_scene_props, "spr_snowy_castle_battlement_a_destroyed", "spr_snowy_castle_battlement_a"),
  28777. (replace_scene_props, "spr_castle_e_battlement_a_destroyed", "spr_castle_e_battlement_a"),
  28778. (replace_scene_props, "spr_castle_battlement_a_destroyed", "spr_castle_battlement_a"),
  28779. (replace_scene_props, "spr_castle_battlement_b_destroyed", "spr_castle_battlement_b"),
  28780. (replace_scene_props, "spr_earth_wall_a2", "spr_earth_wall_a"),
  28781. (replace_scene_props, "spr_earth_wall_b2", "spr_earth_wall_b"),
  28782. (replace_scene_props, "spr_belfry_platform_b", "spr_empty"),
  28783. (replace_scene_props, "spr_belfry_platform_a", "spr_empty"),
  28784. (replace_scene_props, "spr_belfry_a", "spr_empty"),
  28785. (replace_scene_props, "spr_belfry_wheel", "spr_empty"),
  28786. (replace_scene_props, "spr_siege_ladder_move_6m", "spr_empty"),
  28787. (replace_scene_props, "spr_siege_ladder_move_8m", "spr_empty"),
  28788. (replace_scene_props, "spr_siege_ladder_move_10m", "spr_empty"),
  28789. (replace_scene_props, "spr_siege_ladder_move_12m", "spr_empty"),
  28790. (replace_scene_props, "spr_siege_ladder_move_14m", "spr_empty"),
  28791. (replace_scene_props, "spr_siege_ladder_12m", "spr_empty"),
  28792. (replace_scene_props, "spr_siege_ladder_14m", "spr_empty"),
  28793. (replace_scene_props, "spr_mangonel", "spr_empty"),
  28794. (replace_scene_props, "spr_trebuchet_old", "spr_empty"),
  28795. (replace_scene_props, "spr_trebuchet_new", "spr_empty"),
  28796. (replace_scene_props, "spr_stone_ball", "spr_empty"),
  28797. (replace_scene_props, "spr_Village_fire_big", "spr_empty"),
  28798. ]),
  28799.  
  28800. # script_describe_relation_to_s63
  28801. # Input: arg1 = relation (-100 .. 100)
  28802. # Output: none
  28803. ("describe_relation_to_s63",
  28804. [(store_script_param_1, ":relation"),
  28805. (store_add, ":normalized_relation", ":relation", 100),
  28806. (val_add, ":normalized_relation", 5),
  28807. (store_div, ":str_offset", ":normalized_relation", 10),
  28808. (val_clamp, ":str_offset", 0, 20),
  28809. (store_add, ":str_id", "str_relation_mnus_100", ":str_offset"),
  28810. (str_store_string, s63, ":str_id"),
  28811. ]),
  28812.  
  28813. # script_describe_center_relation_to_s3
  28814. # Input: arg1 = relation (-100 .. 100)
  28815. # Output: none
  28816. ("describe_center_relation_to_s3",
  28817. [(store_script_param_1, ":relation"),
  28818. (store_add, ":normalized_relation", ":relation", 100),
  28819. (val_add, ":normalized_relation", 5),
  28820. (store_div, ":str_offset", ":normalized_relation", 10),
  28821. (val_clamp, ":str_offset", 0, 20),
  28822. (store_add, ":str_id", "str_center_relation_mnus_100", ":str_offset"),
  28823. (str_store_string, s3, ":str_id"),
  28824. ]),
  28825.  
  28826.  
  28827. # script_center_ambiance_sounds
  28828. # Input: none
  28829. # Output: none
  28830. # to be called every two seconds
  28831. ("center_ambiance_sounds",
  28832. [
  28833. (assign, ":sound_1", -1),
  28834. (assign, ":sound_2", -1),
  28835. (assign, ":sound_3", -1),
  28836. (assign, ":sound_4", -1),
  28837. (assign, ":sound_5", -1),
  28838. (try_begin),
  28839. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
  28840. (try_begin),
  28841. (neg|is_currently_night),
  28842. (assign, ":sound_3", "snd_distant_dog_bark"),
  28843. (assign, ":sound_3", "snd_distant_chicken"),
  28844. (else_try),
  28845. (assign, ":sound_1", "snd_distant_dog_bark"),
  28846. (assign, ":sound_2", "snd_distant_owl"),
  28847. (try_end),
  28848. (else_try),
  28849. (party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
  28850. (try_begin),
  28851. (neg|is_currently_night),
  28852. (assign, ":sound_1", "snd_distant_carpenter"),
  28853. (assign, ":sound_2", "snd_distant_blacksmith"),
  28854. (assign, ":sound_3", "snd_distant_dog_bark"),
  28855. (else_try),
  28856. (assign, ":sound_1", "snd_distant_dog_bark"),
  28857. (try_end),
  28858. (try_end),
  28859. (try_begin),
  28860. (store_random_in_range, ":r", 0, 7),
  28861. (try_begin),
  28862. (eq, ":r", 1),
  28863. (ge, ":sound_1", 0),
  28864. (play_sound, ":sound_1"),
  28865. (else_try),
  28866. (eq, ":r", 2),
  28867. (ge, ":sound_2", 0),
  28868. (play_sound, ":sound_2"),
  28869. (else_try),
  28870. (eq, ":r", 3),
  28871. (ge, ":sound_3", 0),
  28872. (play_sound, ":sound_3"),
  28873. (else_try),
  28874. (eq, ":r", 4),
  28875. (ge, ":sound_4", 0),
  28876. (play_sound, ":sound_4"),
  28877. (else_try),
  28878. (eq, ":r", 5),
  28879. (ge, ":sound_5", 0),
  28880. (play_sound, ":sound_5"),
  28881. (try_end),
  28882. (try_end),
  28883. ]),
  28884.  
  28885. # script_center_set_walker_to_type
  28886. # Input: arg1 = center_no, arg2 = walker_no, arg3 = walker_type,
  28887. # Output: none
  28888. ("center_set_walker_to_type",
  28889. [
  28890. (store_script_param, ":center_no", 1),
  28891. (store_script_param, ":walker_no", 2),
  28892. (store_script_param, ":walker_type", 3),
  28893. (store_add, ":type_slot", slot_center_walker_0_type, ":walker_no"),
  28894. (party_set_slot, ":center_no", ":type_slot", ":walker_type"),
  28895. (party_get_slot, ":center_faction", ":center_no", slot_center_original_faction),
  28896. (faction_get_slot, ":center_culture", ":center_faction", slot_faction_culture),
  28897. (store_random_in_range, ":walker_troop_slot", 0, 2),
  28898. (try_begin),
  28899. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  28900. (val_add, ":walker_troop_slot", slot_faction_village_walker_male_troop),
  28901. (else_try),
  28902. (val_add, ":walker_troop_slot", slot_faction_town_walker_male_troop),
  28903. (try_end),
  28904. (try_begin),
  28905. (eq,":walker_type", walkert_spy),
  28906. (assign,":original_walker_slot",":walker_troop_slot"),
  28907. (val_add,":walker_troop_slot",4), # select spy troop id slot
  28908. (try_end),
  28909. (faction_get_slot, ":walker_troop_id", ":center_culture", ":walker_troop_slot"),
  28910. (try_begin),
  28911. (eq,":walker_type", walkert_spy),
  28912. (faction_get_slot, ":original_walker", ":center_culture", ":original_walker_slot"),
  28913. # restore spy inventory
  28914. (try_for_range,":item_no","itm_horse_meat","itm_wooden_stick"),
  28915. (store_item_kind_count,":num_items",":item_no",":original_walker"),
  28916. (ge,":num_items",1),
  28917. (store_item_kind_count,":num_items",":item_no",":walker_troop_id"),
  28918. (lt,":num_items",1),
  28919. (troop_add_items,":walker_troop_id",":item_no",1),
  28920. (try_end),
  28921. # determine spy recognition item
  28922. (store_random_in_range,":spy_item_type",itp_type_head_armor,itp_type_hand_armor),
  28923. (assign,":num",0),
  28924. (try_for_range,":item_no","itm_horse_meat","itm_wooden_stick"),
  28925. (store_item_kind_count,":num_items",":item_no",":walker_troop_id"),
  28926. (ge,":num_items",1),
  28927. (item_get_type, ":itp", ":item_no"),
  28928. (eq,":itp",":spy_item_type"),
  28929. (val_add,":num",1),
  28930. (troop_remove_items,":walker_troop_id",":item_no",":num_items"),
  28931. (try_end),
  28932. (store_random_in_range,":random_item",0,":num"),
  28933. (assign,":num",-1),
  28934. (try_for_range,":item_no","itm_horse_meat","itm_wooden_stick"),
  28935. (store_item_kind_count,":num_items",":item_no",":original_walker"),
  28936. (ge,":num_items",1),
  28937. (item_get_type, ":itp", ":item_no"),
  28938. (eq,":itp",":spy_item_type"),
  28939. (val_add,":num",1),
  28940. (eq,":num",":random_item"),
  28941. (troop_add_items,":walker_troop_id",":item_no",1),
  28942. (assign,":spy_item",":item_no"),
  28943. (try_end),
  28944. (assign,"$spy_item_worn",":spy_item"),
  28945. (assign,"$spy_quest_troop",":walker_troop_id"),
  28946. (troop_equip_items,":walker_troop_id"),
  28947. (try_end),
  28948. (store_add, ":troop_slot", slot_center_walker_0_troop, ":walker_no"),
  28949. (party_set_slot, ":center_no", ":troop_slot", ":walker_troop_id"),
  28950. (store_random_in_range, ":walker_dna", 0, 1000000),
  28951. (store_add, ":dna_slot", slot_center_walker_0_dna, ":walker_no"),
  28952. (party_set_slot, ":center_no", ":dna_slot", ":walker_dna"),
  28953. ]),
  28954.  
  28955.  
  28956. # script_cf_center_get_free_walker
  28957. # Input: arg1 = center_no
  28958. # Output: reg0 = walker no (can fail)
  28959. ("cf_center_get_free_walker",
  28960. [
  28961. (store_script_param, ":center_no", 1),
  28962. (assign, ":num_free_walkers", 0),
  28963. (try_for_range, ":walker_no", 0, num_town_walkers),
  28964. (store_add, ":type_slot", slot_center_walker_0_type, ":walker_no"),
  28965. (party_slot_eq, ":center_no", ":type_slot", walkert_default),
  28966. (val_add, ":num_free_walkers", 1),
  28967. (try_end),
  28968. (gt, ":num_free_walkers", 0),
  28969. (assign, reg0, -1),
  28970. (store_random_in_range, ":random_rank", 0, ":num_free_walkers"),
  28971. (try_for_range, ":walker_no", 0, num_town_walkers),
  28972. (store_add, ":type_slot", slot_center_walker_0_type, ":walker_no"),
  28973. (party_slot_eq, ":center_no", ":type_slot", walkert_default),
  28974. (val_sub, ":num_free_walkers", 1),
  28975. (eq, ":num_free_walkers", ":random_rank"),
  28976. (assign, reg0, ":walker_no"),
  28977. (try_end),
  28978. ]),
  28979.  
  28980. # script_center_remove_walker_type_from_walkers
  28981. # Input: arg1 = center_no, arg2 = walker_type,
  28982. # Output: reg0 = 1 if comment found, 0 otherwise; s61 will contain comment string if found
  28983. ("center_remove_walker_type_from_walkers",
  28984. [
  28985. (store_script_param, ":center_no", 1),
  28986. (store_script_param, ":walker_type", 2),
  28987. (try_for_range, ":walker_no", 0, num_town_walkers),
  28988. (store_add, ":type_slot", slot_center_walker_0_type, ":walker_no"),
  28989. (party_slot_eq, ":center_no", ":type_slot", ":walker_type"),
  28990. (call_script, "script_center_set_walker_to_type", ":center_no", ":walker_no", walkert_default),
  28991. (try_end),
  28992. ]),
  28993.  
  28994.  
  28995. # script_init_town_walkers
  28996. # Input: none
  28997. # Output: none
  28998. ("init_town_walkers",
  28999. [
  29000. (try_begin),
  29001. (eq, "$town_nighttime", 0),
  29002. (try_for_range, ":walker_no", 0, num_town_walkers),
  29003. (store_add, ":troop_slot", slot_center_walker_0_troop, ":walker_no"),
  29004. (party_get_slot, ":walker_troop_id", "$current_town", ":troop_slot"),
  29005. (gt, ":walker_troop_id", 0),
  29006. (store_add, ":entry_no", town_walker_entries_start, ":walker_no"),
  29007. (set_visitor, ":entry_no", ":walker_troop_id"),
  29008. (try_end),
  29009. (try_end),
  29010. ]),
  29011.  
  29012.  
  29013. # script_cf_enter_center_location_bandit_check
  29014. # Input: none
  29015. # Output: none
  29016. ("cf_enter_center_location_bandit_check",
  29017. [
  29018. (neq, "$town_nighttime", 0),
  29019. (party_slot_ge, "$current_town", slot_center_has_bandits, 1),
  29020. (eq, "$g_defending_against_siege", 0),#Skip if the center is under siege (because of resting)
  29021. (eq, "$sneaked_into_town", 0),#Skip if sneaked
  29022. (try_begin),
  29023. (party_slot_eq, "$current_town", slot_party_type, spt_village),
  29024. (party_get_slot, ":cur_scene", "$current_town", slot_castle_exterior),
  29025. (else_try),
  29026. (party_get_slot, ":cur_scene", "$current_town", slot_town_center),
  29027. (try_end),
  29028. (modify_visitors_at_site, ":cur_scene"),
  29029. (reset_visitors),
  29030. (party_get_slot, ":bandit_troop", "$current_town", slot_center_has_bandits),
  29031. (store_character_level, ":level", "trp_player"),
  29032.  
  29033. (set_jump_mission, "mt_bandits_at_night"),
  29034. (try_begin),
  29035. (party_slot_eq, "$current_town", slot_party_type, spt_village),
  29036. (assign, ":spawn_amount", 2),
  29037. (store_div, ":level_fac", ":level", 10),
  29038. (val_add, ":spawn_amount", ":level_fac"),
  29039. (try_for_range, ":unused", 0, 3),
  29040. (gt, ":level", 10),
  29041. (store_random_in_range, ":random_no", 0, 100),
  29042. (lt, ":random_no", ":level"),
  29043. (val_add, ":spawn_amount", 1),
  29044. (try_end),
  29045. (set_visitors, 4, ":bandit_troop", ":spawn_amount"),
  29046. (assign, "$num_center_bandits", ":spawn_amount"),
  29047. (set_jump_entry, 2),
  29048. (else_try),
  29049. (assign, ":spawn_amount", 1),
  29050. (assign, "$num_center_bandits", 0),
  29051. (try_begin),
  29052. (gt, ":level", 15),
  29053. (store_random_in_range, ":random_no", 0, 100),
  29054. (lt, ":random_no", ":level"),
  29055. (assign, ":spawn_amount", 2),
  29056. (try_end),
  29057. (val_add, "$num_center_bandits", ":spawn_amount"),
  29058. (set_visitors, 11, ":bandit_troop", ":spawn_amount"),
  29059. (assign, ":spawn_amount", 1),
  29060. (try_begin),
  29061. (gt, ":level", 20),
  29062. (store_random_in_range, ":random_no", 0, 100),
  29063. (lt, ":random_no", ":level"),
  29064. (assign, ":spawn_amount", 2),
  29065. (try_end),
  29066. (set_visitors, 27, ":bandit_troop", ":spawn_amount"),
  29067. (val_add, "$num_center_bandits", ":spawn_amount"),
  29068. (try_begin),
  29069. (gt, ":level", 9),
  29070. (assign, ":spawn_amount", 1),
  29071. (try_begin),
  29072. (gt, ":level", 25),
  29073. (store_random_in_range, ":random_no", 0, 100),
  29074. (lt, ":random_no", ":level"),
  29075. (assign, ":spawn_amount", 2),
  29076. (try_end),
  29077. (set_visitors, 28, ":bandit_troop", ":spawn_amount"),
  29078. (val_add, "$num_center_bandits", ":spawn_amount"),
  29079. (try_end),
  29080. (assign, "$town_entered", 1),
  29081. (assign, "$all_doors_locked", 1),
  29082. (try_end),
  29083.  
  29084. (display_message, "@You have run into a trap!", 0xFFFF2222),
  29085. (display_message, "@You are attacked by a group of bandits!", 0xFFFF2222),
  29086.  
  29087. (jump_to_scene, ":cur_scene"),
  29088. (change_screen_mission),
  29089. ]),
  29090.  
  29091. # script_init_town_agent
  29092. # Input: none
  29093. # Output: none
  29094. ("init_town_agent",
  29095. [
  29096. (store_script_param, ":agent_no", 1),
  29097. (agent_get_troop_id, ":troop_no", ":agent_no"),
  29098. (set_fixed_point_multiplier, 100),
  29099. (assign, ":stand_animation", -1),
  29100. (try_begin),
  29101. (this_or_next|is_between, ":troop_no", armor_merchants_begin, armor_merchants_end),
  29102. (is_between, ":troop_no", weapon_merchants_begin, weapon_merchants_end),
  29103. (try_begin),
  29104. (troop_get_type, ":cur_troop_gender", ":troop_no"),
  29105. (eq, ":cur_troop_gender", 0),
  29106. (agent_set_animation, ":agent_no", "anim_stand_townguard"),
  29107. (else_try),
  29108. (agent_set_animation, ":agent_no", "anim_stand_townguard"),
  29109. (end_try),
  29110. (else_try),
  29111. (is_between, ":troop_no", kingdom_ladies_begin, kingdom_ladies_end),
  29112. (assign, ":stand_animation", "anim_stand_lady"),
  29113. (else_try),
  29114. (is_between, ":troop_no", active_npcs_begin, active_npcs_end),
  29115. (assign, ":stand_animation", "anim_stand_lord"),
  29116. (else_try),
  29117. (is_between, ":troop_no", soldiers_begin, soldiers_end),
  29118. (assign, ":stand_animation", "anim_stand_townguard"),
  29119. (try_end),
  29120. (try_begin),
  29121. (ge, ":stand_animation", 0),
  29122. (agent_set_stand_animation, ":agent_no", ":stand_animation"),
  29123. (agent_set_animation, ":agent_no", ":stand_animation"),
  29124. (store_random_in_range, ":random_no", 0, 100),
  29125. (agent_set_animation_progress, ":agent_no", ":random_no"),
  29126. (try_end),
  29127. ]),
  29128.  
  29129. # script_init_town_walker_agents
  29130. # Input: none
  29131. # Output: none
  29132. ("init_town_walker_agents",
  29133. [(assign, ":num_walkers", 0),
  29134. (try_for_agents, ":cur_agent"),
  29135. (agent_get_troop_id, ":cur_troop", ":cur_agent"),
  29136. (is_between, ":cur_troop", walkers_begin, walkers_end),
  29137. (val_add, ":num_walkers", 1),
  29138. (agent_get_position, pos1, ":cur_agent"),
  29139. (try_for_range, ":i_e_p", 9, 40),#Entry points
  29140. (entry_point_get_position, pos2, ":i_e_p"),
  29141. (get_distance_between_positions, ":distance", pos1, pos2),
  29142. (lt, ":distance", 200),
  29143. (agent_set_slot, ":cur_agent", 0, ":i_e_p"),
  29144. (try_end),
  29145. (call_script, "script_set_town_walker_destination", ":cur_agent"),
  29146. (try_end),
  29147. ]),
  29148.  
  29149. # script_agent_get_town_walker_details
  29150. # This script assumes this is one of town walkers.
  29151. # Input: agent_id
  29152. # Output: reg0: town_walker_type, reg1: town_walker_dna
  29153. ("agent_get_town_walker_details",
  29154. [(store_script_param, ":agent_no", 1),
  29155. (agent_get_entry_no, ":entry_no", ":agent_no"),
  29156. (store_sub, ":walker_no", ":entry_no", town_walker_entries_start),
  29157.  
  29158. (store_add, ":type_slot", slot_center_walker_0_type, ":walker_no"),
  29159. (party_get_slot, ":walker_type", "$current_town", ":type_slot"),
  29160. (store_add, ":dna_slot", slot_center_walker_0_dna, ":walker_no"),
  29161. (party_get_slot, ":walker_dna", "$current_town", ":dna_slot"),
  29162. (assign, reg0, ":walker_type"),
  29163. (assign, reg1, ":walker_dna"),
  29164. (assign, reg2, ":walker_no"),
  29165. ]),
  29166.  
  29167.  
  29168. ("town_walker_occupation_string_to_s14",
  29169. [
  29170. (store_script_param, ":agent_no", 1),
  29171.  
  29172. #Cairo, approx 1799:
  29173. #adult males = 114,000
  29174. #military, 10,400
  29175. #civil, including religious 5,000
  29176. #commerce 3,500
  29177. #merchants 4,500
  29178. #coffee shops, 1,500 (maybe broaden to inns and taverns)
  29179. #artisans 21,800
  29180. #workmen 4,300
  29181. #itinerants 8,600
  29182. #servants (inc water carriers) 26,400
  29183. (assign, ":check_for_good_price", 0),
  29184. (str_store_string, s14, "str_i_take_what_work_i_can_sirmadame_i_carry_water_or_help_the_merchants_with_their_loads_or_help_build_things_if_theres_things_to_be_built"),
  29185.  
  29186. (call_script, "script_agent_get_town_walker_details", ":agent_no"),
  29187. (assign, ":type", reg0),
  29188. (assign, ":walker_dna", reg1),
  29189.  
  29190. (assign, ":item", -1),
  29191. (assign, ":total_item_production", 0),
  29192. (try_for_range, ":trade_good", trade_goods_begin, trade_goods_end),
  29193. (call_script, "script_center_get_production", "$g_encountered_party", ":trade_good"),
  29194. (val_add, ":total_item_production", reg0),
  29195. (try_end),
  29196.  
  29197. (val_max, ":total_item_production", 1),
  29198.  
  29199. (store_mod, ":semi_random_number", ":walker_dna", ":total_item_production"),
  29200.  
  29201.  
  29202. (try_begin),
  29203. (eq, "$cheat_mode", 1),
  29204. (assign, reg4, ":walker_dna"),
  29205. (assign, reg5, ":total_item_production"),
  29206. (assign, reg7, ":semi_random_number"),
  29207. (display_message, "str_dna_reg4_total_production_reg5_modula_reg7"),
  29208. (try_end),
  29209.  
  29210. (try_for_range, ":trade_good", trade_goods_begin, trade_goods_end),
  29211. (gt, ":semi_random_number", -1),
  29212. (call_script, "script_center_get_production", "$g_encountered_party", ":trade_good"),
  29213. (val_sub, ":semi_random_number", reg0),
  29214. (lt, ":semi_random_number", 0),
  29215. (try_begin),
  29216. (eq, "$cheat_mode", 1),
  29217. (str_store_item_name, s9, ":trade_good"),
  29218. (display_message, "str_agent_produces_s9"),
  29219. (try_end),
  29220. (assign, ":item", ":trade_good"),
  29221. (try_end),
  29222.  
  29223.  
  29224. (try_begin),
  29225. (eq, ":type", walkert_needs_money),
  29226. (is_between, "$g_encountered_party", towns_begin, towns_end),
  29227. (str_store_string, s14, "str_im_not_doing_anything_sirmadame_theres_no_work_to_be_had_around_here_these_days"),
  29228. (else_try),
  29229. (eq, ":type", walkert_needs_money),
  29230. (str_store_string, s14, "str_im_not_doing_anything_sirmadame_i_have_no_land_of_my_own_and_theres_no_work_to_be_had_around_here_these_days"),
  29231. (else_try),
  29232. (eq, ":type", walkert_needs_money_helped),
  29233. (str_store_string, s14, "str_why_im_still_living_off_of_your_kindness_and_goodness_sirmadame_hopefully_there_will_be_work_shortly"),
  29234. (else_try),
  29235. (eq, ":item", "itm_grain"),
  29236. (is_between, "$g_encountered_party", towns_begin, towns_end),
  29237. (str_store_string, s14, "str_i_work_in_the_fields_just_outside_the_walls_where_they_grow_grain_we_dont_quite_grow_enough_to_meet_our_needs_though_and_have_to_import_grain_from_the_surrounding_countryside"),
  29238. (assign, ":check_for_good_price", 1),
  29239.  
  29240. (else_try),
  29241. (eq, ":item", "itm_grain"),
  29242. (str_store_string, s14, "str_i_work_mostly_in_the_fields_growing_grain_in_the_town_they_grind_it_to_make_bread_or_ale_and_we_can_also_boil_it_as_a_porridge"),
  29243. (assign, ":check_for_good_price", 1),
  29244.  
  29245. (else_try),
  29246. (eq, ":item", "itm_ale"),
  29247. (str_store_string, s14, "str_i_work_in_the_breweries_making_ale_the_poor_folk_drink_a_lot_of_it_as_its_cheaper_than_wine_we_make_it_with_grain_brought_in_from_the_countryside"),
  29248. (assign, ":check_for_good_price", 1),
  29249.  
  29250. (else_try),
  29251. (eq, ":item", "itm_bread"),
  29252. (str_store_string, s14, "str_i_work_in_a_mill_grinding_flour_to_make_bread_bread_is_cheap_keeps_well_and_fills_the_stomach"),
  29253. (assign, ":check_for_good_price", 1),
  29254.  
  29255. (else_try),
  29256. (eq, ":item", "itm_dried_meat"),
  29257. (str_store_string, s14, "str_i_tend_cattle_we_dry_and_salt_meat_to_preserve_it_and_make_cheese_from_the_milk"),
  29258. (assign, ":check_for_good_price", 1),
  29259.  
  29260. (else_try),
  29261. (eq, ":item", "itm_cheese"),
  29262. (str_store_string, s14, "str_i_tend_cattle_we_dry_and_salt_meat_to_preserve_it_and_make_cheese_from_the_milk_so_it_doesnt_spoil"),
  29263. (assign, ":check_for_good_price", 1),
  29264.  
  29265. (else_try),
  29266. (eq, ":item", "itm_butter"),
  29267. (str_store_string, s14, "str_i_tend_cattle_we_dry_and_salt_meat_to_preserve_it_and_make_cheese_from_the_milk_so_it_doesnt_spoil"),
  29268. (assign, ":check_for_good_price", 1),
  29269.  
  29270. (else_try),
  29271. (eq, ":item", "itm_wool"),
  29272. (str_store_string, s14, "str_i_tend_sheep_we_send_the_wool_to_the_cities_to_be_woven_into_cloth_and_make_mutton_sausage_when_we_cull_the_herds"),
  29273. (assign, ":check_for_good_price", 1),
  29274.  
  29275. (else_try),
  29276. (eq, ":item", "itm_sausages"),
  29277. (str_store_string, s14, "str_i_tend_sheep_we_send_the_wool_to_the_cities_to_be_woven_into_cloth_and_make_mutton_sausage_when_we_cull_the_herds"),
  29278. (assign, ":check_for_good_price", 1),
  29279.  
  29280. (else_try),
  29281. (eq, ":item", "itm_wool_cloth"),
  29282. (str_store_string, s14, "str_i_work_at_a_loom_spinning_cloth_from_wool_wool_is_some_of_the_cheapest_cloth_you_can_buy_but_it_will_still_keep_you_warm"),
  29283. (assign, ":check_for_good_price", 1),
  29284.  
  29285. (else_try),
  29286. (eq, ":item", "itm_smoked_fish"),
  29287. (str_store_string, s14, "str_i_crew_a_fishing_boat_we_salt_and_smoke_the_flesh_to_sell_it_far_inland"),
  29288. (assign, ":check_for_good_price", 1),
  29289.  
  29290. (else_try),
  29291. (eq, ":item", "itm_salt"),
  29292. (str_store_string, s14, "str_i_sift_salt_from_a_nearby_flat_they_need_salt_everywhere_to_preserve_meat_and_fish"),
  29293. (assign, ":check_for_good_price", 1),
  29294.  
  29295. (else_try),
  29296. (eq, ":item", "itm_iron"),
  29297. (str_store_string, s14, "str_i_mine_iron_from_a_vein_in_a_nearby_cliffside_they_use_it_to_make_tools_arms_and_other_goods"),
  29298. (assign, ":check_for_good_price", 1),
  29299.  
  29300. (else_try),
  29301. (eq, ":item", "itm_pottery"),
  29302. (str_store_string, s14, "str_i_make_pottery_which_people_use_to_store_grain_and_carry_water"),
  29303. (assign, ":check_for_good_price", 1),
  29304.  
  29305. (else_try),
  29306. (eq, ":item", "itm_tools"),
  29307. (str_store_string, s14, "str_trade_explanation_tools"),
  29308. (assign, ":check_for_good_price", 1),
  29309.  
  29310. (else_try),
  29311. (eq, ":item", "itm_oil"),
  29312. (str_store_string, s14, "str_trade_explanation_oil"),
  29313. (assign, ":check_for_good_price", 1),
  29314.  
  29315. (else_try),
  29316. (eq, ":item", "itm_linen"),
  29317. (str_store_string, s14, "str_trade_explanation_linen"),
  29318. (assign, ":check_for_good_price", 1),
  29319.  
  29320. (else_try),
  29321. (eq, ":item", "itm_velvet"),
  29322. (str_store_string, s14, "str_trade_explanation_velvet"),
  29323. (assign, ":check_for_good_price", 1),
  29324.  
  29325. (else_try),
  29326. (eq, ":item", "itm_spice"),
  29327. (str_store_string, s14, "str_trade_explanation_spice"),
  29328. (assign, ":check_for_good_price", 1),
  29329.  
  29330. (else_try),
  29331. (eq, ":item", "itm_apples"),
  29332. (str_store_string, s14, "str_trade_explanation_apples"),
  29333. (assign, ":check_for_good_price", 1),
  29334.  
  29335. (try_end),
  29336.  
  29337.  
  29338. (try_begin),
  29339. (eq, ":check_for_good_price", 1),
  29340.  
  29341. (assign, ":trade_destination", -1),
  29342. (store_skill_level, ":trade_skill", "skl_trade", "trp_player"),
  29343.  
  29344. (try_begin),
  29345. (is_between, "$g_encountered_party", villages_begin, villages_end),
  29346. (party_get_slot, ":trade_town", "$g_encountered_party", slot_village_market_town),
  29347. (else_try),
  29348. (assign, ":trade_town", "$g_encountered_party"),
  29349. (try_end),
  29350.  
  29351. (store_sub, ":item_to_price_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  29352. (store_add, ":cur_good_price_slot", ":item", ":item_to_price_slot"),
  29353. (party_get_slot, ":score_to_beat", ":trade_town", ":cur_good_price_slot"),
  29354. (val_add, ":score_to_beat", 400),
  29355. (store_mul, ":deduction_for_trade_skill", ":trade_skill", 35),
  29356. (try_begin),
  29357. (is_between, "$g_encountered_party", villages_begin, villages_end),
  29358. (val_add, ":score_to_beat", 200),
  29359. (try_end),
  29360. (val_sub, ":score_to_beat", ":deduction_for_trade_skill"),
  29361.  
  29362. (try_for_range, ":trade_route_slot", slot_town_trade_routes_begin, slot_town_trade_routes_end),
  29363. (party_get_slot, ":other_town", ":trade_town", ":trade_route_slot"),
  29364. (party_get_slot, ":price_in_other_town", ":other_town", ":cur_good_price_slot"),
  29365.  
  29366.  
  29367. (try_begin),
  29368. (eq, "$cheat_mode", 1),
  29369. (assign, reg4, ":price_in_other_town"),
  29370. (assign, reg5, ":score_to_beat"),
  29371. (str_store_party_name, s10, ":other_town"),
  29372. (display_message, "str_s10_has_reg4_needs_reg5"),
  29373. (try_end),
  29374.  
  29375. (gt, ":price_in_other_town", ":score_to_beat"),
  29376.  
  29377. (assign, ":trade_destination", ":other_town"),
  29378. (assign, ":score_to_beat", ":price_in_other_town"),
  29379. (try_end),
  29380.  
  29381. (is_between, ":trade_destination", centers_begin, centers_end),
  29382.  
  29383. (str_store_party_name, s15, ":trade_destination"),
  29384. (str_store_string, s14, "str_s14_i_hear_that_you_can_find_a_good_price_for_it_in_s15"),
  29385.  
  29386. #Reasons -- raw material
  29387. #Reason -- road cut
  29388. #Reason -- villages looted
  29389.  
  29390. (try_end),
  29391.  
  29392.  
  29393. ]),
  29394.  
  29395.  
  29396.  
  29397.  
  29398.  
  29399.  
  29400.  
  29401. # script_tick_town_walkers
  29402. # Input: none
  29403. # Output: none
  29404. ("tick_town_walkers",
  29405. [(try_for_agents, ":cur_agent"),
  29406. (agent_get_troop_id, ":cur_troop", ":cur_agent"),
  29407. (is_between, ":cur_troop", walkers_begin, walkers_end),
  29408. (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
  29409. (entry_point_get_position, pos1, ":target_entry_point"),
  29410. (try_begin),
  29411. (lt, ":target_entry_point", 32),
  29412. (init_position, pos2),
  29413. (position_set_y, pos2, 250),
  29414. (position_transform_position_to_parent, pos1, pos1, pos2),
  29415. (try_end),
  29416. (agent_get_position, pos2, ":cur_agent"),
  29417. (get_distance_between_positions, ":distance", pos1, pos2),
  29418. (lt, ":distance", 400),
  29419. (assign, ":random_no", 0),
  29420. (try_begin),
  29421. (lt, ":target_entry_point", 32),
  29422. (store_random_in_range, ":random_no", 0, 100),
  29423. (try_end),
  29424. (lt, ":random_no", 20),
  29425. (call_script, "script_set_town_walker_destination", ":cur_agent"),
  29426. (try_end),
  29427. ]),
  29428.  
  29429.  
  29430. # script_set_town_walker_destination
  29431. # Input: arg1 = agent_no
  29432. # Output: none
  29433. ("set_town_walker_destination",
  29434. [(store_script_param_1, ":agent_no"),
  29435. (assign, reg0, 9),
  29436. (assign, reg1, 10),
  29437. (assign, reg2, 12),
  29438. (assign, reg3, 32),
  29439. (assign, reg4, 33),
  29440. (assign, reg5, 34),
  29441. (assign, reg6, 35),
  29442. (assign, reg7, 36),
  29443. (assign, reg8, 37),
  29444. (assign, reg9, 38),
  29445. (assign, reg10, 39),
  29446. (try_for_agents, ":cur_agent"),
  29447. (agent_get_troop_id, ":cur_troop", ":cur_agent"),
  29448. (is_between, ":cur_troop", walkers_begin, walkers_end),
  29449. (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
  29450. (try_begin),
  29451. (eq, ":target_entry_point", 9),
  29452. (assign, reg0, 0),
  29453. (else_try),
  29454. (eq, ":target_entry_point", 10),
  29455. (assign, reg1, 0),
  29456. (else_try),
  29457. (eq, ":target_entry_point", 12),
  29458. (assign, reg2, 0),
  29459. (else_try),
  29460. (eq, ":target_entry_point", 32),
  29461. (assign, reg3, 0),
  29462. (else_try),
  29463. (eq, ":target_entry_point", 33),
  29464. (assign, reg4, 0),
  29465. (else_try),
  29466. (eq, ":target_entry_point", 34),
  29467. (assign, reg5, 0),
  29468. (else_try),
  29469. (eq, ":target_entry_point", 35),
  29470. (assign, reg6, 0),
  29471. (else_try),
  29472. (eq, ":target_entry_point", 36),
  29473. (assign, reg7, 0),
  29474. (else_try),
  29475. (eq, ":target_entry_point", 37),
  29476. (assign, reg8, 0),
  29477. (else_try),
  29478. (eq, ":target_entry_point", 38),
  29479. (assign, reg9, 0),
  29480. (else_try),
  29481. (eq, ":target_entry_point", 39),
  29482. (assign, reg10, 0),
  29483. (try_end),
  29484. (try_end),
  29485. (assign, ":try_limit", 100),
  29486. (assign, ":target_entry_point", 0),
  29487. (try_for_range, ":unused", 0, ":try_limit"),
  29488. (shuffle_range, 0, 11),
  29489. (gt, reg0, 0),
  29490. (assign, ":target_entry_point", reg0),
  29491. (assign, ":try_limit", 0),
  29492. (try_end),
  29493. (try_begin),
  29494. (gt, ":target_entry_point", 0),
  29495. (agent_set_slot, ":agent_no", 0, ":target_entry_point"),
  29496. (entry_point_get_position, pos1, ":target_entry_point"),
  29497. (try_begin),
  29498. (lt, ":target_entry_point", 32),
  29499. (init_position, pos2),
  29500. (position_set_y, pos2, 250),
  29501. (position_transform_position_to_parent, pos1, pos1, pos2),
  29502. (try_end),
  29503. (agent_set_scripted_destination, ":agent_no", pos1, 0),
  29504. (agent_set_speed_limit, ":agent_no", 5),
  29505. (try_end),
  29506. ]),
  29507.  
  29508. # script_town_init_doors
  29509. # Input: door_state (-1 = closed, 1 = open, 0 = use $town_nighttime)
  29510. # Output: none (required for siege mission templates)
  29511. ("town_init_doors",
  29512. [(store_script_param, ":door_state", 1),
  29513. (try_begin),
  29514. (assign, ":continue", 0),
  29515. (try_begin),
  29516. (eq, ":door_state", 1),
  29517. (assign, ":continue", 1),
  29518. (else_try),
  29519. (eq, ":door_state", 0),
  29520. (eq, "$town_nighttime", 0),
  29521. (assign, ":continue", 1),
  29522. (try_end),
  29523. (eq, ":continue", 1),# open doors
  29524. (assign, ":end_cond", 1),
  29525. (try_for_range, ":i_instance", 0, ":end_cond"),
  29526. (scene_prop_get_instance, ":object", "spr_towngate_door_left", ":i_instance"),
  29527. (ge, ":object", 0),
  29528. (val_add, ":end_cond", 1),
  29529. (prop_instance_get_position, pos1, ":object"),
  29530. (position_rotate_z, pos1, -100),
  29531. (prop_instance_animate_to_position, ":object", pos1, 1),
  29532. (try_end),
  29533. (assign, ":end_cond", 1),
  29534. (try_for_range, ":i_instance", 0, ":end_cond"),
  29535. (scene_prop_get_instance, ":object", "spr_towngate_rectangle_door_left", ":i_instance"),
  29536. (ge, ":object", 0),
  29537. (val_add, ":end_cond", 1),
  29538. (prop_instance_get_position, pos1, ":object"),
  29539. (position_rotate_z, pos1, -80),
  29540. (prop_instance_animate_to_position, ":object", pos1, 1),
  29541. (try_end),
  29542. (assign, ":end_cond", 1),
  29543. (try_for_range, ":i_instance", 0, ":end_cond"),
  29544. (scene_prop_get_instance, ":object", "spr_towngate_door_right", ":i_instance"),
  29545. (ge, ":object", 0),
  29546. (val_add, ":end_cond", 1),
  29547. (prop_instance_get_position, pos1, ":object"),
  29548. (position_rotate_z, pos1, 100),
  29549. (prop_instance_animate_to_position, ":object", pos1, 1),
  29550. (try_end),
  29551. (assign, ":end_cond", 1),
  29552. (try_for_range, ":i_instance", 0, ":end_cond"),
  29553. (scene_prop_get_instance, ":object", "spr_towngate_rectangle_door_right", ":i_instance"),
  29554. (ge, ":object", 0),
  29555. (val_add, ":end_cond", 1),
  29556. (prop_instance_get_position, pos1, ":object"),
  29557. (position_rotate_z, pos1, 80),
  29558. (prop_instance_animate_to_position, ":object", pos1, 1),
  29559. (try_end),
  29560. (try_end),
  29561. ]),
  29562.  
  29563. # script_siege_init_ai_and_belfry
  29564. # Input: none
  29565. # Output: none (required for siege mission templates)
  29566. ("siege_init_ai_and_belfry",
  29567. [(assign, "$cur_belfry_pos", 50),
  29568. (assign, ":cur_belfry_object_pos", slot_scene_belfry_props_begin),
  29569. (store_current_scene, ":cur_scene"),
  29570. #Collecting belfry objects
  29571. (try_for_range, ":i_belfry_instance", 0, 3),
  29572. (scene_prop_get_instance, ":belfry_object", "spr_belfry_a", ":i_belfry_instance"),
  29573. (ge, ":belfry_object", 0),
  29574. (scene_set_slot, ":cur_scene", ":cur_belfry_object_pos", ":belfry_object"),
  29575. (val_add, ":cur_belfry_object_pos", 1),
  29576. (try_end),
  29577. (try_for_range, ":i_belfry_instance", 0, 3),
  29578. (scene_prop_get_instance, ":belfry_object", "spr_belfry_platform_a", ":i_belfry_instance"),
  29579. (ge, ":belfry_object", 0),
  29580. (scene_set_slot, ":cur_scene", ":cur_belfry_object_pos", ":belfry_object"),
  29581. (val_add, ":cur_belfry_object_pos", 1),
  29582. (try_end),
  29583. (try_for_range, ":i_belfry_instance", 0, 3),
  29584. (scene_prop_get_instance, ":belfry_object", "spr_belfry_platform_b", ":i_belfry_instance"),
  29585. (ge, ":belfry_object", 0),
  29586. (scene_set_slot, ":cur_scene", ":cur_belfry_object_pos", ":belfry_object"),
  29587. (val_add, ":cur_belfry_object_pos", 1),
  29588. (try_end),
  29589. (assign, "$belfry_rotating_objects_begin", ":cur_belfry_object_pos"),
  29590. (try_for_range, ":i_belfry_instance", 0, 5),
  29591. (scene_prop_get_instance, ":belfry_object", "spr_belfry_wheel", ":i_belfry_instance"),
  29592. (ge, ":belfry_object", 0),
  29593. (scene_set_slot, ":cur_scene", ":cur_belfry_object_pos", ":belfry_object"),
  29594. (val_add, ":cur_belfry_object_pos", 1),
  29595. (try_end),
  29596. (assign, "$last_belfry_object_pos", ":cur_belfry_object_pos"),
  29597.  
  29598. #Lifting up the platform at the beginning
  29599. (try_begin),
  29600. (scene_prop_get_instance, ":belfry_object_to_rotate", "spr_belfry_platform_a", 0),
  29601. (try_end),
  29602.  
  29603. #Moving the belfry objects to their starting position
  29604. (entry_point_get_position,pos1,55),
  29605. (entry_point_get_position,pos3,50),
  29606. (try_for_range, ":i_belfry_object_pos", slot_scene_belfry_props_begin, "$last_belfry_object_pos"),
  29607. (assign, ":pos_no", pos_belfry_begin),
  29608. (val_add, ":pos_no", ":i_belfry_object_pos"),
  29609. (val_sub, ":pos_no", slot_scene_belfry_props_begin),
  29610. (scene_get_slot, ":cur_belfry_object", ":cur_scene", ":i_belfry_object_pos"),
  29611. (prop_instance_get_position, pos2, ":cur_belfry_object"),
  29612. (try_begin),
  29613. (eq, ":cur_belfry_object", ":belfry_object_to_rotate"),
  29614. (position_rotate_x, pos2, 90),
  29615. (try_end),
  29616. (position_transform_position_to_local, ":pos_no", pos1, pos2),
  29617. (position_transform_position_to_parent, pos4, pos3, ":pos_no"),
  29618. (prop_instance_animate_to_position, ":cur_belfry_object", pos4, 1),
  29619. (try_end),
  29620. (assign, "$belfry_positioned", 0),
  29621. (assign, "$belfry_num_slots_positioned", 0),
  29622. (assign, "$belfry_num_men_pushing", 0),
  29623.  
  29624. (set_show_messages, 0),
  29625. (team_give_order, "$attacker_team", grc_everyone, mordr_stand_ground),
  29626. (team_give_order, "$attacker_team_2", grc_everyone, mordr_stand_ground),
  29627. (set_show_messages, 1),
  29628. ]),
  29629.  
  29630. # script_cf_siege_move_belfry
  29631. # Input: none
  29632. # Output: none (required for siege mission templates)
  29633. ("cf_siege_move_belfry",
  29634. [(neq, "$last_belfry_object_pos", slot_scene_belfry_props_begin),
  29635. (entry_point_get_position,pos1,50),
  29636. (entry_point_get_position,pos4,55),
  29637. (get_distance_between_positions, ":total_distance", pos4, pos1),
  29638. (store_current_scene, ":cur_scene"),
  29639. (scene_get_slot, ":first_belfry_object", ":cur_scene", slot_scene_belfry_props_begin),
  29640. (prop_instance_get_position, pos2, ":first_belfry_object"),
  29641. (entry_point_get_position,pos1,"$cur_belfry_pos"),
  29642. (position_transform_position_to_parent, pos3, pos1, pos_belfry_begin),
  29643. (position_transform_position_to_parent, pos5, pos4, pos_belfry_begin),
  29644. (get_distance_between_positions, ":cur_distance", pos2, pos3),
  29645. (get_distance_between_positions, ":distance_left", pos2, pos5),
  29646. (try_begin),
  29647. (le, ":cur_distance", 10),
  29648. (val_add, "$cur_belfry_pos", 1),
  29649. (entry_point_get_position,pos1,"$cur_belfry_pos"),
  29650. (position_transform_position_to_parent, pos3, pos1, pos_belfry_begin),
  29651. (get_distance_between_positions, ":cur_distance", pos2, pos3),
  29652. (try_end),
  29653. (neq, "$cur_belfry_pos", 50),
  29654.  
  29655. (assign, ":base_speed", 20),
  29656. (store_div, ":slow_range", ":total_distance", 60),
  29657. (store_sub, ":distance_moved", ":total_distance", ":distance_left"),
  29658.  
  29659. (try_begin),
  29660. (lt, ":distance_moved", ":slow_range"),
  29661. (store_mul, ":base_speed", ":distance_moved", -60),
  29662. (val_div, ":base_speed", ":slow_range"),
  29663. (val_add, ":base_speed", 80),
  29664. (else_try),
  29665. (lt, ":distance_left", ":slow_range"),
  29666. (store_mul, ":base_speed", ":distance_left", -60),
  29667. (val_div, ":base_speed", ":slow_range"),
  29668. (val_add, ":base_speed", 80),
  29669. (try_end),
  29670. (store_mul, ":belfry_speed", ":cur_distance", ":base_speed"),
  29671. (try_begin),
  29672. (eq, "$belfry_num_men_pushing", 0),
  29673. (assign, ":belfry_speed", 1000000),
  29674. (else_try),
  29675. (val_div, ":belfry_speed", "$belfry_num_men_pushing"),
  29676. (try_end),
  29677.  
  29678. (try_begin),
  29679. (le, "$cur_belfry_pos", 55),
  29680. (init_position, pos3),
  29681. (position_rotate_x, pos3, ":distance_moved"),
  29682. (scene_get_slot, ":base_belfry_object", ":cur_scene", slot_scene_belfry_props_begin),
  29683. (prop_instance_get_position, pos4, ":base_belfry_object"),
  29684. (entry_point_get_position,pos1,"$cur_belfry_pos"),
  29685. (try_for_range, ":i_belfry_object_pos", slot_scene_belfry_props_begin, "$last_belfry_object_pos"),
  29686. (scene_get_slot, ":cur_belfry_object", ":cur_scene", ":i_belfry_object_pos"),
  29687. (try_begin),
  29688. (ge, ":i_belfry_object_pos", "$belfry_rotating_objects_begin"),
  29689. (prop_instance_get_starting_position, pos5, ":base_belfry_object"),
  29690. (prop_instance_get_starting_position, pos6, ":cur_belfry_object"),
  29691. (position_transform_position_to_local, pos7, pos5, pos6),
  29692. (position_transform_position_to_parent, pos5, pos4, pos7),
  29693. (position_transform_position_to_parent, pos6, pos5, pos3),
  29694. (prop_instance_set_position, ":cur_belfry_object", pos6),
  29695. (else_try),
  29696. (assign, ":pos_no", pos_belfry_begin),
  29697. (val_add, ":pos_no", ":i_belfry_object_pos"),
  29698. (val_sub, ":pos_no", slot_scene_belfry_props_begin),
  29699. (position_transform_position_to_parent, pos2, pos1, ":pos_no"),
  29700. (prop_instance_animate_to_position, ":cur_belfry_object", pos2, ":belfry_speed"),
  29701. (try_end),
  29702. (try_end),
  29703. (try_end),
  29704. (gt, "$cur_belfry_pos", 55),
  29705. (assign, "$belfry_positioned", 1),
  29706. ]),
  29707.  
  29708. # script_cf_siege_rotate_belfry_platform
  29709. # Input: none
  29710. # Output: none (required for siege mission templates)
  29711. ("cf_siege_rotate_belfry_platform",
  29712. [(eq, "$belfry_positioned", 1),
  29713. (scene_prop_get_instance, ":belfry_object", "spr_belfry_platform_a", 0),
  29714. (prop_instance_get_position, pos1, ":belfry_object"),
  29715. (position_rotate_x, pos1, -90),
  29716. (prop_instance_animate_to_position, ":belfry_object", pos1, 400),
  29717. (assign, "$belfry_positioned", 2),
  29718. ]),
  29719.  
  29720. # script_cf_siege_assign_men_to_belfry
  29721. # Input: none
  29722. # Output: none (required for siege mission templates)
  29723. ("cf_siege_assign_men_to_belfry",
  29724. [
  29725. ## (store_mission_timer_a, ":cur_seconds"),
  29726. (neq, "$last_belfry_object_pos", slot_scene_belfry_props_begin),
  29727. (assign, ":end_trigger", 0),
  29728. (try_begin),
  29729. (lt, "$belfry_positioned", 3),
  29730. (get_player_agent_no, ":player_agent"),
  29731. (store_current_scene, ":cur_scene"),
  29732. (scene_get_slot, ":first_belfry_object", ":cur_scene", slot_scene_belfry_props_begin),
  29733. (prop_instance_get_position, pos2, ":first_belfry_object"),
  29734. (assign, ":slot_1_positioned", 0),
  29735. (assign, ":slot_2_positioned", 0),
  29736. (assign, ":slot_3_positioned", 0),
  29737. (assign, ":slot_4_positioned", 0),
  29738. (assign, ":slot_5_positioned", 0),
  29739. (assign, ":slot_6_positioned", 0),
  29740. (assign, "$belfry_num_slots_positioned", 0),
  29741. (assign, "$belfry_num_men_pushing", 0),
  29742. (try_for_agents, ":cur_agent"),
  29743. (agent_is_alive, ":cur_agent"),
  29744. (agent_is_human, ":cur_agent"),
  29745. (try_begin),
  29746. (agent_get_slot, ":x_pos", ":cur_agent", slot_agent_target_x_pos),
  29747. (neq, ":x_pos", 0),
  29748. (agent_get_slot, ":y_pos", ":cur_agent", slot_agent_target_y_pos),
  29749. (try_begin),
  29750. (eq, ":x_pos", -600),
  29751. (try_begin),
  29752. (eq, ":y_pos", 0),
  29753. (assign, ":slot_1_positioned", 1),
  29754. (else_try),
  29755. (eq, ":y_pos", -200),
  29756. (assign, ":slot_2_positioned", 1),
  29757. (else_try),
  29758. (assign, ":slot_3_positioned", 1),
  29759. (try_end),
  29760. (else_try),
  29761. (try_begin),
  29762. (eq, ":y_pos", 0),
  29763. (assign, ":slot_4_positioned", 1),
  29764. (else_try),
  29765. (eq, ":y_pos", -200),
  29766. (assign, ":slot_5_positioned", 1),
  29767. (else_try),
  29768. (assign, ":slot_6_positioned", 1),
  29769. (try_end),
  29770. (try_end),
  29771. (val_add, "$belfry_num_slots_positioned", 1),
  29772. (init_position, pos1),
  29773. (position_move_x, pos1, ":x_pos"),
  29774. (position_move_y, pos1, ":y_pos"),
  29775. (init_position, pos3),
  29776. (position_move_x, pos3, ":x_pos"),
  29777. (position_move_y, pos3, -1000),
  29778. (position_transform_position_to_parent, pos4, pos2, pos1),
  29779. (position_transform_position_to_parent, pos5, pos2, pos3),
  29780. (agent_get_position, pos6, ":cur_agent"),
  29781. (get_distance_between_positions, ":target_distance", pos6, pos4),
  29782. (get_distance_between_positions, ":waypoint_distance", pos6, pos5),
  29783. (try_begin),
  29784. (this_or_next|lt, ":target_distance", ":waypoint_distance"),
  29785. (lt, ":waypoint_distance", 600),
  29786. (agent_set_scripted_destination, ":cur_agent", pos4, 1),
  29787. (else_try),
  29788. (agent_set_scripted_destination, ":cur_agent", pos5, 1),
  29789. (try_end),
  29790. (try_begin),
  29791. (le, ":target_distance", 300),
  29792. (val_add, "$belfry_num_men_pushing", 1),
  29793. (try_end),
  29794. ## (else_try),
  29795. ## (agent_get_team, ":cur_agent_team", ":cur_agent"),
  29796. ## (this_or_next|eq, "$attacker_team", ":cur_agent_team"),
  29797. ## ( eq, "$attacker_team_2", ":cur_agent_team"),
  29798. ## (try_begin),
  29799. ## (gt, ":cur_seconds", 20),
  29800. ## (agent_get_position, pos1, ":cur_agent"),
  29801. ## (agent_set_scripted_destination, ":cur_agent", pos1, 0),
  29802. ## (else_try),
  29803. ## (try_begin),
  29804. ## (team_get_movement_order, ":order1", "$attacker_team", grc_infantry),
  29805. ## (team_get_movement_order, ":order2", "$attacker_team", grc_cavalry),
  29806. ## (team_get_movement_order, ":order3", "$attacker_team", grc_archers),
  29807. ## (this_or_next|neq, ":order1", mordr_stand_ground),
  29808. ## (this_or_next|neq, ":order2", mordr_stand_ground),
  29809. ## (neq, ":order3", mordr_stand_ground),
  29810. ## (set_show_messages, 0),
  29811. ## (team_give_order, "$attacker_team", grc_everyone, mordr_stand_ground),
  29812. ## (set_show_messages, 1),
  29813. ## (try_end),
  29814. ## (try_end),
  29815. (try_end),
  29816. (try_end),
  29817. (try_begin),
  29818. (lt, "$belfry_num_slots_positioned", 6),
  29819. (try_for_agents, ":cur_agent"),
  29820. (agent_is_alive, ":cur_agent"),
  29821. (agent_get_team, ":cur_agent_team", ":cur_agent"),
  29822. (this_or_next|eq, "$attacker_team", ":cur_agent_team"),
  29823. (eq, "$attacker_team_2", ":cur_agent_team"),
  29824. (neq, ":player_agent", ":cur_agent"),
  29825. (agent_get_class, ":agent_class", ":cur_agent"),
  29826. (this_or_next|eq, ":agent_class", grc_infantry),
  29827. (eq, ":agent_class", grc_cavalry),
  29828. (agent_get_slot, ":x_pos", ":cur_agent", 1),
  29829. (eq, ":x_pos", 0),
  29830. (assign, ":y_pos", 0),
  29831. (try_begin),
  29832. (eq, ":slot_1_positioned", 0),
  29833. (assign, ":x_pos", -600),
  29834. (assign, ":y_pos", 0),
  29835. (val_add, ":slot_1_positioned", 1),
  29836. (else_try),
  29837. (eq, ":slot_2_positioned", 0),
  29838. (assign, ":x_pos", -600),
  29839. (assign, ":y_pos", -200),
  29840. (val_add, ":slot_2_positioned", 1),
  29841. (else_try),
  29842. (eq, ":slot_3_positioned", 0),
  29843. (assign, ":x_pos", -600),
  29844. (assign, ":y_pos", -400),
  29845. (val_add, ":slot_3_positioned", 1),
  29846. (else_try),
  29847. (eq, ":slot_4_positioned", 0),
  29848. (assign, ":x_pos", 600),
  29849. (assign, ":y_pos", 0),
  29850. (val_add, ":slot_4_positioned", 1),
  29851. (else_try),
  29852. (eq, ":slot_5_positioned", 0),
  29853. (assign, ":x_pos", 600),
  29854. (assign, ":y_pos", -200),
  29855. (val_add, ":slot_5_positioned", 1),
  29856. (else_try),
  29857. (eq, ":slot_6_positioned", 0),
  29858. (assign, ":x_pos", 600),
  29859. (assign, ":y_pos", -400),
  29860. (val_add, ":slot_6_positioned", 1),
  29861. (try_end),
  29862. (val_add, "$belfry_num_slots_positioned", 1),
  29863. (agent_set_slot, ":cur_agent", 1, ":x_pos"),
  29864. (agent_set_slot, ":cur_agent", 2, ":y_pos"),
  29865. (try_end),
  29866. (try_end),
  29867. (try_begin),
  29868. (store_mission_timer_a, ":cur_timer"),
  29869. (gt, ":cur_timer", 20),
  29870. (lt, "$belfry_num_slots_positioned", 6),
  29871. (try_for_agents, ":cur_agent"),
  29872. (agent_is_alive, ":cur_agent"),
  29873. (agent_get_team, ":cur_agent_team", ":cur_agent"),
  29874. (this_or_next|eq, "$attacker_team", ":cur_agent_team"),
  29875. ( eq, "$attacker_team_2", ":cur_agent_team"),
  29876. (neq, ":player_agent", ":cur_agent"),
  29877. (agent_get_slot, ":x_pos", ":cur_agent", 1),
  29878. (eq, ":x_pos", 0),
  29879. (assign, ":y_pos", 0),
  29880. (try_begin),
  29881. (eq, ":slot_1_positioned", 0),
  29882. (assign, ":x_pos", -600),
  29883. (assign, ":y_pos", 0),
  29884. (val_add, ":slot_1_positioned", 1),
  29885. (else_try),
  29886. (eq, ":slot_2_positioned", 0),
  29887. (assign, ":x_pos", -600),
  29888. (assign, ":y_pos", -200),
  29889. (val_add, ":slot_2_positioned", 1),
  29890. (else_try),
  29891. (eq, ":slot_3_positioned", 0),
  29892. (assign, ":x_pos", -600),
  29893. (assign, ":y_pos", -400),
  29894. (val_add, ":slot_3_positioned", 1),
  29895. (else_try),
  29896. (eq, ":slot_4_positioned", 0),
  29897. (assign, ":x_pos", 600),
  29898. (assign, ":y_pos", 0),
  29899. (val_add, ":slot_4_positioned", 1),
  29900. (else_try),
  29901. (eq, ":slot_5_positioned", 0),
  29902. (assign, ":x_pos", 600),
  29903. (assign, ":y_pos", -200),
  29904. (val_add, ":slot_5_positioned", 1),
  29905. (else_try),
  29906. (eq, ":slot_6_positioned", 0),
  29907. (assign, ":x_pos", 600),
  29908. (assign, ":y_pos", -400),
  29909. (val_add, ":slot_6_positioned", 1),
  29910. (try_end),
  29911. (val_add, "$belfry_num_slots_positioned", 1),
  29912. (agent_set_slot, ":cur_agent", 1, ":x_pos"),
  29913. (agent_set_slot, ":cur_agent", 2, ":y_pos"),
  29914. (try_end),
  29915. (try_end),
  29916. (else_try),
  29917. (assign, ":end_trigger", 1),
  29918. (try_for_agents, ":cur_agent"),
  29919. (agent_clear_scripted_mode, ":cur_agent"),
  29920. (try_end),
  29921. (set_show_messages, 0),
  29922. (team_give_order, "$attacker_team", grc_everyone, mordr_charge),
  29923. (set_show_messages, 1),
  29924. (try_end),
  29925. (eq, ":end_trigger", 1),
  29926. ]),
  29927.  
  29928. # script_siege_move_archers_to_archer_positions
  29929. # Input: none
  29930. # Output: none
  29931. ("siege_move_archers_to_archer_positions",
  29932. [
  29933. (try_for_agents, ":agent_no"),
  29934. (agent_is_alive, ":agent_no"),
  29935. (agent_slot_eq, ":agent_no", slot_agent_is_not_reinforcement, 0),
  29936. (agent_is_defender, ":agent_no"),
  29937. (agent_get_class, ":agent_class", ":agent_no"),
  29938. (agent_get_troop_id, ":agent_troop", ":agent_no"),
  29939. (eq, ":agent_class", grc_archers),
  29940. (try_begin),
  29941. (agent_slot_eq, ":agent_no", slot_agent_target_entry_point, 0),
  29942. (store_random_in_range, ":random_entry_point", 40, 44),
  29943. (agent_set_slot, ":agent_no", slot_agent_target_entry_point, ":random_entry_point"),
  29944. (try_end),
  29945. (try_begin),
  29946. (agent_get_position, pos0, ":agent_no"),
  29947. (entry_point_get_position, pos1, ":random_entry_point"),
  29948. (get_distance_between_positions, ":dist", pos0, pos1),
  29949. (lt, ":dist", 300),
  29950. (agent_clear_scripted_mode, ":agent_no"),
  29951. (agent_set_slot, ":agent_no", slot_agent_is_in_scripted_mode, 0),
  29952. (agent_set_slot, ":agent_no", slot_agent_is_not_reinforcement, 1),
  29953. (str_store_troop_name, s1, ":agent_troop"),
  29954. (assign, reg0, ":agent_no"),
  29955. # (display_message, "@{s1} ({reg0}) reached pos"),
  29956. (else_try),
  29957. (agent_get_simple_behavior, ":agent_sb", ":agent_no"),
  29958. (agent_get_combat_state, ":agent_cs", ":agent_no"),
  29959. (this_or_next|eq, ":agent_sb", aisb_ranged),
  29960. (eq, ":agent_sb", aisb_go_to_pos),#scripted mode
  29961. (eq, ":agent_cs", 7), # 7 = no visible targets (state for ranged units)
  29962. (try_begin),
  29963. (agent_slot_eq, ":agent_no", slot_agent_is_in_scripted_mode, 0),
  29964. (agent_set_scripted_destination, ":agent_no", pos1, 0),
  29965. (agent_set_slot, ":agent_no", slot_agent_is_in_scripted_mode, 1),
  29966. (str_store_troop_name, s1, ":agent_troop"),
  29967. (assign, reg0, ":agent_no"),
  29968. # (display_message, "@{s1} ({reg0}) moving to pos"),
  29969. (try_end),
  29970. (else_try),
  29971. (try_begin),
  29972. (agent_slot_eq, ":agent_no", slot_agent_is_in_scripted_mode, 1),
  29973. (agent_clear_scripted_mode, ":agent_no"),
  29974. (agent_set_slot, ":agent_no", slot_agent_is_in_scripted_mode, 0),
  29975. (str_store_troop_name, s1, ":agent_troop"),
  29976. (assign, reg0, ":agent_no"),
  29977. # (display_message, "@{s1} ({reg0}) seeing target or changed mode"),
  29978. (try_end),
  29979. (try_end),
  29980. (try_end),
  29981. ]),
  29982.  
  29983.  
  29984. # script_store_movement_order_name_to_s1
  29985. # Input: arg1 = team_no, arg2 = class_no
  29986. # Output: s1 = order_name
  29987. ("store_movement_order_name_to_s1",
  29988. [(store_script_param_1, ":team_no"),
  29989. (store_script_param_2, ":class_no"),
  29990. (team_get_movement_order, ":cur_order", ":team_no", ":class_no"),
  29991. (try_begin),
  29992. (eq, ":cur_order", mordr_hold),
  29993. (str_store_string, s1, "@Holding"),
  29994. (else_try),
  29995. (eq, ":cur_order", mordr_follow),
  29996. (str_store_string, s1, "@Following"),
  29997. (else_try),
  29998. (eq, ":cur_order", mordr_charge),
  29999. (str_store_string, s1, "@Charging"),
  30000. (else_try),
  30001. (eq, ":cur_order", mordr_advance),
  30002. (str_store_string, s1, "@Advancing"),
  30003. (else_try),
  30004. (eq, ":cur_order", mordr_fall_back),
  30005. (str_store_string, s1, "@Falling Back"),
  30006. (else_try),
  30007. (eq, ":cur_order", mordr_stand_closer),
  30008. (str_store_string, s1, "@Standing Closer"),
  30009. (else_try),
  30010. (eq, ":cur_order", mordr_spread_out),
  30011. (str_store_string, s1, "@Spreading Out"),
  30012. (else_try),
  30013. (eq, ":cur_order", mordr_stand_ground),
  30014. (str_store_string, s1, "@Standing"),
  30015. (else_try),
  30016. (str_store_string, s1, "@N/A"),
  30017. (try_end),
  30018. ]),
  30019.  
  30020. # script_store_riding_order_name_to_s1
  30021. # Input: arg1 = team_no, arg2 = class_no
  30022. # Output: s1 = order_name
  30023. ("store_riding_order_name_to_s1",
  30024. [(store_script_param_1, ":team_no"),
  30025. (store_script_param_2, ":class_no"),
  30026. (team_get_riding_order, ":cur_order", ":team_no", ":class_no"),
  30027. (try_begin),
  30028. (eq, ":cur_order", rordr_free),
  30029. (str_store_string, s1, "@Free"),
  30030. (else_try),
  30031. (eq, ":cur_order", rordr_mount),
  30032. (str_store_string, s1, "@Mount"),
  30033. (else_try),
  30034. (eq, ":cur_order", rordr_dismount),
  30035. (str_store_string, s1, "@Dismount"),
  30036. (else_try),
  30037. (str_store_string, s1, "@N/A"),
  30038. (try_end),
  30039. ]),
  30040.  
  30041. # script_store_weapon_usage_order_name_to_s1
  30042. # Input: arg1 = team_no, arg2 = class_no
  30043. # Output: s1 = order_name
  30044. ("store_weapon_usage_order_name_to_s1",
  30045. [(store_script_param_1, ":team_no"),
  30046. (store_script_param_2, ":class_no"),
  30047. (team_get_weapon_usage_order, ":cur_order", ":team_no", ":class_no"),
  30048. (team_get_hold_fire_order, ":cur_hold_fire", ":team_no", ":class_no"),
  30049. (try_begin),
  30050. (eq, ":cur_order", wordr_use_any_weapon),
  30051. (eq, ":cur_hold_fire", aordr_fire_at_will),
  30052. (str_store_string, s1, "@Any Weapon"),
  30053. (else_try),
  30054. (eq, ":cur_order", wordr_use_blunt_weapons),
  30055. (eq, ":cur_hold_fire", aordr_fire_at_will),
  30056. (str_store_string, s1, "@Blunt Weapons"),
  30057. (else_try),
  30058. (eq, ":cur_order", wordr_use_any_weapon),
  30059. (eq, ":cur_hold_fire", aordr_hold_your_fire),
  30060. (str_store_string, s1, "str_hold_fire"),
  30061. (else_try),
  30062. (eq, ":cur_order", wordr_use_blunt_weapons),
  30063. (eq, ":cur_hold_fire", aordr_hold_your_fire),
  30064. (str_store_string, s1, "str_blunt_hold_fire"),
  30065. (else_try),
  30066. (str_store_string, s1, "@N/A"),
  30067. (try_end),
  30068. ]),
  30069.  
  30070. # script_team_give_order_from_order_panel
  30071. # Input: arg1 = leader_agent_no, arg2 = class_no
  30072. # Output: none
  30073. ("team_give_order_from_order_panel",
  30074. [(store_script_param_1, ":leader_agent_no"),
  30075. (store_script_param_2, ":order"),
  30076. (agent_get_team, ":team_no", ":leader_agent_no"),
  30077. (set_show_messages, 0),
  30078. (try_begin),
  30079. (eq, "$g_formation_group0_selected", 1),
  30080. (team_give_order, ":team_no", 0, ":order"),
  30081. (try_end),
  30082. (try_begin),
  30083. (eq, "$g_formation_group1_selected", 1),
  30084. (team_give_order, ":team_no", 1, ":order"),
  30085. (try_end),
  30086. (try_begin),
  30087. (eq, "$g_formation_group2_selected", 1),
  30088. (team_give_order, ":team_no", 2, ":order"),
  30089. (try_end),
  30090. (try_begin),
  30091. (eq, "$g_formation_group3_selected", 1),
  30092. (team_give_order, ":team_no", 3, ":order"),
  30093. (try_end),
  30094. (try_begin),
  30095. (eq, "$g_formation_group4_selected", 1),
  30096. (team_give_order, ":team_no", 4, ":order"),
  30097. (try_end),
  30098. (try_begin),
  30099. (eq, "$g_formation_group5_selected", 1),
  30100. (team_give_order, ":team_no", 5, ":order"),
  30101. (try_end),
  30102. (try_begin),
  30103. (eq, "$g_formation_group6_selected", 1),
  30104. (team_give_order, ":team_no", 6, ":order"),
  30105. (try_end),
  30106. (try_begin),
  30107. (eq, "$g_formation_group7_selected", 1),
  30108. (team_give_order, ":team_no", 7, ":order"),
  30109. (try_end),
  30110. (try_begin),
  30111. (eq, "$g_formation_group8_selected", 1),
  30112. (team_give_order, ":team_no", 8, ":order"),
  30113. (try_end),
  30114.  
  30115. (try_begin),
  30116. (eq, ":order", mordr_hold),
  30117. (agent_get_position, pos1, ":leader_agent_no"),
  30118. (try_begin),
  30119. (eq, "$g_formation_group0_selected", 1),
  30120. (team_set_order_position, ":team_no", 0, pos1),
  30121. (try_end),
  30122. (try_begin),
  30123. (eq, "$g_formation_group1_selected", 1),
  30124. (team_set_order_position, ":team_no", 1, pos1),
  30125. (try_end),
  30126. (try_begin),
  30127. (eq, "$g_formation_group2_selected", 1),
  30128. (team_set_order_position, ":team_no", 2, pos1),
  30129. (try_end),
  30130. (try_begin),
  30131. (eq, "$g_formation_group3_selected", 1),
  30132. (team_set_order_position, ":team_no", 3, pos1),
  30133. (try_end),
  30134. (try_begin),
  30135. (eq, "$g_formation_group4_selected", 1),
  30136. (team_set_order_position, ":team_no", 4, pos1),
  30137. (try_end),
  30138. (try_begin),
  30139. (eq, "$g_formation_group5_selected", 1),
  30140. (team_set_order_position, ":team_no", 5, pos1),
  30141. (try_end),
  30142. (try_begin),
  30143. (eq, "$g_formation_group6_selected", 1),
  30144. (team_set_order_position, ":team_no", 6, pos1),
  30145. (try_end),
  30146. (try_begin),
  30147. (eq, "$g_formation_group7_selected", 1),
  30148. (team_set_order_position, ":team_no", 7, pos1),
  30149. (try_end),
  30150. (try_begin),
  30151. (eq, "$g_formation_group8_selected", 1),
  30152. (team_set_order_position, ":team_no", 8, pos1),
  30153. (try_end),
  30154. (try_end),
  30155. (set_show_messages, 1),
  30156. ]),
  30157.  
  30158.  
  30159. # script_update_order_panel
  30160. # Input: arg1 = team_no
  30161. # Output: none
  30162. ("update_order_panel",
  30163. [(store_script_param_1, ":team_no"),
  30164. (set_fixed_point_multiplier, 1000),
  30165.  
  30166. #ozan added
  30167. (try_begin),
  30168. (eq, "$group0_has_troops", 1),
  30169. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 0),
  30170. (overlay_set_text, "$g_presentation_but0_movement", s1),
  30171. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 0),
  30172. (overlay_set_text, "$g_presentation_but0_riding", s1),
  30173. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 0),
  30174. (overlay_set_text, "$g_presentation_but0_weapon_usage", s1),
  30175. (try_end),
  30176. (try_begin),
  30177. (eq, "$group1_has_troops", 1),
  30178. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 1),
  30179. (overlay_set_text, "$g_presentation_but1_movement", s1),
  30180. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 1),
  30181. (overlay_set_text, "$g_presentation_but1_riding", s1),
  30182. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 1),
  30183. (overlay_set_text, "$g_presentation_but1_weapon_usage", s1),
  30184. (try_end),
  30185. (try_begin),
  30186. (eq, "$group2_has_troops", 1),
  30187. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 2),
  30188. (overlay_set_text, "$g_presentation_but2_movement", s1),
  30189. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 2),
  30190. (overlay_set_text, "$g_presentation_but2_riding", s1),
  30191. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 2),
  30192. (overlay_set_text, "$g_presentation_but2_weapon_usage", s1),
  30193. (try_end),
  30194. (try_begin),
  30195. (eq, "$group3_has_troops", 1),
  30196. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 3),
  30197. (overlay_set_text, "$g_presentation_but3_movement", s1),
  30198. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 3),
  30199. (overlay_set_text, "$g_presentation_but3_riding", s1),
  30200. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 3),
  30201. (overlay_set_text, "$g_presentation_but3_weapon_usage", s1),
  30202. (try_end),
  30203. (try_begin),
  30204. (eq, "$group4_has_troops", 1),
  30205. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 4),
  30206. (overlay_set_text, "$g_presentation_but4_movement", s1),
  30207. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 4),
  30208. (overlay_set_text, "$g_presentation_but4_riding", s1),
  30209. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 4),
  30210. (overlay_set_text, "$g_presentation_but4_weapon_usage", s1),
  30211. (try_end),
  30212. (try_begin),
  30213. (eq, "$group5_has_troops", 1),
  30214. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 5),
  30215. (overlay_set_text, "$g_presentation_but5_movement", s1),
  30216. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 5),
  30217. (overlay_set_text, "$g_presentation_but5_riding", s1),
  30218. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 5),
  30219. (overlay_set_text, "$g_presentation_but5_weapon_usage", s1),
  30220. (try_end),
  30221. (try_begin),
  30222. (eq, "$group6_has_troops", 1),
  30223. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 6),
  30224. (overlay_set_text, "$g_presentation_but6_movement", s1),
  30225. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 6),
  30226. (overlay_set_text, "$g_presentation_but6_riding", s1),
  30227. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 6),
  30228. (overlay_set_text, "$g_presentation_but6_weapon_usage", s1),
  30229. (try_end),
  30230. (try_begin),
  30231. (eq, "$group7_has_troops", 1),
  30232. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 7),
  30233. (overlay_set_text, "$g_presentation_but7_movement", s1),
  30234. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 7),
  30235. (overlay_set_text, "$g_presentation_but7_riding", s1),
  30236. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 7),
  30237. (overlay_set_text, "$g_presentation_but7_weapon_usage", s1),
  30238. (try_end),
  30239. (try_begin),
  30240. (eq, "$group8_has_troops", 1),
  30241. (call_script, "script_store_movement_order_name_to_s1", ":team_no", 8),
  30242. (overlay_set_text, "$g_presentation_but8_movement", s1),
  30243. (call_script, "script_store_riding_order_name_to_s1", ":team_no", 8),
  30244. (overlay_set_text, "$g_presentation_but8_riding", s1),
  30245. (call_script, "script_store_weapon_usage_order_name_to_s1", ":team_no", 8),
  30246. (overlay_set_text, "$g_presentation_but8_weapon_usage", s1),
  30247. (try_end),
  30248.  
  30249. #ozan added
  30250. (assign, ":stat_position_y", 660),
  30251. (try_begin),
  30252. (position_set_y, pos1, ":stat_position_y"),
  30253. (eq, "$group0_has_troops", 1),
  30254. (position_set_x, pos1, 270),
  30255. (overlay_set_position, "$g_presentation_but0_movement", pos1),
  30256. (position_set_x, pos1, 410),
  30257. (overlay_set_position, "$g_presentation_but0_riding", pos1),
  30258. (position_set_x, pos1, 550),
  30259. (overlay_set_position, "$g_presentation_but0_weapon_usage", pos1),
  30260. (val_add, ":stat_position_y", -40),
  30261. (try_end),
  30262. (try_begin),
  30263. (position_set_y, pos1, ":stat_position_y"),
  30264. (eq, "$group1_has_troops", 1),
  30265. (position_set_x, pos1, 270),
  30266. (overlay_set_position, "$g_presentation_but1_movement", pos1),
  30267. (position_set_x, pos1, 410),
  30268. (overlay_set_position, "$g_presentation_but1_riding", pos1),
  30269. (position_set_x, pos1, 550),
  30270. (overlay_set_position, "$g_presentation_but1_weapon_usage", pos1),
  30271. (val_add, ":stat_position_y", -40),
  30272. (try_end),
  30273. (try_begin),
  30274. (position_set_y, pos1, ":stat_position_y"),
  30275. (eq, "$group2_has_troops", 1),
  30276. (position_set_x, pos1, 270),
  30277. (overlay_set_position, "$g_presentation_but2_movement", pos1),
  30278. (position_set_x, pos1, 410),
  30279. (overlay_set_position, "$g_presentation_but2_riding", pos1),
  30280. (position_set_x, pos1, 550),
  30281. (overlay_set_position, "$g_presentation_but2_weapon_usage", pos1),
  30282. (val_add, ":stat_position_y", -40),
  30283. (try_end),
  30284. (try_begin),
  30285. (position_set_y, pos1, ":stat_position_y"),
  30286. (eq, "$group3_has_troops", 1),
  30287. (position_set_x, pos1, 270),
  30288. (overlay_set_position, "$g_presentation_but3_movement", pos1),
  30289. (position_set_x, pos1, 410),
  30290. (overlay_set_position, "$g_presentation_but3_riding", pos1),
  30291. (position_set_x, pos1, 550),
  30292. (overlay_set_position, "$g_presentation_but3_weapon_usage", pos1),
  30293. (val_add, ":stat_position_y", -40),
  30294. (try_end),
  30295. (try_begin),
  30296. (position_set_y, pos1, ":stat_position_y"),
  30297. (eq, "$group4_has_troops", 1),
  30298. (position_set_x, pos1, 270),
  30299. (overlay_set_position, "$g_presentation_but4_movement", pos1),
  30300. (position_set_x, pos1, 410),
  30301. (overlay_set_position, "$g_presentation_but4_riding", pos1),
  30302. (position_set_x, pos1, 550),
  30303. (overlay_set_position, "$g_presentation_but4_weapon_usage", pos1),
  30304. (val_add, ":stat_position_y", -40),
  30305. (try_end),
  30306. (try_begin),
  30307. (position_set_y, pos1, ":stat_position_y"),
  30308. (eq, "$group5_has_troops", 1),
  30309. (position_set_x, pos1, 270),
  30310. (overlay_set_position, "$g_presentation_but5_movement", pos1),
  30311. (position_set_x, pos1, 410),
  30312. (overlay_set_position, "$g_presentation_but5_riding", pos1),
  30313. (position_set_x, pos1, 550),
  30314. (overlay_set_position, "$g_presentation_but5_weapon_usage", pos1),
  30315. (val_add, ":stat_position_y", -40),
  30316. (try_end),
  30317. (try_begin),
  30318. (position_set_y, pos1, ":stat_position_y"),
  30319. (eq, "$group6_has_troops", 1),
  30320. (position_set_x, pos1, 270),
  30321. (overlay_set_position, "$g_presentation_but6_movement", pos1),
  30322. (position_set_x, pos1, 410),
  30323. (overlay_set_position, "$g_presentation_but6_riding", pos1),
  30324. (position_set_x, pos1, 550),
  30325. (overlay_set_position, "$g_presentation_but6_weapon_usage", pos1),
  30326. (val_add, ":stat_position_y", -40),
  30327. (try_end),
  30328. (try_begin),
  30329. (position_set_y, pos1, ":stat_position_y"),
  30330. (eq, "$group7_has_troops", 1),
  30331. (position_set_x, pos1, 270),
  30332. (overlay_set_position, "$g_presentation_but7_movement", pos1),
  30333. (position_set_x, pos1, 410),
  30334. (overlay_set_position, "$g_presentation_but7_riding", pos1),
  30335. (position_set_x, pos1, 550),
  30336. (overlay_set_position, "$g_presentation_but7_weapon_usage", pos1),
  30337. (val_add, ":stat_position_y", -40),
  30338. (try_end),
  30339. (try_begin),
  30340. (position_set_y, pos1, ":stat_position_y"),
  30341. (eq, "$group8_has_troops", 1),
  30342. (position_set_x, pos1, 270),
  30343. (overlay_set_position, "$g_presentation_but8_movement", pos1),
  30344. (position_set_x, pos1, 410),
  30345. (overlay_set_position, "$g_presentation_but8_riding", pos1),
  30346. (position_set_x, pos1, 550),
  30347. (overlay_set_position, "$g_presentation_but8_weapon_usage", pos1),
  30348. (val_add, ":stat_position_y", -40),
  30349. (try_end),
  30350. ]),
  30351.  
  30352. # script_update_agent_position_on_map
  30353. # Input: arg1 = agent_no, pos2 = map_size_pos
  30354. # Output: none
  30355. ("update_agent_position_on_map",
  30356. [(store_script_param_1, ":agent_no"),
  30357. (agent_get_slot, ":agent_overlay", ":agent_no", slot_agent_map_overlay_id),
  30358.  
  30359. (get_player_agent_no, ":player_agent"),
  30360. (try_begin),
  30361. (le, ":agent_overlay", 0),
  30362. (set_fixed_point_multiplier, 1000),
  30363. (try_begin),
  30364. (eq, ":agent_no", ":player_agent"),
  30365. (create_mesh_overlay, reg1, "mesh_player_dot"),
  30366. (position_set_x, pos1, 500),
  30367. (position_set_y, pos1, 500),
  30368. (overlay_set_size, reg1, pos1),
  30369. (else_try),
  30370. (create_mesh_overlay, reg1, "mesh_white_dot"),
  30371. (position_set_x, pos1, 200),
  30372. (position_set_y, pos1, 200),
  30373. (overlay_set_size, reg1, pos1),
  30374. (try_end),
  30375. (overlay_set_alpha, reg1, 0x88),
  30376. (agent_set_slot, ":agent_no", slot_agent_map_overlay_id, reg1),
  30377. (assign, ":agent_overlay", reg1),
  30378. (try_end),
  30379.  
  30380. (try_begin),
  30381. (neq, ":agent_no", ":player_agent"),
  30382. (agent_get_party_id, ":agent_party", ":agent_no"),
  30383. (try_begin),
  30384. (eq, ":agent_party", "p_main_party"),
  30385. (agent_get_division, ":agent_division", ":agent_no"),
  30386. (try_begin),
  30387. (eq, ":agent_division", 0),
  30388. (overlay_set_color, ":agent_overlay", 0x8d5220),
  30389. (else_try),
  30390. (eq, ":agent_division", 1),
  30391. (overlay_set_color, ":agent_overlay", 0x34c6e4),
  30392. (else_try),
  30393. (eq, ":agent_division", 2),
  30394. (overlay_set_color, ":agent_overlay", 0x569619),
  30395. (else_try),
  30396. (eq, ":agent_division", 3),
  30397. (overlay_set_color, ":agent_overlay", 0xFFE500),
  30398. (else_try),
  30399. (eq, ":agent_division", 4),
  30400. (overlay_set_color, ":agent_overlay", 0x990099),
  30401. (else_try),
  30402. (eq, ":agent_division", 5),
  30403. (overlay_set_color, ":agent_overlay", 0x99FE80),
  30404. (else_try),
  30405. (eq, ":agent_division", 6),
  30406. (overlay_set_color, ":agent_overlay", 0x9DEFFE),
  30407. (else_try),
  30408. (eq, ":agent_division", 7),
  30409. (overlay_set_color, ":agent_overlay", 0xFECB9D),
  30410. (else_try),
  30411. (eq, ":agent_division", 8),
  30412. (overlay_set_color, ":agent_overlay", 0xB19C9C),
  30413. (try_end),
  30414. (else_try),
  30415. (agent_is_ally, ":agent_no"),
  30416. (overlay_set_color, ":agent_overlay", 0x5555FF),
  30417. (else_try),
  30418. (overlay_set_color, ":agent_overlay", 0xFF0000),
  30419. (try_end),
  30420. (try_end),
  30421.  
  30422. (try_begin),
  30423. (eq, ":agent_no", ":player_agent"),
  30424. (agent_get_look_position, pos1, ":agent_no"),
  30425. (position_get_rotation_around_z, ":rot", pos1),
  30426. (init_position, pos10),
  30427. (position_rotate_z, pos10, ":rot"),
  30428. (overlay_set_mesh_rotation, ":agent_overlay", pos10),
  30429. (call_script, "script_convert_3d_pos_to_map_pos"),
  30430. (else_try),
  30431. (agent_get_position, pos1, ":agent_no"),
  30432. (call_script, "script_convert_3d_pos_to_map_pos"),
  30433. (try_end),
  30434. (overlay_set_position, ":agent_overlay", pos0),
  30435. ]),
  30436.  
  30437. # script_convert_3d_pos_to_map_pos
  30438. # Input: pos1 = 3d_pos, pos2 = map_size_pos
  30439. # Output: pos0 = map_pos
  30440. ("convert_3d_pos_to_map_pos",
  30441. [(set_fixed_point_multiplier, 1000),
  30442. (position_transform_position_to_local, pos3, pos2, pos1),
  30443. (position_get_x, ":agent_x_pos", pos3),
  30444. (position_get_y, ":agent_y_pos", pos3),
  30445. (val_div, ":agent_x_pos", "$g_battle_map_scale"),
  30446. (val_div, ":agent_y_pos", "$g_battle_map_scale"),
  30447. (set_fixed_point_multiplier, 1000),
  30448. (store_sub, ":map_x", 980, "$g_battle_map_width"),
  30449. (store_sub, ":map_y", 730, "$g_battle_map_height"),
  30450. (val_add, ":agent_x_pos", ":map_x"),
  30451. (val_add, ":agent_y_pos", ":map_y"),
  30452. (position_set_x, pos0, ":agent_x_pos"),
  30453. (position_set_y, pos0, ":agent_y_pos"),
  30454. ]),
  30455.  
  30456. # script_update_order_flags_on_map
  30457. # Input: none
  30458. # Output: none
  30459. ("update_order_flags_on_map",
  30460. [(set_fixed_point_multiplier, 1000),
  30461. (get_player_agent_no, ":player_agent"),
  30462. (agent_get_team, ":player_team", ":player_agent"),
  30463.  
  30464. (get_scene_boundaries, pos2, pos3),
  30465.  
  30466. (team_get_movement_order, ":cur_order", ":player_team", grc_infantry),
  30467. (try_begin),
  30468. (eq, ":cur_order", mordr_hold),
  30469. (team_get_order_position, pos1, ":player_team", grc_infantry),
  30470. (call_script, "script_convert_3d_pos_to_map_pos"),
  30471. (overlay_set_alpha, "$g_battle_map_infantry_order_flag", 0xFF),
  30472. (overlay_set_position, "$g_battle_map_infantry_order_flag", pos0),
  30473. (else_try),
  30474. (overlay_set_alpha, "$g_battle_map_infantry_order_flag", 0),
  30475. (try_end),
  30476. (team_get_movement_order, ":cur_order", ":player_team", grc_archers),
  30477. (try_begin),
  30478. (eq, ":cur_order", mordr_hold),
  30479. (team_get_order_position, pos1, ":player_team", grc_archers),
  30480. (call_script, "script_convert_3d_pos_to_map_pos"),
  30481. (overlay_set_alpha, "$g_battle_map_archers_order_flag", 0xFF),
  30482. (overlay_set_position, "$g_battle_map_archers_order_flag", pos0),
  30483. (else_try),
  30484. (overlay_set_alpha, "$g_battle_map_archers_order_flag", 0),
  30485. (try_end),
  30486. (team_get_movement_order, ":cur_order", ":player_team", grc_cavalry),
  30487. (try_begin),
  30488. (eq, ":cur_order", mordr_hold),
  30489. (team_get_order_position, pos1, ":player_team", grc_cavalry),
  30490. (call_script, "script_convert_3d_pos_to_map_pos"),
  30491. (overlay_set_alpha, "$g_battle_map_cavalry_order_flag", 0xFF),
  30492. (overlay_set_position, "$g_battle_map_cavalry_order_flag", pos0),
  30493. (else_try),
  30494. (overlay_set_alpha, "$g_battle_map_cavalry_order_flag", 0),
  30495. (try_end),
  30496. ]),
  30497.  
  30498. # script_update_order_panel_checked_classes
  30499. # Input: none
  30500. # Output: none
  30501. ("update_order_panel_checked_classes",
  30502. [(get_player_agent_no, ":player_agent"),
  30503. (agent_get_team, ":player_team", ":player_agent"),
  30504.  
  30505. (try_begin),
  30506. (eq, "$group0_has_troops", 1),
  30507. (class_is_listening_order, ":player_team", 0),
  30508. (overlay_set_val, "$g_presentation_obj_battle_check0", 1),
  30509. (assign, "$g_formation_group0_selected", 1),
  30510. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but0", 250, 0x44),
  30511. (else_try),
  30512. (eq, "$group0_has_troops", 1),
  30513. (overlay_set_val, "$g_presentation_obj_battle_check0", 0),
  30514. (assign, "$g_formation_group0_selected", 0),
  30515. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but0", 250, 0),
  30516. (try_end),
  30517. (try_begin),
  30518. (eq, "$group1_has_troops", 1),
  30519. (class_is_listening_order, ":player_team", 1),
  30520. (overlay_set_val, "$g_presentation_obj_battle_check1", 1),
  30521. (assign, "$g_formation_group1_selected", 1),
  30522. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but1", 250, 0x44),
  30523. (else_try),
  30524. (eq, "$group1_has_troops", 1),
  30525. (overlay_set_val, "$g_presentation_obj_battle_check1", 0),
  30526. (assign, "$g_formation_group1_selected", 0),
  30527. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but1", 250, 0),
  30528. (try_end),
  30529. (try_begin),
  30530. (eq, "$group2_has_troops", 1),
  30531. (class_is_listening_order, ":player_team", 2),
  30532. (overlay_set_val, "$g_presentation_obj_battle_check2", 1),
  30533. (assign, "$g_formation_group2_selected", 1),
  30534. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but2", 250, 0x44),
  30535. (else_try),
  30536. (eq, "$group2_has_troops", 1),
  30537. (overlay_set_val, "$g_presentation_obj_battle_check2", 0),
  30538. (assign, "$g_formation_group2_selected", 0),
  30539. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but2", 250, 0),
  30540. (try_end),
  30541. (try_begin),
  30542. (eq, "$group3_has_troops", 1),
  30543. (class_is_listening_order, ":player_team", 3),
  30544. (overlay_set_val, "$g_presentation_obj_battle_check3", 1),
  30545. (assign, "$g_formation_group3_selected", 1),
  30546. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but3", 250, 0x44),
  30547. (else_try),
  30548. (eq, "$group3_has_troops", 1),
  30549. (overlay_set_val, "$g_presentation_obj_battle_check3", 0),
  30550. (assign, "$g_formation_group3_selected", 0),
  30551. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but3", 250, 0),
  30552. (try_end),
  30553. (try_begin),
  30554. (eq, "$group4_has_troops", 1),
  30555. (class_is_listening_order, ":player_team", 4),
  30556. (overlay_set_val, "$g_presentation_obj_battle_check4", 1),
  30557. (assign, "$g_formation_group4_selected", 1),
  30558. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but4", 250, 0x44),
  30559. (else_try),
  30560. (eq, "$group4_has_troops", 1),
  30561. (overlay_set_val, "$g_presentation_obj_battle_check4", 0),
  30562. (assign, "$g_formation_group4_selected", 0),
  30563. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but4", 250, 0),
  30564. (try_end),
  30565. (try_begin),
  30566. (eq, "$group5_has_troops", 1),
  30567. (class_is_listening_order, ":player_team", 5),
  30568. (overlay_set_val, "$g_presentation_obj_battle_check5", 1),
  30569. (assign, "$g_formation_group5_selected", 1),
  30570. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but5", 250, 0x44),
  30571. (else_try),
  30572. (eq, "$group5_has_troops", 1),
  30573. (overlay_set_val, "$g_presentation_obj_battle_check5", 0),
  30574. (assign, "$g_formation_group5_selected", 0),
  30575. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but5", 250, 0),
  30576. (try_end),
  30577. (try_begin),
  30578. (eq, "$group6_has_troops", 1),
  30579. (class_is_listening_order, ":player_team", 6),
  30580. (overlay_set_val, "$g_presentation_obj_battle_check6", 1),
  30581. (assign, "$g_formation_group6_selected", 1),
  30582. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but6", 250, 0x44),
  30583. (else_try),
  30584. (eq, "$group6_has_troops", 1),
  30585. (overlay_set_val, "$g_presentation_obj_battle_check6", 0),
  30586. (assign, "$g_formation_group6_selected", 0),
  30587. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but6", 250, 0),
  30588. (try_end),
  30589. (try_begin),
  30590. (eq, "$group7_has_troops", 1),
  30591. (class_is_listening_order, ":player_team", 7),
  30592. (overlay_set_val, "$g_presentation_obj_battle_check7", 1),
  30593. (assign, "$g_formation_group7_selected", 1),
  30594. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but7", 250, 0x44),
  30595. (else_try),
  30596. (eq, "$group7_has_troops", 1),
  30597. (overlay_set_val, "$g_presentation_obj_battle_check7", 0),
  30598. (assign, "$g_formation_group7_selected", 0),
  30599. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but7", 250, 0),
  30600. (try_end),
  30601. (try_begin),
  30602. (eq, "$group8_has_troops", 1),
  30603. (class_is_listening_order, ":player_team", 8),
  30604. (overlay_set_val, "$g_presentation_obj_battle_check8", 1),
  30605. (assign, "$g_formation_group8_selected", 1),
  30606. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but8", 250, 0x44),
  30607. (else_try),
  30608. (eq, "$group8_has_troops", 1),
  30609. (overlay_set_val, "$g_presentation_obj_battle_check8", 0),
  30610. (assign, "$g_formation_group8_selected", 0),
  30611. (overlay_animate_to_alpha, "$g_presentation_obj_battle_but8", 250, 0),
  30612. (try_end),
  30613. ]),
  30614.  
  30615. # script_update_order_panel_statistics_and_map
  30616. # Input: none
  30617. # Output: none
  30618. ("update_order_panel_statistics_and_map", #TODO: Call this in every battle mission template, once per second
  30619. [(set_fixed_point_multiplier, 1000),
  30620.  
  30621. (assign, ":num_us_ready_group0", 0),
  30622. (assign, ":num_us_ready_group1", 0),
  30623. (assign, ":num_us_ready_group2", 0),
  30624. (assign, ":num_us_ready_group3", 0),
  30625. (assign, ":num_us_ready_group4", 0),
  30626. (assign, ":num_us_ready_group5", 0),
  30627. (assign, ":num_us_ready_group6", 0),
  30628. (assign, ":num_us_ready_group7", 0),
  30629. (assign, ":num_us_ready_group8", 0),
  30630.  
  30631. (assign, ":num_us_ready_men", 0),
  30632. (assign, ":num_us_wounded_men", 0),
  30633. (assign, ":num_us_routed_men", 0),
  30634. (assign, ":num_us_dead_men", 0),
  30635. (assign, ":num_allies_ready_men", 0),
  30636. (assign, ":num_allies_wounded_men", 0),
  30637. (assign, ":num_allies_routed_men", 0),
  30638. (assign, ":num_allies_dead_men", 0),
  30639. (assign, ":num_enemies_ready_men", 0),
  30640. (assign, ":num_enemies_wounded_men", 0),
  30641. (assign, ":num_enemies_routed_men", 0),
  30642. (assign, ":num_enemies_dead_men", 0),
  30643.  
  30644. (get_scene_boundaries, pos2, pos3),
  30645.  
  30646. (try_for_agents,":cur_agent"),
  30647. (agent_is_human, ":cur_agent"),
  30648. (agent_get_division, ":agent_division", ":cur_agent"),
  30649. (agent_get_party_id, ":agent_party", ":cur_agent"),
  30650. (agent_get_slot, ":agent_overlay", ":cur_agent", slot_agent_map_overlay_id),
  30651. (try_begin),
  30652. (eq, ":agent_party", "p_main_party"),
  30653. (try_begin),
  30654. (agent_is_alive, ":cur_agent"),
  30655. (call_script, "script_update_agent_position_on_map", ":cur_agent"),
  30656. (try_begin),
  30657. (eq, ":agent_division", 0),
  30658. (val_add, ":num_us_ready_group0", 1),
  30659. (eq, "$group0_has_troops", 1), #added to solve problem. test this.
  30660. (else_try),
  30661. (eq, ":agent_division", 1),
  30662. (val_add, ":num_us_ready_group1", 1),
  30663. (eq, "$group1_has_troops", 1), #added to solve problem.
  30664. (else_try),
  30665. (eq, ":agent_division", 2),
  30666. (val_add, ":num_us_ready_group2", 1),
  30667. (eq, "$group2_has_troops", 1), #added to solve problem.
  30668. (else_try),
  30669. (eq, ":agent_division", 3),
  30670. (val_add, ":num_us_ready_group3", 1),
  30671. (eq, "$group3_has_troops", 1), #added to solve problem.
  30672. (else_try),
  30673. (eq, ":agent_division", 4),
  30674. (val_add, ":num_us_ready_group4", 1),
  30675. (eq, "$group4_has_troops", 1), #added to solve problem.
  30676. (else_try),
  30677. (eq, ":agent_division", 5),
  30678. (val_add, ":num_us_ready_group5", 1),
  30679. (eq, "$group5_has_troops", 1), #added to solve problem.
  30680. (else_try),
  30681. (eq, ":agent_division", 6),
  30682. (val_add, ":num_us_ready_group6", 1),
  30683. (eq, "$group6_has_troops", 1), #added to solve problem.
  30684. (else_try),
  30685. (eq, ":agent_division", 7),
  30686. (val_add, ":num_us_ready_group7", 1),
  30687. (eq, "$group7_has_troops", 1), #added to solve problem.
  30688. (else_try),
  30689. (eq, ":agent_division", 8),
  30690. (val_add, ":num_us_ready_group8", 1),
  30691. (eq, "$group8_has_troops", 1), #added to solve problem.
  30692. (try_end),
  30693. (val_add, ":num_us_ready_men", 1),
  30694. (else_try),
  30695. (overlay_set_alpha, ":agent_overlay", 0),
  30696. (agent_is_wounded, ":cur_agent"),
  30697. (val_add, ":num_us_wounded_men", 1),
  30698. (else_try),
  30699. (agent_is_routed, ":cur_agent"),
  30700. (val_add, ":num_us_routed_men", 1),
  30701. (else_try),
  30702. (val_add, ":num_us_dead_men", 1),
  30703. (try_end),
  30704. (else_try),
  30705. (agent_is_ally, ":cur_agent"),
  30706. (try_begin),
  30707. (agent_is_alive, ":cur_agent"),
  30708. (call_script, "script_update_agent_position_on_map", ":cur_agent"),
  30709. (val_add, ":num_allies_ready_men", 1),
  30710. (else_try),
  30711. (overlay_set_alpha, ":agent_overlay", 0),
  30712. (agent_is_wounded, ":cur_agent"),
  30713. (val_add, ":num_allies_wounded_men", 1),
  30714. (else_try),
  30715. (agent_is_routed, ":cur_agent"),
  30716. (val_add, ":num_allies_routed_men", 1),
  30717. (else_try),
  30718. (val_add, ":num_allies_dead_men", 1),
  30719. (try_end),
  30720. (else_try),
  30721. (try_begin),
  30722. (agent_is_alive, ":cur_agent"),
  30723. (call_script, "script_update_agent_position_on_map", ":cur_agent"),
  30724. (val_add, ":num_enemies_ready_men", 1),
  30725. (else_try),
  30726. (overlay_set_alpha, ":agent_overlay", 0),
  30727. (agent_is_wounded, ":cur_agent"),
  30728. (val_add, ":num_enemies_wounded_men", 1),
  30729. (else_try),
  30730. (agent_is_routed, ":cur_agent"),
  30731. (val_add, ":num_enemies_routed_men", 1),
  30732. (else_try),
  30733. (val_add, ":num_enemies_dead_men", 1),
  30734. (try_end),
  30735. (try_end),
  30736. (try_end),
  30737.  
  30738. (assign, reg1, ":num_us_ready_group0"),
  30739. (assign, reg2, ":num_us_ready_group1"),
  30740. (assign, reg3, ":num_us_ready_group2"),
  30741. (assign, reg4, ":num_us_ready_group3"),
  30742. (assign, reg5, ":num_us_ready_group4"),
  30743. (assign, reg6, ":num_us_ready_group5"),
  30744. (assign, reg7, ":num_us_ready_group6"),
  30745. (assign, reg8, ":num_us_ready_group7"),
  30746. (assign, reg9, ":num_us_ready_group8"),
  30747. (assign, reg10, ":num_us_ready_men"),
  30748. (assign, reg11, ":num_us_wounded_men"),
  30749. (assign, reg12, ":num_us_routed_men"),
  30750. (assign, reg13, ":num_us_dead_men"),
  30751. (assign, reg14, ":num_allies_ready_men"),
  30752. (assign, reg15, ":num_allies_wounded_men"),
  30753. (assign, reg16, ":num_allies_routed_men"),
  30754. (assign, reg17, ":num_allies_dead_men"),
  30755. (assign, reg18, ":num_enemies_ready_men"),
  30756. (assign, reg19, ":num_enemies_wounded_men"),
  30757. (assign, reg20, ":num_enemies_routed_men"),
  30758. (assign, reg21, ":num_enemies_dead_men"),
  30759.  
  30760. (try_begin),
  30761. (eq, "$group0_has_troops", 1),
  30762. (str_store_class_name, s1, 0),
  30763. (overlay_set_text, "$g_presentation_obj_battle_name0", "str_s1_reg1"),
  30764. (try_end),
  30765. (try_begin),
  30766. (eq, "$group1_has_troops", 1),
  30767. (str_store_class_name, s1, 1),
  30768. (overlay_set_text, "$g_presentation_obj_battle_name1", "str_s1_reg2"),
  30769. (try_end),
  30770. (try_begin),
  30771. (eq, "$group2_has_troops", 1),
  30772. (str_store_class_name, s1, 2),
  30773. (overlay_set_text, "$g_presentation_obj_battle_name2", "str_s1_reg3"),
  30774. (try_end),
  30775. (try_begin),
  30776. (eq, "$group3_has_troops", 1),
  30777. (str_store_class_name, s1, 3),
  30778. (overlay_set_text, "$g_presentation_obj_battle_name3", "str_s1_reg4"),
  30779. (try_end),
  30780. (try_begin),
  30781. (eq, "$group4_has_troops", 1),
  30782. (str_store_class_name, s1, 4),
  30783. (overlay_set_text, "$g_presentation_obj_battle_name4", "str_s1_reg5"),
  30784. (try_end),
  30785. (try_begin),
  30786. (eq, "$group5_has_troops", 1),
  30787. (str_store_class_name, s1, 5),
  30788. (overlay_set_text, "$g_presentation_obj_battle_name5", "str_s1_reg6"),
  30789. (try_end),
  30790. (try_begin),
  30791. (eq, "$group6_has_troops", 1),
  30792. (str_store_class_name, s1, 6),
  30793. (overlay_set_text, "$g_presentation_obj_battle_name6", "str_s1_reg7"),
  30794. (try_end),
  30795. (try_begin),
  30796. (eq, "$group7_has_troops", 1),
  30797. (str_store_class_name, s1, 7),
  30798. (overlay_set_text, "$g_presentation_obj_battle_name7", "str_s1_reg8"),
  30799. (try_end),
  30800. (try_begin),
  30801. (eq, "$group8_has_troops", 1),
  30802. (str_store_class_name, s1, 8),
  30803. (overlay_set_text, "$g_presentation_obj_battle_name8", "str_s1_reg9"),
  30804. (try_end),
  30805.  
  30806. (overlay_set_text, "$g_battle_us_ready", "@{!}{reg10}"),
  30807. (overlay_set_text, "$g_battle_us_wounded", "@{!}{reg11}"),
  30808. (overlay_set_text, "$g_battle_us_routed", "@{!}{reg12}"),
  30809. (overlay_set_text, "$g_battle_us_dead", "str_reg13"),
  30810. (overlay_set_text, "$g_battle_allies_ready", "str_reg14"),
  30811. (overlay_set_text, "$g_battle_allies_wounded", "str_reg15"),
  30812. (overlay_set_text, "$g_battle_allies_routed", "str_reg16"),
  30813. (overlay_set_text, "$g_battle_allies_dead", "str_reg17"),
  30814. (overlay_set_text, "$g_battle_enemies_ready", "str_reg18"),
  30815. (overlay_set_text, "$g_battle_enemies_wounded", "str_reg19"),
  30816. (overlay_set_text, "$g_battle_enemies_routed", "str_reg20"),
  30817. (overlay_set_text, "$g_battle_enemies_dead", "str_reg21"),
  30818.  
  30819. (assign, ":stat_position_x", 675),
  30820. (assign, ":stat_position_y", 280),
  30821. (val_add, ":stat_position_x", 70),
  30822. (val_add, ":stat_position_y", 60),
  30823. (position_set_x, pos1, ":stat_position_x"),
  30824. (position_set_y, pos1, ":stat_position_y"),
  30825. (overlay_set_position, "$g_battle_us_ready", pos1),
  30826. (val_add, ":stat_position_x", 70),
  30827. (position_set_x, pos1, ":stat_position_x"),
  30828. (overlay_set_position, "$g_battle_us_wounded", pos1),
  30829. (val_add, ":stat_position_x", 70),
  30830. (position_set_x, pos1, ":stat_position_x"),
  30831. (overlay_set_position, "$g_battle_us_routed", pos1),
  30832. (val_add, ":stat_position_x", 70),
  30833. (position_set_x, pos1, ":stat_position_x"),
  30834. (overlay_set_position, "$g_battle_us_dead", pos1),
  30835. (val_add, ":stat_position_x", -210),
  30836. (val_add, ":stat_position_y", -30),
  30837. (position_set_x, pos1, ":stat_position_x"),
  30838. (position_set_y, pos1, ":stat_position_y"),
  30839. (overlay_set_position, "$g_battle_allies_ready", pos1),
  30840. (val_add, ":stat_position_x", 70),
  30841. (position_set_x, pos1, ":stat_position_x"),
  30842. (overlay_set_position, "$g_battle_allies_wounded", pos1),
  30843. (val_add, ":stat_position_x", 70),
  30844. (position_set_x, pos1, ":stat_position_x"),
  30845. (overlay_set_position, "$g_battle_allies_routed", pos1),
  30846. (val_add, ":stat_position_x", 70),
  30847. (position_set_x, pos1, ":stat_position_x"),
  30848. (overlay_set_position, "$g_battle_allies_dead", pos1),
  30849. (val_add, ":stat_position_x", -210),
  30850. (val_add, ":stat_position_y", -30),
  30851. (position_set_x, pos1, ":stat_position_x"),
  30852. (position_set_y, pos1, ":stat_position_y"),
  30853. (overlay_set_position, "$g_battle_enemies_ready", pos1),
  30854. (val_add, ":stat_position_x", 70),
  30855. (position_set_x, pos1, ":stat_position_x"),
  30856. (overlay_set_position, "$g_battle_enemies_wounded", pos1),
  30857. (val_add, ":stat_position_x", 70),
  30858. (position_set_x, pos1, ":stat_position_x"),
  30859. (overlay_set_position, "$g_battle_enemies_routed", pos1),
  30860. (val_add, ":stat_position_x", 70),
  30861. (position_set_x, pos1, ":stat_position_x"),
  30862. (overlay_set_position, "$g_battle_enemies_dead", pos1),
  30863.  
  30864. (call_script, "script_update_order_flags_on_map"),
  30865. ]),
  30866.  
  30867. # script_set_town_picture
  30868. # Input: none
  30869. # Output: none
  30870. ("set_town_picture",
  30871. [
  30872. (try_begin),
  30873. (party_get_current_terrain, ":cur_terrain", "$current_town"),
  30874. (party_slot_eq,"$current_town",slot_party_type, spt_town),
  30875. (try_begin),
  30876. (this_or_next|eq, ":cur_terrain", rt_steppe),
  30877. (this_or_next|eq, ":cur_terrain", rt_steppe_forest),
  30878. (this_or_next|eq, ":cur_terrain", rt_desert),
  30879. ( eq, ":cur_terrain", rt_desert_forest),
  30880. (set_background_mesh, "mesh_pic_towndes"),
  30881. (else_try),
  30882. (this_or_next|eq, ":cur_terrain", rt_snow),
  30883. ( eq, ":cur_terrain", rt_snow_forest),
  30884. (set_background_mesh, "mesh_pic_townsnow"),
  30885. (else_try),
  30886. (set_background_mesh, "mesh_pic_town1"),
  30887. (try_end),
  30888. (else_try),
  30889. (try_begin),
  30890. (this_or_next|eq, ":cur_terrain", rt_steppe),
  30891. (this_or_next|eq, ":cur_terrain", rt_steppe_forest),
  30892. (this_or_next|eq, ":cur_terrain", rt_desert),
  30893. ( eq, ":cur_terrain", rt_desert_forest),
  30894. (set_background_mesh, "mesh_pic_castledes"),
  30895. (else_try),
  30896. (this_or_next|eq, ":cur_terrain", rt_snow),
  30897. ( eq, ":cur_terrain", rt_snow_forest),
  30898. (set_background_mesh, "mesh_pic_castlesnow"),
  30899. (else_try),
  30900. (set_background_mesh, "mesh_pic_castle1"),
  30901. (try_end),
  30902. (try_end),
  30903. ]),
  30904.  
  30905.  
  30906. # script_consume_food
  30907. # Input: arg1: order of the food to be consumed
  30908. # Output: none
  30909. ("consume_food",
  30910. [(store_script_param, ":selected_food", 1),
  30911. (troop_get_inventory_capacity, ":capacity", "trp_player"),
  30912. (try_for_range, ":cur_slot", 0, ":capacity"),
  30913. (troop_get_inventory_slot, ":cur_item", "trp_player", ":cur_slot"),
  30914. (is_between, ":cur_item", food_begin, food_end),
  30915. (troop_get_inventory_slot_modifier, ":item_modifier", "trp_player", ":cur_slot"),
  30916. (neq, ":item_modifier", imod_rotten),
  30917. (item_slot_eq, ":cur_item", slot_item_is_checked, 0),
  30918. (item_set_slot, ":cur_item", slot_item_is_checked, 1),
  30919. (val_sub, ":selected_food", 1),
  30920. (lt, ":selected_food", 0),
  30921. (assign, ":capacity", 0),
  30922. (troop_inventory_slot_get_item_amount, ":cur_amount", "trp_player", ":cur_slot"),
  30923. (val_sub, ":cur_amount", 1),
  30924. (troop_inventory_slot_set_item_amount, "trp_player", ":cur_slot", ":cur_amount"),
  30925. (try_end),
  30926. ]),
  30927.  
  30928.  
  30929.  
  30930. # script_calculate_troop_score_for_center
  30931. # Input: arg1 = troop_no, arg2 = center_no
  30932. # Output: reg0 = score
  30933. ("calculate_troop_score_for_center",
  30934. [(store_script_param, ":troop_no", 1),
  30935. (store_script_param, ":center_no", 2),
  30936. (assign, ":num_center_points", 1),
  30937. (try_for_range, ":cur_center", centers_begin, centers_end),
  30938. (assign, ":center_owned", 0),
  30939. (try_begin),
  30940. (eq, ":troop_no", "trp_player"),
  30941. (party_slot_eq, ":cur_center", slot_town_lord, stl_reserved_for_player),
  30942. (assign, ":center_owned", 1),
  30943. (try_end),
  30944. (this_or_next|party_slot_eq, ":cur_center", slot_town_lord, ":troop_no"),
  30945. (eq, ":center_owned", 1),
  30946. (try_begin),
  30947. (party_slot_eq, ":cur_center", slot_party_type, spt_town),
  30948. (val_add, ":num_center_points", 4),
  30949. (else_try),
  30950. (party_slot_eq, ":cur_center", slot_party_type, spt_castle),
  30951. (val_add, ":num_center_points", 2),
  30952. (else_try),
  30953. (val_add, ":num_center_points", 1),
  30954. (try_end),
  30955. (try_end),
  30956. (troop_get_slot, ":troop_renown", ":troop_no", slot_troop_renown),
  30957. (store_add, ":score", 500, ":troop_renown"),
  30958. (val_div, ":score", ":num_center_points"),
  30959. (store_random_in_range, ":random", 50, 100),
  30960. (val_mul, ":score", ":random"),
  30961. (try_begin),
  30962. (party_slot_eq, ":center_no", slot_center_last_taken_by_troop, ":troop_no"),
  30963. (val_mul, ":score", 3),
  30964. (val_div, ":score", 2),
  30965. (try_end),
  30966. (try_begin),
  30967. (eq, ":troop_no", "trp_player"),
  30968. (faction_get_slot, ":faction_leader", "$players_kingdom"),
  30969. (call_script, "script_troop_get_player_relation", ":faction_leader"),
  30970. (assign, ":leader_relation", reg0),
  30971. #(troop_get_slot, ":leader_relation", ":faction_leader", slot_troop_player_relation),
  30972. (val_mul, ":leader_relation", 2),
  30973. (val_add, ":score", ":leader_relation"),
  30974. (try_end),
  30975. (assign, reg0, ":score"),
  30976. ]),
  30977.  
  30978.  
  30979. # script_assign_lords_to_empty_centers
  30980. # Input: none
  30981. # Output: none
  30982. #Now ONLY called from the start
  30983. ("assign_lords_to_empty_centers",
  30984. [
  30985.  
  30986. (try_begin),
  30987. (eq, "$cheat_mode", 1),
  30988. (display_message, "str_assigning_lords_to_empty_centers"),
  30989. (str_store_string, s65, "str_assign_lords_to_empty_centers_just_happened"),
  30990. (call_script, "script_add_notification_menu", "mnu_debug_alert_from_s65", 0, 0),
  30991. (try_end),
  30992.  
  30993. (try_for_range, ":faction", kingdoms_begin, kingdoms_end),
  30994. (faction_set_slot, ":faction", slot_faction_temp_slot, 0),
  30995. (try_end),
  30996.  
  30997. (try_for_range, ":active_npc", 0, active_npcs_end),
  30998. (troop_set_slot, ":active_npc", slot_troop_temp_slot, 0),
  30999. (try_end),
  31000.  
  31001. #Factions will keep one unassigned center in reserve, unless they have landless lords
  31002. (try_for_range, ":cur_center", centers_begin, centers_end),
  31003. (party_get_slot, ":center_lord", ":cur_center", slot_town_lord),
  31004. (try_begin),
  31005. (this_or_next|eq, ":center_lord", stl_unassigned),
  31006. (eq, ":center_lord", stl_rejected_by_player),
  31007. (store_faction_of_party, ":center_faction", ":cur_center"),
  31008.  
  31009. (try_begin),
  31010. (eq, "$cheat_mode", 1),
  31011. (str_store_party_name, s4, ":cur_center"),
  31012. (str_store_faction_name, s5, ":center_faction"),
  31013. (display_message, "str_s4_of_the_s5_is_unassigned"),
  31014. (try_end),
  31015.  
  31016. (faction_get_slot, ":number_of_unassigned_centers_plus_landless_lords", ":center_faction", slot_faction_temp_slot),
  31017. (val_add, ":number_of_unassigned_centers_plus_landless_lords", 1),
  31018. (faction_set_slot, ":center_faction", slot_faction_temp_slot, ":number_of_unassigned_centers_plus_landless_lords"),
  31019. (else_try),
  31020. (eq, ":center_lord", stl_reserved_for_player),
  31021.  
  31022. (try_begin),
  31023. (eq, "$cheat_mode", 1),
  31024. (str_store_party_name, s4, ":cur_center"),
  31025. (str_store_faction_name, s5, ":center_faction"),
  31026. (display_message, "str_s4_of_the_s5_is_reserved_for_player"),
  31027. (try_end),
  31028.  
  31029. (else_try),
  31030. (ge, ":center_lord", 0),
  31031. (troop_set_slot, ":center_lord", slot_troop_temp_slot, 1),
  31032. (try_end),
  31033. (try_end),
  31034.  
  31035. (try_for_range, ":active_npc", 0, active_npcs_end),
  31036. (troop_slot_eq, ":active_npc", slot_troop_occupation, slto_kingdom_hero),
  31037. (this_or_next|gt, ":active_npc", "trp_player"),
  31038. (eq, "$player_has_homage", 1),
  31039.  
  31040. (troop_slot_eq, ":active_npc", slot_troop_temp_slot, 0),
  31041. (store_faction_of_troop, ":npc_faction", ":active_npc"),
  31042.  
  31043. (is_between, ":npc_faction", npc_kingdoms_begin, npc_kingdoms_end),
  31044.  
  31045. (try_begin),
  31046. (eq, "$cheat_mode", 1),
  31047. (str_store_troop_name, s4, ":active_npc"),
  31048. (str_store_faction_name, s5, ":npc_faction"),
  31049. (display_message, "str_s4_of_the_s5_has_no_fiefs"),
  31050. (try_end),
  31051.  
  31052. (faction_get_slot, ":number_of_unassigned_centers_plus_landless_lords", ":npc_faction", slot_faction_temp_slot),
  31053. (val_add, ":number_of_unassigned_centers_plus_landless_lords", 1),
  31054. (faction_set_slot, ":npc_faction", slot_faction_temp_slot, ":number_of_unassigned_centers_plus_landless_lords"),
  31055. (try_end),
  31056.  
  31057. (try_begin),
  31058. (eq, "$cheat_mode", 1),
  31059. (try_for_range, ":faction", kingdoms_begin, kingdoms_end),
  31060. (faction_get_slot, reg4, ":faction", slot_faction_temp_slot),
  31061. (str_store_faction_name, s4, ":faction"),
  31062. (display_message, "str_s4_unassigned_centers_plus_landless_lords_=_reg4"),
  31063. (try_end),
  31064. (try_end),
  31065.  
  31066. (try_for_range, ":cur_center", centers_begin, centers_end),
  31067. (party_get_slot, ":center_lord", ":cur_center", slot_town_lord),
  31068. (this_or_next|eq, ":center_lord", stl_unassigned),
  31069. (eq, ":center_lord", stl_rejected_by_player),
  31070.  
  31071. (store_faction_of_party, ":center_faction", ":cur_center"),
  31072. (is_between, ":center_faction", kingdoms_begin, kingdoms_end),
  31073. (neg|faction_slot_eq, ":center_faction", slot_faction_leader, "trp_player"),
  31074.  
  31075. (try_begin),
  31076. (eq, "$cheat_mode", 1),
  31077. (str_store_party_name, s5, ":cur_center"),
  31078. (try_begin),
  31079. (neg|faction_slot_ge, ":center_faction", slot_faction_temp_slot, 2),
  31080. (str_store_faction_name, s4, ":center_faction"),
  31081. (display_message, "str_s4_holds_s5_in_reserve"),
  31082. (try_end),
  31083. (try_end),
  31084.  
  31085. (faction_slot_ge, ":center_faction", slot_faction_temp_slot, 2),
  31086.  
  31087. #(display_message, "@Considering grant of {s5}"),
  31088.  
  31089. (assign, ":best_lord", -1),
  31090. (assign, ":best_lord_score", -1),
  31091. (try_begin),
  31092. (eq, ":center_lord", stl_unassigned),
  31093. (try_begin),
  31094. (eq, "$players_kingdom", ":center_faction"),
  31095. (eq, "$player_has_homage", 1),
  31096. (assign, ":best_lord", stl_reserved_for_player),
  31097. (call_script, "script_calculate_troop_score_for_center", "trp_player", ":cur_center"),
  31098. (assign, ":best_lord_score", reg0),
  31099. (try_end),
  31100. (try_end),
  31101.  
  31102. (try_for_range, ":cur_troop", active_npcs_begin, active_npcs_end),
  31103. (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  31104. (store_troop_faction, ":troop_faction", ":cur_troop"),
  31105. (eq, ":troop_faction", ":center_faction"),
  31106.  
  31107. (call_script, "script_calculate_troop_score_for_center", ":cur_troop", ":cur_center"),
  31108. (assign, ":score", reg0),
  31109.  
  31110. #This prioritizes granting of centers for troops which do not already have one
  31111. (try_begin),
  31112. (troop_slot_eq, ":cur_troop", slot_troop_temp_slot, 0),
  31113. (is_between, ":cur_center", villages_begin, villages_end),
  31114. (val_mul, ":score", 10),
  31115. (try_end),
  31116.  
  31117. (gt, ":score", ":best_lord_score"),
  31118. (assign, ":best_lord_score", ":score"),
  31119. (assign, ":best_lord", ":cur_troop"),
  31120. (try_end),
  31121.  
  31122. #Adjust count of centers and lords
  31123. (try_begin),
  31124. (this_or_next|ge, ":best_lord", 0),
  31125. (eq, ":best_lord", stl_reserved_for_player),
  31126.  
  31127. (faction_get_slot, ":landless_lords_plus_unassigned_centers", ":center_faction", slot_faction_temp_slot),
  31128. (val_sub, ":landless_lords_plus_unassigned_centers", 1),
  31129.  
  31130. (try_begin),
  31131. (eq, ":best_lord", stl_reserved_for_player),
  31132. (troop_slot_eq, "trp_player", slot_troop_temp_slot, 0),
  31133. (troop_set_slot, "trp_player", slot_troop_temp_slot, 1),
  31134. (val_sub, ":landless_lords_plus_unassigned_centers", 1),
  31135. (else_try),
  31136. (troop_slot_eq, ":best_lord", slot_troop_temp_slot, 0),
  31137. (troop_set_slot, ":best_lord", slot_troop_temp_slot, 1),
  31138. (val_sub, ":landless_lords_plus_unassigned_centers", 1),
  31139. (try_end),
  31140.  
  31141. (faction_set_slot, ":center_faction", slot_faction_temp_slot, ":landless_lords_plus_unassigned_centers"),
  31142. (try_end),
  31143.  
  31144. #Give the center to the lord
  31145. (try_begin),
  31146. (ge, ":best_lord", 0),
  31147. (call_script, "script_give_center_to_lord", ":cur_center", ":best_lord", 1),
  31148. (else_try),
  31149. (eq, ":best_lord", stl_reserved_for_player),
  31150. (party_set_slot, ":cur_center", slot_town_lord, stl_reserved_for_player),
  31151. (try_begin), #grant bound villages to player, if granting a castle
  31152. (party_slot_eq, ":cur_center", slot_party_type, spt_castle),
  31153. # (assign, ":give_at_least_one_village", 0),
  31154. (try_for_range, ":cur_village", villages_begin, villages_end),
  31155. # (eq, ":give_at_least_one_village", 0),
  31156. (party_slot_eq, ":cur_village", slot_village_bound_center, ":cur_center"),
  31157. (party_slot_eq, ":cur_village", slot_town_lord, stl_unassigned),
  31158. (party_set_slot, ":cur_village", slot_town_lord, stl_reserved_for_player),
  31159. # (assign, ":give_at_least_one_village", 1),
  31160. (try_end),
  31161. (try_end),
  31162. (try_end),
  31163. (try_end),
  31164. ]),
  31165.  
  31166.  
  31167. # script_create_village_farmer_party
  31168. # Input: arg1 = village_no
  31169. # Output: reg0 = party_no
  31170. ("create_village_farmer_party",
  31171. [(store_script_param, ":village_no", 1),
  31172. (party_get_slot, ":town_no", ":village_no", slot_village_market_town),
  31173. (store_faction_of_party, ":party_faction", ":town_no"),
  31174.  
  31175.  
  31176. # (store_faction_of_party, ":town_faction", ":town_no"),
  31177. # (try_begin),
  31178. # (neq, ":town_faction", ":party_faction"),
  31179. # (assign, ":town_no", -1),
  31180. # (assign, ":score_to_beat", 9999),
  31181. # (try_for_range, ":other_town", towns_begin, towns_end),
  31182. # (store_faction_of_party, ":other_town_faction", ":town_no"),
  31183. # (store_relation, ":relation", ":other_town_faction", ":party_faction"),
  31184. # (ge, ":relation", 0),
  31185.  
  31186. # (store_distance_to_party_from_party, ":distance", ":village_no", ":other_town"),
  31187. # (lt, ":distance", ":score_to_beat"),
  31188. # (assign, ":town_no", ":other_town"),
  31189. # (assign, ":score_to_beat", ":distance"),
  31190. # (try_end),
  31191. # (try_end),
  31192.  
  31193. (try_begin),
  31194. (is_between, ":town_no", towns_begin, towns_end),
  31195. (set_spawn_radius, 0),
  31196. (spawn_around_party, ":village_no", "pt_village_farmers"),
  31197. (assign, ":new_party", reg0),
  31198.  
  31199. (party_set_faction, ":new_party", ":party_faction"),
  31200. (party_set_slot, ":new_party", slot_party_home_center, ":village_no"),
  31201. (party_set_slot, ":new_party", slot_party_last_traded_center, ":village_no"),
  31202.  
  31203. (party_set_slot, ":new_party", slot_party_type, spt_village_farmer),
  31204. (party_set_slot, ":new_party", slot_party_ai_state, spai_trading_with_town),
  31205. (party_set_slot, ":new_party", slot_party_ai_object, ":town_no"),
  31206. (party_set_ai_behavior, ":new_party", ai_bhvr_travel_to_party),
  31207. (party_set_ai_object, ":new_party", ":town_no"),
  31208. (party_set_flags, ":new_party", pf_default_behavior, 0),
  31209. (store_sub, ":item_to_price_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  31210. (try_for_range, ":cur_goods", trade_goods_begin, trade_goods_end),
  31211. (store_add, ":cur_good_price_slot", ":cur_goods", ":item_to_price_slot"),
  31212. (party_get_slot, ":cur_village_price", ":village_no", ":cur_good_price_slot"),
  31213. (party_set_slot, ":new_party", ":cur_good_price_slot", ":cur_village_price"),
  31214. (try_end),
  31215. (assign, reg0, ":new_party"),
  31216. (try_end),
  31217.  
  31218. ]),
  31219.  
  31220. #script_do_party_center_trade
  31221. # INPUT: arg1 = party_no, arg2 = center_no, arg3 = percentage_change_in_center
  31222. # OUTPUT: reg0 = total_change
  31223. ("do_party_center_trade",
  31224. [
  31225. (store_script_param, ":party_no", 1),
  31226. (store_script_param, ":center_no", 2),
  31227.  
  31228. (try_begin),
  31229. (eq, "$cheat_mode", 3),
  31230. (str_store_party_name, s1, ":center_no"),
  31231. (display_message, "@{!}DEBUG : {s1} is trading with villagers"),
  31232. (try_end),
  31233.  
  31234. (store_script_param, ":percentage_change", 3), #this should probably always be a constant. Currently it is 25.
  31235.  
  31236. (party_get_slot, ":origin", ":party_no", slot_party_last_traded_center),
  31237. (party_set_slot, ":party_no", slot_party_last_traded_center, ":center_no"),
  31238.  
  31239. (assign, ":total_change", 0),
  31240. (store_sub, ":item_to_price_slot", slot_town_trade_good_prices_begin, trade_goods_begin),
  31241. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  31242. (store_add, ":cur_good_price_slot", ":cur_good", ":item_to_price_slot"),
  31243. (party_get_slot, ":cur_merchant_price", ":party_no", ":cur_good_price_slot"),
  31244. (party_get_slot, ":cur_center_price", ":center_no", ":cur_good_price_slot"),
  31245. (store_sub, ":price_dif", ":cur_merchant_price", ":cur_center_price"),
  31246. (assign, ":cur_change", ":price_dif"),
  31247. (val_abs, ":cur_change"),
  31248. (val_add, ":total_change", ":cur_change"),
  31249. (val_mul, ":cur_change", ":percentage_change"),
  31250. (val_div, ":cur_change", 100),
  31251.  
  31252. #This is to reconvert from absolute value
  31253. (try_begin),
  31254. (lt, ":price_dif", 0),
  31255. (val_mul, ":cur_change", -1),
  31256. (try_end),
  31257.  
  31258. (assign, ":initial_price", ":cur_center_price"),
  31259.  
  31260. #The new price for the caravan or peasant is set before the change, so the prices in the trading town have full effect on the next center
  31261. (party_set_slot, ":party_no", ":cur_good_price_slot", ":cur_center_price"),
  31262.  
  31263. (val_add, ":cur_center_price", ":cur_change"),
  31264. (party_set_slot, ":center_no", ":cur_good_price_slot", ":cur_center_price"),
  31265.  
  31266. (try_begin),
  31267. (eq, "$cheat_mode", 3),
  31268. (str_store_party_name, s3, ":origin"),
  31269. (str_store_party_name, s4, ":center_no"),
  31270. (str_store_item_name, s5, ":cur_good"),
  31271. (assign, reg4, ":initial_price"),
  31272. (assign, reg5, ":cur_center_price"),
  31273. (display_log_message, "@{!}DEBUG -- Trade of {s5} from {s3} to {s4} brings price from {reg4} to {reg5}"),
  31274. (try_end),
  31275.  
  31276. (try_end),
  31277. (assign, reg0, ":total_change"),
  31278. ]),
  31279.  
  31280. #script_player_join_faction
  31281. # INPUT: arg1 = faction_no
  31282. # OUTPUT: none
  31283. ("player_join_faction",
  31284. [
  31285. (store_script_param, ":faction_no", 1),
  31286. (assign,"$players_kingdom",":faction_no"),
  31287. (faction_set_slot, "fac_player_supporters_faction", slot_faction_ai_state, sfai_default),
  31288. (assign, "$players_oath_renounced_against_kingdom", 0),
  31289. (assign, "$players_oath_renounced_given_center", 0),
  31290. (assign, "$players_oath_renounced_begin_time", 0),
  31291.  
  31292. (try_for_range,":other_kingdom",kingdoms_begin,kingdoms_end),
  31293. (faction_slot_eq, ":other_kingdom", slot_faction_state, sfs_active),
  31294. (neq, ":other_kingdom", "fac_player_supporters_faction"),
  31295. (try_begin),
  31296. (neq, ":other_kingdom", ":faction_no"),
  31297. (store_relation, ":other_kingdom_reln", ":other_kingdom", ":faction_no"),
  31298. (else_try),
  31299. (store_relation, ":other_kingdom_reln", "fac_player_supporters_faction", ":other_kingdom"),
  31300. (val_max, ":other_kingdom_reln", 12),
  31301. (try_end),
  31302. (call_script, "script_set_player_relation_with_faction", ":other_kingdom", ":other_kingdom_reln"),
  31303. (try_end),
  31304.  
  31305. (try_for_range, ":cur_center", centers_begin, centers_end),
  31306. #Give center to kingdom if player is the owner
  31307. (party_slot_eq, ":cur_center", slot_town_lord, "trp_player"),
  31308. (call_script, "script_give_center_to_faction_while_maintaining_lord", ":cur_center", ":faction_no"),
  31309. (else_try),
  31310. #Give center to kingdom if part of player faction
  31311. (store_faction_of_party, ":cur_center_faction", ":cur_center"),
  31312. (eq, ":cur_center_faction", "fac_player_supporters_faction"),
  31313. (call_script, "script_give_center_to_faction_while_maintaining_lord", ":cur_center", ":faction_no"),
  31314. (try_end),
  31315.  
  31316. (try_for_range, ":quest_no", lord_quests_begin, lord_quests_end),
  31317. (check_quest_active, ":quest_no"),
  31318. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  31319. (store_troop_faction, ":quest_giver_faction", ":quest_giver_troop"),
  31320. (store_relation, ":quest_giver_faction_relation", "fac_player_supporters_faction", ":quest_giver_faction"),
  31321. (lt, ":quest_giver_faction_relation", 0),
  31322. (call_script, "script_abort_quest", ":quest_no", 0),
  31323. (try_end),
  31324. (try_for_range, ":quest_no", lord_quests_begin_2, lord_quests_end_2),
  31325. (check_quest_active, ":quest_no"),
  31326. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  31327. (store_troop_faction, ":quest_giver_faction", ":quest_giver_troop"),
  31328. (store_relation, ":quest_giver_faction_relation", "fac_player_supporters_faction", ":quest_giver_faction"),
  31329. (lt, ":quest_giver_faction_relation", 0),
  31330. (call_script, "script_abort_quest", ":quest_no", 0),
  31331. (try_end),
  31332. (try_begin),
  31333. (neq, ":faction_no", "fac_player_supporters_faction"),
  31334. (faction_set_slot, "fac_player_supporters_faction", slot_faction_state, sfs_inactive),
  31335. (faction_set_slot, "fac_player_supporters_faction", slot_faction_leader, "trp_player"),
  31336. (try_end),
  31337.  
  31338. (try_begin),
  31339. (troop_get_slot, ":spouse", "trp_player", slot_troop_spouse),
  31340. (is_between, ":spouse", kingdom_ladies_begin, kingdom_ladies_end),
  31341.  
  31342. (try_begin),
  31343. (ge, "$cheat_mode", 1),
  31344. (str_store_troop_name, s4, ":spouse"),
  31345. (display_message, "@{!}DEBUG - {s4} faction changed by marriage, case 1"),
  31346. (try_end),
  31347.  
  31348. (troop_set_faction, ":spouse", "$players_kingdom"),
  31349. (try_end),
  31350.  
  31351. (try_for_range, ":center", centers_begin, centers_end),
  31352. (store_faction_of_party, ":center_faction", ":faction_no"),
  31353. (neq, ":center_faction", "$players_kingdom"),
  31354. (party_slot_eq, ":center", slot_town_lord, stl_reserved_for_player),
  31355. # (party_set_slot, ":center", slot_town_lord, stl_unassigned),
  31356. (try_end),
  31357.  
  31358. (troop_set_slot, "trp_player", slot_troop_stance_on_faction_issue, -1),
  31359.  
  31360. #remove prisoners of player's faction if he was member of his own faction. And free companions which is prisoned in that faction.
  31361. (try_for_parties, ":party_no"),
  31362. (store_faction_of_party, ":party_faction", ":party_no"),
  31363. (eq, ":party_faction", ":faction_no"),
  31364.  
  31365. (party_get_num_prisoner_stacks, ":num_stacks", ":party_no"),
  31366. (try_for_range_backwards, ":troop_iterator", 0, ":num_stacks"),
  31367. (party_prisoner_stack_get_troop_id, ":cur_troop_id", ":party_no", ":troop_iterator"),
  31368. (store_troop_faction, ":cur_faction", ":cur_troop_id"),
  31369.  
  31370. (this_or_next|eq, ":cur_faction", "fac_player_supporters_faction"),
  31371. (this_or_next|eq, ":cur_faction", ":faction_no"),
  31372. (is_between, ":cur_troop_id", companions_begin, companions_end),
  31373.  
  31374. (try_begin),
  31375. (troop_is_hero, ":cur_troop_id"),
  31376. (call_script, "script_remove_troop_from_prison", ":cur_troop_id"),
  31377. (try_end),
  31378.  
  31379. (party_prisoner_stack_get_size, ":stack_size", ":party_no", ":troop_iterator"),
  31380. (party_remove_prisoners, ":party_no", ":cur_troop_id", ":stack_size"),
  31381.  
  31382. (try_begin),
  31383. (is_between, ":cur_troop_id", companions_begin, companions_end),
  31384.  
  31385. (try_begin),
  31386. (is_between, ":party_no", towns_begin, towns_end),
  31387. (troop_set_slot, ":cur_troop_id", slot_troop_cur_center, ":party_no"),
  31388. (else_try),
  31389. (store_random_in_range, ":random_town_no", towns_begin, towns_end),
  31390. (troop_set_slot, ":cur_troop_id", slot_troop_cur_center, ":random_town_no"),
  31391. (try_end),
  31392. (try_end),
  31393. (try_end),
  31394. (try_end),
  31395. #remove prisoners end.
  31396.  
  31397. #(call_script, "script_store_average_center_value_per_faction"),
  31398. (call_script, "script_update_all_notes"),
  31399. (assign, "$g_recalculate_ais", 1),
  31400. ]),
  31401.  
  31402. #script_player_leave_faction
  31403. # INPUT: arg1 = give_back_fiefs
  31404. # OUTPUT: none
  31405. ("player_leave_faction",
  31406. [
  31407. (store_script_param, ":give_back_fiefs", 1),
  31408.  
  31409. (call_script, "script_check_and_finish_active_army_quests_for_faction", "$players_kingdom"),
  31410. (assign, ":old_kingdom", "$players_kingdom"),
  31411. (assign, ":old_has_homage", "$player_has_homage"),
  31412. (assign, "$players_kingdom", 0),
  31413. (assign, "$player_has_homage", 0),
  31414.  
  31415. (try_begin),
  31416. (neq, ":give_back_fiefs", 0), #ie, give back fiefs = 1, thereby do it
  31417. (try_for_range, ":cur_center", centers_begin, centers_end),
  31418. (party_slot_eq, ":cur_center", slot_town_lord, "trp_player"),
  31419. (call_script, "script_give_center_to_faction", ":cur_center", ":old_kingdom"),
  31420.  
  31421. #The following line also occurs when a lord is stripped of his fiefs by an indictment
  31422. (party_set_slot, ":cur_center", slot_town_lord, stl_unassigned),
  31423. (try_end),
  31424. (else_try),
  31425. #If you retain the fiefs
  31426. (try_for_range, ":cur_center", centers_begin, centers_end),
  31427. (party_slot_eq, ":cur_center", slot_town_lord, "trp_player"),
  31428. (call_script, "script_give_center_to_faction", ":cur_center", "fac_player_supporters_faction"),
  31429. (party_set_slot, ":cur_center", slot_town_lord, "trp_player"),
  31430. (troop_get_slot, ":cur_banner", "trp_player", slot_troop_banner_scene_prop),
  31431. (gt, ":cur_banner", 0),
  31432. (val_sub, ":cur_banner", banner_scene_props_begin),
  31433. (val_add, ":cur_banner", banner_map_icons_begin),
  31434. (party_set_banner_icon, ":cur_center", ":cur_banner"),
  31435. (try_end),
  31436.  
  31437. (try_for_range, ":cur_center", villages_begin, villages_end),
  31438. (party_get_slot, ":cur_bound_center", ":cur_center", slot_village_bound_center),
  31439. (party_slot_eq, ":cur_center", slot_town_lord, "trp_player"),
  31440. (neg|party_slot_eq, ":cur_bound_center", slot_town_lord, "trp_player"),
  31441. (call_script, "script_give_center_to_faction", ":cur_center", ":old_kingdom"),
  31442. (try_end),
  31443.  
  31444. (is_between, ":old_kingdom", kingdoms_begin, kingdoms_end),
  31445. (neq, ":old_kingdom", "fac_player_supporters_faction"),
  31446. (store_relation, ":reln", "fac_player_supporters_faction", ":old_kingdom"),
  31447. (store_sub, ":req_dif", -40, ":reln"),
  31448. (call_script, "script_change_player_relation_with_faction", ":old_kingdom", ":req_dif"),
  31449. (try_end),
  31450.  
  31451. (try_begin),
  31452. (eq, ":old_has_homage", 1),
  31453. (faction_get_slot, ":faction_leader", ":old_kingdom", slot_faction_leader),
  31454. (call_script, "script_change_player_relation_with_troop", ":faction_leader", -20),
  31455. (try_end),
  31456.  
  31457. (try_begin),
  31458. (troop_get_slot, ":spouse", "trp_player", slot_troop_spouse),
  31459. (is_between, ":spouse", kingdom_ladies_begin, kingdom_ladies_end),
  31460.  
  31461. (try_begin),
  31462. (ge, "$cheat_mode", 1),
  31463. (str_store_troop_name, s4, ":spouse"),
  31464. (display_message, "@{!}DEBUG - {s4} faction changed by marriage, case 3"),
  31465. (try_end),
  31466.  
  31467.  
  31468. (troop_set_faction, ":spouse", "fac_player_supporters_faction"),
  31469. (try_end),
  31470.  
  31471. #Change relations with players_kingdom when player changes factions
  31472. (try_for_range, ":kingdom", kingdoms_begin, kingdoms_end),
  31473. (neq, ":kingdom", "fac_player_supporters_faction"),
  31474. (store_relation, ":relation_with_old_faction", ":old_kingdom", ":kingdom"),
  31475. (store_relation, ":relation_with_player_faction", "fac_player_faction", ":kingdom"),
  31476.  
  31477. (try_begin),
  31478. (eq, ":old_kingdom", ":kingdom"),
  31479. (val_min, ":relation_with_player_faction", 0),
  31480. (else_try),
  31481. (lt, ":relation_with_old_faction", 0),
  31482. (val_max, ":relation_with_player_faction", 0),
  31483. (try_end),
  31484. (set_relation, "fac_player_faction", ":kingdom", ":relation_with_player_faction"),
  31485. (set_relation, "fac_player_supporters_faction", ":kingdom", ":relation_with_player_faction"),
  31486. (try_end),
  31487.  
  31488. (call_script, "script_update_all_notes"),
  31489. (assign, "$g_recalculate_ais", 1),
  31490. ]),
  31491.  
  31492.  
  31493. ("deactivate_player_faction",
  31494. [
  31495. (faction_set_slot, "fac_player_supporters_faction", slot_faction_state, sfs_inactive),
  31496. (faction_set_slot, "fac_player_supporters_faction", slot_faction_leader, "trp_player"),
  31497. (assign, "$players_kingdom", 0),
  31498. (assign, "$players_oath_renounced_against_kingdom", 0),
  31499. (assign, "$players_oath_renounced_given_center", 0),
  31500. (assign, "$players_oath_renounced_begin_time", 0),
  31501. #(call_script, "script_store_average_center_value_per_faction"),
  31502. (call_script, "script_update_all_notes"),
  31503.  
  31504. (try_begin),
  31505. (is_between, "$g_player_minister", companions_begin, companions_end),
  31506. (assign, "$npc_to_rejoin_party", "$g_player_minister"),
  31507. (try_end),
  31508. (assign, "$g_player_minister", -1),
  31509.  
  31510. (call_script, "script_add_notification_menu", "mnu_notification_player_faction_deactive", 0, 0),
  31511. ]),
  31512.  
  31513.  
  31514. #script_activate_player_faction
  31515. # INPUT: arg1 = last_interaction_with_faction
  31516. # OUTPUT: none
  31517.  
  31518. #When a player convinces her husband to rebel
  31519. #When a player proclaims herself queen
  31520. #When a player seizes control of a center
  31521. #When a player recruits a lord through intrigue
  31522. #When a player
  31523. ("activate_player_faction",
  31524. [
  31525. (store_script_param, ":liege", 1),
  31526.  
  31527. #This moved to top, so that mnu_notification does not occur twice
  31528. (try_begin),
  31529. (faction_slot_eq, "fac_player_supporters_faction", slot_faction_state, sfs_inactive),
  31530. (neg|is_between, ":liege", pretenders_begin, pretenders_end),
  31531. (call_script, "script_add_notification_menu", "mnu_notification_player_faction_active", 0, 0),
  31532. (try_end),
  31533.  
  31534.  
  31535. (faction_set_slot, "fac_player_supporters_faction", slot_faction_state, sfs_active),
  31536. (faction_set_slot, "fac_player_supporters_faction", slot_faction_leader, ":liege"),
  31537.  
  31538. (assign, ":original_kingdom", "$players_kingdom"),
  31539.  
  31540. (try_begin),
  31541. (is_between, ":original_kingdom", npc_kingdoms_begin, npc_kingdoms_end),
  31542. (call_script, "script_player_leave_faction", 0), #Ends quests, transfers control of centers
  31543. (try_end),
  31544.  
  31545. #Name faction
  31546. (try_begin),
  31547. (is_between, ":liege", active_npcs_begin, active_npcs_end),
  31548. (store_faction_of_troop, ":liege_faction"),
  31549. (is_between, ":liege_faction", npc_kingdoms_begin, npc_kingdoms_end),
  31550. (faction_get_slot, ":adjective_string", ":liege_faction", slot_faction_adjective),
  31551. (str_store_string, s1, ":adjective_string"),
  31552. (faction_set_name, "fac_player_supporters_faction", "@{s1} Rebels"),
  31553. (else_try),
  31554. (str_store_troop_name, s2, ":liege"),
  31555. (str_store_string, s1, "str_s2s_rebellion"),
  31556. (try_end),
  31557. (faction_set_color, "fac_player_supporters_faction", 0xFF0000),
  31558.  
  31559. (assign, "$players_kingdom", "fac_player_supporters_faction"),
  31560. (assign, "$g_player_banner_granted", 1),
  31561.  
  31562.  
  31563.  
  31564. #Any oaths renounced?
  31565. (try_begin),
  31566. (is_between, ":original_kingdom", npc_kingdoms_begin, npc_kingdoms_end),
  31567.  
  31568. (faction_get_slot, ":old_leader", ":original_kingdom", slot_faction_leader),
  31569. (call_script, "script_add_log_entry", logent_renounced_allegiance, "trp_player", -1, ":old_leader", "$players_kingdom"),
  31570.  
  31571. #Initializing renounce war variables
  31572. (assign, "$players_oath_renounced_against_kingdom", ":original_kingdom"),
  31573. (assign, "$players_oath_renounced_given_center", 0),
  31574. (store_current_hours, "$players_oath_renounced_begin_time"),
  31575.  
  31576. (try_for_range, ":cur_center", walled_centers_begin, walled_centers_end),
  31577. (store_faction_of_party, ":cur_center_faction", ":cur_center"),
  31578. (party_set_slot, ":cur_center", slot_center_faction_when_oath_renounced, ":cur_center_faction"),
  31579. (try_end),
  31580. (party_set_slot, "$g_center_to_give_to_player", slot_center_faction_when_oath_renounced, "$players_oath_renounced_against_kingdom"),
  31581.  
  31582. (store_relation, ":relation", ":original_kingdom", "fac_player_supporters_faction"),
  31583. (ge, ":relation", 0),
  31584. (call_script, "script_diplomacy_start_war_between_kingdoms", ":original_kingdom", "fac_player_supporters_faction", 1),
  31585. (try_end),
  31586.  
  31587.  
  31588. (try_begin),
  31589. (troop_get_slot, ":spouse", "trp_player", slot_troop_spouse),
  31590. (is_between, ":spouse", kingdom_ladies_begin, kingdom_ladies_end),
  31591.  
  31592.  
  31593. (try_begin),
  31594. (ge, "$cheat_mode", 1),
  31595. (str_store_troop_name, s4, ":spouse"),
  31596. (display_message, "@{!}DEBUG - {s4} faction changed by marriage, case 2"),
  31597. (try_end),
  31598.  
  31599. (troop_set_faction, ":spouse", "fac_player_supporters_faction"),
  31600. (try_end),
  31601.  
  31602.  
  31603. #(call_script, "script_store_average_center_value_per_faction"),
  31604. (call_script, "script_update_all_notes"),
  31605. (assign, "$g_recalculate_ais", 1),
  31606.  
  31607. ]),
  31608.  
  31609.  
  31610.  
  31611. #script_agent_reassign_team
  31612. # INPUT: arg1 = agent_no
  31613. # OUTPUT: none
  31614. ("agent_reassign_team",
  31615. [
  31616. (store_script_param, ":agent_no", 1),
  31617. (get_player_agent_no, ":player_agent"),
  31618. (try_begin),
  31619. (ge, ":player_agent", 0),
  31620. (agent_is_human, ":agent_no"),
  31621. (agent_is_ally, ":agent_no"),
  31622. (agent_get_party_id, ":party_no", ":agent_no"),
  31623. (neq, ":party_no", "p_main_party"),
  31624. (assign, ":continue", 1),
  31625. (store_faction_of_party, ":party_faction", ":party_no"),
  31626. (try_begin),
  31627. (eq, ":party_faction", "$players_kingdom"),
  31628. (is_between, "$players_kingdom", kingdoms_begin, kingdoms_end),
  31629. (faction_slot_eq, "$players_kingdom", slot_faction_marshall, "trp_player"),
  31630. (assign, ":continue", 0),
  31631. (else_try),
  31632. (party_stack_get_troop_id, ":leader_troop_id", ":party_no", 0),
  31633. (neg|is_between, ":leader_troop_id", active_npcs_begin, active_npcs_end),
  31634. (assign, ":continue", 0),
  31635. (try_end),
  31636. (eq, ":continue", 1),
  31637. (agent_get_team, ":player_team", ":player_agent"),
  31638. (val_add, ":player_team", 2),
  31639. (agent_set_team, ":agent_no", ":player_team"),
  31640. (try_end),
  31641. ]),
  31642.  
  31643. #script_start_quest
  31644. # INPUT: arg1 = quest_no, arg2 = giver_troop_no, s2 = description_text
  31645. # OUTPUT: none
  31646. ("start_quest",
  31647. [(store_script_param, ":quest_no", 1),
  31648. (store_script_param, ":giver_troop_no", 2),
  31649.  
  31650. (quest_set_slot, ":quest_no", slot_quest_giver_troop, ":giver_troop_no"),
  31651.  
  31652. (try_begin),
  31653. (eq, ":giver_troop_no", -1),
  31654. (str_store_string, s63, "str_political_suggestion"),
  31655. (else_try),
  31656. (is_between, ":giver_troop_no", active_npcs_begin, active_npcs_end),
  31657. (str_store_troop_name_link, s62, ":giver_troop_no"),
  31658. (str_store_string, s63, "@Given by: {s62}"),
  31659. (else_try),
  31660. (str_store_troop_name, s62, ":giver_troop_no"),
  31661. (str_store_string, s63, "@Given by: {s62}"),
  31662. (try_end),
  31663. (store_current_hours, ":cur_hours"),
  31664. (str_store_date, s60, ":cur_hours"),
  31665. (str_store_string, s60, "@Given on: {s60}"),
  31666. (add_quest_note_from_sreg, ":quest_no", 0, s60, 0),
  31667. (add_quest_note_from_sreg, ":quest_no", 1, s63, 0),
  31668. (add_quest_note_from_sreg, ":quest_no", 2, s2, 0),
  31669.  
  31670. (try_begin),
  31671. (quest_slot_ge, ":quest_no", slot_quest_expiration_days, 1),
  31672. (quest_get_slot, reg0, ":quest_no", slot_quest_expiration_days),
  31673. (add_quest_note_from_sreg, ":quest_no", 7, "@You have {reg0} days to finish this quest.", 0),
  31674. (try_end),
  31675.  
  31676. #Adding dont_give_again_for_days value
  31677. (try_begin),
  31678. (quest_slot_ge, ":quest_no", slot_quest_dont_give_again_period, 1),
  31679. (quest_get_slot, ":dont_give_again_period", ":quest_no", slot_quest_dont_give_again_period),
  31680. (quest_set_slot, ":quest_no", slot_quest_dont_give_again_remaining_days, ":dont_give_again_period"),
  31681. (try_end),
  31682. (start_quest, ":quest_no", ":giver_troop_no"),
  31683.  
  31684. (try_begin),
  31685. (eq, ":quest_no", "qst_report_to_army"),
  31686. (assign, "$number_of_report_to_army_quest_notes", 8),
  31687. (faction_get_slot, ":faction_ai_state", "$players_kingdom", slot_faction_ai_state),
  31688. (call_script, "script_update_report_to_army_quest_note", "$players_kingdom", ":faction_ai_state", -1),
  31689. (try_end),
  31690.  
  31691. (display_message, "str_quest_log_updated"),
  31692. ]),
  31693.  
  31694. #script_conclude_quest
  31695. # INPUT: arg1 = quest_no
  31696. # OUTPUT: none
  31697. ("conclude_quest",
  31698. [
  31699. (store_script_param, ":quest_no", 1),
  31700. (conclude_quest, ":quest_no"),
  31701. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  31702. (str_store_troop_name, s59, ":quest_giver_troop"),
  31703. (add_quest_note_from_sreg, ":quest_no", 7, "@This quest has been concluded. Talk to {s59} to finish it.", 0),
  31704. ]),
  31705.  
  31706. #script_succeed_quest
  31707. # INPUT: arg1 = quest_no
  31708. # OUTPUT: none
  31709. ("succeed_quest",
  31710. [
  31711. (store_script_param, ":quest_no", 1),
  31712. (succeed_quest, ":quest_no"),
  31713. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  31714. (str_store_troop_name, s59, ":quest_giver_troop"),
  31715. (add_quest_note_from_sreg, ":quest_no", 7, "@This quest has been successfully completed. Talk to {s59} to claim your reward.", 0),
  31716. ]),
  31717.  
  31718. #script_fail_quest
  31719. # INPUT: arg1 = quest_no
  31720. # OUTPUT: none
  31721. ("fail_quest",
  31722. [
  31723. (store_script_param, ":quest_no", 1),
  31724. (fail_quest, ":quest_no"),
  31725. (quest_get_slot, ":quest_giver_troop", ":quest_no", slot_quest_giver_troop),
  31726. (str_store_troop_name, s59, ":quest_giver_troop"),
  31727. (add_quest_note_from_sreg, ":quest_no", 7, "@This quest has failed. Talk to {s59} to explain the situation.", 0),
  31728. ]),
  31729.  
  31730. #script_report_quest_troop_positions
  31731. # INPUT: arg1 = quest_no, arg2 = troop_no, arg3 = note_index
  31732. # OUTPUT: none
  31733. ("report_quest_troop_positions",
  31734. [
  31735. (store_script_param, ":quest_no", 1),
  31736. (store_script_param, ":troop_no", 2),
  31737. (store_script_param, ":note_index", 3),
  31738. (call_script, "script_get_information_about_troops_position", ":troop_no", 1),
  31739. (str_store_string, s5, "@At the time quest was given:^{s1}"),
  31740. (add_quest_note_from_sreg, ":quest_no", ":note_index", s5, 1),
  31741. (call_script, "script_update_troop_location_notes", ":troop_no", 1),
  31742. ]),
  31743.  
  31744. #script_end_quest
  31745. # INPUT: arg1 = quest_no
  31746. # OUTPUT: none
  31747. ("end_quest",
  31748. [
  31749. (store_script_param, ":quest_no", 1),
  31750. (str_clear, s1),
  31751. (add_quest_note_from_sreg, ":quest_no", 0, s1, 0),
  31752. (add_quest_note_from_sreg, ":quest_no", 1, s1, 0),
  31753. (add_quest_note_from_sreg, ":quest_no", 2, s1, 0),
  31754. (add_quest_note_from_sreg, ":quest_no", 3, s1, 0),
  31755. (add_quest_note_from_sreg, ":quest_no", 4, s1, 0),
  31756. (add_quest_note_from_sreg, ":quest_no", 5, s1, 0),
  31757. (add_quest_note_from_sreg, ":quest_no", 6, s1, 0),
  31758. (add_quest_note_from_sreg, ":quest_no", 7, s1, 0),
  31759. (try_begin),
  31760. (neg|check_quest_failed, ":quest_no"),
  31761. (val_add, "$g_total_quests_completed", 1),
  31762. (try_end),
  31763. (try_begin),
  31764. (eq, ":quest_no", "qst_consult_with_minister"),
  31765. (assign, "$g_minister_notification_quest", 0),
  31766. (try_end),
  31767. (complete_quest, ":quest_no"),
  31768. (try_begin),
  31769. (is_between, ":quest_no", mayor_quests_begin, mayor_quests_end),
  31770. (assign, "$merchant_quest_last_offerer", -1),
  31771. (assign, "$merchant_offered_quest", -1),
  31772. (try_end),
  31773. ]),
  31774.  
  31775. #script_cancel_quest
  31776. # INPUT: arg1 = quest_no
  31777. # OUTPUT: none
  31778. ("cancel_quest",
  31779. [(store_script_param, ":quest_no", 1),
  31780. (str_clear, s1),
  31781. (add_quest_note_from_sreg, ":quest_no", 0, s1, 0),
  31782. (add_quest_note_from_sreg, ":quest_no", 1, s1, 0),
  31783. (add_quest_note_from_sreg, ":quest_no", 2, s1, 0),
  31784. (add_quest_note_from_sreg, ":quest_no", 3, s1, 0),
  31785. (add_quest_note_from_sreg, ":quest_no", 4, s1, 0),
  31786. (add_quest_note_from_sreg, ":quest_no", 5, s1, 0),
  31787. (add_quest_note_from_sreg, ":quest_no", 6, s1, 0),
  31788. (add_quest_note_from_sreg, ":quest_no", 7, s1, 0),
  31789. (cancel_quest, ":quest_no"),
  31790. (try_begin),
  31791. (is_between, ":quest_no", mayor_quests_begin, mayor_quests_end),
  31792. (assign, "$merchant_quest_last_offerer", -1),
  31793. (assign, "$merchant_offered_quest", -1),
  31794. (try_end),
  31795. ]),
  31796.  
  31797. ## #script_get_available_mercenary_troop_and_amount_of_center
  31798. ## # INPUT: arg1 = center_no
  31799. ## # OUTPUT: reg0 = mercenary_troop_type, reg1 = amount
  31800. ## ("get_available_mercenary_troop_and_amount_of_center",
  31801. ## [(store_script_param, ":center_no", 1),
  31802. ## (party_get_slot, ":mercenary_troop", ":center_no", slot_center_mercenary_troop_type),
  31803. ## (party_get_slot, ":mercenary_amount", ":center_no", slot_center_mercenary_troop_amount),
  31804. ## (party_get_free_companions_capacity, ":free_capacity", "p_main_party"),
  31805. ## (val_min, ":mercenary_amount", ":free_capacity"),
  31806. ## (store_troop_gold, ":cur_gold", "trp_player"),
  31807. ## (call_script, "script_game_get_join_cost", ":mercenary_troop"),
  31808. ## (assign, ":join_cost", reg0),
  31809. ## (try_begin),
  31810. ## (gt, ":join_cost", 0),
  31811. ## (val_div, ":cur_gold", ":join_cost"),
  31812. ## (val_min, ":mercenary_amount", ":cur_gold"),
  31813. ## (try_end),
  31814. ## (assign, reg0, ":mercenary_troop"),
  31815. ## (assign, reg1, ":mercenary_amount"),
  31816. ## ]),
  31817. ##
  31818.  
  31819. #script_update_village_market_towns
  31820. # INPUT: none
  31821. # OUTPUT: none
  31822. ("update_village_market_towns",
  31823. [(try_for_range, ":cur_village", villages_begin, villages_end),
  31824. (store_faction_of_party, ":village_faction", ":cur_village"),
  31825. (assign, ":min_dist", 999999),
  31826. (assign, ":min_dist_town", -1),
  31827. (try_for_range, ":cur_town", towns_begin, towns_end),
  31828. (store_faction_of_party, ":town_faction", ":cur_town"),
  31829. (eq, ":town_faction", ":village_faction"),
  31830. (store_distance_to_party_from_party, ":cur_dist", ":cur_village", ":cur_town"),
  31831. (lt, ":cur_dist", ":min_dist"),
  31832. (assign, ":min_dist", ":cur_dist"),
  31833. (assign, ":min_dist_town", ":cur_town"),
  31834. (try_end),
  31835.  
  31836. (try_begin),
  31837. (gt, ":min_dist_town", -1),
  31838. (party_set_slot, ":cur_village", slot_village_market_town, ":min_dist_town"),
  31839. (else_try),
  31840. (assign, ":min_dist", 999999),
  31841. (assign, ":min_dist_town", -1),
  31842. (try_for_range, ":cur_town", towns_begin, towns_end),
  31843. (store_faction_of_party, ":town_faction", ":cur_town"),
  31844. (store_relation, ":relation", ":town_faction", ":village_faction"),
  31845. (ge, ":relation", 0),
  31846. (store_distance_to_party_from_party, ":cur_dist", ":cur_village", ":cur_town"),
  31847. (lt, ":cur_dist", ":min_dist"),
  31848. (assign, ":min_dist", ":cur_dist"),
  31849. (assign, ":min_dist_town", ":cur_town"),
  31850. (try_end),
  31851. (gt, ":min_dist_town", -1),
  31852. (party_set_slot, ":cur_village", slot_village_market_town, ":min_dist_town"),
  31853. (try_end),
  31854. (try_end),
  31855. ]),
  31856.  
  31857.  
  31858.  
  31859. #script_update_mercenary_units_of_towns
  31860. # INPUT: none
  31861. # OUTPUT: none
  31862. ("update_mercenary_units_of_towns",
  31863. [(try_for_range, ":town_no", towns_begin, towns_end),
  31864. (store_random_in_range, ":troop_no", mercenary_troops_begin, mercenary_troops_end),
  31865. (party_set_slot, ":town_no", slot_center_mercenary_troop_type, ":troop_no"),
  31866. (store_random_in_range, ":amount", 3, 8),
  31867. (party_set_slot, ":town_no", slot_center_mercenary_troop_amount, ":amount"),
  31868. (try_end),
  31869. ]),
  31870.  
  31871. #script_update_volunteer_troops_in_village
  31872. # INPUT: arg1 = center_no
  31873. # OUTPUT: none
  31874. ("update_volunteer_troops_in_village",
  31875. [
  31876. (store_script_param, ":center_no", 1),
  31877. (party_get_slot, ":player_relation", ":center_no", slot_center_player_relation),
  31878. (party_get_slot, ":center_culture", ":center_no", slot_center_culture),
  31879.  
  31880.  
  31881. ## (try_begin),
  31882. ## (eq, "$cheat_mode", 2),
  31883. ## (str_store_party_name, s4, ":center_no"),
  31884. ## (str_store_faction_name, s5, ":center_culture"),
  31885. ## (display_message, "str_updating_volunteers_for_s4_faction_is_s5"),
  31886. ## (try_end),
  31887.  
  31888. (faction_get_slot, ":volunteer_troop", ":center_culture", slot_faction_tier_1_troop),
  31889. (assign, ":volunteer_troop_tier", 1),
  31890. (store_div, ":tier_upgrades", ":player_relation", 10),
  31891. (try_for_range, ":unused", 0, ":tier_upgrades"),
  31892. (store_random_in_range, ":random_no", 0, 100),
  31893. (lt, ":random_no", 10),
  31894. (store_random_in_range, ":random_no", 0, 2),
  31895. (troop_get_upgrade_troop, ":upgrade_troop_no", ":volunteer_troop", ":random_no"),
  31896. (try_begin),
  31897. (le, ":upgrade_troop_no", 0),
  31898. (troop_get_upgrade_troop, ":upgrade_troop_no", ":volunteer_troop", 0),
  31899. (try_end),
  31900. (gt, ":upgrade_troop_no", 0),
  31901. (val_add, ":volunteer_troop_tier", 1),
  31902. (assign, ":volunteer_troop", ":upgrade_troop_no"),
  31903. (try_end),
  31904.  
  31905. (assign, ":upper_limit", 8),
  31906. (try_begin),
  31907. (ge, ":player_relation", 4),
  31908. (assign, ":upper_limit", ":player_relation"),
  31909. (val_div, ":upper_limit", 2),
  31910. (val_add, ":upper_limit", 6),
  31911. (else_try),
  31912. (lt, ":player_relation", 0),
  31913. (assign, ":upper_limit", 0),
  31914. (try_end),
  31915.  
  31916. (val_mul, ":upper_limit", 3),
  31917. (store_add, ":amount_random_divider", 2, ":volunteer_troop_tier"),
  31918. (val_div, ":upper_limit", ":amount_random_divider"),
  31919.  
  31920. (store_random_in_range, ":amount", 0, ":upper_limit"),
  31921. (party_set_slot, ":center_no", slot_center_volunteer_troop_type, ":volunteer_troop"),
  31922. (party_set_slot, ":center_no", slot_center_volunteer_troop_amount, ":amount"),
  31923. ]),
  31924.  
  31925. #script_update_npc_volunteer_troops_in_village
  31926. # INPUT: arg1 = center_no
  31927. # OUTPUT: none
  31928. ("update_npc_volunteer_troops_in_village",
  31929. [
  31930. (store_script_param, ":center_no", 1),
  31931. (party_get_slot, ":center_culture", ":center_no", slot_center_culture),
  31932. (faction_get_slot, ":volunteer_troop", ":center_culture", slot_faction_tier_1_troop),
  31933. (assign, ":volunteer_troop_tier", 1),
  31934. (try_for_range, ":unused", 0, 5),
  31935. (store_random_in_range, ":random_no", 0, 100),
  31936. (lt, ":random_no", 10),
  31937. (store_random_in_range, ":random_no", 0, 2),
  31938. (troop_get_upgrade_troop, ":upgrade_troop_no", ":volunteer_troop", ":random_no"),
  31939. (try_begin),
  31940. (le, ":upgrade_troop_no", 0),
  31941. (troop_get_upgrade_troop, ":upgrade_troop_no", ":volunteer_troop", 0),
  31942. (try_end),
  31943. (gt, ":upgrade_troop_no", 0),
  31944. (val_add, ":volunteer_troop_tier", 1),
  31945. (assign, ":volunteer_troop", ":upgrade_troop_no"),
  31946. (try_end),
  31947.  
  31948. (assign, ":upper_limit", 12),
  31949.  
  31950. (store_add, ":amount_random_divider", 2, ":volunteer_troop_tier"),
  31951. (val_div, ":upper_limit", ":amount_random_divider"),
  31952.  
  31953. (store_random_in_range, ":amount", 0, ":upper_limit"),
  31954. (party_set_slot, ":center_no", slot_center_npc_volunteer_troop_type, ":volunteer_troop"),
  31955. (party_set_slot, ":center_no", slot_center_npc_volunteer_troop_amount, ":amount"),
  31956. ]),
  31957.  
  31958. #script_update_companion_candidates_in_taverns
  31959. # INPUT: none
  31960. # OUTPUT: none
  31961. ("update_companion_candidates_in_taverns",
  31962. [
  31963. (try_begin),
  31964. (eq, "$cheat_mode", 1),
  31965. (display_message, "str_shuffling_companion_locations"),
  31966. (try_end),
  31967.  
  31968. (try_for_range, ":troop_no", companions_begin, companions_end),
  31969. (troop_set_slot, ":troop_no", slot_troop_cur_center, -1),
  31970. (troop_slot_eq, ":troop_no", slot_troop_days_on_mission, 0),
  31971. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_inactive),
  31972.  
  31973. (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
  31974.  
  31975. (store_random_in_range, ":town_no", towns_begin, towns_end),
  31976. (try_begin),
  31977. (neg|troop_slot_eq, ":troop_no", slot_troop_home, ":town_no"),
  31978. (neg|troop_slot_eq, ":troop_no", slot_troop_first_encountered, ":town_no"),
  31979. (troop_set_slot, ":troop_no", slot_troop_cur_center, ":town_no"),
  31980. (try_begin),
  31981. (eq, "$cheat_mode", 1),
  31982. (str_store_troop_name, 4, ":troop_no"),
  31983. (str_store_party_name, 5, ":town_no"),
  31984. (display_message, "@{!}{s4} is in {s5}"),
  31985. (try_end),
  31986. (try_end),
  31987. (try_end),
  31988. ]),
  31989.  
  31990. #script_update_ransom_brokers
  31991. # INPUT: none
  31992. # OUTPUT: none
  31993. ("update_ransom_brokers",
  31994. [(try_for_range, ":town_no", towns_begin, towns_end),
  31995. (party_set_slot, ":town_no", slot_center_ransom_broker, 0),
  31996. (try_end),
  31997.  
  31998. (try_for_range, ":troop_no", ransom_brokers_begin, ransom_brokers_end),
  31999. (store_random_in_range, ":town_no", towns_begin, towns_end),
  32000. (party_set_slot, ":town_no", slot_center_ransom_broker, ":troop_no"),
  32001. (try_end),
  32002.  
  32003. (party_set_slot,"p_town_2",slot_center_ransom_broker,"trp_ramun_the_slave_trader"),
  32004. ]),
  32005.  
  32006. #script_update_tavern_travellers
  32007. # INPUT: none
  32008. # OUTPUT: none
  32009. ("update_tavern_travellers",
  32010. [(try_for_range, ":town_no", towns_begin, towns_end),
  32011. (party_set_slot, ":town_no", slot_center_tavern_traveler, 0),
  32012. (try_end),
  32013.  
  32014. (try_for_range, ":troop_no", tavern_travelers_begin, tavern_travelers_end),
  32015. (store_random_in_range, ":town_no", towns_begin, towns_end),
  32016. (party_set_slot, ":town_no", slot_center_tavern_traveler, ":troop_no"),
  32017. (assign, ":end_cond", 15),
  32018. (try_for_range, ":unused", 0, ":end_cond"),
  32019. (store_random_in_range, ":info_faction", kingdoms_begin, kingdoms_end),
  32020. (faction_slot_eq, ":info_faction", slot_faction_state, sfs_active),
  32021. (neq, ":info_faction", "$players_kingdom"),
  32022. (neq, ":info_faction", "fac_player_supporters_faction"),
  32023. (party_set_slot, ":town_no", slot_center_traveler_info_faction, ":info_faction"),
  32024. (assign, ":end_cond", 0),
  32025. (try_end),
  32026. (try_end),
  32027.  
  32028. (troop_set_slot, "trp_belligerent_drunk", slot_troop_cur_center, "p_town_1"),
  32029. ]),
  32030.  
  32031. #script_update_villages_infested_by_bandits
  32032. # INPUT: none
  32033. # OUTPUT: none
  32034. ("update_villages_infested_by_bandits",
  32035. [(try_for_range, ":village_no", villages_begin, villages_end),
  32036. (try_begin),
  32037. (check_quest_active, "qst_eliminate_bandits_infesting_village"),
  32038. (quest_slot_eq, "qst_eliminate_bandits_infesting_village", slot_quest_target_center, ":village_no"),
  32039. (quest_get_slot, ":cur_state", "qst_eliminate_bandits_infesting_village", slot_quest_current_state),
  32040. (val_add, ":cur_state", 1),
  32041. (try_begin),
  32042. (lt, ":cur_state", 3),
  32043. (quest_set_slot, "qst_eliminate_bandits_infesting_village", slot_quest_current_state, ":cur_state"),
  32044. (else_try),
  32045. (party_set_slot, ":village_no", slot_village_infested_by_bandits, 0),
  32046. (call_script, "script_abort_quest", "qst_eliminate_bandits_infesting_village", 2),
  32047. (try_end),
  32048. (else_try),
  32049. (check_quest_active, "qst_deal_with_bandits_at_lords_village"),
  32050. (quest_slot_eq, "qst_deal_with_bandits_at_lords_village", slot_quest_target_center, ":village_no"),
  32051. (quest_get_slot, ":cur_state", "qst_deal_with_bandits_at_lords_village", slot_quest_current_state),
  32052. (val_add, ":cur_state", 1),
  32053. (try_begin),
  32054. (lt, ":cur_state", 3),
  32055. (quest_set_slot, "qst_deal_with_bandits_at_lords_village", slot_quest_current_state, ":cur_state"),
  32056. (else_try),
  32057. (party_set_slot, ":village_no", slot_village_infested_by_bandits, 0),
  32058. (call_script, "script_abort_quest", "qst_deal_with_bandits_at_lords_village", 2),
  32059. (try_end),
  32060. (else_try),
  32061. (party_set_slot, ":village_no", slot_village_infested_by_bandits, 0),
  32062. (store_random_in_range, ":random_no", 0, 100),
  32063. (assign, ":continue", 1),
  32064. (try_begin),
  32065. (check_quest_active, "qst_collect_taxes"),
  32066. (quest_slot_eq, "qst_collect_taxes", slot_quest_target_center, ":village_no"),
  32067. (assign, ":continue", 0),
  32068. (else_try),
  32069. (check_quest_active, "qst_train_peasants_against_bandits"),
  32070. (quest_slot_eq, "qst_train_peasants_against_bandits", slot_quest_target_center, ":village_no"),
  32071. (assign, ":continue", 0),
  32072. (try_end),
  32073. (eq, ":continue", 1),
  32074. (lt, ":random_no", 3),
  32075. (store_random_in_range, ":random_no", 0, 3),
  32076. (try_begin),
  32077. (eq, ":random_no", 0),
  32078. (assign, ":bandit_troop", "trp_bandit"),
  32079. (else_try),
  32080. (eq, ":random_no", 1),
  32081. (assign, ":bandit_troop", "trp_mountain_bandit"),
  32082. (else_try),
  32083. (assign, ":bandit_troop", "trp_forest_bandit"),
  32084. (try_end),
  32085. (party_set_slot, ":village_no", slot_village_infested_by_bandits, ":bandit_troop"),
  32086. #Reduce prosperity of the village by 3: reduce to -1
  32087. (call_script, "script_change_center_prosperity", ":village_no", -1),
  32088. (val_add, "$newglob_total_prosperity_from_bandits", -1),
  32089. (try_begin),
  32090. (eq, "$cheat_mode", 2),
  32091. (str_store_party_name, s1, ":village_no"),
  32092. (display_message, "@{!}DEBUG --{s1} is infested by bandits."),
  32093. (try_end),
  32094. (try_end),
  32095. (try_end),
  32096. ]),
  32097.  
  32098. #script_update_booksellers
  32099. # INPUT: none
  32100. # OUTPUT: none
  32101. ("update_booksellers",
  32102. [(try_for_range, ":town_no", towns_begin, towns_end),
  32103. (party_set_slot, ":town_no", slot_center_tavern_bookseller, 0),
  32104. (try_end),
  32105.  
  32106. (try_for_range, ":troop_no", tavern_booksellers_begin, tavern_booksellers_end),
  32107. (store_random_in_range, ":town_no", towns_begin, towns_end),
  32108. (party_set_slot, ":town_no", slot_center_tavern_bookseller, ":troop_no"),
  32109. (try_end),
  32110.  
  32111.  
  32112.  
  32113. ]),
  32114.  
  32115. #script_update_tavern_minstels
  32116. # INPUT: none
  32117. # OUTPUT: none
  32118. ("update_tavern_minstrels",
  32119. [(try_for_range, ":town_no", towns_begin, towns_end),
  32120. (party_set_slot, ":town_no", slot_center_tavern_minstrel, 0),
  32121. (try_end),
  32122.  
  32123. (try_for_range, ":troop_no", tavern_minstrels_begin, tavern_minstrels_end),
  32124. (store_random_in_range, ":town_no", towns_begin, towns_end),
  32125. (party_set_slot, ":town_no", slot_center_tavern_minstrel, ":troop_no"),
  32126. (try_begin),
  32127. (eq, "$cheat_mode", 1),
  32128. (str_store_troop_name, s4, ":troop_no"),
  32129. (str_store_party_name, s5, ":town_no"),
  32130.  
  32131. (display_message, "str_s4_is_at_s5"),
  32132. (try_end),
  32133. (try_end),
  32134.  
  32135.  
  32136. ]),
  32137.  
  32138. ("update_other_taverngoers",
  32139. [
  32140. (store_random_in_range, ":fight_promoter_tavern", towns_begin, towns_end),
  32141. (troop_set_slot, "trp_fight_promoter", slot_troop_cur_center, ":fight_promoter_tavern"),
  32142.  
  32143. (store_random_in_range, ":belligerent_drunk_tavern", towns_begin, towns_end),
  32144. (troop_set_slot, "trp_belligerent_drunk", slot_troop_cur_center, ":belligerent_drunk_tavern"),
  32145. ]),
  32146.  
  32147.  
  32148. #script_update_faction_notes
  32149. # INPUT: faction_no
  32150. # OUTPUT: none
  32151. ("update_faction_notes",
  32152. [
  32153. (store_script_param, ":faction_no", 1),
  32154.  
  32155. (try_begin),
  32156. (this_or_next|faction_slot_eq, ":faction_no", slot_faction_state, sfs_inactive),
  32157. (eq, ":faction_no", "fac_player_faction"),
  32158. (faction_set_note_available, ":faction_no", 0),
  32159. (else_try),
  32160. (faction_set_note_available, ":faction_no", 1),
  32161. (try_end),
  32162. ##
  32163. ## (try_begin),
  32164. ## (eq, 2, 1),
  32165. ## (str_store_faction_name, s14, ":faction_no"),
  32166. ## (assign, reg4, "$temp"),
  32167. ## (display_message, "str_updating_faction_notes_for_s14_temp_=_reg4"),
  32168. ## (try_end),
  32169. ##
  32170. ## (try_begin),
  32171. ## (is_between, ":faction_no", kingdoms_begin, kingdoms_end),
  32172. ## (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  32173. ## (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  32174. ## (str_store_faction_name, s5, ":faction_no"),
  32175. ## (str_store_troop_name_link, s6, ":faction_leader"),
  32176. ## (assign, ":num_centers", 0),
  32177. ## (str_store_string, s8, "@nowhere"),
  32178. ## (try_for_range_backwards, ":cur_center", centers_begin, centers_end),
  32179. ## (store_faction_of_party, ":center_faction", ":cur_center"),
  32180. ## (eq, ":center_faction", ":faction_no"),
  32181. ## (try_begin),
  32182. ## (eq, ":num_centers", 0),
  32183. ## (str_store_party_name_link, s8, ":cur_center"),
  32184. ## (else_try),
  32185. ## (eq, ":num_centers", 1),
  32186. ## (str_store_party_name_link, s7, ":cur_center"),
  32187. ## (str_store_string, s8, "@{s7} and {s8}"),
  32188. ## (else_try),
  32189. ## (str_store_party_name_link, s7, ":cur_center"),
  32190. ## (str_store_string, s8, "@{!}{s7}, {s8}"),
  32191. ## (try_end),
  32192. ## (val_add, ":num_centers", 1),
  32193. ## (try_end),
  32194. ## (assign, ":num_members", 0),
  32195. ## (str_store_string, s10, "@noone"),
  32196. ## (try_for_range_backwards, ":loop_var", "trp_kingdom_heroes_including_player_begin", active_npcs_end),
  32197. ## (assign, ":cur_troop", ":loop_var"),
  32198. ## (try_begin),
  32199. ## (eq, ":loop_var", "trp_kingdom_heroes_including_player_begin"),
  32200. ## (assign, ":cur_troop", "trp_player"),
  32201. ## (assign, ":troop_faction", "$players_kingdom"),
  32202. ## (else_try),
  32203. ## (store_troop_faction, ":troop_faction", ":cur_troop"),
  32204. ## (try_end),
  32205. ## (eq, ":troop_faction", ":faction_no"),
  32206. ## (neq, ":cur_troop", ":faction_leader"),
  32207. ## (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  32208. ## (try_begin),
  32209. ## (eq, ":num_members", 0),
  32210. ## (str_store_troop_name_link, s10, ":cur_troop"),
  32211. ## (else_try),
  32212. ## (eq, ":num_members", 1),
  32213. ## (str_store_troop_name_link, s9, ":cur_troop"),
  32214. ## (str_store_string, s10, "@{s9} and {s10}"),
  32215. ## (else_try),
  32216. ## (str_store_troop_name_link, s9, ":cur_troop"),
  32217. ## (str_store_string, s10, "@{!}{s9}, {s10}"),
  32218. ## (try_end),
  32219. ## (val_add, ":num_members", 1),
  32220. ## (try_end),
  32221. ##
  32222. ## #wars
  32223. ## (str_store_string, s12, "@noone"),
  32224. ### (assign, ":num_enemies", 0),
  32225. ### (try_for_range_backwards, ":cur_faction", kingdoms_begin, kingdoms_end),
  32226. ### (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  32227. ### (store_relation, ":cur_relation", ":cur_faction", ":faction_no"),
  32228. ### (lt, ":cur_relation", 0),
  32229. ### (try_begin),
  32230. ### (eq, ":num_enemies", 0),
  32231. ### (str_store_faction_name_link, s12, ":cur_faction"),
  32232. ### (else_try),
  32233. ### (eq, ":num_enemies", 1),
  32234. ### (str_store_faction_name_link, s11, ":cur_faction"),
  32235. ### (str_store_string, s12, "@the {s11} and the {s12}"),
  32236. ### (else_try),
  32237. ### (str_store_faction_name_link, s11, ":cur_faction"),
  32238. ### (str_store_string, s12, "@the {s11}, the {s12}"),
  32239. ### (try_end),
  32240. ### (val_add, ":num_enemies", 1),
  32241. ### (try_end),
  32242. ##
  32243. ## (str_store_string, s21, "str_foreign_relations__"),
  32244. ##
  32245. ## #other foreign relations
  32246. ## (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  32247. ## (faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
  32248. ## (neq, ":faction_no", ":cur_faction"),
  32249. ## (str_store_faction_name_link, s14, ":cur_faction"),
  32250. ## (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":faction_no", ":cur_faction"),
  32251. ## (assign, ":diplomatic_status", reg0),
  32252. ## (assign, reg2, reg1), #length of events
  32253. ## (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":cur_faction", ":faction_no"),
  32254. ## (assign, ":reverse_diplomatic_status", reg0),
  32255. ##
  32256. ##
  32257. ## (try_begin),
  32258. ## (eq, ":diplomatic_status", -2),
  32259. ## (str_store_string, s21, "str_s21__the_s5_is_at_war_with_the_s14"),
  32260. ##
  32261. ## (store_add, ":slot_war_damage_inflicted", ":cur_faction", slot_faction_war_damage_inflicted_on_factions_begin),
  32262. ## (val_sub, ":slot_war_damage_inflicted", kingdoms_begin),
  32263. ## (faction_get_slot, ":war_damage_inflicted", ":faction_no", ":slot_war_damage_inflicted"),
  32264. ## (store_mul, ":war_damage_inflicted_x_2", ":war_damage_inflicted", 2),
  32265. ##
  32266. ## (store_add, ":slot_war_damage_suffered", ":faction_no", slot_faction_war_damage_inflicted_on_factions_begin),
  32267. ## (val_sub, ":slot_war_damage_suffered", kingdoms_begin),
  32268. ## (faction_get_slot, ":war_damage_suffered", ":cur_faction", ":slot_war_damage_suffered"),
  32269. ## (store_mul, ":war_damage_suffered_x_2", ":war_damage_suffered", 2),
  32270. ##
  32271. ## (try_begin),
  32272. ## (gt, ":war_damage_inflicted", ":war_damage_suffered_x_2"),
  32273. ## (str_store_string, s21, "str_s21_the_s5_has_had_the_upper_hand_in_the_fighting"),
  32274. ## (else_try),
  32275. ## (gt, ":war_damage_suffered", ":war_damage_inflicted_x_2"),
  32276. ## (str_store_string, s21, "@{s21}. The {s14} has gotten the worst of the fighting."),
  32277. ## (else_try),
  32278. ## (gt, ":war_damage_inflicted", 100),
  32279. ## (gt, ":war_damage_inflicted", 100),
  32280. ## (str_store_string, s21, "str_s21_the_fighting_has_gone_on_for_some_time_and_the_war_may_end_soon_with_a_truce"),
  32281. ## (else_try),
  32282. ## (str_store_string, s21, "str_s21_the_fighting_has_begun_relatively_recently_and_the_war_may_continue_for_some_time"),
  32283. ## (try_end),
  32284. ##
  32285. ## (try_begin),
  32286. ## (eq, "$cheat_mode", 1),
  32287. ## (assign, reg4, ":war_damage_inflicted"),
  32288. ## (assign, reg5, ":war_damage_suffered"),
  32289. ## (str_store_string, s21, "str_s21_reg4reg5"),
  32290. ## (try_end),
  32291. ## (else_try),
  32292. ## (eq, ":diplomatic_status", 1),
  32293. ## (str_clear, s18),
  32294. ##
  32295. ## (try_begin),
  32296. ## (neq, reg0, 1),
  32297. ## (str_store_string, s18, "str__however_the_truce_is_no_longer_binding_on_the_s14"),
  32298. ## (try_end),
  32299. ## (str_store_string, s21, "str_s21__the_s5_is_bound_by_truce_not_to_attack_the_s14s18_the_truce_will_expire_in_reg1_days"),
  32300. ##
  32301. ## (else_try),
  32302. ## (eq, ":diplomatic_status", -1),
  32303. ## (str_store_string, s21, "str_s21__the_s5_has_recently_suffered_provocation_by_subjects_of_the_s14_and_there_is_a_risk_of_war"),
  32304. ## (else_try),
  32305. ## (eq, ":diplomatic_status", 0),
  32306. ## (str_store_string, s21, "str_s21__the_s5_has_no_outstanding_issues_with_the_s14"),
  32307. ## (try_end),
  32308. ##
  32309. ##
  32310. ## (try_begin),
  32311. ## (eq, ":reverse_diplomatic_status", -1),
  32312. ## (str_store_string, s21, "str_s21_the_s14_was_recently_provoked_by_subjects_of_the_s5_and_there_is_a_risk_of_war_"),
  32313. ## (try_end),
  32314. ##
  32315. ## (try_begin),
  32316. ## (eq, "$cheat_mode", 1),
  32317. ## (call_script, "script_diplomacy_faction_assess_faction_to_s14", ":faction_no", ":cur_faction", -1),
  32318. ## (str_store_string, s21, "str_s21_cheat_mode_assessment_s14_"),
  32319. ## (try_end),
  32320. ## (try_end),
  32321. ##
  32322. ##
  32323. ## (add_faction_note_from_sreg, ":faction_no", 0, "str_the_s5_is_ruled_by_s6_it_occupies_s8_its_vassals_are_s10__s21", 0),
  32324. ##
  32325. ##
  32326. ##
  32327. ## (else_try),
  32328. ## (is_between, ":faction_no", kingdoms_begin, kingdoms_end),
  32329. ## (faction_slot_eq, ":faction_no", slot_faction_state, sfs_defeated),
  32330. ## (str_store_faction_name, s5, ":faction_no"),
  32331. ## (add_faction_note_from_sreg, ":faction_no", 0, "@{s5} has been defeated!", 0),
  32332. ## (str_clear, s1),
  32333. ## (add_faction_note_from_sreg, ":faction_no", 1, s1, 0),
  32334. ## (else_try),
  32335. ## (str_clear, s1),
  32336. ## (add_faction_note_from_sreg, ":faction_no", 0, s1, 0),
  32337. ## (add_faction_note_from_sreg, ":faction_no", 1, s1, 0),
  32338. ## (try_end),
  32339. ##
  32340. ## (try_begin),
  32341. ## (is_between, ":faction_no", "fac_kingdom_1", kingdoms_end), #Excluding player kingdom
  32342. ## (add_faction_note_tableau_mesh, ":faction_no", "tableau_faction_note_mesh"),
  32343. ## (else_try),
  32344. ## (add_faction_note_tableau_mesh, ":faction_no", "tableau_faction_note_mesh_banner"),
  32345. ## (try_end),
  32346. ]),
  32347.  
  32348. ("update_faction_political_notes",
  32349. [(store_script_param, ":faction_no", 1),
  32350. (call_script, "script_evaluate_realm_stability", ":faction_no"),
  32351. (add_faction_note_from_sreg, ":faction_no", 2, "str_instability_reg0_of_lords_are_disgruntled_reg1_are_restless", 0),
  32352. ]),
  32353.  
  32354.  
  32355.  
  32356. #script_update_faction_traveler_notes
  32357. # INPUT: faction_no
  32358. # OUTPUT: none
  32359. ("update_faction_traveler_notes",
  32360. [(store_script_param, ":faction_no", 1),
  32361. (assign, ":total_men", 0),
  32362. (try_for_parties, ":cur_party"),
  32363. (store_faction_of_party, ":center_faction", ":cur_party"),
  32364. (eq, ":center_faction", ":faction_no"),
  32365. (party_get_num_companions, ":num_men", ":cur_party"),
  32366. (val_add, ":total_men", ":num_men"),
  32367. (try_end),
  32368. (str_store_faction_name, s5, ":faction_no"),
  32369. (assign, reg1, ":total_men"),
  32370. (add_faction_note_from_sreg, ":faction_no", 1, "@{s5} has a strength of {reg1} men in total.", 1),
  32371. ]),
  32372.  
  32373.  
  32374. #script_update_troop_notes
  32375. # INPUT: troop_no
  32376. # OUTPUT: none
  32377. ("update_troop_notes",
  32378. [
  32379. ## (store_script_param, ":troop_no", 1),
  32380. ## (str_store_troop_name, s54, ":troop_no"),
  32381. ## (try_begin),
  32382. ## (eq, ":troop_no", "trp_player"),
  32383. ## (this_or_next|eq, "$player_has_homage", 1),
  32384. ## (eq, "$players_kingdom", "fac_player_supporters_faction"),
  32385. ## (assign, ":troop_faction", "$players_kingdom"),
  32386. ## (else_try),
  32387. ## (store_troop_faction, ":troop_faction", ":troop_no"),
  32388. ## (try_end),
  32389. ##
  32390. ## (str_clear, s49),
  32391. ## (try_begin),
  32392. ## (is_between, ":troop_no", lords_begin, kingdom_ladies_end),
  32393. ## (troop_get_slot, reg1, ":troop_no", slot_troop_age),
  32394. ## (str_store_string, s49, "str__age_reg1_family_"),
  32395. ##
  32396. ## (try_for_range, ":aristocrat", lords_begin, kingdom_ladies_end),
  32397. ## (call_script, "script_troop_get_family_relation_to_troop", ":aristocrat", ":troop_no"),
  32398. ## (gt, reg0, 0),
  32399. ##
  32400. ## (try_begin),
  32401. ## (neg|is_between, ":aristocrat", kingdom_ladies_begin, kingdom_ladies_end),
  32402. ## (str_store_troop_name_link, s12, ":aristocrat"),
  32403. ## (call_script, "script_troop_get_relation_with_troop", ":aristocrat", ":troop_no"),
  32404. ## (str_store_string, s49, "str_s49_s12_s11_rel_reg0"),
  32405. ## (else_try),
  32406. ## (str_store_troop_name, s12, ":aristocrat"),
  32407. ## (str_store_string, s49, "str_s49_s12_s11"),
  32408. ## (try_end),
  32409. ##
  32410. ## (try_end),
  32411. ## (try_end),
  32412. ##
  32413. ## (try_begin),
  32414. ## (neq, ":troop_no", "trp_player"),
  32415. ## (neg|is_between, ":troop_faction", kingdoms_begin, kingdoms_end),
  32416. ## (str_clear, s54),
  32417. ## (add_troop_note_from_sreg, ":troop_no", 0, s54, 0),
  32418. ## (add_troop_note_from_sreg, ":troop_no", 1, s54, 0),
  32419. ## (add_troop_note_from_sreg, ":troop_no", 2, s54, 0),
  32420. ### (else_try),
  32421. ### (is_between, ":troop_no", kingdom_ladies_begin, kingdom_ladies_end),
  32422. ### (str_clear, s54),
  32423. ### (add_troop_note_from_sreg, ":troop_no", 0, s54, 0),
  32424. ### (add_troop_note_from_sreg, ":troop_no", 1, s54, 0),
  32425. ### (add_troop_note_from_sreg, ":troop_no", 2, s54, 0),
  32426. ## (else_try),
  32427. ## (is_between, ":troop_no", pretenders_begin, pretenders_end),
  32428. ## (neg|troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  32429. ## (neq, ":troop_no", "$supported_pretender"),
  32430. ## (troop_get_slot, ":orig_faction", ":troop_no", slot_troop_original_faction),
  32431. ## (try_begin),
  32432. ## (faction_slot_eq, ":orig_faction", slot_faction_state, sfs_active),
  32433. ## (faction_slot_eq, ":orig_faction", slot_faction_has_rebellion_chance, 1),
  32434. ## (str_store_faction_name_link, s56, ":orig_faction"),
  32435. ## (add_troop_note_from_sreg, ":troop_no", 0, "@{s54} is a claimant to the throne of {s56}.", 0),
  32436. ## (add_troop_note_tableau_mesh, ":troop_no", "tableau_troop_note_mesh"),
  32437. ## (else_try),
  32438. ## (str_clear, s54),
  32439. ## (add_troop_note_from_sreg, ":troop_no", 0, s54, 0),
  32440. ## (add_troop_note_from_sreg, ":troop_no", 1, s54, 0),
  32441. ## (add_troop_note_from_sreg, ":troop_no", 2, s54, 0),
  32442. ## (try_end),
  32443. ## (else_try),
  32444. ## (faction_get_slot, ":faction_leader", ":troop_faction", slot_faction_leader),
  32445. ## (str_store_troop_name_link, s55, ":faction_leader"),
  32446. ## (str_store_faction_name_link, s56, ":troop_faction"),
  32447. ## (assign, ":troop_is_player_faction", 0),
  32448. ## (assign, ":troop_is_faction_leader", 0),
  32449. ## (try_begin),
  32450. ## (eq, ":troop_faction", "fac_player_faction"),
  32451. ## (assign, ":troop_is_player_faction", 1),
  32452. ## (else_try),
  32453. ## (eq, ":faction_leader", ":troop_no"),
  32454. ## (assign, ":troop_is_faction_leader", 1),
  32455. ## (try_end),
  32456. ## (assign, ":num_centers", 0),
  32457. ## (str_store_string, s58, "@nowhere"),
  32458. ## (try_for_range_backwards, ":cur_center", centers_begin, centers_end),
  32459. ## (party_slot_eq, ":cur_center", slot_town_lord, ":troop_no"),
  32460. ## (try_begin),
  32461. ## (eq, ":num_centers", 0),
  32462. ## (str_store_party_name_link, s58, ":cur_center"),
  32463. ## (else_try),
  32464. ## (eq, ":num_centers", 1),
  32465. ## (str_store_party_name_link, s57, ":cur_center"),
  32466. ## (str_store_string, s58, "@{s57} and {s58}"),
  32467. ## (else_try),
  32468. ## (str_store_party_name_link, s57, ":cur_center"),
  32469. ## (str_store_string, s58, "@{!}{s57}, {s58}"),
  32470. ## (try_end),
  32471. ## (val_add, ":num_centers", 1),
  32472. ## (try_end),
  32473. ## (troop_get_type, reg3, ":troop_no"),
  32474. ## (troop_get_slot, reg5, ":troop_no", slot_troop_renown),
  32475. ## (str_clear, s59),
  32476. ## (try_begin),
  32477. ### (troop_get_slot, ":relation", ":troop_no", slot_troop_player_relation),
  32478. ## (call_script, "script_troop_get_player_relation", ":troop_no"),
  32479. ## (assign, ":relation", reg0),
  32480. ## (store_add, ":normalized_relation", ":relation", 100),
  32481. ## (val_add, ":normalized_relation", 5),
  32482. ## (store_div, ":str_offset", ":normalized_relation", 10),
  32483. ## (val_clamp, ":str_offset", 0, 20),
  32484. ## (store_add, ":str_id", "str_relation_mnus_100_ns", ":str_offset"),
  32485. ## (neq, ":str_id", "str_relation_plus_0_ns"),
  32486. ## (str_store_string, s60, "@{reg3?She:He}"),
  32487. ## (str_store_string, s59, ":str_id"),
  32488. ## (str_store_string, s59, "@{!}^{s59}"),
  32489. ## (try_end),
  32490. ##
  32491. ## #lord recruitment changes begin
  32492. ## #This sends a bunch of political information to s47.
  32493. ##
  32494. ##
  32495. ##
  32496. ##
  32497. ## #refresh registers
  32498. ## (assign, reg9, ":num_centers"),
  32499. ## (troop_get_type, reg3, ":troop_no"),
  32500. ## (troop_get_slot, reg5, ":troop_no", slot_troop_renown),
  32501. ## (assign, reg4, ":troop_is_faction_leader"),
  32502. ## (assign, reg6, ":troop_is_player_faction"),
  32503. ##
  32504. ## (add_troop_note_from_sreg, ":troop_no", 0, "str_reg6reg4s54_is_the_ruler_of_s56_s54_is_a_vassal_of_s55_of_s56_renown_reg5_reg9reg3shehe_is_the_reg3ladylord_of_s58reg3shehe_has_no_fiefss59_s49", 0),
  32505. ## #lord recruitment changes end
  32506. ##
  32507. ## (add_troop_note_tableau_mesh, ":troop_no", "tableau_troop_note_mesh"),
  32508. ## (try_end),
  32509. ]),
  32510.  
  32511. #script_update_troop_location_notes
  32512. # INPUT: troop_no
  32513. # OUTPUT: none
  32514. ("update_troop_location_notes",
  32515. [
  32516. (store_script_param, ":troop_no", 1),
  32517. (store_script_param, ":see_or_hear", 2),
  32518. (try_begin),
  32519. (call_script, "script_get_information_about_troops_position", ":troop_no", 1),
  32520. (neq, reg0, 0),
  32521.  
  32522. (call_script, "script_search_troop_prisoner_of_party", ":troop_no"),
  32523. (eq, reg0, -1),
  32524.  
  32525. (troop_get_type, reg1, ":troop_no"),
  32526. (try_begin),
  32527. (eq, ":see_or_hear", 0),
  32528. (add_troop_note_from_sreg, ":troop_no", 2, "@The last time you saw {reg1?her:him}, {s1}", 1),
  32529. (else_try),
  32530. (add_troop_note_from_sreg, ":troop_no", 2, "@The last time you heard about {reg1?her:him}, {s1}", 1),
  32531. (try_end),
  32532. (try_end),
  32533. ]),
  32534.  
  32535. #script_update_troop_location_notes_prisoned
  32536. # INPUT: troop_no
  32537. # OUTPUT: none
  32538. ("update_troop_location_notes_prisoned",
  32539. [
  32540. (store_script_param, ":troop_no", 1),
  32541. (store_script_param, ":capturer_faction_no", 2),
  32542.  
  32543. (troop_get_type, reg1, ":troop_no"),
  32544. (str_store_faction_name_link, s1, ":capturer_faction_no"),
  32545.  
  32546. (add_troop_note_from_sreg, ":troop_no", 2, "str_reg1shehe_is_prisoner_of_s1", 1),
  32547. ]),
  32548.  
  32549. ("update_troop_political_notes",
  32550. [
  32551. (store_script_param, ":troop_no", 1),
  32552. (try_begin),
  32553. (str_clear, s47),
  32554.  
  32555. (store_faction_of_troop, ":troop_faction", ":troop_no"),
  32556.  
  32557. (faction_get_slot, ":faction_leader", ":troop_faction", slot_faction_leader),
  32558.  
  32559. (str_clear, s40),
  32560. (assign, ":logged_a_rivalry", 0),
  32561. (try_for_range, ":kingdom_hero", active_npcs_begin, active_npcs_end),
  32562. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":kingdom_hero"),
  32563. (lt, reg0, -10),
  32564.  
  32565. (str_store_troop_name_link, s39, ":kingdom_hero"),
  32566. (try_begin),
  32567. (eq, ":logged_a_rivalry", 0),
  32568. (str_store_string, s40, "str_s39_rival"),
  32569. (assign, ":logged_a_rivalry", 1),
  32570. (else_try),
  32571. (str_store_string, s41, "str_s40"),
  32572. (str_store_string, s40, "str_s41_s39_rival"),
  32573. (try_end),
  32574.  
  32575. (try_end),
  32576.  
  32577. (str_clear, s46),
  32578. (try_begin),
  32579. (ge, "$cheat_mode", 1),
  32580. (try_begin),
  32581. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_martial),
  32582. (str_store_string, s46, "str_reputation_cheat_mode_only_martial_"),
  32583. (else_try),
  32584. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  32585. (str_store_string, s46, "str_reputation_cheat_mode_only_debauched_"),
  32586. (else_try),
  32587. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_selfrighteous),
  32588. (str_store_string, s46, "str_reputation_cheat_mode_only_pitiless_"),
  32589. (else_try),
  32590. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_cunning),
  32591. (str_store_string, s46, "str_reputation_cheat_mode_only_calculating_"),
  32592. (else_try),
  32593. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_quarrelsome),
  32594. (str_store_string, s46, "str_reputation_cheat_mode_only_quarrelsome_"),
  32595. (else_try),
  32596. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_goodnatured),
  32597. (str_store_string, s46, "str_reputation_cheat_mode_only_goodnatured_"),
  32598. (else_try),
  32599. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  32600. (str_store_string, s46, "str_reputation_cheat_mode_only_upstanding_"),
  32601. (else_try),
  32602. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_conventional),
  32603. (str_store_string, s46, "str_reputation_cheat_mode_only_conventional_"),
  32604. (else_try),
  32605. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_adventurous),
  32606. (str_store_string, s46, "str_reputation_cheat_mode_only_adventurous_"),
  32607. (else_try),
  32608. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_otherworldly),
  32609. (str_store_string, s46, "str_reputation_cheat_mode_only_romantic_"),
  32610. (else_try),
  32611. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_moralist),
  32612. (str_store_string, s46, "str_reputation_cheat_mode_only_moralist_"),
  32613. (else_try),
  32614. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_ambitious),
  32615. (str_store_string, s46, "str_reputation_cheat_mode_only_ambitious_"),
  32616. (else_try),
  32617. (troop_get_slot, reg11, ":troop_no", slot_lord_reputation_type),
  32618. (str_store_string, s46, "str_reputation_cheat_mode_only_reg11_"),
  32619. (try_end),
  32620.  
  32621. (try_begin),
  32622. (eq, "$cheat_mode", 1),
  32623. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  32624. (troop_get_slot, ":love_interest", ":troop_no", ":love_interest_slot"),
  32625. (is_between, ":love_interest", kingdom_ladies_begin, kingdom_ladies_end),
  32626. (str_store_troop_name_link, s39, ":love_interest"),
  32627. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":love_interest"),
  32628. (str_store_string, s2, "str_love_interest"),
  32629. (try_begin),
  32630. (troop_slot_eq, ":troop_no", slot_troop_betrothed, ":love_interest"),
  32631. (str_store_string, s2, "str_betrothed"),
  32632. (try_end),
  32633. (str_store_string, s40, "str_s40_s39_s2_reg0"),
  32634. (try_end),
  32635. (try_end),
  32636.  
  32637. (try_end),
  32638.  
  32639. (str_store_string, s45, "str_other_relations_s40_"),
  32640.  
  32641. (str_clear, s44),
  32642. (try_begin),
  32643. (neq, ":troop_no", ":faction_leader"),
  32644. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":faction_leader"),
  32645. (str_store_string, s44, "str_relation_with_liege_reg0_"),
  32646. (try_end),
  32647.  
  32648. (str_clear, s48),
  32649.  
  32650. (try_begin),
  32651. (eq, "$cheat_mode", 1),
  32652. (store_current_hours, ":hours"),
  32653. (gt, ":hours", 0),
  32654. # (display_message, "@{!}Updating political factors"),
  32655. (call_script, "script_calculate_troop_political_factors_for_liege", ":troop_no", ":faction_leader"),
  32656. (str_store_string, s48, "str_sense_of_security_military_reg1_court_position_reg3_"),
  32657. (try_end),
  32658. (str_store_string, s47, "str_s46s45s44s48"),
  32659.  
  32660. (add_troop_note_from_sreg, ":troop_no", 3, "str_political_details_s47_", 1),
  32661.  
  32662. (try_end),
  32663. ]),
  32664.  
  32665. #script_update_center_notes
  32666. # INPUT: center_no
  32667. # OUTPUT: none
  32668. ("update_center_notes",
  32669. [
  32670. ## (store_script_param, ":center_no", 1),
  32671. ##
  32672. ## (party_get_slot, ":lord_troop", ":center_no", slot_town_lord),
  32673. ## (try_begin),
  32674. ## (ge, ":lord_troop", 0),
  32675. ## (store_troop_faction, ":lord_faction", ":lord_troop"),
  32676. ## (str_store_troop_name_link, s1, ":lord_troop"),
  32677. ## (try_begin),
  32678. ## (eq, ":lord_troop", "trp_player"),
  32679. ## (gt, "$players_kingdom", 0),
  32680. ## (str_store_faction_name_link, s2, "$players_kingdom"),
  32681. ## (else_try),
  32682. ## (str_store_faction_name_link, s2, ":lord_faction"),
  32683. ## (try_end),
  32684. ## (str_store_party_name, s50, ":center_no"),
  32685. ## (try_begin),
  32686. ## (party_slot_eq, ":center_no", slot_party_type, spt_town),
  32687. ## (str_store_string, s51, "@The town of {s50}"),
  32688. ## (else_try),
  32689. ## (party_slot_eq, ":center_no", slot_party_type, spt_village),
  32690. ## (party_get_slot, ":bound_center", ":center_no", slot_village_bound_center),
  32691. ## (str_store_party_name_link, s52, ":bound_center"),
  32692. ## (str_store_string, s51, "@The village of {s50} near {s52}"),
  32693. ## (else_try),
  32694. ## (str_store_string, s51, "@{!}{s50}"),
  32695. ## (try_end),
  32696. ## (str_store_string, s2, "@{s51} belongs to {s1} of {s2}.^"),
  32697. ## (else_try),
  32698. ## (str_clear, s2),
  32699. ## (try_end),
  32700. ## (try_begin),
  32701. ## (is_between, ":center_no", villages_begin, villages_end),
  32702. ## (else_try),
  32703. ## (assign, ":num_villages", 0),
  32704. ## (try_for_range_backwards, ":village_no", villages_begin, villages_end),
  32705. ## (party_slot_eq, ":village_no", slot_village_bound_center, ":center_no"),
  32706. ## (try_begin),
  32707. ## (eq, ":num_villages", 0),
  32708. ## (str_store_party_name_link, s8, ":village_no"),
  32709. ## (else_try),
  32710. ## (eq, ":num_villages", 1),
  32711. ## (str_store_party_name_link, s7, ":village_no"),
  32712. ## (str_store_string, s8, "@{s7} and {s8}"),
  32713. ## (else_try),
  32714. ## (str_store_party_name_link, s7, ":village_no"),
  32715. ## (str_store_string, s8, "@{!}{s7}, {s8}"),
  32716. ## (try_end),
  32717. ## (val_add, ":num_villages", 1),
  32718. ## (try_end),
  32719. ## (try_begin),
  32720. ## (eq, ":num_villages", 0),
  32721. ## (str_store_string, s2, "@{s2}It has no villages.^"),
  32722. ## (else_try),
  32723. ## (store_sub, reg0, ":num_villages", 1),
  32724. ## (str_store_string, s2, "@{s2}{reg0?Its villages are:Its village is} {s8}.^"),
  32725. ## (try_end),
  32726. ## (try_end),
  32727. ## (call_script, "script_get_prosperity_text_to_s50", ":center_no"),
  32728. ## (add_party_note_from_sreg, ":center_no", 0, "@{s2}Its prosperity is: {s50}", 0),
  32729. ## (add_party_note_tableau_mesh, ":center_no", "tableau_center_note_mesh"),
  32730. ]),
  32731.  
  32732.  
  32733. #script_update_center_recon_notes
  32734. # INPUT: center_no
  32735. # OUTPUT: none
  32736. ("update_center_recon_notes",
  32737. [(store_script_param, ":center_no", 1),
  32738. (try_begin),
  32739. (this_or_next|is_between, ":center_no", towns_begin, towns_end),
  32740. (is_between, ":center_no", castles_begin, castles_end),
  32741. (party_get_slot, ":center_food_store", ":center_no", slot_party_food_store),
  32742. (call_script, "script_center_get_food_consumption", ":center_no"),
  32743. (assign, ":food_consumption", reg0),
  32744. (store_div, reg6, ":center_food_store", ":food_consumption"),
  32745. (party_collect_attachments_to_party, ":center_no", "p_collective_ally"),
  32746. (party_get_num_companions, reg5, "p_collective_ally"),
  32747. (add_party_note_from_sreg, ":center_no", 1, "@Current garrison consists of {reg5} men.^Has food stock for {reg6} days.", 1),
  32748. (try_end),
  32749. ]),
  32750.  
  32751. #script_update_all_notes
  32752. # INPUT: none
  32753. # OUTPUT: none
  32754. ("update_all_notes",
  32755. [
  32756. (call_script, "script_update_troop_notes", "trp_player"),
  32757. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  32758. (this_or_next|troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  32759. (this_or_next|troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_lady),
  32760. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_inactive_pretender),
  32761. (call_script, "script_update_troop_notes", ":troop_no"),
  32762. (try_end),
  32763. (try_for_range, ":center_no", centers_begin, centers_end),
  32764. (call_script, "script_update_center_notes", ":center_no"),
  32765. (try_end),
  32766. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  32767. (call_script, "script_update_faction_notes", ":faction_no"),
  32768. (try_end),
  32769. ]),
  32770.  
  32771. #script_agent_troop_get_banner_mesh
  32772. # INPUT: agent_no, troop_no
  32773. # OUTPUT: banner_mesh
  32774. ("agent_troop_get_banner_mesh",
  32775. [
  32776. (store_script_param, ":agent_no", 1),
  32777. (store_script_param, ":troop_no", 2),
  32778. (assign, ":banner_troop", -1),
  32779. (assign, ":banner_mesh", "mesh_banners_default_b"),
  32780. (try_begin),
  32781. (lt, ":agent_no", 0),
  32782. (try_begin),
  32783. (ge, ":troop_no", 0),
  32784. (this_or_next|troop_slot_ge, ":troop_no", slot_troop_banner_scene_prop, 1),
  32785. (eq, ":troop_no", "trp_player"),
  32786. (assign, ":banner_troop", ":troop_no"),
  32787. (else_try),
  32788. (is_between, ":troop_no", companions_begin, companions_end),
  32789. (assign, ":banner_troop", "trp_player"),
  32790. (else_try),
  32791. (assign, ":banner_mesh", "mesh_banners_default_a"),
  32792. (try_end),
  32793. (else_try),
  32794. (eq, "$g_is_quick_battle", 1),
  32795. (agent_get_team, ":agent_team", ":agent_no"),
  32796. (try_begin),
  32797. (eq, ":agent_team", 0),
  32798. (assign, ":banner_mesh", "$g_quick_battle_team_0_banner"),
  32799. (else_try),
  32800. (assign, ":banner_mesh", "$g_quick_battle_team_1_banner"),
  32801. (try_end),
  32802. (else_try),
  32803. (game_in_multiplayer_mode),
  32804. (agent_get_group, ":agent_group", ":agent_no"),
  32805. (try_begin),
  32806. (neg|player_is_active, ":agent_group"),
  32807. (agent_get_player_id, ":agent_group", ":agent_no"),
  32808. (try_end),
  32809. (try_begin),
  32810. #if player banners are not allowed, use the default banner mesh
  32811. (eq, "$g_multiplayer_allow_player_banners", 1),
  32812. (player_is_active, ":agent_group"),
  32813. (player_get_banner_id, ":player_banner", ":agent_group"),
  32814. (ge, ":player_banner", 0),
  32815. (store_add, ":banner_mesh", ":player_banner", arms_meshes_begin),
  32816. (assign, ":already_used", 0),
  32817. (try_for_range, ":cur_faction", npc_kingdoms_begin, npc_kingdoms_end), #wrong client data check
  32818. (faction_slot_eq, ":cur_faction", slot_faction_banner, ":banner_mesh"),
  32819. (assign, ":already_used", 1),
  32820. (try_end),
  32821. (try_begin),
  32822. (neg|is_between, ":banner_mesh", arms_meshes_begin, arms_meshes_end_minus_one),
  32823. (assign, ":already_used", 1),
  32824. (try_end),
  32825. (eq, ":already_used", 0), #otherwise use the default banner mesh
  32826. (else_try),
  32827. # #INVASION MODE START
  32828. # (assign, ":personal_banners", 0),
  32829. # (try_begin),
  32830. # (ge, ":agent_no", 0),
  32831. # (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  32832. # (agent_get_team, ":agent_team", ":agent_no"),
  32833. # (team_get_faction, ":team_faction_no", ":agent_team"),
  32834. # (this_or_next|eq, ":team_faction_no", "fac_outlaws"),
  32835. # (eq, ":team_faction_no", "fac_ccoop_all_stars"),
  32836. # (assign, ":personal_banners", 1),
  32837. # (try_end),
  32838. # (this_or_next|eq, ":personal_banners", 1),
  32839. # #INVASION MODE END
  32840. (agent_get_team, ":agent_team", ":agent_no"),
  32841. (team_get_faction, ":team_faction_no", ":agent_team"),
  32842.  
  32843. (try_begin),
  32844. (agent_is_human, ":agent_no"),
  32845. (try_begin),
  32846. (this_or_next|eq, ":team_faction_no", "fac_outlaws"),
  32847. (eq, ":team_faction_no", "fac_ccoop_all_stars"),
  32848. (agent_get_troop_id, ":troop_no", ":agent_no"),
  32849. (store_troop_faction, ":team_faction_no", ":troop_no"),
  32850. (try_end),
  32851. (faction_get_slot, ":banner_mesh", ":team_faction_no", slot_faction_banner),
  32852. (else_try),
  32853. (agent_get_rider, ":rider_agent_no", ":agent_no"),
  32854. #(agent_get_position, pos1, ":agent_no"),
  32855. #(position_get_x, ":pos_x", pos1),
  32856. #(position_get_y, ":pos_y", pos1),
  32857. #(assign, reg0, ":pos_x"),
  32858. #(assign, reg1, ":pos_y"),
  32859. #(assign, reg2, ":agent_no"),
  32860. #(display_message, "@{!}agent_no:{reg2}, pos_x:{reg0} , posy:{reg1}"),
  32861. (try_begin),
  32862. (ge, ":rider_agent_no", 0),
  32863. (agent_is_active, ":rider_agent_no"),
  32864. (agent_get_team, ":rider_agent_team", ":rider_agent_no"),
  32865. (team_get_faction, ":rider_team_faction_no", ":rider_agent_team"),
  32866. (faction_get_slot, ":banner_mesh", ":rider_team_faction_no", slot_faction_banner),
  32867. (else_try),
  32868. (assign, ":banner_mesh", "mesh_banners_default_c"),
  32869. (try_end),
  32870. (try_end),
  32871. (try_end),
  32872. (else_try),
  32873. (agent_get_troop_id, ":troop_id", ":agent_no"),
  32874. (this_or_next|troop_slot_ge, ":troop_id", slot_troop_banner_scene_prop, 1),
  32875. (eq, ":troop_no", "trp_player"),
  32876. (assign, ":banner_troop", ":troop_id"),
  32877. (else_try),
  32878. (agent_get_party_id, ":agent_party", ":agent_no"),
  32879. (try_begin),
  32880. (lt, ":agent_party", 0),
  32881. (is_between, ":troop_id", companions_begin, companions_end),
  32882. (main_party_has_troop, ":troop_id"),
  32883. (assign, ":agent_party", "p_main_party"),
  32884. (try_end),
  32885. (ge, ":agent_party", 0),
  32886. (party_get_template_id, ":party_template", ":agent_party"),
  32887. (try_begin),
  32888. (eq, ":party_template", "pt_deserters"),
  32889. (assign, ":banner_mesh", "mesh_banners_default_c"),
  32890. (else_try),
  32891. (is_between, ":agent_party", centers_begin, centers_end),
  32892. (is_between, ":troop_id", companions_begin, companions_end),
  32893. (neq, "$talk_context", tc_tavern_talk),
  32894. #this should be a captured companion in prison
  32895. (assign, ":banner_troop", "trp_player"),
  32896. (else_try),
  32897. (is_between, ":agent_party", centers_begin, centers_end),
  32898. (party_get_slot, ":town_lord", "$g_encountered_party", slot_town_lord),
  32899. (ge, ":town_lord", 0),
  32900. (assign, ":banner_troop", ":town_lord"),
  32901. (else_try),
  32902. (this_or_next|party_slot_eq, ":agent_party", slot_party_type, spt_kingdom_hero_party),
  32903. (eq, ":agent_party", "p_main_party"),
  32904. (party_get_num_companion_stacks, ":num_stacks", ":agent_party"),
  32905. (gt, ":num_stacks", 0),
  32906. (party_stack_get_troop_id, ":leader_troop_id", ":agent_party", 0),
  32907. (this_or_next|troop_slot_ge, ":leader_troop_id", slot_troop_banner_scene_prop, 1),
  32908. (eq, ":leader_troop_id", "trp_player"),
  32909. (assign, ":banner_troop", ":leader_troop_id"),
  32910. (try_end),
  32911. (else_try), #Check if we are in a tavern
  32912. (eq, "$talk_context", tc_tavern_talk),
  32913. (neq, ":troop_no", "trp_player"),
  32914. (assign, ":banner_mesh", "mesh_banners_default_d"),
  32915. (else_try), #can't find party, this can be a town guard
  32916. (neq, ":troop_no", "trp_player"),
  32917. (is_between, "$g_encountered_party", walled_centers_begin, walled_centers_end),
  32918. (party_get_slot, ":town_lord", "$g_encountered_party", slot_town_lord),
  32919. (ge, ":town_lord", 0),
  32920. (assign, ":banner_troop", ":town_lord"),
  32921. (try_end),
  32922. (try_begin),
  32923. (ge, ":banner_troop", 0),
  32924. (try_begin),
  32925. (neg|troop_slot_ge, ":banner_troop", slot_troop_banner_scene_prop, 1),
  32926. (assign, ":banner_mesh", "mesh_banners_default_b"),
  32927. (else_try),
  32928. (troop_get_slot, ":banner_spr", ":banner_troop", slot_troop_banner_scene_prop),
  32929. (store_add, ":banner_scene_props_end", banner_scene_props_end_minus_one, 1),
  32930. (is_between, ":banner_spr", banner_scene_props_begin, ":banner_scene_props_end"),
  32931. (val_sub, ":banner_spr", banner_scene_props_begin),
  32932. (store_add, ":banner_mesh", ":banner_spr", arms_meshes_begin),
  32933. (try_end),
  32934. (try_end),
  32935. (assign, reg0, ":banner_mesh"),
  32936. ]),
  32937. #script_shield_item_set_banner
  32938. # INPUT: agent_no
  32939. # OUTPUT: none
  32940. ("shield_item_set_banner",
  32941. [
  32942. (store_script_param, ":tableau_no",1),
  32943. (store_script_param, ":agent_no", 2),
  32944. (store_script_param, ":troop_no", 3),
  32945. (call_script, "script_agent_troop_get_banner_mesh", ":agent_no", ":troop_no"),
  32946. (cur_item_set_tableau_material, ":tableau_no", reg0),
  32947. ]),
  32948.  
  32949.  
  32950. #script_troop_agent_set_banner
  32951. # INPUT: agent_no
  32952. # OUTPUT: none
  32953. ("troop_agent_set_banner",
  32954. [
  32955. (store_script_param, ":tableau_no",1),
  32956. (store_script_param, ":agent_no", 2),
  32957. (store_script_param, ":troop_no", 3),
  32958. (call_script, "script_agent_troop_get_banner_mesh", ":agent_no", ":troop_no"),
  32959. (cur_agent_set_banner_tableau_material, ":tableau_no", reg0),
  32960. ]),
  32961.  
  32962. ## #script_shield_item_set_banner
  32963. ## # INPUT: agent_no
  32964. ## # OUTPUT: none
  32965. ## ("shield_item_set_banner",
  32966. ## [
  32967. ## (store_script_param, ":tableau_no",1),
  32968. ## (store_script_param, ":agent_no", 2),
  32969. ## (store_script_param, ":troop_no", 3),
  32970. ## (assign, ":banner_troop", -1),
  32971. ## (try_begin),
  32972. ## (lt, ":agent_no", 0),
  32973. ## (try_begin),
  32974. ## (ge, ":troop_no", 0),
  32975. ## (troop_slot_ge, ":troop_no", slot_troop_banner_scene_prop, 0),
  32976. ## (assign, ":banner_troop", ":troop_no"),
  32977. ## (else_try),
  32978. ## (assign, ":banner_troop", -2),
  32979. ## (try_end),
  32980. ## (else_try),
  32981. ## (agent_get_troop_id, ":troop_id", ":agent_no"),
  32982. ## (troop_slot_ge, ":troop_id", slot_troop_custom_banner_flag_type, 0),
  32983. ## (assign, ":banner_troop", ":troop_id"),
  32984. ## (else_try),
  32985. ## (agent_get_party_id, ":agent_party", ":agent_no"),
  32986. ## (try_begin),
  32987. ## (lt, ":agent_party", 0),
  32988. ## (is_between, ":troop_id", companions_begin, companions_end),
  32989. ## (main_party_has_troop, ":troop_id"),
  32990. ## (assign, ":agent_party", "p_main_party"),
  32991. ## (try_end),
  32992. ## (ge, ":agent_party", 0),
  32993. ## (party_get_template_id, ":party_template", ":agent_party"),
  32994. ## (try_begin),
  32995. ## (eq, ":party_template", "pt_deserters"),
  32996. ## (assign, ":banner_troop", -3),
  32997. ## (else_try),
  32998. ## (is_between, ":agent_party", centers_begin, centers_end),
  32999. ## (party_get_slot, ":town_lord", "$g_encountered_party", slot_town_lord),
  33000. ## (ge, ":town_lord", 0),
  33001. ## (assign, ":banner_troop", ":town_lord"),
  33002. ## (else_try),
  33003. ## (this_or_next|party_slot_eq, ":agent_party", slot_party_type, spt_kingdom_hero_party),
  33004. ## ( eq, ":agent_party", "p_main_party"),
  33005. ## (party_get_num_companion_stacks, ":num_stacks", ":agent_party"),
  33006. ## (gt, ":num_stacks", 0),
  33007. ## (party_stack_get_troop_id, ":leader_troop_id", ":agent_party", 0),
  33008. ## (troop_slot_ge, ":leader_troop_id", slot_troop_banner_scene_prop, 1),
  33009. ## (assign, ":banner_troop", ":leader_troop_id"),
  33010. ## (try_end),
  33011. ## (else_try), #Check if we are in a tavern
  33012. ## (eq, "$talk_context", tc_tavern_talk),
  33013. ## (neq, ":troop_no", "trp_player"),
  33014. ## (assign, ":banner_troop", -4),
  33015. ## (else_try), #can't find party, this can be a town guard
  33016. ## (neq, ":troop_no", "trp_player"),
  33017. ## (is_between, "$g_encountered_party", walled_centers_begin, walled_centers_end),
  33018. ## (party_get_slot, ":town_lord", "$g_encountered_party", slot_town_lord),
  33019. ## (ge, ":town_lord", 0),
  33020. ## (assign, ":banner_troop", ":town_lord"),
  33021. ## (try_end),
  33022. ## (cur_item_set_tableau_material, ":tableau_no", ":banner_troop"),
  33023. ## ]),
  33024.  
  33025. #script_add_troop_to_cur_tableau
  33026. # INPUT: troop_no
  33027. # OUTPUT: none
  33028. ("add_troop_to_cur_tableau",
  33029. [
  33030. (store_script_param, ":troop_no",1),
  33031.  
  33032. (set_fixed_point_multiplier, 100),
  33033. (assign, ":banner_mesh", -1),
  33034. (troop_get_slot, ":banner_spr", ":troop_no", slot_troop_banner_scene_prop),
  33035. (store_add, ":banner_scene_props_end", banner_scene_props_end_minus_one, 1),
  33036. (try_begin),
  33037. (is_between, ":banner_spr", banner_scene_props_begin, ":banner_scene_props_end"),
  33038. (val_sub, ":banner_spr", banner_scene_props_begin),
  33039. (store_add, ":banner_mesh", ":banner_spr", banner_meshes_begin),
  33040. (try_end),
  33041.  
  33042. (cur_tableau_clear_override_items),
  33043.  
  33044. # (cur_tableau_set_override_flags, af_override_fullhelm),
  33045. (cur_tableau_set_override_flags, af_override_head|af_override_weapons),
  33046.  
  33047. (init_position, pos2),
  33048. (cur_tableau_set_camera_parameters, 1, 6, 6, 10, 10000),
  33049.  
  33050. (init_position, pos5),
  33051. (assign, ":eye_height", 162),
  33052. (store_mul, ":camera_distance", ":troop_no", 87323),
  33053. # (val_mod, ":camera_distance", 5),
  33054. (assign, ":camera_distance", 139),
  33055. (store_mul, ":camera_yaw", ":troop_no", 124337),
  33056. (val_mod, ":camera_yaw", 50),
  33057. (val_add, ":camera_yaw", -25),
  33058. (store_mul, ":camera_pitch", ":troop_no", 98123),
  33059. (val_mod, ":camera_pitch", 20),
  33060. (val_add, ":camera_pitch", -14),
  33061. (assign, ":animation", "anim_stand_man"),
  33062.  
  33063. ## (troop_get_inventory_slot, ":horse_item", ":troop_no", ek_horse),
  33064. ## (try_begin),
  33065. ## (gt, ":horse_item", 0),
  33066. ## (assign, ":eye_height", 210),
  33067. ## (cur_tableau_add_horse, ":horse_item", pos2, anim_horse_stand, 0),
  33068. ## (assign, ":animation", anim_ride_0),
  33069. ## (position_set_z, pos5, 125),
  33070. ## (try_begin),
  33071. ## (is_between, ":camera_yaw", -10, 10), #make sure horse head doesn't obstruct face.
  33072. ## (val_min, ":camera_pitch", -5),
  33073. ## (try_end),
  33074. ## (try_end),
  33075. (position_set_z, pos5, ":eye_height"),
  33076.  
  33077. # camera looks towards -z axis
  33078. (position_rotate_x, pos5, -90),
  33079. (position_rotate_z, pos5, 180),
  33080.  
  33081. # now apply yaw and pitch
  33082. (position_rotate_y, pos5, ":camera_yaw"),
  33083. (position_rotate_x, pos5, ":camera_pitch"),
  33084. (position_move_z, pos5, ":camera_distance", 0),
  33085. (position_move_x, pos5, 5, 0),
  33086.  
  33087. (try_begin),
  33088. (ge, ":banner_mesh", 0),
  33089.  
  33090. (init_position, pos1),
  33091. (position_set_z, pos1, -1500),
  33092. (position_set_x, pos1, 265),
  33093. (position_set_y, pos1, 400),
  33094. (position_transform_position_to_parent, pos3, pos5, pos1),
  33095. (cur_tableau_add_mesh, ":banner_mesh", pos3, 400, 0),
  33096. (try_end),
  33097. (cur_tableau_add_troop, ":troop_no", pos2, ":animation" , 0),
  33098.  
  33099. (cur_tableau_set_camera_position, pos5),
  33100.  
  33101. (copy_position, pos8, pos5),
  33102. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  33103. (position_rotate_z, pos8, 30),
  33104. (position_rotate_x, pos8, -60),
  33105. (cur_tableau_add_sun_light, pos8, 175,150,125),
  33106. ]),
  33107.  
  33108. #script_add_troop_to_cur_tableau_for_character
  33109. # INPUT: troop_no
  33110. # OUTPUT: none
  33111. ("add_troop_to_cur_tableau_for_character",
  33112. [
  33113. (store_script_param, ":troop_no",1),
  33114.  
  33115. (set_fixed_point_multiplier, 100),
  33116.  
  33117. (cur_tableau_clear_override_items),
  33118. (cur_tableau_set_override_flags, af_override_fullhelm),
  33119. ## (cur_tableau_set_override_flags, af_override_head|af_override_weapons),
  33120.  
  33121. (init_position, pos2),
  33122. (cur_tableau_set_camera_parameters, 1, 4, 8, 10, 10000),
  33123.  
  33124. (init_position, pos5),
  33125. (assign, ":cam_height", 150),
  33126. # (val_mod, ":camera_distance", 5),
  33127. (assign, ":camera_distance", 360),
  33128. (assign, ":camera_yaw", -15),
  33129. (assign, ":camera_pitch", -18),
  33130. (assign, ":animation", anim_stand_man),
  33131.  
  33132. (position_set_z, pos5, ":cam_height"),
  33133.  
  33134. # camera looks towards -z axis
  33135. (position_rotate_x, pos5, -90),
  33136. (position_rotate_z, pos5, 180),
  33137.  
  33138. # now apply yaw and pitch
  33139. (position_rotate_y, pos5, ":camera_yaw"),
  33140. (position_rotate_x, pos5, ":camera_pitch"),
  33141. (position_move_z, pos5, ":camera_distance", 0),
  33142. (position_move_x, pos5, 5, 0),
  33143.  
  33144. (try_begin),
  33145. (troop_is_hero, ":troop_no"),
  33146. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", -1),
  33147. (else_try),
  33148. (store_mul, ":random_seed", ":troop_no", 126233),
  33149. (val_mod, ":random_seed", 1000),
  33150. (val_add, ":random_seed", 1),
  33151. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", ":random_seed"),
  33152. (try_end),
  33153. (cur_tableau_set_camera_position, pos5),
  33154.  
  33155. (copy_position, pos8, pos5),
  33156. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  33157. (position_rotate_z, pos8, 30),
  33158. (position_rotate_x, pos8, -60),
  33159. (cur_tableau_add_sun_light, pos8, 175,150,125),
  33160. ]),
  33161.  
  33162. #script_add_troop_to_cur_tableau_for_inventory
  33163. # INPUT: troop_no
  33164. # OUTPUT: none
  33165. ("add_troop_to_cur_tableau_for_inventory",
  33166. [
  33167. (store_script_param, ":troop_no",1),
  33168. (store_mod, ":side", ":troop_no", 4), #side flag is inside troop_no value
  33169. (val_div, ":troop_no", 4), #removing the flag bit
  33170. (val_mul, ":side", 90), #to degrees
  33171.  
  33172. (set_fixed_point_multiplier, 100),
  33173.  
  33174. (cur_tableau_clear_override_items),
  33175.  
  33176. (init_position, pos2),
  33177. (position_rotate_z, pos2, ":side"),
  33178. (cur_tableau_set_camera_parameters, 1, 4, 6, 10, 10000),
  33179.  
  33180. (init_position, pos5),
  33181. (assign, ":cam_height", 105),
  33182. # (val_mod, ":camera_distance", 5),
  33183. (assign, ":camera_distance", 380),
  33184. (assign, ":camera_yaw", -15),
  33185. (assign, ":camera_pitch", -18),
  33186. (assign, ":animation", anim_stand_man),
  33187.  
  33188. (position_set_z, pos5, ":cam_height"),
  33189.  
  33190. # camera looks towards -z axis
  33191. (position_rotate_x, pos5, -90),
  33192. (position_rotate_z, pos5, 180),
  33193.  
  33194. # now apply yaw and pitch
  33195. (position_rotate_y, pos5, ":camera_yaw"),
  33196. (position_rotate_x, pos5, ":camera_pitch"),
  33197. (position_move_z, pos5, ":camera_distance", 0),
  33198. (position_move_x, pos5, 5, 0),
  33199.  
  33200. (try_begin),
  33201. (troop_is_hero, ":troop_no"),
  33202. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", -1),
  33203. (else_try),
  33204. (store_mul, ":random_seed", ":troop_no", 126233),
  33205. (val_mod, ":random_seed", 1000),
  33206. (val_add, ":random_seed", 1),
  33207. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", ":random_seed"),
  33208. (try_end),
  33209. (cur_tableau_set_camera_position, pos5),
  33210.  
  33211. (copy_position, pos8, pos5),
  33212. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  33213. (position_rotate_z, pos8, 30),
  33214. (position_rotate_x, pos8, -60),
  33215. (cur_tableau_add_sun_light, pos8, 175,150,125),
  33216. ]),
  33217.  
  33218. #script_add_troop_to_cur_tableau_for_profile
  33219. # INPUT: troop_no
  33220. # OUTPUT: none
  33221. ("add_troop_to_cur_tableau_for_profile",
  33222. [
  33223. (store_script_param, ":troop_no",1),
  33224.  
  33225. (set_fixed_point_multiplier, 100),
  33226.  
  33227. (cur_tableau_clear_override_items),
  33228.  
  33229. (cur_tableau_set_camera_parameters, 1, 4, 6, 10, 10000),
  33230.  
  33231. (init_position, pos5),
  33232. (assign, ":cam_height", 105),
  33233. # (val_mod, ":camera_distance", 5),
  33234. (assign, ":camera_distance", 380),
  33235. (assign, ":camera_yaw", -15),
  33236. (assign, ":camera_pitch", -18),
  33237. (assign, ":animation", anim_stand_man),
  33238.  
  33239. (position_set_z, pos5, ":cam_height"),
  33240.  
  33241. # camera looks towards -z axis
  33242. (position_rotate_x, pos5, -90),
  33243. (position_rotate_z, pos5, 180),
  33244.  
  33245. # now apply yaw and pitch
  33246. (position_rotate_y, pos5, ":camera_yaw"),
  33247. (position_rotate_x, pos5, ":camera_pitch"),
  33248. (position_move_z, pos5, ":camera_distance", 0),
  33249. (position_move_x, pos5, 5, 0),
  33250.  
  33251. (profile_get_banner_id, ":profile_banner"),
  33252. (try_begin),
  33253. (ge, ":profile_banner", 0),
  33254. (init_position, pos2),
  33255. (val_add, ":profile_banner", banner_meshes_begin),
  33256. (position_set_x, pos2, -175),
  33257. (position_set_y, pos2, -300),
  33258. (position_set_z, pos2, 180),
  33259. (position_rotate_x, pos2, 90),
  33260. (position_rotate_y, pos2, -15),
  33261. (cur_tableau_add_mesh, ":profile_banner", pos2, 0, 0),
  33262. (try_end),
  33263.  
  33264. (init_position, pos2),
  33265. (try_begin),
  33266. (troop_is_hero, ":troop_no"),
  33267. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", -1),
  33268. (else_try),
  33269. (store_mul, ":random_seed", ":troop_no", 126233),
  33270. (val_mod, ":random_seed", 1000),
  33271. (val_add, ":random_seed", 1),
  33272. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", ":random_seed"),
  33273. (try_end),
  33274. (cur_tableau_set_camera_position, pos5),
  33275.  
  33276. (copy_position, pos8, pos5),
  33277. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  33278. (position_rotate_z, pos8, 30),
  33279. (position_rotate_x, pos8, -60),
  33280. (cur_tableau_add_sun_light, pos8, 175,150,125),
  33281. ]),
  33282.  
  33283. #script_add_troop_to_cur_tableau_for_retirement
  33284. # INPUT: type
  33285. # OUTPUT: none
  33286. ("add_troop_to_cur_tableau_for_retirement", [
  33287. (store_script_param, ":type", 1),
  33288. (cur_tableau_set_override_flags, af_override_everything),
  33289.  
  33290. (try_begin),
  33291. (eq, ":type", 0),
  33292. (cur_tableau_add_override_item, "itm_pilgrim_hood"),
  33293. (cur_tableau_add_override_item, "itm_pilgrim_disguise"),
  33294. (cur_tableau_add_override_item, "itm_wrapping_boots"),
  33295. (assign, ":animation", "anim_pose_1"),
  33296. (else_try),
  33297. (eq, ":type", 1),
  33298. (cur_tableau_add_override_item, "itm_pilgrim_hood"),
  33299. (cur_tableau_add_override_item, "itm_red_tunic"),
  33300. (cur_tableau_add_override_item, "itm_wrapping_boots"),
  33301. (cur_tableau_add_override_item, "itm_dagger"),
  33302. (assign, ":animation", "anim_pose_1"),
  33303. (else_try),
  33304. (eq, ":type", 2),
  33305. (cur_tableau_add_override_item, "itm_linen_tunic"),
  33306. (cur_tableau_add_override_item, "itm_wrapping_boots"),
  33307. (assign, ":animation", "anim_pose_2"),
  33308. (else_try),
  33309. (eq, ":type", 3),
  33310. (cur_tableau_add_override_item, "itm_nomad_vest"),
  33311. (cur_tableau_add_override_item, "itm_nomad_boots"),
  33312. (assign, ":animation", "anim_pose_2"),
  33313. (else_try),
  33314. (eq, ":type", 4),
  33315. (cur_tableau_add_override_item, "itm_leather_apron"),
  33316. (cur_tableau_add_override_item, "itm_leather_boots"),
  33317. (assign, ":animation", "anim_pose_3"),
  33318. (else_try),
  33319. (eq, ":type", 5),
  33320. (cur_tableau_add_override_item, "itm_red_shirt"),
  33321. (cur_tableau_add_override_item, "itm_woolen_hose"),
  33322. (cur_tableau_add_override_item, "itm_fur_hat"),
  33323. (assign, ":animation", "anim_pose_3"),
  33324. (else_try),
  33325. (eq, ":type", 6),
  33326. (cur_tableau_add_override_item, "itm_red_gambeson"),
  33327. (cur_tableau_add_override_item, "itm_leather_boots"),
  33328. (cur_tableau_add_override_item, "itm_sword_medieval_c"),
  33329. (assign, ":animation", "anim_pose_4"),
  33330. (else_try),
  33331. (eq, ":type", 7),
  33332. (cur_tableau_add_override_item, "itm_nobleman_outfit"),
  33333. (cur_tableau_add_override_item, "itm_blue_hose"),
  33334. (cur_tableau_add_override_item, "itm_sword_medieval_c"),
  33335. (assign, ":animation", "anim_pose_4"),
  33336. (else_try),
  33337. (eq, ":type", 8),
  33338. (cur_tableau_add_override_item, "itm_courtly_outfit"),
  33339. (cur_tableau_add_override_item, "itm_woolen_hose"),
  33340. (cur_tableau_add_override_item, "itm_sword_medieval_c"),
  33341. (assign, ":animation", "anim_pose_4"),
  33342. (else_try),
  33343. ## (eq, ":type", 9),
  33344. (cur_tableau_add_override_item, "itm_heraldic_mail_with_surcoat_for_tableau"),
  33345. (cur_tableau_add_override_item, "itm_mail_boots_for_tableau"),
  33346. (cur_tableau_add_override_item, "itm_sword_medieval_c"),
  33347. (assign, ":animation", "anim_pose_5"),
  33348. ## (else_try), #not used
  33349. ## (cur_tableau_add_override_item, "itm_heraldic_mail_with_tabard"),
  33350. ## (cur_tableau_add_override_item, "itm_iron_greaves"),
  33351. ## (cur_tableau_add_override_item, "itm_sword_medieval_c"),
  33352. ## (assign, ":animation", "anim_pose_5"),
  33353. (try_end),
  33354.  
  33355. ## (set_fixed_point_multiplier, 100),
  33356. ## (cur_tableau_set_background_color, 0x00000000),
  33357. ## (cur_tableau_set_ambient_light, 10,11,15),
  33358.  
  33359. ## (init_position, pos8),
  33360. ## (position_set_x, pos8, -210),
  33361. ## (position_set_y, pos8, 200),
  33362. ## (position_set_z, pos8, 300),
  33363. ## (cur_tableau_add_point_light, pos8, 550,500,450),
  33364.  
  33365.  
  33366. (set_fixed_point_multiplier, 100),
  33367. (cur_tableau_set_camera_parameters, 1, 6, 6, 10, 10000),
  33368. (assign, ":cam_height", 155),
  33369. (assign, ":camera_distance", 575),
  33370. (assign, ":camera_yaw", -5),
  33371. (assign, ":camera_pitch", 10),
  33372.  
  33373. (init_position, pos5),
  33374. (position_set_z, pos5, ":cam_height"),
  33375. # camera looks towards -z axis
  33376. (position_rotate_x, pos5, -90),
  33377. (position_rotate_z, pos5, 180),
  33378. # now apply yaw and pitch
  33379. (position_rotate_y, pos5, ":camera_yaw"),
  33380. (position_rotate_x, pos5, ":camera_pitch"),
  33381. (position_move_z, pos5, ":camera_distance", 0),
  33382. (position_move_x, pos5, 60, 0),
  33383.  
  33384. (init_position, pos2),
  33385. (cur_tableau_add_troop, "trp_player", pos2, ":animation", 0),
  33386. (cur_tableau_set_camera_position, pos5),
  33387.  
  33388. (copy_position, pos8, pos5),
  33389. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  33390. (position_rotate_z, pos8, 30),
  33391. (position_rotate_x, pos8, -60),
  33392. (cur_tableau_add_sun_light, pos8, 175,150,125),
  33393. ]),
  33394.  
  33395. #script_add_troop_to_cur_tableau_for_party
  33396. # INPUT: troop_no
  33397. # OUTPUT: none
  33398. ("add_troop_to_cur_tableau_for_party",
  33399. [
  33400. (store_script_param, ":troop_no",1),
  33401. (store_mod, ":hide_weapons", ":troop_no", 2), #hide_weapons flag is inside troop_no value
  33402. (val_div, ":troop_no", 2), #removing the flag bit
  33403.  
  33404. (set_fixed_point_multiplier, 100),
  33405.  
  33406. (cur_tableau_clear_override_items),
  33407. (try_begin),
  33408. (eq, ":hide_weapons", 1),
  33409. (cur_tableau_set_override_flags, af_override_fullhelm|af_override_head|af_override_weapons),
  33410. (try_end),
  33411.  
  33412. (init_position, pos2),
  33413. (cur_tableau_set_camera_parameters, 1, 6, 6, 10, 10000),
  33414.  
  33415. (init_position, pos5),
  33416. (assign, ":cam_height", 105),
  33417. # (val_mod, ":camera_distance", 5),
  33418. (assign, ":camera_distance", 450),
  33419. (assign, ":camera_yaw", 15),
  33420. (assign, ":camera_pitch", -18),
  33421. (assign, ":animation", anim_stand_man),
  33422.  
  33423. (troop_get_inventory_slot, ":horse_item", ":troop_no", ek_horse),
  33424. (try_begin),
  33425. (gt, ":horse_item", 0),
  33426. (eq, ":hide_weapons", 0),
  33427. (cur_tableau_add_horse, ":horse_item", pos2, "anim_horse_stand", 0),
  33428. (assign, ":animation", "anim_ride_0"),
  33429. (assign, ":camera_yaw", 23),
  33430. (assign, ":cam_height", 150),
  33431. (assign, ":camera_distance", 550),
  33432. (try_end),
  33433. (position_set_z, pos5, ":cam_height"),
  33434.  
  33435. # camera looks towards -z axis
  33436. (position_rotate_x, pos5, -90),
  33437. (position_rotate_z, pos5, 180),
  33438.  
  33439. # now apply yaw and pitch
  33440. (position_rotate_y, pos5, ":camera_yaw"),
  33441. (position_rotate_x, pos5, ":camera_pitch"),
  33442. (position_move_z, pos5, ":camera_distance", 0),
  33443. (position_move_x, pos5, 5, 0),
  33444.  
  33445. (try_begin),
  33446. (troop_is_hero, ":troop_no"),
  33447. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", -1),
  33448. (else_try),
  33449. (store_mul, ":random_seed", ":troop_no", 126233),
  33450. (val_mod, ":random_seed", 1000),
  33451. (val_add, ":random_seed", 1),
  33452. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", ":random_seed"),
  33453. (try_end),
  33454. (cur_tableau_set_camera_position, pos5),
  33455.  
  33456. (copy_position, pos8, pos5),
  33457. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  33458. (position_rotate_z, pos8, 30),
  33459. (position_rotate_x, pos8, -60),
  33460. (cur_tableau_add_sun_light, pos8, 175,150,125),
  33461. ]),
  33462.  
  33463. #script_get_prosperity_text_to_s50
  33464. # INPUT: center_no
  33465. # OUTPUT: none
  33466. ("get_prosperity_text_to_s50",
  33467. [(store_script_param, ":center_no", 1),
  33468. (party_get_slot, ":prosperity", ":center_no", slot_town_prosperity),
  33469. (val_div, ":prosperity", 20),
  33470. (try_begin),
  33471. (eq, ":prosperity", 0), #0..19
  33472. (str_store_string, s50, "@Very Poor"),
  33473. (else_try),
  33474. (eq, ":prosperity", 1), #20..39
  33475. (str_store_string, s50, "@Poor"),
  33476. (else_try),
  33477. (eq, ":prosperity", 2), #40..59
  33478. (str_store_string, s50, "@Average"),
  33479. (else_try),
  33480. (eq, ":prosperity", 3), #60..79
  33481. (str_store_string, s50, "@Rich"),
  33482. (else_try),
  33483. (str_store_string, s50, "@Very Rich"), #80..99
  33484. (try_end),
  33485. ]),
  33486.  
  33487. #script_spawn_bandits
  33488. # INPUT: none
  33489. # OUTPUT: none
  33490. ("spawn_bandits",
  33491. [
  33492. (set_spawn_radius,1),
  33493.  
  33494. (try_begin),
  33495. (eq, "$cheat_mode", 1),
  33496. (display_message, "@{!}DEBUG : Doing spawn bandit script"),
  33497. (try_end),
  33498.  
  33499. (party_template_set_slot, "pt_steppe_bandits", slot_party_template_lair_type, "pt_steppe_bandit_lair"),
  33500. (party_template_set_slot, "pt_taiga_bandits", slot_party_template_lair_type, "pt_taiga_bandit_lair"),
  33501. (party_template_set_slot, "pt_mountain_bandits", slot_party_template_lair_type, "pt_mountain_bandit_lair"),
  33502. (party_template_set_slot, "pt_forest_bandits", slot_party_template_lair_type, "pt_forest_bandit_lair"),
  33503. (party_template_set_slot, "pt_sea_raiders", slot_party_template_lair_type, "pt_sea_raider_lair"),
  33504. (party_template_set_slot, "pt_desert_bandits", slot_party_template_lair_type, "pt_desert_bandit_lair"),
  33505.  
  33506. (party_template_set_slot, "pt_steppe_bandits", slot_party_template_lair_spawnpoint, "p_steppe_bandit_spawn_point"),
  33507. (party_template_set_slot, "pt_taiga_bandits", slot_party_template_lair_spawnpoint, "p_taiga_bandit_spawn_point"),
  33508. (party_template_set_slot, "pt_mountain_bandits", slot_party_template_lair_spawnpoint, "p_mountain_bandit_spawn_point"),
  33509. (party_template_set_slot, "pt_forest_bandits", slot_party_template_lair_spawnpoint, "p_forest_bandit_spawn_point"),
  33510. (party_template_set_slot, "pt_sea_raiders", slot_party_template_lair_spawnpoint, "p_sea_raider_spawn_point_1"),
  33511. (party_template_set_slot, "pt_desert_bandits", slot_party_template_lair_spawnpoint, "p_desert_bandit_spawn_point"),
  33512.  
  33513. (try_begin),
  33514. (store_num_parties_of_template, ":num_parties", "pt_mountain_bandits"),
  33515. (lt,":num_parties",16), #was 14 at mount&blade, 18 in warband, 16 last decision
  33516. (store_random,":spawn_point",num_mountain_bandit_spawn_points),
  33517. (val_add,":spawn_point","p_mountain_bandit_spawn_point"),
  33518. (set_spawn_radius, 25),
  33519. (spawn_around_party,":spawn_point","pt_mountain_bandits"),
  33520. (try_end),
  33521. (try_begin),
  33522. (store_num_parties_of_template, ":num_parties", "pt_forest_bandits"),
  33523. (lt,":num_parties",16), #was 14 at mount&blade, 18 in warband, 16 last decision
  33524. (store_random,":spawn_point",num_forest_bandit_spawn_points),
  33525. (val_add,":spawn_point","p_forest_bandit_spawn_point"),
  33526. (set_spawn_radius, 25),
  33527. (spawn_around_party,":spawn_point","pt_forest_bandits"),
  33528. (try_end),
  33529. (try_begin),
  33530. (store_num_parties_of_template, ":num_parties", "pt_sea_raiders"),
  33531. (lt,":num_parties",16), #was 14 at mount&blade, 18 in warband, 16 last decision
  33532. (store_random,":spawn_point",num_sea_raider_spawn_points),
  33533. (val_add,":spawn_point","p_sea_raider_spawn_point_1"),
  33534. (set_spawn_radius, 25),
  33535. (spawn_around_party,":spawn_point","pt_sea_raiders"),
  33536. (try_end),
  33537. (try_begin),
  33538. (store_num_parties_of_template, ":num_parties", "pt_steppe_bandits"),
  33539. (lt,":num_parties",16), #was 14 at mount&blade, 18 in warband, 16 last decision
  33540. (store_random,":spawn_point",num_steppe_bandit_spawn_points),
  33541. (val_add,":spawn_point","p_steppe_bandit_spawn_point"),
  33542. (set_spawn_radius, 25),
  33543. (spawn_around_party,":spawn_point","pt_steppe_bandits"),
  33544. (try_end),
  33545. (try_begin),
  33546. (store_num_parties_of_template, ":num_parties", "pt_taiga_bandits"),
  33547. (lt,":num_parties",16), #was 14 at mount&blade, 18 in warband, 16 last decision
  33548. (store_random,":spawn_point",num_taiga_bandit_spawn_points),
  33549. (val_add,":spawn_point","p_taiga_bandit_spawn_point"),
  33550. (set_spawn_radius, 25),
  33551. (spawn_around_party,":spawn_point","pt_taiga_bandits"),
  33552. (try_end),
  33553. (try_begin),
  33554. (store_num_parties_of_template, ":num_parties", "pt_desert_bandits"),
  33555. (lt,":num_parties",16), #was 14 at mount&blade, 18 in warband, 16 last decision
  33556. (store_random,":spawn_point",num_desert_bandit_spawn_points),
  33557. (val_add,":spawn_point","p_desert_bandit_spawn_point"),
  33558. (set_spawn_radius, 25),
  33559. (spawn_around_party,":spawn_point","pt_desert_bandits"),
  33560. (try_end),
  33561. (try_begin),
  33562. (store_num_parties_of_template, ":num_parties", "pt_looters"),
  33563. (lt,":num_parties",42), #was 33 at mount&blade, 50 in warband, 42 last decision
  33564. (store_random_in_range,":spawn_point",villages_begin,villages_end), #spawn looters twice to have lots of them at the beginning
  33565. (set_spawn_radius, 25),
  33566. (spawn_around_party,":spawn_point","pt_looters"),
  33567. (assign, ":spawned_party_id", reg0),
  33568. (try_begin),
  33569. (check_quest_active, "qst_deal_with_looters"),
  33570. (party_set_flags, ":spawned_party_id", pf_quest_party, 1),
  33571. (else_try),
  33572. (party_set_flags, ":spawned_party_id", pf_quest_party, 0),
  33573. (try_end),
  33574. (try_end),
  33575. (try_begin),
  33576. (store_num_parties_of_template, ":num_parties", "pt_deserters"),
  33577. (lt,":num_parties",15),
  33578. (set_spawn_radius, 4),
  33579. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  33580. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  33581. (store_random_in_range, ":random_no", 0, 100),
  33582. (lt, ":random_no", 5),
  33583. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  33584. (store_troop_faction, ":troop_faction", ":troop_no"),
  33585. (neq, ":troop_faction", "fac_player_supporters_faction"),
  33586. (gt, ":party_no", 0),
  33587. (neg|party_is_in_any_town, ":party_no"),
  33588. ## (party_get_attached_to, ":attached_party_no", ":party_no"),
  33589. ## (lt, ":attached_party_no", 0),#in wilderness
  33590. (spawn_around_party, ":party_no", "pt_deserters"),
  33591. (assign, ":new_party", reg0),
  33592. (store_troop_faction, ":faction_no", ":troop_no"),
  33593. (faction_get_slot, ":tier_1_troop", ":faction_no", slot_faction_tier_1_troop),
  33594. (store_character_level, ":level", "trp_player"),
  33595. (store_mul, ":max_number_to_add", ":level", 2),
  33596. (val_add, ":max_number_to_add", 11),
  33597. (store_random_in_range, ":number_to_add", 10, ":max_number_to_add"),
  33598. (party_add_members, ":new_party", ":tier_1_troop", ":number_to_add"),
  33599. (store_random_in_range, ":random_no", 1, 4),
  33600. (try_for_range, ":unused", 0, ":random_no"),
  33601. (party_upgrade_with_xp, ":new_party", 1000000, 0),
  33602. (try_end),
  33603. ## (str_store_party_name, s1, ":party_no"),
  33604. ## (call_script, "script_get_closest_center", ":party_no"),
  33605. ## (try_begin),
  33606. ## (gt, reg0, 0),
  33607. ## (str_store_party_name, s2, reg0),
  33608. ## (else_try),
  33609. ## (str_store_string, s2, "@unknown place"),
  33610. ## (try_end),
  33611. ## (assign, reg1, ":number_to_add"),
  33612. ## (display_message, "@{reg1} Deserters spawned from {s1}, near {s2}."),
  33613. (try_end),
  33614. (try_end), #deserters ends
  33615.  
  33616.  
  33617. #Spawn bandit lairs
  33618. (try_for_range, ":bandit_template", "pt_steppe_bandits", "pt_deserters"),
  33619. (party_template_get_slot, ":bandit_lair_party", ":bandit_template", slot_party_template_lair_party),
  33620. (le, ":bandit_lair_party", 1),
  33621.  
  33622. (party_template_get_slot, ":bandit_lair_template", ":bandit_template", slot_party_template_lair_type),
  33623. (party_template_get_slot, ":bandit_lair_template_spawnpoint", ":bandit_template", slot_party_template_lair_spawnpoint),
  33624.  
  33625. (set_spawn_radius, 20),
  33626.  
  33627. (spawn_around_party, ":bandit_lair_template_spawnpoint", ":bandit_lair_template"),
  33628. (assign, ":new_camp", reg0),
  33629.  
  33630. (party_set_slot, ":new_camp", slot_party_type, spt_bandit_lair),
  33631.  
  33632. (str_store_party_name, s4, ":new_camp"),
  33633.  
  33634. (party_get_position, pos4, ":new_camp"),
  33635. #(party_set_flags, ":new_camp", pf_icon_mask, 1),
  33636.  
  33637. (party_get_current_terrain, ":new_camp_terrain", ":new_camp"),
  33638. (position_get_z, ":elevation", pos4),
  33639. (position_get_y, ":lair_y", pos4),
  33640.  
  33641. (assign, ":center_too_close", 0),
  33642. (try_for_range, ":center", centers_begin, centers_end),
  33643. (eq, ":center_too_close", 0),
  33644. (store_distance_to_party_from_party, ":distance", ":new_camp", ":center"),
  33645. (lt, ":distance", 3),
  33646. (assign, ":center_too_close", 1),
  33647. (try_end),
  33648.  
  33649. (try_begin),
  33650. (eq, ":center_too_close", 1),
  33651. (party_is_active, ":new_camp"),
  33652. (remove_party, ":new_camp"),
  33653. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, 0),
  33654. (else_try),
  33655. (eq, ":bandit_template", "pt_sea_raiders"),
  33656. (eq, ":new_camp_terrain", 3),
  33657. (map_get_water_position_around_position, pos5, pos4, 4),
  33658. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, ":new_camp"),
  33659. (party_set_flags, ":new_camp", pf_disabled, 1),
  33660. (else_try),
  33661. (eq, ":bandit_template", "pt_mountain_bandits"),
  33662. (eq, ":new_camp_terrain", 3),
  33663. (gt, ":elevation", 250),
  33664. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, ":new_camp"),
  33665. (party_set_flags, ":new_camp", pf_disabled, 1),
  33666. (else_try),
  33667. (eq, ":bandit_template", "pt_desert_bandits"),
  33668. (eq, ":new_camp_terrain", 5),
  33669. (gt, ":lair_y", -9000),
  33670. (gt, ":elevation", 125),
  33671. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, ":new_camp"),
  33672. (party_set_flags, ":new_camp", pf_disabled, 1),
  33673. (else_try),
  33674. (eq, ":bandit_template", "pt_steppe_bandits"),
  33675. (this_or_next|eq, ":new_camp_terrain", 2),
  33676. (eq, ":new_camp_terrain", 10),
  33677. (this_or_next|eq, ":new_camp_terrain", 10),
  33678. (gt, ":elevation", 200),
  33679. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, ":new_camp"),
  33680. (party_set_flags, ":new_camp", pf_disabled, 1),
  33681. (else_try),
  33682. (eq, ":bandit_template", "pt_taiga_bandits"),
  33683. (eq, ":new_camp_terrain", 12),
  33684. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, ":new_camp"),
  33685. (party_set_flags, ":new_camp", pf_disabled, 1),
  33686. (else_try),
  33687. (eq, ":bandit_template", "pt_forest_bandits"),
  33688. (eq, ":new_camp_terrain", 11),
  33689. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, ":new_camp"),
  33690. (party_set_flags, ":new_camp", pf_disabled, 1),
  33691. (else_try),
  33692. (party_is_active, ":new_camp"),
  33693. (str_store_party_name, s4, ":new_camp"),
  33694. (remove_party, ":new_camp"),
  33695. (party_template_set_slot, ":bandit_template", slot_party_template_lair_party, 0),
  33696. (else_try),
  33697. (try_end),
  33698. (try_end),
  33699. ]),
  33700.  
  33701. #script_count_mission_casualties_from_agents
  33702. # INPUT: none
  33703. # OUTPUT: none
  33704. ("count_mission_casualties_from_agents",
  33705. [(party_clear, "p_player_casualties"),
  33706. (party_clear, "p_enemy_casualties"),
  33707. (party_clear, "p_ally_casualties"),
  33708. (assign, "$any_allies_at_the_last_battle", 0),
  33709. #(assign, "$num_routed_us", 0), #these should not assign to 0 here to protect routed agents to spawn again in next turns.
  33710. #(assign, "$num_routed_allies", 0),
  33711. #(assign, "$num_routed_enemies", 0),
  33712.  
  33713. #initialize all routed counts of troops
  33714. (try_for_agents, ":cur_agent"),
  33715. (agent_is_human, ":cur_agent"),
  33716. (agent_get_party_id, ":agent_party", ":cur_agent"),
  33717. (agent_get_troop_id, ":agent_troop_id", ":cur_agent"),
  33718. (troop_set_slot, ":agent_troop_id", slot_troop_player_routed_agents, 0),
  33719. (troop_set_slot, ":agent_troop_id", slot_troop_ally_routed_agents, 0),
  33720. (troop_set_slot, ":agent_troop_id", slot_troop_enemy_routed_agents, 0),
  33721. (try_end),
  33722.  
  33723. (try_for_agents, ":cur_agent"),
  33724. (agent_is_human, ":cur_agent"),
  33725. (agent_get_party_id, ":agent_party", ":cur_agent"),
  33726. (try_begin),
  33727. (neq, ":agent_party", "p_main_party"),
  33728. (agent_is_ally, ":cur_agent"),
  33729. (assign, "$any_allies_at_the_last_battle", 1),
  33730. (try_end),
  33731. #count routed agents in player party, ally parties and enemy parties
  33732. (try_begin),
  33733. (agent_is_routed, ":cur_agent"),
  33734. (agent_get_slot, ":agent_was_running_away", ":cur_agent", slot_agent_is_running_away),
  33735. (eq, ":agent_was_running_away", 1),
  33736. (try_begin),
  33737. (agent_get_troop_id, ":routed_ag_troop_id", ":cur_agent"),
  33738. (agent_get_party_id, ":routed_ag_party_id", ":cur_agent"),
  33739. #only enemies
  33740. #only regulars
  33741. (store_faction_of_party, ":faction_of_routed_agent_party", ":routed_ag_party_id"),
  33742.  
  33743. (try_begin),
  33744. (eq, ":agent_party", "p_main_party"),
  33745. (val_add, "$num_routed_us", 1),
  33746. (else_try),
  33747. (agent_is_ally, ":cur_agent"),
  33748. (val_add, "$num_routed_allies", 1),
  33749. (else_try),
  33750. #for now only count and include routed enemy agents in new routed party.
  33751. (val_add, "$num_routed_enemies", 1),
  33752. (faction_get_slot, ":num_routed_agents_in_this_faction", ":faction_of_routed_agent_party", slot_faction_num_routed_agents),
  33753. (val_add, ":num_routed_agents_in_this_faction", 1),
  33754. (faction_set_slot, ":faction_of_routed_agent_party", slot_faction_num_routed_agents, ":num_routed_agents_in_this_faction"),
  33755. (party_add_members, "p_routed_enemies", ":routed_ag_troop_id", 1),
  33756. (try_end),
  33757. (try_end),
  33758. (agent_get_troop_id, ":agent_troop_id", ":cur_agent"),
  33759. (try_begin),
  33760. (eq, ":agent_party", "p_main_party"),
  33761. (troop_get_slot, ":player_routed_agents", ":agent_troop_id", slot_troop_player_routed_agents),
  33762. (val_add, ":player_routed_agents", 1),
  33763. (troop_set_slot, ":agent_troop_id", slot_troop_player_routed_agents, ":player_routed_agents"),
  33764.  
  33765. (else_try),
  33766. (agent_is_ally, ":cur_agent"),
  33767. (troop_get_slot, ":ally_routed_agents", ":agent_troop_id", slot_troop_ally_routed_agents),
  33768. (val_add, ":ally_routed_agents", 1),
  33769. (troop_set_slot, ":agent_troop_id", slot_troop_ally_routed_agents, ":ally_routed_agents"),
  33770.  
  33771. (else_try),
  33772. (troop_get_slot, ":enemy_routed_agents", ":agent_troop_id", slot_troop_enemy_routed_agents),
  33773. (val_add, ":enemy_routed_agents", 1),
  33774. (troop_set_slot, ":agent_troop_id", slot_troop_enemy_routed_agents, ":enemy_routed_agents"),
  33775.  
  33776. (try_end),
  33777. (try_end),
  33778. #count and save killed agents in player party, ally parties and enemy parties
  33779. (neg|agent_is_alive, ":cur_agent"),
  33780. (agent_get_troop_id, ":agent_troop_id", ":cur_agent"),
  33781. (try_begin),
  33782. (eq, ":agent_party", "p_main_party"),
  33783. (party_add_members, "p_player_casualties", ":agent_troop_id", 1),
  33784. (try_begin),
  33785. (agent_is_wounded, ":cur_agent"),
  33786. (party_wound_members, "p_player_casualties", ":agent_troop_id", 1),
  33787. (try_end),
  33788. (else_try),
  33789. (agent_is_ally, ":cur_agent"),
  33790. (party_add_members, "p_ally_casualties", ":agent_troop_id", 1),
  33791. (try_begin),
  33792. (agent_is_wounded, ":cur_agent"),
  33793. (party_wound_members, "p_ally_casualties", ":agent_troop_id", 1),
  33794. (try_end),
  33795. (else_try),
  33796. (party_add_members, "p_enemy_casualties", ":agent_troop_id", 1),
  33797. (try_begin),
  33798. (agent_is_wounded, ":cur_agent"),
  33799. (party_wound_members, "p_enemy_casualties", ":agent_troop_id", 1),
  33800. (try_end),
  33801. (try_end),
  33802. (try_end),
  33803. ]),
  33804.  
  33805. #script_get_max_skill_of_player_party
  33806. # INPUT: arg1 = skill_no
  33807. # OUTPUT: reg0 = max_skill, reg1 = skill_owner_troop_no
  33808. ("get_max_skill_of_player_party",
  33809. [(store_script_param, ":skill_no", 1),
  33810. (party_get_num_companion_stacks, ":num_stacks","p_main_party"),
  33811. (store_skill_level, ":max_skill", ":skill_no", "trp_player"),
  33812. (assign, ":skill_owner", "trp_player"),
  33813. (try_for_range, ":i_stack", 0, ":num_stacks"),
  33814. (party_stack_get_troop_id, ":stack_troop","p_main_party",":i_stack"),
  33815. (troop_is_hero, ":stack_troop"),
  33816. (neg|troop_is_wounded, ":stack_troop"),
  33817. (store_skill_level, ":cur_skill", ":skill_no", ":stack_troop"),
  33818. (gt, ":cur_skill", ":max_skill"),
  33819. (assign, ":max_skill", ":cur_skill"),
  33820. (assign, ":skill_owner", ":stack_troop"),
  33821. (try_end),
  33822. (party_get_skill_level, reg0, "p_main_party", ":skill_no"),
  33823. ## (assign, reg0, ":max_skill"),
  33824. (assign, reg1, ":skill_owner"),
  33825. ]),
  33826.  
  33827. #script_upgrade_hero_party
  33828. # INPUT: arg1 = party_id, arg2 = xp_amount
  33829. ("upgrade_hero_party",
  33830. [
  33831. (store_script_param, ":party_no", 1),
  33832. (store_script_param, ":xp_amount", 2),
  33833. (party_upgrade_with_xp, ":party_no", ":xp_amount", 0),
  33834. ]),
  33835.  
  33836. #script_get_improvement_details
  33837. # INPUT: arg1 = improvement
  33838. # OUTPUT: reg0 = base_cost
  33839. ("get_improvement_details",
  33840. [(store_script_param, ":improvement_no", 1),
  33841. (try_begin),
  33842. (eq, ":improvement_no", slot_center_has_manor),
  33843. (str_store_string, s0, "@Manor"),
  33844. (str_store_string, s1, "@A manor lets you rest at the village and pay your troops half wages while you rest."),
  33845. (assign, reg0, 8000),
  33846. (else_try),
  33847. (eq, ":improvement_no", slot_center_has_fish_pond),
  33848. (str_store_string, s0, "@Mill"),
  33849. (str_store_string, s1, "@A mill increases village prosperity by 5%."),
  33850. (assign, reg0, 6000),
  33851. (else_try),
  33852. (eq, ":improvement_no", slot_center_has_watch_tower),
  33853. (str_store_string, s0, "@Watch Tower"),
  33854. (str_store_string, s1, "@A watch tower lets the villagers raise alarm earlier. The time it takes for enemies to loot the village increases by 50%."),
  33855. (assign, reg0, 5000),
  33856. (else_try),
  33857. (eq, ":improvement_no", slot_center_has_school),
  33858. (str_store_string, s0, "@School"),
  33859. (str_store_string, s1, "@A shool increases the loyality of the villagers to you by +1 every month."),
  33860. (assign, reg0, 9000),
  33861. (else_try),
  33862. (eq, ":improvement_no", slot_center_has_messenger_post),
  33863. (str_store_string, s0, "@Messenger Post"),
  33864. (str_store_string, s1, "@A messenger post lets the inhabitants send you a message whenever enemies are nearby, even if you are far away from here."),
  33865. (assign, reg0, 4000),
  33866. (else_try),
  33867. (eq, ":improvement_no", slot_center_has_prisoner_tower),
  33868. (str_store_string, s0, "@Prison Tower"),
  33869. (str_store_string, s1, "@A prison tower reduces the chance of captives held here running away successfully."),
  33870. (assign, reg0, 7000),
  33871. (try_end),
  33872. ]),
  33873.  
  33874. #script_cf_troop_agent_is_alive
  33875. # INPUT: arg1 = troop_id
  33876. ("cf_troop_agent_is_alive",
  33877. [(store_script_param, ":troop_no", 1),
  33878. (assign, ":alive_count", 0),
  33879. (try_for_agents, ":cur_agent"),
  33880. (agent_get_troop_id, ":cur_agent_troop", ":cur_agent"),
  33881. (eq, ":troop_no", ":cur_agent_troop"),
  33882. (agent_is_alive, ":cur_agent"),
  33883. (val_add, ":alive_count", 1),
  33884. (try_end),
  33885. (gt, ":alive_count", 0),
  33886. ]),
  33887.  
  33888. #script_cf_village_recruit_volunteers_cond
  33889. # INPUT: none
  33890. # OUTPUT: none
  33891. ("cf_village_recruit_volunteers_cond",
  33892. [
  33893.  
  33894. (try_begin),
  33895. (eq, "$cheat_mode", 1),
  33896. (display_message, "str_checking_volunteer_availability_script"),
  33897. (try_end),
  33898.  
  33899. (neg|party_slot_eq, "$current_town", slot_village_state, svs_looted),
  33900. (neg|party_slot_eq, "$current_town", slot_village_state, svs_being_raided),
  33901. (neg|party_slot_ge, "$current_town", slot_village_infested_by_bandits, 1),
  33902. (store_faction_of_party, ":village_faction", "$current_town"),
  33903. (party_get_slot, ":center_relation", "$current_town", slot_center_player_relation),
  33904. (store_relation, ":village_faction_relation", ":village_faction", "fac_player_faction"),
  33905.  
  33906. (ge, ":center_relation", 0),
  33907. (try_begin),
  33908. (eq, "$cheat_mode", 1),
  33909. (display_message, "str_center_relation_at_least_zero"),
  33910. (try_end),
  33911.  
  33912.  
  33913.  
  33914.  
  33915. (this_or_next|ge, ":center_relation", 5),
  33916. (this_or_next|eq, ":village_faction", "$players_kingdom"),
  33917. (this_or_next|ge, ":village_faction_relation", 0),
  33918. (this_or_next|eq, ":village_faction", "$supported_pretender_old_faction"),
  33919. (eq, "$players_kingdom", 0),
  33920.  
  33921. (try_begin),
  33922. (eq, "$cheat_mode", 1),
  33923. (display_message, "str_relationfaction_conditions_met"),
  33924. (try_end),
  33925.  
  33926.  
  33927. (party_slot_ge, "$current_town", slot_center_volunteer_troop_amount, 0),
  33928. (party_slot_ge, "$current_town", slot_center_volunteer_troop_type, 1),
  33929.  
  33930. (try_begin),
  33931. (eq, "$cheat_mode", 1),
  33932. (display_message, "str_troops_available"),
  33933. (try_end),
  33934.  
  33935.  
  33936. (party_get_free_companions_capacity, ":free_capacity", "p_main_party"),
  33937. (ge, ":free_capacity", 1),
  33938.  
  33939. (try_begin),
  33940. (eq, "$cheat_mode", 1),
  33941. (display_message, "str_party_has_capacity"),
  33942. (try_end),
  33943.  
  33944.  
  33945. ]),
  33946.  
  33947. #script_village_recruit_volunteers_recruit
  33948. # INPUT: none
  33949. # OUTPUT: none
  33950. ("village_recruit_volunteers_recruit",
  33951. [(party_get_slot, ":volunteer_troop", "$current_town", slot_center_volunteer_troop_type),
  33952. (party_get_slot, ":volunteer_amount", "$current_town", slot_center_volunteer_troop_amount),
  33953. (party_get_free_companions_capacity, ":free_capacity", "p_main_party"),
  33954. (val_min, ":volunteer_amount", ":free_capacity"),
  33955. (store_troop_gold, ":gold", "trp_player"),
  33956. (store_div, ":gold_capacity", ":gold", 10),#10 denars per man
  33957. (val_min, ":volunteer_amount", ":gold_capacity"),
  33958. (party_add_members, "p_main_party", ":volunteer_troop", ":volunteer_amount"),
  33959. (party_set_slot, "$current_town", slot_center_volunteer_troop_amount, -1),
  33960. (store_mul, ":cost", ":volunteer_amount", 10),#10 denars per man
  33961. (troop_remove_gold, "trp_player", ":cost"),
  33962. ]),
  33963.  
  33964. #script_get_troop_item_amount
  33965. # INPUT: arg1 = troop_no, arg2 = item_no
  33966. # OUTPUT: reg0 = item_amount
  33967. ("get_troop_item_amount",
  33968. [(store_script_param, ":troop_no", 1),
  33969. (store_script_param, ":item_no", 2),
  33970. (troop_get_inventory_capacity, ":inv_cap", ":troop_no"),
  33971. (assign, ":count", 0),
  33972. (try_for_range, ":i_slot", 0, ":inv_cap"),
  33973. (troop_get_inventory_slot, ":cur_item", ":troop_no", ":i_slot"),
  33974. (eq, ":cur_item", ":item_no"),
  33975. (val_add, ":count", 1),
  33976. (try_end),
  33977. (assign, reg0, ":count"),
  33978. ]),
  33979.  
  33980. #script_get_name_from_dna_to_s50
  33981. # INPUT: arg1 = dna
  33982. # OUTPUT: s50 = name
  33983. ("get_name_from_dna_to_s50",
  33984. [(store_script_param, ":dna", 1),
  33985. (store_sub, ":num_names", names_end, names_begin),
  33986. (store_sub, ":num_surnames", surnames_end, surnames_begin),
  33987. (assign, ":selected_name", ":dna"),
  33988. (val_mod, ":selected_name", ":num_names"),
  33989. (assign, ":selected_surname", ":dna"),
  33990. (val_div, ":selected_surname", ":num_names"),
  33991. (val_mod, ":selected_surname", ":num_surnames"),
  33992. (val_add, ":selected_name", names_begin),
  33993. (val_add, ":selected_surname", surnames_begin),
  33994. (str_store_string, s50, ":selected_name"),
  33995. (str_store_string, s50, ":selected_surname"),
  33996. ]),
  33997.  
  33998. #script_change_center_prosperity
  33999. # INPUT: arg1 = center_no, arg2 = difference
  34000. # OUTPUT: none
  34001. ("change_center_prosperity",
  34002. [(store_script_param, ":center_no", 1),
  34003. (store_script_param, ":difference", 2),
  34004. (party_get_slot, ":old_prosperity", ":center_no", slot_town_prosperity),
  34005. (store_add, ":new_prosperity", ":old_prosperity", ":difference"),
  34006. (val_clamp, ":new_prosperity", 0, 100),
  34007. (store_div, ":old_state", ":old_prosperity", 20),
  34008. (store_div, ":new_state", ":new_prosperity", 20),
  34009.  
  34010. (try_begin),
  34011. (neq, ":old_state", ":new_state"),
  34012. (neg|is_between, ":center_no", castles_begin, castles_end),
  34013.  
  34014. (str_store_party_name_link, s2, ":center_no"),
  34015. (call_script, "script_get_prosperity_text_to_s50", ":center_no"),
  34016. (str_store_string, s3, s50),
  34017. (party_set_slot, ":center_no", slot_town_prosperity, ":new_prosperity"),
  34018. (call_script, "script_get_prosperity_text_to_s50", ":center_no"),
  34019. (str_store_string, s4, s50),
  34020. (try_begin),
  34021. (party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
  34022. (display_message, "@Prosperity of {s2} has changed from {s3} to {s4}."),
  34023. (try_end),
  34024. (call_script, "script_update_center_notes", ":center_no"),
  34025. (else_try),
  34026. (party_set_slot, ":center_no", slot_town_prosperity, ":new_prosperity"),
  34027. (try_end),
  34028.  
  34029. (try_begin),
  34030. (store_current_hours, ":hours"),
  34031. (gt, ":hours", 1),
  34032. (store_sub, ":actual_difference", ":new_prosperity", ":old_prosperity"),
  34033. (try_begin),
  34034. (lt, ":actual_difference", 0),
  34035. (val_add, "$newglob_total_prosperity_losses", ":actual_difference"),
  34036. (else_try),
  34037. (gt, ":actual_difference", 0),
  34038. (val_add, "$newglob_total_prosperity_gains", ":actual_difference"),
  34039. (try_end),
  34040. (try_end),
  34041.  
  34042. #This will add up all non-trade prosperity
  34043. (try_begin),
  34044. (eq, "$cheat_mode", 3),
  34045. (assign, reg4, "$newglob_total_prosperity_from_bandits"),
  34046. (assign, reg5, "$newglob_total_prosperity_from_caravan_trade"),
  34047. (assign, reg7, "$newglob_total_prosperity_from_villageloot"),
  34048. (assign, reg8, "$newglob_total_prosperity_from_townloot"),
  34049. (assign, reg9, "$newglob_total_prosperity_from_village_trade"),
  34050. (assign, reg10, "$newglob_total_prosperity_from_convergence"),
  34051. (assign, reg11, "$newglob_total_prosperity_losses"),
  34052. (assign, reg12, "$newglob_total_prosperity_gains"),
  34053. (display_message, "@{!}DEBUG: Total prosperity actual losses: {reg11}"),
  34054. (display_message, "@{!}DEBUG: Total prosperity actual gains: {reg12}"),
  34055.  
  34056. (display_message, "@{!}DEBUG: Prosperity changes from random bandits: {reg4}"),
  34057. (display_message, "@{!}DEBUG: Prosperity changes from caravan trades: {reg5}"),
  34058. (display_message, "@{!}DEBUG: Prosperity changes from farmer trades: {reg9}"),
  34059. (display_message, "@{!}DEBUG: Prosperity changes from looted villages: {reg7}"),
  34060. (display_message, "@{!}DEBUG: Prosperity changes from sieges: {reg8}"),
  34061. (display_message, "@{!}DEBUG: Theoretical prosperity changes from convergence: {reg10}"),
  34062. (try_end),
  34063.  
  34064. ]),
  34065.  
  34066. #script_get_center_ideal_prosperity
  34067. # INPUT: arg1 = center_no
  34068. # OUTPUT: reg0 = ideal_prosperity
  34069. ("get_center_ideal_prosperity",
  34070. [(store_script_param, ":center_no", 1),
  34071. (assign, ":ideal", 65),
  34072.  
  34073. (call_script, "script_center_get_goods_availability", ":center_no"),
  34074. (store_mul, ":hardship_index", reg0, 2),
  34075. (val_sub, ":ideal", ":hardship_index"),
  34076.  
  34077. (try_begin),
  34078. (is_between, ":center_no", villages_begin, villages_end),
  34079. (party_slot_eq, ":center_no", slot_center_has_fish_pond, 1),
  34080. (val_add, ":ideal", 5),
  34081. (try_end),
  34082.  
  34083. (val_max, ":ideal", 0),
  34084.  
  34085. (assign, reg0, ":ideal"),
  34086. ]),
  34087.  
  34088. ("good_price_affects_good_production",
  34089. [
  34090. (store_script_param, ":center", 1),
  34091. (store_script_param, ":input_item_no", 2),
  34092. (store_script_param, ":production", 3),
  34093. (store_script_param, ":impact_divisor", 4),
  34094.  
  34095. (assign, reg4, ":production"),
  34096.  
  34097. (try_begin),
  34098. (gt, ":production", 0), #let's take -20 as the zero production rate, although in actuality production can go lower, representing increased demand
  34099.  
  34100. (store_sub, ":input_good_price_slot", ":input_item_no", trade_goods_begin),
  34101. (val_add, ":input_good_price_slot", slot_town_trade_good_prices_begin),
  34102. (party_get_slot, ":input_price", ":center", ":input_good_price_slot"),
  34103.  
  34104. (try_begin),
  34105. (is_between, ":center", towns_begin, towns_end),
  34106.  
  34107. (val_mul, ":input_price", 4),
  34108. (assign, ":number_of_villages", 4),
  34109. (try_for_range, ":village_no", villages_begin, villages_end),
  34110. (party_slot_eq, ":village_no", slot_village_bound_center, ":center"),
  34111. (party_get_slot, ":input_price_at_village", ":village_no", ":input_good_price_slot"),
  34112. (val_add, ":input_price", ":input_price_at_village"),
  34113. (val_add, ":number_of_villages", 1),
  34114. (try_end),
  34115.  
  34116. (val_div, ":input_price", ":number_of_villages"),
  34117. (try_end),
  34118.  
  34119. (try_begin), #1/2 impact for low prices
  34120. (lt, ":input_price", 1000),
  34121. (val_mul, ":impact_divisor", 2),
  34122. (try_end),
  34123.  
  34124. (try_begin),
  34125. (gt, ":impact_divisor", 1),
  34126. (val_sub, ":input_price", 1000),
  34127. (val_div, ":input_price", ":impact_divisor"),
  34128. (val_add, ":input_price", 1000),
  34129. (try_end),
  34130.  
  34131. (val_mul, ":production", 1000),
  34132. (val_div, ":production", ":input_price"),
  34133.  
  34134. #(assign, reg5, ":production"),
  34135. #(assign, reg3, ":input_price"),
  34136. #(str_store_item_name, s4, ":input_item_no"),
  34137. #(display_message, "@{s4} price of {reg3} reduces production from {reg4} to {reg5}"),
  34138. (try_end),
  34139.  
  34140. (assign, reg0, ":production"),
  34141. ]),
  34142.  
  34143.  
  34144.  
  34145.  
  34146. #script_get_poorest_village_of_faction
  34147. # INPUT: arg1 = center_no
  34148. # OUTPUT: reg0 = ideal_prosperity
  34149. ("get_poorest_village_of_faction",
  34150. [(store_script_param, ":faction_no", 1),
  34151. (assign, ":min_prosperity_village", -1),
  34152. (assign, ":min_prosperity", 101),
  34153. (try_for_range, ":village_no", villages_begin, villages_end),
  34154. (store_faction_of_party, ":village_faction", ":village_no"),
  34155. (eq, ":village_faction", ":faction_no"),
  34156. (party_get_slot, ":prosperity", ":village_no", slot_town_prosperity),
  34157. (lt, ":prosperity", ":min_prosperity"),
  34158. (assign, ":min_prosperity", ":prosperity"),
  34159. (assign, ":min_prosperity_village", ":village_no"),
  34160. (try_end),
  34161. (assign, reg0, ":min_prosperity_village"),
  34162. ]),
  34163.  
  34164. #script_troop_add_gold
  34165. # INPUT: arg1 = troop_no, arg2 = amount
  34166. # OUTPUT: none
  34167. ("troop_add_gold",
  34168. [
  34169. (store_script_param, ":troop_no", 1),
  34170. (store_script_param, ":amount", 2),
  34171.  
  34172. (troop_add_gold, ":troop_no", ":amount"),
  34173. (try_begin),
  34174. (eq, ":troop_no", "trp_player"),
  34175. (play_sound, "snd_money_received"),
  34176. (try_end),
  34177. ]),
  34178.  
  34179. #NPC companion changes begin
  34180. ("initialize_npcs",
  34181. [
  34182.  
  34183. # set strings
  34184.  
  34185. (troop_set_slot, "trp_npc1", slot_troop_morality_type, tmt_egalitarian), #borcha
  34186. (troop_set_slot, "trp_npc1", slot_troop_morality_value, 4), #borcha
  34187. (troop_set_slot, "trp_npc1", slot_troop_2ary_morality_type, tmt_aristocratic), #borcha
  34188. (troop_set_slot, "trp_npc1", slot_troop_2ary_morality_value, -1),
  34189. (troop_set_slot, "trp_npc1", slot_troop_personalityclash_object, "trp_npc7"), #borcha - deshavi
  34190. (troop_set_slot, "trp_npc1", slot_troop_personalityclash2_object, "trp_npc16"), #borcha - klethi
  34191. (troop_set_slot, "trp_npc1", slot_troop_personalitymatch_object, "trp_npc2"), #borcha - marnid
  34192. (troop_set_slot, "trp_npc1", slot_troop_home, "p_village_25"), #Dashbiga
  34193. (troop_set_slot, "trp_npc1", slot_troop_payment_request, 300),
  34194. (troop_set_slot, "trp_npc1", slot_troop_kingsupport_argument, argument_ruler),
  34195. (troop_set_slot, "trp_npc1", slot_troop_kingsupport_opponent, "trp_npc14"), #lezalit
  34196. (troop_set_slot, "trp_npc1", slot_troop_town_with_contacts, "p_town_17"), #ichamur
  34197. (troop_set_slot, "trp_npc1", slot_troop_original_faction, 0), #ichamur
  34198. (troop_set_slot, "trp_npc1", slot_lord_reputation_type, lrep_roguish), #
  34199.  
  34200.  
  34201.  
  34202. (troop_set_slot, "trp_npc2", slot_troop_morality_type, tmt_humanitarian), #marnid
  34203. (troop_set_slot, "trp_npc2", slot_troop_morality_value, 2),
  34204. (troop_set_slot, "trp_npc2", slot_troop_2ary_morality_type, tmt_honest),
  34205. (troop_set_slot, "trp_npc2", slot_troop_2ary_morality_value, 1),
  34206. (troop_set_slot, "trp_npc2", slot_troop_personalityclash_object, "trp_npc5"), #marnid - beheshtur
  34207. (troop_set_slot, "trp_npc2", slot_troop_personalityclash2_object, "trp_npc9"), #marnid - alayen
  34208. (troop_set_slot, "trp_npc2", slot_troop_personalitymatch_object, "trp_npc1"), #marnid - borcha
  34209. (troop_set_slot, "trp_npc2", slot_troop_home, "p_town_1"), #Sargoth
  34210. (troop_set_slot, "trp_npc2", slot_troop_payment_request, 0),
  34211. (troop_set_slot, "trp_npc2", slot_troop_kingsupport_argument, argument_victory),
  34212. (troop_set_slot, "trp_npc2", slot_troop_kingsupport_opponent, "trp_npc16"), #klethi
  34213. (troop_set_slot, "trp_npc2", slot_troop_town_with_contacts, "p_town_1"), #Sargoth
  34214. (troop_set_slot, "trp_npc2", slot_troop_original_faction, 0), #ichamur
  34215. (troop_set_slot, "trp_npc2", slot_lord_reputation_type, lrep_custodian), #
  34216.  
  34217. #
  34218. (troop_set_slot, "trp_npc3", slot_troop_morality_type, tmt_humanitarian), #Ymira
  34219. (troop_set_slot, "trp_npc3", slot_troop_morality_value, 4),
  34220. (troop_set_slot, "trp_npc3", slot_troop_2ary_morality_type, tmt_aristocratic),
  34221. (troop_set_slot, "trp_npc3", slot_troop_2ary_morality_value, -1),
  34222. (troop_set_slot, "trp_npc3", slot_troop_personalityclash_object, "trp_npc14"), #Ymira - artimenner
  34223. (troop_set_slot, "trp_npc3", slot_troop_personalityclash2_object, "trp_npc8"), #Ymira - matheld
  34224. (troop_set_slot, "trp_npc3", slot_troop_personalitymatch_object, "trp_npc9"), #Ymira - alayen
  34225. (troop_set_slot, "trp_npc3", slot_troop_home, "p_town_3"), #Veluca
  34226. (troop_set_slot, "trp_npc3", slot_troop_payment_request, 0),
  34227. (troop_set_slot, "trp_npc3", slot_troop_kingsupport_argument, argument_lords),
  34228. (troop_set_slot, "trp_npc3", slot_troop_kingsupport_opponent, "trp_npc5"), #klethi
  34229. (troop_set_slot, "trp_npc3", slot_troop_town_with_contacts, "p_town_15"), #yalen
  34230. (troop_set_slot, "trp_npc3", slot_troop_original_faction, 0), #ichamur
  34231. (troop_set_slot, "trp_npc3", slot_lord_reputation_type, lrep_benefactor), #
  34232.  
  34233.  
  34234.  
  34235. (troop_set_slot, "trp_npc4", slot_troop_morality_type, tmt_aristocratic), #Rolf
  34236. (troop_set_slot, "trp_npc4", slot_troop_morality_value, 4),
  34237. (troop_set_slot, "trp_npc4", slot_troop_2ary_morality_type, tmt_honest),
  34238. (troop_set_slot, "trp_npc4", slot_troop_2ary_morality_value, -1),
  34239. (troop_set_slot, "trp_npc4", slot_troop_personalityclash_object, "trp_npc10"), #Rolf - bunduk
  34240. (troop_set_slot, "trp_npc4", slot_troop_personalityclash2_object, "trp_npc7"), #Rolf - deshavi
  34241. (troop_set_slot, "trp_npc4", slot_troop_personalitymatch_object, "trp_npc5"), #Rolf - beheshtur
  34242. (troop_set_slot, "trp_npc4", slot_troop_home, "p_village_34"), #Ehlerdah
  34243. (troop_set_slot, "trp_npc4", slot_troop_payment_request, 300),
  34244. (troop_set_slot, "trp_npc4", slot_troop_kingsupport_argument, argument_claim),
  34245. (troop_set_slot, "trp_npc4", slot_troop_kingsupport_opponent, "trp_npc6"), #firentis
  34246. (troop_set_slot, "trp_npc4", slot_troop_town_with_contacts, "p_town_3"), #veluca
  34247. (troop_set_slot, "trp_npc4", slot_troop_original_faction, 0), #ichamur
  34248. (troop_set_slot, "trp_npc4", slot_lord_reputation_type, lrep_cunning), #
  34249.  
  34250.  
  34251. (troop_set_slot, "trp_npc5", slot_troop_morality_type, tmt_egalitarian), #beheshtur
  34252. (troop_set_slot, "trp_npc5", slot_troop_morality_value, 3), #beheshtur
  34253. (troop_set_slot, "trp_npc5", slot_troop_2ary_morality_type, -1),
  34254. (troop_set_slot, "trp_npc5", slot_troop_2ary_morality_value, 0),
  34255. (troop_set_slot, "trp_npc5", slot_troop_personalityclash_object, "trp_npc2"), #beheshtur - marnid
  34256. (troop_set_slot, "trp_npc5", slot_troop_personalityclash2_object, "trp_npc11"), #beheshtur- katrin
  34257. (troop_set_slot, "trp_npc5", slot_troop_personalitymatch_object, "trp_npc4"), #beheshtur - rolf
  34258. (troop_set_slot, "trp_npc5", slot_troop_home, "p_town_14"), #Halmar
  34259. (troop_set_slot, "trp_npc5", slot_troop_payment_request, 400),
  34260. (troop_set_slot, "trp_npc5", slot_troop_kingsupport_argument, argument_ruler),
  34261. (troop_set_slot, "trp_npc5", slot_troop_kingsupport_opponent, "trp_npc9"), #firentis
  34262. (troop_set_slot, "trp_npc5", slot_troop_town_with_contacts, "p_town_10"), #tulga
  34263. (troop_set_slot, "trp_npc5", slot_troop_original_faction, "fac_kingdom_3"), #khergit
  34264. (troop_set_slot, "trp_npc5", slot_lord_reputation_type, lrep_cunning), #
  34265.  
  34266.  
  34267.  
  34268. (troop_set_slot, "trp_npc6", slot_troop_morality_type, tmt_humanitarian), #firenz
  34269. (troop_set_slot, "trp_npc6", slot_troop_morality_value, 2), #beheshtur
  34270. (troop_set_slot, "trp_npc6", slot_troop_2ary_morality_type, tmt_honest),
  34271. (troop_set_slot, "trp_npc6", slot_troop_2ary_morality_value, 1),
  34272. (troop_set_slot, "trp_npc6", slot_troop_personalityclash_object, "trp_npc11"), #firenz
  34273. (troop_set_slot, "trp_npc6", slot_troop_personalityclash2_object, "trp_npc13"), #firenz - nizar
  34274. (troop_set_slot, "trp_npc6", slot_troop_personalitymatch_object, "trp_npc12"), #firenz - jeremus
  34275. (troop_set_slot, "trp_npc6", slot_troop_home, "p_town_4"), #Suno
  34276. (troop_set_slot, "trp_npc6", slot_troop_payment_request, 0),
  34277. (troop_set_slot, "trp_npc6", slot_troop_kingsupport_argument, argument_victory),
  34278. (troop_set_slot, "trp_npc6", slot_troop_kingsupport_opponent, "trp_npc8"), #firentis
  34279. (troop_set_slot, "trp_npc6", slot_troop_town_with_contacts, "p_town_7"), #uxkhal
  34280. (troop_set_slot, "trp_npc6", slot_troop_original_faction, "fac_kingdom_1"), #swadia
  34281. (troop_set_slot, "trp_npc6", slot_lord_reputation_type, lrep_upstanding), #
  34282.  
  34283.  
  34284.  
  34285. (troop_set_slot, "trp_npc7", slot_troop_morality_type, tmt_egalitarian), #deshavi
  34286. (troop_set_slot, "trp_npc7", slot_troop_morality_value, 3), #beheshtur
  34287. (troop_set_slot, "trp_npc7", slot_troop_2ary_morality_type, -1),
  34288. (troop_set_slot, "trp_npc7", slot_troop_2ary_morality_value, 0),
  34289. (troop_set_slot, "trp_npc7", slot_troop_personalityclash_object, "trp_npc1"), #deshavi
  34290. (troop_set_slot, "trp_npc7", slot_troop_personalityclash2_object, "trp_npc4"), #deshavi - rolf
  34291. (troop_set_slot, "trp_npc7", slot_troop_personalitymatch_object, "trp_npc16"), #deshavi - klethi
  34292. (troop_set_slot, "trp_npc7", slot_troop_home, "p_village_5"), #Kulum
  34293. # (troop_set_slot, "trp_npc7", slot_troop_payment_request, 300),
  34294. (troop_set_slot, "trp_npc7", slot_troop_kingsupport_argument, argument_victory),
  34295. (troop_set_slot, "trp_npc7", slot_troop_kingsupport_opponent, "trp_npc3"), #ymira
  34296. (troop_set_slot, "trp_npc7", slot_troop_town_with_contacts, "p_town_2"), #tihr
  34297. (troop_set_slot, "trp_npc7", slot_troop_original_faction, 0), #swadia
  34298. (troop_set_slot, "trp_npc7", slot_lord_reputation_type, lrep_custodian), #
  34299.  
  34300.  
  34301.  
  34302. (troop_set_slot, "trp_npc8", slot_troop_morality_type, tmt_aristocratic), #matheld
  34303. (troop_set_slot, "trp_npc8", slot_troop_morality_value, 3), #beheshtur
  34304. (troop_set_slot, "trp_npc8", slot_troop_2ary_morality_type, -1),
  34305. (troop_set_slot, "trp_npc8", slot_troop_2ary_morality_value, 0),
  34306. (troop_set_slot, "trp_npc8", slot_troop_personalityclash_object, "trp_npc12"), #matheld
  34307. (troop_set_slot, "trp_npc8", slot_troop_personalityclash2_object, "trp_npc3"), #matheld - ymira
  34308. (troop_set_slot, "trp_npc8", slot_troop_personalitymatch_object, "trp_npc13"), #matheld - nizar
  34309. (troop_set_slot, "trp_npc8", slot_troop_home, "p_sea_raider_spawn_point_2"), #Gundig's Point
  34310. (troop_set_slot, "trp_npc8", slot_troop_payment_request, 500),
  34311. (troop_set_slot, "trp_npc8", slot_troop_kingsupport_argument, argument_lords),
  34312. (troop_set_slot, "trp_npc8", slot_troop_kingsupport_opponent, "trp_npc2"), #marnid
  34313. (troop_set_slot, "trp_npc8", slot_troop_town_with_contacts, "p_town_12"), #wercheg
  34314. (troop_set_slot, "trp_npc8", slot_troop_original_faction, "fac_kingdom_4"), #nords
  34315. (troop_set_slot, "trp_npc8", slot_lord_reputation_type, lrep_martial), #
  34316.  
  34317.  
  34318. (troop_set_slot, "trp_npc9", slot_troop_morality_type, tmt_aristocratic), #alayen
  34319. (troop_set_slot, "trp_npc9", slot_troop_morality_value, 2), #beheshtur
  34320. (troop_set_slot, "trp_npc9", slot_troop_2ary_morality_type, tmt_honest),
  34321. (troop_set_slot, "trp_npc9", slot_troop_2ary_morality_value, 1),
  34322. (troop_set_slot, "trp_npc9", slot_troop_personalityclash_object, "trp_npc13"), #alayen vs nizar
  34323. (troop_set_slot, "trp_npc9", slot_troop_personalityclash2_object, "trp_npc2"), #alayen vs marnid
  34324. (troop_set_slot, "trp_npc9", slot_troop_personalitymatch_object, "trp_npc3"), #alayen - ymira
  34325. (troop_set_slot, "trp_npc9", slot_troop_home, "p_town_13"), #Rivacheg
  34326. (troop_set_slot, "trp_npc9", slot_troop_payment_request, 300),
  34327. (troop_set_slot, "trp_npc9", slot_troop_kingsupport_argument, argument_lords),
  34328. (troop_set_slot, "trp_npc9", slot_troop_kingsupport_opponent, "trp_npc1"), #borcha
  34329. (troop_set_slot, "trp_npc9", slot_troop_town_with_contacts, "p_town_8"), #reyvadin
  34330. (troop_set_slot, "trp_npc9", slot_troop_original_faction, "fac_kingdom_2"), #vaegirs
  34331. (troop_set_slot, "trp_npc9", slot_lord_reputation_type, lrep_martial), #
  34332.  
  34333.  
  34334. (troop_set_slot, "trp_npc10", slot_troop_morality_type, tmt_humanitarian), #bunduk
  34335. (troop_set_slot, "trp_npc10", slot_troop_morality_value, 2),
  34336. (troop_set_slot, "trp_npc10", slot_troop_2ary_morality_type, tmt_egalitarian),
  34337. (troop_set_slot, "trp_npc10", slot_troop_2ary_morality_value, 1),
  34338. (troop_set_slot, "trp_npc10", slot_troop_personalityclash_object, "trp_npc4"), #bunduk vs rolf
  34339. (troop_set_slot, "trp_npc10", slot_troop_personalityclash2_object, "trp_npc14"), #bunduk vs lazalet
  34340. (troop_set_slot, "trp_npc10", slot_troop_personalitymatch_object, "trp_npc11"), #bunduk likes katrin
  34341. (troop_set_slot, "trp_npc10", slot_troop_home, "p_castle_28"), #Grunwalder Castle
  34342. (troop_set_slot, "trp_npc10", slot_troop_payment_request, 200),
  34343. (troop_set_slot, "trp_npc10", slot_troop_kingsupport_argument, argument_ruler),
  34344. (troop_set_slot, "trp_npc10", slot_troop_kingsupport_opponent, "trp_npc7"), #nizar
  34345. (troop_set_slot, "trp_npc10", slot_troop_town_with_contacts, "p_town_5"), #jelkala
  34346. (troop_set_slot, "trp_npc10", slot_troop_original_faction, "fac_kingdom_5"), #rhodoks
  34347. (troop_set_slot, "trp_npc10", slot_lord_reputation_type, lrep_benefactor), #
  34348.  
  34349.  
  34350.  
  34351. (troop_set_slot, "trp_npc11", slot_troop_morality_type, tmt_egalitarian), #katrin
  34352. (troop_set_slot, "trp_npc11", slot_troop_morality_value, 3),
  34353. (troop_set_slot, "trp_npc11", slot_troop_2ary_morality_type, -1),
  34354. (troop_set_slot, "trp_npc11", slot_troop_2ary_morality_value, 0),
  34355. (troop_set_slot, "trp_npc11", slot_troop_personalityclash_object, "trp_npc6"), #katrin vs firenz
  34356. (troop_set_slot, "trp_npc11", slot_troop_personalityclash2_object, "trp_npc5"), #katrin - beheshtur
  34357. (troop_set_slot, "trp_npc11", slot_troop_personalitymatch_object, "trp_npc10"), #katrin likes bunduk
  34358. (troop_set_slot, "trp_npc11", slot_troop_home, "p_town_6"), #Praven
  34359. (troop_set_slot, "trp_npc11", slot_troop_payment_request, 100),
  34360. (troop_set_slot, "trp_npc11", slot_troop_kingsupport_argument, argument_claim),
  34361. (troop_set_slot, "trp_npc11", slot_troop_kingsupport_opponent, "trp_npc15"), #borcha
  34362. (troop_set_slot, "trp_npc11", slot_troop_town_with_contacts, "p_town_6"), #praven
  34363. (troop_set_slot, "trp_npc11", slot_troop_original_faction, 0), #
  34364. (troop_set_slot, "trp_npc11", slot_lord_reputation_type, lrep_custodian), #
  34365.  
  34366.  
  34367. (troop_set_slot, "trp_npc12", slot_troop_morality_type, tmt_humanitarian), #jeremus
  34368. (troop_set_slot, "trp_npc12", slot_troop_morality_value, 3),
  34369. (troop_set_slot, "trp_npc12", slot_troop_2ary_morality_type, -1),
  34370. (troop_set_slot, "trp_npc12", slot_troop_2ary_morality_value, 0),
  34371. (troop_set_slot, "trp_npc12", slot_troop_personalityclash_object, "trp_npc8"), #jerem
  34372. (troop_set_slot, "trp_npc12", slot_troop_personalityclash2_object, "trp_npc15"), #jeremus - artimenner
  34373. (troop_set_slot, "trp_npc12", slot_troop_personalitymatch_object, "trp_npc6"), #jeremus - firenz
  34374. (troop_set_slot, "trp_npc12", slot_troop_home, "p_castle_16"), #undetermined #University
  34375. (troop_set_slot, "trp_npc12", slot_troop_payment_request, 0),
  34376. (troop_set_slot, "trp_npc12", slot_troop_kingsupport_argument, argument_claim),
  34377. (troop_set_slot, "trp_npc12", slot_troop_kingsupport_opponent, "trp_npc13"), #nizar
  34378. (troop_set_slot, "trp_npc12", slot_troop_town_with_contacts, "p_town_14"), #halmar
  34379. (troop_set_slot, "trp_npc12", slot_troop_original_faction, 0), #
  34380. (troop_set_slot, "trp_npc12", slot_lord_reputation_type, lrep_benefactor), #
  34381.  
  34382.  
  34383.  
  34384. (troop_set_slot, "trp_npc13", slot_troop_morality_type, tmt_aristocratic), #nizar
  34385. (troop_set_slot, "trp_npc13", slot_troop_morality_value, 3),
  34386. (troop_set_slot, "trp_npc13", slot_troop_2ary_morality_type, -1),
  34387. (troop_set_slot, "trp_npc13", slot_troop_2ary_morality_value, 0),
  34388. (troop_set_slot, "trp_npc13", slot_troop_personalityclash_object, "trp_npc9"), #nizar
  34389. (troop_set_slot, "trp_npc13", slot_troop_personalityclash2_object, "trp_npc6"), #nizar - firenz
  34390. (troop_set_slot, "trp_npc13", slot_troop_personalitymatch_object, "trp_npc8"), #nizar - matheld
  34391. (troop_set_slot, "trp_npc13", slot_troop_home, "p_castle_15"), #Ergellon Castle
  34392. (troop_set_slot, "trp_npc13", slot_troop_payment_request, 300),
  34393. (troop_set_slot, "trp_npc13", slot_troop_kingsupport_argument, argument_claim),
  34394. (troop_set_slot, "trp_npc13", slot_troop_kingsupport_opponent, "trp_npc10"), #nizar
  34395. (troop_set_slot, "trp_npc13", slot_troop_town_with_contacts, "p_town_4"), #suno
  34396. (troop_set_slot, "trp_npc13", slot_troop_original_faction, 0), #
  34397. (troop_set_slot, "trp_npc13", slot_lord_reputation_type, lrep_roguish), #
  34398.  
  34399.  
  34400.  
  34401. (troop_set_slot, "trp_npc14", slot_troop_morality_type, tmt_aristocratic), #lezalit
  34402. (troop_set_slot, "trp_npc14", slot_troop_morality_value, 4),
  34403. (troop_set_slot, "trp_npc14", slot_troop_2ary_morality_type, tmt_egalitarian),
  34404. (troop_set_slot, "trp_npc14", slot_troop_2ary_morality_value, -1),
  34405. (troop_set_slot, "trp_npc14", slot_troop_personalityclash_object, "trp_npc3"), #lezalit
  34406. (troop_set_slot, "trp_npc14", slot_troop_personalityclash2_object, "trp_npc10"), #lezalit - bunduk
  34407. (troop_set_slot, "trp_npc14", slot_troop_personalitymatch_object, "trp_npc15"), #lezalit - artimenner
  34408. (troop_set_slot, "trp_npc14", slot_troop_home, "p_castle_18"), #Ismirala Castle
  34409. (troop_set_slot, "trp_npc14", slot_troop_payment_request, 400),
  34410. (troop_set_slot, "trp_npc14", slot_troop_kingsupport_argument, argument_victory),
  34411. (troop_set_slot, "trp_npc14", slot_troop_kingsupport_opponent, "trp_npc11"), #nizar
  34412. (troop_set_slot, "trp_npc14", slot_troop_town_with_contacts, "p_town_16"), #dhirim
  34413. (troop_set_slot, "trp_npc14", slot_troop_original_faction, 0), #
  34414. (troop_set_slot, "trp_npc14", slot_lord_reputation_type, lrep_selfrighteous), #
  34415.  
  34416.  
  34417. (troop_set_slot, "trp_npc15", slot_troop_morality_type, tmt_egalitarian), #artimenner
  34418. (troop_set_slot, "trp_npc15", slot_troop_morality_value, 2),
  34419. (troop_set_slot, "trp_npc15", slot_troop_2ary_morality_type, tmt_honest),
  34420. (troop_set_slot, "trp_npc15", slot_troop_2ary_morality_value, 1),
  34421. (troop_set_slot, "trp_npc15", slot_troop_personalityclash_object, "trp_npc16"), #artimenner - klethi
  34422. (troop_set_slot, "trp_npc15", slot_troop_personalityclash2_object, "trp_npc12"), #artimenner - jeremus
  34423. (troop_set_slot, "trp_npc15", slot_troop_personalitymatch_object, "trp_npc14"), #lazalit - artimenner
  34424. (troop_set_slot, "trp_npc15", slot_troop_home, "p_castle_1"), #Culmarr Castle
  34425. (troop_set_slot, "trp_npc15", slot_troop_payment_request, 300),
  34426. (troop_set_slot, "trp_npc15", slot_troop_kingsupport_argument, argument_ruler),
  34427. (troop_set_slot, "trp_npc15", slot_troop_kingsupport_opponent, "trp_npc4"), #nizar
  34428. (troop_set_slot, "trp_npc15", slot_troop_town_with_contacts, "p_town_18"), #narra
  34429. (troop_set_slot, "trp_npc15", slot_lord_reputation_type, lrep_custodian), #
  34430.  
  34431.  
  34432. (troop_set_slot, "trp_npc16", slot_troop_morality_type, tmt_aristocratic), #klethi
  34433. (troop_set_slot, "trp_npc16", slot_troop_morality_value, 4),
  34434. (troop_set_slot, "trp_npc16", slot_troop_2ary_morality_type, tmt_humanitarian),
  34435. (troop_set_slot, "trp_npc16", slot_troop_2ary_morality_value, -1),
  34436. (troop_set_slot, "trp_npc16", slot_troop_personalityclash_object, "trp_npc15"), #klethi
  34437. (troop_set_slot, "trp_npc16", slot_troop_personalityclash2_object, "trp_npc1"), #klethi - borcha
  34438. (troop_set_slot, "trp_npc16", slot_troop_personalitymatch_object, "trp_npc7"), #deshavi - klethi
  34439. (troop_set_slot, "trp_npc16", slot_troop_home, "p_village_20"), #Uslum
  34440. (troop_set_slot, "trp_npc16", slot_troop_payment_request, 200),
  34441. (troop_set_slot, "trp_npc16", slot_troop_kingsupport_argument, argument_lords),
  34442. (troop_set_slot, "trp_npc16", slot_troop_kingsupport_opponent, "trp_npc12"), #nizar
  34443. (troop_set_slot, "trp_npc16", slot_troop_town_with_contacts, "p_town_9"), #khudan
  34444. (troop_set_slot, "trp_npc16", slot_lord_reputation_type, lrep_roguish), #
  34445.  
  34446.  
  34447.  
  34448. (store_sub, "$number_of_npc_slots", slot_troop_strings_end, slot_troop_intro),
  34449.  
  34450. (try_for_range, ":npc", companions_begin, companions_end),
  34451.  
  34452.  
  34453. (try_for_range, ":slot_addition", 0, "$number_of_npc_slots"),
  34454. (store_add, ":slot", ":slot_addition", slot_troop_intro),
  34455.  
  34456. (store_mul, ":string_addition", ":slot_addition", 16),
  34457. (store_add, ":string", "str_npc1_intro", ":string_addition"),
  34458. (val_add, ":string", ":npc"),
  34459. (val_sub, ":string", companions_begin),
  34460.  
  34461. (troop_set_slot, ":npc", ":slot", ":string"),
  34462. (try_end),
  34463. (try_end),
  34464.  
  34465.  
  34466. #Post 0907 changes begin
  34467. (call_script, "script_add_log_entry", logent_game_start, "trp_player", -1, -1, -1),
  34468. #Post 0907 changes end
  34469.  
  34470. #Rebellion changes begin
  34471. (troop_set_slot, "trp_kingdom_1_pretender", slot_troop_original_faction, "fac_kingdom_1"),
  34472. (troop_set_slot, "trp_kingdom_2_pretender", slot_troop_original_faction, "fac_kingdom_2"),
  34473. (troop_set_slot, "trp_kingdom_3_pretender", slot_troop_original_faction, "fac_kingdom_3"),
  34474. (troop_set_slot, "trp_kingdom_4_pretender", slot_troop_original_faction, "fac_kingdom_4"),
  34475. (troop_set_slot, "trp_kingdom_5_pretender", slot_troop_original_faction, "fac_kingdom_5"),
  34476. (troop_set_slot, "trp_kingdom_6_pretender", slot_troop_original_faction, "fac_kingdom_6"),
  34477.  
  34478. # (troop_set_slot, "trp_kingdom_1_pretender", slot_troop_support_base, "p_town_4"), #suno
  34479. # (troop_set_slot, "trp_kingdom_2_pretender", slot_troop_support_base, "p_town_11"), #curaw
  34480. # (troop_set_slot, "trp_kingdom_3_pretender", slot_troop_support_base, "p_town_18"), #town_18
  34481. # (troop_set_slot, "trp_kingdom_4_pretender", slot_troop_support_base, "p_town_12"), #wercheg
  34482. # (troop_set_slot, "trp_kingdom_5_pretender", slot_troop_support_base, "p_town_3"), #veluca
  34483. (try_for_range, ":pretender", pretenders_begin, pretenders_end),
  34484. (troop_set_slot, ":pretender", slot_lord_reputation_type, lrep_none),
  34485. (try_end),
  34486. #Rebellion changes end
  34487. ]),
  34488.  
  34489.  
  34490.  
  34491. ("objectionable_action",
  34492. [
  34493. (store_script_param_1, ":action_type"),
  34494. (store_script_param_2, ":action_string"),
  34495.  
  34496. (assign, ":grievance_minimum", -2),
  34497. (try_for_range, ":npc", companions_begin, companions_end),
  34498. (main_party_has_troop, ":npc"),
  34499.  
  34500. ###Primary morality check
  34501. (try_begin),
  34502. (troop_slot_eq, ":npc", slot_troop_morality_type, ":action_type"),
  34503. (troop_get_slot, ":value", ":npc", slot_troop_morality_value),
  34504. (try_begin),
  34505. (troop_slot_eq, ":npc", slot_troop_morality_state, tms_acknowledged),
  34506. # npc is betrayed, major penalty to player honor and morale
  34507. (troop_get_slot, ":grievance", ":npc", slot_troop_morality_penalties),
  34508. (val_mul, ":value", 2),
  34509. (val_add, ":grievance", ":value"),
  34510. (troop_set_slot, ":npc", slot_troop_morality_penalties, ":grievance"),
  34511. (else_try),
  34512. (this_or_next|troop_slot_eq, ":npc", slot_troop_morality_state, tms_dismissed),
  34513. (eq, "$disable_npc_complaints", 1),
  34514. # npc is quietly disappointed
  34515. (troop_get_slot, ":grievance", ":npc", slot_troop_morality_penalties),
  34516. (val_add, ":grievance", ":value"),
  34517. (troop_set_slot, ":npc", slot_troop_morality_penalties, ":grievance"),
  34518. (else_try),
  34519. # npc raises the issue for the first time
  34520. (troop_slot_eq, ":npc", slot_troop_morality_state, tms_no_problem),
  34521. (gt, ":value", ":grievance_minimum"),
  34522. (assign, "$npc_with_grievance", ":npc"),
  34523. (assign, "$npc_grievance_string", ":action_string"),
  34524. (assign, "$npc_grievance_slot", slot_troop_morality_state),
  34525. (assign, ":grievance_minimum", ":value"),
  34526. (assign, "$npc_praise_not_complaint", 0),
  34527. (try_begin),
  34528. (lt, ":value", 0),
  34529. (assign, "$npc_praise_not_complaint", 1),
  34530. (try_end),
  34531. (try_end),
  34532.  
  34533. ###Secondary morality check
  34534. (else_try),
  34535. (troop_slot_eq, ":npc", slot_troop_2ary_morality_type, ":action_type"),
  34536. (troop_get_slot, ":value", ":npc", slot_troop_2ary_morality_value),
  34537. (try_begin),
  34538. (troop_slot_eq, ":npc", slot_troop_2ary_morality_state, tms_acknowledged),
  34539. # npc is betrayed, major penalty to player honor and morale
  34540. (troop_get_slot, ":grievance", ":npc", slot_troop_morality_penalties),
  34541. (val_mul, ":value", 2),
  34542. (val_add, ":grievance", ":value"),
  34543. (troop_set_slot, ":npc", slot_troop_morality_penalties, ":grievance"),
  34544. (else_try),
  34545. (this_or_next|troop_slot_eq, ":npc", slot_troop_2ary_morality_state, tms_dismissed),
  34546. (eq, "$disable_npc_complaints", 1),
  34547. # npc is quietly disappointed
  34548. (troop_get_slot, ":grievance", ":npc", slot_troop_morality_penalties),
  34549. (val_add, ":grievance", ":value"),
  34550. (troop_set_slot, ":npc", slot_troop_morality_penalties, ":grievance"),
  34551. (else_try),
  34552. # npc raises the issue for the first time
  34553. (troop_slot_eq, ":npc", slot_troop_2ary_morality_state, tms_no_problem),
  34554. (gt, ":value", ":grievance_minimum"),
  34555. (assign, "$npc_with_grievance", ":npc"),
  34556. (assign, "$npc_grievance_string", ":action_string"),
  34557. (assign, "$npc_grievance_slot", slot_troop_2ary_morality_state),
  34558. (assign, ":grievance_minimum", ":value"),
  34559. (assign, "$npc_praise_not_complaint", 0),
  34560. (try_begin),
  34561. (lt, ":value", 0),
  34562. (assign, "$npc_praise_not_complaint", 1),
  34563. (try_end),
  34564. (try_end),
  34565. (try_end),
  34566.  
  34567. (try_begin),
  34568. (gt, "$npc_with_grievance", 0),
  34569. (eq, "$npc_praise_not_complaint", 0),
  34570. (str_store_troop_name, 4, "$npc_with_grievance"),
  34571. (display_message, "@{s4} looks upset."),
  34572. (try_end),
  34573. (try_end),
  34574. ]),
  34575.  
  34576.  
  34577. ("post_battle_personality_clash_check",
  34578. [
  34579. (try_for_range, ":npc", companions_begin, companions_end),
  34580. (eq, "$disable_npc_complaints", 0),
  34581.  
  34582. (main_party_has_troop, ":npc"),
  34583. (neg|troop_is_wounded, ":npc"),
  34584.  
  34585. (troop_get_slot, ":other_npc", ":npc", slot_troop_personalityclash2_object),
  34586. (main_party_has_troop, ":other_npc"),
  34587. (neg|troop_is_wounded, ":other_npc"),
  34588.  
  34589. # (store_random_in_range, ":random", 0, 3),
  34590. (try_begin),
  34591. (troop_slot_eq, ":npc", slot_troop_personalityclash2_state, 0),
  34592. (try_begin),
  34593. # (eq, ":random", 0),
  34594. (assign, "$npc_with_personality_clash_2", ":npc"),
  34595. (try_end),
  34596. (try_end),
  34597.  
  34598. (try_end),
  34599.  
  34600. (try_for_range, ":npc", companions_begin, companions_end),
  34601. (troop_slot_eq, ":npc", slot_troop_personalitymatch_state, 0),
  34602. (eq, "$disable_npc_complaints", 0),
  34603.  
  34604. (main_party_has_troop, ":npc"),
  34605. (neg|troop_is_wounded, ":npc"),
  34606.  
  34607. (troop_get_slot, ":other_npc", ":npc", slot_troop_personalitymatch_object),
  34608. (main_party_has_troop, ":other_npc"),
  34609. (neg|troop_is_wounded, ":other_npc"),
  34610. (assign, "$npc_with_personality_match", ":npc"),
  34611. (try_end),
  34612.  
  34613.  
  34614. (try_begin),
  34615. (gt, "$npc_with_personality_clash_2", 0),
  34616. (try_begin),
  34617. (eq, "$cheat_mode", 1),
  34618. (display_message, "str_personality_clash_conversation_begins"),
  34619. (try_end),
  34620.  
  34621. (try_begin),
  34622. (main_party_has_troop, "$npc_with_personality_clash_2"),
  34623. (assign, "$npc_map_talk_context", slot_troop_personalityclash2_state),
  34624. (start_map_conversation, "$npc_with_personality_clash_2"),
  34625. (else_try),
  34626. (assign, "$npc_with_personality_clash_2", 0),
  34627. (try_end),
  34628. (else_try),
  34629. (gt, "$npc_with_personality_match", 0),
  34630. (try_begin),
  34631. (eq, "$cheat_mode", 1),
  34632. (display_message, "str_personality_match_conversation_begins"),
  34633. (try_end),
  34634.  
  34635. (try_begin),
  34636. (main_party_has_troop, "$npc_with_personality_match"),
  34637. (assign, "$npc_map_talk_context", slot_troop_personalitymatch_state),
  34638. (start_map_conversation, "$npc_with_personality_match"),
  34639. (else_try),
  34640. (assign, "$npc_with_personality_match", 0),
  34641. (try_end),
  34642. (try_end),
  34643. ]),
  34644.  
  34645. #script_event_player_defeated_enemy_party
  34646. # INPUT: none
  34647. # OUTPUT: none
  34648. ("event_player_defeated_enemy_party",
  34649. [(try_begin),
  34650. (check_quest_active, "qst_raid_caravan_to_start_war"),
  34651. (neg|check_quest_concluded, "qst_raid_caravan_to_start_war"),
  34652. (party_slot_eq, "$g_enemy_party", slot_party_type, spt_kingdom_caravan),
  34653. (store_faction_of_party, ":enemy_faction", "$g_enemy_party"),
  34654. (quest_slot_eq, "qst_raid_caravan_to_start_war", slot_quest_target_faction, ":enemy_faction"),
  34655. (quest_get_slot, ":cur_state", "qst_raid_caravan_to_start_war", slot_quest_current_state),
  34656. (quest_get_slot, ":quest_target_amount", "qst_raid_caravan_to_start_war", slot_quest_target_amount),
  34657. (val_add, ":cur_state", 1),
  34658. (quest_set_slot, "qst_raid_caravan_to_start_war", slot_quest_current_state, ":cur_state"),
  34659. (try_begin),
  34660. (ge, ":cur_state", ":quest_target_amount"),
  34661. (quest_get_slot, ":quest_target_faction", "qst_raid_caravan_to_start_war", slot_quest_target_faction),
  34662. (quest_get_slot, ":quest_giver_troop", "qst_raid_caravan_to_start_war", slot_quest_giver_troop),
  34663. (store_troop_faction, ":quest_giver_faction", ":quest_giver_troop"),
  34664. (call_script, "script_diplomacy_start_war_between_kingdoms", ":quest_target_faction", ":quest_giver_faction", 1),
  34665. (call_script, "script_succeed_quest", "qst_raid_caravan_to_start_war"),
  34666. (try_end),
  34667. (try_end),
  34668.  
  34669. ]),
  34670.  
  34671. #script_event_player_captured_as_prisoner
  34672. # INPUT: none
  34673. # OUTPUT: none
  34674. ("event_player_captured_as_prisoner",
  34675. [
  34676. (try_begin),
  34677. (check_quest_active, "qst_raid_caravan_to_start_war"),
  34678. (neg|check_quest_concluded, "qst_raid_caravan_to_start_war"),
  34679. (quest_get_slot, ":quest_target_faction", "qst_raid_caravan_to_start_war", slot_quest_target_faction),
  34680. (store_faction_of_party, ":capturer_faction", "$capturer_party"),
  34681. (eq, ":quest_target_faction", ":capturer_faction"),
  34682. (call_script, "script_fail_quest", "qst_raid_caravan_to_start_war"),
  34683. (try_end),
  34684. #Removing followers of the player
  34685. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  34686. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  34687. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  34688. (gt, ":party_no", 0),
  34689. (party_is_active, ":party_no"),
  34690. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  34691. (party_slot_eq, ":party_no", slot_party_ai_object, "p_main_party"),
  34692. (call_script, "script_party_set_ai_state", ":party_no", spai_undefined, -1),
  34693. (assign, "$g_recalculate_ais", 1),
  34694. (try_end),
  34695. ]),
  34696.  
  34697. #NPC morale both returns a string and reg0 as the morale value
  34698. ("npc_morale",
  34699. [
  34700. (store_script_param_1, ":npc"),
  34701.  
  34702. (troop_get_slot, ":morality_grievances", ":npc", slot_troop_morality_penalties),
  34703. (troop_get_slot, ":personality_grievances", ":npc", slot_troop_personalityclash_penalties),
  34704. (party_get_morale, ":party_morale", "p_main_party"),
  34705.  
  34706. (store_sub, ":troop_morale", ":party_morale", ":morality_grievances"),
  34707. (val_sub, ":troop_morale", ":personality_grievances"),
  34708. (val_add, ":troop_morale", 50),
  34709.  
  34710. (assign, reg8, ":troop_morale"),
  34711.  
  34712. (val_mul, ":troop_morale", 3),
  34713. (val_div, ":troop_morale", 4),
  34714. (val_clamp, ":troop_morale", 0, 100),
  34715.  
  34716. (assign, reg5, ":party_morale"),
  34717. (assign, reg6, ":morality_grievances"),
  34718. (assign, reg7, ":personality_grievances"),
  34719. (assign, reg9, ":troop_morale"),
  34720.  
  34721. # (str_store_troop_name, s11, ":npc"),
  34722. # (display_message, "@{!}{s11}'s morale = PM{reg5} + 50 - MG{reg6} - PG{reg7} = {reg8} x 0.75 = {reg9}"),
  34723.  
  34724. (try_begin),
  34725. (lt, ":morality_grievances", 3),
  34726. (str_store_string, 7, "str_happy"),
  34727. (else_try),
  34728. (lt, ":morality_grievances", 15),
  34729. (str_store_string, 7, "str_content"),
  34730. (else_try),
  34731. (lt, ":morality_grievances", 30),
  34732. (str_store_string, 7, "str_concerned"),
  34733. (else_try),
  34734. (lt, ":morality_grievances", 45),
  34735. (str_store_string, 7, "str_not_happy"),
  34736. (else_try),
  34737. (str_store_string, 7, "str_miserable"),
  34738. (try_end),
  34739.  
  34740.  
  34741. (try_begin),
  34742. (lt, ":personality_grievances", 3),
  34743. (str_store_string, 6, "str_happy"),
  34744. (else_try),
  34745. (lt, ":personality_grievances", 15),
  34746. (str_store_string, 6, "str_content"),
  34747. (else_try),
  34748. (lt, ":personality_grievances", 30),
  34749. (str_store_string, 6, "str_concerned"),
  34750. (else_try),
  34751. (lt, ":personality_grievances", 45),
  34752. (str_store_string, 6, "str_not_happy"),
  34753. (else_try),
  34754. (str_store_string, 6, "str_miserable"),
  34755. (try_end),
  34756.  
  34757.  
  34758. (try_begin),
  34759. (gt, ":troop_morale", 80),
  34760. (str_store_string, 8, "str_happy"),
  34761. (str_store_string, 63, "str_bar_enthusiastic"),
  34762. (else_try),
  34763. (gt, ":troop_morale", 60),
  34764. (str_store_string, 8, "str_content"),
  34765. (str_store_string, 63, "str_bar_content"),
  34766. (else_try),
  34767. (gt, ":troop_morale", 40),
  34768. (str_store_string, 8, "str_concerned"),
  34769. (str_store_string, 63, "str_bar_weary"),
  34770. (else_try),
  34771. (gt, ":troop_morale", 20),
  34772. (str_store_string, 8, "str_not_happy"),
  34773. (str_store_string, 63, "str_bar_disgruntled"),
  34774. (else_try),
  34775. (str_store_string, 8, "str_miserable"),
  34776. (str_store_string, 63, "str_bar_miserable"),
  34777. (try_end),
  34778.  
  34779.  
  34780. (str_store_string, 21, "str_npc_morale_report"),
  34781. (assign, reg0, ":troop_morale"),
  34782.  
  34783. ]),
  34784. #NPC morale both returns a string and reg0 as the morale value
  34785.  
  34786.  
  34787. #
  34788. ("retire_companion",
  34789. [
  34790. (store_script_param_1, ":npc"),
  34791. (store_script_param_2, ":length"),
  34792.  
  34793. (remove_member_from_party, ":npc", "p_main_party"),
  34794. (troop_set_slot, ":npc", slot_troop_personalityclash_penalties, 0),
  34795. (troop_set_slot, ":npc", slot_troop_morality_penalties, 0),
  34796. (troop_get_slot, ":renown", "trp_player", slot_troop_renown),
  34797. (store_add, ":return_renown", ":renown", ":length"),
  34798. (troop_set_slot, ":npc", slot_troop_occupation, slto_retirement),
  34799. (troop_set_slot, ":npc", slot_troop_return_renown, ":return_renown"),
  34800. ]),
  34801.  
  34802. #NPC companion changes end
  34803.  
  34804. #script_reduce_companion_morale_for_clash
  34805. #script_calculate_ransom_amount_for_troop
  34806. # INPUT: arg1 = troop_no for companion1 arg2 = troop_no for companion2 arg3 = slot_for_clash_state
  34807. # slot_for_clash_state means: 1=give full penalty to companion1; 2=give full penalty to companion2; 3=give penalty equally
  34808. ("reduce_companion_morale_for_clash",
  34809. [
  34810. (store_script_param, ":companion_1", 1),
  34811. (store_script_param, ":companion_2", 2),
  34812. (store_script_param, ":slot_for_clash_state", 3),
  34813.  
  34814. (troop_get_slot, ":clash_state", ":companion_1", ":slot_for_clash_state"),
  34815. (troop_get_slot, ":grievance_1", ":companion_1", slot_troop_personalityclash_penalties),
  34816. (troop_get_slot, ":grievance_2", ":companion_2", slot_troop_personalityclash_penalties),
  34817. (try_begin),
  34818. (eq, ":clash_state", pclash_penalty_to_self),
  34819. (val_add, ":grievance_1", 5),
  34820. (else_try),
  34821. (eq, ":clash_state", pclash_penalty_to_other),
  34822. (val_add, ":grievance_2", 5),
  34823. (else_try),
  34824. (eq, ":clash_state", pclash_penalty_to_both),
  34825. (val_add, ":grievance_1", 3),
  34826. (val_add, ":grievance_2", 3),
  34827. (try_end),
  34828. (troop_set_slot, ":companion_1", slot_troop_personalityclash_penalties, ":grievance_1"),
  34829. (troop_set_slot, ":companion_2", slot_troop_personalityclash_penalties, ":grievance_2"),
  34830. ]),
  34831.  
  34832. #Hunting scripts end
  34833.  
  34834. #script_calculate_ransom_amount_for_troop
  34835. # INPUT: arg1 = troop_no
  34836. # OUTPUT: reg0 = ransom_amount
  34837. ("calculate_ransom_amount_for_troop",
  34838. [(store_script_param, ":troop_no", 1),
  34839. (store_troop_faction, ":faction_no", ":troop_no"),
  34840. (assign, ":ransom_amount", 400),
  34841.  
  34842. (assign, ":male_relative", -9), #for kingdom ladies, otherwise a number otherwise unused in slot_town_lord
  34843. (try_begin),
  34844. (faction_slot_eq, ":faction_no", slot_faction_leader, ":troop_no"),
  34845. (val_add, ":ransom_amount", 4000),
  34846. (else_try),
  34847. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_lady),
  34848. (val_add, ":ransom_amount", 2500), #as though a renown of 1250 -- therefore significantly higher than for roughly equivalent lords
  34849. (call_script, "script_get_kingdom_lady_social_determinants", ":troop_no"),
  34850. (assign, ":male_relative", reg0),
  34851. (try_end),
  34852.  
  34853. (assign, ":num_center_points", 0),
  34854. (try_for_range, ":cur_center", centers_begin, centers_end),
  34855. (this_or_next|party_slot_eq, ":cur_center", slot_town_lord, ":troop_no"),
  34856. (party_slot_eq, ":cur_center", slot_town_lord, ":male_relative"),
  34857. (try_begin),
  34858. (party_slot_eq, ":cur_center", slot_party_type, spt_town),
  34859. (val_add, ":num_center_points", 4),
  34860. (else_try),
  34861. (party_slot_eq, ":cur_center", slot_party_type, spt_castle),
  34862. (val_add, ":num_center_points", 2),
  34863. (else_try),
  34864. (val_add, ":num_center_points", 1),
  34865. (try_end),
  34866. (try_end),
  34867. (val_mul, ":num_center_points", 500),
  34868. (val_add, ":ransom_amount", ":num_center_points"),
  34869. (troop_get_slot, ":renown", ":troop_no", slot_troop_renown),
  34870. (val_mul, ":renown", 2),
  34871. (val_add, ":ransom_amount", ":renown"),
  34872. (store_mul, ":ransom_max_amount", ":ransom_amount", 3),
  34873. (val_div, ":ransom_max_amount", 2),
  34874. (store_random_in_range, ":random_ransom_amount", ":ransom_amount", ":ransom_max_amount"),
  34875. (val_div, ":random_ransom_amount", 100),
  34876. (val_mul, ":random_ransom_amount", 100),
  34877. (assign, reg0, ":random_ransom_amount"),
  34878. ]),
  34879.  
  34880. #script_offer_ransom_amount_to_player_for_prisoners_in_party
  34881. # INPUT: arg1 = party_no
  34882. # OUTPUT: reg0 = result (1 = offered, 0 = not offered)
  34883. ("offer_ransom_amount_to_player_for_prisoners_in_party",
  34884. [(store_script_param, ":party_no", 1),
  34885. (assign, ":result", 0),
  34886. (party_get_num_prisoner_stacks, ":num_stacks", ":party_no"),
  34887. (try_for_range, ":i_stack", 0, ":num_stacks"),
  34888. (eq, ":result", 0),
  34889. (party_prisoner_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
  34890. (troop_is_hero, ":stack_troop"),
  34891. (this_or_next|troop_slot_eq, ":stack_troop", slot_troop_occupation, slto_kingdom_hero),
  34892. (troop_slot_eq, ":stack_troop", slot_troop_occupation, slto_kingdom_lady),
  34893. (store_troop_faction, ":stack_troop_faction", ":stack_troop"),
  34894. (store_random_in_range, ":random_no", 0, 100),
  34895. (try_begin),
  34896. (faction_slot_eq, ":stack_troop_faction", slot_faction_state, sfs_active),
  34897. (le, ":random_no", 5),
  34898. (neq, "$g_ransom_offer_rejected", 1),
  34899. (assign, ":num_stacks", 0), #break
  34900. (assign, ":result", 1),
  34901. (assign, "$g_ransom_offer_troop", ":stack_troop"),
  34902. (assign, "$g_ransom_offer_party", ":party_no"),
  34903. (jump_to_menu, "mnu_enemy_offer_ransom_for_prisoner"),
  34904. (try_end),
  34905. (try_end),
  34906. (assign, reg0, ":result"),
  34907. ]),
  34908.  
  34909. # script_event_hero_taken_prisoner_by_player
  34910. # Input: arg1 = troop_no
  34911. # Output: none
  34912. ("event_hero_taken_prisoner_by_player",
  34913. [
  34914. (store_script_param_1, ":troop_no"),
  34915. (try_begin),
  34916. (check_quest_active, "qst_persuade_lords_to_make_peace"),
  34917. (try_begin),
  34918. (quest_slot_eq, "qst_persuade_lords_to_make_peace", slot_quest_target_troop, ":troop_no"),
  34919. (val_mul, ":troop_no", -1),
  34920. (quest_set_slot, "qst_persuade_lords_to_make_peace", slot_quest_target_troop, ":troop_no"),
  34921. (val_mul, ":troop_no", -1),
  34922. (else_try),
  34923. (quest_slot_eq, "qst_persuade_lords_to_make_peace", slot_quest_object_troop, ":troop_no"),
  34924. (val_mul, ":troop_no", -1),
  34925. (quest_set_slot, "qst_persuade_lords_to_make_peace", slot_quest_object_troop, ":troop_no"),
  34926. (val_mul, ":troop_no", -1),
  34927. (try_end),
  34928. (neg|check_quest_concluded, "qst_persuade_lords_to_make_peace"),
  34929. (neg|quest_slot_ge, "qst_persuade_lords_to_make_peace", slot_quest_target_troop, 0),
  34930. (neg|quest_slot_ge, "qst_persuade_lords_to_make_peace", slot_quest_object_troop, 0),
  34931. (call_script, "script_succeed_quest", "qst_persuade_lords_to_make_peace"),
  34932. (try_end),
  34933. (call_script, "script_update_troop_location_notes", ":troop_no", 0),
  34934. ]),
  34935.  
  34936. # script_cf_check_hero_can_escape_from_player
  34937. # Input: arg1 = troop_no
  34938. # Output: none (can fail)
  34939. ("cf_check_hero_can_escape_from_player",
  34940. [
  34941. (store_script_param_1, ":troop_no"),
  34942. (assign, ":quest_target", 0),
  34943. (try_begin),
  34944. (check_quest_active, "qst_persuade_lords_to_make_peace"),
  34945. (this_or_next|quest_slot_eq, "qst_persuade_lords_to_make_peace", slot_quest_target_troop, ":troop_no"),
  34946. (quest_slot_eq, "qst_persuade_lords_to_make_peace", slot_quest_object_troop, ":troop_no"),
  34947. (assign, ":quest_target", 1),
  34948. (else_try),
  34949. (ge, ":troop_no", "trp_sea_raider_leader"),
  34950. (lt, ":troop_no", "trp_bandit_leaders_end"),
  34951. (try_begin),
  34952. (check_quest_active, "qst_learn_where_merchant_brother_is"),
  34953. (assign, ":quest_target", 1), #always catched
  34954. (else_try),
  34955. (assign, ":quest_target", -1), #always run.
  34956. (try_end),
  34957. (try_end),
  34958.  
  34959. (assign, ":continue", 0),
  34960. (try_begin),
  34961. (eq, ":quest_target", 0), #if not quest target
  34962. (store_random_in_range, ":rand", 0, 100),
  34963. (lt, ":rand", hero_escape_after_defeat_chance),
  34964. (assign, ":continue", 1),
  34965. (else_try),
  34966. (eq, ":quest_target", -1), #if (always run) quest target
  34967. (assign, ":continue", 1),
  34968. (try_end),
  34969.  
  34970. (eq, ":continue", 1),
  34971. ]),
  34972.  
  34973. # script_cf_party_remove_random_regular_troop
  34974. # Input: arg1 = party_no
  34975. # Output: troop_id that has been removed (can fail)
  34976. ("cf_party_remove_random_regular_troop",
  34977. [(store_script_param_1, ":party_no"),
  34978. (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
  34979. (assign, ":num_troops", 0),
  34980. (try_for_range, ":i_stack", 0, ":num_stacks"),
  34981. (party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
  34982. (neg|troop_is_hero, ":stack_troop"),
  34983. (party_stack_get_size, ":stack_size", ":party_no", ":i_stack"),
  34984. (val_add, ":num_troops", ":stack_size"),
  34985. (try_end),
  34986. (assign, reg0, -1),
  34987. (gt, ":num_troops", 0),
  34988. (store_random_in_range, ":random_troop", 0, ":num_troops"),
  34989. (try_for_range, ":i_stack", 0, ":num_stacks"),
  34990. (party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
  34991. (neg|troop_is_hero, ":stack_troop"),
  34992. (party_stack_get_size, ":stack_size", ":party_no", ":i_stack"),
  34993. (val_sub, ":random_troop", ":stack_size"),
  34994. (lt, ":random_troop", 0),
  34995. (assign, ":num_stacks", 0), #break
  34996. (party_remove_members, ":party_no", ":stack_troop", 1),
  34997. (assign, reg0, ":stack_troop"),
  34998. (try_end),
  34999. ]),
  35000.  
  35001. # script_place_player_banner_near_inventory
  35002. # Input: none
  35003. # Output: none
  35004. ("place_player_banner_near_inventory",
  35005. [
  35006. #normal_banner_begin
  35007. (troop_get_slot, ":troop_banner_object", "trp_player", slot_troop_banner_scene_prop),
  35008. #custom_banner_begin
  35009. # (troop_get_slot, ":flag_spr", "trp_player", slot_troop_custom_banner_flag_type),
  35010.  
  35011. (try_begin),
  35012. #normal_banner_begin
  35013. (gt, ":troop_banner_object", 0),
  35014. (scene_prop_get_instance, ":flag_object", ":troop_banner_object", 0),
  35015. #custom_banner_begin
  35016. # (ge, ":flag_spr", 0),
  35017. # (val_add, ":flag_spr", custom_banner_flag_scene_props_begin),
  35018. # (scene_prop_get_instance, ":flag_object", ":flag_spr", 0),
  35019. (try_begin),
  35020. (ge, ":flag_object", 0),
  35021. (get_player_agent_no, ":player_agent"),
  35022. (agent_get_look_position, pos1, ":player_agent"),
  35023. (position_move_y, pos1, -500),
  35024. (position_rotate_z, pos1, 180),
  35025. (position_set_z_to_ground_level, pos1),
  35026. (position_move_z, pos1, 300),
  35027. (prop_instance_set_position, ":flag_object", pos1),
  35028. (try_end),
  35029. (scene_prop_get_instance, ":pole_object", "spr_banner_pole", 0),
  35030. (try_begin),
  35031. (ge, ":pole_object", 0),
  35032. (position_move_z, pos1, -320),
  35033. (prop_instance_set_position, ":pole_object", pos1),
  35034. (try_end),
  35035. (else_try),
  35036. (init_position, pos1),
  35037. (position_move_z, pos1, -1000000),
  35038. (scene_prop_get_instance, ":flag_object", banner_scene_props_begin, 0),
  35039. (try_begin),
  35040. (ge, ":flag_object", 0),
  35041. (prop_instance_set_position, ":flag_object", pos1),
  35042. (try_end),
  35043. (scene_prop_get_instance, ":pole_object", "spr_banner_pole", 0),
  35044. (try_begin),
  35045. (ge, ":pole_object", 0),
  35046. (prop_instance_set_position, ":pole_object", pos1),
  35047. (try_end),
  35048. (try_end),
  35049. ]),
  35050.  
  35051. # script_place_player_banner_near_inventory_bms
  35052. # Input: none
  35053. # Output: none
  35054. ("place_player_banner_near_inventory_bms",
  35055. [
  35056. #normal_banner_begin
  35057. (troop_get_slot, ":troop_banner_object", "trp_player", slot_troop_banner_scene_prop),
  35058. #custom_banner_begin
  35059. # (troop_get_slot, ":flag_spr", "trp_player", slot_troop_custom_banner_flag_type),
  35060. (try_begin),
  35061. #normal_banner_begin
  35062. (gt, ":troop_banner_object", 0),
  35063. (replace_scene_props, banner_scene_props_begin, ":troop_banner_object"),
  35064. #custom_banner_begin
  35065. # (ge, ":flag_spr", 0),
  35066. # (val_add, ":flag_spr", custom_banner_flag_scene_props_begin),
  35067. # (replace_scene_props, banner_scene_props_begin, ":flag_spr"),
  35068. (try_end),
  35069. ]),
  35070.  
  35071. # script_stay_captive_for_hours
  35072. # Input: arg1 = num_hours
  35073. # Output: none
  35074. ("stay_captive_for_hours",
  35075. [
  35076. (store_script_param, ":num_hours", 1),
  35077. (store_current_hours, ":cur_hours"),
  35078. (val_add, ":cur_hours", ":num_hours"),
  35079. (val_max, "$g_check_autos_at_hour", ":cur_hours"),
  35080. (val_add, ":num_hours", 1),
  35081. (rest_for_hours, ":num_hours", 0, 0),
  35082. ]),
  35083.  
  35084. # script_set_parties_around_player_ignore_player
  35085. # Input: arg1 = ignore_range, arg2 = num_hours_to_ignore
  35086. # Output: none
  35087. ("set_parties_around_player_ignore_player",
  35088. [(store_script_param, ":ignore_range", 1),
  35089. (store_script_param, ":num_hours", 2),
  35090. (try_for_parties, ":party_no"),
  35091. (party_is_active, ":party_no"),
  35092. (store_distance_to_party_from_party, ":dist", "p_main_party", ":party_no"),
  35093. (lt, ":dist", ":ignore_range"),
  35094. (party_ignore_player, ":party_no", ":num_hours"),
  35095. (try_end),
  35096. ]),
  35097.  
  35098. # script_randomly_make_prisoner_heroes_escape_from_party
  35099. # Input: arg1 = party_no, arg2 = escape_chance_mul_1000
  35100. # Output: none
  35101. ("randomly_make_prisoner_heroes_escape_from_party",
  35102. [(store_script_param, ":party_no", 1),
  35103. (store_script_param, ":escape_chance", 2),
  35104. (assign, ":quest_troop_1", -1),
  35105. (assign, ":quest_troop_2", -1),
  35106. (try_begin),
  35107. (check_quest_active, "qst_rescue_lord_by_replace"),
  35108. (quest_get_slot, ":quest_troop_1", "qst_rescue_lord_by_replace", slot_quest_target_troop),
  35109. (try_end),
  35110. (try_begin),
  35111. (check_quest_active, "qst_deliver_message_to_prisoner_lord"),
  35112. (quest_get_slot, ":quest_troop_2", "qst_deliver_message_to_prisoner_lord", slot_quest_target_troop),
  35113. (try_end),
  35114. (party_get_num_prisoner_stacks, ":num_stacks", ":party_no"),
  35115. (try_for_range_backwards, ":i_stack", 0, ":num_stacks"),
  35116. (party_prisoner_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
  35117. (troop_is_hero, ":stack_troop"),
  35118. (neq, ":stack_troop", ":quest_troop_1"),
  35119. (neq, ":stack_troop", ":quest_troop_2"),
  35120. (troop_slot_eq, ":stack_troop", slot_troop_occupation, slto_kingdom_hero),
  35121. (store_random_in_range, ":random_no", 0, 1000),
  35122. (lt, ":random_no", ":escape_chance"),
  35123. (party_remove_prisoners, ":party_no", ":stack_troop", 1),
  35124. (call_script, "script_remove_troop_from_prison", ":stack_troop"),
  35125. (str_store_troop_name_link, s1, ":stack_troop"),
  35126. (try_begin),
  35127. (eq, ":party_no", "p_main_party"),
  35128. (str_store_string, s2, "@your party"),
  35129. (else_try),
  35130. (str_store_party_name, s2, ":party_no"),
  35131. (try_end),
  35132. (assign, reg0, 0),
  35133. (try_begin),
  35134. (this_or_next|eq, ":party_no", "p_main_party"),
  35135. (party_slot_eq, ":party_no", slot_town_lord, "trp_player"),
  35136. (assign, reg0, 1),
  35137. (try_end),
  35138. (store_troop_faction, ":troop_faction", ":stack_troop"),
  35139. (str_store_faction_name_link, s3, ":troop_faction"),
  35140. (display_message, "@{reg0?One of your prisoners, :}{s1} of {s3} has escaped from captivity!"),
  35141. (try_end),
  35142. ]),
  35143.  
  35144.  
  35145. # script_fill_tournament_participants_troop
  35146. # Input: arg1 = center_no, arg2 = player_at_center
  35147. # Output: none (fills trp_tournament_participants)
  35148. ("fill_tournament_participants_troop",
  35149. [(store_script_param, ":center_no", 1),
  35150. (store_script_param, ":player_at_center", 2),
  35151. (assign, ":cur_slot", 0),
  35152.  
  35153. (try_begin),
  35154. (eq, ":player_at_center", 1),
  35155. (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),
  35156. (try_for_range, ":stack_no", 0, ":num_stacks"),
  35157. (party_stack_get_troop_id, ":cur_troop", "p_main_party", ":stack_no"),
  35158. (troop_is_hero, ":cur_troop"),
  35159. (neq, ":cur_troop", "trp_kidnapped_girl"),
  35160. (troop_set_slot, "trp_tournament_participants", ":cur_slot", ":cur_troop"),
  35161. (val_add, ":cur_slot", 1),
  35162. (try_end),
  35163. (try_end),
  35164.  
  35165. (party_collect_attachments_to_party, ":center_no", "p_temp_party"),
  35166. (party_get_num_companion_stacks, ":num_stacks", "p_temp_party"),
  35167. (try_for_range, ":stack_no", 0, ":num_stacks"),
  35168. (party_stack_get_troop_id, ":cur_troop", "p_temp_party", ":stack_no"),
  35169. (troop_is_hero, ":cur_troop"),
  35170. (troop_set_slot, "trp_tournament_participants", ":cur_slot", ":cur_troop"),
  35171. (val_add, ":cur_slot", 1),
  35172. (try_end),
  35173.  
  35174. (try_begin),
  35175. (store_random_in_range, ":random_no", 0, 100),
  35176. (lt, ":random_no", 50),
  35177. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_xerina"),
  35178. (val_add, ":cur_slot", 1),
  35179. (try_end),
  35180. (try_begin),
  35181. (store_random_in_range, ":random_no", 0, 100),
  35182. (lt, ":random_no", 50),
  35183. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_dranton"),
  35184. (val_add, ":cur_slot", 1),
  35185. (try_end),
  35186. (try_begin),
  35187. (store_random_in_range, ":random_no", 0, 100),
  35188. (lt, ":random_no", 50),
  35189. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_kradus"),
  35190. (val_add, ":cur_slot", 1),
  35191. (try_end),
  35192.  
  35193. (assign, ":begin_slot", ":cur_slot"),
  35194. (try_for_range, ":cur_slot", ":begin_slot", 64),
  35195. (store_random_in_range, ":random_no", 0, 6),
  35196. (try_begin),
  35197. (eq, ":random_no", 0),
  35198. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_regular_fighter"),
  35199. (else_try),
  35200. (eq, ":random_no", 1),
  35201. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_veteran_fighter"),
  35202. (else_try),
  35203. (eq, ":random_no", 2),
  35204. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_champion_fighter"),
  35205. (else_try),
  35206. (eq, ":random_no", 3),
  35207. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_sword_sister"),
  35208. (else_try),
  35209. (eq, ":random_no", 4),
  35210. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_hired_blade"),
  35211. (else_try),
  35212. (troop_set_slot, "trp_tournament_participants", ":cur_slot", "trp_mercenary_swordsman"),
  35213. (try_end),
  35214. (try_end),
  35215. ]),
  35216.  
  35217. # script_get_num_tournament_participants
  35218. # Input: none
  35219. # Output: reg0 = num_participants
  35220. ("get_num_tournament_participants",
  35221. [(assign, ":num_participants", 0),
  35222. (try_for_range, ":cur_slot", 0, 64),
  35223. (troop_slot_ge, "trp_tournament_participants", ":cur_slot", 0),
  35224. (val_add, ":num_participants", 1),
  35225. (try_end),
  35226. (assign, reg0, ":num_participants"),
  35227. ]),
  35228.  
  35229. # script_get_random_tournament_participant
  35230. # Input: none
  35231. # Output: reg0 = troop_no
  35232. ("get_random_tournament_participant",
  35233. [(call_script, "script_get_num_tournament_participants"),
  35234. (assign, ":num_participants", reg0),
  35235. (store_random_in_range, ":random_troop", 0, ":num_participants"),
  35236. (assign, ":continue", 1),
  35237. (try_for_range, ":cur_slot", 0, 64),
  35238. (eq, ":continue", 1),
  35239. (troop_slot_ge, "trp_tournament_participants", ":cur_slot", 0),
  35240. (val_sub, ":random_troop", 1),
  35241. (lt, ":random_troop", 0),
  35242. (assign, ":continue", 0),
  35243. (troop_get_slot, ":troop_no", "trp_tournament_participants", ":cur_slot"),
  35244. (troop_set_slot, "trp_tournament_participants", ":cur_slot", -1),
  35245. (try_end),
  35246. (assign, reg0, ":troop_no"),
  35247. ]),
  35248.  
  35249. # script_add_tournament_participant
  35250. # Input: arg1 = troop_no
  35251. # Output: none
  35252. ("add_tournament_participant",
  35253. [(store_script_param, ":troop_no", 1),
  35254. (assign, ":continue", 1),
  35255. (try_for_range, ":cur_slot", 0, 64),
  35256. (eq, ":continue", 1),
  35257. (troop_slot_eq, "trp_tournament_participants", ":cur_slot", -1),
  35258. (troop_set_slot, "trp_tournament_participants", ":cur_slot", ":troop_no"),
  35259. (assign, ":continue", 0),
  35260. (try_end),
  35261. ]),
  35262.  
  35263. # script_get_random_tournament_team_amount_and_size
  35264. # Input: none
  35265. # Output: reg0 = number_of_teams, reg1 = team_size
  35266. ("get_random_tournament_team_amount_and_size",
  35267. [
  35268. (call_script, "script_get_num_tournament_participants"),
  35269. (assign, ":num_participants", reg0),
  35270. (party_get_slot, ":town_max_teams", "$current_town", slot_town_tournament_max_teams),
  35271. (val_add, ":town_max_teams", 1),
  35272. (party_get_slot, ":town_max_team_size", "$current_town", slot_town_tournament_max_team_size),
  35273. (val_add, ":town_max_team_size", 1),
  35274. (assign, ":max_teams", ":num_participants"),
  35275. (val_min, ":max_teams", ":town_max_teams"),
  35276. (assign, ":max_size", ":num_participants"),
  35277. (val_min, ":max_size", ":town_max_team_size"),
  35278. (assign, ":min_size", 1),
  35279. (try_begin),
  35280. (ge, ":num_participants", 32),
  35281. (assign, ":min_size", 2),
  35282. (val_min, ":min_size", ":town_max_team_size"),
  35283. (try_end),
  35284. (assign, ":end_cond", 500),
  35285. (try_for_range, ":unused", 0, ":end_cond"),
  35286. (store_random_in_range, ":random_teams", 2, ":max_teams"),
  35287. (store_random_in_range, ":random_size", ":min_size", ":max_size"),
  35288. (store_mul, ":total_men", ":random_teams", ":random_size"),
  35289. (le, ":total_men", ":num_participants"),
  35290. (store_sub, ":left_men", ":num_participants", ":total_men"),
  35291. (neq, ":left_men", 1),
  35292. (assign, ":end_cond", 0),
  35293. (try_end),
  35294. (try_begin),
  35295. (gt, ":end_cond", 0),
  35296. (assign, ":random_teams", 2),
  35297. (assign, ":random_size", 1),
  35298. (try_end),
  35299. (assign, reg0, ":random_teams"),
  35300. (assign, reg1, ":random_size"),
  35301. ]),
  35302.  
  35303. # script_get_troop_priority_point_for_tournament
  35304. # Input: arg1 = troop_no
  35305. # Output: reg0 = troop_point
  35306. ("get_troop_priority_point_for_tournament",
  35307. [(store_script_param, ":troop_no", 1),
  35308. (assign, ":troop_point", 0),
  35309. (try_begin),
  35310. (ge, ":troop_no", 0),
  35311. (val_add, ":troop_point", 40000),
  35312. (try_begin),
  35313. (eq, ":troop_no", "trp_player"),
  35314. (val_add, ":troop_point", 80000),
  35315. (try_end),
  35316. (try_begin),
  35317. (troop_is_hero, ":troop_no"),
  35318. (val_add, ":troop_point", 20000),
  35319. (try_end),
  35320. (try_begin),
  35321. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_player_companion),
  35322. (val_add, ":troop_point", 10000),
  35323. (else_try),
  35324. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  35325. (troop_get_slot, ":renown", ":troop_no", slot_troop_renown),
  35326. (val_add, ":troop_point", ":renown"),
  35327. (val_add, ":troop_point", 1000), #in order to make it more prior than tournament heroes with higher levels
  35328. (else_try),
  35329. (store_character_level, ":level", ":troop_no"),
  35330. (val_add, ":troop_point", ":level"),
  35331. (try_end),
  35332. (try_end),
  35333. (assign, reg0, ":troop_point"),
  35334. ]),
  35335.  
  35336. # script_sort_tournament_participant_troops
  35337. # Input: none
  35338. # Output: none (sorts trp_tournament_participants)
  35339. ("sort_tournament_participant_troops",
  35340. [(try_for_range, ":cur_slot", 0, 63),
  35341. (store_add, ":cur_slot_2_begin", ":cur_slot", 1),
  35342. (try_for_range, ":cur_slot_2", ":cur_slot_2_begin", 64),
  35343. (troop_get_slot, ":troop_1", "trp_tournament_participants", ":cur_slot"),
  35344. (troop_get_slot, ":troop_2", "trp_tournament_participants", ":cur_slot_2"),
  35345. (call_script, "script_get_troop_priority_point_for_tournament", ":troop_1"),
  35346. (assign, ":troop_1_point", reg0),
  35347. (call_script, "script_get_troop_priority_point_for_tournament", ":troop_2"),
  35348. (assign, ":troop_2_point", reg0),
  35349. (gt, ":troop_2_point", ":troop_1_point"),
  35350. (troop_set_slot, "trp_tournament_participants", ":cur_slot", ":troop_2"),
  35351. (troop_set_slot, "trp_tournament_participants", ":cur_slot_2", ":troop_1"),
  35352. (try_end),
  35353. (try_end),
  35354. ]),
  35355.  
  35356. # script_remove_tournament_participants_randomly
  35357. # Input: arg1 = number_to_be_removed
  35358. # Output: none
  35359. ("remove_tournament_participants_randomly",
  35360. [(store_script_param, ":number_to_be_removed", 1),
  35361. (try_for_range, ":unused", 0, ":number_to_be_removed"),
  35362. (assign, ":total_weight", 0),
  35363. (try_for_range, ":cur_slot", 0, 64),
  35364. (troop_get_slot, ":troop_no", "trp_tournament_participants", ":cur_slot"),
  35365. (ge, ":troop_no", 0),
  35366. (store_character_level, ":level", ":troop_no"),
  35367. (val_min, ":level", 38),
  35368. (store_sub, ":weight", 40, ":level"),
  35369. (val_add, ":total_weight", ":weight"),
  35370. (try_end),
  35371. (store_random_in_range, ":random_weight", 0, ":total_weight"),
  35372. (assign, ":continue", 1),
  35373. (try_for_range, ":cur_slot", 0, 64),
  35374. (eq, ":continue", 1),
  35375. (troop_get_slot, ":troop_no", "trp_tournament_participants", ":cur_slot"),
  35376. (ge, ":troop_no", 0),
  35377. (store_character_level, ":level", ":troop_no"),
  35378. (val_min, ":level", 38),
  35379. (store_sub, ":weight", 40, ":level"),
  35380. (val_sub, ":random_weight", ":weight"),
  35381. (lt, ":random_weight", 0),
  35382. (troop_set_slot, "trp_tournament_participants", ":cur_slot", -1),
  35383. (assign, ":continue", 0),
  35384. (try_end),
  35385. (try_end),
  35386. ]),
  35387.  
  35388. # script_end_tournament_fight
  35389. # Input: arg1 = player_team_won (1 or 0)
  35390. # Output: none
  35391. ("end_tournament_fight",
  35392. [(store_script_param, ":player_team_won", 1),
  35393. (call_script, "script_get_num_tournament_participants"),
  35394. (assign, ":num_participants", reg0),
  35395. (store_div, ":needed_to_remove_randomly", ":num_participants", 2),
  35396. #Must remove other participants randomly earlier than adding the winners back to participants
  35397. (call_script, "script_remove_tournament_participants_randomly", ":needed_to_remove_randomly"),
  35398.  
  35399. (assign, ":num_needed", "$g_tournament_num_participants_for_fight"),
  35400. (val_div, ":num_needed", 2),
  35401. (get_player_agent_no, ":player_agent"),
  35402. (agent_get_team, ":player_team", ":player_agent"),
  35403. (try_for_agents, ":agent_no"),
  35404. (agent_is_human, ":agent_no"),
  35405. (agent_get_troop_id, ":troop_id", ":agent_no"),
  35406. (neg|is_between, ":troop_id", arena_masters_begin, arena_masters_end),#omit tournament master
  35407. (agent_get_team, ":agent_team", ":agent_no"),
  35408. (assign, ":cur_point", 0),
  35409. (try_begin),
  35410. (eq, ":player_team_won", 1),
  35411. (eq, ":agent_team", ":player_team"),
  35412. (val_add, ":cur_point", 5000000),#Make sure that team members are chosen
  35413. (try_end),
  35414. (agent_get_kill_count, ":kill_count", ":agent_no", 1), #everyone is knocked unconscious
  35415. (store_mul, ":kill_point", ":kill_count", 160000),#Make sure that kill count is the second most important variable
  35416. (val_add, ":cur_point", ":kill_point"),
  35417. (call_script, "script_get_troop_priority_point_for_tournament", ":troop_id"),
  35418. (val_add, ":cur_point", reg0),
  35419. (try_begin),#reset player's point if kill count is one after the first 2 rounds, or if it is zero
  35420. (eq, ":agent_no", ":player_agent"),
  35421. (eq, ":player_team_won", 0),
  35422. (assign, ":not_passed", 1),
  35423. (try_begin),
  35424. (ge, ":kill_count", 2),
  35425. (assign, ":not_passed", 0),
  35426. (else_try),
  35427. (eq, ":kill_count", 1),
  35428. (le, "$g_tournament_cur_tier", 1),
  35429. (assign, ":not_passed", 0),
  35430. (try_end),
  35431. (eq, ":not_passed", 1),
  35432. (assign, ":cur_point", 0),
  35433. (try_end),
  35434. (agent_set_slot, ":agent_no", slot_agent_tournament_point, ":cur_point"),
  35435. (try_end),
  35436. (try_for_range, ":unused", 0, ":num_needed"),
  35437. (assign, ":best_point", 0),
  35438. (assign, ":best_agent_no", -1),
  35439. (try_for_agents, ":agent_no"),
  35440. (agent_is_human, ":agent_no"),
  35441. (agent_get_slot, ":point", ":agent_no", slot_agent_tournament_point),
  35442. (gt, ":point", ":best_point"),
  35443. (assign, ":best_agent_no", ":agent_no"),
  35444. (assign, ":best_point", ":point"),
  35445. (try_end),
  35446. (agent_set_slot, ":best_agent_no", slot_agent_tournament_point, 0),#Do not select the same agent again
  35447. (agent_get_troop_id, ":troop_id", ":best_agent_no"),
  35448. (call_script, "script_add_tournament_participant", ":troop_id"),
  35449. (try_end),
  35450. (assign, "$g_tournament_player_team_won", ":player_team_won"),
  35451. (jump_to_menu, "mnu_town_tournament"),
  35452. ]),
  35453.  
  35454.  
  35455. # script_get_win_amount_for_tournament_bet
  35456. # Input: none
  35457. # Output: reg0 = win_amount_with_100_denars
  35458. ("get_win_amount_for_tournament_bet",
  35459. [
  35460. (party_get_slot, ":player_odds", "$current_town", slot_town_player_odds),
  35461. (try_begin),
  35462. (eq, "$g_tournament_cur_tier", 0),
  35463. (assign, ":win_amount", 120),
  35464. (else_try),
  35465. (eq, "$g_tournament_cur_tier", 1),
  35466. (assign, ":win_amount", 90),
  35467. (else_try),
  35468. (eq, "$g_tournament_cur_tier", 2),
  35469. (assign, ":win_amount", 60),
  35470. (else_try),
  35471. (eq, "$g_tournament_cur_tier", 3),
  35472. (assign, ":win_amount", 40),
  35473. (else_try),
  35474. (eq, "$g_tournament_cur_tier", 4),
  35475. (assign, ":win_amount", 20),
  35476. (else_try),
  35477. (assign, ":win_amount", 8),
  35478. (try_end),
  35479. (val_mul, ":win_amount", ":player_odds"),
  35480. (val_div, ":win_amount", 100),
  35481. (val_add, ":win_amount", 100), #win amount when 100 denars is placed
  35482. (assign, reg0, ":win_amount"),
  35483. ]),
  35484.  
  35485. # script_tournament_place_bet
  35486. # Input: arg1 = bet_amount
  35487. # Output: none
  35488. ("tournament_place_bet",
  35489. [
  35490. (store_script_param, ":bet_amount", 1),
  35491. (call_script, "script_get_win_amount_for_tournament_bet"),
  35492. (assign, ":win_amount", reg0),
  35493. (val_mul, ":win_amount", ":bet_amount"),
  35494. (val_div, ":win_amount", 100),
  35495. (val_sub, ":win_amount", ":bet_amount"),
  35496. (val_add, "$g_tournament_bet_placed", ":bet_amount"),
  35497. (val_add, "$g_tournament_bet_win_amount", ":win_amount"),
  35498. (troop_remove_gold, "trp_player", ":bet_amount"),
  35499. (assign, "$g_tournament_last_bet_tier", "$g_tournament_cur_tier"),
  35500. ]),
  35501.  
  35502. # script_calculate_amount_of_cattle_can_be_stolen
  35503. # Input: arg1 = village_no
  35504. # Output: reg0 = max_amount
  35505. ("calculate_amount_of_cattle_can_be_stolen",
  35506. [
  35507. (store_script_param, ":village_no", 1),
  35508. (call_script, "script_get_max_skill_of_player_party", "skl_looting"),
  35509. (assign, ":max_skill", reg0),
  35510. (store_mul, ":can_steal", ":max_skill", 2),
  35511. (call_script, "script_party_count_fit_for_battle", "p_main_party"),
  35512. (store_add, ":num_men_effect", reg0, 10),
  35513. (val_div, ":num_men_effect", 10),
  35514. (val_add, ":can_steal", ":num_men_effect"),
  35515. (party_get_slot, ":num_cattle", ":village_no", slot_village_number_of_cattle),
  35516. (val_min, ":can_steal", ":num_cattle"),
  35517. (assign, reg0, ":can_steal"),
  35518. ]),
  35519.  
  35520.  
  35521. # script_draw_banner_to_region
  35522. # Input: arg1 = troop_no, arg2 = center_pos_x, arg3 = center_pos_y, arg4 = width, arg5 = height, arg6 = stretch_width, arg7 = stretch_height, arg8 = default_scale, arg9 = max_charge_scale, arg10 = drawn_item_type
  35523. # drawn_item_type is 0 for banners, 1 for shields, 2 for heater shield, 3 for armor
  35524. # arguments will be used as fixed point values
  35525. # Output: none
  35526. ("draw_banner_to_region",
  35527. [
  35528. (store_script_param, ":troop_no", 1),
  35529. (store_script_param, ":center_pos_x", 2),
  35530. (store_script_param, ":center_pos_y", 3),
  35531. (store_script_param, ":width", 4),
  35532. (store_script_param, ":height", 5),
  35533. (store_script_param, ":stretch_width", 6),
  35534. (store_script_param, ":stretch_height", 7),
  35535. (store_script_param, ":default_scale", 8),
  35536. (store_script_param, ":max_charge_scale", 9),
  35537. (store_script_param, ":drawn_item_type", 10),
  35538.  
  35539. (troop_get_slot, ":bg_type", ":troop_no", slot_troop_custom_banner_bg_type),
  35540. (val_add, ":bg_type", custom_banner_backgrounds_begin),
  35541. (troop_get_slot, ":bg_color_1", ":troop_no", slot_troop_custom_banner_bg_color_1),
  35542. (troop_get_slot, ":bg_color_2", ":troop_no", slot_troop_custom_banner_bg_color_2),
  35543. (troop_get_slot, ":num_charges", ":troop_no", slot_troop_custom_banner_num_charges),
  35544. (troop_get_slot, ":positioning", ":troop_no", slot_troop_custom_banner_positioning),
  35545. (call_script, "script_get_troop_custom_banner_num_positionings", ":troop_no"),
  35546. (assign, ":num_positionings", reg0),
  35547. (val_mod, ":positioning", ":num_positionings"),
  35548.  
  35549. (init_position, pos2),
  35550. (position_set_x, pos2, ":width"),
  35551. (position_set_y, pos2, ":height"),
  35552. (assign, ":default_value", 1),
  35553. (convert_to_fixed_point, ":default_value"),
  35554. (position_set_z, pos2, ":default_value"),
  35555.  
  35556. (init_position, pos1),
  35557. (position_set_x, pos1, ":center_pos_x"),
  35558. (position_set_y, pos1, ":center_pos_y"),
  35559. (position_move_z, pos1, -20),
  35560.  
  35561. (init_position, pos3),
  35562. (position_set_x, pos3, ":default_scale"),
  35563. (position_set_y, pos3, ":default_scale"),
  35564. (position_set_z, pos3, ":default_value"),
  35565.  
  35566. (try_begin),
  35567. (this_or_next|eq, ":bg_type", "mesh_custom_banner_bg"),
  35568. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg01"),
  35569. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg02"),
  35570. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg03"),
  35571. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg08"),
  35572. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg09"),
  35573. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg10"),
  35574. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg11"),
  35575. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg12"),
  35576. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg13"),
  35577. (this_or_next|eq, ":bg_type", "mesh_custom_banner_fg16"),
  35578. (eq, ":bg_type", "mesh_custom_banner_fg17"),
  35579. (cur_tableau_add_mesh_with_scale_and_vertex_color, ":bg_type", pos1, pos2, 0, ":bg_color_1"),
  35580. (else_try),
  35581. (cur_tableau_add_mesh_with_scale_and_vertex_color, ":bg_type", pos1, pos3, 0, ":bg_color_1"),
  35582. (try_end),
  35583. (position_move_z, pos1, -20),
  35584. (position_move_x, pos2, ":width"),
  35585. (position_move_y, pos2, ":height"),
  35586. (cur_tableau_add_mesh_with_scale_and_vertex_color, "mesh_custom_banner_bg", pos1, pos2, 0, ":bg_color_2"),
  35587.  
  35588. (assign, ":charge_stretch", ":stretch_width"),
  35589. (val_min, ":charge_stretch", ":stretch_height"),
  35590. (val_min, ":charge_stretch", ":max_charge_scale"),
  35591. (call_script, "script_get_custom_banner_charge_type_position_scale_color", "trp_player", ":positioning"),
  35592.  
  35593. (try_begin),
  35594. (this_or_next|eq, ":drawn_item_type", 2), #heater shield
  35595. (eq, ":drawn_item_type", 3), #armor
  35596. (assign, ":change_center_pos", 0),
  35597. (try_begin),
  35598. (eq, ":num_charges", 1),
  35599. (assign, ":change_center_pos", 1),
  35600. (else_try),
  35601. (eq, ":num_charges", 2),
  35602. (eq, ":positioning", 1),
  35603. (assign, ":change_center_pos", 1),
  35604. (else_try),
  35605. (eq, ":num_charges", 3),
  35606. (eq, ":positioning", 1),
  35607. (assign, ":change_center_pos", 1),
  35608. (try_end),
  35609. (try_begin),
  35610. (eq, ":change_center_pos", 1),
  35611. (val_add, ":center_pos_y", 30),
  35612. (try_end),
  35613. (try_end),
  35614.  
  35615. (try_begin),
  35616. (ge, ":num_charges", 1),
  35617. (val_mul, reg1, ":charge_stretch"),
  35618. (val_div, reg1, 10000),
  35619. (position_get_x, ":x", pos0),
  35620. (position_get_y, ":y", pos0),
  35621. (val_mul, ":x", ":stretch_width"),
  35622. (val_mul, ":y", ":stretch_height"),
  35623. (val_div, ":x", 10000),
  35624. (val_div, ":y", 10000),
  35625. (val_add, ":x", ":center_pos_x"),
  35626. (val_add, ":y", ":center_pos_y"),
  35627. (position_set_x, pos0, ":x"),
  35628. (position_set_y, pos0, ":y"),
  35629. (assign, ":scale_value", reg1),
  35630. (convert_to_fixed_point, ":scale_value"),
  35631. (store_mul, ":scale_value_inverse", ":scale_value", -1),
  35632. (init_position, pos4),
  35633. (position_set_x, pos4, ":scale_value"),
  35634. (position_set_y, pos4, ":scale_value"),
  35635. (position_set_z, pos4, ":scale_value"),
  35636. (store_div, ":orientation", reg0, 256), #orientation flags
  35637. (try_begin),
  35638. (this_or_next|eq, ":orientation", 1),
  35639. (eq, ":orientation", 3),
  35640. (position_set_x, pos4, ":scale_value_inverse"),
  35641. (try_end),
  35642. (try_begin),
  35643. (this_or_next|eq, ":orientation", 2),
  35644. (eq, ":orientation", 3),
  35645. (position_set_y, pos4, ":scale_value_inverse"),
  35646. (try_end),
  35647. (val_mod, reg0, 256), #remove orientation flags
  35648. (cur_tableau_add_mesh_with_scale_and_vertex_color, reg0, pos0, pos4, 0, reg2),
  35649. (try_end),
  35650. (try_begin),
  35651. (ge, ":num_charges", 2),
  35652. (val_mul, reg4, ":charge_stretch"),
  35653. (val_div, reg4, 10000),
  35654. (position_get_x, ":x", pos1),
  35655. (position_get_y, ":y", pos1),
  35656. (val_mul, ":x", ":stretch_width"),
  35657. (val_mul, ":y", ":stretch_height"),
  35658. (val_div, ":x", 10000),
  35659. (val_div, ":y", 10000),
  35660. (val_add, ":x", ":center_pos_x"),
  35661. (val_add, ":y", ":center_pos_y"),
  35662. (position_set_x, pos1, ":x"),
  35663. (position_set_y, pos1, ":y"),
  35664.  
  35665. (assign, ":scale_value", reg4),
  35666. (convert_to_fixed_point, ":scale_value"),
  35667. (store_mul, ":scale_value_inverse", ":scale_value", -1),
  35668. (init_position, pos4),
  35669. (position_set_x, pos4, ":scale_value"),
  35670. (position_set_y, pos4, ":scale_value"),
  35671. (position_set_z, pos4, ":scale_value"),
  35672. (store_div, ":orientation", reg3, 256), #orientation flags
  35673. (try_begin),
  35674. (this_or_next|eq, ":orientation", 1),
  35675. (eq, ":orientation", 3),
  35676. (position_set_x, pos4, ":scale_value_inverse"),
  35677. (try_end),
  35678. (try_begin),
  35679. (this_or_next|eq, ":orientation", 2),
  35680. (eq, ":orientation", 3),
  35681. (position_set_y, pos4, ":scale_value_inverse"),
  35682. (try_end),
  35683. (val_mod, reg3, 256), #remove orientation flags
  35684.  
  35685. (cur_tableau_add_mesh_with_scale_and_vertex_color, reg3, pos1, pos4, 0, reg5),
  35686. (try_end),
  35687. (try_begin),
  35688. (ge, ":num_charges", 3),
  35689. (val_mul, reg7, ":charge_stretch"),
  35690. (val_div, reg7, 10000),
  35691. (position_get_x, ":x", pos2),
  35692. (position_get_y, ":y", pos2),
  35693. (val_mul, ":x", ":stretch_width"),
  35694. (val_mul, ":y", ":stretch_height"),
  35695. (val_div, ":x", 10000),
  35696. (val_div, ":y", 10000),
  35697. (val_add, ":x", ":center_pos_x"),
  35698. (val_add, ":y", ":center_pos_y"),
  35699. (position_set_x, pos2, ":x"),
  35700. (position_set_y, pos2, ":y"),
  35701.  
  35702. (assign, ":scale_value", reg7),
  35703. (convert_to_fixed_point, ":scale_value"),
  35704. (store_mul, ":scale_value_inverse", ":scale_value", -1),
  35705. (init_position, pos4),
  35706. (position_set_x, pos4, ":scale_value"),
  35707. (position_set_y, pos4, ":scale_value"),
  35708. (position_set_z, pos4, ":scale_value"),
  35709. (store_div, ":orientation", reg6, 256), #orientation flags
  35710. (try_begin),
  35711. (this_or_next|eq, ":orientation", 1),
  35712. (eq, ":orientation", 3),
  35713. (position_set_x, pos4, ":scale_value_inverse"),
  35714. (try_end),
  35715. (try_begin),
  35716. (this_or_next|eq, ":orientation", 2),
  35717. (eq, ":orientation", 3),
  35718. (position_set_y, pos4, ":scale_value_inverse"),
  35719. (try_end),
  35720. (val_mod, reg6, 256), #remove orientation flags
  35721.  
  35722. (cur_tableau_add_mesh_with_scale_and_vertex_color, reg6, pos2, pos4, 0, reg8),
  35723. (try_end),
  35724. (try_begin),
  35725. (ge, ":num_charges", 4),
  35726. (val_mul, reg10, ":charge_stretch"),
  35727. (val_div, reg10, 10000),
  35728. (position_get_x, ":x", pos3),
  35729. (position_get_y, ":y", pos3),
  35730. (val_mul, ":x", ":stretch_width"),
  35731. (val_mul, ":y", ":stretch_height"),
  35732. (val_div, ":x", 10000),
  35733. (val_div, ":y", 10000),
  35734. (val_add, ":x", ":center_pos_x"),
  35735. (val_add, ":y", ":center_pos_y"),
  35736. (position_set_x, pos3, ":x"),
  35737. (position_set_y, pos3, ":y"),
  35738.  
  35739. (assign, ":scale_value", reg10),
  35740. (convert_to_fixed_point, ":scale_value"),
  35741. (store_mul, ":scale_value_inverse", ":scale_value", -1),
  35742. (init_position, pos4),
  35743. (position_set_x, pos4, ":scale_value"),
  35744. (position_set_y, pos4, ":scale_value"),
  35745. (position_set_z, pos4, ":scale_value"),
  35746. (store_div, ":orientation", reg9, 256), #orientation flags
  35747. (try_begin),
  35748. (this_or_next|eq, ":orientation", 1),
  35749. (eq, ":orientation", 3),
  35750. (position_set_x, pos4, ":scale_value_inverse"),
  35751. (try_end),
  35752. (try_begin),
  35753. (this_or_next|eq, ":orientation", 2),
  35754. (eq, ":orientation", 3),
  35755. (position_set_y, pos4, ":scale_value_inverse"),
  35756. (try_end),
  35757. (val_mod, reg9, 256), #remove orientation flags
  35758.  
  35759. (cur_tableau_add_mesh_with_scale_and_vertex_color, reg9, pos3, pos4, 0, reg11),
  35760. (try_end),
  35761. ]),
  35762.  
  35763. # script_get_troop_custom_banner_num_positionings
  35764. # Input: arg1 = troop_no
  35765. # Output: reg0 = num_positionings
  35766. ("get_troop_custom_banner_num_positionings",
  35767. [
  35768. (store_script_param, ":troop_no", 1),
  35769. (troop_get_slot, ":num_charges", ":troop_no", slot_troop_custom_banner_num_charges),
  35770. (try_begin),
  35771. (eq, ":num_charges", 1),
  35772. (assign, ":num_positionings", 2),
  35773. (else_try),
  35774. (eq, ":num_charges", 2),
  35775. (assign, ":num_positionings", 4),
  35776. (else_try),
  35777. (eq, ":num_charges", 3),
  35778. (assign, ":num_positionings", 6),
  35779. (else_try),
  35780. (assign, ":num_positionings", 2),
  35781. (try_end),
  35782. (assign, reg0, ":num_positionings"),
  35783. ]),
  35784.  
  35785. # script_get_custom_banner_charge_type_position_scale_color
  35786. # Input: arg1 = troop_no, arg2 = positioning_index
  35787. # Output: reg0 = type_1
  35788. # reg1 = scale_1
  35789. # reg2 = color_1
  35790. # reg3 = type_2
  35791. # reg4 = scale_2
  35792. # reg5 = color_2
  35793. # reg6 = type_3
  35794. # reg7 = scale_3
  35795. # reg8 = color_3
  35796. # reg9 = type_4
  35797. # reg10 = scale_4
  35798. # reg11 = color_4
  35799. ("get_custom_banner_charge_type_position_scale_color",
  35800. [
  35801. (store_script_param, ":troop_no", 1),
  35802. (store_script_param, ":positioning", 2),
  35803. (troop_get_slot, ":num_charges", ":troop_no", slot_troop_custom_banner_num_charges),
  35804. (init_position, pos0),
  35805. (init_position, pos1),
  35806. (init_position, pos2),
  35807. (init_position, pos3),
  35808.  
  35809. (troop_get_slot, reg0, ":troop_no", slot_troop_custom_banner_charge_type_1),
  35810. (val_add, reg0, custom_banner_charges_begin),
  35811. (troop_get_slot, reg2, ":troop_no", slot_troop_custom_banner_charge_color_1),
  35812. (troop_get_slot, reg3, ":troop_no", slot_troop_custom_banner_charge_type_2),
  35813. (val_add, reg3, custom_banner_charges_begin),
  35814. (troop_get_slot, reg5, ":troop_no", slot_troop_custom_banner_charge_color_2),
  35815. (troop_get_slot, reg6, ":troop_no", slot_troop_custom_banner_charge_type_3),
  35816. (val_add, reg6, custom_banner_charges_begin),
  35817. (troop_get_slot, reg8, ":troop_no", slot_troop_custom_banner_charge_color_3),
  35818. (troop_get_slot, reg9, ":troop_no", slot_troop_custom_banner_charge_type_4),
  35819. (val_add, reg9, custom_banner_charges_begin),
  35820. (troop_get_slot, reg11, ":troop_no", slot_troop_custom_banner_charge_color_4),
  35821.  
  35822. (try_begin),
  35823. (eq, ":num_charges", 1),
  35824. (try_begin),
  35825. (eq, ":positioning", 0),
  35826. (assign, reg1, 100),
  35827. (else_try),
  35828. (assign, reg1, 50),
  35829. (try_end),
  35830. (else_try),
  35831. (eq, ":num_charges", 2),
  35832. (try_begin),
  35833. (eq, ":positioning", 0),
  35834. (position_set_y, pos0, 25),
  35835. (position_set_y, pos1, -25),
  35836. (assign, reg1, 40),
  35837. (assign, reg4, 40),
  35838. (else_try),
  35839. (eq, ":positioning", 1),
  35840. (position_set_x, pos0, -25),
  35841. (position_set_x, pos1, 25),
  35842. (assign, reg1, 40),
  35843. (assign, reg4, 40),
  35844. (else_try),
  35845. (eq, ":positioning", 2),
  35846. (position_set_x, pos0, -25),
  35847. (position_set_y, pos0, 25),
  35848. (position_set_x, pos1, 25),
  35849. (position_set_y, pos1, -25),
  35850. (assign, reg1, 50),
  35851. (assign, reg4, 50),
  35852. (else_try),
  35853. (position_set_x, pos0, -25),
  35854. (position_set_y, pos0, -25),
  35855. (position_set_x, pos1, 25),
  35856. (position_set_y, pos1, 25),
  35857. (assign, reg1, 50),
  35858. (assign, reg4, 50),
  35859. (try_end),
  35860. (else_try),
  35861. (eq, ":num_charges", 3),
  35862. (try_begin),
  35863. (eq, ":positioning", 0),
  35864. (position_set_y, pos0, 33),
  35865. (position_set_y, pos2, -33),
  35866. (assign, reg1, 30),
  35867. (assign, reg4, 30),
  35868. (assign, reg7, 30),
  35869. (else_try),
  35870. (eq, ":positioning", 1),
  35871. (position_set_x, pos0, -33),
  35872. (position_set_x, pos2, 33),
  35873. (assign, reg1, 30),
  35874. (assign, reg4, 30),
  35875. (assign, reg7, 30),
  35876. (else_try),
  35877. (eq, ":positioning", 2),
  35878. (position_set_x, pos0, -30),
  35879. (position_set_y, pos0, 30),
  35880. (position_set_x, pos2, 30),
  35881. (position_set_y, pos2, -30),
  35882. (assign, reg1, 35),
  35883. (assign, reg4, 35),
  35884. (assign, reg7, 35),
  35885. (else_try),
  35886. (eq, ":positioning", 3),
  35887. (position_set_x, pos0, -30),
  35888. (position_set_y, pos0, -30),
  35889. (position_set_x, pos2, 30),
  35890. (position_set_y, pos2, 30),
  35891. (assign, reg1, 35),
  35892. (assign, reg4, 35),
  35893. (assign, reg7, 35),
  35894. (else_try),
  35895. (eq, ":positioning", 4),
  35896. (position_set_x, pos0, -25),
  35897. (position_set_y, pos0, -25),
  35898. (position_set_y, pos1, 25),
  35899. (position_set_x, pos2, 25),
  35900. (position_set_y, pos2, -25),
  35901. (assign, reg1, 50),
  35902. (assign, reg4, 50),
  35903. (assign, reg7, 50),
  35904. (else_try),
  35905. (position_set_x, pos0, -25),
  35906. (position_set_y, pos0, 25),
  35907. (position_set_y, pos1, -25),
  35908. (position_set_x, pos2, 25),
  35909. (position_set_y, pos2, 25),
  35910. (assign, reg1, 50),
  35911. (assign, reg4, 50),
  35912. (assign, reg7, 50),
  35913. (try_end),
  35914. (else_try),
  35915. (try_begin),
  35916. (eq, ":positioning", 0),
  35917. (position_set_x, pos0, -25),
  35918. (position_set_y, pos0, 25),
  35919. (position_set_x, pos1, 25),
  35920. (position_set_y, pos1, 25),
  35921. (position_set_x, pos2, -25),
  35922. (position_set_y, pos2, -25),
  35923. (position_set_x, pos3, 25),
  35924. (position_set_y, pos3, -25),
  35925. (assign, reg1, 50),
  35926. (assign, reg4, 50),
  35927. (assign, reg7, 50),
  35928. (assign, reg10, 50),
  35929. (else_try),
  35930. (position_set_y, pos0, 30),
  35931. (position_set_x, pos1, -30),
  35932. (position_set_x, pos2, 30),
  35933. (position_set_y, pos3, -30),
  35934. (assign, reg1, 35),
  35935. (assign, reg4, 35),
  35936. (assign, reg7, 35),
  35937. (assign, reg10, 35),
  35938. (try_end),
  35939. (try_end),
  35940. ]),
  35941.  
  35942. # script_get_random_custom_banner
  35943. # Input: arg1 = troop_no
  35944. # Output: none
  35945. ("get_random_custom_banner",
  35946. [
  35947. (store_script_param, ":troop_no", 1),
  35948. (store_random_in_range, ":num_charges", 1, 5),
  35949. (troop_set_slot, ":troop_no", slot_troop_custom_banner_num_charges, ":num_charges"),
  35950. (store_random_in_range, ":random_color_index", 0, 42),
  35951. (call_script, "script_get_custom_banner_color_from_index", ":random_color_index"),
  35952. (assign, ":color_1", reg0),
  35953. (troop_set_slot, ":troop_no", slot_troop_custom_banner_bg_color_1, ":color_1"),
  35954. (assign, ":end_cond", 1),
  35955. (try_for_range, ":unused", 0, ":end_cond"),
  35956. (store_random_in_range, ":random_color_index", 0, 42),
  35957. (call_script, "script_get_custom_banner_color_from_index", ":random_color_index"),
  35958. (assign, ":color_2", reg0),
  35959. (try_begin),
  35960. (call_script, "script_cf_check_color_visibility", ":color_1", ":color_2"),
  35961. (troop_set_slot, ":troop_no", slot_troop_custom_banner_bg_color_2, ":color_2"),
  35962. (else_try),
  35963. (val_add, ":end_cond", 1),
  35964. (try_end),
  35965. (try_end),
  35966. (assign, ":end_cond", 4),
  35967. (assign, ":cur_charge", 0),
  35968. (try_for_range, ":unused", 0, ":end_cond"),
  35969. (store_random_in_range, ":random_color_index", 0, 42),
  35970. (call_script, "script_get_custom_banner_color_from_index", ":random_color_index"),
  35971. (assign, ":charge_color", reg0),
  35972. (try_begin),
  35973. (call_script, "script_cf_check_color_visibility", ":charge_color", ":color_1"),
  35974. (call_script, "script_cf_check_color_visibility", ":charge_color", ":color_2"),
  35975. (store_add, ":cur_slot", ":cur_charge", slot_troop_custom_banner_charge_color_1),
  35976. (troop_set_slot, ":troop_no", ":cur_slot", ":charge_color"),
  35977. (store_random_in_range, ":random_charge", custom_banner_charges_begin, custom_banner_charges_end),
  35978. (val_sub, ":random_charge", custom_banner_charges_begin),
  35979. (store_add, ":cur_slot", ":cur_charge", slot_troop_custom_banner_charge_type_1),
  35980. (troop_set_slot, ":troop_no", ":cur_slot", ":random_charge"),
  35981. (val_add, ":cur_charge", 1),
  35982. (else_try),
  35983. (val_add, ":end_cond", 1),
  35984. (try_end),
  35985. (try_end),
  35986. (store_random_in_range, ":random_bg", custom_banner_backgrounds_begin, custom_banner_backgrounds_end),
  35987. (val_sub, ":random_bg", custom_banner_backgrounds_begin),
  35988. (troop_set_slot, ":troop_no", slot_troop_custom_banner_bg_type, ":random_bg"),
  35989. (store_random_in_range, ":random_flag", custom_banner_flag_types_begin, custom_banner_flag_types_end),
  35990. (val_sub, ":random_flag", custom_banner_flag_types_begin),
  35991. (troop_set_slot, ":troop_no", slot_troop_custom_banner_flag_type, ":random_flag"),
  35992. (store_random_in_range, ":random_positioning", 0, 4),
  35993. (troop_set_slot, ":troop_no", slot_troop_custom_banner_positioning, ":random_positioning"),
  35994. ]),
  35995.  
  35996. # script_get_custom_banner_color_from_index
  35997. # Input: arg1 = color_index
  35998. # Output: reg0 = color
  35999. ("get_custom_banner_color_from_index",
  36000. [
  36001. (store_script_param, ":color_index", 1),
  36002.  
  36003. (assign, ":cur_color", 0xFF000000),
  36004. (assign, ":red", 0x00),
  36005. (assign, ":green", 0x00),
  36006. (assign, ":blue", 0x00),
  36007. (store_mod, ":mod_i_color", ":color_index", 7),
  36008. (try_begin),
  36009. (eq, ":mod_i_color", 0),
  36010. (assign, ":blue", 0xFF),
  36011. (else_try),
  36012. (eq, ":mod_i_color", 1),
  36013. (assign, ":red", 0xEE),
  36014. (else_try),
  36015. (eq, ":mod_i_color", 2),
  36016. (assign, ":red", 0xFB),
  36017. (assign, ":green", 0xAC),
  36018. (else_try),
  36019. (eq, ":mod_i_color", 3),
  36020. (assign, ":red", 0x5F),
  36021. (assign, ":blue", 0xFF),
  36022. (else_try),
  36023. (eq, ":mod_i_color", 4),
  36024. (assign, ":red", 0x05),
  36025. (assign, ":green", 0x44),
  36026. (else_try),
  36027. (eq, ":mod_i_color", 5),
  36028. (assign, ":red", 0xEE),
  36029. (assign, ":green", 0xEE),
  36030. (assign, ":blue", 0xEE),
  36031. (else_try),
  36032. (assign, ":red", 0x22),
  36033. (assign, ":green", 0x22),
  36034. (assign, ":blue", 0x22),
  36035. (try_end),
  36036. (store_div, ":cur_tone", ":color_index", 7),
  36037. (store_sub, ":cur_tone", 8, ":cur_tone"),
  36038. (val_mul, ":red", ":cur_tone"),
  36039. (val_div, ":red", 8),
  36040. (val_mul, ":green", ":cur_tone"),
  36041. (val_div, ":green", 8),
  36042. (val_mul, ":blue", ":cur_tone"),
  36043. (val_div, ":blue", 8),
  36044. (val_mul, ":green", 0x100),
  36045. (val_mul, ":red", 0x10000),
  36046. (val_add, ":cur_color", ":blue"),
  36047. (val_add, ":cur_color", ":green"),
  36048. (val_add, ":cur_color", ":red"),
  36049. (assign, reg0, ":cur_color"),
  36050. ]),
  36051.  
  36052. # script_cf_check_color_visibility
  36053. # Input: arg1 = color_1, arg2 = color_2
  36054. # Output: none
  36055. ("cf_check_color_visibility",
  36056. [
  36057. (store_script_param, ":color_1", 1),
  36058. (store_script_param, ":color_2", 2),
  36059. (store_mod, ":blue_1", ":color_1", 256),
  36060. (store_div, ":green_1", ":color_1", 256),
  36061. (val_mod, ":green_1", 256),
  36062. (store_div, ":red_1", ":color_1", 256 * 256),
  36063. (val_mod, ":red_1", 256),
  36064. (store_mod, ":blue_2", ":color_2", 256),
  36065. (store_div, ":green_2", ":color_2", 256),
  36066. (val_mod, ":green_2", 256),
  36067. (store_div, ":red_2", ":color_2", 256 * 256),
  36068. (val_mod, ":red_2", 256),
  36069. (store_sub, ":red_dif", ":red_1", ":red_2"),
  36070. (val_abs, ":red_dif"),
  36071. (store_sub, ":green_dif", ":green_1", ":green_2"),
  36072. (val_abs, ":green_dif"),
  36073. (store_sub, ":blue_dif", ":blue_1", ":blue_2"),
  36074. (val_abs, ":blue_dif"),
  36075. (assign, ":max_dif", 0),
  36076. (val_max, ":max_dif", ":red_dif"),
  36077. (val_max, ":max_dif", ":green_dif"),
  36078. (val_max, ":max_dif", ":blue_dif"),
  36079. (ge, ":max_dif", 64),
  36080. ]),
  36081.  
  36082. # script_get_next_active_kingdom
  36083. # Input: arg1 = faction_no
  36084. # Output: reg0 = faction_no (does not choose player faction)
  36085. ("get_next_active_kingdom",
  36086. [
  36087. (store_script_param, ":faction_no", 1),
  36088. (assign, ":end_cond", kingdoms_end),
  36089. (try_for_range, ":unused", kingdoms_begin, ":end_cond"),
  36090. (val_add, ":faction_no", 1),
  36091. (try_begin),
  36092. (ge, ":faction_no", kingdoms_end),
  36093. (assign, ":faction_no", kingdoms_begin),
  36094. (try_end),
  36095. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  36096. (neq, ":faction_no", "fac_player_supporters_faction"),
  36097. (assign, ":end_cond", 0),
  36098. (try_end),
  36099. (assign, reg0, ":faction_no"),
  36100. ]),
  36101.  
  36102. # # script_store_average_center_value_per_faction
  36103. # # Input: none
  36104. # # Output: none (sets $g_average_center_value_per_faction)
  36105. # ("store_average_center_value_per_faction",
  36106. # [
  36107. # (store_sub, ":num_towns", towns_end, towns_begin),
  36108. # (store_sub, ":num_castles", castles_end, castles_begin),
  36109. # (assign, ":num_factions", 0),
  36110. # (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  36111. # (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  36112. # (val_add, ":num_factions", 1),
  36113. # (try_end),
  36114. # (val_max, ":num_factions", 1),
  36115. # (store_mul, "$g_average_center_value_per_faction", ":num_towns", 2),
  36116. # (val_add, "$g_average_center_value_per_faction", ":num_castles"),
  36117. # (val_mul, "$g_average_center_value_per_faction", 10),
  36118. # (val_div, "$g_average_center_value_per_faction", ":num_factions"),
  36119. # ]),
  36120.  
  36121. # script_remove_cattles_if_herd_is_close_to_party
  36122. # Input: arg1 = party_no, arg2 = maximum_number_of_cattles_required
  36123. # Output: reg0 = number_of_cattles_removed
  36124. ("remove_cattles_if_herd_is_close_to_party",
  36125. [
  36126. (store_script_param, ":party_no", 1),
  36127. (store_script_param, ":max_req", 2),
  36128. (assign, ":cur_req", ":max_req"),
  36129. (try_for_parties, ":cur_party"),
  36130. (gt, ":cur_req", 0),
  36131. (party_slot_eq, ":cur_party", slot_party_type, spt_cattle_herd),
  36132. (store_distance_to_party_from_party, ":dist", ":cur_party", ":party_no"),
  36133. (lt, ":dist", 3),
  36134.  
  36135. #Do not use the quest herd for "move cattle herd"
  36136. (assign, ":subcontinue", 1),
  36137. (try_begin),
  36138. (check_quest_active, "qst_move_cattle_herd"),
  36139. (quest_slot_eq, "qst_move_cattle_herd", slot_quest_target_party, ":cur_party"),
  36140. (assign, ":subcontinue", 0),
  36141. (try_end),
  36142. (eq, ":subcontinue", 1),
  36143. #Do not use the quest herd for "move cattle herd" ends
  36144.  
  36145. (party_count_companions_of_type, ":num_cattle", ":cur_party", "trp_cattle"),
  36146. (try_begin),
  36147. (le, ":num_cattle", ":cur_req"),
  36148. (assign, ":num_added", ":num_cattle"),
  36149. (remove_party, ":cur_party"),
  36150. (else_try),
  36151. (assign, ":num_added", ":cur_req"),
  36152. (party_remove_members, ":cur_party", "trp_cattle", ":cur_req"),
  36153. (try_end),
  36154. (val_sub, ":cur_req", ":num_added"),
  36155.  
  36156.  
  36157. (try_begin),
  36158. (party_slot_eq, ":party_no", slot_party_type, spt_village),
  36159. (party_get_slot, ":village_cattle_amount", ":party_no", slot_village_number_of_cattle),
  36160. (val_add, ":village_cattle_amount", ":num_added"),
  36161. (party_set_slot, ":party_no", slot_village_number_of_cattle, ":village_cattle_amount"),
  36162. (try_end),
  36163.  
  36164. (assign, reg3, ":num_added"),
  36165. (str_store_party_name_link, s1, ":party_no"),
  36166. (display_message, "@You brought {reg3} heads of cattle to {s1}."),
  36167. (try_begin),
  36168. (gt, "$cheat_mode", 0),
  36169. (assign, reg4, ":village_cattle_amount"),
  36170. (display_message, "@{!}Village now has {reg4}"),
  36171. (try_end),
  36172. (try_end),
  36173. (store_sub, reg0, ":max_req", ":cur_req"),
  36174. ]),
  36175.  
  36176. # script_get_rumor_to_s61
  36177. # Input: rumor_id
  36178. # Output: reg0 = 1 if rumor found, 0 otherwise; s61 will contain rumor string if found
  36179. ("get_rumor_to_s61",
  36180. [
  36181. (store_script_param, ":base_rumor_id", 1), # the script returns the same rumor for the same rumor id, so that one cannot hear all rumors by
  36182. # speaking to a single person.
  36183.  
  36184. (store_current_hours, ":cur_hours"),
  36185. (store_div, ":cur_day", ":cur_hours", 24),
  36186. (assign, ":rumor_found", 0),
  36187. (assign, ":num_tries", 3),
  36188. (try_for_range, ":try_no", 0, ":num_tries"),
  36189. (store_mul, ":rumor_id", ":try_no", 6781),
  36190. (val_add, ":rumor_id", ":base_rumor_id"),
  36191. (store_mod, ":rumor_type", ":rumor_id", 7),
  36192. (val_add, ":rumor_id", ":cur_hours"),
  36193. (try_begin),
  36194. (eq, ":rumor_type", 0),
  36195. (try_begin),
  36196. (store_sub, ":range", towns_end, towns_begin),
  36197. (store_mod, ":random_center", ":rumor_id", ":range"),
  36198. (val_add, ":random_center", towns_begin),
  36199. (party_slot_ge, ":random_center", slot_town_has_tournament, 1),
  36200. (neq, ":random_center", "$current_town"),
  36201. (str_store_party_name, s62, ":random_center"),
  36202. (str_store_string, s61, "@I heard that there will be a tournament in {s62} soon."),
  36203. (assign, ":rumor_found", 1),
  36204. (try_end),
  36205. (else_try),
  36206. (eq, ":rumor_type", 1),
  36207. (try_begin),
  36208. (store_sub, ":range", active_npcs_end, original_kingdom_heroes_begin), #was reversed
  36209. (store_mod, ":random_hero", ":rumor_id", ":range"),
  36210. (val_add, ":random_hero", original_kingdom_heroes_begin),
  36211. (is_between, ":random_hero", active_npcs_begin, active_npcs_end),
  36212. (troop_get_slot, ":personality", ":random_hero", slot_lord_reputation_type),
  36213. (gt, ":personality", 0),
  36214. (store_add, ":rumor_string", ":personality", "str_gossip_about_character_default"),
  36215. (str_store_troop_name, s6, ":random_hero"),
  36216. (str_store_string, s61, ":rumor_string"),
  36217. (assign, ":rumor_found", 1),
  36218. (try_end),
  36219. (else_try),
  36220. (eq, ":rumor_type", 2),
  36221. (try_begin),
  36222. (store_sub, ":range", trade_goods_end, trade_goods_begin),
  36223. (store_add, ":random_trade_good", ":rumor_id", ":cur_day"),
  36224. (store_mod, ":random_trade_good", ":random_trade_good", ":range"),
  36225. (store_add, ":random_trade_good_slot", ":random_trade_good", slot_town_trade_good_prices_begin),
  36226. (val_add, ":random_trade_good", trade_goods_begin),
  36227. (store_mul, ":min_price", average_price_factor, 3),
  36228. (val_div, ":min_price", 4),
  36229. (assign, ":min_price_center", -1),
  36230. (try_for_range, ":sub_try_no", 0, 10),
  36231. (store_sub, ":range", towns_end, towns_begin),
  36232. (store_add, ":center_rumor_id", ":rumor_id", ":sub_try_no"),
  36233. (store_mod, ":random_center", ":center_rumor_id", ":range"),
  36234. (val_add, ":random_center", towns_begin),
  36235. (neq, ":random_center", "$g_encountered_party"),
  36236. (party_get_slot, ":cur_price", ":random_center", ":random_trade_good_slot"),
  36237. (lt, ":cur_price", ":min_price"),
  36238. (assign, ":min_price", ":cur_price"),
  36239. (assign, ":min_price_center", ":random_center"),
  36240. (try_end),
  36241. (ge, ":min_price_center", 0),
  36242. (str_store_item_name, s62, ":random_trade_good"),
  36243. (str_store_party_name, s63, ":min_price_center"),
  36244. (str_store_string, s61, "@I heard that one can buy {s62} very cheap at {s63}."),
  36245. (assign, ":rumor_found", 1),
  36246. (try_end),
  36247. (else_try),
  36248. (eq, ":rumor_type", 3),
  36249. (try_begin),
  36250. (store_sub, ":range", trade_goods_end, trade_goods_begin),
  36251. (store_add, ":random_trade_good", ":rumor_id", ":cur_day"),
  36252. (store_mod, ":random_trade_good", ":random_trade_good", ":range"),
  36253. (store_add, ":random_trade_good_slot", ":random_trade_good", slot_town_trade_good_prices_begin),
  36254. (val_add, ":random_trade_good", trade_goods_begin),
  36255. (store_mul, ":max_price", average_price_factor, 5),
  36256. (val_div, ":max_price", 4),
  36257. (assign, ":max_price_center", -1),
  36258. (try_for_range, ":sub_try_no", 0, 10),
  36259. (store_sub, ":range", towns_end, towns_begin),
  36260. (store_add, ":center_rumor_id", ":rumor_id", ":sub_try_no"),
  36261. (store_mod, ":random_center", ":center_rumor_id", ":range"),
  36262. (val_add, ":random_center", towns_begin),
  36263. (neq, ":random_center", "$g_encountered_party"),
  36264. (party_get_slot, ":cur_price", ":random_center", ":random_trade_good_slot"),
  36265. (gt, ":cur_price", ":max_price"),
  36266. (assign, ":max_price", ":cur_price"),
  36267. (assign, ":max_price_center", ":random_center"),
  36268. (try_end),
  36269. (ge, ":max_price_center", 0),
  36270. (str_store_item_name, s62, ":random_trade_good"),
  36271. (str_store_party_name, s63, ":max_price_center"),
  36272. (str_store_string, s61, "@I heard that they pay a very high price for {s62} at {s63}."),
  36273. (assign, ":rumor_found", 1),
  36274. (try_end),
  36275. (try_end),
  36276. (try_begin),
  36277. (gt, ":rumor_found", 0),
  36278. (assign, ":num_tries", 0),
  36279. (try_end),
  36280. (try_end),
  36281. (assign, reg0, ":rumor_found"),
  36282. ]),
  36283.  
  36284. ("lord_comment_to_s43",
  36285. [(store_script_param, ":lord", 1),
  36286. (store_script_param, ":default_string", 2),
  36287.  
  36288. (troop_get_slot,":reputation", ":lord", slot_lord_reputation_type),
  36289.  
  36290. (try_begin),
  36291. #some default strings will have added comments for the added commons reputation types
  36292. (try_begin),
  36293. (eq, ":reputation", lrep_roguish),
  36294. (assign, ":reputation", lrep_goodnatured),
  36295. (else_try),
  36296. (eq, ":reputation", lrep_custodian),
  36297. (assign, ":reputation", lrep_cunning),
  36298. (else_try),
  36299. (eq, ":reputation", lrep_benefactor),
  36300. (assign, ":reputation", lrep_goodnatured),
  36301. (try_end),
  36302. (try_end),
  36303.  
  36304. (store_add, ":result", ":reputation", ":default_string"),
  36305.  
  36306. (str_store_string, 43, ":result"),
  36307. (assign, reg0, ":result"),
  36308.  
  36309.  
  36310. ]),
  36311.  
  36312. #Troop Commentaries begin
  36313.  
  36314. # script_add_log_entry
  36315. # Input: arg1 = entry_type, arg2 = event_actor, arg3 = center_object, arg4 = troop_object, arg5 = faction_object
  36316. # Output: none
  36317. ("add_log_entry",
  36318. [(store_script_param, ":entry_type", 1),
  36319. (store_script_param, ":actor", 2),
  36320. (store_script_param, ":center_object", 3),
  36321. (store_script_param, ":troop_object", 4),
  36322. (store_script_param, ":faction_object", 5),
  36323. (assign, ":center_object_lord", -1),
  36324. (assign, ":center_object_faction", -1),
  36325. (assign, ":troop_object_faction", -1),
  36326.  
  36327. (try_begin),
  36328. (party_is_active, ":center_object", 0),
  36329. (party_get_slot, ":center_object_lord", ":center_object", slot_town_lord),
  36330. (store_faction_of_party, ":center_object_faction", ":center_object"),
  36331. (else_try),
  36332. (assign, ":center_object_lord", 0),
  36333. (assign, ":center_object_faction", 0),
  36334. (try_end),
  36335.  
  36336. (try_begin),
  36337. (is_between, ":troop_object", 0, "trp_local_merchant"),
  36338. (store_troop_faction, ":troop_object_faction", ":troop_object"),
  36339. (else_try),
  36340. (assign, ":troop_object_faction", 0),
  36341. (try_end),
  36342.  
  36343. (val_add, "$num_log_entries", 1),
  36344.  
  36345. (store_current_hours, ":entry_time"),
  36346. (troop_set_slot, "trp_log_array_entry_type", "$num_log_entries", ":entry_type"),
  36347. (troop_set_slot, "trp_log_array_entry_time", "$num_log_entries", ":entry_time"),
  36348. (troop_set_slot, "trp_log_array_actor", "$num_log_entries", ":actor"),
  36349. (troop_set_slot, "trp_log_array_center_object", "$num_log_entries", ":center_object"),
  36350. (troop_set_slot, "trp_log_array_center_object_lord", "$num_log_entries", ":center_object_lord"),
  36351. (troop_set_slot, "trp_log_array_center_object_faction", "$num_log_entries", ":center_object_faction"),
  36352. (troop_set_slot, "trp_log_array_troop_object", "$num_log_entries", ":troop_object"),
  36353. (troop_set_slot, "trp_log_array_troop_object_faction", "$num_log_entries", ":troop_object_faction"),
  36354. (troop_set_slot, "trp_log_array_faction_object", "$num_log_entries", ":faction_object"),
  36355.  
  36356. (try_begin),
  36357. (eq, "$cheat_mode", 1),
  36358. (assign, reg3, "$num_log_entries"),
  36359. (assign, reg4, ":entry_type"),
  36360. (display_message, "@{!}Log entry {reg3}: type {reg4}"),
  36361. (try_begin),
  36362. (gt, ":center_object", 0),
  36363. (neq, ":entry_type", logent_traveller_attacked),
  36364. (neq, ":entry_type", logent_party_traded),
  36365. (party_is_active, ":center_object"), #sometimes is a troop
  36366.  
  36367. (str_store_party_name, s4, ":center_object"),
  36368. (display_message, "@{!}Center: {s4}"),
  36369. (try_end),
  36370. (try_begin),
  36371. (gt, ":troop_object", 0),
  36372. (neq, ":entry_type", logent_traveller_attacked),
  36373. (neq, ":entry_type", logent_party_traded),
  36374.  
  36375. (str_store_troop_name, s4, ":troop_object"),
  36376. (display_message, "@{!}Troop: {s4}"),
  36377. (try_end),
  36378. (try_begin),
  36379. (gt, ":center_object_lord", 0),
  36380. (neq, ":entry_type", logent_traveller_attacked),
  36381. (neq, ":entry_type", logent_party_traded),
  36382.  
  36383. (str_store_troop_name, s4, ":center_object_lord"),
  36384. (display_message, "@{!}Lord: {s4}"),
  36385. (try_end),
  36386. (try_end),
  36387.  
  36388.  
  36389. (try_begin),
  36390. (this_or_next|eq, ":entry_type", logent_lord_defeated_by_player),
  36391. (this_or_next|eq, ":entry_type", logent_player_participated_in_major_battle),
  36392. (eq, ":entry_type", logent_player_participated_in_siege),
  36393.  
  36394. (try_begin),
  36395. (eq, "$cheat_mode", 1),
  36396. (display_message, "@{!}Ally party is present"),
  36397. (try_end),
  36398. (try_for_range, ":hero", active_npcs_begin, active_npcs_end),
  36399. (party_count_companions_of_type, ":hero_present", "p_collective_friends", ":hero"),
  36400. (gt, ":hero_present", 0),
  36401. (troop_set_slot, ":hero", slot_troop_present_at_event, "$num_log_entries"),
  36402. # (store_sub, ":skip_up_to_here", "$num_log_entries", 1),
  36403. # (troop_set_slot, ":hero", slot_troop_last_comment_slot, ":skip_up_to_here"),
  36404. (try_begin),
  36405. (eq, "$cheat_mode", 1),
  36406. (str_store_troop_name, s4, ":hero"),
  36407. (display_message, "@{!}{s4} is present at event"),
  36408. (try_end),
  36409. (try_end),
  36410. (try_end),
  36411. ]),
  36412.  
  36413.  
  36414. # script_get_relevant_comment_for_log_entry
  36415. # Input: arg1 = log_entry_no,
  36416. # Output: reg0 = comment_id; reg1 = relevance
  36417. # Notes: 50 is the default relevance.
  36418. # A comment with relevance less than 30 will always be skipped.
  36419. # A comment with relevance 75 or more will never be skipped.
  36420. # A comment with relevance 50 has about 50% chance to be skipped.
  36421. # If there is more than one comment that is not skipped, the system will randomize their relevance values, and then choose the highest one.
  36422. # Also note that the relevance of events decreases as time passes. After three months, relevance reduces to 50%, after 6 months, 25%, etc...
  36423. ("get_relevant_comment_for_log_entry",
  36424. [(store_script_param, ":log_entry_no", 1),
  36425.  
  36426. (troop_get_slot, ":entry_type", "trp_log_array_entry_type", ":log_entry_no"),
  36427. (troop_get_slot, ":entry_time", "trp_log_array_entry_time", ":log_entry_no"),
  36428. (troop_get_slot, ":actor", "trp_log_array_actor", ":log_entry_no"),
  36429. (troop_get_slot, ":center_object", "trp_log_array_center_object", ":log_entry_no"),
  36430. (troop_get_slot, ":center_object_lord", "trp_log_array_center_object_lord", ":log_entry_no"),
  36431. (troop_get_slot, ":center_object_faction", "trp_log_array_center_object_faction", ":log_entry_no"),
  36432. (troop_get_slot, ":troop_object", "trp_log_array_troop_object", ":log_entry_no"),
  36433. (troop_get_slot, ":troop_object_faction", "trp_log_array_troop_object_faction", ":log_entry_no"),
  36434. (troop_get_slot, ":faction_object", "trp_log_array_faction_object", ":log_entry_no"),
  36435.  
  36436. (assign, ":relevance", 0),
  36437. (assign, ":comment", -1),
  36438. (assign, ":rejoinder", -1),
  36439. (assign, ":suggested_relation_change", 0),
  36440.  
  36441. (troop_get_slot, ":reputation", "$g_talk_troop", slot_lord_reputation_type),
  36442. (store_current_hours, ":current_time"),
  36443. (store_sub, ":entry_hours_elapsed", ":current_time", ":entry_time"),
  36444.  
  36445. #Post 0907 changes begin
  36446. (assign, ":players_kingdom_relation", 0), ##the below is so that lords will not congratulate player on attacking neutrals
  36447. (try_begin),
  36448. (gt, "$players_kingdom", 0),
  36449. (store_relation, ":players_kingdom_relation", "$players_kingdom", ":troop_object_faction"),
  36450. (try_end),
  36451.  
  36452. (try_begin),
  36453. (eq, "$cheat_mode", -1), #temporarily disabled
  36454. (try_begin),
  36455. (assign, reg5, ":log_entry_no"),
  36456. (assign, reg6, ":entry_type"),
  36457. (assign, reg8, ":entry_time"),
  36458.  
  36459. (gt, "$players_kingdom", 0),
  36460. (try_begin),
  36461. (gt, ":troop_object_faction", 0),
  36462. (assign, reg7, ":players_kingdom_relation"),
  36463. (display_message, "@{!}Event #{reg5}, type {reg6}, time {reg8}: player's kingdom relation to troop object = {reg7}"),
  36464. (else_try),
  36465. (gt, ":center_object_faction", 0),
  36466. (assign, reg7, ":players_kingdom_relation"),
  36467. (display_message, "@{!}Event #{reg5}, type {reg6}, time {reg8}: player's kingdom relation to center object faction = {reg7}"),
  36468. (else_try),
  36469. (gt, ":faction_object", 0),
  36470. (assign, reg7, ":players_kingdom_relation"),
  36471. (display_message, "@{!}Event #{reg5}, type {reg6}, time {reg8}: player's kingdom relation to faction object = {reg7}"),
  36472. (else_try),
  36473. (display_message, "@{!}Event #{reg5}, type {reg6}, time {reg8}. No relevant kingdom relation"),
  36474. (try_end),
  36475. (else_try),
  36476. (display_message, "@{!}Event #{reg5}, type {reg6}, time {reg8}. Player unaffiliated"),
  36477. (try_end),
  36478. (try_end),
  36479.  
  36480. (try_begin),
  36481. (eq, ":entry_type", logent_game_start),
  36482. (eq, "$g_talk_troop_met", 0),
  36483. (is_between, "$g_talk_troop_faction_relation", -5, 5),
  36484. (is_between, "$g_talk_troop_relation", -5, 5),
  36485.  
  36486. (assign, ":relevance", 25),
  36487. (troop_get_slot, ":plyr_renown", "trp_player", slot_troop_renown),
  36488. #normal_banner_begin
  36489. (troop_get_slot, ":banner", "trp_player", slot_troop_banner_scene_prop),
  36490. #custom_banner_begin
  36491. # (troop_get_slot, ":banner", "trp_player", slot_troop_custom_banner_flag_type),
  36492. (store_random_in_range, ":renown_check", 100, 200),
  36493. (try_begin),
  36494. (eq, ":reputation", lrep_none),
  36495. (gt, "$players_kingdom", 0),
  36496. (assign, ":comment", "str_comment_intro_liege_affiliated"),
  36497. (try_begin),
  36498. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "trp_player"),
  36499. (assign, ":comment", "str_comment_intro_liege_affiliated_to_player"),
  36500. (try_end),
  36501. (else_try),
  36502. (eq, "$character_gender",tf_female),
  36503.  
  36504. (call_script, "script_troop_get_romantic_chemistry_with_troop", "$g_talk_troop", "trp_player"),
  36505. (assign, ":attraction", reg0),
  36506. (store_random_in_range, ":random", 0, 2),
  36507. (this_or_next|eq, ":random", 0),
  36508. (gt, ":attraction", 10),
  36509.  
  36510. (try_begin),
  36511. (this_or_next|gt, ":plyr_renown", ":renown_check"),
  36512. (eq, "$g_disable_condescending_comments", 1),
  36513. (assign, ":comment", "str_comment_intro_female_famous_liege"),
  36514. (val_add, ":comment", ":reputation"),
  36515. (else_try),
  36516. (ge, ":attraction", 9),
  36517. (assign, ":comment", "str_comment_intro_female_admiring_liege"),
  36518. (val_add, ":comment", ":reputation"),
  36519. (else_try),
  36520. (gt, ":banner", 0),
  36521. (assign, ":comment", "str_comment_intro_female_noble_liege"),
  36522. (val_add, ":comment", ":reputation"),
  36523. (else_try),
  36524. (assign, ":comment", "str_comment_intro_female_common_liege"),
  36525. (val_add, ":comment", ":reputation"),
  36526. (try_end),
  36527. #Rejoinders for comments
  36528.  
  36529. (try_begin),
  36530. (eq, ":comment", "str_comment_intro_female_common_badtempered"),
  36531. (assign, ":rejoinder", "str_rejoinder_intro_female_common_badtempered"),
  36532. (else_try),
  36533. (eq, ":comment", "str_comment_intro_female_noble_pitiless"),
  36534. (assign, ":rejoinder", "str_rejoinder_intro_female_noble_pitiless"),
  36535. (else_try),
  36536. (eq, ":comment", "str_comment_intro_female_common_pitiless"),
  36537. (assign, ":rejoinder", "str_rejoinder_intro_female_common_pitiless"),
  36538. (else_try),
  36539. (eq, ":comment", "str_comment_intro_female_noble_sadistic"),
  36540. (assign, ":rejoinder", "str_rejoinder_intro_female_noble_sadistic"),
  36541. (else_try),
  36542. (eq, ":comment", "str_comment_intro_female_common_sadistic"),
  36543. (assign, ":rejoinder", "str_rejoinder_intro_female_common_sadistic"),
  36544. (else_try),
  36545. (eq, ":comment", "str_comment_intro_female_common_upstanding"),
  36546. (assign, ":rejoinder", "str_rejoinder_intro_female_common_upstanding"),
  36547. (else_try),
  36548. (eq, ":comment", "str_comment_intro_female_noble_upstanding"),
  36549. (assign, ":rejoinder", "str_rejoinder_intro_female_noble_upstanding"),
  36550. (else_try),
  36551. (eq, ":comment", "str_comment_intro_female_common_martial"),
  36552. (assign, ":rejoinder", "str_rejoinder_intro_female_common_martial"),
  36553. (else_try),
  36554. (eq, ":comment", "str_comment_intro_female_sadistic_admiring"),
  36555. (assign, ":rejoinder", "str_rejoinder_intro_female_sadistic_admiring"),
  36556. (else_try),
  36557. (eq, ":comment", "str_comment_intro_female_badtempered_admiring"),
  36558. (assign, ":rejoinder", "str_rejoinder_intro_female_badtempered_admiring"),
  36559. (else_try),
  36560. (eq, ":comment", "str_comment_intro_female_pitiless_admiring"),
  36561. (assign, ":rejoinder", "str_rejoinder_intro_female_pitiless_admiring"),
  36562. (try_end),
  36563. (else_try),
  36564. #Male character or non-gendered comment
  36565. (try_begin),
  36566. (gt, ":plyr_renown", ":renown_check"),
  36567. (assign, ":comment", "str_comment_intro_famous_liege"),
  36568. (val_add, ":comment", ":reputation"),
  36569. (else_try),
  36570. (gt, ":banner", 0),
  36571. (assign, ":comment", "str_comment_intro_noble_liege"),
  36572. (val_add, ":comment", ":reputation"),
  36573. (try_begin),
  36574. (eq, ":comment", "str_comment_intro_noble_sadistic"),
  36575. (assign, ":rejoinder", "str_rejoinder_intro_noble_sadistic"),
  36576. (try_end),
  36577. (else_try),
  36578. (assign, ":comment", "str_comment_intro_common_liege"),
  36579. (val_add, ":comment", ":reputation"),
  36580. (try_end),
  36581. (try_end),
  36582. #Post 0907 changes end
  36583.  
  36584. (else_try),
  36585. (eq, ":entry_type", logent_village_raided),
  36586. (eq, ":actor", "trp_player"),
  36587. (try_begin),
  36588. (eq, ":center_object_lord", "$g_talk_troop"),
  36589. (assign, ":relevance", 200),
  36590. (assign, ":suggested_relation_change", -1),
  36591. (assign, ":comment", "str_comment_you_raided_my_village_default"),
  36592. (try_begin),
  36593. (lt, "$g_talk_troop_faction_relation", -5),
  36594. (this_or_next|eq, ":reputation", lrep_goodnatured),
  36595. (eq, ":reputation", lrep_upstanding),
  36596. (assign, ":comment", "str_comment_you_raided_my_village_enemy_benevolent"),
  36597. (else_try),
  36598. (lt, "$g_talk_troop_faction_relation", -5),
  36599. (this_or_next|eq, ":reputation", lrep_cunning),
  36600. (eq, ":reputation", lrep_selfrighteous),
  36601. (assign, ":comment", "str_comment_you_raided_my_village_enemy_coldblooded"),
  36602. (else_try),
  36603. (lt, "$g_talk_troop_faction_relation", -5),
  36604. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36605. (eq, ":reputation", lrep_debauched),
  36606. (assign, ":comment", "str_comment_you_raided_my_village_enemy_spiteful"),
  36607. (else_try),
  36608. (lt, "$g_talk_troop_faction_relation", -5),
  36609. (assign, ":comment", "str_comment_you_raided_my_village_enemy"),
  36610. (else_try),
  36611. (lt, "$g_talk_troop_relation", -5),
  36612. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36613. (eq, ":reputation", lrep_debauched),
  36614. (assign, ":comment", "str_comment_you_raided_my_village_unfriendly_spiteful"),
  36615. (else_try),
  36616. (gt, "$g_talk_troop_relation", 5),
  36617. (assign, ":comment", "str_comment_you_raided_my_village_friendly"),
  36618. (try_end),
  36619. (try_end),
  36620.  
  36621. (else_try),
  36622. (eq, ":entry_type", logent_village_extorted),
  36623. (eq, ":actor", "trp_player"),
  36624. (try_begin),
  36625. (eq, ":center_object_lord", "$g_talk_troop"),
  36626. (assign, ":relevance", 30),
  36627. (assign, ":suggested_relation_change", -1),
  36628. (assign, ":comment", "str_comment_you_robbed_my_village_default"),
  36629. (try_begin),
  36630. (lt, "$g_talk_troop_faction_relation", -5),
  36631. (this_or_next|eq, ":reputation", lrep_cunning),
  36632. (eq, ":reputation", lrep_selfrighteous),
  36633. (assign, ":comment", "str_comment_you_robbed_my_village_enemy_coldblooded"),
  36634. (else_try),
  36635. (lt, "$g_talk_troop_faction_relation", -5),
  36636. (assign, ":comment", "str_comment_you_robbed_my_village_enemy"),
  36637. (else_try),
  36638. (gt, "$g_talk_troop_relation", 5),
  36639. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36640. (eq, ":reputation", lrep_debauched),
  36641. (assign, ":comment", "str_comment_you_robbed_my_village_friendly_spiteful"),
  36642. (else_try),
  36643. (gt, "$g_talk_troop_relation", 5),
  36644. (assign, ":comment", "str_comment_you_robbed_my_village_friendly"),
  36645. (try_end),
  36646. (try_end),
  36647.  
  36648. (else_try),
  36649. (eq, ":entry_type", logent_caravan_accosted),
  36650. (eq, ":actor", "trp_player"),
  36651. (eq, ":faction_object", "$g_talk_troop_faction"),
  36652. (eq, ":center_object", -1),
  36653. (eq, ":troop_object", -1),
  36654.  
  36655.  
  36656.  
  36657. (faction_slot_eq, "$g_talk_troop_faction", slot_faction_leader, "$g_talk_troop"),
  36658. (assign, ":relevance", 30),
  36659. (assign, ":suggested_relation_change", -1),
  36660. (assign, ":comment", "str_comment_you_accosted_my_caravan_default"),
  36661. (try_begin),
  36662. (lt, "$g_talk_troop_faction_relation", -5),
  36663. (assign, ":comment", "str_comment_you_accosted_my_caravan_enemy"),
  36664. (try_end),
  36665.  
  36666. (else_try),
  36667. (eq, ":entry_type", logent_helped_peasants),
  36668. (eq, ":actor", "trp_player"),
  36669. (try_begin),
  36670. (eq, ":center_object_lord", "$g_talk_troop"),
  36671. (assign, ":relevance", 40),
  36672. (assign, ":suggested_relation_change", 0),
  36673. (try_begin),
  36674. (this_or_next|eq, ":reputation", lrep_goodnatured),
  36675. (eq, ":reputation", lrep_upstanding),
  36676. (assign, ":comment", "str_comment_you_helped_villagers_benevolent"),
  36677. (assign, ":suggested_relation_change", 1),
  36678. (else_try),
  36679. (gt, "$g_talk_troop_relation", 5),
  36680. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36681. (eq, ":reputation", lrep_debauched),
  36682. (assign, ":comment", "str_comment_you_helped_villagers_friendly_cruel"),
  36683. (assign, ":suggested_relation_change", -1),
  36684. (else_try),
  36685. (lt, "$g_talk_troop_relation", -5),
  36686. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36687. (eq, ":reputation", lrep_debauched),
  36688. (assign, ":comment", "str_comment_you_helped_villagers_unfriendly_spiteful"),
  36689. (assign, ":suggested_relation_change", -1),
  36690. (else_try),
  36691. (gt, "$g_talk_troop_relation", 5),
  36692. (assign, ":comment", "str_comment_you_helped_villagers_friendly"),
  36693. (else_try),
  36694. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  36695. (eq, ":reputation", lrep_debauched),
  36696. (assign, ":comment", "str_comment_you_helped_villagers_cruel"),
  36697. (assign, ":suggested_relation_change", -1),
  36698. (else_try),
  36699. (assign, ":comment", "str_comment_you_helped_villagers_default"),
  36700. (try_end),
  36701. (try_end),
  36702.  
  36703. ###Combat events
  36704. (else_try),
  36705. (eq, ":entry_type", logent_castle_captured_by_player),
  36706.  
  36707. (try_begin),
  36708. (eq, ":center_object_lord", "$g_talk_troop"),
  36709. (store_faction_of_party, ":current_center_faction", ":center_object"),
  36710. (eq, ":current_center_faction", "$players_kingdom"),
  36711. (neq, "$g_talk_troop_faction", "$players_kingdom"),
  36712.  
  36713. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36714. (eq, ":reputation", lrep_debauched),
  36715.  
  36716. (assign, ":comment", "str_comment_you_captured_my_castle_enemy_spiteful"),
  36717. (assign, ":relevance", 200),
  36718. (else_try),
  36719. (eq, ":center_object_lord", "$g_talk_troop"),
  36720. (store_faction_of_party, ":current_center_faction", ":center_object"),
  36721. (eq, ":current_center_faction", "$players_kingdom"),
  36722. (neq, "$g_talk_troop_faction", "$players_kingdom"),
  36723.  
  36724. (this_or_next|eq, ":reputation", lrep_martial),
  36725. (eq, ":reputation", lrep_goodnatured),
  36726.  
  36727. (assign, ":comment", "str_comment_you_captured_my_castle_enemy_chivalrous"),
  36728. (assign, ":relevance", 200),
  36729. (else_try),
  36730. (eq, ":center_object_lord", "$g_talk_troop"),
  36731. (store_faction_of_party, ":current_center_faction", ":center_object"),
  36732. (eq, ":current_center_faction", "$players_kingdom"),
  36733. (neq, "$g_talk_troop_faction", "$players_kingdom"),
  36734.  
  36735. (assign, ":comment", "str_comment_you_captured_my_castle_enemy"),
  36736. (assign, ":relevance", 200),
  36737. (else_try),
  36738. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  36739. (lt, ":players_kingdom_relation", 0),
  36740. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36741. (eq, ":reputation", lrep_debauched),
  36742. (assign, ":comment", "str_comment_you_captured_a_castle_allied_spiteful"),
  36743. (assign, ":relevance", 75),
  36744. (else_try),
  36745. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  36746. (lt, ":players_kingdom_relation", 0),
  36747. (gt, "$g_talk_troop_relation", 5),
  36748. (assign, ":comment", "str_comment_you_captured_a_castle_allied_friendly"),
  36749. (assign, ":relevance", 75),
  36750. (else_try),
  36751. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  36752. (lt, ":players_kingdom_relation", 0),
  36753. (lt, "$g_talk_troop_relation", -5),
  36754. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36755. (eq, ":reputation", lrep_debauched),
  36756. (assign, ":comment", "str_comment_you_captured_a_castle_allied_unfriendly_spiteful"),
  36757. (assign, ":relevance", 75),
  36758. (else_try),
  36759. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  36760. (lt, ":players_kingdom_relation", 0),
  36761. (lt, "$g_talk_troop_relation", -5),
  36762. (assign, ":comment", "str_comment_you_captured_a_castle_allied_unfriendly"),
  36763. (assign, ":relevance", 75),
  36764. (else_try),
  36765. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  36766. (lt, ":players_kingdom_relation", 0),
  36767. (assign, ":comment", "str_comment_you_captured_a_castle_allied"),
  36768. (assign, ":relevance", 75),
  36769. (try_end),
  36770.  
  36771. (else_try),
  36772. (eq, ":entry_type", logent_player_claims_throne_1),
  36773. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  36774. (faction_slot_eq, "$g_talk_troop_faction", slot_faction_leader, "$g_talk_troop"),
  36775. (assign, ":comment", "str_comment_you_claimed_the_throne_1_player_liege"),
  36776. (assign, ":relevance", 500),
  36777. (lt, "$g_talk_troop_relation", -10),
  36778.  
  36779. (else_try),
  36780. (eq, ":entry_type", logent_player_claims_throne_2),
  36781. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  36782. (faction_slot_eq, "$g_talk_troop_faction", slot_faction_leader, "$g_talk_troop"),
  36783. (assign, ":comment", "str_comment_you_claimed_the_throne_2_player_liege"),
  36784. (assign, ":relevance", 500),
  36785. (lt, "$g_talk_troop_relation", -10),
  36786.  
  36787. (else_try), #player appointed a commoner
  36788. (eq, ":entry_type", logent_liege_grants_fief_to_vassal),
  36789. (eq, ":actor", "trp_player"),
  36790. (troop_slot_ge, ":troop_object", slot_lord_reputation_type, lrep_roguish),
  36791. (try_begin),
  36792. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36793. (eq, ":reputation", lrep_debauched),
  36794. (assign, ":comment", "str_comment_you_enfiefed_a_commoner_nasty"),
  36795. (assign, ":relevance", 100),
  36796. (assign, ":suggested_relation_change", -3),
  36797.  
  36798. (else_try),
  36799. (eq, ":reputation", lrep_upstanding),
  36800. (assign, ":comment", "str_comment_you_enfiefed_a_commoner_hesitant"),
  36801. (assign, ":relevance", 100),
  36802. (assign, ":suggested_relation_change", -2),
  36803.  
  36804. (else_try),
  36805. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  36806. (eq, ":reputation", lrep_martial),
  36807. (assign, ":comment", "str_comment_you_enfiefed_a_commoner_derisive"),
  36808. (assign, ":relevance", 100),
  36809. (assign, ":suggested_relation_change", -4),
  36810.  
  36811. (try_end),
  36812.  
  36813. #Post 0907 changes begin
  36814. (else_try),
  36815. (this_or_next|eq, ":entry_type", logent_lord_defeated_by_player),
  36816. (eq, ":entry_type", logent_lord_helped_by_player),
  36817. (troop_slot_eq, "$g_talk_troop", slot_troop_present_at_event, ":log_entry_no"),
  36818. (try_begin),
  36819. (lt, "$g_talk_troop_relation", -5),
  36820. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36821. (eq, ":reputation", lrep_debauched),
  36822. (assign, ":comment", "str_comment_we_defeated_a_lord_unfriendly_spiteful"),
  36823. (assign, ":relevance", 150),
  36824. (else_try),
  36825. (lt, "$g_talk_troop_relation", -5),
  36826. (assign, ":comment", "str_comment_we_defeated_a_lord_unfriendly"),
  36827. (assign, ":relevance", 150),
  36828. (else_try),
  36829. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  36830. (eq, ":reputation", lrep_debauched),
  36831. (assign, ":comment", "str_comment_we_defeated_a_lord_cruel"),
  36832. (assign, ":relevance", 150),
  36833. (else_try),
  36834. (eq, ":reputation", lrep_quarrelsome),
  36835. (assign, ":comment", "str_comment_we_defeated_a_lord_cruel"),
  36836. (assign, ":relevance", 150),
  36837. (else_try),
  36838. (eq, ":reputation", lrep_upstanding),
  36839. (assign, ":comment", "str_comment_we_defeated_a_lord_upstanding"),
  36840. (assign, ":relevance", 150),
  36841. (else_try),
  36842. (assign, ":comment", "str_comment_we_defeated_a_lord_default"),
  36843. (assign, ":relevance", 150),
  36844. (try_end),
  36845.  
  36846. (else_try),
  36847. (this_or_next|eq, ":entry_type", logent_castle_captured_by_player),
  36848. (eq, ":entry_type", logent_player_participated_in_siege),
  36849.  
  36850. (troop_slot_eq, "$g_talk_troop", slot_troop_present_at_event, ":log_entry_no"),
  36851.  
  36852. (try_begin),
  36853. (lt, "$g_talk_troop_relation", -5),
  36854. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36855. (eq, ":reputation", lrep_debauched),
  36856. (assign, ":comment", "str_comment_we_fought_in_siege_unfriendly_spiteful"),
  36857. (assign, ":relevance", 150),
  36858. (else_try),
  36859. (lt, "$g_talk_troop_relation", -5),
  36860. (assign, ":comment", "str_comment_we_fought_in_siege_unfriendly"),
  36861. (assign, ":relevance", 150),
  36862. (else_try),
  36863. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  36864. (eq, ":reputation", lrep_debauched),
  36865. (assign, ":comment", "str_comment_we_fought_in_siege_cruel"),
  36866. (assign, ":relevance", 150),
  36867. (assign, ":suggested_relation_change", 1),
  36868. (else_try),
  36869. (eq, ":reputation", lrep_quarrelsome),
  36870. (assign, ":comment", "str_comment_we_fought_in_siege_quarrelsome"),
  36871. (assign, ":relevance", 150),
  36872. (assign, ":suggested_relation_change", 1),
  36873. (else_try),
  36874. (eq, ":reputation", lrep_upstanding),
  36875. (assign, ":comment", "str_comment_we_fought_in_siege_upstanding"),
  36876. (assign, ":relevance", 150),
  36877. (assign, ":suggested_relation_change", 1),
  36878. (else_try),
  36879. (eq, ":reputation", lrep_martial),
  36880. (assign, ":comment", "str_comment_we_fought_in_siege_default"),
  36881. (assign, ":relevance", 150),
  36882. (assign, ":suggested_relation_change", 2),
  36883. (else_try),
  36884. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "$g_talk_troop"),
  36885. (assign, ":comment", "str_comment_we_fought_in_siege_default"),
  36886. (assign, ":relevance", 150),
  36887. (assign, ":suggested_relation_change", 1),
  36888. (else_try),
  36889. (assign, ":comment", "str_comment_we_fought_in_siege_default"),
  36890. (assign, ":relevance", 150),
  36891. (assign, ":suggested_relation_change", 1),
  36892. (try_end),
  36893.  
  36894. (else_try),
  36895. (eq, ":entry_type", logent_castle_given_to_lord_by_player),
  36896.  
  36897. (try_begin),
  36898. (eq, ":troop_object", "$g_talk_troop"),
  36899. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36900. (eq, ":reputation", lrep_debauched),
  36901. (assign, ":comment", "str_comment_you_give_castle_in_my_control"),
  36902. (assign, ":relevance", 200),
  36903. (else_try),
  36904. (eq, ":troop_object", "$g_talk_troop"),
  36905. (this_or_next|eq, ":reputation", lrep_martial),
  36906. (eq, ":reputation", lrep_goodnatured),
  36907. (assign, ":comment", "str_comment_you_give_castle_in_my_control"),
  36908. (assign, ":relevance", 200),
  36909. (else_try),
  36910. (eq, ":troop_object", "$g_talk_troop"),
  36911. (assign, ":comment", "str_comment_you_give_castle_in_my_control"),
  36912. (assign, ":relevance", 200),
  36913. (try_end),
  36914.  
  36915. (else_try),
  36916. (eq, ":entry_type", logent_player_participated_in_major_battle),
  36917. (troop_slot_eq, "$g_talk_troop", slot_troop_present_at_event, ":log_entry_no"),
  36918. (try_begin),
  36919. (lt, "$g_talk_troop_relation", -5),
  36920. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  36921. (eq, ":reputation", lrep_debauched),
  36922. (assign, ":comment", "str_comment_we_fought_in_major_battle_unfriendly_spiteful"),
  36923. (assign, ":relevance", 150),
  36924. (else_try),
  36925. (lt, "$g_talk_troop_relation", -5),
  36926. (assign, ":comment", "str_comment_we_fought_in_major_battle_unfriendly"),
  36927. (assign, ":relevance", 150),
  36928. (else_try),
  36929. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  36930. (eq, ":reputation", lrep_debauched),
  36931. (assign, ":comment", "str_comment_we_fought_in_major_battle_cruel"),
  36932. (assign, ":relevance", 150),
  36933. (assign, ":suggested_relation_change", 1),
  36934. (else_try),
  36935. (eq, ":reputation", lrep_quarrelsome),
  36936. (assign, ":comment", "str_comment_we_fought_in_major_battle_cruel"),
  36937. (assign, ":relevance", 150),
  36938. (assign, ":suggested_relation_change", 1),
  36939. (else_try),
  36940. (eq, ":reputation", lrep_upstanding),
  36941. (assign, ":comment", "str_comment_we_fought_in_major_battle_upstanding"),
  36942. (assign, ":relevance", 150),
  36943. (assign, ":suggested_relation_change", 1),
  36944. (else_try),
  36945. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "$g_talk_troop"),
  36946. (assign, ":comment", "str_comment_we_fought_in_major_battle_default"),
  36947. (assign, ":relevance", 150),
  36948. (assign, ":suggested_relation_change", 1),
  36949. (else_try),
  36950. (eq, ":reputation", lrep_martial),
  36951. (assign, ":comment", "str_comment_we_fought_in_major_battle_default"),
  36952. (assign, ":relevance", 150),
  36953. (assign, ":suggested_relation_change", 2),
  36954. (else_try),
  36955. (assign, ":comment", "str_comment_we_fought_in_major_battle_default"),
  36956. (assign, ":relevance", 150),
  36957. (assign, ":suggested_relation_change", 1),
  36958. (try_end),
  36959.  
  36960. (else_try),
  36961. (eq, ":entry_type", logent_player_suggestion_succeeded),
  36962. (try_begin),
  36963. (eq, ":troop_object", "$g_talk_troop"),
  36964. (assign, ":comment", "str_comment_player_suggestion_succeeded"),
  36965. (assign, ":relevance", 200),
  36966. (assign, ":suggested_relation_change", 3),
  36967.  
  36968. (try_end),
  36969. (else_try),
  36970. (eq, ":entry_type", logent_player_suggestion_failed),
  36971. (try_begin),
  36972. (eq, ":troop_object", "$g_talk_troop"),
  36973. (assign, ":comment", "str_comment_player_suggestion_failed"),
  36974. (assign, ":relevance", 200),
  36975. (assign, ":suggested_relation_change", -5),
  36976.  
  36977. (try_end),
  36978.  
  36979. #Post 0907 changes end
  36980.  
  36981. (else_try),
  36982. (eq, ":entry_type", logent_lord_defeated_by_player),
  36983. (try_begin),
  36984. (eq, ":troop_object", "$g_talk_troop"),
  36985. (this_or_next|eq, ":reputation", lrep_martial),
  36986. (eq, ":reputation", lrep_goodnatured),
  36987. (assign, ":comment", "str_comment_you_defeated_me_enemy_chivalrous"),
  36988. (assign, ":relevance", 200),
  36989. (else_try),
  36990. (eq, ":troop_object", "$g_talk_troop"),
  36991. (this_or_next|eq, ":reputation", lrep_debauched),
  36992. (eq, ":reputation", lrep_quarrelsome),
  36993. (assign, ":comment", "str_comment_you_defeated_me_enemy_spiteful"),
  36994. (assign, ":relevance", 200),
  36995. (else_try),
  36996. (eq, ":troop_object", "$g_talk_troop"),
  36997. (assign, ":comment", "str_comment_you_defeated_me_enemy"),
  36998. (assign, ":relevance", 200),
  36999. (else_try),
  37000. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37001. (this_or_next|eq, ":reputation", lrep_upstanding),
  37002. (eq, ":reputation", lrep_cunning),
  37003. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy_pragmatic"),
  37004. (assign, ":relevance", 85),
  37005. (else_try),
  37006. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37007. (this_or_next|eq, ":reputation", lrep_martial),
  37008. (eq, ":reputation", lrep_goodnatured),
  37009. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy_chivalrous"),
  37010. (assign, ":relevance", 85),
  37011. (else_try),
  37012. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37013. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37014. (eq, ":reputation", lrep_debauched),
  37015. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy_spiteful"),
  37016. (assign, ":relevance", 85),
  37017. (else_try),
  37018. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37019. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy"),
  37020. (assign, ":relevance", 85),
  37021. (else_try),
  37022. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37023. (lt, ":players_kingdom_relation", 0),
  37024. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "$g_talk_troop"),
  37025. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_liege"),
  37026. (assign, ":relevance", 150),
  37027. (assign, ":suggested_relation_change", 1),
  37028.  
  37029. (else_try),
  37030. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37031. (lt, ":players_kingdom_relation", 0),
  37032. (lt, "$g_talk_troop_relation", -5),
  37033. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37034. (eq, ":reputation", lrep_debauched),
  37035. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_unfriendly_spiteful"),
  37036. (assign, ":relevance", 65),
  37037. (else_try),
  37038. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37039. (lt, ":players_kingdom_relation", 0),
  37040. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37041. (eq, ":reputation", lrep_debauched),
  37042. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_spiteful"),
  37043. (assign, ":relevance", 65),
  37044. (else_try),
  37045. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37046. (lt, ":players_kingdom_relation", 0),
  37047. (lt, "$g_talk_troop_relation", -5),
  37048. (this_or_next|eq, ":reputation", lrep_upstanding),
  37049. (eq, ":reputation", lrep_martial),
  37050. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_unfriendly_chivalrous"),
  37051. (assign, ":relevance", 65),
  37052. (else_try),
  37053. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37054. (lt, ":players_kingdom_relation", 0),
  37055. (assign, ":comment", "str_comment_you_defeated_a_lord_allied"),
  37056. (assign, ":relevance", 65),
  37057. (try_end),
  37058.  
  37059. (else_try),
  37060. (eq, ":entry_type", logent_lord_defeated_by_player),
  37061. (try_begin),
  37062. (eq, ":troop_object", "$g_talk_troop"),
  37063. (this_or_next|eq, ":reputation", lrep_martial),
  37064. (eq, ":reputation", lrep_goodnatured),
  37065. (assign, ":comment", "str_comment_you_defeated_me_enemy_chivalrous"),
  37066. (assign, ":relevance", 200),
  37067. (else_try),
  37068. (eq, ":troop_object", "$g_talk_troop"),
  37069. (this_or_next|eq, ":reputation", lrep_debauched),
  37070. (eq, ":reputation", lrep_quarrelsome),
  37071. (assign, ":comment", "str_comment_you_defeated_me_enemy_spiteful"),
  37072. (assign, ":relevance", 200),
  37073. (else_try),
  37074. (eq, ":troop_object", "$g_talk_troop"),
  37075. (assign, ":comment", "str_comment_you_defeated_me_enemy"),
  37076. (assign, ":relevance", 200),
  37077. (else_try),
  37078. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37079. (this_or_next|eq, ":reputation", lrep_upstanding),
  37080. (eq, ":reputation", lrep_cunning),
  37081. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy_pragmatic"),
  37082. (assign, ":relevance", 85),
  37083. (else_try),
  37084. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37085. (this_or_next|eq, ":reputation", lrep_martial),
  37086. (eq, ":reputation", lrep_goodnatured),
  37087. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy_chivalrous"),
  37088. (assign, ":relevance", 85),
  37089. (else_try),
  37090. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37091. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37092. (eq, ":reputation", lrep_debauched),
  37093. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy_spiteful"),
  37094. (assign, ":relevance", 85),
  37095. (else_try),
  37096. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37097. (assign, ":comment", "str_comment_you_defeated_my_friend_enemy"),
  37098. (assign, ":relevance", 85),
  37099. (else_try),
  37100. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37101. (lt, ":players_kingdom_relation", 0),
  37102. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "$g_talk_troop"),
  37103. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_liege"),
  37104. (assign, ":relevance", 70),
  37105. (else_try),
  37106. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37107. (lt, ":players_kingdom_relation", 0),
  37108. (lt, "$g_talk_troop_relation", -5),
  37109. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37110. (eq, ":reputation", lrep_debauched),
  37111. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_unfriendly_spiteful"),
  37112. (assign, ":relevance", 65),
  37113. (else_try),
  37114. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37115. (lt, ":players_kingdom_relation", 0),
  37116. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37117. (eq, ":reputation", lrep_debauched),
  37118. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_spiteful"),
  37119. (assign, ":relevance", 65),
  37120. (else_try),
  37121. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37122. (lt, ":players_kingdom_relation", 0),
  37123. (lt, "$g_talk_troop_relation", -5),
  37124. (this_or_next|eq, ":reputation", lrep_upstanding),
  37125. (eq, ":reputation", lrep_martial),
  37126. (assign, ":comment", "str_comment_you_defeated_a_lord_allied_unfriendly_chivalrous"),
  37127. (assign, ":relevance", 65),
  37128. (else_try),
  37129. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37130. (lt, ":players_kingdom_relation", 0),
  37131. (assign, ":comment", "str_comment_you_defeated_a_lord_allied"),
  37132. (assign, ":relevance", 65),
  37133. (try_end),
  37134.  
  37135. #Post 0907 changes begin
  37136. (else_try),
  37137. (eq, ":entry_type", logent_lord_helped_by_player),
  37138. (neq, ":troop_object", "$g_talk_troop"),
  37139. (eq, ":troop_object_faction", "$g_talk_troop_faction"),
  37140. (try_begin),
  37141. (lt, "$g_talk_troop_relation", -5),
  37142. (this_or_next|eq, ":reputation", lrep_upstanding),
  37143. (eq, ":reputation", lrep_martial),
  37144. (assign, ":comment", "str_comment_you_helped_my_ally_unfriendly_chivalrous"),
  37145. (assign, ":relevance", 65),
  37146. (assign, ":suggested_relation_change", 2),
  37147. (else_try),
  37148. (lt, "$g_talk_troop_relation", -5),
  37149. (assign, ":comment", "str_comment_you_helped_my_ally_unfriendly"),
  37150. (assign, ":relevance", 0),
  37151. (else_try),
  37152. (eq, ":reputation", lrep_none),
  37153. (assign, ":comment", "str_comment_you_helped_my_ally_liege"),
  37154. (assign, ":relevance", 65),
  37155. (assign, ":suggested_relation_change", 3),
  37156. (else_try),
  37157. (lt, "$g_talk_troop_relation", -5),
  37158. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37159. (eq, ":reputation", lrep_debauched),
  37160. (assign, ":comment", "str_comment_you_helped_my_ally_unfriendly_spiteful"),
  37161. (assign, ":relevance", 65),
  37162. (else_try),
  37163. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37164. (eq, ":reputation", lrep_debauched),
  37165. (assign, ":comment", "str_comment_you_helped_my_ally_spiteful"),
  37166. (assign, ":relevance", 65),
  37167. (else_try),
  37168. (this_or_next|eq, ":reputation", lrep_martial),
  37169. (eq, ":reputation", lrep_upstanding),
  37170. (assign, ":comment", "str_comment_you_helped_my_ally_chivalrous"),
  37171. (assign, ":relevance", 65),
  37172. (assign, ":suggested_relation_change", 2),
  37173. (else_try),
  37174. (eq, ":troop_object", "$g_talk_troop"),
  37175. (assign, ":comment", "str_comment_you_helped_my_ally_default"),
  37176. (try_end),
  37177.  
  37178. #Post 0907 changes begin
  37179. (else_try),
  37180. (eq, ":entry_type", logent_player_defeated_by_lord),
  37181. (troop_slot_eq, "$g_talk_troop", slot_troop_present_at_event, ":log_entry_no"),
  37182. (try_begin),
  37183. (lt, "$g_talk_troop_relation", -5),
  37184. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37185. (eq, ":reputation", lrep_debauched),
  37186. (assign, ":comment", "str_comment_we_were_defeated_unfriendly_spiteful"),
  37187. (assign, ":relevance", 150),
  37188. (else_try),
  37189. (lt, "$g_talk_troop_relation", -5),
  37190. (assign, ":comment", "str_comment_we_were_defeated_unfriendly"),
  37191. (assign, ":relevance", 150),
  37192. (else_try),
  37193. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37194. (eq, ":reputation", lrep_debauched),
  37195. (assign, ":comment", "str_comment_we_were_defeated_cruel"),
  37196. (assign, ":relevance", 150),
  37197. (else_try),
  37198. (assign, ":comment", "str_comment_we_were_defeated_default"),
  37199. (assign, ":relevance", 150),
  37200. (try_end),
  37201.  
  37202. (else_try),
  37203. (eq, ":entry_type", logent_player_defeated_by_lord),
  37204. (try_begin),
  37205. (eq, ":troop_object", "$g_talk_troop"),
  37206. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37207. (eq, ":reputation", lrep_debauched),
  37208. (assign, ":comment", "str_comment_I_defeated_you_enemy_spiteful"),
  37209. (assign, ":relevance", 200),
  37210. (else_try),
  37211. (eq, ":troop_object", "$g_talk_troop"),
  37212. (eq, ":reputation", lrep_martial),
  37213. (assign, ":comment", "str_comment_I_defeated_you_enemy_chivalrous"),
  37214. (assign, ":relevance", 200),
  37215. (else_try),
  37216. (eq, ":troop_object", "$g_talk_troop"),
  37217. (this_or_next|eq, ":reputation", lrep_goodnatured),
  37218. (eq, ":reputation", lrep_upstanding),
  37219. (assign, ":comment", "str_comment_I_defeated_you_enemy_benevolent"),
  37220. (assign, ":relevance", 200),
  37221. (else_try),
  37222. (eq, ":troop_object", "$g_talk_troop"),
  37223. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37224. (eq, ":reputation", lrep_cunning),
  37225. (assign, ":comment", "str_comment_I_defeated_you_enemy_coldblooded"),
  37226. (assign, ":relevance", 200),
  37227. (else_try),
  37228. (eq, ":troop_object", "$g_talk_troop"),
  37229. (assign, ":comment", "str_comment_I_defeated_you_enemy"),
  37230. (assign, ":relevance", 200),
  37231. (else_try),
  37232. (eq, ":troop_object", "$g_talk_troop"),
  37233. (assign, ":comment", "str_comment_I_defeated_you_enemy"),
  37234. (assign, ":relevance", 200),
  37235. (else_try),
  37236. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37237. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37238. (eq, ":reputation", lrep_debauched),
  37239. (gt, "$g_talk_troop_relation", 5),
  37240. (assign, ":comment", "str_comment_you_were_defeated_allied_friendly_spiteful"),
  37241. (assign, ":relevance", 80),
  37242. (else_try),
  37243. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37244. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37245. (eq, ":reputation", lrep_debauched),
  37246. (lt, "$g_talk_troop_relation", -5),
  37247. (assign, ":comment", "str_comment_you_were_defeated_allied_unfriendly_cruel"),
  37248. (assign, ":relevance", 80),
  37249. (else_try),
  37250. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37251. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37252. (eq, ":reputation", lrep_debauched),
  37253. (le, "$g_talk_troop_relation", 5),
  37254. (assign, ":comment", "str_comment_you_were_defeated_allied_spiteful"),
  37255. (assign, ":relevance", 80),
  37256. (else_try),
  37257. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37258. (eq, ":reputation", lrep_selfrighteous),
  37259. (assign, ":comment", "str_comment_you_were_defeated_allied_pitiless"),
  37260. (assign, ":relevance", 65),
  37261. (else_try),
  37262. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37263. (eq, ":reputation", lrep_upstanding),
  37264. (lt, "$g_talk_troop_relation", -15),
  37265. (assign, ":comment", "str_comment_you_were_defeated_allied_unfriendly_upstanding"),
  37266. (assign, ":relevance", 65),
  37267. (else_try),
  37268. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37269. (lt, "$g_talk_troop_relation", -10),
  37270. (assign, ":comment", "str_comment_you_were_defeated_allied_unfriendly"),
  37271. (assign, ":relevance", 65),
  37272. (else_try),
  37273. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37274. (assign, ":comment", "str_comment_you_were_defeated_allied"),
  37275. (assign, ":relevance", 65),
  37276. (try_end),
  37277. #Post 0907 changes end
  37278.  
  37279. #Post 0907 changes begin
  37280. (else_try),
  37281. (eq, ":entry_type", logent_player_retreated_from_lord),
  37282. (troop_slot_eq, "$g_talk_troop", slot_troop_present_at_event, ":log_entry_no"),
  37283. (try_begin),
  37284. (lt, "$g_talk_troop_relation", -5),
  37285. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37286. (eq, ":reputation", lrep_debauched),
  37287. (assign, ":comment", "str_comment_you_abandoned_us_unfriendly_spiteful"),
  37288. (assign, ":relevance", 150),
  37289. (assign, ":suggested_relation_change", -5),
  37290. (else_try),
  37291. (lt, "$g_talk_troop_relation", -5),
  37292. (eq, ":reputation", lrep_selfrighteous),
  37293. (assign, ":comment", "str_comment_you_abandoned_us_unfriendly_pitiless"),
  37294. (assign, ":relevance", 150),
  37295. (assign, ":suggested_relation_change", -5),
  37296. (else_try),
  37297. (lt, "$g_talk_troop_relation", -5),
  37298. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37299. (eq, ":reputation", lrep_debauched),
  37300. (assign, ":comment", "str_comment_you_abandoned_us_spiteful"),
  37301. (assign, ":suggested_relation_change", -5),
  37302. (else_try),
  37303. (eq, ":reputation", lrep_martial),
  37304. (assign, ":comment", "str_comment_you_abandoned_us_chivalrous"),
  37305. (assign, ":relevance", 150),
  37306. (assign, ":suggested_relation_change", -2),
  37307. (else_try),
  37308. (this_or_next|eq, ":reputation", lrep_upstanding),
  37309. (eq, ":reputation", lrep_goodnatured),
  37310. (assign, ":comment", "str_comment_you_abandoned_us_benefitofdoubt"),
  37311. (assign, ":relevance", 150),
  37312. (assign, ":suggested_relation_change", -1),
  37313. (else_try),
  37314. (assign, ":comment", "str_comment_you_abandoned_us_default"),
  37315. (assign, ":relevance", 150),
  37316. (assign, ":suggested_relation_change", -2),
  37317. (try_end),
  37318.  
  37319.  
  37320. #Post 0907 changes end
  37321.  
  37322. (else_try),
  37323. (this_or_next|eq, ":entry_type", logent_player_retreated_from_lord),
  37324. (eq, ":entry_type", logent_player_retreated_from_lord_cowardly),
  37325.  
  37326. (eq, ":troop_object", "$g_talk_troop"),
  37327. (try_begin),
  37328. (eq, "$cheat_mode", 1),
  37329. (assign, reg7, ":entry_hours_elapsed"),
  37330. (display_message, "@{!}Elapsed hours: {reg7}"),
  37331. (try_end),
  37332. (gt, ":entry_hours_elapsed", 2),
  37333. (try_begin),
  37334. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37335. (eq, ":reputation", lrep_debauched),
  37336. (assign, ":comment", "str_comment_you_ran_from_me_enemy_spiteful"),
  37337. (assign, ":relevance", 25),
  37338. (else_try),
  37339. (eq, ":reputation", lrep_martial),
  37340. (assign, ":comment", "str_comment_you_ran_from_me_enemy_chivalrous"),
  37341. (assign, ":relevance", 25),
  37342. (else_try),
  37343. (this_or_next|eq, ":reputation", lrep_goodnatured),
  37344. (eq, ":reputation", lrep_upstanding),
  37345. (assign, ":comment", "str_comment_you_ran_from_me_enemy_benevolent"),
  37346. (assign, ":relevance", 25),
  37347. (else_try),
  37348. (eq, ":reputation", lrep_cunning),
  37349. (assign, ":comment", "str_comment_you_ran_from_me_enemy_coldblooded"),
  37350. (assign, ":relevance", 25),
  37351. (else_try),
  37352. (assign, ":comment", "str_comment_you_ran_from_me_enemy"),
  37353. (assign, ":relevance", 25),
  37354. (try_end),
  37355.  
  37356. (else_try),
  37357. (eq, ":entry_type", logent_player_retreated_from_lord_cowardly),
  37358. (try_begin),
  37359. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37360. (neq, ":troop_object", "$g_talk_troop"),
  37361. (lt, "$g_talk_troop_relation", 5),
  37362. (eq, ":reputation", lrep_martial),
  37363. (assign, ":comment", "str_comment_you_ran_from_foe_allied_chivalrous"),
  37364. (assign, ":relevance", 80),
  37365. (assign, ":suggested_relation_change", -3),
  37366. (else_try),
  37367. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37368. (neq, ":troop_object", "$g_talk_troop"),
  37369. (eq, ":reputation", lrep_upstanding),
  37370. (assign, ":comment", "str_comment_you_ran_from_foe_allied_upstanding"),
  37371. (assign, ":relevance", 80),
  37372. (assign, ":suggested_relation_change", -1),
  37373. (else_try),
  37374. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37375. (neq, ":troop_object", "$g_talk_troop"),
  37376. (lt, "$g_talk_troop_relation", 5),
  37377. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37378. (eq, ":reputation", lrep_debauched),
  37379. (assign, ":comment", "str_comment_you_ran_from_foe_allied_spiteful"),
  37380. (assign, ":relevance", 80),
  37381. (try_end),
  37382.  
  37383. (else_try),
  37384. (eq, ":entry_type", logent_lord_defeated_but_let_go_by_player),
  37385. (try_begin),
  37386. (eq, ":troop_object", "$g_talk_troop"),
  37387. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37388. (eq, ":reputation", lrep_debauched),
  37389. (assign, ":comment", "str_comment_you_let_me_go_spiteful"),
  37390. (assign, ":relevance", 300),
  37391. (assign, ":suggested_relation_change", -15),
  37392. (else_try),
  37393. (eq, ":troop_object", "$g_talk_troop"),
  37394. (ge, "$g_talk_troop_faction_relation", 0),
  37395. (assign, ":comment", "str_comment_you_let_me_go_default"),
  37396. (assign, ":relevance", 300),
  37397. (assign, ":suggested_relation_change", 2),
  37398. (else_try),
  37399. (eq, ":troop_object", "$g_talk_troop"),
  37400. (lt, "$g_talk_troop_faction_relation", 0),
  37401. (this_or_next|eq, ":reputation", lrep_martial),
  37402. (eq, ":reputation", lrep_upstanding),
  37403. (assign, ":suggested_relation_change", 5),
  37404. (assign, ":relevance", 300),
  37405. (assign, ":comment", "str_comment_you_let_me_go_enemy_chivalrous"),
  37406. (else_try),
  37407. (eq, ":troop_object", "$g_talk_troop"),
  37408. (lt, "$g_talk_troop_faction_relation", 0),
  37409. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37410. (eq, ":reputation", lrep_cunning),
  37411. (assign, ":relevance", 300),
  37412. (assign, ":comment", "str_comment_you_let_me_go_enemy_coldblooded"),
  37413. (else_try),
  37414. (eq, ":troop_object", "$g_talk_troop"),
  37415. (lt, "$g_talk_troop_faction_relation", 0),
  37416. (assign, ":relevance", 300),
  37417. (assign, ":comment", "str_comment_you_let_me_go_enemy"),
  37418. (assign, ":suggested_relation_change", 1),
  37419. (else_try),
  37420. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37421. (lt, ":players_kingdom_relation", 0),
  37422. (neq, ":troop_object", "$g_talk_troop"),
  37423. (this_or_next|eq, ":reputation", lrep_martial),
  37424. (eq, ":reputation", lrep_goodnatured),
  37425. (assign, ":comment", "str_comment_you_let_go_a_lord_allied_chivalrous"),
  37426. (assign, ":relevance", 80),
  37427. (else_try),
  37428. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37429. (lt, ":players_kingdom_relation", 0),
  37430. (neq, ":troop_object", "$g_talk_troop"),
  37431. (eq, ":reputation", lrep_upstanding),
  37432. (assign, ":comment", "str_comment_you_let_go_a_lord_allied_upstanding"),
  37433. (assign, ":relevance", 80),
  37434. (else_try),
  37435. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37436. (lt, ":players_kingdom_relation", 0),
  37437. (neq, ":troop_object", "$g_talk_troop"),
  37438. (this_or_next|eq, ":reputation", lrep_cunning),
  37439. (eq, ":reputation", lrep_selfrighteous),
  37440. (assign, ":comment", "str_comment_you_let_go_a_lord_allied_coldblooded"),
  37441. (assign, ":relevance", 80),
  37442. (else_try),
  37443. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37444. (lt, ":players_kingdom_relation", 0),
  37445. (neq, ":troop_object", "$g_talk_troop"),
  37446. (lt, "$g_talk_troop_relation", -5),
  37447. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37448. (eq, ":reputation", lrep_debauched),
  37449. (assign, ":comment", "str_comment_you_let_go_a_lord_allied_unfriendly_spiteful"),
  37450. (assign, ":relevance", 80),
  37451. (else_try),
  37452. (eq, "$players_kingdom", "$g_talk_troop_faction"),
  37453. (lt, ":players_kingdom_relation", 0),
  37454. (neq, ":troop_object", "$g_talk_troop"),
  37455. (assign, ":comment", "str_comment_you_let_go_a_lord_allied"),
  37456. (assign, ":relevance", 80),
  37457. (try_end),
  37458.  
  37459. #Internal faction relations
  37460.  
  37461. (else_try),
  37462. (eq, ":entry_type", logent_pledged_allegiance),
  37463. (eq, ":actor", "trp_player"),
  37464. (try_begin),
  37465. (eq, ":faction_object", "$g_talk_troop_faction"),
  37466. (neq, ":troop_object", "$g_talk_troop"),
  37467. (eq, ":faction_object", "$players_kingdom"), #Ie, no switch of kingdoms
  37468. (assign, ":relevance", 200),
  37469. (try_begin),
  37470. (lt, "$g_talk_troop_relation", -5),
  37471. (eq, ":reputation", lrep_martial),
  37472. (assign, ":comment", "str_comment_pledged_allegiance_allied_martial_unfriendly"),
  37473. (else_try),
  37474. (eq, ":reputation", lrep_martial),
  37475. (assign, ":comment", "str_comment_pledged_allegiance_allied_martial"),
  37476. (else_try),
  37477. (lt, "$g_talk_troop_relation", -5),
  37478. (eq, ":reputation", lrep_quarrelsome),
  37479. (assign, ":comment", "str_comment_pledged_allegiance_allied_quarrelsome_unfriendly"),
  37480. (else_try),
  37481. (eq, ":reputation", lrep_quarrelsome),
  37482. (assign, ":comment", "str_comment_pledged_allegiance_allied_quarrelsome"),
  37483. (else_try),
  37484. (lt, "$g_talk_troop_relation", -5),
  37485. (eq, ":reputation", lrep_selfrighteous),
  37486. (assign, ":comment", "str_comment_pledged_allegiance_allied_selfrighteous_unfriendly"),
  37487. (else_try),
  37488. (eq, ":reputation", lrep_selfrighteous),
  37489. (assign, ":comment", "str_comment_pledged_allegiance_allied_selfrighteous"),
  37490. (else_try),
  37491. (lt, "$g_talk_troop_relation", -5),
  37492. (eq, ":reputation", lrep_cunning),
  37493. (assign, ":comment", "str_comment_pledged_allegiance_allied_cunning_unfriendly"),
  37494. (else_try),
  37495. (eq, ":reputation", lrep_cunning),
  37496. (assign, ":comment", "str_comment_pledged_allegiance_allied_cunning"),
  37497. (else_try),
  37498. (lt, "$g_talk_troop_relation", -5),
  37499. (eq, ":reputation", lrep_debauched),
  37500. (assign, ":comment", "str_comment_pledged_allegiance_allied_debauched_unfriendly"),
  37501. (else_try),
  37502. (eq, ":reputation", lrep_debauched),
  37503. (assign, ":comment", "str_comment_pledged_allegiance_allied_debauched"),
  37504. (else_try),
  37505. (lt, "$g_talk_troop_relation", -5),
  37506. (eq, ":reputation", lrep_goodnatured),
  37507. (assign, ":comment", "str_comment_pledged_allegiance_allied_goodnatured_unfriendly"),
  37508. (else_try),
  37509. (eq, ":reputation", lrep_goodnatured),
  37510. (assign, ":comment", "str_comment_pledged_allegiance_allied_goodnatured"),
  37511. (else_try),
  37512. (lt, "$g_talk_troop_relation", -5),
  37513. (eq, ":reputation", lrep_upstanding),
  37514. (assign, ":comment", "str_comment_pledged_allegiance_allied_upstanding_unfriendly"),
  37515. (else_try),
  37516. (eq, ":reputation", lrep_upstanding),
  37517. (assign, ":comment", "str_comment_pledged_allegiance_allied_upstanding"),
  37518. (try_end),
  37519. (try_end),
  37520.  
  37521.  
  37522. (else_try),
  37523. (eq, ":entry_type", logent_liege_grants_fief_to_vassal),
  37524. (eq, ":troop_object", "trp_player"),
  37525. (try_begin),
  37526. (eq, ":faction_object", "$g_talk_troop_faction"),
  37527. (neq, ":actor", "$g_talk_troop"),
  37528. (eq, ":faction_object", "$players_kingdom"),
  37529. (assign, ":relevance", 110),
  37530. (try_begin),
  37531. (gt, "$g_talk_troop_relation", 5),
  37532. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37533. (eq, ":reputation", lrep_debauched),
  37534. (assign, ":comment", "str_comment_our_king_granted_you_a_fief_allied_friendly_cruel"),
  37535. (else_try),
  37536. (gt, "$g_talk_troop_relation", 5),
  37537. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37538. (eq, ":reputation", lrep_cunning),
  37539. (assign, ":comment", "str_comment_our_king_granted_you_a_fief_allied_friendly_cynical"),
  37540. (else_try),
  37541. (gt, "$g_talk_troop_relation", 5),
  37542. (assign, ":comment", "str_comment_our_king_granted_you_a_fief_allied_friendly"),
  37543. (else_try),
  37544. (is_between, "$g_talk_troop_relation", -5, 5),
  37545. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37546. (eq, ":reputation", lrep_debauched),
  37547. (assign, ":comment", "str_comment_our_king_granted_you_a_fief_allied_spiteful"),
  37548. (assign, ":suggested_relation_change", -2),
  37549. (else_try),
  37550. (lt, "$g_talk_troop_relation", -5),
  37551. (eq, ":reputation", lrep_upstanding),
  37552. (assign, ":comment", "str_comment_our_king_granted_you_a_fief_allied_unfriendly_upstanding"),
  37553. (else_try),
  37554. (lt, "$g_talk_troop_relation", -5),
  37555. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37556. (eq, ":reputation", lrep_debauched),
  37557. (assign, ":comment", "str_comment_our_king_granted_you_a_fief_allied_unfriendly_spiteful"),
  37558. (else_try),
  37559. (assign, ":comment", "str_comment_our_king_granted_you_a_fief_allied"),
  37560. (try_end),
  37561. (try_end),
  37562.  
  37563. (else_try),
  37564. (eq, ":entry_type", logent_renounced_allegiance),
  37565. (eq, ":actor", "trp_player"),
  37566. (try_begin),
  37567. (eq, ":faction_object", "$g_talk_troop_faction"),
  37568. (neq, ":troop_object", "$g_talk_troop"),
  37569. (try_begin),
  37570. (ge, "$g_talk_troop_faction_relation", 0),
  37571. (neq, "$g_talk_troop_faction", "$players_kingdom"),
  37572. (assign, ":relevance", 180),
  37573. (try_begin),
  37574. (gt, "$g_talk_troop_relation", 5),
  37575. (assign, ":comment", "str_comment_you_renounced_your_alliegance_friendly"),
  37576. (else_try),
  37577. (ge, "$g_talk_troop_relation", 0),
  37578. (eq, ":reputation", lrep_goodnatured),
  37579. (assign, ":comment", "str_comment_you_renounced_your_alliegance_friendly"),
  37580. (else_try),
  37581. (assign, ":comment", "str_comment_you_renounced_your_alliegance_default"),
  37582. (try_end),
  37583. (else_try),
  37584. (lt, "$g_talk_troop_faction_relation", 0),
  37585. (assign, ":relevance", 300),
  37586. (try_begin),
  37587. (ge, "$g_talk_troop_relation", 0),
  37588. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37589. (eq, ":reputation", lrep_debauched),
  37590. (assign, ":comment", "str_comment_you_renounced_your_alliegance_unfriendly_moralizing"),
  37591. (else_try),
  37592. (gt, "$g_talk_troop_relation", 5),
  37593. (this_or_next|eq, ":reputation", lrep_goodnatured),
  37594. (eq, ":reputation", lrep_upstanding),
  37595. (assign, ":comment", "str_comment_you_renounced_your_alliegance_enemy_friendly"),
  37596. (else_try),
  37597. (gt, "$g_talk_troop_relation", 5),
  37598. (assign, ":comment", "str_comment_you_renounced_your_alliegance_enemy"),
  37599. (else_try),
  37600. (is_between, "$g_talk_troop_relation", -5, 5),
  37601. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37602. (eq, ":reputation", lrep_debauched),
  37603. (assign, ":comment", "str_comment_you_renounced_your_alliegance_unfriendly_spiteful"),
  37604. (assign, ":suggested_relation_change", -2),
  37605. (else_try),
  37606. (lt, "$g_talk_troop_relation", -5),
  37607. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37608. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37609. (eq, ":reputation", lrep_debauched),
  37610. (assign, ":comment", "str_comment_you_renounced_your_alliegance_unfriendly_spiteful"),
  37611. (else_try),
  37612. (assign, ":comment", "str_comment_you_renounced_your_alliegance_default"),
  37613. (try_end),
  37614. (try_end),
  37615. (try_end),
  37616.  
  37617. (else_try),
  37618. (eq, ":entry_type", logent_lady_marries_lord),
  37619. (eq, ":troop_object", "trp_player"),
  37620. (try_begin),
  37621. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37622. (eq, ":reputation", lrep_debauched),
  37623. (lt, "$g_talk_troop_relation", -5),
  37624. (assign, ":relevance", 200),
  37625. (assign, ":comment", "str_comment_marriage_normal_nasty"),
  37626. (else_try),
  37627. (call_script, "script_troop_get_family_relation_to_troop", ":actor", "$g_talk_troop"),
  37628. (ge, reg0, 5),
  37629. (assign, ":comment", "str_comment_marriage_normal_family"),
  37630. (assign, ":relevance", 300),
  37631. (assign, ":suggested_relation_change", reg0),
  37632. (val_div, ":suggested_relation_change", 3),
  37633. (else_try),
  37634. (store_faction_of_troop, ":bride_faction", ":actor"),
  37635. (eq, ":bride_faction", "$g_talk_troop_faction"),
  37636. (assign, ":comment", "str_comment_marriage_normal"),
  37637. (assign, ":relevance", 100),
  37638. (try_end),
  37639. (else_try),
  37640. (eq, ":entry_type", logent_lady_elopes_with_lord),
  37641. (eq, ":troop_object", "trp_player"),
  37642. (try_begin),
  37643. (call_script, "script_troop_get_family_relation_to_troop", ":actor", "$g_talk_troop"),
  37644. (ge, reg0, 5),
  37645. (assign, ":comment", "str_comment_marriage_elopement_family"),
  37646. (assign, ":relevance", 300),
  37647. (store_sub, ":suggested_relation_change", 0, reg0),
  37648. (val_div, ":suggested_relation_change", 3),
  37649. (else_try),
  37650. (store_faction_of_troop, ":bride_faction", ":actor"),
  37651. (eq, ":bride_faction", "$g_talk_troop_faction"),
  37652. (faction_slot_eq, ":bride_faction", slot_faction_leader, "$g_talk_troop"),
  37653. (assign, ":comment", "str_comment_marriage_elopement_liege"),
  37654. (assign, ":relevance", 300),
  37655. (assign, ":suggested_relation_change", -10),
  37656. (try_end),
  37657. (else_try), #this is specific to quarrels with the player
  37658. (eq, ":entry_type", logent_lords_quarrel_over_woman),
  37659. (eq, ":actor", "$g_talk_troop"),
  37660. (eq, ":center_object", "trp_player"),
  37661.  
  37662. (neg|troop_slot_ge, ":troop_object", slot_troop_spouse, "trp_player"),
  37663.  
  37664. (str_store_troop_name, s54, ":troop_object"),
  37665.  
  37666. (try_begin),
  37667. (this_or_next|eq, ":reputation", lrep_selfrighteous),
  37668. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37669. (eq, ":reputation", lrep_debauched),
  37670.  
  37671. (assign, ":comment", "str_comment_i_quarreled_with_you_over_woman_derisive"),
  37672. (assign, ":relevance", 200),
  37673. (assign, ":suggested_relation_change", -20),
  37674. (else_try),
  37675. (assign, ":comment", "str_comment_i_quarreled_with_you_over_woman_default"),
  37676. (assign, ":relevance", 200),
  37677. (assign, ":suggested_relation_change", -20),
  37678. (try_end),
  37679.  
  37680. (else_try),
  37681. (eq, ":entry_type", logent_border_incident_troop_breaks_truce),
  37682. (eq, ":actor", "trp_player"),
  37683. (faction_slot_eq, ":faction_object", slot_faction_leader, "$g_talk_troop"),
  37684. (eq, "$players_kingdom", ":faction_object"),
  37685.  
  37686. (assign, ":suggested_relation_change", -10),
  37687. (assign, ":comment", "str_comment_you_broke_truce_as_my_vassal"),
  37688. (assign, ":relevance", 300),
  37689.  
  37690. (else_try),
  37691. (eq, ":entry_type", logent_border_incident_troop_attacks_neutral),
  37692. (eq, ":actor", "trp_player"),
  37693. (faction_slot_eq, ":faction_object", slot_faction_leader, "$g_talk_troop"),
  37694. (eq, "$players_kingdom", ":faction_object"),
  37695.  
  37696. (assign, ":suggested_relation_change", -3),
  37697. (assign, ":comment", "str_comment_you_attacked_neutral_as_my_vassal"),
  37698. (assign, ":relevance", 200),
  37699.  
  37700. #THE FOLLOWING ARE ALL COMPLAINTS SPOKEN BY LORDS WITHIN CONVERATIONS, RATHER THAN COMMENTS WHEN THE PLAYER FIRST SPEAKS TO A LORD
  37701. (else_try), #these need to have the actor and object strings added because they are used outside of "script_get_relevant_comment_to_s42"
  37702. (eq, ":entry_type", logent_ruler_intervenes_in_quarrel),
  37703. (eq, ":center_object", "$g_talk_troop"), #actor is liege lord, center object is loser lord, troop object is winner lord
  37704. (str_store_troop_name, s50, ":actor"),
  37705. (str_store_troop_name, s51, ":center_object"), #s50 is actor, s51 is center object, s54 is troop object
  37706. (str_store_troop_name, s54, ":troop_object"), #s50 is actor, s51 is center object, s54 is troop object
  37707. (assign, ":comment", "str_comment_lord_intervened_against_me"),
  37708. (assign, ":relevance", -1),
  37709.  
  37710. (else_try),
  37711. (eq, ":entry_type", logent_lord_protests_marshall_appointment),
  37712. (eq, ":actor", "$g_talk_troop"),
  37713.  
  37714. (str_store_troop_name, s51, ":center_object"), #s51 is center object (marshall), s54 is troop object (liege lord),
  37715. (str_store_troop_name, s54, ":troop_object"),
  37716.  
  37717. (assign, ":comment", "str_comment_i_protested_marshall_appointment"),
  37718. (assign, ":relevance", -1),
  37719.  
  37720. (else_try),
  37721. (eq, ":entry_type", logent_lord_blames_defeat),
  37722. (eq, ":actor", "$g_talk_troop"),
  37723.  
  37724. (str_store_troop_name, s51, ":center_object"), #s51 is center object (marshall), s54 is troop object (liege lord),
  37725. (str_store_troop_name, s54, ":troop_object"),
  37726. (str_store_troop_name, s56, ":faction_object"), #faction object is unusual in this circumstance
  37727.  
  37728. (assign, ":comment", "str_comment_i_blamed_defeat"),
  37729. (assign, ":relevance", -1),
  37730.  
  37731. (else_try),
  37732. (eq, ":entry_type", logent_troop_feels_cheated_by_troop_over_land),
  37733. (eq, ":actor", "$g_talk_troop"),
  37734.  
  37735. (str_store_party_name, s51, ":center_object"),
  37736. (str_store_troop_name, s54, ":troop_object"),
  37737. (str_store_troop_name, s56, ":faction_object"), #faction object is unusual in this circumstance
  37738.  
  37739. (assign, ":comment", "str_comment_i_was_entitled_to_fief"),
  37740. (assign, ":relevance", -1),
  37741.  
  37742. (else_try),
  37743. (eq, ":entry_type", logent_lords_quarrel_over_woman),
  37744. (eq, ":actor", "$g_talk_troop"),
  37745.  
  37746. (str_store_troop_name, s51, ":center_object"),
  37747. (str_store_troop_name, s54, ":troop_object"),
  37748.  
  37749. (assign, ":comment", "str_comment_i_quarreled_with_troop_over_woman"),
  37750. (assign, ":relevance", -1),
  37751.  
  37752. (else_try),
  37753. (eq, ":entry_type", logent_lords_quarrel_over_woman),
  37754. (eq, ":center_object", "$g_talk_troop"),
  37755.  
  37756. (str_store_troop_name, s51, ":actor"),
  37757. (str_store_troop_name, s54, ":troop_object"),
  37758.  
  37759. (assign, ":comment", "str_comment_i_quarreled_with_troop_over_woman"),
  37760. (assign, ":relevance", -1),
  37761.  
  37762. (else_try),
  37763. (eq, ":entry_type", logent_player_stole_cattles_from_village),
  37764.  
  37765. (eq, ":actor", "trp_player"),
  37766. (try_begin),
  37767. (eq, ":center_object_lord", "$g_talk_troop"),
  37768. (assign, ":relevance", 200),
  37769. (assign, ":suggested_relation_change", -1),
  37770. (assign, ":comment", "str_comment_you_stole_cattles_from_my_village_default"),
  37771. (try_begin),
  37772. (lt, "$g_talk_troop_faction_relation", -3),
  37773. (this_or_next|eq, ":reputation", lrep_goodnatured),
  37774. (eq, ":reputation", lrep_upstanding),
  37775. (assign, ":comment", "str_comment_you_stole_cattles_from_my_village_enemy_benevolent"),
  37776. (else_try),
  37777. (lt, "$g_talk_troop_faction_relation", -3),
  37778. (this_or_next|eq, ":reputation", lrep_cunning),
  37779. (eq, ":reputation", lrep_selfrighteous),
  37780. (assign, ":comment", "str_comment_you_stole_cattles_from_my_village_enemy_coldblooded"),
  37781. (else_try),
  37782. (lt, "$g_talk_troop_faction_relation", -3),
  37783. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37784. (eq, ":reputation", lrep_debauched),
  37785. (assign, ":comment", "str_comment_you_stole_cattles_from_my_village_enemy_spiteful"),
  37786. (else_try),
  37787. (lt, "$g_talk_troop_faction_relation", -3),
  37788. (assign, ":comment", "str_comment_you_stole_cattles_from_my_village_enemy"),
  37789. (else_try),
  37790. (lt, "$g_talk_troop_relation", -3),
  37791. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  37792. (eq, ":reputation", lrep_debauched),
  37793. (assign, ":comment", "str_comment_you_stole_cattles_from_my_village_unfriendly_spiteful"),
  37794. (else_try),
  37795. (gt, "$g_talk_troop_relation", 6),
  37796. (assign, ":comment", "str_comment_you_stole_cattles_from_my_village_friendly"),
  37797. (try_end),
  37798. (try_end),
  37799.  
  37800. (try_end),
  37801.  
  37802. (assign, reg0, ":comment"),
  37803. (assign, reg1, ":relevance"),
  37804. (assign, reg2, ":suggested_relation_change"),
  37805. (assign, reg3, ":rejoinder"),
  37806. ]),
  37807.  
  37808. # script_get_relevant_comment_to_s42
  37809. # Input: none
  37810. # Output: reg0 = 1 if comment found, 0 otherwise; s61 will contain comment string if found
  37811. ("get_relevant_comment_to_s42",
  37812. [
  37813.  
  37814. (troop_get_slot, ":reputation", "$g_talk_troop", slot_lord_reputation_type),
  37815. (try_begin),
  37816. (eq, "$cheat_mode", 1),
  37817. (store_add, ":rep_string", ":reputation", "str_personality_archetypes"),
  37818. (str_store_string, s15, ":rep_string"),
  37819. (display_message, "@{!}Reputation type: {s15}"),
  37820. (try_end),
  37821.  
  37822.  
  37823. (assign, ":highest_score_so_far", 50),
  37824. (assign, ":best_comment_so_far", -1),
  37825. (assign, ":rejoinder_to_best_comment_so_far", -1),
  37826. (assign, ":comment_found", 0),
  37827. (assign, ":best_log_entry", -1),
  37828. (assign, ":comment_relation_change", 0),
  37829. (store_current_hours, ":current_time"),
  37830.  
  37831. #prevents multiple comments in conversations in same hour
  37832.  
  37833. # (troop_get_slot, ":talk_troop_last_comment_time", "$g_talk_troop", slot_troop_last_comment_time),
  37834. #"$num_log_entries should also be set to one, not zero. This is included in the initialize npcs script, although could be moved to game_start
  37835. (troop_get_slot, ":talk_troop_last_comment_slot", "$g_talk_troop", slot_troop_last_comment_slot),
  37836. (troop_set_slot, "$g_talk_troop", slot_troop_last_comment_slot, "$num_log_entries"),
  37837.  
  37838. (store_add, ":log_entries_plus_one", "$num_log_entries", 1),
  37839. (try_for_range, ":log_entry_no", 1, ":log_entries_plus_one"),
  37840. # It should be log entries plus one, so that the try_ sequence does not stop short of the last log entry
  37841. # $Num_log_entries is now the number of the last log entry, which begins at "1" rather than "0"
  37842. # This is so that (le, ":log_entry_no", ":talk_troop_last_comment_slot") works properly
  37843.  
  37844. (troop_get_slot, ":entry_time", "trp_log_array_entry_time", ":log_entry_no"),
  37845. # (val_max, ":entry_time", 1), #This is needed for pre-game events to be commented upon, if hours are used rather than the order of events
  37846. (store_sub, ":entry_hours_elapsed", ":current_time", ":entry_time"),
  37847. (try_begin),
  37848. (le, ":log_entry_no", ":talk_troop_last_comment_slot"),
  37849. # (le, ":entry_time", ":talk_troop_last_comment_time"),
  37850. (try_begin),
  37851. (eq, ":log_entry_no", ":talk_troop_last_comment_slot"),
  37852. (eq, "$cheat_mode", 1),
  37853. (assign, reg5, ":log_entry_no"),
  37854. (display_message, "@{!}Entries up to #{reg5} skipped"),
  37855. (try_end),
  37856. # I suggest using the log entry number as opposed to time so that events in the same hour can be commented upon
  37857. # This feels more natural, for example, if there are other lords in the court when the player pledges allegiance
  37858. (else_try),
  37859. # (le, ":entry_hours_elapsed", 3), #don't comment on really fresh events
  37860. # (else_try),
  37861. (call_script, "script_get_relevant_comment_for_log_entry", ":log_entry_no"),
  37862. (gt, reg1, 10),
  37863. (assign, ":score", reg1),
  37864. (assign, ":comment", reg0),
  37865. #reg2 is what
  37866. (assign, ":rejoinder", reg3),
  37867.  
  37868. (store_random_in_range, ":rand", 70, 140),
  37869. (val_mul, ":score", ":rand"),
  37870. (store_add, ":entry_time_score", ":entry_hours_elapsed", 500), #approx. one month
  37871. (val_mul, ":score", 1000),
  37872. (val_div, ":score", ":entry_time_score"), ###Relevance decreases over time - halved after one month, one-third after two, etc
  37873. (try_begin),
  37874. (gt, ":score", ":highest_score_so_far"),
  37875. (assign, ":highest_score_so_far", ":score"),
  37876. (assign, ":best_comment_so_far", ":comment"),
  37877. (assign, ":rejoinder_to_best_comment_so_far", ":rejoinder"),
  37878. (assign, ":best_log_entry", ":log_entry_no"),
  37879. (assign, ":comment_relation_change", reg2),
  37880. (try_end),
  37881. (try_end),
  37882. (try_end),
  37883.  
  37884. (try_begin),
  37885. (gt, ":best_comment_so_far", 0),
  37886. (assign, ":comment_found", 1), #comment found print it to s61 now.
  37887. (troop_get_slot, ":actor", "trp_log_array_actor", ":best_log_entry"),
  37888. (troop_get_slot, ":center_object", "trp_log_array_center_object", ":best_log_entry"),
  37889. (troop_get_slot, ":center_object_lord", "trp_log_array_center_object_lord", ":best_log_entry"),
  37890. (troop_get_slot, ":center_object_faction", "trp_log_array_center_object_faction", ":best_log_entry"),
  37891. (troop_get_slot, ":troop_object", "trp_log_array_troop_object", ":best_log_entry"),
  37892. (troop_get_slot, ":troop_object_faction", "trp_log_array_troop_object_faction", ":best_log_entry"),
  37893. (troop_get_slot, ":faction_object", "trp_log_array_faction_object", ":best_log_entry"),
  37894. (try_begin),
  37895. (ge, ":actor", 0),
  37896. (str_store_troop_name, s50, ":actor"),
  37897. (try_end),
  37898. (try_begin),
  37899. (ge, ":center_object", 0),
  37900. (str_store_party_name, s51, ":center_object"),
  37901. (try_end),
  37902. (try_begin),
  37903. (ge, ":center_object_lord", 0),
  37904. (str_store_troop_name, s52, ":center_object_lord"),
  37905. (try_end),
  37906. (try_begin),
  37907. (ge, ":center_object_faction", 0),
  37908. (str_store_faction_name, s53, ":center_object_faction"),
  37909. (try_end),
  37910. (try_begin),
  37911. (ge, ":troop_object", 0),
  37912. (str_store_troop_name, s54, ":troop_object"),
  37913. (try_end),
  37914. (try_begin),
  37915. (is_between, ":troop_object_faction", kingdoms_begin, kingdoms_end),
  37916. (str_store_faction_name, s55, ":troop_object_faction"),
  37917. (str_store_string, s55, "str_the_s55"),
  37918. (else_try),
  37919. (is_between, ":troop_object", bandits_begin, bandits_end),
  37920. (str_store_string, s55, "str_bandits"),
  37921. (else_try),
  37922. (eq, ":troop_object_faction", "fac_deserters"),
  37923. (str_store_string, s55, "str_deserters"),
  37924. (else_try),
  37925. (str_store_string, s55, "str_travellers_on_the_road"),
  37926. (else_try),
  37927.  
  37928. (try_end),
  37929.  
  37930. (try_begin),
  37931. (ge, ":faction_object", 0),
  37932. (str_store_faction_name, s56, ":faction_object"),
  37933. (try_end),
  37934. (assign, "$g_last_comment_copied_to_s42", ":best_comment_so_far"), #maybe deprecate
  37935. (assign, "$g_rejoinder_to_last_comment", ":rejoinder_to_best_comment_so_far"),
  37936.  
  37937. (str_store_string, s42, ":best_comment_so_far"),
  37938. (try_end),
  37939.  
  37940. (assign, reg0, ":comment_found"),
  37941.  
  37942. (assign, "$log_comment_relation_change", ":comment_relation_change"),
  37943. ]),
  37944.  
  37945. #
  37946. ("merchant_road_info_to_s42", #also does itemss to s32
  37947. [
  37948. (store_script_param, ":center", 1),
  37949.  
  37950. (assign, ":last_bandit_party_found", -1),
  37951. (assign, ":last_bandit_party_origin", -1),
  37952. (assign, ":last_bandit_party_destination", -1),
  37953. (assign, ":last_bandit_party_hours_ago", -1),
  37954.  
  37955. (str_clear, s32),
  37956.  
  37957. (str_clear, s42),
  37958. (str_clear, s47), #safe roads
  37959.  
  37960. (try_for_range, ":center_to_reset", centers_begin, centers_end),
  37961. (party_set_slot, ":center_to_reset", slot_party_temp_slot_1, 0),
  37962. (try_end),
  37963.  
  37964. (assign, ":road_attacks", 0),
  37965. (assign, ":trades", 0),
  37966.  
  37967. #first mention all attacks
  37968. (try_for_range, ":log_entry_iterator", 0, "$num_log_entries"),
  37969. (store_sub, ":log_entry_no", "$num_log_entries", ":log_entry_iterator"),
  37970. #how long ago?
  37971. (this_or_next|troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_traveller_attacked),
  37972. (troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_party_traded),
  37973.  
  37974. # reference - (call_script, "script_add_log_entry", logent_traveller_attacked, ":winner_party" (actor), ":origin" (center object), ":destination" (troop_object), ":winner_faction"),
  37975.  
  37976. (troop_get_slot, ":origin", "trp_log_array_center_object", ":log_entry_no"),
  37977. (troop_get_slot, ":destination", "trp_log_array_troop_object", ":log_entry_no"),
  37978.  
  37979. (this_or_next|eq, ":origin", ":center"),
  37980. (eq, ":destination", ":center"),
  37981.  
  37982.  
  37983. (troop_get_slot, ":event_time", "trp_log_array_entry_time", ":log_entry_no"),
  37984. (store_current_hours, ":cur_hour"),
  37985. (store_sub, ":hours_ago", ":cur_hour", ":event_time"),
  37986. (assign, reg3, ":hours_ago"),
  37987.  
  37988. (lt, ":hours_ago", 672), #four weeks
  37989.  
  37990. (try_begin),
  37991. (eq, "$cheat_mode", 1),
  37992. (troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_traveller_attacked),
  37993. (display_message, "str_attack_on_travellers_found_reg3_hours_ago"),
  37994. (else_try),
  37995. (eq, "$cheat_mode", 1),
  37996. (troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_party_traded),
  37997. (display_message, "str_trade_event_found_reg3_hours_ago"),
  37998. (try_end),
  37999.  
  38000. (try_begin), #possibly make script -- get_colloquial_for_time
  38001. (lt, ":hours_ago", 24),
  38002. (str_store_string, s46, "str_a_short_while_ago"),
  38003. (else_try),
  38004. (lt, ":hours_ago", 48),
  38005. (str_store_string, s46, "str_one_day_ago"),
  38006. (else_try),
  38007. (lt, ":hours_ago", 72),
  38008. (str_store_string, s46, "@two days ago"),
  38009. (else_try),
  38010. (lt, ":hours_ago", 154),
  38011. (str_store_string, s46, "str_earlier_this_week"),
  38012. (else_try),
  38013. (lt, ":hours_ago", 240),
  38014. (str_store_string, s46, "str_about_a_week_ago"),
  38015. (else_try),
  38016. (lt, ":hours_ago", 480),
  38017. (str_store_string, s46, "str_about_two_weeks_ago"),
  38018. (else_try),
  38019. (str_store_string, s46, "str_several_weeks_ago"),
  38020. (try_end),
  38021.  
  38022.  
  38023.  
  38024. (troop_get_slot, ":actor", "trp_log_array_actor", ":log_entry_no"),
  38025. (troop_get_slot, ":faction_object", "trp_log_array_faction_object", ":log_entry_no"),
  38026.  
  38027. (str_store_string, s39, "str_unknown_assailants"),
  38028. (assign, ":assailants_known", -1),
  38029. (try_begin),
  38030. (party_is_active, ":actor"),
  38031. (store_faction_of_party, ":actor_faction", ":actor"),
  38032. (eq, ":faction_object", ":actor_faction"),
  38033. (assign, ":assailants_known", ":actor"),
  38034. (str_store_party_name, s39, ":assailants_known"),
  38035. (assign, "$g_bandit_party_for_bounty", -1),
  38036. (try_begin), #possibly make script -- get_colloquial_for_faction
  38037. (eq, ":faction_object", "fac_kingdom_1"),
  38038. (str_store_string, s39, "str_swadians"),
  38039. (else_try),
  38040. (eq, ":faction_object", "fac_kingdom_2"),
  38041. (str_store_string, s39, "str_vaegirs"),
  38042. (else_try),
  38043. (eq, ":faction_object", "fac_kingdom_3"),
  38044. (str_store_string, s39, "str_khergits"),
  38045. (else_try),
  38046. (eq, ":faction_object", "fac_kingdom_4"),
  38047. (str_store_string, s39, "str_nords"),
  38048. (else_try),
  38049. (eq, ":faction_object", "fac_kingdom_5"),
  38050. (str_store_string, s39, "str_rhodoks"),
  38051. (else_try),
  38052. (eq, ":faction_object", "fac_kingdom_6"),
  38053. (str_store_string, s39, "str_sarranids"),
  38054. (else_try),
  38055. (eq, ":faction_object", "fac_player_supporters_faction"),
  38056. (str_store_string, s39, "str_your_followers"),
  38057. (else_try), #bandits
  38058. (assign, ":last_bandit_party_found", ":assailants_known"),
  38059. (assign, ":last_bandit_party_origin", ":origin"),
  38060. (assign, ":last_bandit_party_destination", ":destination"),
  38061. (assign, ":last_bandit_party_hours_ago", ":hours_ago"),
  38062. (try_end),
  38063. (try_end),
  38064.  
  38065. (try_begin),
  38066. (eq, ":origin", ":center"),
  38067. (troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_traveller_attacked),
  38068. (party_slot_eq, ":destination", slot_party_temp_slot_1, 0),
  38069.  
  38070. (party_set_slot, ":destination", slot_party_temp_slot_1, 1),
  38071. (str_store_party_name, s40, ":destination"),
  38072. (str_store_string, s44, "str_we_have_heard_that_travellers_heading_to_s40_were_attacked_on_the_road_s46_by_s39"),
  38073. (str_store_string, s43, "str_s42"),
  38074. (str_store_string, s42, "str_s43_s44"),
  38075.  
  38076. (val_add, ":road_attacks", 1),
  38077. #travellers were attacked on the road to...
  38078. (else_try),
  38079. (eq, ":destination", ":center"),
  38080. (troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_traveller_attacked),
  38081. (party_slot_eq, ":origin", slot_party_temp_slot_1, 0),
  38082.  
  38083. (party_set_slot, ":origin", slot_party_temp_slot_1, 1),
  38084. (str_store_party_name, s40, ":origin"),
  38085. (str_store_string, s44, "str_we_have_heard_that_travellers_coming_from_s40_were_attacked_on_the_road_s46_by_s39"),
  38086.  
  38087. (str_store_string, s43, "str_s42"),
  38088. (str_store_string, s42, "str_s43_s44"),
  38089.  
  38090. (val_add, ":road_attacks", 1),
  38091.  
  38092. #travellers from here traded at...
  38093. # (else_try),
  38094. # (eq, ":origin", ":center"),
  38095. # (troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_party_traded),
  38096. # (party_slot_eq, ":destination", slot_party_temp_slot_1, 0),
  38097.  
  38098. # (party_set_slot, ":destination", slot_party_temp_slot_1, 1),
  38099. # (str_store_party_name, s40, ":destination"),
  38100. # (str_store_string, s44, "@Travellers headed to {s40} traded there {s46}"),
  38101. # (str_store_string, s43, "@{s42"),
  38102. # (str_store_string, s42, "str_s43_s44"),
  38103.  
  38104. #caravan from traded at...
  38105. (else_try),
  38106. (eq, ":destination", ":center"),
  38107. (troop_slot_eq, "trp_log_array_entry_type", ":log_entry_no", logent_party_traded),
  38108. (party_slot_eq, ":origin", slot_party_temp_slot_1, 0),
  38109.  
  38110. (party_set_slot, ":origin", slot_party_temp_slot_1, 1),
  38111. (str_store_party_name, s40, ":origin"),
  38112. (str_store_string, s44, "str_travellers_coming_from_s40_traded_here_s46"),
  38113. (str_store_string, s43, "str_s42"),
  38114. (str_store_string, s42, "str_s43_s44"),
  38115.  
  38116. (val_add, ":trades", 1),
  38117.  
  38118. #caravan from traded at...
  38119. (try_end),
  38120.  
  38121. (try_end),
  38122.  
  38123.  
  38124. (try_begin),
  38125. (le, ":trades", 2),
  38126. (eq, ":road_attacks", 0),
  38127. (store_current_hours, ":hours"),
  38128. (lt, ":hours", 168),
  38129. (str_store_string, s42, "str_it_is_still_early_in_the_caravan_season_so_we_have_seen_little_tradings42"),
  38130. (else_try),
  38131. (eq, ":trades", 0),
  38132. (eq, ":road_attacks", 0),
  38133. (str_store_string, s42, "str_there_has_been_very_little_trading_activity_here_recentlys42"),
  38134. (else_try),
  38135. (le, ":trades", 2),
  38136. (eq, ":road_attacks", 0),
  38137. (str_store_string, s42, "str_there_has_some_trading_activity_here_recently_but_not_enoughs42"),
  38138. (else_try),
  38139. (le, ":trades", 2),
  38140. (le, ":road_attacks", 2),
  38141. (str_store_string, s42, "str_there_has_some_trading_activity_here_recently_but_the_roads_are_dangerouss42"),
  38142. (else_try),
  38143. (ge, ":road_attacks", 3),
  38144. (str_store_string, s42, "str_the_roads_around_here_are_very_dangerouss42"),
  38145. (else_try),
  38146. (ge, ":road_attacks", 1),
  38147. (str_store_string, s42, "str_we_have_received_many_traders_in_town_here_although_there_is_some_danger_on_the_roadss42"),
  38148. (else_try),
  38149. (str_store_string, s42, "str_we_have_received_many_traders_in_town_heres42"),
  38150. (try_end),
  38151.  
  38152. #do safe roads
  38153. (assign, ":unused_trade_route_found", 0),
  38154. (try_for_range, ":trade_route_slot", slot_town_trade_routes_begin, slot_town_trade_routes_end),
  38155. (party_get_slot, ":trade_center", ":center", ":trade_route_slot"),
  38156. (is_between, ":trade_center", centers_begin, centers_end),
  38157.  
  38158. (party_slot_eq, ":trade_center", slot_party_temp_slot_1, 0),
  38159.  
  38160. # (party_get_slot, ":town_lord", ":trade_center", slot_town_lord),
  38161.  
  38162. (str_store_party_name, s41, ":trade_center"),
  38163. (try_begin),
  38164. (eq, ":unused_trade_route_found", 1),
  38165. (str_store_string, s44, "str_s44_s41"),
  38166. (else_try),
  38167. (str_store_string, s44, "str_s41"),
  38168. (try_end),
  38169. (assign, ":unused_trade_route_found", 1),
  38170. (try_end),
  38171. (try_begin),
  38172. (eq, ":unused_trade_route_found", 1),
  38173. (str_store_string, s47, "str_there_is_little_news_about_the_caravan_routes_to_the_towns_of_s44_and_nearby_parts_but_no_news_is_good_news_and_those_are_therefore_considered_safe"),
  38174. (try_end),
  38175.  
  38176. (assign, ":safe_village_road_found", 0),
  38177. (try_for_range, ":village", villages_begin, villages_end),
  38178. (party_slot_eq, ":village", slot_village_market_town, ":center"),
  38179. (party_slot_eq, ":village", slot_party_temp_slot_1, 0),
  38180.  
  38181. # (party_get_slot, ":town_lord", ":village", slot_town_lord),
  38182. (str_store_party_name, s41, ":village"),
  38183. (try_begin),
  38184. (eq, ":safe_village_road_found", 1),
  38185. (str_store_string, s44, "str_s44_s41"),
  38186. (else_try),
  38187. (str_store_string, s44, "str_s41"),
  38188. (try_end),
  38189. (assign, ":safe_village_road_found", 1),
  38190. (try_end),
  38191.  
  38192. (try_begin),
  38193. (eq, ":safe_village_road_found", 1),
  38194. (eq, ":unused_trade_route_found", 1),
  38195. (str_store_string, s47, "str_s47_also_the_roads_to_the_villages_of_s44_and_other_outlying_hamlets_are_considered_safe"),
  38196. (else_try),
  38197. (eq, ":safe_village_road_found", 1),
  38198. (str_store_string, s47, "str_however_the_roads_to_the_villages_of_s44_and_other_outlying_hamlets_are_considered_safe"),
  38199. (try_end),
  38200.  
  38201. (str_store_string, s33, "str_we_have_shortages_of"),
  38202. (assign, ":some_shortages_found", 0),
  38203. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  38204. (store_sub, ":cur_good_price_slot", ":cur_good", trade_goods_begin),
  38205. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  38206. (party_get_slot, ":price", ":center", ":cur_good_price_slot"),
  38207. (gt, ":price", 1100),
  38208.  
  38209. (str_store_item_name, s34, ":cur_good"),
  38210. (assign, reg1, ":price"),
  38211. (str_store_string, s33, "str_s33_s34_reg1"),
  38212.  
  38213. (assign, ":some_shortages_found", 1),
  38214. (try_end),
  38215.  
  38216. (try_begin),
  38217. (eq, ":some_shortages_found", 0),
  38218. (str_store_string, s32, "str_we_have_adequate_stores_of_all_commodities"),
  38219. (else_try),
  38220. (str_store_string, s32, "str_s33_and_some_other_commodities"),
  38221. (try_end),
  38222.  
  38223. (assign, reg0, ":last_bandit_party_found"),
  38224. (assign, reg1, ":last_bandit_party_origin"),
  38225. (assign, reg2, ":last_bandit_party_destination"),
  38226. (assign, reg3, ":last_bandit_party_hours_ago"),
  38227.  
  38228.  
  38229. ]
  38230. ),
  38231.  
  38232. ("get_manhunt_information_to_s15",
  38233. [
  38234. (store_script_param, ":quest", 1),
  38235.  
  38236. (str_store_string, s15, "str_the_roads_are_full_of_brigands_friend_but_that_name_in_particular_does_not_sound_familiar_good_hunting_to_you_nonetheless"),
  38237. (quest_get_slot, ":quarry", ":quest", slot_quest_target_party),
  38238. (try_begin),
  38239. (is_between, "$g_talk_troop", active_npcs_begin, active_npcs_end),
  38240. (troop_get_slot, ":talk_party", "$g_talk_troop", slot_troop_leaded_party),
  38241. (else_try),
  38242. (gt, "$g_encountered_party", "p_spawn_points_end"),
  38243. (assign, ":talk_party", "$g_encountered_party"),
  38244. (else_try),
  38245. (assign, ":talk_party", -1),
  38246. (try_end),
  38247.  
  38248. (try_for_range, ":log_entry", 0, "$num_log_entries"),
  38249. (gt, ":talk_party", -1),
  38250. (troop_get_slot, ":party", "trp_log_array_actor", ":log_entry"),
  38251. (eq, ":party", ":talk_party"),
  38252. (troop_get_slot, ":bandit_party", "trp_log_array_troop_object", ":log_entry"),
  38253. (eq, ":bandit_party", ":quarry"),
  38254. (store_current_hours, ":hours_ago"),
  38255. (troop_get_slot, ":sighting_time", "trp_log_array_entry_time", ":log_entry"),
  38256. (val_sub, ":hours_ago", ":sighting_time"),
  38257. (try_begin),
  38258. (le, ":hours_ago", 1),
  38259. (str_store_string, s16, "str_less_than_an_hour_ago"),
  38260. (else_try),
  38261. (le, ":hours_ago", 48),
  38262. (assign, reg3, ":hours_ago"),
  38263. (str_store_string, s16, "str_maybe_reg3_hours_ago"),
  38264. (else_try),
  38265. (val_div, ":hours_ago", 24),
  38266. (assign, reg3, ":hours_ago"),
  38267. (str_store_string, s16, "str_reg3_days_ago"),
  38268. (try_end),
  38269.  
  38270. (troop_get_slot, ":center", "trp_log_array_center_object", ":log_entry"),
  38271. (str_store_party_name, s17, ":center"),
  38272. (troop_get_slot, ":entry_type", "trp_log_array_entry_type", ":log_entry"),
  38273. (eq, ":entry_type", logent_party_spots_wanted_bandits),
  38274. (str_store_string, s15, "str_youre_in_luck_we_sighted_those_bastards_s16_near_s17_hurry_and_you_might_be_able_to_pick_up_their_trail_while_its_still_hot"),
  38275.  
  38276. # (try_begin),
  38277. # (eq, ":entry_type", logent_party_chases_wanted_bandits),
  38278. # (str_store_string, s15, "@You're in luck. We gave chase to those bastards {s16} near {s17}. They have eluded us so far -- but perhaps you will do better..."),
  38279. # (else_try),
  38280. # (eq, ":entry_type", logent_party_runs_from_wanted_bandits),
  38281. # (str_store_string, s15, "@As it happens, they tried to run us down near {s17} {s16}. By the heavens, I hope you teach them a lesson."),
  38282. # (try_end),
  38283. (try_end),
  38284. ]),
  38285.  
  38286.  
  38287. #Troop Commentaries end
  38288.  
  38289.  
  38290.  
  38291. ("rebellion_arguments", #Right now, called only in one place. This is only used when for player overtures, and will need some changes if this script is called when NPCs try to suborn lords
  38292. [
  38293. (store_script_param, ":lord", 1),
  38294. (store_script_param, ":argument", 2),
  38295. (store_script_param, ":candidate", 3),
  38296.  
  38297. (assign, ":argument_appeal", 0),
  38298. (assign, ":argument_strength", 0),
  38299.  
  38300. (troop_get_slot, ":reputation", ":lord", slot_lord_reputation_type),
  38301.  
  38302. (store_faction_of_troop, ":lord_faction", ":candidate"),
  38303. (store_faction_of_troop, ":candidate_faction", ":candidate"),
  38304.  
  38305. (try_begin),
  38306. (eq, ":candidate", "trp_player"),
  38307. (assign, ":right_to_rule", "$player_right_to_rule"),
  38308. (else_try), #default right to rule of 75 for pretenders claiming throne
  38309. (is_between, ":candidate", pretenders_begin, pretenders_end),
  38310. (troop_slot_eq, ":candidate", slot_troop_original_faction, ":lord_faction"),
  38311. (assign, ":right_to_rule", 75),
  38312. (else_try), #default right to rule of 60 for all other lords
  38313. (assign, ":right_to_rule", 60),
  38314. (try_end),
  38315.  
  38316. (try_begin),
  38317. (eq, ":argument", argument_claim),
  38318. (store_sub, ":argument_strength", ":right_to_rule", 30),
  38319. (else_try),
  38320. (eq, ":argument", argument_ruler),
  38321. (store_sub, ":argument_strength", "$player_honor", 20),
  38322. (else_try),
  38323. (eq, ":argument", argument_lords),
  38324. (store_sub, ":argument_strength", "$player_honor", 20),
  38325. (else_try),
  38326. #argument_strength is ((5 * number of centers player have) - 40) if argument type is argument_victory
  38327. (eq, ":argument", argument_victory),
  38328. (assign, ":argument_strength", 0),
  38329. (try_for_range, ":center", centers_begin, centers_end),
  38330. (store_faction_of_party, ":center_faction", ":center"),
  38331. (assign, ":argument_strength", -40),
  38332. (try_begin),
  38333. (eq, "$players_kingdom", ":candidate_faction"),
  38334. (this_or_next|eq, ":center_faction", "fac_player_faction"),
  38335. (eq, ":center_faction", "fac_player_supporters_faction"),
  38336. (val_add, ":argument_strength", 5),
  38337. (else_try),
  38338. (eq, ":center_faction", ":candidate_faction"),
  38339. (val_add, ":argument_strength", 5),
  38340. (try_end),
  38341. (try_end),
  38342. (else_try),
  38343. #argument_strength is (20 - 20 * (number of lords in player's faction which not awareded fief by player although there is a fief awarding in future promise))
  38344. (eq, ":argument", argument_benefit),
  38345. (assign, ":argument_strength", 20),
  38346. (try_for_range, ":lord_promised_fief", active_npcs_begin, active_npcs_end),
  38347. (store_faction_of_troop, ":other_faction", ":lord_promised_fief"),
  38348. (neq, ":lord", "$g_talk_troop"),
  38349. (this_or_next|eq, ":other_faction", "fac_player_supporters_faction"),
  38350. (eq, ":other_faction", "$players_kingdom"),
  38351. (troop_slot_eq, ":lord_promised_fief", slot_troop_promised_fief, 1),
  38352. (val_sub, ":argument_strength", 20),
  38353. (try_end),
  38354. (try_end),
  38355. (val_clamp, ":argument_strength", -40, 41),
  38356.  
  38357. (try_begin),
  38358. (eq, ":reputation", lrep_martial),
  38359. (try_begin),
  38360. (eq, ":argument", argument_claim),
  38361. (assign, ":argument_appeal", 30),
  38362. (try_begin),
  38363. (gt, ":argument_strength", 0),
  38364. (str_store_string, s15, "str_you_speak_of_claims_to_the_throne_good_there_is_nothing_id_rather_do_than_fight_for_a_good_cause"),
  38365. (else_try),
  38366. (str_store_string, s15, "str_you_speak_of_claims_to_the_throne_well_there_is_nothing_id_rather_do_than_fight_for_a_good_cause_but_the_claim_you_make_seems_somewhat_weak"),
  38367. (try_end),
  38368. (else_try),
  38369. (eq, ":argument", argument_lords),
  38370. (assign, ":argument_appeal", 10),
  38371. (try_begin),
  38372. (gt, ":argument_strength", 0),
  38373. (str_store_string, s15, "str_i_am_pleased_that_you_speak_of_upholding_my_ancient_rights_which_are_sometimes_trod_upon_in_these_sorry_days"),
  38374. (else_try),
  38375. (str_store_string, s15, "str_i_am_pleased_that_you_speak_of_upholding_my_ancient_rights_but_sometimes_men_make_pledges_before_they_are_king_which_they_cannot_keep_once_they_take_the_throne"),
  38376. (try_end),
  38377. (else_try),
  38378. (eq, ":argument", argument_ruler),
  38379. (assign, ":argument_appeal", 0),
  38380. (try_begin),
  38381. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_well_i_supposed_thats_good_but_sometimes_the_commons_overstep_their_boundaries_im_more_concerned_that_your_claim_be_legal_so_i_can_swing_my_sword_with_a_good_conscience"),
  38382. (try_end),
  38383. (else_try),
  38384. (eq, ":argument", argument_benefit),
  38385. (assign, ":argument_appeal", -10),
  38386. (try_begin),
  38387. (gt, ":argument_strength", 0),
  38388. (str_store_string, s15, "str_you_speak_of_giving_me_land_good_i_ask_for_no_more_than_my_due"),
  38389. (else_try),
  38390. (str_store_string, s15, "str_you_speak_of_giving_me_land_unfortunately_you_are_not_wellknown_for_rewarding_those_to_whom_you_have_made_such_offers"),
  38391. (try_end),
  38392. (else_try),
  38393. (eq, ":argument", argument_victory),
  38394. (assign, ":argument_appeal", -30),
  38395. (str_store_string, s15, "str_you_speak_of_unifying_calradia_well_i_believe_that_well_always_be_fighting__its_important_that_we_fight_for_a_rightful_cause"),
  38396. (try_end),
  38397. (else_try),
  38398. (eq, ":reputation", lrep_quarrelsome),
  38399. (try_begin),
  38400. (eq, ":argument", argument_claim),
  38401. (assign, ":argument_appeal", -20),
  38402. (str_store_string, s15, "str_you_talk_of_claims_to_the_throne_but_i_leave_bickering_about_legalities_to_the_lawyers_and_clerks"),
  38403. (else_try),
  38404. (eq, ":argument", argument_ruler),
  38405. (assign, ":argument_appeal", -30),
  38406. (str_store_string, s15, "str_you_speak_of_ruling_justly_hah_ill_believe_theres_such_a_thing_as_a_just_king_when_i_see_one"),
  38407. (else_try),
  38408. (eq, ":argument", argument_lords),
  38409. (assign, ":argument_appeal", 0),
  38410. (str_store_string, s15, "str_you_spoke_of_protecting_the_rights_of_the_nobles_if_you_did_youd_be_the_first_king_to_do_so_in_a_very_long_time"),
  38411. (else_try),
  38412. (eq, ":argument", argument_benefit),
  38413. (assign, ":argument_appeal", 30),
  38414. (try_begin),
  38415. (gt, ":argument_strength", 0),
  38416. (str_store_string, s15, "str_you_speak_of_giving_me_land_ay_well_lets_see_if_you_deliver"),
  38417. (else_try),
  38418. (str_store_string, s15, "str_you_speak_of_giving_me_land_bah_youre_not_known_for_delivering_on_your_pledges"),
  38419. (try_end),
  38420. (else_try),
  38421. (eq, ":argument", argument_victory),
  38422. (assign, ":argument_appeal", 10),
  38423. (try_begin),
  38424. (gt, ":argument_strength", 0),
  38425. (str_store_string, s15, "str_you_speak_of_unifying_calradia_well_youve_done_a_good_job_at_making_calradia_bend_its_knee_to_you_so_maybe_thats_not_just_talk"),
  38426. (else_try),
  38427. (str_store_string, s15, "str_you_speak_of_unifying_calradia_id_be_impressed_if_i_thought_you_could_do_it_but_unfortunately_you_dont"),
  38428. (try_end),
  38429. (try_end),
  38430. (else_try),
  38431. (eq, ":reputation", lrep_selfrighteous),
  38432. (try_begin),
  38433. (eq, ":argument", argument_claim),
  38434. (assign, ":argument_appeal", -20),
  38435. (str_store_string, s15, "str_you_speak_of_claims_to_the_throne_well_any_peasant_can_claim_to_be_a_kings_bastard"),
  38436. (else_try),
  38437. (eq, ":argument", argument_ruler),
  38438. (assign, ":argument_appeal", -30),
  38439. (str_store_string, s15, "str_well_its_a_fine_thing_to_court_the_commons_with_promises_but_what_do_you_have_to_offer_me"),
  38440. (else_try),
  38441. (eq, ":argument", argument_lords),
  38442. (assign, ":argument_appeal", 0),
  38443. (try_begin),
  38444. (gt, ":argument_strength", 0),
  38445. (str_store_string, s15, "str_you_speak_of_protecting_the_rights_of_lords_that_would_make_a_fine_change_if_my_rights_as_lord_would_be_respected"),
  38446. (else_try),
  38447. (str_store_string, s15, "str_you_speak_of_protecting_the_rights_of_lords_that_would_make_a_fine_change_if_my_rights_as_lord_would_be_respected_however_it_is_easy_for_you_to_make_promises_while_you_are_weak_that_you_have_no_intention_of_keeping_when_you_are_strong"),
  38448. (try_end),
  38449. (else_try),
  38450. (eq, ":argument", argument_benefit),
  38451. (assign, ":argument_appeal", 20),
  38452. (try_begin),
  38453. (gt, ":argument_strength", 0),
  38454. (str_store_string, s15, "str_you_speak_of_giving_me_land_well_my_family_is_of_ancient_and_noble_lineage_so_you_promise_me_no_more_than_my_due_still_your_gesture_is_appreciated"),
  38455. (else_try),
  38456. (str_store_string, s15, "str_you_speak_of_giving_me_land_well_you_make_that_pledge_but_i_am_not_impressed"),
  38457. (try_end),
  38458. (else_try),
  38459. (eq, ":argument", argument_victory),
  38460. (assign, ":argument_appeal", 20),
  38461. (try_begin),
  38462. (gt, ":argument_strength", 0),
  38463. (str_store_string, s15, "str_you_speak_of_unifying_calradia_well_much_of_this_land_now_bends_its_knee_to_you_so_perhaps_that_is_not_just_talk"),
  38464. (else_try),
  38465. (str_store_string, s15, "str_you_speak_of_unifying_calradia_but_right_now_yours_is_just_one_squabbling_faction_among_many"),
  38466. (try_end),
  38467. (try_end),
  38468. (else_try),
  38469. (eq, ":reputation", lrep_cunning),
  38470. (try_begin),
  38471. (eq, ":argument", argument_claim),
  38472. (assign, ":argument_appeal", -30),
  38473. (str_store_string, s15, "str_you_speak_of_claims_well_no_offense_but_a_claim_unsupported_by_might_rarely_prospers"),
  38474. (else_try),
  38475. (eq, ":argument", argument_ruler),
  38476. (assign, ":argument_appeal", 10),
  38477. (try_begin),
  38478. (gt, ":argument_strength", 0),
  38479. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_well_i_suppose_that_will_make_for_a_more_prosperous_realm_ive_always_tried_to_treat_my_peasants_decently_saves_going_to_bed_worrying_about_whether_youll_wake_up_with_the_roof_on_fire"),
  38480. (else_try),
  38481. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_very_well_but_remember_that_peasants_are_more_likely_to_cause_trouble_if_you_make_promises_then_dont_deliver_than_if_you_never_made_the_promise_in_the_first_place"),
  38482. (try_end),
  38483. (else_try),
  38484. (eq, ":argument", argument_lords),
  38485. (assign, ":argument_appeal", 15),
  38486. (try_begin),
  38487. (gt, ":argument_strength", 0),
  38488. (str_store_string, s15, "str_you_speak_of_protecting_the_rights_of_lords_good_youd_be_well_advised_to_do_that__men_fight_better_for_a_king_wholl_respect_their_rights"),
  38489. (else_try),
  38490. (str_store_string, s15, "str_you_speak_of_protecting_the_rights_of_lords_very_well_but_remember__failing_to_keep_promises_which_you_made_while_scrambling_up_the_throne_is_the_quickest_way_to_topple_off_of_it_once_you_get_there"),
  38491. (try_end),
  38492. (else_try),
  38493. (eq, ":argument", argument_benefit),
  38494. (assign, ":argument_appeal", -20),
  38495. (str_store_string, s15, "str_you_speak_of_giving_me_land_very_good_but_often_i_find_that_when_a_man_makes_too_many_promises_trying_to_get_to_the_top_he_has_trouble_keeping_them_once_he_reaches_it"),
  38496. (else_try),
  38497. (eq, ":argument", argument_victory),
  38498. (assign, ":argument_appeal", 20),
  38499. (try_begin),
  38500. (gt, ":argument_strength", 0),
  38501. (str_store_string, s15, "str_you_speak_of_unifying_calradia_well_many_have_said_that_you_might_very_well_be_the_one_to_do_it"),
  38502. (else_try),
  38503. (str_store_string, s15, "str_you_speak_of_unifying_calradia_well_all_the_kings_say_that_im_not_sure_that_you_will_succeed_while_they_fail"),
  38504. (try_end),
  38505. (try_end),
  38506. (else_try),
  38507. (eq, ":reputation", lrep_debauched),
  38508. (try_begin),
  38509. (eq, ":argument", argument_claim),
  38510. (assign, ":argument_appeal", -20),
  38511. (str_store_string, s15, "str_you_speak_of_claims_do_you_think_i_care_for_the_nattering_of_lawyers"),
  38512. (else_try),
  38513. (eq, ":argument", argument_ruler),
  38514. (assign, ":argument_appeal", -20),
  38515. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_how_kind_of_you_i_shall_tell_my_swineherd_all_about_your_sweet_promises_no_doubt_he_will_become_your_most_faithful_vassal"),
  38516. (else_try),
  38517. (eq, ":argument", argument_lords),
  38518. (assign, ":argument_appeal", -10),
  38519. (str_store_string, s15, "str_you_speak_of_protecing_the_rights_of_lords_such_sweet_words_but_ill_tell_you_this__the_only_rights_that_are_respected_in_this_world_are_the_rights_to_dominate_whoever_is_weaker_and_to_submit_to_whoever_is_stronger"),
  38520. (else_try),
  38521. (eq, ":argument", argument_benefit),
  38522. (assign, ":argument_appeal", 20),
  38523. (try_begin),
  38524. (gt, ":argument_strength", 0),
  38525. (str_store_string, s15, "str_you_speak_of_giving_me_land_yes_very_good__but_you_had_best_deliver"),
  38526. (else_try),
  38527. (str_store_string, s15, "str_you_speak_of_giving_me_land_hah_perhaps_all_those_others_to_whom_you_promised_lands_will_simply_step_aside"),
  38528. (try_end),
  38529. (else_try),
  38530. (eq, ":argument", argument_victory),
  38531. (assign, ":argument_appeal", 10),
  38532. (try_begin),
  38533. (gt, ":argument_strength", 0),
  38534. (str_store_string, s15, "str_you_speak_of_unifying_calradia_you_may_indeed_humble_the_other_kings_of_this_land_and_in_that_case_i_would_hope_that_you_would_remember_me_as_your_faithful_servant"),
  38535. (else_try),
  38536. (str_store_string, s15, "str_you_speak_of_unifying_calradia_but_you_are_weak_and_i_think_that_you_will_remain_weak"),
  38537. (try_end),
  38538. (try_end),
  38539. (else_try),
  38540. (eq, ":reputation", lrep_goodnatured),
  38541. (try_begin),
  38542. (eq, ":argument", argument_claim),
  38543. (assign, ":argument_appeal", 10),
  38544. (try_begin),
  38545. (gt, ":argument_strength", 0),
  38546. (str_store_string, s15, "str_you_speak_of_claims_its_good_for_a_king_to_have_a_strong_claim_although_admittedly_im_more_concerned_that_he_rules_just_ly_than_with_legalities_anyway_your_claim_seems_wellfounded_to_me"),
  38547. (else_try),
  38548. (str_store_string, s15, "str_you_speak_of_claims_but_your_claim_seems_a_bit_weak_to_me"),
  38549. (try_end),
  38550. (else_try),
  38551. (eq, ":argument", argument_ruler),
  38552. (assign, ":argument_appeal", 20),
  38553. (try_begin),
  38554. (gt, ":argument_strength", 0),
  38555. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_i_like_that_my_tenants_are_a_happy_lot_i_think_but_i_hear_of_others_in_other_estates_that_arent_so_fortunate"),
  38556. (else_try),
  38557. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_im_glad_to_hear_you_say_that_but_do_me_a_favor__dont_promise_the_commons_anything_you_cant_deliver_thats_a_sure_way_to_get_them_to_rebel_and_it_breaks_my_heart_to_have_to_put_them_down"),
  38558. (try_end),
  38559. (else_try),
  38560. (eq, ":argument", argument_lords),
  38561. (assign, ":argument_appeal", 0),
  38562. (str_store_string, s15, "str_you_speak_of_protecting_the_rights_of_lords_well_very_good_i_suppose_but_you_know__we_lords_can_take_of_ourselves_its_the_common_folk_who_need_a_strong_king_to_look_out_for_them_to_my_mind"),
  38563. (else_try),
  38564. (eq, ":argument", argument_benefit),
  38565. (assign, ":argument_appeal", -15),
  38566. (str_store_string, s15, "str_you_speak_of_giving_me_land_its_kind_of_you_really_though_that_is_not_necessary"),
  38567. (else_try),
  38568. (eq, ":argument", argument_victory),
  38569. (assign, ":argument_appeal", -25),
  38570. (str_store_string, s15, "str_you_speak_of_unifying_calradia_well_maybe_you_can_unite_this_land_by_the_sword_but_im_not_sure_that_this_will_make_you_a_good_ruler"),
  38571. (try_end),
  38572. (else_try),
  38573. (eq, ":reputation", lrep_upstanding),
  38574. (try_begin),
  38575. (eq, ":argument", argument_claim),
  38576. (assign, ":argument_appeal", 10),
  38577. (try_begin),
  38578. (gt, ":argument_strength", 0),
  38579. (str_store_string, s15, "str_you_speak_of_claims_a_king_must_have_a_strong_legal_claim_for_there_not_to_be_chaos_in_the_realm_and_yours_is_wellestablished"),
  38580. (else_try),
  38581. (str_store_string, s15, "str_you_speak_of_claims_a_king_must_have_a_strong_legal_claim_for_there_not_to_be_chaos_in_the_realm_but_your_claim_is_not_so_strong"),
  38582. (try_end),
  38583. (else_try),
  38584. (eq, ":argument", argument_lords),
  38585. (assign, ":argument_appeal", -5),
  38586. (try_begin),
  38587. (gt, ":argument_strength", 0),
  38588. (str_store_string, s15, "str_you_speak_of_protecting_the_rights_of_lords_it_is_of_course_important_that_a_king_respect_the_rights_of_his_vassals_although_i_worry_that_a_king_who_took_a_throne_without_proper_cause_would_not_rule_with_justice"),
  38589. (else_try),
  38590. (str_store_string, s15, "str_you_speak_of_protecting_the_rights_of_lords_it_is_of_course_important_that_a_king_respect_the_rights_of_his_vassals_however_i_would_like_to_know_that_you_would_indeed_deliver_on_your_promises"),
  38591. (try_end),
  38592. (else_try),
  38593. (eq, ":argument", argument_ruler),
  38594. (assign, ":argument_appeal", 5),
  38595. (try_begin),
  38596. (gt, ":argument_strength", 0),
  38597. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_i_would_be_pleased_to_serve_a_king_who_respected_the_rights_of_his_subjects_although_i_worry_that_a_king_who_took_a_throne_without_proper_cause_would_not_rule_with_justice"),
  38598. (else_try),
  38599. (str_store_string, s15, "str_you_speak_of_protecting_the_commons_i_would_be_pleased_to_serve_a_king_who_respected_the_rights_of_his_subjects_however_i_would_like_to_know_that_you_would_indeed_deliver_on_your_promises"),
  38600. (try_end),
  38601. (else_try),
  38602. (eq, ":argument", argument_benefit),
  38603. (assign, ":argument_appeal", -40),
  38604. (str_store_string, s15, "str_i_am_not_swayed_by_promises_of_reward"),
  38605. (else_try),
  38606. (eq, ":argument", argument_victory),
  38607. (assign, ":argument_appeal", 10),
  38608. (try_begin),
  38609. (gt, ":argument_strength", 0),
  38610. (str_store_string, s15, "str_you_speak_of_unifying_calradia_it_would_be_good_to_bring_peace_to_the_realm_and_i_believe_that_you_are_strong_enough_to_do_so"),
  38611. (else_try),
  38612. (str_store_string, s15, "str_you_speak_of_unifying_calradia_it_would_be_good_to_bring_peace_the_realm_but_with_your_kingdom_in_its_current_state_i_worry_that_you_are_just_bringing_more_discord"),
  38613. (try_end),
  38614. (try_end),
  38615. (try_end),
  38616.  
  38617. (str_store_string, s14, "str_s15"),
  38618.  
  38619. (assign, reg0, ":argument_appeal"),
  38620. (assign, reg1, ":argument_strength"),
  38621. ]),
  38622.  
  38623.  
  38624.  
  38625. #Rebellion changes end
  38626.  
  38627. # script_get_culture_with_party_faction_for_music
  38628. # Input: arg1 = party_no
  38629. # Output: reg0 = culture
  38630. ("get_culture_with_party_faction_for_music",
  38631. [
  38632. (store_script_param, ":party_no", 1),
  38633. (store_faction_of_party, ":faction_no", ":party_no"),
  38634. (try_begin),
  38635. (this_or_next|eq, ":faction_no", "fac_player_faction"),
  38636. (eq, ":faction_no", "fac_player_supporters_faction"),
  38637. (assign, ":faction_no", "$players_kingdom"),
  38638. (try_end),
  38639. (try_begin),
  38640. (is_between, ":party_no", centers_begin, centers_end),
  38641. (this_or_next|eq, ":faction_no", "fac_player_supporters_faction"),
  38642. (neg|is_between, ":faction_no", kingdoms_begin, kingdoms_end),
  38643. (party_get_slot, ":faction_no", ":party_no", slot_center_original_faction),
  38644. (try_end),
  38645. (call_script, "script_get_culture_with_faction_for_music", ":faction_no"),
  38646. ]),
  38647.  
  38648. # script_get_culture_with_faction_for_music
  38649. # Input: arg1 = party_no
  38650. # Output: reg0 = culture
  38651. ("get_culture_with_faction_for_music",
  38652. [
  38653. (store_script_param, ":faction_no", 1),
  38654. (try_begin),
  38655. (eq, ":faction_no", "fac_kingdom_1"),
  38656. (assign, ":result", mtf_culture_1),
  38657. (else_try),
  38658. (eq, ":faction_no", "fac_kingdom_2"),
  38659. (assign, ":result", mtf_culture_2),
  38660. (else_try),
  38661. (eq, ":faction_no", "fac_kingdom_3"),
  38662. (assign, ":result", mtf_culture_3),
  38663. (else_try),
  38664. (eq, ":faction_no", "fac_kingdom_4"),
  38665. (assign, ":result", mtf_culture_4),
  38666. (else_try),
  38667. (eq, ":faction_no", "fac_kingdom_5"),
  38668. (assign, ":result", mtf_culture_5),
  38669. (else_try),
  38670. (eq, ":faction_no", "fac_kingdom_6"),
  38671. (assign, ":result", mtf_culture_6),
  38672. (else_try),
  38673. (this_or_next|eq, ":faction_no", "fac_outlaws"),
  38674. (this_or_next|eq, ":faction_no", "fac_peasant_rebels"),
  38675. (this_or_next|eq, ":faction_no", "fac_deserters"),
  38676. (this_or_next|eq, ":faction_no", "fac_mountain_bandits"),
  38677. (eq, ":faction_no", "fac_forest_bandits"),
  38678. (assign, ":result", mtf_culture_6),
  38679. (else_try),
  38680. (assign, ":result", 0), #no culture, including player with no bindings to another kingdom
  38681. (try_end),
  38682. (assign, reg0, ":result"),
  38683. ]),
  38684.  
  38685. # script_music_set_situation_with_culture
  38686. # Input: arg1 = music_situation
  38687. # Output: none
  38688. ("music_set_situation_with_culture",
  38689. [
  38690. (store_script_param, ":situation", 1),
  38691. (assign, ":culture", 0), #no culture
  38692. (try_begin),
  38693. (this_or_next|eq, ":situation", mtf_sit_town),
  38694. (this_or_next|eq, ":situation", mtf_sit_day),
  38695. (this_or_next|eq, ":situation", mtf_sit_night),
  38696. (this_or_next|eq, ":situation", mtf_sit_town_infiltrate),
  38697. (eq, ":situation", mtf_sit_encounter_hostile),
  38698. (call_script, "script_get_culture_with_party_faction_for_music", "$g_encountered_party"),
  38699. (val_or, ":culture", reg0),
  38700. (else_try),
  38701. (this_or_next|eq, ":situation", mtf_sit_ambushed),
  38702. (eq, ":situation", mtf_sit_fight),
  38703. (call_script, "script_get_culture_with_party_faction_for_music", "$g_encountered_party"),
  38704. (val_or, ":culture", reg0),
  38705. (call_script, "script_get_culture_with_party_faction_for_music", "p_main_party"),
  38706. (val_or, ":culture", reg0),
  38707. (call_script, "script_get_closest_center", "p_main_party"),
  38708. (call_script, "script_get_culture_with_party_faction_for_music", reg0),
  38709. (val_or, ":culture", reg0),
  38710. (else_try),
  38711. (eq, ":situation", mtf_sit_multiplayer_fight),
  38712. (call_script, "script_get_culture_with_faction_for_music", "$g_multiplayer_team_1_faction"),
  38713. (val_or, ":culture", reg0),
  38714. (call_script, "script_get_culture_with_faction_for_music", "$g_multiplayer_team_2_faction"),
  38715. (val_or, ":culture", reg0),
  38716. (else_try),
  38717. (eq, ":situation", mtf_sit_travel),
  38718. (call_script, "script_get_culture_with_party_faction_for_music", "p_main_party"),
  38719. (val_or, ":culture", reg0),
  38720. (call_script, "script_get_closest_center", "p_main_party"),
  38721. (call_script, "script_get_culture_with_party_faction_for_music", reg0),
  38722. (val_or, ":culture", reg0),
  38723. (else_try),
  38724. (eq, ":situation", mtf_sit_victorious),
  38725. (call_script, "script_get_culture_with_party_faction_for_music", "p_main_party"),
  38726. (val_or, ":culture", reg0),
  38727. (else_try),
  38728. (eq, ":situation", mtf_sit_killed),
  38729. (call_script, "script_get_culture_with_party_faction_for_music", "$g_encountered_party"),
  38730. (val_or, ":culture", reg0),
  38731. (try_end),
  38732. (try_begin),
  38733. (this_or_next|eq, ":situation", mtf_sit_town),
  38734. (eq, ":situation", mtf_sit_day),
  38735. (try_begin),
  38736. (is_currently_night),
  38737. (assign, ":situation", mtf_sit_night),
  38738. (try_end),
  38739. (try_end),
  38740. (music_set_situation, ":situation"),
  38741. (music_set_culture, ":culture"),
  38742. ]),
  38743.  
  38744.  
  38745. # script_combat_music_set_situation_with_culture
  38746. # Input: none
  38747. # Output: none
  38748. ("combat_music_set_situation_with_culture",
  38749. [
  38750. (assign, ":situation", mtf_sit_fight),
  38751. (assign, ":num_allies", 0),
  38752. (assign, ":num_enemies", 0),
  38753. (try_for_agents, ":agent_no"),
  38754. (agent_is_alive, ":agent_no"),
  38755. (agent_is_human, ":agent_no"),
  38756. (agent_get_troop_id, ":agent_troop_id", ":agent_no"),
  38757. (store_character_level, ":troop_level", ":agent_troop_id"),
  38758. (val_add, ":troop_level", 10),
  38759. (val_mul, ":troop_level", ":troop_level"),
  38760. (try_begin),
  38761. (agent_is_ally, ":agent_no"),
  38762. (val_add, ":num_allies", ":troop_level"),
  38763. (else_try),
  38764. (val_add, ":num_enemies", ":troop_level"),
  38765. (try_end),
  38766. (try_end),
  38767. (val_mul, ":num_allies", 4), #play ambushed music if we are 2 times outnumbered.
  38768. (val_div, ":num_allies", 3),
  38769. (try_begin),
  38770. (lt, ":num_allies", ":num_enemies"),
  38771. (assign, ":situation", mtf_sit_ambushed),
  38772. (try_end),
  38773. (call_script, "script_music_set_situation_with_culture", ":situation"),
  38774. ]),
  38775.  
  38776. # script_play_victorious_sound
  38777. # Input: none
  38778. # Output: none
  38779. ("play_victorious_sound",
  38780. [
  38781. (call_script, "script_music_set_situation_with_culture", mtf_sit_victorious),
  38782. # (play_cue_track, "track_victorious_neutral_1"),
  38783. # (play_track, "track_victorious_neutral_1", 1),
  38784. ]),
  38785.  
  38786. # script_set_items_for_tournament
  38787. # Input: arg1 = horse_chance, arg2 = lance_chance (with horse only), arg3 = sword_chance, arg4 = axe_chance, arg5 = bow_chance (without horse only), arg6 = javelin_chance (with horse only), arg7 = mounted_bow_chance (with horse only), arg8 = crossbow_sword_chance, arg9 = armor_item_begin, arg10 = helm_item_begin
  38788. # Output: none (sets mt_arena_melee_fight items)
  38789. ("set_items_for_tournament",
  38790. [
  38791. (store_script_param, ":horse_chance", 1),
  38792. (store_script_param, ":lance_chance", 2),
  38793. (store_script_param, ":sword_chance", 3),
  38794. (store_script_param, ":axe_chance", 4),
  38795. (store_script_param, ":bow_chance", 5),
  38796. (store_script_param, ":javelin_chance", 6),
  38797. (store_script_param, ":mounted_bow_chance", 7),
  38798. (store_script_param, ":crossbow_sword_chance", 8),
  38799. (store_script_param, ":armor_item_begin", 9),
  38800. (store_script_param, ":helm_item_begin", 10),
  38801. (store_add, ":total_chance", ":sword_chance", ":axe_chance"),
  38802. (val_add, ":total_chance", ":crossbow_sword_chance"),
  38803. (try_for_range, ":i_ep", 0, 32),
  38804. (mission_tpl_entry_clear_override_items, "mt_arena_melee_fight", ":i_ep"),
  38805. (assign, ":has_horse", 0),
  38806. (store_div, ":cur_team", ":i_ep", 8),
  38807. (try_begin),
  38808. (store_random_in_range, ":random_no", 0, 100),
  38809. (lt, ":random_no", ":horse_chance"),
  38810. (assign, ":has_horse", 1),
  38811. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_horse"),
  38812. (try_end),
  38813. (try_begin),
  38814. (eq, ":has_horse", 1),
  38815. (store_add, ":cur_total_chance", ":total_chance", ":lance_chance"),
  38816. (val_add, ":cur_total_chance", ":javelin_chance"),
  38817. (val_add, ":cur_total_chance", ":mounted_bow_chance"),
  38818. (else_try),
  38819. (store_add, ":cur_total_chance", ":total_chance", ":bow_chance"),
  38820. (try_end),
  38821. (store_random_in_range, ":random_no", 0, ":cur_total_chance"),
  38822. (store_add, ":cur_shield_item", "itm_arena_shield_red", ":cur_team"),
  38823. (try_begin),
  38824. (val_sub, ":random_no", ":sword_chance"),
  38825. (lt, ":random_no", 0),
  38826. (try_begin),
  38827. (store_random_in_range, ":sub_random_no", 0, 100),
  38828. (lt, ":sub_random_no", 50),
  38829. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_sword"),
  38830. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", ":cur_shield_item"),
  38831. # (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_shield"),
  38832. (else_try),
  38833. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_heavy_practice_sword"),
  38834. (try_end),
  38835. (else_try),
  38836. (val_sub, ":random_no", ":axe_chance"),
  38837. (lt, ":random_no", 0),
  38838. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_axe"),
  38839. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", ":cur_shield_item"),
  38840. # (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_shield"),
  38841. (else_try),
  38842. (val_sub, ":random_no", ":crossbow_sword_chance"),
  38843. (lt, ":random_no", 0),
  38844. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_sword"),
  38845. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_crossbow"),
  38846. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_bolts"),
  38847. (else_try),
  38848. (eq, ":has_horse", 0),
  38849. (val_sub, ":random_no", ":bow_chance"),
  38850. (lt, ":random_no", 0),
  38851. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_bow"),
  38852. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_arrows"),
  38853. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_dagger"),
  38854. (else_try),
  38855. (eq, ":has_horse", 1),
  38856. (val_sub, ":random_no", ":lance_chance"),
  38857. (lt, ":random_no", 0),
  38858. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_lance"),
  38859. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", ":cur_shield_item"),
  38860. # (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_shield"),
  38861. (else_try),
  38862. (eq, ":has_horse", 1),
  38863. (val_sub, ":random_no", ":javelin_chance"),
  38864. (lt, ":random_no", 0),
  38865. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_javelin"),
  38866. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", ":cur_shield_item"),
  38867. # (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_shield"),
  38868. (else_try),
  38869. (eq, ":has_horse", 1),
  38870. (val_sub, ":random_no", ":mounted_bow_chance"),
  38871. (lt, ":random_no", 0),
  38872. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_bow"),
  38873. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_arrows"),
  38874. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", "itm_practice_dagger"),
  38875. (try_end),
  38876. (try_begin),
  38877. (ge, ":armor_item_begin", 0),
  38878. (store_add, ":cur_armor_item", ":armor_item_begin", ":cur_team"),
  38879. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", ":cur_armor_item"),
  38880. (try_end),
  38881. (try_begin),
  38882. (ge, ":helm_item_begin", 0),
  38883. (store_add, ":cur_helm_item", ":helm_item_begin", ":cur_team"),
  38884. (mission_tpl_entry_add_override_item, "mt_arena_melee_fight", ":i_ep", ":cur_helm_item"),
  38885. (try_end),
  38886. (try_end),
  38887. ]),
  38888.  
  38889.  
  38890. # script_custom_battle_end
  38891. # Input: none
  38892. # Output: none
  38893. ("custom_battle_end",
  38894. [
  38895. (assign, "$g_custom_battle_team1_death_count", 0),
  38896. (assign, "$g_custom_battle_team2_death_count", 0),
  38897. (get_player_agent_no, ":player_agent"),
  38898. (agent_get_team, ":player_team", ":player_agent"),
  38899. (try_for_agents, ":cur_agent"),
  38900. (agent_is_human, ":cur_agent"),
  38901. (neg|agent_is_alive, ":cur_agent"),
  38902. (agent_get_team, ":cur_team", ":cur_agent"),
  38903. (try_begin),
  38904. (eq, ":cur_team", ":player_team"),
  38905. (val_add, "$g_custom_battle_team1_death_count", 1),
  38906. (else_try),
  38907. (val_add, "$g_custom_battle_team2_death_count", 1),
  38908. (try_end),
  38909. (try_end),
  38910. ]),
  38911.  
  38912. # script_remove_troop_from_prison
  38913. # Input: troop_no
  38914. # Output: none
  38915. #Other search terms: release, peace
  38916.  
  38917. ("remove_troop_from_prison",
  38918. [
  38919. (store_script_param, ":troop_no", 1),
  38920. (troop_set_slot, ":troop_no", slot_troop_prisoner_of_party, -1),
  38921. (try_begin),
  38922. (eq, "$do_not_cancel_quest", 0),
  38923. (check_quest_active, "qst_rescue_lord_by_replace"),
  38924. (quest_slot_eq, "qst_rescue_lord_by_replace", slot_quest_target_troop, ":troop_no"),
  38925. (call_script, "script_cancel_quest", "qst_rescue_lord_by_replace"),
  38926. (try_end),
  38927. (try_begin),
  38928. (eq, "$do_not_cancel_quest", 0),
  38929. (check_quest_active, "qst_rescue_prisoner"),
  38930. (quest_slot_eq, "qst_rescue_prisoner", slot_quest_target_troop, ":troop_no"),
  38931. (call_script, "script_cancel_quest", "qst_rescue_prisoner"),
  38932. (try_end),
  38933. (try_begin),
  38934. (check_quest_active, "qst_deliver_message_to_prisoner_lord"),
  38935. (quest_slot_eq, "qst_deliver_message_to_prisoner_lord", slot_quest_target_troop, ":troop_no"),
  38936. (call_script, "script_cancel_quest", "qst_deliver_message_to_prisoner_lord"),
  38937. (try_end),
  38938. ]),
  38939.  
  38940. # script_debug_variables
  38941. # Input: two variables which will be examined by coder, this script is only for debugging.
  38942. # Output: none
  38943. ("debug_variables",
  38944. [
  38945. (store_script_param, ":unused", 1),
  38946. (store_script_param, ":unused_2", 2),
  38947. ]),
  38948.  
  38949. #lord recruitment scripts begin
  38950. ("troop_describes_troop_to_s15",
  38951. [
  38952. (store_script_param, ":troop_1", 1),
  38953. (store_script_param, ":troop_2", 2),
  38954.  
  38955.  
  38956. (str_store_troop_name, s15, ":troop_2"),
  38957.  
  38958. (try_begin),
  38959. (eq, ":troop_2", "trp_player"),
  38960. (str_store_string, s15, "str_you"),
  38961. (else_try),
  38962. (eq, ":troop_2", ":troop_1"),
  38963. (str_store_string, s15, "str_myself"),
  38964. (else_try),
  38965. (call_script, "script_troop_get_family_relation_to_troop", ":troop_2", ":troop_1"),
  38966. (gt, reg0, 0),
  38967. (str_store_string, s15, "str_my_s11_s15"),
  38968. (else_try),
  38969. (call_script, "script_troop_get_relation_with_troop", ":troop_2", ":troop_1"),
  38970. (ge, reg0, 20),
  38971. (str_store_string, s15, "str_my_friend_s15"),
  38972. (try_end),
  38973.  
  38974. ]),
  38975.  
  38976. ("troop_describes_quarrel_with_troop_to_s14",
  38977. #perhaps replace this with get_relevant_comment at a later date
  38978. [
  38979. (store_script_param, ":troop", 1),
  38980. (store_script_param, ":troop_2", 2),
  38981.  
  38982. (str_store_troop_name, s15, ":troop"),
  38983. (str_store_troop_name, s16, ":troop_2"),
  38984.  
  38985. (str_store_string, s14, "str_stop_gap__s15_is_the_rival_of_s16"),
  38986.  
  38987. (try_begin),
  38988. (eq, ":troop", "$g_talk_troop"),
  38989. (call_script, "script_cf_test_lord_incompatibility_to_s17", ":troop", ":troop_2"),
  38990. (str_store_string, s14, s17),
  38991. (else_try),
  38992. (eq, ":troop_2", "$g_talk_troop"),
  38993. (call_script, "script_cf_test_lord_incompatibility_to_s17", ":troop_2", ":troop"),
  38994. (str_store_string, s14, s17),
  38995. (else_try),
  38996. (str_store_string, s14, "str_general_quarrel"),
  38997. (try_end),
  38998.  
  38999. ]),
  39000.  
  39001. ("cf_test_lord_incompatibility_to_s17", #writes rivalry chance to reg0
  39002. [
  39003.  
  39004. (store_script_param, ":source_lord", 1),
  39005. (store_script_param, ":target_lord", 2),
  39006.  
  39007.  
  39008. (assign, ":chance_of_rivalry", 0),
  39009.  
  39010. (troop_get_slot, ":source_reputation", ":source_lord", slot_lord_reputation_type),
  39011. (troop_get_slot, ":target_reputation", ":target_lord", slot_lord_reputation_type),
  39012.  
  39013. (troop_get_type, reg15, ":target_lord"),
  39014.  
  39015. (str_store_troop_name, s18, ":target_lord"),
  39016.  
  39017. (assign, ":divisor", 1),
  39018.  
  39019. (call_script, "script_troop_get_family_relation_to_troop", ":target_lord", ":source_lord"),
  39020. (assign, ":family_relationship", reg0),
  39021.  
  39022. (try_begin),
  39023. (gt, ":family_relationship", 0),
  39024. (store_div, ":family_divisor", reg0, 5),
  39025. (val_add, ":divisor", ":family_divisor"),
  39026. (str_store_string, s18, "str_my_s11_s18"),
  39027. (else_try),
  39028. (gt, ":target_reputation", lrep_upstanding),
  39029. (this_or_next|eq, ":source_reputation", lrep_debauched),
  39030. (eq, ":source_reputation", lrep_selfrighteous),
  39031. (str_store_string, s18, "str_the_socalled_s11_s18"),
  39032. (try_end),
  39033.  
  39034.  
  39035. (try_begin), #test if reps are compatible
  39036. (eq, ":source_reputation", lrep_martial),
  39037. (is_between, ":family_relationship", 1, 5), #uncles and cousins
  39038.  
  39039. (assign, ":chance_of_rivalry", 100),
  39040. (str_store_string, s17, "str_s18_would_cheat_me_of_my_inheritance_by_heaven_i_know_my_rights_and_im_not_going_to_back_down"),
  39041. (else_try),
  39042. (eq, ":source_reputation", lrep_martial),
  39043. (eq, ":target_reputation", lrep_quarrelsome),
  39044. (str_store_string, s17, "str_s18_once_questioned_my_honour_and_my_bravery_i_long_for_the_day_when_i_can_meet_him_in_battle_and_make_him_retract_his_statement"),
  39045. (assign, ":chance_of_rivalry", 50),
  39046.  
  39047. (else_try),
  39048. (eq, ":source_reputation", lrep_martial),
  39049. (eq, ":target_reputation", lrep_upstanding),
  39050. (str_store_string, s17, "str_s18_once_questioned_my_judgment_in_battle_by_heaven_would_he_have_us_shirk_our_duty_to_smite_our_sovereigns_foes"),
  39051. (assign, ":chance_of_rivalry", 50),
  39052.  
  39053. (else_try),
  39054. (eq, ":target_reputation", lrep_martial),
  39055. (is_between, ":family_relationship", 1, 5),
  39056.  
  39057. (assign, ":chance_of_rivalry", 100),
  39058. (str_store_string, s17, "str_s18_seems_to_think_he_has_the_right_to_some_of_my_property_well_he_does_not"),
  39059.  
  39060. (else_try),
  39061. (eq, ":source_reputation", lrep_quarrelsome),
  39062. (eq, ":target_reputation", lrep_martial),
  39063. (str_store_string, s17, "str_s18_once_took_something_i_said_amiss_stubborn_bastard_wont_give_it_up_and_keeps_trying_to_get_me_to_recant_my_words"),
  39064. (assign, ":chance_of_rivalry", 50),
  39065.  
  39066. (else_try),
  39067. (eq, ":source_reputation", lrep_quarrelsome),
  39068. (eq, ":target_reputation", lrep_cunning),
  39069. (str_store_string, s17, "str_s18_is_a_crafty_weasel_and_i_dont_trust_him_one_bit"),
  39070. (assign, ":chance_of_rivalry", 100),
  39071.  
  39072.  
  39073. (else_try),
  39074. (eq, ":source_reputation", lrep_debauched),
  39075. (eq, ":target_reputation", lrep_upstanding),
  39076. (str_store_string, s17, "str_s18_i_despite_him_he_puts_on_such_a_nauseating_display_of_virtue_and_thinks_nothing_of_insulting_his_betters"),
  39077. (assign, ":chance_of_rivalry", 100),
  39078.  
  39079. #debauched insults upstanding
  39080.  
  39081. (else_try),
  39082. (eq, ":source_reputation", lrep_debauched),
  39083. (eq, ":target_reputation", lrep_selfrighteous),
  39084. (str_store_string, s17, "str_s18_entered_into_a_little_deal_with_me_and_is_now_trying_to_wriggle_out_of_it"),
  39085. (assign, ":chance_of_rivalry", 100),
  39086.  
  39087. #debauched insults selfrighteous
  39088.  
  39089.  
  39090.  
  39091. (else_try),
  39092. (eq, ":source_reputation", lrep_selfrighteous),
  39093. (eq, ":target_reputation", lrep_debauched),
  39094. (str_store_string, s17, "str_s18_once_ran_an_errand_for_me_and_now_thinks_i_owe_him_something_i_owe_his_ilk_nothing"),
  39095. (assign, ":chance_of_rivalry", 100),
  39096. #selfrighteous dismisses debauched
  39097.  
  39098. (else_try),
  39099. (eq, ":source_reputation", lrep_selfrighteous),
  39100. (eq, ":target_reputation", lrep_goodnatured),
  39101. (str_store_string, s17, "str_s18_is_soft_and_weak_and_not_fit_to_govern_a_fief_and_i_have_always_detested_him"),
  39102. (assign, ":chance_of_rivalry", 100),
  39103.  
  39104.  
  39105.  
  39106. (else_try),
  39107. (eq, ":source_reputation", lrep_cunning),
  39108. (eq, ":target_reputation", lrep_quarrelsome),
  39109. (str_store_string, s17, "str_s18_is_a_quarrelsome_oaf_and_a_liability_in_my_opinion_and_ive_let_him_know_as_much"),
  39110. (assign, ":chance_of_rivalry", 100),
  39111. #cunning insults quarrelsome
  39112.  
  39113. (else_try),
  39114. (eq, ":source_reputation", lrep_cunning),
  39115. (eq, ":target_reputation", lrep_goodnatured),
  39116. (str_store_string, s17, "str_s18_i_am_sorry_to_say_is_far_too_softhearted_a_man_to_be_given_any_kind_of_responsibility_his_chivalry_will_allow_the_enemy_to_flee_to_fight_another_day_and_will_cost_the_lives_of_my_own_faithful_men"),
  39117. (assign, ":chance_of_rivalry", 100),
  39118.  
  39119.  
  39120. (else_try),
  39121. (eq, ":source_reputation", lrep_goodnatured),
  39122. (eq, ":target_reputation", lrep_cunning),
  39123. (str_store_string, s17, "str_s18_seems_to_have_something_against_me_for_some_reason_i_dont_like_to_talk_ill_of_people_but_i_think_hes_can_be_a_bit_of_a_cad_sometimes"),
  39124. (assign, ":chance_of_rivalry", 100),
  39125.  
  39126. (else_try),
  39127. (eq, ":source_reputation", lrep_goodnatured),
  39128. (eq, ":target_reputation", lrep_selfrighteous),
  39129. (str_store_string, s17, "str_s18_has_always_treated_me_contemptuously_although_i_have_done_him_no_wrong"),
  39130. (assign, ":chance_of_rivalry", 100),
  39131.  
  39132.  
  39133.  
  39134. (else_try),
  39135. (eq, ":source_reputation", lrep_upstanding),
  39136. (eq, ":target_reputation", lrep_debauched),
  39137. (str_store_string, s17, "str_s18_is_thoroughly_dishonorable_and_a_compulsive_spinner_of_intrigues_which_i_fear_will_drag_us_into_wars_or_incite_rebellions"),
  39138. (assign, ":chance_of_rivalry", 50),
  39139.  
  39140. (else_try),
  39141. (eq, ":source_reputation", lrep_upstanding),
  39142. (eq, ":target_reputation", lrep_martial),
  39143. (str_store_string, s17, "str_s18_disappoints_me_i_once_scolded_for_his_rashness_in_battle_and_he_took_offense_i_do_not_care_to_apologize_for_my_efforts_to_save_his_life_and_the_lives_of_his_men"),
  39144. (assign, ":chance_of_rivalry", 50),
  39145.  
  39146. #for commons
  39147. (else_try),
  39148. (this_or_next|eq, ":source_reputation", lrep_upstanding),
  39149. (this_or_next|eq, ":source_reputation", lrep_martial),
  39150. (eq, ":source_reputation", lrep_selfrighteous),
  39151. (eq, ":target_reputation", lrep_roguish),
  39152. (str_store_string, s17, "str_s18_squanders_money_and_carouses_in_a_way_most_unbefitting_a_noble_by_doing_so_he_disgraces_us_all"),
  39153. (assign, ":chance_of_rivalry", 100),
  39154.  
  39155.  
  39156. (else_try),
  39157. (eq, ":source_reputation", lrep_roguish),
  39158. (this_or_next|eq, ":target_reputation", lrep_upstanding),
  39159. (this_or_next|eq, ":target_reputation", lrep_martial),
  39160. (eq, ":target_reputation", lrep_selfrighteous),
  39161. (str_store_string, s17, "str_s18_has_been_speaking_ill_of_me_behind_my_back_or_so_they_say"),
  39162. (assign, ":chance_of_rivalry", 100),
  39163.  
  39164.  
  39165. (else_try),
  39166. (this_or_next|eq, ":source_reputation", lrep_quarrelsome),
  39167. (this_or_next|eq, ":source_reputation", lrep_martial),
  39168. (eq, ":source_reputation", lrep_selfrighteous),
  39169. (eq, ":target_reputation", lrep_custodian),
  39170. (str_store_string, s17, "str_s18_is_a_disgrace_reg3shehe_consorts_with_merchants_lends_money_at_interest_uses_coarse_language_and_shows_no_attempt_to_uphold_the_dignity_of_the_honor_bestowed_upon_reg3herhim"),
  39171. (assign, ":chance_of_rivalry", 100),
  39172.  
  39173. (else_try),
  39174. (eq, ":source_reputation", lrep_custodian),
  39175. (this_or_next|eq, ":target_reputation", lrep_quarrelsome),
  39176. (this_or_next|eq, ":target_reputation", lrep_martial),
  39177. (eq, ":target_reputation", lrep_selfrighteous),
  39178. (str_store_string, s17, "str_s18_has_condemned_me_for_engaging_in_commerce_what_could_possibly_be_wrong_with_that"),
  39179. (assign, ":chance_of_rivalry", 100),
  39180.  
  39181.  
  39182. (else_try),
  39183. (this_or_next|eq, ":source_reputation", lrep_debauched),
  39184. (this_or_next|eq, ":source_reputation", lrep_martial),
  39185. (eq, ":source_reputation", lrep_selfrighteous),
  39186. (eq, ":target_reputation", lrep_benefactor),
  39187. (str_store_string, s17, "str_s18_i_have_heard_has_been_encouraging_seditious_ideas_among_the_peasantry__a_foolish_move_which_endangers_us_all"),
  39188. (assign, ":chance_of_rivalry", 100),
  39189.  
  39190.  
  39191. (else_try),
  39192. (eq, ":source_reputation", lrep_benefactor),
  39193. (this_or_next|eq, ":target_reputation", lrep_debauched),
  39194. (this_or_next|eq, ":target_reputation", lrep_martial),
  39195. (eq, ":target_reputation", lrep_selfrighteous),
  39196. (str_store_string, s17, "str_s18_has_called_me_out_for_the_way_i_deal_with_my_tenants_well_so_be_it_if_i_teach_them_that_they_are_the_equal_of_anyone_with_socalled_gentle_blood_what_is_it_to_reg3herhim"),
  39197. (assign, ":chance_of_rivalry", 100),
  39198.  
  39199.  
  39200. #lady incompatibilities
  39201. (else_try),
  39202. (eq, ":source_reputation", lrep_conventional),
  39203. (this_or_next|eq, ":target_reputation", lrep_martial),
  39204. (eq, ":target_reputation", lrep_selfrighteous),
  39205. (str_store_string, s17, "str_a_most_gallant_gentleman_who_knows_how_to_treat_a_lady"),
  39206. (assign, ":chance_of_rivalry", -50),
  39207.  
  39208. (else_try),
  39209. (eq, ":source_reputation", lrep_conventional),
  39210. (eq, ":target_reputation", lrep_quarrelsome),
  39211. (str_store_string, s17, "str_a_base_cad"),
  39212. (assign, ":chance_of_rivalry", 50),
  39213.  
  39214.  
  39215. (else_try),
  39216. (eq, ":source_reputation", lrep_adventurous),
  39217. (eq, ":target_reputation", lrep_cunning),
  39218. (str_store_string, s17, "str_a_man_who_treats_me_as_his_equal_which_is_rare"),
  39219. (assign, ":chance_of_rivalry", -50),
  39220.  
  39221. (else_try),
  39222. (eq, ":source_reputation", lrep_adventurous),
  39223. (this_or_next|eq, ":target_reputation", lrep_martial),
  39224. (eq, ":target_reputation", lrep_debauched),
  39225. (str_store_string, s17, "str_appears_to_value_me_with_his_estate_and_his_horse_as_prizes_worth_having"),
  39226. (assign, ":chance_of_rivalry", 50),
  39227.  
  39228. (else_try),
  39229. (eq, ":source_reputation", lrep_adventurous),
  39230. (neq, ":target_reputation", lrep_goodnatured),
  39231.  
  39232. (str_store_string, s17, "str_a_bit_dull_but_what_can_you_expect"),
  39233. (assign, ":chance_of_rivalry", 10),
  39234.  
  39235. (else_try),
  39236. (eq, ":source_reputation", lrep_otherworldly),
  39237. (call_script, "script_troop_get_romantic_chemistry_with_troop", ":source_lord", ":target_lord"),
  39238. (ge, reg0, 10),
  39239. (str_store_string, s17, "str_the_man_whom_destiny_intends_for_me"),
  39240. (assign, ":chance_of_rivalry", -50),
  39241.  
  39242. (else_try),
  39243. (eq, ":source_reputation", lrep_otherworldly),
  39244. (lt, reg0, 0),
  39245.  
  39246. (str_store_string, s17, "str_is_not_right_for_me__i_cannot_say_why_but_he_makes_my_skin_crawl"),
  39247. (assign, ":chance_of_rivalry", 50),
  39248.  
  39249.  
  39250. (else_try),
  39251. (eq, ":source_reputation", lrep_ambitious),
  39252. (this_or_next|eq, ":target_reputation", lrep_selfrighteous),
  39253. (eq, ":target_reputation", lrep_cunning),
  39254. (str_store_string, s17, "str_is_a_man_who_clearly_intends_to_make_his_mark_in_the_world"),
  39255. (assign, ":chance_of_rivalry", -20),
  39256.  
  39257. (else_try),
  39258. (eq, ":source_reputation", lrep_ambitious),
  39259. (eq, ":target_reputation", lrep_goodnatured),
  39260.  
  39261. (str_store_string, s17, "str_is_a_layabout_a_naif_prey_for_others_who_are_cleverer_than_he"),
  39262. (assign, ":chance_of_rivalry", 30),
  39263.  
  39264.  
  39265. (else_try),
  39266. (eq, ":source_reputation", lrep_moralist),
  39267. (eq, ":target_reputation", lrep_upstanding),
  39268.  
  39269. (str_store_string, s17, "str_is_a_man_of_stalwart_character"),
  39270. (assign, ":chance_of_rivalry", -50),
  39271.  
  39272. (else_try),
  39273. (eq, ":source_reputation", lrep_moralist),
  39274. (this_or_next|eq, ":target_reputation", lrep_debauched),
  39275. (eq, ":target_reputation", lrep_cunning),
  39276.  
  39277. (str_store_string, s17, "str_appears_to_be_a_man_of_low_morals"),
  39278. (assign, ":chance_of_rivalry", 50),
  39279.  
  39280. (else_try),
  39281. (eq, ":source_reputation", lrep_moralist),
  39282. (eq, ":target_reputation", lrep_quarrelsome),
  39283.  
  39284. (str_store_string, s17, "str_appears_to_be_a_man_who_lacks_selfdiscipline"),
  39285. (assign, ":chance_of_rivalry", 50),
  39286.  
  39287. (else_try),
  39288.  
  39289.  
  39290. (try_end),
  39291.  
  39292. (val_div, ":chance_of_rivalry", ":divisor"),
  39293.  
  39294. (assign, reg0, ":chance_of_rivalry"),
  39295.  
  39296. (neq, ":chance_of_rivalry", 0),
  39297. # (eq, ":incompatibility_found", 1), #cf can be removed with this
  39298.  
  39299. ]),
  39300.  
  39301. ("troop_get_romantic_chemistry_with_troop", #source is lady, target is man
  39302. [
  39303. (store_script_param, ":source_lady", 1),
  39304. (store_script_param, ":target_lord", 2),
  39305.  
  39306. (store_add, ":chemistry_sum", ":source_lady", ":target_lord"),
  39307. (val_add, ":chemistry_sum", "$romantic_attraction_seed"),
  39308.  
  39309. #This calculates (modula ^ 2) * 3
  39310. (store_mod, ":chemistry_remainder", ":chemistry_sum", 5),
  39311. (val_mul, ":chemistry_remainder", ":chemistry_remainder"), #0, 1, 4, 9, 16
  39312. (val_mul, ":chemistry_remainder", 3), #0, 3, 12, 27, 48
  39313.  
  39314. (store_attribute_level, ":romantic_chemistry", ":target_lord", ca_charisma),
  39315. (val_sub, ":romantic_chemistry", ":chemistry_remainder"),
  39316.  
  39317. (val_mul, ":romantic_chemistry", 2),
  39318. (assign, reg0, ":romantic_chemistry"),
  39319.  
  39320. #examples :
  39321. #For a charisma of 18, yields (18 - 0) * 2 = 36, (18 - 3) * 2 = 30, (18 - 12) * 2 = 12, (18 - 27) * 2 = -18, (18 - 48) * 2 = -60
  39322. #For a charisma of 10, yields (10 - 0) * 2 = 20, (10 - 3) * 2 = 14, (10 - 12) * 2 = -4, (10 - 27) * 2 = -34, (10 - 48) * 2 = -76
  39323. #For a charisma of 7, yields (7 - 0) * 2 = 14, (7 - 3) * 2 = 8, (7 - 12) * 2 = -10, (7 - 27) * 2 = -40, (7 - 48) * 2 = -82
  39324.  
  39325. #15 is high attraction, 0 is moderate attraction, -76 is lowest attraction
  39326. ]),
  39327.  
  39328.  
  39329. ("cf_troop_get_romantic_attraction_to_troop", #source is lady, target is man
  39330. [
  39331.  
  39332. (store_script_param, ":source_lady", 1),
  39333. (store_script_param, ":target_lord", 2),
  39334.  
  39335. (assign, ":weighted_romantic_assessment", 0),
  39336.  
  39337. (troop_get_type, ":source_is_female", ":source_lady"),
  39338. (eq, ":source_is_female", 1),
  39339. (troop_get_type, ":target_is_female", ":target_lord"),
  39340. (eq, ":target_is_female", 0),
  39341.  
  39342. (call_script, "script_troop_get_romantic_chemistry_with_troop", ":source_lady", ":target_lord"),
  39343. (assign, ":romantic_chemistry", reg0),
  39344.  
  39345.  
  39346. #objective attraction - average renown
  39347. (troop_get_slot, ":modified_renown", ":target_lord", slot_troop_renown),
  39348. (assign, ":lady_status", 60),
  39349. (val_div, ":modified_renown", 5),
  39350. (val_sub, ":modified_renown", ":lady_status"),
  39351. (val_min, ":modified_renown", 60),
  39352.  
  39353.  
  39354.  
  39355. #weight values
  39356. (try_begin),
  39357. (assign, ":personality_match", 0),
  39358. (call_script, "script_cf_test_lord_incompatibility_to_s17", ":source_lady", ":target_lord"),
  39359. (store_sub, ":personality_match", 0, reg0),
  39360. (try_end),
  39361.  
  39362. (troop_get_slot, ":lady_reputation", ":source_lady", slot_lord_reputation_type),
  39363. (try_begin),
  39364. (eq, ":lady_reputation", lrep_ambitious),
  39365. (val_mul, ":modified_renown", 2),
  39366. (val_div, ":romantic_chemistry", 2),
  39367. (else_try),
  39368. (eq, ":lady_reputation", lrep_otherworldly),
  39369. (val_div, ":modified_renown", 2),
  39370. (val_mul, ":romantic_chemistry", 2),
  39371. (else_try),
  39372. (eq, ":lady_reputation", lrep_adventurous),
  39373. (val_div, ":modified_renown", 2),
  39374. (else_try),
  39375. (eq, ":lady_reputation", lrep_moralist),
  39376. (val_div, ":modified_renown", 2),
  39377. (val_div, ":romantic_chemistry", 2),
  39378. (try_end),
  39379.  
  39380. (val_add, ":weighted_romantic_assessment", ":romantic_chemistry"),
  39381. (val_add, ":weighted_romantic_assessment", ":personality_match"),
  39382. (val_add, ":weighted_romantic_assessment", ":modified_renown"),
  39383.  
  39384. (assign, reg0, ":weighted_romantic_assessment"),
  39385.  
  39386. ]),
  39387.  
  39388.  
  39389. ("cf_random_political_event", #right now, just enmities
  39390. [
  39391.  
  39392. (store_random_in_range, ":lord_1", active_npcs_begin, active_npcs_end),
  39393. (store_random_in_range, ":lord_2", active_npcs_begin, active_npcs_end),
  39394.  
  39395. (troop_slot_eq, ":lord_1", slot_troop_occupation, slto_kingdom_hero),
  39396. (troop_slot_eq, ":lord_2", slot_troop_occupation, slto_kingdom_hero),
  39397.  
  39398. (neq, ":lord_1", ":lord_2"),
  39399.  
  39400. (val_add, "$total_political_events", 1),
  39401.  
  39402. (store_troop_faction, ":lord_1_faction", ":lord_1"),
  39403. (store_troop_faction, ":lord_2_faction", ":lord_2"),
  39404.  
  39405. (assign, reg8, "$total_political_events"),
  39406.  
  39407.  
  39408. (faction_get_slot, ":faction_1_leader", ":lord_1_faction", slot_faction_leader),
  39409. (faction_get_slot, ":faction_2_leader", ":lord_2_faction", slot_faction_leader),
  39410.  
  39411. (this_or_next|eq, ":lord_1_faction", ":lord_2_faction"),
  39412. (this_or_next|eq, ":lord_1", ":faction_1_leader"),
  39413. (eq, ":lord_2", ":faction_2_leader"),
  39414.  
  39415.  
  39416. (call_script, "script_troop_get_relation_with_troop", ":lord_1", ":lord_2"),
  39417. (assign, ":relation", reg0),
  39418.  
  39419.  
  39420. (store_random_in_range, ":random", 0, 100),
  39421.  
  39422. (try_begin),
  39423. #reconciliation
  39424. #The chance of a liege reconciling two quarreling vassals is equal to (relationship with lord 1 x relationship with lord 2) / 4
  39425.  
  39426. (eq, ":lord_1_faction", ":lord_2_faction"),
  39427. (neq, ":faction_1_leader", "trp_player"),
  39428.  
  39429. (le, ":relation", -10),
  39430.  
  39431. # (ge, "$total_political_events", 5000),
  39432.  
  39433. (call_script, "script_troop_get_relation_with_troop", ":lord_1", ":faction_1_leader"),
  39434. (gt, reg0, 0),
  39435. (assign, ":lord_1_leader_rel", reg0),
  39436.  
  39437. (call_script, "script_troop_get_relation_with_troop", ":lord_2", ":faction_1_leader"),
  39438. (gt, reg0, 0),
  39439. (store_mul, ":reconciliation_chance", ":lord_1_leader_rel", reg0),
  39440. (val_div, ":reconciliation_chance", 4), #was 2 before
  39441.  
  39442. (le, ":random", ":reconciliation_chance"),
  39443.  
  39444. (str_store_troop_name, s4, ":faction_1_leader"),
  39445. (str_store_troop_name, s5, ":lord_1"),
  39446. (str_store_troop_name, s6, ":lord_2"),
  39447. (try_begin),
  39448. (eq, "$cheat_mode", 1),
  39449. (display_message, "str_check_reg8_s4_reconciles_s5_and_s6_"),
  39450. (try_end),
  39451.  
  39452. (call_script, "script_troop_change_relation_with_troop", ":lord_1", ":lord_2", 20),
  39453. (val_add, "$total_random_quarrel_changes", 20),
  39454. (else_try), #lord intervenes in quarrel
  39455. (eq, ":lord_1_faction", ":lord_2_faction"),
  39456.  
  39457. (le, ":relation", -10),
  39458. # (ge, ":random", 50),
  39459. (try_begin),
  39460. (eq, ":faction_1_leader", "trp_player"),
  39461. (try_begin),
  39462. (eq, "$cheat_mode", 1),
  39463. (display_message, "str_diagnostic__player_should_receive_consultation_quest_here_if_not_already_active"),
  39464. (try_end),
  39465. (neg|check_quest_active, "qst_consult_with_minister"),
  39466. (neg|check_quest_active, "qst_resolve_dispute"),
  39467. (eq, "$g_minister_notification_quest", 0),
  39468. (assign, "$g_minister_notification_quest", "qst_resolve_dispute"),
  39469. (quest_set_slot, "qst_resolve_dispute", slot_quest_target_troop, ":lord_1"),
  39470. (quest_set_slot, "qst_resolve_dispute", slot_quest_object_troop, ":lord_2"),
  39471.  
  39472. (call_script, "script_add_notification_menu", "mnu_notification_player_should_consult", 0, 0),
  39473.  
  39474.  
  39475. (else_try),
  39476. (call_script, "script_troop_get_relation_with_troop", ":lord_1", ":faction_1_leader"),
  39477. (assign, ":lord_1_rel_w_leader", reg0),
  39478.  
  39479. (call_script, "script_troop_get_relation_with_troop", ":lord_2", ":faction_1_leader"),
  39480. (assign, ":lord_2_rel_w_leader", reg0),
  39481.  
  39482. (store_random_in_range, ":another_random", -5, 5),
  39483.  
  39484. (val_add, ":lord_1_rel_w_leader", ":another_random"),
  39485.  
  39486. (try_begin),
  39487. (ge, ":lord_1_rel_w_leader", ":lord_2_rel_w_leader"),
  39488. (assign, ":winner_lord", ":lord_1"),
  39489. (assign, ":loser_lord", ":lord_2"),
  39490. (else_try),
  39491. (assign, ":loser_lord", ":lord_1"),
  39492. (assign, ":winner_lord", ":lord_2"),
  39493. (try_end),
  39494.  
  39495. (str_store_troop_name, s4, ":faction_1_leader"),
  39496. (str_store_troop_name, s5, ":winner_lord"),
  39497. (str_store_troop_name, s6, ":loser_lord"),
  39498.  
  39499. (try_begin),
  39500. (eq, "$cheat_mode", 1),
  39501. (display_message, "str_check_reg8_s4_rules_in_s5s_favor_in_quarrel_with_s6_"),
  39502. (try_end),
  39503.  
  39504. (call_script, "script_add_log_entry", logent_ruler_intervenes_in_quarrel, ":faction_1_leader", ":loser_lord", ":winner_lord", ":lord_1_faction"), #faction leader is actor, loser lord is center object, winner lord is troop_object
  39505.  
  39506. (call_script, "script_troop_change_relation_with_troop", ":winner_lord", ":faction_1_leader", 10),
  39507. (call_script, "script_troop_change_relation_with_troop", ":loser_lord", ":faction_1_leader", -20),
  39508. (val_add, "$total_random_quarrel_changes", -10),
  39509.  
  39510. (try_end),
  39511.  
  39512.  
  39513. (else_try), #new quarrel - companions
  39514. (is_between, ":lord_1", companions_begin, companions_end),
  39515. (is_between, ":lord_2", companions_begin, companions_end),
  39516.  
  39517. (ge, ":relation", -10),
  39518. (this_or_next|troop_slot_eq, ":lord_1", slot_troop_personalityclash_object, ":lord_2"),
  39519. (troop_slot_eq, ":lord_1", slot_troop_personalityclash2_object, ":lord_2"),
  39520.  
  39521. (str_store_troop_name, s5, ":lord_1"),
  39522. (str_store_troop_name, s6, ":lord_2"),
  39523.  
  39524. (try_begin),
  39525. (eq, "$cheat_mode", 1),
  39526. (display_message, "str_check_reg8_new_rivalry_generated_between_s5_and_s6"),
  39527. (try_end),
  39528.  
  39529. (call_script, "script_troop_change_relation_with_troop", ":lord_1", ":lord_2", -30),
  39530. (val_add, "$total_random_quarrel_changes", -30),
  39531.  
  39532.  
  39533. (else_try), #new quarrel - others
  39534. (eq, ":lord_1_faction", ":lord_2_faction"),
  39535.  
  39536. (ge, ":relation", -10), #can have two quarrels
  39537.  
  39538. (call_script, "script_cf_test_lord_incompatibility_to_s17", ":lord_1", ":lord_2"),
  39539. (assign, ":chance_of_enmity", reg0),
  39540. (gt, ":chance_of_enmity", 0),
  39541.  
  39542.  
  39543. (lt, ":random", ":chance_of_enmity"), #50 or 100 percent, usually
  39544.  
  39545.  
  39546. (str_store_troop_name, s5, ":lord_1"),
  39547. (str_store_troop_name, s6, ":lord_2"),
  39548. (try_begin),
  39549. (eq, "$cheat_mode", 1),
  39550. (display_message, "str_check_reg8_new_rivalry_generated_between_s5_and_s6"),
  39551. (try_end),
  39552.  
  39553. (call_script, "script_troop_change_relation_with_troop", ":lord_1", ":lord_2", -30),
  39554. (val_add, "$total_random_quarrel_changes", -30),
  39555.  
  39556. # (call_script, "script_update_troop_notes", ":lord_1"),
  39557. # (call_script, "script_update_troop_notes", ":lord_2"),
  39558. (else_try), #a lord attempts to suborn a character
  39559. (store_current_hours, ":hours"),
  39560. (ge, ":hours", 24),
  39561.  
  39562. (neq, ":lord_1_faction", ":lord_2_faction"),
  39563. # (eq, ":lord_1", ":faction_1_leader"),
  39564. (is_between, ":lord_1_faction", kingdoms_begin, kingdoms_end),
  39565.  
  39566. (call_script, "script_cf_troop_can_intrigue", ":lord_2", 0),
  39567. (neq, ":lord_2", ":faction_2_leader"),
  39568. (neq, ":lord_2", ":faction_1_leader"),
  39569.  
  39570. (str_store_troop_name, s5, ":faction_1_leader"),
  39571. (str_store_troop_name, s6, ":lord_2"),
  39572.  
  39573. (try_begin),
  39574. (ge, "$cheat_mode", 1),
  39575. (display_message, "str_check_reg8_s5_attempts_to_win_over_s6"),
  39576. (try_end),
  39577.  
  39578. (call_script, "script_calculate_troop_political_factors_for_liege", ":lord_2", ":faction_1_leader"),
  39579. (assign, ":lord_1_score", reg0),
  39580.  
  39581. (call_script, "script_calculate_troop_political_factors_for_liege", ":lord_2", ":faction_2_leader"),
  39582. (assign, ":faction_2_leader_score", reg0),
  39583.  
  39584. (try_begin),
  39585. (gt, ":lord_1_score", ":faction_2_leader_score"),
  39586.  
  39587.  
  39588. (try_begin),
  39589. (ge, "$cheat_mode", 1),
  39590. (str_store_troop_name, s4, ":lord_2"),
  39591. (display_message, "@{!}DEBUG - {s4} faction changed in subornment"),
  39592. (try_end),
  39593.  
  39594. (call_script, "script_change_troop_faction", ":lord_2", ":lord_1_faction"),
  39595. (try_end),
  39596. (try_end),
  39597.  
  39598.  
  39599.  
  39600. ]),
  39601.  
  39602.  
  39603. #this calculates the average number of rivalries per lord, giving a rough indication of how easily a faction may be divided
  39604. #fairly expensive in terms of CPU
  39605. ("evaluate_realm_stability",
  39606.  
  39607. [
  39608. (store_script_param, ":realm", 1),
  39609.  
  39610. (assign, ":total_lords", 0),
  39611. (assign, ":total_restless_lords", 0),
  39612. (assign, ":total_disgruntled_lords", 0),
  39613.  
  39614. (faction_get_slot, ":liege", ":realm", slot_faction_leader),
  39615.  
  39616. (try_for_range, ":lord", active_npcs_begin, active_npcs_end),
  39617. (troop_slot_eq, ":lord", slot_troop_occupation, slto_kingdom_hero),
  39618. (store_troop_faction, ":lord_faction", ":lord"),
  39619. (eq, ":lord_faction", ":realm"),
  39620. (val_add, ":total_lords", 1),
  39621.  
  39622. (call_script, "script_calculate_troop_political_factors_for_liege", ":lord", ":liege"),
  39623. (try_begin),
  39624. (le, reg3, -10),
  39625. (val_add, ":total_disgruntled_lords", 1),
  39626. (else_try),
  39627. (le, reg3, 10),
  39628. (val_add, ":total_restless_lords", 1),
  39629. (try_end),
  39630. (try_end),
  39631.  
  39632. (try_begin),
  39633. (gt, ":total_lords", 0),
  39634. (store_mul, ":instability_quotient", ":total_disgruntled_lords", 100),
  39635. (val_div, ":instability_quotient", ":total_lords"),
  39636.  
  39637. (store_mul, ":restless_quotient", ":total_restless_lords", 100),
  39638. (val_div, ":restless_quotient", ":total_lords"),
  39639.  
  39640. (store_mul, ":combined_quotient", ":instability_quotient", 2),
  39641. (val_add, ":combined_quotient", ":restless_quotient"),
  39642. (faction_set_slot, ":realm", slot_faction_instability, ":combined_quotient"),
  39643.  
  39644. (assign, reg0, ":instability_quotient"),
  39645. (assign, reg1, ":restless_quotient"),
  39646. (assign, reg1, ":restless_quotient"),
  39647. (else_try),
  39648. (try_begin),
  39649. (eq, "$cheat_mode", 1),
  39650. (str_store_faction_name, s1, ":realm"),
  39651. (display_message, "str_s1_has_no_lords"),
  39652. (try_end),
  39653. (assign, reg0, 0),
  39654. (assign, reg1, 0),
  39655. (try_end),
  39656.  
  39657. ]),
  39658.  
  39659.  
  39660.  
  39661. #lord recruitment scripts end
  39662.  
  39663. #called from game_event_simulate_battle
  39664. #Includes a number of consequences that follow on battles, mostly affecting relations between different NPCs
  39665. #This only fires from complete victories
  39666. ("battle_political_consequences",
  39667. [
  39668. (store_script_param, ":defeated_party", 1),
  39669. (store_script_param, ":winner_party", 2),
  39670.  
  39671. (try_begin),
  39672. (eq, "$cheat_mode", 1),
  39673. (str_store_party_name, s4, ":winner_party"),
  39674. (str_store_party_name, s5, ":defeated_party"),
  39675. (display_message, "str_do_political_consequences_for_s4_victory_over_s5"),
  39676. (try_end),
  39677.  
  39678. (store_faction_of_party, ":winner_faction", ":winner_party"),
  39679. (try_begin),
  39680. (eq, ":winner_party", "p_main_party"),
  39681. (assign, ":winner_faction", "$players_kingdom"),
  39682. (try_end),
  39683.  
  39684. (party_get_template_id, ":defeated_party_template", ":defeated_party"),
  39685.  
  39686. #did the battle involve travellers?
  39687. (try_begin),
  39688. (this_or_next|eq, ":defeated_party_template", "pt_village_farmers"),
  39689. (eq, ":defeated_party_template", "pt_kingdom_caravan_party"),
  39690.  
  39691.  
  39692. (party_get_slot, ":destination", ":defeated_party", slot_party_ai_object),
  39693. (party_get_slot, ":origin", ":defeated_party", slot_party_last_traded_center),
  39694.  
  39695. (call_script, "script_add_log_entry", logent_traveller_attacked, ":winner_party", ":origin", ":destination", ":winner_faction"),
  39696.  
  39697. (try_begin),
  39698. (eq, "$cheat_mode", 2),
  39699. (neg|is_between, ":winner_faction", kingdoms_begin, kingdoms_end),
  39700. (str_store_string, s65, "str_bandits_attacked_a_party_on_the_roads_so_a_bounty_is_probably_available"),
  39701. (call_script, "script_add_notification_menu", "mnu_debug_alert_from_s65", 0, 0),
  39702.  
  39703. (str_store_party_name, s15, ":origin"),
  39704. (str_store_party_name, s16, ":destination"),
  39705. (display_message, "str_travellers_attacked_on_road_from_s15_to_s16"),
  39706. (try_end),
  39707.  
  39708.  
  39709. #by logging the faction and the party, we can verify that the party number is unlikely to have been reassigned - or at any rate, that the factions have not changed
  39710. (try_end),
  39711.  
  39712. #winner consequences:
  39713. #1) leader improves relations with other leaders
  39714. #2) Player given credit for victory if the victorious party is following the player's advice
  39715. (try_begin),
  39716. (party_get_template_id, ":winner_party_template", ":winner_party"),
  39717. (eq, ":winner_party_template", "pt_kingdom_hero_party"),
  39718. (neq, ":winner_party", "p_main_party"),
  39719. #Do not do for player party, as is included in post-battle dialogs
  39720.  
  39721. (party_stack_get_troop_id, ":winner_leader", ":winner_party", 0),
  39722. (is_between, ":winner_leader", active_npcs_begin, active_npcs_end),
  39723.  
  39724. (store_faction_of_party, ":winner_faction", ":winner_party"),
  39725.  
  39726. (party_collect_attachments_to_party, ":winner_party", "p_temp_party_2"),
  39727. (party_get_num_companion_stacks, ":num_stacks", "p_temp_party_2"),
  39728. (try_for_range, ":troop_iterator", 0, ":num_stacks"),
  39729. (party_stack_get_troop_id, ":cur_troop_id", "p_temp_party_2", ":troop_iterator"),
  39730. (is_between, ":cur_troop_id", active_npcs_begin, active_npcs_end),
  39731.  
  39732. (try_begin),
  39733. (troop_get_slot, ":winner_lord_party", ":cur_troop_id", slot_troop_leaded_party),
  39734. (party_is_active, ":winner_lord_party"),
  39735. (call_script, "script_cf_party_under_player_suggestion", ":winner_lord_party"),
  39736. (call_script, "script_add_log_entry", logent_player_suggestion_succeeded, "trp_player", -1, ":cur_troop_id", -1),
  39737. (try_end),
  39738.  
  39739.  
  39740. (store_faction_of_troop, ":troop_faction", ":cur_troop_id"),
  39741. (eq, ":troop_faction", ":winner_faction"),
  39742. (neq, ":cur_troop_id", ":winner_leader"),
  39743.  
  39744. (try_begin),
  39745. (eq, "$cheat_mode", 4),
  39746. (str_store_troop_name, s15, ":cur_troop_id"),
  39747. (str_store_troop_name, s16, ":winner_leader"),
  39748. (display_message, "str_s15_shares_joy_of_victory_with_s16"),
  39749. (try_end),
  39750.  
  39751. (call_script, "script_troop_change_relation_with_troop", ":cur_troop_id", ":winner_leader", 3),
  39752. (val_add, "$total_battle_ally_changes", 3),
  39753.  
  39754. (try_end),
  39755. (party_clear, "p_temp_party_2"),
  39756. (try_end),
  39757.  
  39758. #consequences of defeat,
  39759. #1) -1 relation with lord per lord, plus -15 if there is an incompatible marshal
  39760. #2) losers under player suggestion blame the player
  39761. #3) Some losers resent the victor lord
  39762. #4) Possible quarrels over defeat
  39763. (try_begin),
  39764. (party_collect_attachments_to_party, ":defeated_party", "p_temp_party_2"),
  39765. (party_get_num_companion_stacks, ":num_stacks", "p_temp_party_2"),
  39766.  
  39767. (try_begin),
  39768. (gt, "$marshall_defeated_in_battle", 0),
  39769. (str_store_troop_name, s15, "$marshall_defeated_in_battle"),
  39770. (store_faction_of_troop, ":defeated_marshall_faction", "$marshall_defeated_in_battle"),
  39771. (try_begin),
  39772. (eq, "$cheat_mode", 1),
  39773. (display_message, "str_faction_marshall_s15_involved_in_defeat"),
  39774. (try_end),
  39775. (else_try),
  39776. (eq, "$marshall_defeated_in_battle", "trp_player"),
  39777. (eq, ":defeated_party", "p_main_party"),
  39778. (faction_slot_eq, "fac_player_supporters_faction", slot_faction_state, sfs_active),
  39779. (try_begin),
  39780. (eq, "$cheat_mode", 1),
  39781. (display_message, "str_player_faction_marshall_involved_in_defeat"),
  39782. (try_end),
  39783. (else_try),
  39784. (assign, "$marshall_defeated_in_battle", -1),
  39785. (try_end),
  39786.  
  39787. (try_for_range, ":troop_iterator", 0, ":num_stacks"),
  39788. (party_stack_get_troop_id, ":cur_troop_id", "p_temp_party_2", ":troop_iterator"),
  39789. (troop_slot_eq, ":cur_troop_id", slot_troop_occupation, slto_kingdom_hero),
  39790.  
  39791. (try_begin), #is party under suggestion?
  39792. (troop_get_slot, ":defeated_lord_party", ":cur_troop_id", slot_troop_leaded_party),
  39793. (party_is_active, ":defeated_lord_party"),
  39794.  
  39795. #is party under suggestion?
  39796. (call_script, "script_cf_party_under_player_suggestion", ":defeated_lord_party"),
  39797. (call_script, "script_add_log_entry", logent_player_suggestion_failed, "trp_player", -1, ":cur_troop_id", -1),
  39798. (try_end),
  39799.  
  39800.  
  39801. (store_faction_of_troop, ":troop_faction", ":cur_troop_id"),
  39802.  
  39803. (faction_get_slot, ":faction_leader", ":troop_faction", slot_faction_leader),
  39804. (neq, ":cur_troop_id", ":faction_leader"),
  39805.  
  39806. #Lose one point relation with liege
  39807. (try_begin),
  39808. (eq, "$cheat_mode", 1),
  39809. (str_store_troop_name, s14, ":cur_troop_id"),
  39810. (str_store_faction_name, s15, ":troop_faction"),
  39811.  
  39812. (display_message, "str_s14_of_s15_defeated_in_battle_loses_one_point_relation_with_liege"),
  39813. (try_end),
  39814.  
  39815. (try_begin),
  39816. (this_or_next|neq, ":faction_leader", "trp_player"), #if leader is zero at beginning of game. I'm not entirely sure how this could happen...
  39817. (eq, "$players_kingdom", ":troop_faction"),
  39818.  
  39819. (call_script, "script_troop_change_relation_with_troop", ":cur_troop_id", ":faction_leader", -1),
  39820. (val_add, "$total_battle_ally_changes", -1),
  39821. (try_end),
  39822.  
  39823.  
  39824. (call_script, "script_faction_inflict_war_damage_on_faction", ":winner_faction", ":troop_faction", 10),
  39825.  
  39826.  
  39827. (try_begin),
  39828. (this_or_next|is_between, ":winner_leader", active_npcs_begin, active_npcs_end),
  39829. (eq, ":winner_leader", "trp_player"),
  39830.  
  39831. (this_or_next|neq, ":winner_leader", "trp_player"), #prevents winner leader being zero, for whatever reason
  39832. (eq, ":winner_party", "p_main_party"),
  39833.  
  39834. (this_or_next|troop_slot_eq, ":cur_troop_id", slot_lord_reputation_type, lrep_quarrelsome),
  39835. (this_or_next|troop_slot_eq, ":cur_troop_id", slot_lord_reputation_type, lrep_selfrighteous),
  39836. (troop_slot_eq, ":cur_troop_id", slot_lord_reputation_type, lrep_debauched),
  39837.  
  39838. (call_script, "script_troop_change_relation_with_troop", ":cur_troop_id", ":winner_leader", -1),
  39839. (val_add, "$total_battle_enemy_changes", -1),
  39840.  
  39841. (try_begin),
  39842. (eq, "$cheat_mode", 1),
  39843. (str_store_troop_name, s14, ":cur_troop_id"),
  39844. (str_store_troop_name, s15, ":winner_leader"),
  39845.  
  39846. (display_message, "str_s14_defeated_in_battle_by_s15_loses_one_point_relation"),
  39847. (try_end),
  39848.  
  39849.  
  39850. (try_end),
  39851.  
  39852. (gt, "$marshall_defeated_in_battle", -1),
  39853. (eq, ":troop_faction", ":defeated_marshall_faction"),
  39854. (str_store_troop_name, s14, ":cur_troop_id"),
  39855.  
  39856. (call_script, "script_cf_test_lord_incompatibility_to_s17", ":cur_troop_id", "$marshall_defeated_in_battle"),
  39857. (try_begin),
  39858. (eq, "$cheat_mode", 1),
  39859. (display_message, "str_s14_blames_s15_for_defeat"),
  39860. (try_end),
  39861.  
  39862. (call_script, "script_add_log_entry", logent_lord_blames_defeat, ":cur_troop_id", "$marshall_defeated_in_battle", ":faction_leader", ":winner_faction"),
  39863.  
  39864. (call_script, "script_troop_change_relation_with_troop", ":cur_troop_id", ":faction_leader", -15),
  39865. (val_add, "$total_battle_ally_changes", -15),
  39866.  
  39867. (neq, "$marshall_defeated_in_battle", ":faction_leader"),
  39868. (call_script, "script_troop_change_relation_with_troop", ":cur_troop_id", "$marshall_defeated_in_battle", -15),
  39869. (val_add, "$total_battle_ally_changes", -15),
  39870.  
  39871. (try_end),
  39872.  
  39873. (party_clear, "p_temp_party_2"),
  39874. (try_end),
  39875. ]),
  39876.  
  39877. ("faction_inflict_war_damage_on_faction",
  39878. [
  39879. (store_script_param, ":actor_faction", 1),
  39880. (store_script_param, ":target_faction", 2),
  39881. (store_script_param, ":amount", 3),
  39882.  
  39883.  
  39884. (store_add, ":slot_war_damage", ":target_faction", slot_faction_war_damage_inflicted_on_factions_begin),
  39885. (val_sub, ":slot_war_damage", kingdoms_begin),
  39886. (faction_get_slot, ":cur_war_damage", ":actor_faction", ":slot_war_damage"),
  39887.  
  39888. (val_add, ":cur_war_damage", ":amount"),
  39889. (faction_set_slot, ":actor_faction", ":slot_war_damage", ":cur_war_damage"),
  39890.  
  39891.  
  39892. (try_begin),
  39893. (ge, "$cheat_mode", 1),
  39894. (str_store_faction_name, s4, ":actor_faction"),
  39895. (str_store_faction_name, s5, ":target_faction"),
  39896. (assign, reg3, ":cur_war_damage"),
  39897. (assign, reg4, ":amount"),
  39898. (display_message, "@{!}{s4} inflicts {reg4} damage on {s5}, raising total inflicted to {reg3}"),
  39899. (try_end),
  39900.  
  39901.  
  39902. (faction_get_slot, ":faction_marshal", ":target_faction", slot_faction_marshall),
  39903. (try_begin),
  39904. (ge, ":faction_marshal", 0),
  39905. (gt, ":amount", 0),
  39906.  
  39907. (troop_get_slot, ":controversy", ":faction_marshal", slot_troop_controversy),
  39908. (val_add, ":controversy", ":amount"),
  39909. (val_min, ":controversy", 100),
  39910. (troop_set_slot, ":faction_marshal", slot_troop_controversy, ":controversy"),
  39911.  
  39912. (try_begin),
  39913. (ge, "$cheat_mode", 1),
  39914. (str_store_troop_name, s4, ":faction_marshal"),
  39915. (assign, reg4, ":amount"),
  39916. (assign, reg5, ":controversy"),
  39917. (display_message, "@{!}War damage raises {s4}'s controversy by {reg4} to {reg5}"),
  39918. (try_end),
  39919. (try_end),
  39920.  
  39921. (faction_get_slot, ":faction_marshal", ":actor_faction", slot_faction_marshall),
  39922. (try_begin),
  39923. (ge, ":faction_marshal", 0),
  39924. (val_div, ":amount", 3),
  39925. (gt, ":amount", 0),
  39926.  
  39927.  
  39928. (troop_get_slot, ":controversy", ":faction_marshal", slot_troop_controversy),
  39929. (val_sub, ":controversy", ":amount"),
  39930. (val_max, ":controversy", 0),
  39931. (troop_set_slot, ":faction_marshal", slot_troop_controversy, ":controversy"),
  39932.  
  39933. (try_begin),
  39934. (ge, "$cheat_mode", 1),
  39935. (str_store_troop_name, s4, ":faction_marshal"),
  39936. (assign, reg4, ":amount"),
  39937. (assign, reg5, ":controversy"),
  39938. (display_message, "@{!}War damage lowers {s4}'s controversy by {reg4} to {reg5}"),
  39939. (try_end),
  39940. (try_end),
  39941.  
  39942.  
  39943.  
  39944. ]),
  39945.  
  39946. ("calculate_troop_political_factors_for_liege",
  39947. [
  39948. (store_script_param, ":troop", 1),
  39949. (store_script_param, ":liege", 2),
  39950.  
  39951. (troop_get_slot, ":lord_reputation", ":troop", slot_lord_reputation_type),
  39952.  
  39953. (store_faction_of_troop, ":faction", ":liege"),
  39954.  
  39955.  
  39956. (try_begin),
  39957. (eq, ":faction", "fac_player_faction"),
  39958. (assign, ":faction", "fac_player_supporters_faction"),
  39959. (try_end),
  39960.  
  39961. (assign, ":liege_is_undeclared_rebel", 0),
  39962. (try_begin),
  39963. (neg|faction_slot_eq, ":faction", slot_faction_leader, ":liege"),
  39964. #the liege is a rebel
  39965. (assign, ":liege_is_undeclared_rebel", 1),
  39966. (try_begin),
  39967. (eq, "$cheat_mode", 1),
  39968. (str_store_troop_name, s32, ":liege"),
  39969. (display_message, "str_s32_is_undeclared_rebel"),
  39970. (try_end),
  39971. (try_end),
  39972.  
  39973. (assign, ":result_for_material", 0),
  39974. (assign, ":penalty_for_changing_sides", 0),
  39975.  
  39976.  
  39977.  
  39978. #FACTOR 1 - MILITARY SECURITY
  39979. (assign, ":result_for_security", 0),
  39980.  
  39981. #find the lord's home
  39982. (assign, ":base_center", -1),
  39983. (try_begin),
  39984. (is_between, ":troop", active_npcs_begin, active_npcs_end),
  39985. (try_for_range, ":center", centers_begin, centers_end),
  39986. (eq, ":base_center", -1),
  39987. (party_slot_eq, ":center", slot_town_lord, ":troop"),
  39988. (assign, ":base_center", ":center"),
  39989. (try_end),
  39990. (try_end),
  39991.  
  39992. (assign, ":faction_has_base", 0),
  39993.  
  39994. #add up all other centers for the security value
  39995. (try_for_range, ":center", centers_begin, centers_end),
  39996. (neq, ":center", ":base_center"),
  39997. (gt, ":base_center", 0),
  39998.  
  39999. (try_begin),
  40000. (is_between, ":center", towns_begin, towns_end),
  40001. (assign, ":weight", 9000),
  40002. (else_try),
  40003. (is_between, ":center", castles_begin, castles_end),
  40004. (assign, ":weight", 6000),
  40005. (else_try),
  40006. (assign, ":weight", 1000),
  40007. (try_end),
  40008.  
  40009. (store_distance_to_party_from_party, ":distance", ":base_center", ":center"),
  40010. (val_add, ":distance", 10),
  40011. (val_div, ":weight", ":distance"),
  40012. (val_div, ":weight", ":distance"),
  40013.  
  40014. (store_faction_of_party, ":center_faction", ":center"),
  40015.  
  40016. (try_begin),
  40017. (eq, ":center_faction", ":faction"),
  40018.  
  40019. (assign, ":faction_has_base", 1),
  40020. (val_add, ":result_for_security", ":weight"),
  40021. (else_try),
  40022. (neq, ":center_faction", ":faction"),
  40023. (store_relation, ":center_relation", ":center_faction", ":faction"),
  40024.  
  40025. (try_begin), #potentially hostile center
  40026. (this_or_next|eq, ":liege_is_undeclared_rebel", 1),
  40027. (lt, ":center_relation", 0),
  40028. (val_div, ":weight", 2),
  40029. (else_try), #neutral center
  40030. (val_div, ":weight", 4),
  40031. (try_end),
  40032.  
  40033. (val_sub, ":result_for_security", ":weight"),
  40034. (try_end),
  40035. (try_end),
  40036.  
  40037.  
  40038. #if a faction controls no other centers, then there is a small bonus
  40039. (try_begin),
  40040. (eq, ":faction_has_base", 0),
  40041. (val_add, ":result_for_security", 20),
  40042. (try_begin),
  40043. (eq, "$cheat_mode", 2),
  40044. (display_message, "str_small_bonus_for_no_base"),
  40045. (try_end),
  40046. (try_end),
  40047. (val_clamp, ":result_for_security", -100, 100),
  40048.  
  40049.  
  40050. (assign, ":result_for_security_weighted", ":result_for_security"),
  40051. (try_begin),
  40052. (eq, ":lord_reputation", lrep_cunning),
  40053. (val_mul, ":result_for_security_weighted", 2),
  40054. (else_try),
  40055. (eq, ":lord_reputation", lrep_martial),
  40056. (val_div, ":result_for_security_weighted", 2),
  40057. (try_end),
  40058.  
  40059.  
  40060.  
  40061. #FACTOR 2 - INTERNAL FACTION POLITICS
  40062. #this is a calculation of how much influence the lord believes he will have in each faction
  40063. (assign, ":result_for_political", 0),
  40064.  
  40065. (try_for_range, ":loop_var", "trp_kingdom_heroes_including_player_begin", active_npcs_end),
  40066. (assign, ":kingdom_hero", ":loop_var"),
  40067.  
  40068. (this_or_next|troop_slot_eq, ":kingdom_hero", slot_troop_occupation, slto_kingdom_hero),
  40069. (this_or_next|eq, ":kingdom_hero", "trp_kingdom_heroes_including_player_begin"),
  40070. (is_between, ":kingdom_hero", pretenders_begin, pretenders_end),
  40071.  
  40072. (store_faction_of_troop, ":kingdom_hero_faction", ":kingdom_hero"),
  40073.  
  40074. (try_begin),
  40075. (eq, ":loop_var", "trp_kingdom_heroes_including_player_begin"),
  40076. (assign, ":kingdom_hero", "trp_player"),
  40077. (assign, ":kingdom_hero_faction", "$players_kingdom"),
  40078. (try_begin), #do not count player relation if the player is trying to suborn the character. this has the slight potential for a miscalculation, if the script is called from outside dialogs and $g_talk_troop has not been reset
  40079. (eq, "$g_talk_troop", ":troop"),
  40080. (store_faction_of_troop, ":cur_faction", ":troop"),
  40081. (eq, ":cur_faction", ":faction"),
  40082. (assign, ":kingdom_hero_faction", 0),
  40083. (try_end),
  40084. (try_end),
  40085.  
  40086. (eq, ":kingdom_hero_faction", ":faction"),
  40087. (neg|faction_slot_eq, ":kingdom_hero_faction", slot_faction_leader, ":kingdom_hero"),
  40088. (neq, ":liege_is_undeclared_rebel", 1),
  40089. (neg|is_between, ":kingdom_hero", pretenders_begin, pretenders_end),
  40090.  
  40091.  
  40092. (call_script, "script_troop_get_relation_with_troop", ":troop", ":kingdom_hero"),
  40093. (assign, ":troop_rel_w_hero", reg0),
  40094.  
  40095. (call_script, "script_troop_get_relation_with_troop", ":kingdom_hero", ":liege"),
  40096. (assign, ":hero_rel_w_liege", reg0),
  40097.  
  40098. (store_mul, ":lord_political_weight", ":troop_rel_w_hero", ":hero_rel_w_liege"),
  40099. (val_div, ":lord_political_weight", 100),
  40100.  
  40101. (try_begin),
  40102. (eq, "$cheat_mode", 2), #disabled
  40103. (eq, "$g_talk_troop", ":troop"),
  40104. (str_store_faction_name, s20, ":kingdom_hero_faction"),
  40105. (str_store_troop_name, s15, ":kingdom_hero"),
  40106. (assign, reg15, ":lord_political_weight"),
  40107. (display_message, "str_s15_considered_member_of_faction_s20_weight_of_reg15"),
  40108. (try_end),
  40109.  
  40110. (val_add, ":result_for_political", ":lord_political_weight"),
  40111. (try_end),
  40112.  
  40113. (val_clamp, ":result_for_political", -100, 101), #lords portion represents half
  40114.  
  40115. (try_begin),
  40116. (call_script, "script_troop_get_relation_with_troop", ":troop", ":liege"),
  40117. (assign, ":liege_relation", reg0),
  40118. (val_add, ":result_for_political", ":liege_relation"),
  40119. (try_end),
  40120.  
  40121. (val_div, ":result_for_political", 2),
  40122.  
  40123. (val_clamp, ":result_for_political", -100, 101), #liege portion represents half
  40124.  
  40125. (assign, ":result_for_political_weighted", ":result_for_political"),
  40126.  
  40127. (try_begin),
  40128. (this_or_next|eq, ":lord_reputation", lrep_goodnatured),
  40129. (eq, ":lord_reputation", lrep_quarrelsome),
  40130. (val_mul, ":result_for_political_weighted", 2),
  40131. (try_end),
  40132.  
  40133. #FACTOR 3 - PROMISES AND OTHER ANTICIPATED GAINS
  40134. #lord's calculation of anticipated gains
  40135. (assign, ":result_for_material", 0),
  40136. (assign, ":result_for_material_weighted", ":result_for_material"),
  40137.  
  40138.  
  40139. #FACTOR 4 - IDEOLOGY
  40140. #lord's calculation of ideological comfort
  40141. (try_begin),
  40142. #Originally, the argument section was not used for a non-player liege. Actually, it can be used
  40143. (eq, 1, 0),
  40144. (neq, ":liege", "trp_player"),
  40145. (neq, ":liege", "$supported_pretender"), #player is advocate for pretender
  40146. (assign, ":argument_strength", 0),
  40147. (assign, ":argument_appeal", 0),
  40148. (assign, ":result_for_argument", 0),
  40149. (else_try), #only if the recruitment candidate is either the player, or a supported pretender
  40150. (troop_get_slot, ":recruitment_argument", ":troop", slot_lord_recruitment_argument),
  40151.  
  40152. (call_script, "script_rebellion_arguments", ":troop", ":recruitment_argument", ":liege"),
  40153. (assign, ":argument_appeal", reg0),
  40154. (assign, ":argument_strength", reg1),
  40155.  
  40156. (store_add, ":result_for_argument", ":argument_appeal", ":argument_strength"),
  40157.  
  40158. (store_skill_level, ":player_persuasion_skill", "skl_persuasion", "trp_player"),
  40159. (try_begin),
  40160. (gt, ":result_for_argument", 0),
  40161. #make sure player is the one making the overture
  40162.  
  40163. #if player has 0 persuasion, ":result_for_argument" will be multiplied by 3/10.
  40164. (store_add, ":player_persuasion_skill_plus_5_mul_066", ":player_persuasion_skill", 5),
  40165. (val_mul, ":player_persuasion_skill_plus_5_mul_066", 2),
  40166. (val_div, ":player_persuasion_skill_plus_5_mul_066", 3),
  40167.  
  40168. (val_mul, ":result_for_argument", ":player_persuasion_skill_plus_5_mul_066"),
  40169. (val_div, ":result_for_argument", 10),
  40170. (else_try),
  40171. (lt, ":result_for_argument", 0),
  40172. (store_sub, ":ten_minus_player_persuasion_skill", 10, ":player_persuasion_skill"),
  40173. (val_mul, ":result_for_argument", ":ten_minus_player_persuasion_skill"),
  40174. (val_div, ":result_for_argument", 10),
  40175. (try_end),
  40176.  
  40177. (try_begin),
  40178. (neq, ":liege", "trp_player"),
  40179. (neq, ":liege", "$supported_pretender"), #player is advocate for pretender
  40180. (val_div, ":argument_strength", 2),
  40181. (val_div, ":argument_appeal", 2),
  40182. (val_div, ":result_for_argument", 2),
  40183. (try_end),
  40184.  
  40185. (try_end),
  40186.  
  40187. # (try_begin),
  40188. # (eq, ":lord_reputation", lrep_cunning),
  40189. # (val_div, ":result_for_ideological_weighted", 2),
  40190. # (else_try),
  40191. # (eq, ":lord_reputation", lrep_upstanding),
  40192. # (val_mul, ":result_for_ideological_weighted", 2),
  40193. # (try_end),
  40194.  
  40195.  
  40196. #FACTOR 5 - PENALTY FOR CHANGING SIDES
  40197. (try_begin), #no penalty for the incumbent
  40198. (store_faction_of_troop, ":cur_faction", ":troop"),
  40199. (eq, ":cur_faction", ":faction"),
  40200. (assign, ":penalty_for_changing_sides", 0),
  40201. (else_try), #penalty for the player
  40202. (eq, ":liege", "trp_player"),
  40203. (store_sub, ":penalty_for_changing_sides", 60, "$player_right_to_rule"),
  40204. (else_try), #same culture, such as a pretender
  40205. (troop_get_slot, ":orig_faction_of_lord", ":troop", slot_troop_original_faction),
  40206. (troop_get_slot, ":orig_faction_of_liege", ":liege", slot_troop_original_faction),
  40207. (eq, ":orig_faction_of_lord", ":orig_faction_of_liege"),
  40208. (assign, ":penalty_for_changing_sides", 10),
  40209. (else_try), #a liege from a different culture
  40210. (assign, ":penalty_for_changing_sides", 50),
  40211. (try_end),
  40212. (val_clamp, ":penalty_for_changing_sides", 0, 101),
  40213.  
  40214. (assign, ":penalty_for_changing_sides_weighted", ":penalty_for_changing_sides"),
  40215. (try_begin),
  40216. (eq, ":lord_reputation", lrep_debauched),
  40217. (val_div, ":penalty_for_changing_sides_weighted", 2),
  40218. (else_try),
  40219. (eq, ":lord_reputation", lrep_upstanding),
  40220. (val_mul, ":penalty_for_changing_sides_weighted", 2),
  40221. (try_end),
  40222.  
  40223.  
  40224.  
  40225. (assign, reg1, ":result_for_security"),
  40226. (assign, reg2, ":result_for_security_weighted"),
  40227. (assign, reg3, ":result_for_political"),
  40228. (assign, reg4, ":result_for_political_weighted"),
  40229. (assign, reg5, ":result_for_material"),
  40230. (assign, reg6, ":result_for_material_weighted"),
  40231. (assign, reg7, ":argument_strength"),
  40232. (assign, reg17, ":argument_appeal"),
  40233.  
  40234. (assign, reg8, ":result_for_argument"),
  40235. (assign, reg9, ":penalty_for_changing_sides"),
  40236. (assign, reg10, ":penalty_for_changing_sides_weighted"),
  40237.  
  40238.  
  40239. (try_begin),
  40240. (eq, "$cheat_mode", 1),
  40241. (eq, "$g_talk_troop", ":troop"),
  40242. (str_store_troop_name, s20, ":troop"),
  40243. (str_store_faction_name, s21, ":faction"),
  40244. (str_store_troop_name, s22, ":liege"),
  40245.  
  40246. (display_message, "@{!}G_talk_troop {s20} evaluates being vassal to {s22} of {s21}"),
  40247.  
  40248. (display_message, "str_base_result_for_security_reg1"),
  40249. (display_message, "str_result_for_security_weighted_by_personality_reg2"),
  40250. (display_message, "str_base_result_for_political_connections_reg3"),
  40251. (display_message, "str_result_for_political_connections_weighted_by_personality_reg4"),
  40252. # (display_message, "@{!}Result for anticipated_gains: {reg5}"),
  40253. # (display_message, "@{!}Result for anticipated_gains weighted by personality: {reg6}"),
  40254.  
  40255. (try_begin),
  40256. (this_or_next|eq, ":liege", "trp_player"),
  40257. (eq, ":liege", "$supported_pretender"), #player is advocate for pretender
  40258. (display_message, "str_result_for_argument_strength_reg7"),
  40259. (display_message, "str_result_for_argument_appeal_reg17"),
  40260. (display_message, "str_combined_result_for_argument_modified_by_persuasion_reg8"),
  40261. (try_end),
  40262. (display_message, "str_base_changing_sides_penalty_reg9"),
  40263. (display_message, "str_changing_sides_penalty_weighted_by_personality_reg10"),
  40264. (try_end),
  40265.  
  40266. (store_add, ":total", ":result_for_security_weighted", ":result_for_political_weighted"),
  40267. (val_add, ":total", ":result_for_material_weighted"),
  40268. (val_add, ":total", ":result_for_argument"),
  40269. (val_sub, ":total", ":penalty_for_changing_sides_weighted"),
  40270.  
  40271.  
  40272. (assign, reg0, ":total"),
  40273.  
  40274. (try_begin),
  40275. (eq, "$cheat_mode", 2),
  40276. (display_message, "@{!}DEBUG -- Analyzing lord allegiances, combined bonuses and penalties = {reg0}"),
  40277. #(display_message, "str_combined_bonuses_and_penalties_=_reg0"),
  40278. (try_end),
  40279. ]),
  40280.  
  40281.  
  40282.  
  40283. ("cf_troop_can_intrigue",
  40284. #This script should be called from dialogs, and also prior to any event which might result in a lord changing sides
  40285. [
  40286. (store_script_param, ":troop", 1),
  40287. (store_script_param, ":skip_player_party", 2),
  40288.  
  40289. (troop_get_slot, ":led_party_1", ":troop", slot_troop_leaded_party),
  40290. (party_is_active, ":led_party_1"),
  40291.  
  40292. (try_begin),
  40293. (eq, "$cheat_mode", 1),
  40294. (eq, ":troop", "$g_talk_troop"),
  40295. (display_message, "str_intrigue_test_troop_party_is_active"),
  40296. (try_end),
  40297.  
  40298. (party_get_battle_opponent, ":battle_opponent", ":led_party_1"),
  40299. (le, ":battle_opponent", 0), #battle opponent can be 0 for an attached party?
  40300.  
  40301. (try_begin),
  40302. (eq, "$cheat_mode", 1),
  40303. (eq, ":troop", "$g_talk_troop"),
  40304. (display_message, "str_intrigue_test_troop_party_is_not_in_battle"),
  40305. (try_end),
  40306.  
  40307. (troop_slot_eq, ":troop", slot_troop_prisoner_of_party, -1),
  40308.  
  40309. (try_begin),
  40310. (eq, "$cheat_mode", 1),
  40311. (eq, ":troop", "$g_talk_troop"),
  40312. (display_message, "str_intrigue_test_troop_is_not_prisoner"),
  40313. (try_end),
  40314.  
  40315. (party_get_attached_to, ":led_party_1_attached", ":led_party_1"),
  40316.  
  40317. (store_faction_of_party, ":led_party_1_faction", ":led_party_1"),
  40318.  
  40319. (assign, ":other_lords_nearby", 0),
  40320. (try_for_range, ":troop_2", active_npcs_begin, active_npcs_end),
  40321. (neq, ":troop", ":troop_2"),
  40322. (eq, ":other_lords_nearby", 0),
  40323.  
  40324. (troop_slot_eq, ":troop_2", slot_troop_occupation, slto_kingdom_hero),
  40325.  
  40326. (troop_get_slot, ":led_party_2", ":troop_2", slot_troop_leaded_party),
  40327. (party_is_active, ":led_party_2"),
  40328. (neq, ":led_party_1", ":led_party_2"),
  40329.  
  40330. (store_faction_of_party, ":led_party_2_faction", ":led_party_2"),
  40331. (eq, ":led_party_1_faction", ":led_party_2_faction"),
  40332.  
  40333. (try_begin),
  40334. (eq, ":led_party_1_attached", -1),
  40335. (store_distance_to_party_from_party, ":distance", ":led_party_1", ":led_party_2"),
  40336. (lt, ":distance", 3),
  40337. (assign, ":other_lords_nearby", 1),
  40338. (else_try),
  40339. (is_between, ":led_party_1_attached", walled_centers_begin, walled_centers_end),
  40340. (party_get_attached_to, ":led_party_2_attached", ":led_party_2"),
  40341. (eq, ":led_party_1_attached", ":led_party_2_attached"),
  40342. (assign, ":other_lords_nearby", 1),
  40343. (try_end),
  40344. (try_end),
  40345.  
  40346. (try_begin),
  40347. (eq, "$cheat_mode", 1),
  40348. (eq, ":troop", "$g_talk_troop"),
  40349. (display_message, "str_intrigue_test_troop_is_nearby"),
  40350. (try_end),
  40351.  
  40352. (try_begin),
  40353. (eq, ":skip_player_party", 0),
  40354. #temporary spot
  40355. (try_end),
  40356.  
  40357. (eq, ":other_lords_nearby", 0),
  40358. ]),
  40359.  
  40360.  
  40361. ("troop_change_relation_with_troop",
  40362. [
  40363. (store_script_param, ":troop1", 1),
  40364. (store_script_param, ":troop2", 2),
  40365. (store_script_param, ":amount", 3),
  40366.  
  40367. (try_begin),
  40368. (eq, ":troop1", "trp_player"),
  40369. (call_script, "script_change_player_relation_with_troop", ":troop2", ":amount"),
  40370. (else_try),
  40371. (eq, ":troop2", "trp_player"),
  40372. (call_script, "script_change_player_relation_with_troop", ":troop1", ":amount"),
  40373. (else_try),
  40374. (eq, ":troop1", ":troop2"),
  40375.  
  40376. (else_try),
  40377. (call_script, "script_troop_get_relation_with_troop", ":troop1", ":troop2"),
  40378. (store_add, ":new_relation", reg0, ":amount"),
  40379.  
  40380. (val_clamp, ":new_relation", -100, 101),
  40381.  
  40382. (try_begin),
  40383. (eq, ":new_relation", 0),
  40384. (assign, ":new_relation", 1), #this removes the need for a separate "met" slot - any non-zero relation will be a met
  40385. (try_end),
  40386.  
  40387. (store_add, ":troop1_slot_for_troop2", ":troop2", slot_troop_relations_begin),
  40388. (troop_set_slot, ":troop1", ":troop1_slot_for_troop2", ":new_relation"),
  40389.  
  40390. (store_add, ":troop2_slot_for_troop1", ":troop1", slot_troop_relations_begin),
  40391. (troop_set_slot, ":troop2", ":troop2_slot_for_troop1", ":new_relation"),
  40392. (try_end),
  40393.  
  40394.  
  40395. (try_begin), #generate controversy if troops are in the same faciton
  40396. (lt, ":amount", -5),
  40397. (try_begin),
  40398. (eq, ":troop1", "trp_player"),
  40399. (assign, ":faction1", "$players_kingdom"),
  40400. (else_try),
  40401. (store_faction_of_troop, ":faction1", ":troop1"),
  40402. (try_end),
  40403. (try_begin),
  40404. (eq, ":troop2", "trp_player"),
  40405. (assign, ":faction2", "$players_kingdom"),
  40406. (else_try),
  40407. (store_faction_of_troop, ":faction2", ":troop2"),
  40408. (try_end),
  40409. (eq, ":faction1", ":faction2"),
  40410. (is_between, ":faction1", kingdoms_begin, kingdoms_end),
  40411.  
  40412. (store_mul, ":controversy_generated", ":amount", -1),
  40413.  
  40414. (troop_get_slot, ":controversy1", ":troop1", slot_troop_controversy),
  40415. (val_add, ":controversy1", ":controversy_generated"),
  40416. (val_min, ":controversy1", 100),
  40417. (troop_set_slot, ":troop1", slot_troop_controversy, ":controversy1"),
  40418.  
  40419. (troop_get_slot, ":controversy2", ":troop2", slot_troop_controversy),
  40420. (val_add, ":controversy2", ":controversy_generated"),
  40421. (val_min, ":controversy2", 100),
  40422. (troop_set_slot, ":troop2", slot_troop_controversy, ":controversy2"),
  40423.  
  40424. (try_end),
  40425.  
  40426. (try_begin),
  40427. (is_between, ":troop1", active_npcs_begin, active_npcs_end),
  40428. (is_between, ":troop2", active_npcs_begin, active_npcs_end),
  40429. (neq, ":troop1", ":troop2"),
  40430.  
  40431. (try_begin),
  40432. (gt, ":amount", 0),
  40433. (val_add, "$total_relation_adds", ":amount"),
  40434. (else_try),
  40435. (val_sub, "$total_relation_subs", ":amount"),
  40436. (try_end),
  40437. (try_end),
  40438.  
  40439. (try_begin),
  40440. (eq, "$cheat_mode", 4), #change back to 4
  40441.  
  40442. (is_between, ":troop1", active_npcs_begin, active_npcs_end),
  40443. (is_between, ":troop2", active_npcs_begin, active_npcs_end),
  40444. (neq, ":troop1", ":troop2"),
  40445.  
  40446. (str_store_troop_name, s20, ":troop1"),
  40447. (str_store_troop_name, s15, ":troop2"),
  40448. (assign, reg4, ":amount"),
  40449. (assign, reg14, ":new_relation"),
  40450. (display_message, "str_s20_relation_with_s15_changed_by_reg4_to_reg14"),
  40451.  
  40452. (assign, reg4, "$total_relation_adds"),
  40453. (display_message, "str_total_additions_reg4"),
  40454. (assign, reg4, "$total_relation_subs"),
  40455. (display_message, "str_total_subtractions_reg4"),
  40456.  
  40457. (assign, reg4, "$total_courtship_quarrel_changes"),
  40458. (display_message, "@{!}DEBUG -- Total courtship quarrel changes: {reg4}"),
  40459.  
  40460. (assign, reg4, "$total_random_quarrel_changes"),
  40461. (display_message, "@{!}DEBUG -- Total random quarrel changes: {reg4}"),
  40462.  
  40463. (assign, reg4, "$total_battle_ally_changes"),
  40464. (display_message, "@{!}DEBUG -- Total battle changes for allies: {reg4}"),
  40465.  
  40466. (assign, reg4, "$total_battle_enemy_changes"),
  40467. (display_message, "@{!}DEBUG -- Total battle changes for enemies: {reg4}"),
  40468.  
  40469. (assign, reg4, "$total_promotion_changes"),
  40470. (display_message, "@{!}DEBUG -- Total promotion changes: {reg4}"),
  40471.  
  40472. (assign, reg4, "$total_feast_changes"),
  40473. (display_message, "@{!}DEBUG -- Total feast changes: {reg4}"),
  40474.  
  40475. (assign, reg4, "$total_policy_dispute_changes"),
  40476. (assign, reg5, "$number_of_controversial_policy_decisions"),
  40477. (display_message, "@{!}DEBUG -- Total policy dispute changes: {reg4} from {reg5} decisions"),
  40478.  
  40479. (assign, reg4, "$total_indictment_changes"),
  40480. (display_message, "@{!}DEBUG -- Total faction switch changes: {reg4}"),
  40481.  
  40482. (assign, reg4, "$total_no_fief_changes"),
  40483. (display_message, "@{!}DEBUG -- Total no fief changes: {reg4}"),
  40484.  
  40485. (assign, reg4, "$total_relation_changes_through_convergence"),
  40486. (display_message, "@{!}DEBUG -- Total changes through convergence: {reg4}"),
  40487.  
  40488. (assign, reg4, "$total_vassal_days_responding_to_campaign"),
  40489. (display_message, "@{!}DEBUG -- Total vassal responses to campaign: {reg4}"),
  40490.  
  40491. (assign, reg4, "$total_vassal_days_on_campaign"),
  40492. (display_message, "@{!}DEBUG -- Total vassal campaign days: {reg4}"),
  40493.  
  40494. (val_max, "$total_vassal_days_on_campaign", 1),
  40495. (store_mul, ":response_rate", "$total_vassal_days_responding_to_campaign", 100),
  40496. (val_div, ":response_rate", "$total_vassal_days_on_campaign"),
  40497. (assign, reg4, ":response_rate"),
  40498. (display_message, "@{!}DEBUG -- Vassal response rate: {reg4}"),
  40499.  
  40500.  
  40501.  
  40502. # (assign, reg4, "$total_joy_battle_changes"),
  40503. # (display_message, "@{!}DEBUG -- Total joy of battle changes"),
  40504.  
  40505. (try_end),
  40506.  
  40507. ]),
  40508.  
  40509.  
  40510. ("troop_get_relation_with_troop",
  40511. [
  40512. (store_script_param, ":troop1", 1),
  40513. (store_script_param, ":troop2", 2),
  40514.  
  40515. (assign, ":relation", 0),
  40516. (try_begin),
  40517. (this_or_next|eq, ":troop1", -1),
  40518. (eq, ":troop2", -1),
  40519.  
  40520. #Possibly switch to relation with liege
  40521. (assign, ":relation", 0),
  40522. (else_try),
  40523. (eq, ":troop1", "trp_player"),
  40524. (call_script, "script_troop_get_player_relation", ":troop2"),
  40525. (assign, ":relation", reg0),
  40526. (else_try),
  40527. (eq, ":troop2", "trp_player"),
  40528. (call_script, "script_troop_get_player_relation", ":troop1"),
  40529. (assign, ":relation", reg0),
  40530. (else_try),
  40531. (store_add, ":troop1_slot_for_troop2", ":troop2", slot_troop_relations_begin),
  40532. (troop_get_slot, ":relation", ":troop1", ":troop1_slot_for_troop2"),
  40533. (try_end),
  40534.  
  40535.  
  40536. (val_clamp, ":relation", -100, 101),
  40537. (assign, reg0, ":relation"),
  40538.  
  40539. ]),
  40540.  
  40541.  
  40542.  
  40543. ("appoint_faction_marshall",
  40544. [
  40545. (store_script_param, ":faction_no", 1),
  40546. (store_script_param, ":faction_marshall", 2),
  40547.  
  40548.  
  40549. (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  40550. (faction_get_slot, ":old_marshall", ":faction_no", slot_faction_marshall),
  40551.  
  40552. (faction_set_slot, ":faction_no", slot_faction_marshall, ":faction_marshall"),
  40553.  
  40554. (try_begin),
  40555. (ge, ":old_marshall", 0),
  40556. (troop_get_slot, ":old_marshall_party", ":old_marshall", slot_troop_leaded_party),
  40557. (party_is_active, ":old_marshall_party"),
  40558. (party_set_marshall, ":old_marshall_party", 0),
  40559. (try_end),
  40560.  
  40561.  
  40562. (try_begin),
  40563. (ge, ":faction_marshall", 0),
  40564. (troop_get_slot, ":new_marshall_party", ":faction_marshall", slot_troop_leaded_party),
  40565. (party_is_active, ":new_marshall_party"),
  40566. (party_set_marshall,":new_marshall_party", 1),
  40567. (try_end),
  40568.  
  40569.  
  40570. (try_begin),
  40571. (neq, ":faction_marshall", ":faction_leader"),
  40572. (neq, ":faction_marshall", ":old_marshall"),
  40573. (this_or_next|eq, ":faction_marshall", "trp_player"),
  40574. (is_between, ":faction_marshall", active_npcs_begin, active_npcs_end),
  40575.  
  40576. (this_or_next|neq, ":faction_no", "fac_player_supporters_faction"),
  40577. (neg|check_quest_active, "qst_rebel_against_kingdom"),
  40578.  
  40579. (try_begin),
  40580. (eq, "$cheat_mode", 1),
  40581. (str_store_faction_name, s15, ":faction_no"),
  40582. (display_message, "str_checking_lord_reactions_in_s15"),
  40583. (try_end),
  40584.  
  40585.  
  40586. (call_script, "script_troop_change_relation_with_troop", ":faction_marshall", ":faction_leader", 5),
  40587. (val_add, "$total_promotion_changes", 5),
  40588.  
  40589. (try_for_range, ":lord", active_npcs_begin, active_npcs_end),
  40590. (troop_slot_eq, ":lord", slot_troop_occupation, slto_kingdom_hero),
  40591. (store_faction_of_troop, ":lord_faction", ":lord"),
  40592. (eq, ":lord_faction", ":faction_no"),
  40593.  
  40594. (neq, ":lord", ":faction_marshall"),
  40595. (neq, ":lord", ":faction_leader"),
  40596.  
  40597. (call_script, "script_troop_get_relation_with_troop", ":faction_marshall", ":lord"),
  40598. # (try_begin),
  40599. # (eq, "$cheat_mode", 1),
  40600. # (str_store_troop_name, s14, ":lord"),
  40601. # (str_store_troop_name, s17, ":faction_marshall"),
  40602. # (display_message, "@{!}{s14}'s relation with {s17} is {reg0}"),
  40603. # (try_end),
  40604. (store_sub, ":adjust_relations", reg0, 10),
  40605. (val_div, ":adjust_relations", 15),
  40606. (neq, ":adjust_relations", 0),
  40607.  
  40608. #Not negatively affected if they favored the lord
  40609. (try_begin),
  40610. (troop_slot_eq, ":lord", slot_troop_stance_on_faction_issue, ":faction_marshall"),
  40611. (val_add, ":adjust_relations", 1),
  40612. (val_max, ":adjust_relations", 0),
  40613. (try_end),
  40614.  
  40615. (call_script, "script_troop_change_relation_with_troop", ":faction_leader", ":lord", ":adjust_relations"),
  40616. (val_add, "$total_promotion_changes", ":adjust_relations"),
  40617.  
  40618. (lt, ":adjust_relations", -2),
  40619. (store_random_in_range, ":random", 1, 10),
  40620.  
  40621. (val_add, ":adjust_relations", ":random"),
  40622.  
  40623. (lt, ":adjust_relations", 0),
  40624.  
  40625. (str_store_troop_name, s14, ":lord"),
  40626. (str_store_troop_name, s15, ":faction_marshall"),
  40627.  
  40628. (try_begin),
  40629. (eq, "$cheat_mode", 1),
  40630. (display_message, "str_s14_protests_the_appointment_of_s15_as_marshall"),
  40631. (try_end),
  40632.  
  40633. (call_script, "script_troop_change_relation_with_troop", ":faction_leader", ":lord", -10),
  40634. (call_script, "script_troop_change_relation_with_troop", ":faction_marshall", ":lord", -5),
  40635. (val_add, "$total_promotion_changes", -15),
  40636.  
  40637. (call_script, "script_add_log_entry", logent_lord_protests_marshall_appointment, ":lord", ":faction_marshall", ":faction_leader", "$g_encountered_party_faction"),
  40638.  
  40639. (try_end),
  40640. (try_end),
  40641.  
  40642. ]),
  40643.  
  40644. #it might be easier to monitor whether prices are following an intuitive pattern if we separate production from consumption
  40645. #the current system still works very well, however
  40646. ("center_get_item_consumption",
  40647. [
  40648. ]),
  40649.  
  40650. ("locate_player_minister", #maybe deprecate this
  40651. [
  40652.  
  40653. (assign, ":walled_center_found", 0),
  40654. (try_for_range, ":walled_center", walled_centers_begin, walled_centers_end),
  40655. (lt, ":walled_center_found", centers_begin),
  40656. (store_faction_of_party, ":walled_center_faction", ":walled_center"),
  40657. (eq, ":walled_center_faction", "fac_player_supporters_faction"),
  40658. (neg|party_slot_ge, ":walled_center", slot_town_lord, active_npcs_begin), #ie, player or a reserved slot
  40659. (assign, ":walled_center_found", ":walled_center"),
  40660. (try_end),
  40661.  
  40662. (troop_get_slot, ":old_location", "$g_player_minister", slot_troop_cur_center),
  40663. (troop_set_slot, "$g_player_minister", slot_troop_cur_center, ":walled_center_found"),
  40664.  
  40665. (try_begin),
  40666. (neq, ":old_location", ":walled_center"),
  40667. (str_store_party_name, s10, ":walled_center"),
  40668. (str_store_troop_name, s11, "$g_player_minister"),
  40669. (display_message, "str_s11_relocates_to_s10"),
  40670. (try_end),
  40671.  
  40672. ]),
  40673.  
  40674.  
  40675. ("lord_get_home_center",
  40676. [
  40677. (store_script_param, ":troop_no", 1),
  40678. (assign, ":result", -1),
  40679.  
  40680. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  40681. (eq, ":result", -1),
  40682. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  40683. (assign, ":result", ":center_no"),
  40684. (try_end),
  40685.  
  40686. #NOTE : In old code if a lord has no walled center then home city of this lord is assigning to
  40687. #faction leader's home city. Now I changed this to assign home cities more logical and homogeneous.
  40688. #In new code if a lord has no walled center then his home city becomes his village's border_city.
  40689. #This means his home city becomes owner city of his village. If he has no village then as last change
  40690. #his home city become faction leader's home city.
  40691. (try_begin),
  40692. (eq, ":result", -1),
  40693. (try_for_range, ":center_no", centers_begin, centers_end),
  40694. (eq, ":result", -1),
  40695. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  40696.  
  40697. (try_begin),
  40698. (neg|is_between, ":center_no", walled_centers_begin, walled_centers_end),
  40699. (party_get_slot, ":bound_center", ":center_no", slot_village_bound_center),
  40700. (assign, ":result", ":bound_center"),
  40701. (try_end),
  40702. (try_end),
  40703. (try_end),
  40704.  
  40705. #If lord has no walled center and is player faction, then assign player court
  40706. (try_begin),
  40707. (eq, ":result", -1),
  40708. (store_faction_of_troop, ":faction_no", ":troop_no"),
  40709. (eq, ":faction_no", "fac_player_supporters_faction"),
  40710. (is_between, "$g_player_court", walled_centers_begin, walled_centers_end),
  40711. (store_faction_of_party, ":player_court_faction", "$g_player_court"),
  40712. (eq, ":player_court_faction", "fac_player_supporters_faction"),
  40713.  
  40714. (assign, ":result", "$g_player_court"),
  40715. (try_end),
  40716.  
  40717. #If lord has no walled center and any not walled village then assign faction capital
  40718. (try_begin),
  40719. (eq, ":result", -1),
  40720. (store_faction_of_troop, ":faction_no", ":troop_no"),
  40721. (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  40722. (neq, ":troop_no", ":faction_leader"),
  40723. (call_script, "script_lord_get_home_center", ":faction_leader"),
  40724. (gt, reg0, -1),
  40725. (assign, ":result", reg0),
  40726. (try_end),
  40727.  
  40728. #Any center of the faction
  40729. (try_begin),
  40730. (eq, ":result", -1),
  40731. (store_faction_of_troop, ":faction_no", ":troop_no"),
  40732.  
  40733. (try_for_range, ":walled_center", walled_centers_begin, walled_centers_end),
  40734. (eq, ":result", -1),
  40735.  
  40736. (store_faction_of_party, ":center_faction", ":walled_center"),
  40737. (eq, ":faction_no", ":center_faction"),
  40738. (assign, ":result", ":walled_center"),
  40739. (try_end),
  40740. (try_end),
  40741.  
  40742.  
  40743.  
  40744. (assign, reg0, ":result"),
  40745. ]),
  40746.  
  40747.  
  40748.  
  40749.  
  40750. ("get_kingdom_lady_social_determinants", #Calradian society is rather patriarchal, at least among the upper classes
  40751. [
  40752. (store_script_param, ":kingdom_lady", 1),
  40753.  
  40754. (store_faction_of_troop, ":faction_of_lady", ":kingdom_lady"),
  40755. (assign, ":center", -1),
  40756. (assign, ":closest_male_relative", -1),
  40757. (assign, ":best_center_score", 0),
  40758.  
  40759. (try_begin),
  40760. (troop_slot_ge, ":kingdom_lady", slot_troop_spouse, 0),
  40761. (troop_get_slot, ":closest_male_relative", ":kingdom_lady", slot_troop_spouse),
  40762. (else_try),
  40763. (troop_slot_ge, ":kingdom_lady", slot_troop_father, 0),
  40764. (troop_get_slot, ":closest_male_relative", ":kingdom_lady", slot_troop_father),
  40765. (else_try),
  40766. (troop_slot_ge, ":kingdom_lady", slot_troop_guardian, 0),
  40767. (troop_get_slot, ":closest_male_relative", ":kingdom_lady", slot_troop_guardian),
  40768. (try_end),
  40769.  
  40770.  
  40771. (try_begin), #if ongoing social event (maybe add if not besieged)
  40772. (faction_slot_eq, ":faction_of_lady", slot_faction_ai_state, sfai_feast),
  40773. (faction_get_slot, ":feast_center", ":faction_of_lady", slot_faction_ai_object),
  40774.  
  40775. (gt, ":closest_male_relative", -1),
  40776. (troop_get_slot, ":closest_male_party", ":closest_male_relative", slot_troop_leaded_party),
  40777. (party_is_active, ":closest_male_party"),
  40778. (party_get_attached_to, ":closest_male_cur_location", ":closest_male_party"),
  40779.  
  40780. (eq, ":closest_male_cur_location", ":feast_center"),
  40781. (is_between, ":feast_center", walled_centers_begin, walled_centers_end),
  40782.  
  40783. (assign, ":center", ":feast_center"),
  40784.  
  40785. (else_try),
  40786. (troop_slot_eq, "trp_player", slot_troop_spouse, ":kingdom_lady"),
  40787. (is_between, "$g_player_court", walled_centers_begin, walled_centers_end),
  40788. (assign, ":center", "$g_player_court"),
  40789.  
  40790. (else_try),
  40791. (try_for_range, ":walled_center", walled_centers_begin, walled_centers_end),
  40792. (store_faction_of_party, ":walled_center_faction", ":walled_center"),
  40793. (this_or_next|eq, ":faction_of_lady", ":walled_center_faction"),
  40794. (neg|is_between, ":faction_of_lady", kingdoms_begin, kingdoms_end), #lady married to a player without a faction
  40795.  
  40796. (party_get_slot, ":castle_lord", ":walled_center", slot_town_lord),
  40797.  
  40798. (gt, ":castle_lord", -1),
  40799.  
  40800. (call_script, "script_troop_get_family_relation_to_troop", ":kingdom_lady", ":castle_lord"),
  40801.  
  40802. (try_begin),
  40803. (this_or_next|is_between, ":faction_of_lady", kingdoms_begin, kingdoms_end),
  40804. (troop_slot_eq, "trp_player", slot_troop_spouse, ":kingdom_lady"),
  40805.  
  40806. (faction_slot_eq, ":faction_of_lady", slot_faction_leader, ":castle_lord"),
  40807. (val_max, reg0, 1),
  40808. (try_end),
  40809.  
  40810. (try_begin),
  40811. (eq, "$cheat_mode", 2),
  40812. (str_store_troop_name, s3, ":kingdom_lady"),
  40813. (str_store_troop_name, s4, ":castle_lord"),
  40814. (str_store_party_name, s5, ":walled_center"),
  40815. (display_message, "str_checking_s3_at_s5_with_s11_relationship_with_s4_score_reg0"),
  40816. (str_clear, s11),
  40817. (try_end),
  40818.  
  40819. (gt, reg0, ":best_center_score"),
  40820.  
  40821. (assign, ":best_center_score", reg0),
  40822. (assign, ":center", ":walled_center"),
  40823.  
  40824.  
  40825. (try_end),
  40826. (try_end),
  40827.  
  40828. (assign, reg0, ":closest_male_relative"),
  40829. (assign, reg1, ":center"),
  40830.  
  40831.  
  40832. ]),
  40833.  
  40834.  
  40835. #This is probably unnecessarily complicated, but can support a multi-generational mod
  40836. ("age_troop_one_year",
  40837. [
  40838. (store_script_param, ":troop_no", 1),
  40839.  
  40840. (troop_get_type, ":is_female", ":troop_no"),
  40841.  
  40842. (troop_get_slot, ":age", ":troop_no", slot_troop_age),
  40843. (troop_get_slot, ":appearance", ":troop_no", slot_troop_age_appearance),
  40844.  
  40845. (val_add, ":age", 1),
  40846. (store_random_in_range, ":addition", 1, 5),
  40847.  
  40848. (try_begin),
  40849. (eq, ":is_female", 1),
  40850. # (val_add, ":addition", 2), #the women's age slider seems to produce less change than the male one - commented out: makes women look too old.
  40851. (try_end),
  40852.  
  40853. (val_add, ":appearance", ":addition"),
  40854. (try_begin),
  40855. (gt, ":age", 45),
  40856. (store_attribute_level, ":strength", ":troop_no", ca_strength),
  40857. (store_attribute_level, ":agility", ":troop_no", ca_agility),
  40858. (store_random_in_range, ":random", 0, 50), #2% loss brings it down to about 36% by age 90, but of course can be counteracted by new level gain
  40859. (try_begin),
  40860. (lt, ":random", ":strength"),
  40861. (troop_raise_attribute, ":troop_no", ca_strength, -1),
  40862. (try_end),
  40863. (try_begin),
  40864. (lt, ":random", ":agility"),
  40865. (troop_raise_attribute, ":troop_no", ca_agility, -1),
  40866. (try_end),
  40867. (try_end),
  40868.  
  40869. (val_clamp, ":appearance", 1, 100),
  40870.  
  40871. (troop_set_slot, ":troop_no", slot_troop_age, ":age"),
  40872. (troop_set_slot, ":troop_no", slot_troop_age_appearance, ":appearance"),
  40873. (troop_set_age, ":troop_no", ":appearance"),
  40874. ]),
  40875.  
  40876.  
  40877. ("add_lady_items",
  40878. [
  40879. (store_script_param, ":lady_no", 1),
  40880. (troop_equip_items, ":lady_no"),
  40881.  
  40882. (store_faction_of_troop, ":faction_no", ":lady_no"),
  40883.  
  40884. (store_random_in_range, ":random", 0, 6),
  40885.  
  40886. (try_begin), #assign clothes
  40887. (this_or_next|troop_slot_eq, ":lady_no", slot_lord_reputation_type, lrep_adventurous),
  40888. (troop_slot_eq, ":lady_no", slot_lord_reputation_type, lrep_ambitious),
  40889.  
  40890. (this_or_next|troop_slot_eq, ":lady_no", slot_lord_reputation_type, lrep_adventurous),
  40891. (lt, ":random", 2),
  40892.  
  40893. (neg|troop_slot_ge, ":lady_no", slot_troop_age, 40),
  40894. (try_begin),
  40895. (eq, ":faction_no", "fac_kingdom_2"),
  40896. (lt, ":random", 4),
  40897. (troop_add_item, ":lady_no", "itm_fur_coat", 0),
  40898. (else_try),
  40899. (eq, ":faction_no", "fac_kingdom_3"),
  40900. (lt, ":random", 3),
  40901. (troop_add_item, ":lady_no", "itm_nomad_robe", 0),
  40902. (else_try),
  40903. (troop_add_item, ":lady_no", "itm_nomad_vest", 0),
  40904. (try_end),
  40905. (else_try),
  40906. (eq, ":faction_no", "fac_kingdom_1"),
  40907. (try_begin),
  40908. (lt, ":random", 2),
  40909. (troop_add_item, ":lady_no", "itm_lady_dress_ruby", 0),
  40910. (else_try),
  40911. (lt, ":random", 4),
  40912. (troop_add_item, ":lady_no", "itm_lady_dress_green", 0),
  40913. (else_try),
  40914. (troop_add_item, ":lady_no", "itm_lady_dress_blue", 0),
  40915. (try_end),
  40916. (else_try),
  40917. (eq, ":faction_no", "fac_kingdom_2"),
  40918. (try_begin),
  40919. (eq, ":random", 0),
  40920. (troop_add_item, ":lady_no", "itm_blue_dress", 0),
  40921. (else_try),
  40922. (eq, ":random", 1),
  40923. (troop_add_item, ":lady_no", "itm_lady_dress_green", 0),
  40924. (else_try),
  40925. (eq, ":random", 2),
  40926. (troop_add_item, ":lady_no", "itm_lady_dress_blue", 0),
  40927. (else_try),
  40928. (lt, ":random", 5),
  40929. (neg|troop_slot_eq, ":lady_no", slot_lord_reputation_type, lrep_conventional),
  40930. (neg|troop_slot_eq, ":lady_no", slot_lord_reputation_type, lrep_ambitious),
  40931. (troop_add_item, ":lady_no", "itm_peasant_dress", 0),
  40932. (else_try),
  40933. (lt, ":random", 5),
  40934. (troop_add_item, ":lady_no", "itm_lady_dress_ruby", 0),
  40935. (else_try),
  40936. (troop_add_item, ":lady_no", "itm_court_dress", 0),
  40937. (try_end),
  40938.  
  40939. (else_try),
  40940. (eq, ":faction_no", "fac_kingdom_3"),
  40941. (troop_add_item, ":lady_no", "itm_khergit_lady_dress", 0),
  40942.  
  40943. (else_try),
  40944. (eq, ":faction_no", "fac_kingdom_4"),
  40945.  
  40946. (else_try),
  40947. (eq, ":faction_no", "fac_kingdom_5"),
  40948.  
  40949.  
  40950. (try_end),
  40951. (troop_equip_items, ":lady_no"),
  40952.  
  40953. #also available:
  40954. #itm_blue_dress
  40955. #itm_court_dress
  40956.  
  40957. #to add for khergits -- salwar/shalvar?
  40958. #western tang costume (p105, china's golden age)
  40959. #kipchak woman from russia book
  40960.  
  40961. (try_begin), #assign headguear matched to item
  40962. (this_or_next|troop_has_item_equipped, ":lady_no", "itm_nomad_vest"),
  40963. (this_or_next|troop_has_item_equipped, ":lady_no", "itm_fur_coat"),
  40964. (troop_has_item_equipped, ":lady_no", "itm_nomad_robe"),
  40965.  
  40966. #assign no headgear
  40967. (else_try),
  40968. (this_or_next|troop_slot_eq, ":lady_no", slot_lord_reputation_type, lrep_moralist),
  40969. (this_or_next|troop_slot_eq, ":lady_no", slot_lord_reputation_type, lrep_conventional),
  40970. (lt, ":random", 2),
  40971.  
  40972.  
  40973. (try_begin),
  40974. (troop_has_item_equipped, ":lady_no", "itm_khergit_lady_dress"),
  40975. (troop_add_item, ":lady_no", "itm_khergit_lady_hat", 0),
  40976.  
  40977. (else_try),
  40978. (troop_has_item_equipped, ":lady_no", "itm_lady_dress_ruby"),
  40979. (troop_add_item, ":lady_no", "itm_turret_hat_ruby", 0),
  40980.  
  40981. (str_store_troop_name, s4, ":lady_no"),
  40982. # (display_message, "@Giving ruby turret hat to {s4}"),
  40983. (else_try),
  40984. (troop_has_item_equipped, ":lady_no", "itm_lady_dress_blue"),
  40985. (troop_add_item, ":lady_no", "itm_turret_hat_blue", 0),
  40986.  
  40987. (str_store_troop_name, s4, ":lady_no"),
  40988. # (display_message, "@Giving blue turret hat to {s4}"),
  40989. (else_try),
  40990. (troop_has_item_equipped, ":lady_no", "itm_lady_dress_green"),
  40991. (troop_add_item, ":lady_no", "itm_turret_hat_green", 0),
  40992.  
  40993. (str_store_troop_name, s4, ":lady_no"),
  40994. # (display_message, "@Giving green turret hat to {s4}"),
  40995. (else_try),
  40996. (troop_has_item_equipped, ":lady_no", "itm_green_dress"),
  40997. (troop_add_item, ":lady_no", "itm_wimple_with_veil", 0),
  40998.  
  40999. (str_store_troop_name, s4, ":lady_no"),
  41000. # (display_message, "@Giving green-lined wimple to {s4}"),
  41001. (else_try),
  41002. (neq, ":faction_no", "fac_kingdom_3"),
  41003. (neq, ":faction_no", "fac_kingdom_6"),
  41004. (troop_add_item, ":lady_no", "itm_wimple_a", 0),
  41005.  
  41006. (str_store_troop_name, s4, ":lady_no"),
  41007. # (display_message, "@Giving red-lined wimple to {s4}"),
  41008. (else_try),
  41009. (eq, ":faction_no", "fac_kingdom_6"),
  41010. (try_begin),
  41011. (troop_has_item_equipped, ":lady_no", "itm_sarranid_lady_dress"),
  41012. (troop_add_item, ":lady_no", "itm_sarranid_head_cloth", 0),
  41013. (else_try),
  41014. (troop_add_item, ":lady_no", "itm_sarranid_head_cloth_b", 0),
  41015. (try_end),
  41016. (try_end),
  41017. (try_end),
  41018. (troop_equip_items, ":lady_no"),
  41019.  
  41020. ]
  41021. ),
  41022.  
  41023. ("init_troop_age",
  41024. [
  41025. (store_script_param, ":troop_no", 1),
  41026. (store_script_param, ":age", 2), #minimum 20
  41027.  
  41028. (try_begin),
  41029. (gt, ":age", 20),
  41030. (troop_set_slot, ":troop_no", slot_troop_age, 20),
  41031. (else_try),
  41032. (troop_set_slot, ":troop_no", slot_troop_age, ":age"),
  41033. (try_end),
  41034.  
  41035. (store_sub, ":years_to_age", ":age", 20),
  41036. (troop_set_age, ":troop_no", 0),
  41037.  
  41038. (try_begin),
  41039. (gt, ":years_to_age", 0),
  41040. (try_for_range, ":unused", 0, ":years_to_age"),
  41041. (call_script, "script_age_troop_one_year", ":troop_no"),
  41042. (try_end),
  41043. (try_end),
  41044.  
  41045. ]),
  41046.  
  41047.  
  41048. ("assign_troop_love_interests", #Called at the beginning, or whenever a lord is spurned
  41049. [
  41050. (store_script_param, ":cur_troop", 1),
  41051.  
  41052. (store_faction_of_troop, ":troop_faction", ":cur_troop"),
  41053. (try_for_range, ":unused", 0, 50),
  41054. (store_random_in_range, ":cur_lady", kingdom_ladies_begin, kingdom_ladies_end),
  41055. (troop_slot_eq, ":cur_lady", slot_troop_spouse, -1),
  41056. (store_faction_of_troop, ":lady_faction", ":cur_lady"),
  41057. (eq, ":troop_faction", ":lady_faction"),
  41058. (call_script, "script_troop_get_family_relation_to_troop", ":cur_troop", ":cur_lady"),
  41059. (eq, reg0, 0),
  41060.  
  41061. (call_script, "script_troop_get_relation_with_troop", ":cur_troop", ":cur_lady"),
  41062. (eq, reg0, 0), #do not develop love interest if already spurned or courted
  41063.  
  41064. (neg|troop_slot_eq, ":cur_troop", slot_troop_love_interest_1, ":cur_lady"),
  41065. (neg|troop_slot_eq, ":cur_troop", slot_troop_love_interest_2, ":cur_lady"),
  41066. (neg|troop_slot_eq, ":cur_troop", slot_troop_love_interest_3, ":cur_lady"),
  41067. (try_begin),
  41068. (troop_slot_eq, ":cur_troop", slot_troop_love_interest_1, 0),
  41069. (troop_set_slot, ":cur_troop", slot_troop_love_interest_1, ":cur_lady"),
  41070. (else_try),
  41071. (troop_slot_eq, ":cur_troop", slot_troop_love_interest_2, 0),
  41072. (troop_set_slot, ":cur_troop", slot_troop_love_interest_2, ":cur_lady"),
  41073. (else_try),
  41074. (troop_slot_eq, ":cur_troop", slot_troop_love_interest_3, 0),
  41075. (troop_set_slot, ":cur_troop", slot_troop_love_interest_3, ":cur_lady"),
  41076. (try_end),
  41077. (try_end),
  41078.  
  41079. ]),
  41080.  
  41081. ("faction_conclude_feast",
  41082. [
  41083. (store_script_param, ":faction_no", 1),
  41084. (store_script_param, ":venue", 2),
  41085.  
  41086. (str_store_faction_name, s3, ":faction_no"),
  41087. (str_store_party_name, s4, ":venue"),
  41088.  
  41089. (try_begin),
  41090. (eq, "$cheat_mode", 1),
  41091. (display_message, "str_s3_feast_concludes_at_s4"),
  41092. (try_end),
  41093.  
  41094. (try_begin),
  41095. (eq, ":faction_no", "fac_player_faction"),
  41096. (assign, ":faction_no", "$players_kingdom"),
  41097. (try_end),
  41098.  
  41099. (party_set_slot, ":venue", slot_town_has_tournament, 0),
  41100.  
  41101. #markspot
  41102.  
  41103. (assign, ":nobility_in_faction", 0),
  41104. (assign, ":nobility_in_attendance", 0),
  41105.  
  41106. (try_for_range, ":troop_no", active_npcs_begin, kingdom_ladies_end),
  41107. (store_faction_of_troop, ":troop_faction", ":troop_no"),
  41108. (eq, ":faction_no", ":troop_faction"),
  41109.  
  41110. (val_add, ":nobility_in_faction", 1),
  41111.  
  41112. #CHECK -- is the troop there?
  41113. (troop_slot_eq, ":troop_no", slot_troop_cur_center, ":venue"),
  41114. (val_add, ":nobility_in_attendance", 1),
  41115.  
  41116. #check for marriages
  41117. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_lady),
  41118. (troop_get_slot, ":groom", ":troop_no", slot_troop_betrothed),
  41119. (gt, ":groom", 0),
  41120.  
  41121. (troop_get_slot, ":groom_party", ":groom", slot_troop_leaded_party),
  41122. (party_is_active, ":groom_party"),
  41123. (party_get_attached_to, ":groom_party_attached", ":groom_party"),
  41124. (eq, ":groom_party_attached", ":venue"),
  41125.  
  41126. (store_faction_of_troop, ":lady_faction", ":troop_no"),
  41127. (store_faction_of_troop, ":groom_faction", ":groom"),
  41128.  
  41129. (eq, ":groom_faction", ":lady_faction"),
  41130. (eq, ":lady_faction", ":faction_no"),
  41131. (store_current_hours, ":hours_since_betrothal"),
  41132. (troop_get_slot, ":betrothal_time", ":troop_no", slot_troop_betrothal_time),
  41133. (val_sub, ":hours_since_betrothal", ":betrothal_time"),
  41134. (ge, ":hours_since_betrothal", 144), #6 days, should perhaps eventually be 29 days, or 696 yours
  41135.  
  41136. (call_script, "script_get_kingdom_lady_social_determinants", ":troop_no"),
  41137. (assign, ":wedding_venue", reg1),
  41138.  
  41139. (eq, ":venue", ":wedding_venue"),
  41140. (neq, ":troop_no", "trp_player"),
  41141. (neq, ":groom", "trp_player"),
  41142.  
  41143. (call_script, "script_courtship_event_bride_marry_groom", ":troop_no", ":groom", 0), #parameters from dialog
  41144. (try_end),
  41145.  
  41146.  
  41147. #ssss (assign, ":placeholder_reminder_to_calculate_effect_for_player_feast", 1),
  41148.  
  41149.  
  41150.  
  41151. (party_get_slot, ":feast_host", ":venue", slot_town_lord),
  41152. (assign, ":quality_of_feast", 0),
  41153.  
  41154. (try_begin),
  41155. (check_quest_active, "qst_organize_feast"),
  41156. (quest_slot_eq, "qst_organize_feast", slot_quest_target_center, ":venue"),
  41157. (assign, ":feast_host", "trp_player"),
  41158.  
  41159. (assign, ":total_guests", 400),
  41160.  
  41161. (call_script, "script_succeed_quest", "qst_organize_feast"),
  41162. (call_script, "script_end_quest", "qst_organize_feast"),
  41163.  
  41164. (call_script, "script_internal_politics_rate_feast_to_s9", "trp_household_possessions", ":total_guests", "$players_kingdom", 1),
  41165. (assign, ":quality_of_feast", reg0),
  41166. (else_try),
  41167. (assign, ":quality_of_feast", 60),
  41168. (try_end),
  41169.  
  41170.  
  41171. (try_begin),
  41172. (ge, "$cheat_mode", 1),
  41173. (str_store_troop_name, s4, ":feast_host"),
  41174. (assign, reg4, ":quality_of_feast"),
  41175. (display_message, "@{!}DEBUG - {s4}'s feast has rating of {reg4}"),
  41176. (try_end),
  41177.  
  41178.  
  41179. (try_begin),
  41180. (ge, ":feast_host", 0),
  41181. (store_div, ":renown_boost", ":quality_of_feast", 3),
  41182. (call_script, "script_change_troop_renown", ":feast_host", ":renown_boost"),
  41183.  
  41184. (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
  41185. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  41186. (troop_get_slot, ":leaded_party", ":troop_no", slot_troop_leaded_party),
  41187. (party_is_active, ":leaded_party"),
  41188. (party_get_attached_to, ":leaded_party_attached", ":leaded_party"),
  41189. (eq, ":leaded_party_attached", ":venue"),
  41190.  
  41191. (assign, ":relation_booster", ":quality_of_feast"),
  41192. (val_div, ":relation_booster", 20),
  41193.  
  41194. (try_begin),
  41195. (eq, ":feast_host", "trp_player"),
  41196. (val_sub, ":relation_booster", 1),
  41197. (val_max, ":relation_booster", 0),
  41198. (try_end),
  41199. (call_script, "script_troop_change_relation_with_troop", ":feast_host", ":troop_no", ":relation_booster"),
  41200. (val_add, "$total_feast_changes", ":relation_booster"),
  41201. (try_end),
  41202. (try_end),
  41203.  
  41204.  
  41205. (assign, reg3, ":nobility_in_attendance"),
  41206. (assign, reg4, ":nobility_in_faction"),
  41207.  
  41208. (try_begin),
  41209. (eq, "$cheat_mode", 1),
  41210. (display_message, "str_attendance_reg3_nobles_out_of_reg4"),
  41211. (try_end),
  41212. ]),
  41213.  
  41214. ("lady_evaluate_troop_as_suitor",
  41215. [
  41216. (store_script_param, ":lady", 1),
  41217. (store_script_param, ":suitor", 2),
  41218.  
  41219. (call_script, "script_troop_get_romantic_chemistry_with_troop", ":lady", ":suitor"),
  41220. (assign, ":romantic_chemistry", reg0),
  41221.  
  41222. (try_begin),
  41223. (call_script, "script_cf_test_lord_incompatibility_to_s17", ":lady", ":suitor"),
  41224. (try_end),
  41225.  
  41226. (store_sub, ":personality_modifier", 0, reg0),
  41227. (assign, reg2, ":personality_modifier"),
  41228.  
  41229. (try_begin),
  41230. (troop_get_slot, ":renown_modifier", ":suitor", slot_troop_renown),
  41231. (val_div, ":renown_modifier", 20),
  41232. (try_begin),
  41233. (this_or_next|troop_slot_eq, ":lady", slot_lord_reputation_type, lrep_conventional),
  41234. (troop_slot_eq, ":lady", slot_lord_reputation_type, lrep_ambitious),
  41235. (val_mul, ":renown_modifier", 2),
  41236. (val_sub, ":renown_modifier", 15),
  41237. (try_end),
  41238. (try_end),
  41239.  
  41240. (store_add, ":final_score", ":renown_modifier", ":personality_modifier"),
  41241. (val_add, ":final_score", ":romantic_chemistry"),
  41242. (assign, reg0, ":final_score"),
  41243. ]),
  41244.  
  41245. ("courtship_event_troop_court_lady",
  41246. [
  41247. (store_script_param, ":suitor", 1),
  41248. (store_script_param, ":lady", 2),
  41249.  
  41250.  
  41251. #(try_begin),
  41252. #(eq, "$cheat_mode", 1),
  41253. #(str_store_troop_name, s4, ":suitor"),
  41254. #(str_store_troop_name, s5, ":lady"),
  41255. #(troop_get_slot, ":lady_location", ":lady", slot_troop_cur_center),
  41256. #(str_store_party_name, s7, ":lady_location"),
  41257. #(display_message, "str_s4_pursues_suit_with_s5_in_s7"),
  41258. #(try_end),
  41259.  
  41260. (troop_get_slot, ":previous_suitor", ":lady", slot_lady_last_suitor),
  41261. (troop_set_slot, ":lady", slot_lady_last_suitor, ":suitor"), #can determine quarrels
  41262.  
  41263. (try_begin),
  41264. (eq, ":previous_suitor", "trp_player"),
  41265.  
  41266. (troop_slot_ge, ":lady", slot_troop_met, 2),
  41267. (call_script, "script_troop_get_relation_with_troop", ":suitor", "trp_player"), #add this to list of quarrels
  41268. (assign, ":suitor_relation_w_player", reg0),
  41269.  
  41270. (try_begin),
  41271. (this_or_next|troop_slot_eq, ":suitor", slot_lord_reputation_type, lrep_selfrighteous),
  41272. (this_or_next|troop_slot_eq, ":suitor", slot_lord_reputation_type, lrep_quarrelsome),
  41273. (troop_slot_eq, ":suitor", slot_lord_reputation_type, lrep_debauched),
  41274. (gt, ":suitor_relation_w_player", -20),
  41275. (call_script, "script_add_log_entry", logent_lords_quarrel_over_woman, ":suitor", "trp_player", ":lady", 0),
  41276. (else_try),
  41277. (is_between, ":suitor_relation_w_player", -5, -25),
  41278. (call_script, "script_add_log_entry", logent_lords_quarrel_over_woman, ":suitor", "trp_player", ":lady", 0),
  41279. (try_end),
  41280. (else_try),
  41281. (neq, ":previous_suitor", "trp_player"), #not the player
  41282.  
  41283. (neq, ":suitor", ":previous_suitor"),
  41284. (ge, ":previous_suitor", active_npcs_begin),
  41285.  
  41286. (call_script, "script_cf_test_lord_incompatibility_to_s17", ":suitor", ":previous_suitor"),
  41287. (call_script, "script_add_log_entry", logent_lords_quarrel_over_woman, ":suitor", ":previous_suitor", ":lady", 0),
  41288.  
  41289. (call_script, "script_troop_get_relation_with_troop", ":suitor", ":previous_suitor"), #add this to list of quarrels
  41290. (ge, reg0, 0),
  41291. (call_script, "script_troop_change_relation_with_troop", ":suitor", ":previous_suitor", -20),
  41292. (val_add, "$total_courtship_quarrel_changes", -20),
  41293. (else_try), #quarrelsome lords quarrel anyway
  41294. (troop_slot_eq, ":suitor", slot_lord_reputation_type, lrep_quarrelsome),
  41295. (neq, ":suitor", ":previous_suitor"),
  41296. (ge, ":previous_suitor", active_npcs_begin),
  41297.  
  41298. # (neq, ":previous_suitor", "trp_player"),
  41299.  
  41300. (call_script, "script_troop_get_relation_with_troop", ":suitor", ":previous_suitor"), #add this to list of quarrels
  41301. (lt, reg0, 10),
  41302. (call_script, "script_add_log_entry", logent_lords_quarrel_over_woman, ":suitor", ":previous_suitor", ":lady", 0),
  41303. (ge, reg0, 0),
  41304. (call_script, "script_troop_change_relation_with_troop", ":suitor", ":previous_suitor", -20),
  41305. (val_add, "$total_courtship_quarrel_changes", -20),
  41306.  
  41307. (try_end),
  41308.  
  41309.  
  41310. # (call_script, "script_troop_get_relation_with_troop", ":lady", ":suitor"),
  41311. # (assign, ":orig_relation", reg0),
  41312.  
  41313. (call_script, "script_lady_evaluate_troop_as_suitor", ":lady", ":suitor"),
  41314.  
  41315. (store_random_in_range, ":random", 5, 16),
  41316. (store_div, ":relationship_change", reg0, ":random"),
  41317.  
  41318. (call_script, "script_troop_get_relation_with_troop", ":lady", ":suitor"),
  41319. (assign, ":orig_relation", reg0),
  41320.  
  41321. (call_script, "script_troop_change_relation_with_troop", ":lady", ":suitor", ":relationship_change"),
  41322.  
  41323. (call_script, "script_troop_get_relation_with_troop", ":lady", ":suitor"),
  41324. (assign, ":lady_suitor_relation", reg0),
  41325.  
  41326. (try_begin),
  41327. (ge, ":lady_suitor_relation", 10),
  41328. (lt, ":orig_relation", 10),
  41329. (call_script, "script_add_log_entry", logent_lady_favors_suitor, ":lady", 0, ":suitor", 0),
  41330.  
  41331. (try_begin),
  41332. (eq, "$cheat_mode", 1),
  41333. (display_message, "str_note__favor_event_logged"),
  41334. (try_end),
  41335.  
  41336. (else_try),
  41337. (this_or_next|lt, ":lady_suitor_relation", -20),
  41338. (ge, ":lady_suitor_relation", 20),
  41339.  
  41340. (call_script, "script_get_kingdom_lady_social_determinants", ":lady"),
  41341. (assign, ":guardian", reg0),
  41342. (call_script, "script_troop_get_relation_with_troop", ":suitor", ":guardian"),
  41343. (assign, ":suitor_guardian_relation", reg0),
  41344. #things come to a head, one way or another
  41345.  
  41346. (assign, ":highest_competitor_lady_score", -1),
  41347. (assign, ":competitor_preferred_by_lady", -1),
  41348.  
  41349. (assign, ":highest_competitor_guardian_score", ":suitor_guardian_relation"),
  41350. (assign, ":competitor_preferred_by_guardian", -1),
  41351.  
  41352. #log potential competitors
  41353. (try_for_range, ":possible_competitor", lords_begin, lords_end),
  41354. (neq, ":possible_competitor", ":suitor"),
  41355.  
  41356. (this_or_next|troop_slot_eq, ":possible_competitor", slot_troop_love_interest_1, ":lady"),
  41357. (this_or_next|troop_slot_eq, ":possible_competitor", slot_troop_love_interest_2, ":lady"),
  41358. (troop_slot_eq, ":possible_competitor", slot_troop_love_interest_3, ":lady"),
  41359.  
  41360. (try_begin),
  41361. (call_script, "script_troop_get_relation_with_troop", ":possible_competitor", ":lady"),
  41362. (gt, reg0, ":highest_competitor_lady_score"),
  41363. (assign, ":competitor_preferred_by_lady", ":possible_competitor"),
  41364. (assign, ":highest_competitor_lady_score", reg0),
  41365. (try_end),
  41366.  
  41367. (try_begin),
  41368. (call_script, "script_troop_get_relation_with_troop", ":possible_competitor", ":guardian"),
  41369. (gt, reg0, ":highest_competitor_guardian_score"),
  41370. (assign, ":competitor_preferred_by_guardian", ":possible_competitor"),
  41371. (assign, ":highest_competitor_guardian_score", reg0),
  41372. (try_end),
  41373. (try_end),
  41374.  
  41375. #RESULTS
  41376. #Guardian forces lady to be betrothed to suitor now
  41377. (try_begin),
  41378. (lt, ":lady_suitor_relation", -20),
  41379. (this_or_next|troop_slot_eq, ":guardian", slot_lord_reputation_type, lrep_selfrighteous),
  41380. (this_or_next|troop_slot_eq, ":guardian", slot_lord_reputation_type, lrep_debauched),
  41381. (troop_slot_eq, ":guardian", slot_lord_reputation_type, lrep_quarrelsome),
  41382. (eq, ":competitor_preferred_by_guardian", -1),
  41383.  
  41384. (this_or_next|troop_slot_eq, ":suitor", slot_lord_reputation_type, lrep_selfrighteous),
  41385. (this_or_next|troop_slot_eq, ":suitor", slot_lord_reputation_type, lrep_debauched),
  41386. (troop_slot_eq, ":suitor", slot_lord_reputation_type, lrep_quarrelsome),
  41387.  
  41388. (troop_slot_eq, ":suitor", slot_troop_betrothed, -1),
  41389. (troop_slot_eq, ":lady", slot_troop_betrothed, -1),
  41390.  
  41391. (call_script, "script_add_log_entry", logent_lady_betrothed_to_suitor_by_family, ":lady", 0, ":suitor", 0),
  41392. (troop_set_slot, ":suitor", slot_troop_betrothed, ":lady"),
  41393. (troop_set_slot, ":lady", slot_troop_betrothed, ":suitor"),
  41394. (store_current_hours, ":hours"),
  41395. (troop_set_slot, ":lady", slot_troop_betrothal_time, ":hours"),
  41396. (troop_set_slot, ":suitor", slot_troop_betrothal_time, ":hours"),
  41397. (try_begin),
  41398. (eq, "$cheat_mode", 1),
  41399. (display_message, "str_result_lady_forced_to_agree_to_engagement"),
  41400. (try_end),
  41401.  
  41402. #Lady rejects the suitor
  41403. (else_try),
  41404. (lt, ":lady_suitor_relation", -20),
  41405.  
  41406. (call_script, "script_add_log_entry", logent_lady_rejects_suitor, ":lady", 0, ":suitor", 0),
  41407. (call_script, "script_courtship_event_lady_break_relation_with_suitor", ":lady", ":suitor"),
  41408. (try_begin),
  41409. (eq, "$cheat_mode", 1),
  41410. (display_message, "str_result_lady_rejects_suitor"),
  41411. (try_end),
  41412.  
  41413. #A happy engagement, with parental blessing
  41414. (else_try),
  41415. (gt, ":lady_suitor_relation", 20),
  41416. (gt, ":suitor_guardian_relation", 0),
  41417. (eq, ":competitor_preferred_by_lady", -1),
  41418.  
  41419. (troop_slot_eq, ":suitor", slot_troop_betrothed, -1),
  41420. (troop_slot_eq, ":lady", slot_troop_betrothed, -1),
  41421.  
  41422. (call_script, "script_add_log_entry", logent_lady_betrothed_to_suitor_by_choice, ":lady", 0, ":suitor", 0),
  41423. (troop_set_slot, ":suitor", slot_troop_betrothed, ":lady"),
  41424. (troop_set_slot, ":lady", slot_troop_betrothed, ":suitor"),
  41425. (store_current_hours, ":hours"),
  41426. (troop_set_slot, ":lady", slot_troop_betrothal_time, ":hours"),
  41427. (troop_set_slot, ":suitor", slot_troop_betrothal_time, ":hours"),
  41428.  
  41429. (try_begin),
  41430. (eq, "$cheat_mode", 1),
  41431. (str_store_troop_name, s4, ":lady"),
  41432. (str_store_troop_name, s5, ":suitor"),
  41433. (display_message, "str_result_happy_engagement_between_s4_and_s5"),
  41434. (try_end),
  41435.  
  41436. #Lady elopes
  41437. (else_try),
  41438. (gt, ":lady_suitor_relation", 20),
  41439.  
  41440. (eq, ":competitor_preferred_by_lady", -1),
  41441. (this_or_next|troop_slot_eq, ":guardian", slot_lord_reputation_type, lrep_adventurous),
  41442. (troop_slot_eq, ":guardian", slot_lord_reputation_type, lrep_ambitious),
  41443.  
  41444. (troop_slot_eq, ":suitor", slot_troop_betrothed, -1),
  41445. (troop_slot_eq, ":lady", slot_troop_betrothed, -1),
  41446.  
  41447. #lady elopes
  41448. (call_script, "script_courtship_event_bride_marry_groom", ":lady", ":suitor", 1),
  41449. #add elopements to quarrel descriptions
  41450.  
  41451. (try_begin),
  41452. (eq, "$cheat_mode", 1),
  41453. (str_store_troop_name, s4, ":lady"),
  41454. (str_store_troop_name, s5, ":suitor"),
  41455. (display_message, "str_result_s4_elopes_with_s5"),
  41456. (try_end),
  41457.  
  41458. #Lady reluctantly agrees to marry under pressure from family
  41459. (else_try),
  41460. (troop_slot_eq, ":lady", slot_lord_reputation_type, lrep_conventional),
  41461. (eq, ":competitor_preferred_by_guardian", -1),
  41462. (gt, ":suitor_guardian_relation", 4),
  41463.  
  41464. (store_random_in_range, ":random", 0, 5),
  41465. (eq, ":random", 0),
  41466.  
  41467. (troop_slot_eq, ":suitor", slot_troop_betrothed, -1),
  41468. (troop_slot_eq, ":lady", slot_troop_betrothed, -1),
  41469.  
  41470. (call_script, "script_add_log_entry", logent_lady_betrothed_to_suitor_by_pressure, ":lady", 0, ":suitor", 0),
  41471. (troop_set_slot, ":suitor", slot_troop_betrothed, ":lady"),
  41472. (troop_set_slot, ":lady", slot_troop_betrothed, ":suitor"),
  41473. (store_current_hours, ":hours"),
  41474. (troop_set_slot, ":lady", slot_troop_betrothal_time, ":hours"),
  41475. (troop_set_slot, ":suitor", slot_troop_betrothal_time, ":hours"),
  41476. (try_begin),
  41477. (eq, "$cheat_mode", 1),
  41478. (str_store_troop_name, s4, ":lady"),
  41479. (str_store_troop_name, s5, ":suitor"),
  41480. (display_message, "str_result_s4_reluctantly_agrees_to_engagement_with_s5"),
  41481. (try_end),
  41482.  
  41483. #Stalemate -- make patience roll
  41484. (else_try),
  41485. (gt, ":lady_suitor_relation", 20),
  41486.  
  41487. (store_random_in_range, reg3, 0, 3),
  41488. (try_begin),
  41489. (eq, "$cheat_mode", 1),
  41490. (display_message, "str_result_stalemate_patience_roll_=_reg3"),
  41491. (try_end),
  41492.  
  41493. (eq, reg3, 0),
  41494. (call_script, "script_add_log_entry", logent_lady_rejected_by_suitor, ":lady", 0, ":suitor", 0),
  41495. (call_script, "script_courtship_event_lady_break_relation_with_suitor", ":lady", ":suitor"),
  41496. (try_end),
  41497.  
  41498. (try_end),
  41499.  
  41500. ]),
  41501.  
  41502.  
  41503.  
  41504. ("courtship_event_lady_break_relation_with_suitor", #parameters from dialog
  41505. [
  41506. (store_script_param, ":lady", 1),
  41507. (store_script_param, ":suitor", 2),
  41508.  
  41509. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  41510. (troop_slot_eq, ":suitor", ":love_interest_slot", ":lady"),
  41511. (troop_set_slot, ":suitor", ":love_interest_slot", 0),
  41512. (try_end),
  41513. (call_script, "script_assign_troop_love_interests", ":suitor"),
  41514.  
  41515. (try_begin),
  41516. (troop_slot_eq, ":lady", slot_troop_betrothed, ":suitor"),
  41517.  
  41518.  
  41519. (troop_set_slot, ":lady", slot_troop_betrothed, -1),
  41520. (troop_set_slot, ":suitor", slot_troop_betrothed, -1),
  41521. (try_end),
  41522.  
  41523.  
  41524. ]),
  41525.  
  41526.  
  41527. ("courtship_event_bride_marry_groom", #parameters from dialog or scripts
  41528. [
  41529. (store_script_param, ":bride", 1),
  41530. (store_script_param, ":groom", 2),
  41531. (store_script_param, ":elopement", 3),
  41532.  
  41533. (try_begin),
  41534. (eq, ":bride", "trp_player"),
  41535. (assign, ":venue", "$g_encountered_party"),
  41536. (else_try),
  41537. (troop_get_slot, ":venue", ":bride", slot_troop_cur_center),
  41538. (try_end),
  41539.  
  41540. (store_faction_of_troop, ":groom_faction", ":groom"),
  41541.  
  41542.  
  41543. (try_begin),
  41544. (eq, ":elopement", 0),
  41545. (call_script, "script_add_log_entry", logent_lady_marries_suitor, ":bride", ":venue", ":groom", 0),
  41546. (else_try),
  41547. (call_script, "script_add_log_entry", logent_lady_elopes_with_lord, ":bride", ":venue", ":groom", 0),
  41548. (try_end),
  41549.  
  41550. (str_store_troop_name, s3, ":bride"),
  41551. (str_store_troop_name, s4, ":groom"),
  41552. (str_store_party_name, s5, ":venue"),
  41553.  
  41554. (try_begin),
  41555. (eq, "$cheat_mode", 1),
  41556. (display_message, "str_s3_marries_s4_at_s5"),
  41557. (try_end),
  41558.  
  41559. (troop_set_slot, ":bride", slot_troop_spouse, ":groom"),
  41560. (troop_set_slot, ":groom", slot_troop_spouse, ":bride"),
  41561.  
  41562. #Break groom's romantic relations
  41563. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  41564. (troop_set_slot, ":groom", ":love_interest_slot", 0),
  41565. (try_end),
  41566.  
  41567. #Break bride's romantic relations
  41568. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  41569. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  41570. (troop_slot_eq, ":active_npc", ":love_interest_slot", ":bride"),
  41571. (call_script, "script_courtship_event_lady_break_relation_with_suitor", ":bride", ":active_npc"),
  41572. (try_end),
  41573. (try_end),
  41574.  
  41575.  
  41576.  
  41577. (troop_set_slot, ":bride", slot_troop_betrothed, -1),
  41578. (troop_set_slot, ":groom", slot_troop_betrothed, -1),
  41579.  
  41580.  
  41581.  
  41582. #change relations with family
  41583. (try_for_range, ":family_member", lords_begin, lords_end),
  41584. (call_script, "script_troop_get_family_relation_to_troop", ":bride", ":family_member"),
  41585. (gt, reg0, 0),
  41586. (store_div, ":family_relation_boost", reg0, 3),
  41587. (try_begin),
  41588. (eq, ":elopement", 1),
  41589. (val_mul, ":family_relation_boost", -2),
  41590. (try_end),
  41591. (call_script, "script_troop_change_relation_with_troop", ":groom", ":bride", ":family_relation_boost"),
  41592. (val_add, "$total_courtship_quarrel_changes", ":family_relation_boost"),
  41593. (try_end),
  41594.  
  41595. (try_begin),
  41596. (this_or_next|eq, ":groom", "trp_player"),
  41597. (eq, ":bride", "trp_player"),
  41598. (call_script, "script_change_player_right_to_rule", "trp_player", 15),
  41599. (try_end),
  41600.  
  41601.  
  41602. (try_begin),
  41603. (eq, ":groom", "trp_player"),
  41604. (check_quest_active, "qst_wed_betrothed"),
  41605. (call_script, "script_succeed_quest", "qst_wed_betrothed"),
  41606. (call_script, "script_end_quest", "qst_wed_betrothed"),
  41607. (try_end),
  41608.  
  41609.  
  41610. (try_begin),
  41611. (check_quest_active, "qst_visit_lady"),
  41612. (quest_slot_eq, "qst_visit_lady", slot_quest_giver_troop, ":bride"),
  41613. (call_script, "script_abort_quest", "qst_visit_lady", 0),
  41614. (try_end),
  41615.  
  41616.  
  41617. (try_begin),
  41618. (eq, ":groom", "trp_player"),
  41619. (check_quest_active, "qst_visit_lady"),
  41620. (call_script, "script_abort_quest", "qst_visit_lady", 0),
  41621. (try_end),
  41622. (try_begin),
  41623. (eq, ":groom", "trp_player"),
  41624. (check_quest_active, "qst_duel_courtship_rival"),
  41625. (call_script, "script_abort_quest", "qst_duel_courtship_rival", 0),
  41626. (try_end),
  41627.  
  41628.  
  41629. (try_begin),
  41630. (eq, ":bride", "trp_player"),
  41631. (call_script, "script_player_join_faction", ":groom_faction"),
  41632. (assign, "$player_has_homage", 1),
  41633. (else_try),
  41634. (eq, ":groom", "trp_player"),
  41635.  
  41636. (try_begin),
  41637. (ge, "$cheat_mode", 1),
  41638. (str_store_troop_name, s4, ":bride"),
  41639. (display_message, "@{!} DEBUG - {s4} faction change in marriage case 5"),
  41640. (try_end),
  41641. (troop_set_faction, ":bride", "$players_kingdom"),
  41642. (else_try),
  41643.  
  41644. (try_begin),
  41645. (ge, "$cheat_mode", 1),
  41646. (str_store_troop_name, s4, ":bride"),
  41647. (display_message, "@{!}DEBUG - {s4} faction changed by marriage, case 6"),
  41648. (try_end),
  41649.  
  41650. (troop_set_faction, ":bride", ":groom_faction"),
  41651. (try_end),
  41652.  
  41653. (try_begin),
  41654. (this_or_next|eq, ":groom", "trp_player"),
  41655. (eq, ":bride", "trp_player"),
  41656. (unlock_achievement, ACHIEVEMENT_HAPPILY_EVER_AFTER),
  41657. (try_begin),
  41658. (eq, ":elopement", 1),
  41659. (unlock_achievement, ACHIEVEMENT_HEART_BREAKER),
  41660. (try_end),
  41661. (try_end),
  41662.  
  41663.  
  41664.  
  41665. (try_begin),
  41666. (this_or_next|eq, ":groom", "trp_player"),
  41667. (eq, ":bride", "trp_player"),
  41668. #(eq, ":elopement", 0),
  41669. (call_script, "script_start_wedding_cutscene", ":groom", ":bride"),
  41670. (try_end),
  41671. ]),
  41672.  
  41673.  
  41674. #script_npc_decision_checklist_party_ai
  41675. # DECISION CHECKLISTS (OCT 14)
  41676. # I was thinking of trying to convert as much AI decision-making as possible to the checklist format
  41677. # While outcomes are not as nuanced and varied as a random decision using weighted chances for each outcoms,
  41678. # the checklist has the advantage of being much more transparent, both to developers and to players
  41679. # The checklist can yield a string (standardized to s14) which explains the rationale for the decision
  41680. # When the script yields a yes/no/maybe result, than that is standardized from -3 to +3
  41681. # INPUT: troop_no
  41682. # OUTPUT: none
  41683. ("npc_decision_checklist_party_ai",
  41684. [
  41685. #this script can replace decide_kingdom_hero_ai and decide_kingdom_hero_ai_follow_or_not
  41686. #However, it does not contain script_party_set_ai_state
  41687.  
  41688. (store_script_param, ":troop_no", 1),
  41689.  
  41690. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  41691. #(party_get_slot, ":our_strength", ":party_no", slot_party_cached_strength),
  41692. #(store_div, ":min_strength_behind", ":our_strength", 2),
  41693. #(party_get_slot, ":our_follower_strength", ":party_no", slot_party_follower_strength),
  41694.  
  41695. (try_begin),
  41696. (eq, "$cheat_mode", 1),
  41697. (assign, "$g_talk_troop", ":troop_no"),
  41698. (try_end),
  41699.  
  41700. (store_troop_faction, ":faction_no", ":troop_no"),
  41701.  
  41702. (try_begin),
  41703. (eq, ":troop_no", "$g_talk_troop"),
  41704. (str_store_string, s15, "str__i_must_attend_to_this_matter_before_i_worry_about_the_affairs_of_the_realm"),
  41705. (try_end),
  41706.  
  41707. #find current center
  41708. (party_get_attached_to, ":cur_center_no", ":party_no"),
  41709. (try_begin),
  41710. (lt, ":cur_center_no", 0),
  41711. (party_get_cur_town, ":cur_center_no", ":party_no"),
  41712. (try_end),
  41713. (assign, ":besieger_party", -1),
  41714. (try_begin),
  41715. (neg|is_between, ":cur_center_no", centers_begin, centers_end),
  41716. (assign, ":cur_center_no", -1),
  41717. (else_try),
  41718. (party_get_slot, ":besieger_party", ":cur_center_no", slot_center_is_besieged_by),
  41719. (try_begin),
  41720. (neg|party_is_active, ":besieger_party"),
  41721. (assign, ":besieger_party", -1),
  41722. (try_end),
  41723. (try_end),
  41724.  
  41725. #party_count
  41726. (call_script, "script_party_count_fit_for_battle", ":party_no"),
  41727. (assign, ":party_fit_for_battle", reg0),
  41728. (call_script, "script_party_get_ideal_size", ":party_no"),
  41729. (assign, ":ideal_size", reg0),
  41730. (store_mul, ":party_strength_as_percentage_of_ideal", ":party_fit_for_battle", 100),
  41731. (val_div, ":party_strength_as_percentage_of_ideal", ":ideal_size"),
  41732. (try_begin),
  41733. (faction_slot_eq, ":faction_no", slot_faction_num_towns, 0),
  41734. (faction_slot_eq, ":faction_no", slot_faction_num_castles, 0),
  41735. (assign, ":party_ratio_of_prisoners", 0), #do not let prisoners have an effect on ai calculation
  41736. (else_try),
  41737. (party_get_num_prisoners, ":num_prisoners", ":party_no"),
  41738. (val_max, ":party_fit_for_battle", 1), #avoid division by zero error
  41739. (store_div, ":party_ratio_of_prisoners", ":num_prisoners", ":party_fit_for_battle"),
  41740. (try_end),
  41741.  
  41742. (assign, ":faction_is_at_war", 0),
  41743. (try_for_range, ":kingdom", kingdoms_begin, kingdoms_end),
  41744. (faction_slot_eq, ":kingdom", slot_faction_state, sfs_active),
  41745. (store_relation, ":relation", ":faction_no", ":kingdom"),
  41746. (lt, ":relation", 0),
  41747. (assign, ":faction_is_at_war", 1),
  41748. (try_end),
  41749.  
  41750. (assign, ":operation_in_progress", 0),
  41751. (try_begin),
  41752. (this_or_next|party_slot_eq, ":party_no", slot_party_ai_state, spai_raiding_around_center),
  41753. (party_slot_eq, ":party_no", slot_party_ai_state, spai_besieging_center),
  41754.  
  41755. (party_get_slot, ":target_center", ":party_no", slot_party_ai_object),
  41756. (is_between, ":target_center", centers_begin, centers_end),
  41757.  
  41758. (store_faction_of_party, ":target_center_faction", ":target_center"),
  41759. (store_relation, ":relation", ":faction_no", ":target_center_faction"),
  41760. (lt, ":relation", 0),
  41761.  
  41762. (store_distance_to_party_from_party, ":distance", ":party_no", ":target_center"),
  41763. (lt, ":distance", 10),
  41764. (this_or_next|party_slot_eq, ":target_center", slot_village_state, svs_under_siege),
  41765. (this_or_next|party_slot_eq, ":target_center", slot_village_state, svs_normal),
  41766. (party_slot_eq, ":target_center", slot_village_state, svs_being_raided),
  41767.  
  41768. (assign, ":operation_in_progress", 1),
  41769. (try_end),
  41770.  
  41771. (troop_get_slot, ":troop_reputation", ":troop_no", slot_lord_reputation_type),
  41772.  
  41773. (party_get_slot, ":old_ai_state", ":party_no", slot_party_ai_state),
  41774. (party_get_slot, ":old_ai_object", ":party_no", slot_party_ai_object),
  41775.  
  41776. (party_get_slot, ":party_cached_strength", ":party_no", slot_party_cached_strength),
  41777.  
  41778. (store_current_hours, ":hours_since_last_rest"),
  41779. (party_get_slot, ":last_rest_time", ":party_no", slot_party_last_in_any_center),
  41780. (val_sub, ":hours_since_last_rest", ":last_rest_time"),
  41781.  
  41782. (store_current_hours, ":hours_since_last_home"),
  41783. (party_get_slot, ":last_home_time", ":party_no", slot_party_last_in_home_center),
  41784. (val_sub, ":hours_since_last_home", ":last_home_time"),
  41785.  
  41786. (store_current_hours, ":hours_since_last_combat"),
  41787. (party_get_slot, ":last_combat_time", ":party_no", slot_party_last_in_combat),
  41788. (val_sub, ":hours_since_last_combat", ":last_combat_time"),
  41789.  
  41790. (store_current_hours, ":hours_since_last_courtship"),
  41791. (party_get_slot, ":last_courtship_time", ":party_no", slot_party_leader_last_courted),
  41792. (val_sub, ":hours_since_last_courtship", ":last_courtship_time"),
  41793.  
  41794. (troop_get_slot, ":temp_ai_seed", ":troop_no", slot_troop_temp_decision_seed),
  41795. (store_mod, ":aggressiveness", ":temp_ai_seed", 73), #To derive the
  41796. (try_begin),
  41797. (eq, ":troop_reputation", lrep_martial),
  41798. (val_add, ":aggressiveness", 27),
  41799. (else_try),
  41800. (neq, ":troop_reputation", lrep_debauched),
  41801. (neq, ":troop_reputation", lrep_quarrelsome),
  41802. (val_add, ":aggressiveness", 14),
  41803. (try_end),
  41804.  
  41805. (try_begin),
  41806. (gt, ":aggressiveness", ":hours_since_last_combat"),
  41807. (val_add, ":aggressiveness", ":hours_since_last_combat"),
  41808. (val_div, ":aggressiveness", 2),
  41809. (try_end),
  41810.  
  41811. (try_begin),
  41812. (eq, "$cheat_mode", 1), #100
  41813. (eq, ":troop_no", "$g_talk_troop"),
  41814. (str_store_troop_name, s4, ":troop_no"),
  41815. (assign, reg3, ":hours_since_last_rest"),
  41816. (assign, reg4, ":hours_since_last_courtship"),
  41817. (assign, reg5, ":hours_since_last_combat"),
  41818. (assign, reg6, ":hours_since_last_home"),
  41819. (assign, reg7, ":aggressiveness"),
  41820. #(display_message, "@{!}{s4}: hours since rest {reg3}, courtship {reg4}, combat {reg5}, home {reg6}, aggressiveness {reg7}"),
  41821. (try_end),
  41822.  
  41823. ##I am inspecting an estate (use slot_center_npc_volunteer_troop_amount)
  41824.  
  41825. (str_store_string, s17, "str_the_other_matter_took_precedence"),
  41826.  
  41827. (assign, ":do_only_collecting_rents", 0),
  41828.  
  41829. #Wait in current city (dangerous to travel with less (<=10) men)
  41830. (try_begin),
  41831. #NOTE : I added also this condition to very top of list. Because if this condition does not exists in top then a bug happens.
  41832. #Bug is about alone wounded lords without any troop near him travels between cities, sometimes it want to return his home city
  41833. #to collect reinforcements, sometimes it want to patrol ext, but his party is so weak even without anyone. So we sometimes see
  41834. #(0/1) parties in map with only one wounded lord inside. Because after wars completely defeated lords spawn again in a walled center
  41835. #in 48 hours periods (by codes in module_simple_trigers). He spawns with only wounded himself. Then he should wait in there for
  41836. #a time to collect new men to his (0/1) party. If a lord is the only one in his party and if he is at any walled center already then he
  41837. #should stay where he is. He should not travel to anywhere because of any reason. If he is the only one and he is wounded and
  41838. #he is not in any walled center this means this situation happens because of one another bug, because any lord cannot be out of
  41839. #walled centers with wounded himself only. So I am adding this condition below.
  41840.  
  41841. #SUMMARY : If lord has not got enought troops (<10 || <10%) with himself and he is currently at a walled center he should not leave
  41842. #his current center because of any reason.
  41843.  
  41844. (ge, ":cur_center_no", 0),
  41845.  
  41846. (this_or_next|le, ":party_fit_for_battle", 10),
  41847. (le, ":party_strength_as_percentage_of_ideal", 30),
  41848.  
  41849. (assign, ":action", spai_holding_center),
  41850. (assign, ":object", ":cur_center_no"),
  41851.  
  41852. (try_begin),
  41853. (eq, ":troop_no", "$g_talk_troop"),
  41854. (str_store_string, s14, "str_i_need_to_raise_some_men_before_attempting_anything_else"),
  41855. (str_store_string, s16, "str_i_need_to_raise_some_men_before_attempting_anything_else"),
  41856. (try_end),
  41857.  
  41858. #Stand in a siege
  41859. (else_try),
  41860. (gt, ":besieger_party", -1),
  41861.  
  41862. (assign, ":action", spai_holding_center),
  41863. (assign, ":object", ":cur_center_no"),
  41864.  
  41865. (try_begin),
  41866. (eq, ":troop_no", "$g_talk_troop"),
  41867. (str_store_string, s14, "str_i_cannot_leave_this_fortress_now_as_it_is_under_siege"),
  41868. (str_store_string, s16, "str_after_all_we_are_under_siege"),
  41869. (try_end),
  41870.  
  41871. #Continue retreat to walled center
  41872. (else_try),
  41873. (eq, ":old_ai_state", spai_retreating_to_center),
  41874. (neg|party_is_in_any_town, ":party_no"),
  41875.  
  41876. (ge, ":old_ai_object", 0),
  41877. (party_is_active, ":old_ai_object"),
  41878.  
  41879. (store_faction_of_party, ":retreat_center_faction", ":old_ai_object"),
  41880. (eq, ":faction_no", ":retreat_center_faction"),
  41881.  
  41882. (assign, ":action", spai_retreating_to_center),
  41883. (assign, ":object", ":old_ai_object"),
  41884.  
  41885. (try_begin),
  41886. (eq, ":troop_no", "$g_talk_troop"),
  41887. (str_store_string, s14, "str_we_are_not_strong_enough_to_face_the_enemy_out_in_the_open"),
  41888. (str_store_string, s16, "str_i_should_probably_seek_shelter_behind_some_stout_walls"),
  41889. (try_end),
  41890.  
  41891. #Stand by in current center against enemies
  41892. (else_try),
  41893. (is_between, ":cur_center_no", walled_centers_begin, walled_centers_end),
  41894.  
  41895. (party_get_slot, ":enemy_strength_in_area", ":cur_center_no", slot_center_sortie_enemy_strength),
  41896. (party_get_slot, ":enemy_strength_in_area", ":cur_center_no", slot_center_sortie_enemy_strength),
  41897. (ge, ":enemy_strength_in_area", 50),
  41898.  
  41899. (assign, ":action", spai_holding_center),
  41900. (assign, ":object", ":cur_center_no"),
  41901. (try_begin),
  41902. (eq, ":troop_no", "$g_talk_troop"),
  41903. (str_store_string, s14, "str_enemies_are_reported_to_be_nearby_and_we_should_stand_ready_to_either_man_the_walls_or_sortie_out_to_do_battle"),
  41904. (str_store_string, s16, "str_the_enemy_is_nearby"),
  41905. (try_end),
  41906.  
  41907. #As the marshall, lead faction campaign
  41908. (else_try),
  41909. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  41910. (str_clear, s15), #Does not say that overrides faction orders
  41911. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  41912.  
  41913. (party_set_ai_initiative, ":party_no", 10),
  41914.  
  41915. #new ozan added - active gathering
  41916. #this code will allow marshal to travel around cities while gathering army if currently collected are less than 60%.
  41917. #By ratio increases travel distances become less. Travels will be only points around walled centers.
  41918. (party_get_slot, ":old_ai_object", ":party_no", slot_party_ai_object),
  41919. (assign, ":travel_target", ":old_ai_object"),
  41920.  
  41921. (call_script, "script_find_center_to_defend", ":troop_no"),
  41922. (assign, ":most_threatened_center", reg0),
  41923. (assign, ":travel_target_new_assigned", 0),
  41924.  
  41925. (try_begin),
  41926. (lt, ":old_ai_object", 0),
  41927.  
  41928. (store_random_in_range, ":random_value", 0, 8), #to eanble marshal to wait sometime during active gathering
  41929. (this_or_next|eq, "$g_gathering_new_started", 1),
  41930. (eq, ":random_value", 0),
  41931.  
  41932. (assign, ":vassals_already_assembled", 0),
  41933. (assign, ":total_vassals", 0),
  41934. (try_for_range, ":lord", active_npcs_begin, active_npcs_end),
  41935. (store_faction_of_troop, ":lord_faction", ":lord"),
  41936. (eq, ":lord_faction", ":faction_no"),
  41937. (troop_get_slot, ":led_party", ":lord", slot_troop_leaded_party),
  41938. (party_is_active, ":led_party"),
  41939. (val_add, ":total_vassals", 1),
  41940.  
  41941. (party_slot_eq, ":led_party", slot_party_ai_state, spai_accompanying_army),
  41942. (party_slot_eq, ":led_party", slot_party_ai_object, ":party_no"),
  41943.  
  41944. (party_is_active, ":party_no"),
  41945. (store_distance_to_party_from_party, ":distance_to_marshal", ":led_party", ":party_no"),
  41946. (lt, ":distance_to_marshal", 15),
  41947. (val_add, ":vassals_already_assembled", 1),
  41948. (try_end),
  41949.  
  41950. (assign, ":ratio_of_vassals_assembled", -1),
  41951. (try_begin),
  41952. (gt, ":total_vassals", 0),
  41953. (store_mul, ":ratio_of_vassals_assembled", ":vassals_already_assembled", 100),
  41954. (val_div, ":ratio_of_vassals_assembled", ":total_vassals"),
  41955. (try_end),
  41956.  
  41957. (try_begin),
  41958. #if more than 35% of vassals already collected do not make any more active gathering, just hold and wait last vassals to participate.
  41959. (le, ":ratio_of_vassals_assembled", 35),
  41960.  
  41961. (assign, ":best_center_to_travel", ":most_threatened_center"),
  41962.  
  41963. (try_begin),
  41964. (eq, "$g_gathering_new_started", 1),
  41965.  
  41966. (assign, ":minimum_distance", 100000),
  41967. (try_for_range, ":center_no", centers_begin, centers_end),
  41968. (store_faction_of_party, ":center_faction", ":center_no"),
  41969. (eq, ":center_faction", ":faction_no"), #200
  41970. (try_begin),
  41971. (neq, ":center_no", ":most_threatened_center"),
  41972. (store_distance_to_party_from_party, ":dist", ":party_no", ":center_no"),
  41973. (lt, ":dist", ":minimum_distance"),
  41974. (assign, ":minimum_distance", ":dist"),
  41975. (assign, ":best_center_to_travel", ":center_no"),
  41976. (try_end),
  41977. (try_end),
  41978. (else_try),
  41979. #active gathering
  41980. (assign, ":max_travel_distance", 150),
  41981. (try_begin),
  41982. (ge, ":ratio_of_vassals_assembled",15),
  41983. (store_sub, ":max_travel_distance", 35, ":ratio_of_vassals_assembled"),
  41984. (val_add, ":max_travel_distance", 5), #5..25
  41985. (val_mul, ":max_travel_distance", 6), #30..150
  41986. (try_end),
  41987.  
  41988. (try_begin),
  41989. (ge, ":most_threatened_center", 0),
  41990. (store_distance_to_party_from_party, reg12, ":party_no", ":most_threatened_center"),
  41991. (else_try),
  41992. (assign, reg12, 0),
  41993. (try_end),
  41994.  
  41995. (assign, ":num_centers", 0),
  41996. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  41997. (store_faction_of_party, ":center_faction", ":center_no"),
  41998. (eq, ":center_faction", ":faction_no"),
  41999. (try_begin),
  42000. #(ge, ":max_travel_distance", 0),
  42001. (store_distance_to_party_from_party, ":dist", ":party_no", ":center_no"),
  42002.  
  42003. (try_begin),
  42004. (ge, ":most_threatened_center", 0),
  42005. (store_distance_to_party_from_party, reg13, ":center_no", ":most_threatened_center"),
  42006. (else_try),
  42007. (assign, reg13, 0),
  42008. (try_end),
  42009.  
  42010. (store_sub, reg11, reg13, reg12),
  42011.  
  42012. (this_or_next|ge, reg11, 40),
  42013. (this_or_next|ge, ":dist", ":max_travel_distance"),
  42014. (eq, ":center_no", ":most_threatened_center"),
  42015. (else_try),
  42016. #this center is a candidate so increase num_centers by one.
  42017. (val_add, ":num_centers", 1),
  42018. (try_end),
  42019. (try_end),
  42020.  
  42021. (try_begin),
  42022. (ge, ":num_centers", 0),
  42023. (store_random_in_range, ":random_center_no", 0, ":num_centers"),
  42024. (val_add, ":random_center_no", 1),
  42025. (assign, ":num_centers", 0),
  42026. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  42027. (store_faction_of_party, ":center_faction", ":center_no"),
  42028. (eq, ":center_faction", ":faction_no"),
  42029. (try_begin),
  42030. (neq, ":center_no", ":most_threatened_center"),
  42031. (store_distance_to_party_from_party, ":dist", ":party_no", ":center_no"),
  42032. (lt, ":dist", ":max_travel_distance"),
  42033.  
  42034. (try_begin),
  42035. (ge, ":most_threatened_center", 0),
  42036. (store_distance_to_party_from_party, reg13, ":center_no", ":most_threatened_center"),
  42037. (else_try),
  42038. (assign, reg13, 0),
  42039. (try_end),
  42040.  
  42041. (store_sub, reg11, reg13, reg12),
  42042. (lt, reg11, 40),
  42043.  
  42044. (val_sub, ":random_center_no", 1),
  42045. (eq, ":random_center_no", 0),
  42046. (assign, ":best_center_to_travel", ":center_no"),
  42047. (try_end),
  42048. (try_end),
  42049. (try_end),
  42050. (try_end),
  42051.  
  42052. (assign, ":travel_target", ":best_center_to_travel"),
  42053. (assign, ":travel_target_new_assigned", 1),
  42054. (try_end),
  42055. (else_try),
  42056. #if party has an ai object and they are close to that object while gathering army,
  42057. #forget that ai object so they will select a new ai object next.
  42058. (is_between, ":old_ai_object", centers_begin, centers_end),
  42059. (party_get_position, pos1, ":party_no"),
  42060. (party_get_position, pos2, ":old_ai_object"),
  42061. (get_distance_between_positions, ":dist", pos1, pos2),
  42062. (le, ":dist", 3),
  42063. (assign, ":travel_target", -1),
  42064. (try_end),
  42065. #end ozan
  42066.  
  42067. (try_begin),
  42068. (eq, ":travel_target", -1),
  42069. (assign, ":action", spai_undefined),
  42070. (else_try),
  42071. (assign, ":action", spai_visiting_village),
  42072. (try_end),
  42073.  
  42074. (assign, ":object", ":travel_target"),
  42075.  
  42076. (try_begin),
  42077. (eq, ":troop_no", "$g_talk_troop"),
  42078. (try_begin),
  42079. (eq, ":travel_target", -1),
  42080. (str_store_string, s14, "str_as_the_marshall_i_am_assembling_the_army_of_the_realm"),
  42081. (else_try),
  42082. (try_begin),
  42083. (eq, ":faction_no", "$players_kingdom"),
  42084. (eq, ":travel_target_new_assigned", 1),
  42085. (le, "$number_of_report_to_army_quest_notes", 13),
  42086. (check_quest_active, "qst_report_to_army"),
  42087. (str_store_party_name_link, s10, ":travel_target"),
  42088.  
  42089. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall), #300
  42090.  
  42091. (str_store_troop_name_link, s11, ":faction_marshal"),
  42092. (store_current_hours, ":hours"),
  42093. (call_script, "script_game_get_date_text", 0, ":hours"),
  42094.  
  42095. (str_store_string, s14, "str_as_the_marshall_i_am_assembling_the_army_of_the_realm_and_travel_to_lands_near_s10_to_inform_more_vassals"),
  42096. (str_store_string, s14, "@({s1}) {s11}: {s14}"),
  42097. (add_quest_note_from_sreg, "qst_report_to_army", "$number_of_report_to_army_quest_notes", s14, 0),
  42098. (val_add, "$number_of_report_to_army_quest_notes", 1),
  42099. (try_end),
  42100.  
  42101. (assign, reg0, ":travel_target"),
  42102. (str_store_party_name, s10, ":travel_target"),
  42103. (str_store_string, s14, "str_as_the_marshall_i_am_assembling_the_army_of_the_realm_and_travel_to_lands_near_s10_to_inform_more_vassals"),
  42104. (try_end),
  42105. (str_store_string, s16, "str_i_intend_to_assemble_the_army_of_the_realm"),
  42106. (try_end),
  42107. (else_try),
  42108. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  42109. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_center),
  42110. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  42111.  
  42112. (assign, ":action", spai_besieging_center),
  42113. (assign, ":object", ":faction_object"),
  42114. (try_begin),
  42115. (eq, ":troop_no", "$g_talk_troop"),
  42116. (str_store_string, s14, "str_as_the_marshall_i_am_leading_the_siege"),
  42117. (str_store_string, s16, "str_i_intend_to_begin_the_siege"),
  42118. (try_end),
  42119.  
  42120. (else_try),
  42121. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  42122. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_raiding_village),
  42123. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  42124.  
  42125. (assign, ":action", spai_raiding_around_center),
  42126. (assign, ":object", ":faction_object"),
  42127. (try_begin),
  42128. (eq, ":troop_no", "$g_talk_troop"),
  42129. (str_store_string, s14, "str_as_the_marshall_i_am_leading_our_raid"),
  42130. (str_store_string, s16, "str_i_intend_to_start_our_raid"),
  42131. (try_end),
  42132.  
  42133. (else_try),
  42134. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  42135. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  42136. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  42137. (party_is_active, ":faction_object"),
  42138.  
  42139. #moved (party_set_ai_initiative, ":party_no", 10), #new to avoid losing time of marshal with attacking unimportant targets while there is a threat in our centers.
  42140.  
  42141. (party_get_battle_opponent, ":besieger_party", ":faction_object"),
  42142.  
  42143. (try_begin),
  42144. (gt, ":besieger_party", 0),
  42145. (party_is_active, ":besieger_party"),
  42146.  
  42147. (assign, ":action", spai_engaging_army),
  42148. (assign, ":object", ":besieger_party"),
  42149. (try_begin),
  42150. (eq, ":troop_no", "$g_talk_troop"),
  42151. (str_store_string, s14, "str_as_the_marshall_i_am_leading_our_forces_to_engage_the_enemy_in_battle"),
  42152. (str_store_string, s16, "str_i_intend_to_lead_our_forces_out_to_engage_the_enemy"),
  42153. (try_end),
  42154. (else_try),
  42155. (assign, ":action", spai_patrolling_around_center),
  42156. (assign, ":object", ":faction_object"),
  42157. (try_begin),
  42158. (eq, ":troop_no", "$g_talk_troop"),
  42159. (str_store_string, s14, "str_as_the_marshall_i_am_leading_our_forces_in_search_of_the_enemy"),
  42160. (str_store_string, s16, "str_i_intend_to_lead_our_forces_out_to_find_the_enemy"),
  42161. (try_end),
  42162. (try_end),
  42163.  
  42164. (else_try),
  42165. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  42166. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemy_army),
  42167. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  42168. (party_is_active, ":faction_object"),
  42169.  
  42170. (assign, ":action", spai_engaging_army),
  42171. (assign, ":object", ":faction_object"),
  42172. (try_begin),
  42173. (eq, ":troop_no", "$g_talk_troop"),
  42174. (str_store_string, s14, "str_as_the_marshall_i_am_leading_our_forces_to_engage_the_enemy_in_battle"),
  42175. (str_store_string, s16, "str_i_intend_to_lead_our_forces_out_to_engage_the_enemy"),
  42176. (try_end),
  42177.  
  42178. #Get reinforcements
  42179. (else_try),
  42180. (assign, ":lowest_acceptable_strength_percentage", 30),
  42181.  
  42182. #if troop has enought gold then increase by 10%
  42183. #(troop_get_slot, ":cur_wealth", ":troop_no", slot_troop_wealth),
  42184. #(try_begin),
  42185. # (ge, ":cur_wealth", 2000),
  42186. # (assign, ":wealth_addition", 10),
  42187. #(else_try),
  42188. # (store_div, ":wealth_addition", ":cur_wealth", 200),
  42189. #(try_end),
  42190. #(val_add, ":lowest_acceptable_strength_percentage", ":wealth_addition"),
  42191.  
  42192. (call_script, "script_lord_get_home_center", ":troop_no"),
  42193. (assign, ":home_center", reg0),
  42194. (gt, ":home_center", -1),
  42195. (party_slot_eq, ":home_center", slot_town_lord, ":troop_no"), #newly added
  42196.  
  42197. #if troop is very close to its home center increase by 20%
  42198. (assign, ":distance_addition", 0),
  42199. (party_get_position, pos0, ":home_center"),
  42200. (party_get_position, pos1, ":party_no"),
  42201. (get_distance_between_positions, ":dist", pos0, pos1),
  42202.  
  42203. (try_begin),
  42204. (le, ":dist", 9000),
  42205. (store_div, ":distance_addition", ":dist", 600),
  42206. (store_sub, ":distance_addition", 15, ":distance_addition"),
  42207. (else_try),
  42208. (assign, ":distance_addition", 0),
  42209. (try_end),
  42210. (val_add, ":lowest_acceptable_strength_percentage", ":distance_addition"),
  42211.  
  42212. #if there is no campaign for faction increase by 35%
  42213. (assign, ":no_campaign_addition", 35),
  42214. (try_begin),
  42215. (this_or_next|faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemy_army),
  42216. (this_or_next|faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  42217. (this_or_next|faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_raiding_village),
  42218. (this_or_next|faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_center),
  42219. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  42220. (assign, ":no_campaign_addition", 0),
  42221.  
  42222. #If marshal is player itself and if there is a campaign then lower lowest_acceptable_strength_percentage by 10 instead of not changing it.
  42223. #Because players become confused when they see very less participation from AI lords to their campaigns.
  42224. (try_begin), #400
  42225. (faction_slot_eq, ":faction_no", slot_faction_marshall, "trp_player"),
  42226. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  42227. (try_begin),
  42228. (eq, ":reduce_campaign_ai", 0), #hard
  42229. (assign, ":no_campaign_addition", 0),
  42230. (else_try),
  42231. (eq, ":reduce_campaign_ai", 1), #medium
  42232. (assign, ":no_campaign_addition", -10),
  42233. (else_try),
  42234. (eq, ":reduce_campaign_ai", 2), #easy
  42235. (assign, ":no_campaign_addition", -15),
  42236. (try_end),
  42237. (try_end),
  42238. (try_end),
  42239. (val_add, ":lowest_acceptable_strength_percentage", ":no_campaign_addition"),
  42240. (val_max, ":lowest_acceptable_strength_percentage", 25),
  42241.  
  42242. #max : 30%+15%+35% = 80% (happens when there is no campaign and player is near to its home center.)
  42243. (lt, ":party_strength_as_percentage_of_ideal", ":lowest_acceptable_strength_percentage"),
  42244.  
  42245. (try_begin),
  42246. (store_div, ":lowest_acceptable_strength_percentage_div_3", ":lowest_acceptable_strength_percentage", 3),
  42247. (ge, ":party_strength_as_percentage_of_ideal", ":lowest_acceptable_strength_percentage_div_3"),
  42248. (troop_get_slot, ":troop_wealth", ":troop_no", slot_troop_wealth),
  42249. (le, ":troop_wealth", 1800),
  42250. (assign, ":do_only_collecting_rents", 1),
  42251. (try_end),
  42252.  
  42253. (assign, ":action", spai_holding_center),
  42254. (assign, ":object", ":home_center"),
  42255.  
  42256. (try_begin),
  42257. (eq, ":troop_no", "$g_talk_troop"),
  42258. (str_store_string, s14, "str_i_dont_have_enough_troops_and_i_need_to_get_some_more"),
  42259.  
  42260. (str_store_string, s16, "str_i_am_running_low_on_troops"),
  42261. (try_end),
  42262.  
  42263. (eq, ":do_only_collecting_rents", 0),
  42264.  
  42265. #follow player orders
  42266. (else_try),
  42267. (eq, ":do_only_collecting_rents", 0),
  42268. (party_slot_ge, ":party_no", slot_party_following_orders_of_troop, "trp_kingdom_heroes_including_player_begin"),
  42269.  
  42270. (party_get_slot, ":orders_type", ":party_no", slot_party_orders_type),
  42271. (party_get_slot, ":orders_object", ":party_no", slot_party_orders_object),
  42272. (party_get_slot, ":orders_time", ":party_no", slot_party_orders_time),
  42273.  
  42274. (ge, ":orders_object", 0),
  42275.  
  42276. (store_current_hours, ":hours_since_orders_given"),
  42277. (val_sub, ":hours_since_orders_given", ":orders_time"),
  42278.  
  42279. (party_is_active, ":orders_object"),
  42280. (party_get_slot, ":object_state", ":orders_object", slot_village_state),
  42281. (store_faction_of_party, ":object_faction", ":orders_object"),
  42282. (store_relation, ":relation_with_object", ":faction_no", ":object_faction"),
  42283.  
  42284. (assign, ":orders_are_appropriate", 1),
  42285. (try_begin),
  42286. (gt, ":hours_since_orders_given", 48),
  42287. (assign, ":orders_are_appropriate", 0),
  42288. (else_try),
  42289. (eq, ":orders_type", spai_raiding_around_center),
  42290. (this_or_next|ge, ":relation_with_object", 0),
  42291. (ge, ":object_state", 2),
  42292. (assign, ":orders_are_appropriate", 0),
  42293. (else_try),
  42294. (eq, ":orders_type", spai_besieging_center),
  42295. (ge, ":relation_with_object", 0),
  42296. (assign, ":orders_are_appropriate", 0),
  42297. (else_try),
  42298. (this_or_next|eq, ":orders_type", spai_holding_center),
  42299. (this_or_next|eq, ":orders_type", spai_retreating_to_center),
  42300. (this_or_next|eq, ":orders_type", spai_accompanying_army),
  42301. (eq, ":orders_type", spai_visiting_village),
  42302. (le, ":relation_with_object", 0),
  42303. (assign, ":orders_are_appropriate", 0),
  42304. (try_end),
  42305.  
  42306. (eq, ":orders_are_appropriate", 1),
  42307.  
  42308. (assign, ":action", ":orders_type"),
  42309. (assign, ":object", ":orders_object"),
  42310. (try_begin),
  42311. (eq, ":troop_no", "$g_talk_troop"),
  42312. (str_store_string, s14, "str_we_are_following_your_direction"),
  42313. (try_end),
  42314.  
  42315. #Host of player wedding
  42316. (else_try),
  42317. (eq, ":do_only_collecting_rents", 0),
  42318. (eq, ":operation_in_progress", 0),
  42319. (check_quest_active, "qst_wed_betrothed"),
  42320. (quest_slot_eq, "qst_wed_betrothed", slot_quest_giver_troop, ":troop_no"),
  42321. (quest_get_slot, ":bride", "qst_wed_betrothed", slot_quest_target_troop),
  42322. (call_script, "script_get_kingdom_lady_social_determinants", ":bride"),
  42323. (assign, ":wedding_venue", reg1),
  42324.  
  42325. (assign, ":action", spai_holding_center),
  42326. (assign, ":object", ":wedding_venue"),
  42327.  
  42328. (try_begin),
  42329. (eq, ":troop_no", "$g_talk_troop"),
  42330. (str_store_string, s14, "str_i_need_to_make_preparations_for_your_wedding"),
  42331. (str_store_string, s16, "str_after_all_i_need_to_make_preparations_for_your_wedding"),
  42332. (try_end),
  42333.  
  42334. #Bridegroom at player wedding
  42335. (else_try),
  42336. (eq, ":do_only_collecting_rents", 0),
  42337. (eq, ":operation_in_progress", 0),
  42338. (check_quest_active, "qst_wed_betrothed_female"),
  42339. (quest_slot_eq, "qst_wed_betrothed_female", slot_quest_giver_troop, ":troop_no"),
  42340.  
  42341. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_feast),
  42342. (faction_get_slot, ":feast_venue", ":faction_no", slot_faction_ai_object),
  42343.  
  42344. (assign, ":action", spai_holding_center),
  42345. (assign, ":object", ":feast_venue"),
  42346.  
  42347. (try_begin),
  42348. (eq, ":troop_no", "$g_talk_troop"),
  42349. (str_store_string, s14, "str_i_am_heading_to_the_site_of_our_wedding"), #500
  42350. (str_store_string, s16, "str_after_all_we_are_soon_to_be_wed"),
  42351. (try_end),
  42352.  
  42353. #Host of other feast
  42354. (else_try),
  42355. (eq, ":do_only_collecting_rents", 0),
  42356. (eq, ":operation_in_progress", 0),
  42357. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_feast),
  42358. (faction_get_slot, ":feast_venue", ":faction_no", slot_faction_ai_object),
  42359. (party_slot_eq, ":feast_venue", slot_town_lord, ":troop_no"),
  42360.  
  42361. (assign, ":action", spai_holding_center),
  42362. (assign, ":object", ":feast_venue"),
  42363.  
  42364. (try_begin),
  42365. (eq, ":troop_no", "$g_talk_troop"),
  42366. (str_store_string, s14, "str_i_am_hosting_a_feast_there"),
  42367. (str_store_string, s16, "str_i_have_a_feast_to_host"),
  42368. (try_end),
  42369.  
  42370. #I am the bridegroom at a feast
  42371. (else_try),
  42372. (eq, ":do_only_collecting_rents", 0),
  42373. (eq, ":operation_in_progress", 0),
  42374. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_feast),
  42375. (troop_get_slot, ":troop_betrothed", ":troop_no", slot_troop_betrothed),
  42376. (is_between, ":troop_betrothed", kingdom_ladies_begin, kingdom_ladies_end),
  42377.  
  42378. (faction_get_slot, ":feast_venue", ":faction_no", slot_faction_ai_object),
  42379.  
  42380. (assign, ":action", spai_holding_center),
  42381. (assign, ":object", ":feast_venue"),
  42382.  
  42383. (try_begin),
  42384. (eq, ":troop_no", "$g_talk_troop"),
  42385. (str_store_string, s14, "str_i_am_to_be_the_bridegroom_there"),
  42386. (str_store_string, s16, "str_my_wedding_day_draws_near"),
  42387. (try_end),
  42388.  
  42389. #Drop off prisoners
  42390. (else_try),
  42391. (eq, ":do_only_collecting_rents", 0),
  42392. (gt, ":party_ratio_of_prisoners", 35),
  42393. (eq, ":operation_in_progress", 0),
  42394.  
  42395. (call_script, "script_lord_get_home_center", ":troop_no"),
  42396. (assign, ":home_center", reg0),
  42397.  
  42398. (gt, ":home_center", -1),
  42399.  
  42400. (assign, ":action", spai_holding_center),
  42401. (assign, ":object", ":home_center"),
  42402.  
  42403. (try_begin),
  42404. (eq, ":troop_no", "$g_talk_troop"),
  42405. (str_store_string, s14, "str_i_have_too_much_loot_and_too_many_prisoners_and_need_to_secure_them"),
  42406. (str_store_string, s16, "str_i_should_think_of_dropping_off_some_of_my_prisoners"),
  42407. (try_end),
  42408.  
  42409. #Reinforce a weak center
  42410. (else_try),
  42411. (eq, ":do_only_collecting_rents", 0),
  42412. (assign, ":center_to_reinforce", -1),
  42413. (assign, ":center_reinforce_score", 100),
  42414. (eq, ":operation_in_progress", 0),
  42415.  
  42416. (try_for_range, ":walled_center", walled_centers_begin, walled_centers_end),
  42417. (party_slot_eq, ":walled_center", slot_town_lord, ":troop_no"),
  42418. (party_get_slot, ":center_strength", ":walled_center", slot_party_cached_strength),
  42419. (lt, ":center_strength", ":center_reinforce_score"),
  42420. (assign, ":center_to_reinforce", ":walled_center"),
  42421. (assign, ":center_reinforce_score", ":center_strength"),
  42422. (try_end),
  42423.  
  42424. (gt, ":center_to_reinforce", -1),
  42425.  
  42426. (assign, ":action", spai_holding_center),
  42427. (assign, ":object", ":center_to_reinforce"),
  42428. (try_begin),
  42429. (eq, ":troop_no", "$g_talk_troop"),
  42430. (str_store_string, s14, "str_i_need_to_reinforce_it_as_it_is_poorly_garrisoned"),
  42431. (str_store_string, s16, "str_there_is_a_hole_in_our_defenses"),
  42432. (try_end),
  42433.  
  42434. #Continue screening, if already doing so
  42435. (else_try),
  42436. (eq, ":do_only_collecting_rents", 0),
  42437. (eq, ":old_ai_state", spai_screening_army), #566
  42438.  
  42439. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  42440. (ge, ":faction_marshal", 0),
  42441. (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  42442. (party_is_active, ":marshal_party"),
  42443.  
  42444. (call_script, "script_npc_decision_checklist_troop_follow_or_not", ":troop_no"),
  42445. (eq, reg0, 1),
  42446.  
  42447. (assign, ":action", spai_screening_army),
  42448. (assign, ":object", ":marshal_party"),
  42449. (try_begin),
  42450. (eq, "$g_talk_troop", ":troop_no"),
  42451. (str_store_string, s14, "str_i_am_following_the_marshals_orders"),
  42452. (str_store_string, s16, "str_the_marshal_has_given_me_this_command"),
  42453. (try_end),
  42454.  
  42455. (else_try), #special case for sfai_attacking_enemies_around_center for village raids
  42456. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  42457. (is_between, ":faction_object", villages_begin, villages_end),
  42458.  
  42459. (call_script, "script_npc_decision_checklist_troop_follow_or_not", ":troop_no"),
  42460. (eq, reg0, 1),
  42461.  
  42462. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  42463. (party_get_slot, ":raider_party", ":faction_object", slot_village_raided_by),
  42464. (party_is_active, ":raider_party"),
  42465.  
  42466. #think about adding one more condition here, what if raider army is so powerfull, again lords will go and engage enemy one by one?
  42467. (party_get_slot, ":enemy_strength_nearby", ":faction_object", slot_center_sortie_enemy_strength),
  42468. (lt, ":enemy_strength_nearby", 4000),
  42469. #end think
  42470.  
  42471. (assign, ":action", spai_engaging_army),
  42472. (assign, ":object", ":raider_party"),
  42473. (try_begin),
  42474. (eq, ":troop_no", "$g_talk_troop"),
  42475. (str_store_string, s14, "str_our_realm_needs_my_support_there_is_enemy_raiding_one_of_our_villages_which_is_not_to_far_from_here_i_am_going_there"),
  42476. (str_store_string, s16, "str_the_marshal_has_issued_a_summons"),
  42477. (try_end),
  42478.  
  42479. #Follow the marshall's orders - if on the offensive, and the campaign has not lasted too long. Readiness is currently randomly set
  42480. (else_try),
  42481. (eq, ":do_only_collecting_rents", 0),
  42482. (call_script, "script_npc_decision_checklist_troop_follow_or_not", ":troop_no"),
  42483. (eq, reg0, 1),
  42484.  
  42485. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  42486. (ge, ":faction_marshal", 0),
  42487. (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  42488.  
  42489. (assign, ":action", spai_accompanying_army),
  42490. (assign, ":object", ":marshal_party"),
  42491.  
  42492. (try_begin),
  42493. (eq, "$g_talk_troop", ":troop_no"),
  42494. (str_store_string, s14, "str_i_am_answering_the_marshals_summons"),
  42495. (str_store_string, s16, "str_the_marshal_has_issued_a_summons"),
  42496. (try_end),
  42497.  
  42498. #Support a nearby ally who is on the offensive
  42499. (else_try),
  42500. (eq, ":do_only_collecting_rents", 0),
  42501. (eq, ":faction_is_at_war", 1),
  42502.  
  42503. (assign, ":party_to_support", -1),
  42504. (try_for_range, ":allied_hero", active_npcs_begin, active_npcs_end),
  42505. (troop_slot_eq, ":allied_hero", slot_troop_occupation, slto_kingdom_hero),
  42506. (store_faction_of_troop, ":allied_hero_faction", ":allied_hero"),
  42507. (eq, ":allied_hero_faction", ":faction_no"),
  42508.  
  42509. (neq, ":allied_hero", ":troop_no"),
  42510.  
  42511. (troop_get_slot, ":allied_hero_party", ":allied_hero", slot_troop_leaded_party),
  42512. (gt, ":allied_hero_party", 1),
  42513. (party_is_active, ":allied_hero_party"),
  42514.  
  42515.  
  42516. (this_or_next|party_slot_eq, ":allied_hero_party", slot_party_ai_state, spai_raiding_around_center),
  42517. (party_slot_eq, ":allied_hero_party", slot_party_ai_state, spai_besieging_center),
  42518.  
  42519. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":allied_hero"),
  42520. (gt, reg0, 4),
  42521.  
  42522. (troop_get_slot, ":troop_renown", ":troop_no", slot_troop_renown),
  42523. (troop_get_slot, ":ally_renown", ":allied_hero", slot_troop_renown),
  42524. (le, ":troop_renown", ":ally_renown"), #Ally to support must have higher renown
  42525.  
  42526. (store_distance_to_party_from_party, ":distance", ":party_no", ":allied_hero_party"),
  42527.  
  42528. (lt, ":distance", 5),
  42529.  
  42530. (assign, ":party_to_support", ":allied_hero_party"),
  42531. (try_end),
  42532. (gt, ":party_to_support", 0),
  42533.  
  42534. (assign, ":action", spai_accompanying_army),
  42535. (assign, ":object", ":party_to_support"),
  42536. (try_begin),
  42537. (eq, ":troop_no", "$g_talk_troop"),
  42538. (party_stack_get_troop_id, ":leader", ":object", 0),
  42539. (str_store_troop_name, s10, ":leader"),
  42540.  
  42541. (call_script, "script_troop_get_family_relation_to_troop", ":leader", "$g_talk_troop"),
  42542. (try_begin),
  42543. (eq, reg0, 0),
  42544. (str_store_string, s11, "str_comradeinarms"),
  42545. (try_end),
  42546. (str_store_string, s14, "str_i_am_supporting_my_s11_s10"),
  42547. (str_store_string, s16, "str_i_believe_that_one_of_my_comrades_is_in_need"),
  42548. (try_end),
  42549. #I have decided to attack a vulnerable fortress
  42550. (else_try),
  42551. (eq, ":do_only_collecting_rents", 0),
  42552. (eq, ":faction_is_at_war", 1),
  42553. (eq, ":operation_in_progress", 0),
  42554.  
  42555. (assign, ":walled_center_to_attack", -1),
  42556. (assign, ":walled_center_score", 50),
  42557.  
  42558. (try_for_range, ":walled_center", walled_centers_begin, walled_centers_end),
  42559. (store_faction_of_party, ":walled_center_faction", ":walled_center"),
  42560. (store_relation, ":relation", ":faction_no", ":walled_center_faction"),
  42561. (lt, ":relation", 0),
  42562.  
  42563. (party_get_slot, ":center_cached_strength", ":walled_center", slot_party_cached_strength),
  42564. (val_mul, ":center_cached_strength", 3),
  42565. (val_mul, ":center_cached_strength", 2),
  42566.  
  42567. (lt, ":center_cached_strength", ":party_cached_strength"),
  42568. (lt, ":center_cached_strength", 750),
  42569.  
  42570. (party_slot_eq, ":walled_center", slot_village_state, svs_normal),
  42571. (store_distance_to_party_from_party, ":distance", ":walled_center", ":party_no"),
  42572. (lt, ":distance", ":walled_center_score"),
  42573.  
  42574. (assign, ":walled_center_to_attack", ":walled_center"),
  42575. (assign, ":walled_center_score", ":distance"),
  42576. (try_end),
  42577.  
  42578. (is_between, ":walled_center_to_attack", centers_begin, centers_end),
  42579.  
  42580. (assign, ":action", spai_besieging_center),
  42581. (assign, ":object", ":walled_center_to_attack"),
  42582. (try_begin),
  42583. (eq, "$cheat_mode", 1),
  42584. (str_store_faction_name, s20, ":faction_no"),
  42585. (str_store_party_name, s21, ":object"),
  42586. (display_message, "str_s20_decided_to_attack_s21"),
  42587. (try_end),
  42588.  
  42589. (try_begin),
  42590. (eq, ":troop_no", "$g_talk_troop"),
  42591. (str_store_string, s14, "str_a_fortress_is_vulnerable"),
  42592. (str_store_string, s16, "str_i_believe_that_the_enemy_may_be_vulnerable"),
  42593. (try_end),
  42594.  
  42595. #I am visiting an estate
  42596. (else_try),
  42597. (assign, ":center_to_visit", -1),
  42598. (assign, ":score_to_beat", 300), #at least 300 gold to pick up
  42599. (troop_get_slot, ":troop_wealth", ":troop_no", slot_troop_wealth), #average troop wealth is 2000
  42600. (val_div, ":troop_wealth", 10), #average troop wealth 10% is is 200
  42601. (val_add, ":score_to_beat", ":troop_wealth"), #average score to beat is 500
  42602. (eq, ":operation_in_progress", 0),
  42603.  
  42604. (try_begin),
  42605. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  42606.  
  42607. (assign, reg17, 0),
  42608. (try_begin),
  42609. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  42610. (party_slot_eq, ":party_no", slot_party_ai_object, ":faction_marshal"),
  42611. (assign, reg17, 1),
  42612. (else_try),
  42613. (party_slot_eq, ":party_no", slot_party_following_player, 1),
  42614. (assign, reg17, 1),
  42615. (try_end),
  42616. (eq, reg17, 1),
  42617.  
  42618. (try_begin),
  42619. (neq, ":faction_marshal", "trp_player"),
  42620. (neg|party_slot_eq, ":party_no", slot_party_following_player, 1),
  42621. (val_add, ":score_to_beat", 125),
  42622. (else_try),
  42623. (val_add, ":score_to_beat", 250),
  42624. (try_end),
  42625. (try_end),
  42626.  
  42627. (try_for_range, ":center_no", centers_begin, centers_end),
  42628. (party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
  42629.  
  42630. (assign, reg17, 0),
  42631. (try_begin),
  42632. (is_between, ":center_no", villages_begin, villages_end),
  42633. (party_slot_eq, ":center_no", slot_village_state, svs_normal),
  42634. (assign, reg17, 1),
  42635. (else_try),
  42636. (party_slot_eq, ":center_no", slot_center_is_besieged_by, -1),
  42637. (assign, reg17, 1),
  42638. (try_end),
  42639. (eq, reg17, 1),
  42640.  
  42641. (party_get_slot, ":tariffs_available", ":center_no", slot_center_accumulated_tariffs),
  42642. (party_get_slot, ":rents_available", ":center_no", slot_center_accumulated_rents),
  42643. (store_add, ":money_available", ":rents_available", ":tariffs_available"),
  42644.  
  42645. (gt, ":money_available", ":score_to_beat"),
  42646. (assign, ":center_to_visit", ":center_no"),
  42647. (assign, ":score_to_beat", ":money_available"),
  42648. (try_end),
  42649.  
  42650. (is_between, ":center_to_visit", centers_begin, centers_end),
  42651.  
  42652. (try_begin),
  42653. (is_between, ":center_to_visit", walled_centers_begin, walled_centers_end),
  42654. (assign, ":action", spai_holding_center),
  42655. (assign, ":object", ":center_to_visit"),
  42656. (else_try),
  42657. (assign, ":action", spai_visiting_village),
  42658. (assign, ":object", ":center_to_visit"),
  42659. (try_end),
  42660.  
  42661. (try_begin),
  42662. (eq, ":troop_no", "$g_talk_troop"),
  42663. (str_store_string, s14, "str_i_need_to_inspect_my_properties_and_collect_my_dues"),
  42664. (str_store_string, s16, "str_it_has_been_too_long_since_i_have_inspected_my_estates"),
  42665. (try_end),
  42666.  
  42667. #My men are weary, and I wish to return home
  42668. (else_try),
  42669. (eq, ":do_only_collecting_rents", 0),
  42670. (this_or_next|gt, ":hours_since_last_rest", 504), #Three weeks
  42671. (lt, ":aggressiveness", 25),
  42672. (gt, ":hours_since_last_rest", 168), #one week if aggressiveness < 25
  42673. (eq, ":operation_in_progress", 0),
  42674.  
  42675. (call_script, "script_lord_get_home_center", ":troop_no"),
  42676. (assign, ":home_center", reg0),
  42677.  
  42678. (gt, ":home_center", -1),
  42679. (assign, ":action", spai_holding_center),
  42680. (assign, ":object", ":home_center"),
  42681.  
  42682. (try_begin),
  42683. (eq, ":troop_no", "$g_talk_troop"),
  42684. (str_store_string, s14, "str_my_men_are_weary_so_we_are_returning_home"),
  42685. (str_store_string, s16, "str_my_men_are_becoming_weary"),
  42686. (try_end),
  42687.  
  42688. #I have a score to settle with the enemy
  42689. (else_try),
  42690. (eq, ":do_only_collecting_rents", 0),
  42691. (this_or_next|gt, ":hours_since_last_combat", 12),
  42692. (lt, ":hours_since_last_rest", 96),
  42693. (eq, ":operation_in_progress", 0),
  42694.  
  42695. (eq, ":faction_is_at_war", 1),
  42696. (this_or_next|eq, ":troop_reputation", lrep_debauched),
  42697. (eq, ":troop_reputation", lrep_quarrelsome),
  42698.  
  42699. (assign, ":target_village", -1),
  42700. (assign, ":score_to_beat", 0), #based on relation
  42701.  
  42702. (try_for_range, ":possible_target", villages_begin, villages_end),
  42703. (store_faction_of_party, ":village_faction", ":possible_target"),
  42704. (store_relation, ":relation", ":village_faction", ":faction_no"),
  42705. (lt, ":relation", 0),
  42706.  
  42707. (neg|party_slot_ge, ":possible_target", slot_village_state, svs_looted),
  42708. (party_get_slot, ":town_lord", ":possible_target", slot_town_lord),
  42709. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":town_lord"),
  42710. (assign, ":village_score", reg0),
  42711.  
  42712. (lt, ":village_score", ":score_to_beat"),
  42713. (assign, ":score_to_beat", ":village_score"),
  42714. (assign, ":target_village", ":possible_target"),
  42715. (try_end),
  42716.  
  42717. (is_between, ":target_village", centers_begin, centers_end),
  42718. (assign, ":action", spai_raiding_around_center),
  42719. (assign, ":object", ":target_village"),
  42720.  
  42721. (try_begin),
  42722. (eq, ":troop_no", "$g_talk_troop"),
  42723. (str_store_string, s14, "str_i_have_a_score_to_settle_with_the_lord_there"),
  42724. (str_store_string, s16, "str_i_am_thinking_of_settling_an_old_score"),
  42725. (try_end),
  42726.  
  42727. #I need money, so I am raiding where the money is
  42728. (else_try),
  42729. (eq, ":do_only_collecting_rents", 0),
  42730. (eq, ":faction_is_at_war", 1),
  42731. (eq, ":operation_in_progress", 0),
  42732.  
  42733. (this_or_next|gt, ":hours_since_last_combat", 12),
  42734. (lt, ":hours_since_last_rest", 96),
  42735. (gt, ":aggressiveness", 40),
  42736.  
  42737. (this_or_next|eq, ":troop_reputation", lrep_debauched),
  42738. (this_or_next|eq, ":troop_reputation", lrep_selfrighteous),
  42739. (this_or_next|eq, ":troop_reputation", lrep_cunning),
  42740. (eq, ":troop_reputation", lrep_quarrelsome),
  42741.  
  42742. (troop_get_slot, ":wealth", ":troop_no", slot_troop_wealth),
  42743. (lt, ":wealth", 500),
  42744.  
  42745. (assign, ":score_to_beat", 0),
  42746. (assign, ":target_village", -1),
  42747.  
  42748. (try_for_range, ":possible_target", villages_begin, villages_end),
  42749. (store_faction_of_party, ":village_faction", ":possible_target"),
  42750. (store_relation, ":relation", ":village_faction", ":faction_no"),
  42751. (lt, ":relation", 0),
  42752.  
  42753. (this_or_next|party_slot_eq, ":possible_target", slot_village_state, svs_normal),
  42754. (party_slot_eq, ":possible_target", slot_village_state, svs_being_raided),
  42755.  
  42756. (party_get_slot, reg17, ":possible_target", slot_town_prosperity),
  42757. (store_distance_to_party_from_party, ":distance", ":party_no", ":possible_target"),
  42758. (val_sub, reg17, ":distance"),
  42759.  
  42760. (gt, reg17, ":score_to_beat"),
  42761. (assign, ":score_to_beat", reg17),
  42762. (assign, ":target_village", ":possible_target"),
  42763. (try_end),
  42764.  
  42765. (gt, ":target_village", -1),
  42766.  
  42767. (assign, ":action", spai_raiding_around_center),
  42768. (assign, ":object", ":target_village"),
  42769.  
  42770. (try_begin),
  42771. (eq, ":troop_no", "$g_talk_troop"),
  42772. (str_store_string, s14, "str_i_am_short_of_money_and_i_hear_that_there_is_much_wealth_there"),
  42773. (str_store_string, s16, "str_i_need_to_refill_my_purse_preferably_with_the_enemys_money"),
  42774. (try_end),
  42775.  
  42776. #Attacking wealthiest lands
  42777. (else_try),
  42778. (eq, ":do_only_collecting_rents", 0),
  42779. (eq, ":faction_is_at_war", 1),
  42780. (eq, ":operation_in_progress", 0),
  42781. (gt, ":aggressiveness", 65),
  42782.  
  42783. (assign, ":score_to_beat", 0),
  42784. (assign, ":target_village", -1),
  42785.  
  42786. (try_for_range, ":possible_target", villages_begin, villages_end),
  42787. (store_faction_of_party, ":village_faction", ":possible_target"),
  42788. (store_relation, ":relation", ":village_faction", ":faction_no"),
  42789. (lt, ":relation", 0),
  42790. (neg|party_slot_eq, ":possible_target", slot_village_state, svs_looted),
  42791. (party_get_slot, ":village_prosperity", ":possible_target", slot_town_prosperity),
  42792. (val_mul, ":village_prosperity", 2),
  42793.  
  42794. (store_distance_to_party_from_party, ":distance", ":party_no", ":possible_target"),
  42795. (val_sub, ":village_prosperity", ":distance"),
  42796. (gt, ":village_prosperity", ":score_to_beat"),
  42797.  
  42798. (assign, ":score_to_beat", ":village_prosperity"),
  42799. (assign, ":target_village", ":possible_target"),
  42800. (try_end),
  42801.  
  42802. (gt, ":target_village", -1),
  42803.  
  42804. (assign, ":action", spai_raiding_around_center),
  42805. (assign, ":object", ":target_village"),
  42806.  
  42807. (try_begin),
  42808. (eq, ":troop_no", "$g_talk_troop"),
  42809. (str_store_string, s14, "str_by_striking_at_the_enemys_richest_lands_perhaps_i_can_draw_them_out_to_battle"),
  42810. (str_store_string, s16, "str_i_am_thinking_of_going_on_the_attack"),
  42811. (try_end),
  42812.  
  42813. #End the war
  42814. (else_try),
  42815. (eq, ":do_only_collecting_rents", 0),
  42816. (eq, ":troop_reputation", lrep_upstanding),
  42817. (eq, ":faction_is_at_war", 1),
  42818. (eq, ":operation_in_progress", 0),
  42819.  
  42820. (assign, ":faction_to_attack", -1),
  42821. (try_for_range, ":possible_faction_to_attack", kingdoms_begin, kingdoms_end),
  42822. (store_relation, ":relation", ":faction_no", ":possible_faction_to_attack"),
  42823. (lt, ":relation", 0),
  42824. (faction_slot_eq, ":possible_faction_to_attack", slot_faction_state, sfs_active),
  42825.  
  42826. (store_add, ":war_damage_inflicted_slot", ":possible_faction_to_attack", slot_faction_war_damage_inflicted_on_factions_begin),
  42827. (val_sub, ":war_damage_inflicted_slot", kingdoms_begin),
  42828. (faction_get_slot, ":war_damage_inflicted", ":faction_no", ":war_damage_inflicted_slot"),
  42829.  
  42830. (store_add, ":war_damage_suffered_slot", ":faction_no", slot_faction_war_damage_inflicted_on_factions_begin),
  42831. (val_sub, ":war_damage_suffered_slot", kingdoms_begin),
  42832. (faction_get_slot, ":war_damage_suffered", ":possible_faction_to_attack", ":war_damage_suffered_slot"),
  42833.  
  42834. (gt, ":war_damage_inflicted", 80),
  42835. (lt, ":war_damage_inflicted", ":war_damage_suffered"),
  42836. (assign, ":faction_to_attack", ":possible_faction_to_attack"),
  42837. (try_end),
  42838.  
  42839. (gt, ":faction_to_attack", -1),
  42840.  
  42841. (assign, ":target_village", -1),
  42842. (assign, ":score_to_beat", 50),
  42843.  
  42844. (try_for_range, ":possible_target_village", villages_begin, villages_end),
  42845. (store_faction_of_party, ":village_faction", ":possible_target_village"),
  42846. (eq, ":village_faction", ":faction_to_attack"),
  42847. (neg|party_slot_eq, ":possible_target_village", slot_village_state, svs_looted),
  42848. (store_distance_to_party_from_party, ":distance", ":party_no", ":possible_target_village"),
  42849. (lt, ":distance", ":score_to_beat"),
  42850.  
  42851. (assign, ":score_to_beat", ":distance"),
  42852. (assign, ":target_village", ":possible_target_village"),
  42853. (try_end),
  42854.  
  42855. (gt, ":target_village", -1),
  42856.  
  42857. (assign, ":action", spai_raiding_around_center),
  42858. (assign, ":object", ":target_village"),
  42859.  
  42860. (try_begin),
  42861. (eq, ":troop_no", "$g_talk_troop"),
  42862. (str_store_string, s14, "str_perhaps_if_i_strike_one_more_blow_we_may_end_this_war_on_our_terms_"),
  42863. (str_store_string, s16, "str_we_may_be_able_to_bring_this_war_to_a_close_with_a_few_more_blows"),
  42864. (try_end),
  42865.  
  42866. #I have a feast to attend
  42867. (else_try),
  42868. (eq, ":do_only_collecting_rents", 0),
  42869. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_feast),
  42870. (faction_get_slot, ":feast_venue", ":faction_no", slot_faction_ai_object),
  42871. (party_get_slot, ":feast_host", ":feast_venue", slot_town_lord),
  42872. (eq, ":operation_in_progress", 0),
  42873.  
  42874. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":feast_host"),
  42875. (assign, ":relation_with_host", reg0),
  42876.  
  42877. (ge, ":relation_with_host", 0),
  42878.  
  42879. (assign, ":action", spai_holding_center),
  42880. (assign, ":object", ":feast_venue"),
  42881.  
  42882. (try_begin),
  42883. (eq, ":troop_no", "$g_talk_troop"),
  42884. (str_store_string, s14, "str_i_wish_to_attend_the_feast_there"),
  42885. (str_store_string, s16, "str_there_is_a_feast_which_i_wish_to_attend"),
  42886. (try_end),
  42887. #A lady to court
  42888. (else_try),
  42889. (eq, ":do_only_collecting_rents", 0),
  42890. (neg|troop_slot_eq, "trp_player", slot_troop_betrothed, ":troop_no"),
  42891. (troop_slot_eq, ":troop_no", slot_troop_spouse, -1),
  42892. (neg|is_between, ":troop_no", kings_begin, kings_end),
  42893. (neg|is_between, ":troop_no", pretenders_begin, pretenders_end),
  42894.  
  42895.  
  42896. (gt, ":hours_since_last_courtship", 72),
  42897. (eq, ":operation_in_progress", 0),
  42898.  
  42899. (assign, ":center_to_visit", -1),
  42900. (assign, ":score_to_beat", 150),
  42901.  
  42902. (try_for_range, ":love_interest_slot", slot_troop_love_interest_1, slot_troop_love_interests_end),
  42903. (troop_get_slot, ":love_interest", ":troop_no", ":love_interest_slot"),
  42904. (is_between, ":love_interest", kingdom_ladies_begin, kingdom_ladies_end),
  42905. (troop_get_slot, ":love_interest_center", ":love_interest", slot_troop_cur_center),
  42906. (is_between, ":love_interest_center", centers_begin, centers_end),
  42907. (store_faction_of_party, ":love_interest_faction_no", ":love_interest_center"),
  42908. (eq, ":faction_no", ":love_interest_faction_no"),
  42909. #(store_relation, ":relation", ":faction_no", ":love_interest_faction_no"),
  42910. #(ge, ":relation", 0),
  42911.  
  42912. (store_distance_to_party_from_party, ":distance", ":party_no", ":love_interest_center"),
  42913.  
  42914. (lt, ":distance", ":score_to_beat"),
  42915. (assign, ":center_to_visit", ":love_interest_center"),
  42916. (assign, ":score_to_beat", ":distance"),
  42917. (try_end),
  42918.  
  42919. (gt, ":center_to_visit", -1),
  42920.  
  42921. (assign, ":action", spai_holding_center),
  42922. (assign, ":object", ":center_to_visit"),
  42923.  
  42924. (try_begin),
  42925. (eq, ":troop_no", "$g_talk_troop"),
  42926. (str_store_string, s14, "str_there_is_a_fair_lady_there_whom_i_wish_to_court"),
  42927. (str_store_string, s16, "str_i_have_the_inclination_to_pay_court_to_a_fair_lady"),
  42928. (try_end),
  42929.  
  42930. #Patrolling an alarmed center
  42931. (else_try),
  42932. (eq, ":do_only_collecting_rents", 0),
  42933. (assign, ":target_center", -1),
  42934. (assign, ":score_to_beat", 60),
  42935. (eq, ":operation_in_progress", 0),
  42936. (gt, ":aggressiveness", 40),
  42937.  
  42938. (try_for_range, ":center_to_patrol", centers_begin, centers_end), #find closest center that has spotted enemies.
  42939. (store_faction_of_party, ":center_faction", ":center_to_patrol"),
  42940. (eq, ":center_faction", ":faction_no"),
  42941. (party_slot_ge, ":center_to_patrol", slot_center_last_spotted_enemy, 0),
  42942.  
  42943. #new - begin
  42944. (party_get_slot, ":sortie_strength", ":center_to_patrol", slot_center_sortie_strength),
  42945. (party_get_slot, ":enemy_strength", ":center_to_patrol", slot_center_sortie_enemy_strength),
  42946. (store_mul, ":enemy_strength_mul_14_div_10", ":enemy_strength", 14),
  42947. (val_div, ":enemy_strength_mul_14_div_10", 10),
  42948. (party_get_slot, ":party_strength", ":party_no", slot_party_cached_strength),
  42949.  
  42950. (this_or_next|neg|party_is_in_town, ":party_no", ":center_to_patrol"),
  42951. (gt, ":sortie_strength", ":enemy_strength_mul_14_div_10"),
  42952.  
  42953. (ge, ":party_strength", 100),
  42954. #new - end
  42955.  
  42956. (party_get_slot, reg17, ":center_to_patrol", slot_town_lord),
  42957. (call_script, "script_troop_get_relation_with_troop", reg17, ":troop_no"),
  42958.  
  42959. (this_or_next|eq, ":troop_reputation", lrep_upstanding),
  42960. (gt, reg0, -5),
  42961.  
  42962. (store_distance_to_party_from_party, ":distance", ":party_no", ":center_to_patrol"),
  42963. (lt, ":distance", ":score_to_beat"),
  42964.  
  42965. (assign, ":target_center", ":center_to_patrol"),
  42966. (assign, ":score_to_beat", ":distance"),
  42967. (try_end),
  42968.  
  42969. (is_between, ":target_center", centers_begin, centers_end),
  42970.  
  42971. (assign, ":action", spai_patrolling_around_center),
  42972. (assign, ":object", ":target_center"),
  42973.  
  42974. (try_begin),
  42975. (eq, ":troop_no", "$g_talk_troop"),
  42976. (str_store_string, s14, "str_we_have_heard_reports_that_the_enemy_is_in_the_area"),
  42977. (str_store_string, s16, "str_i_have_heard_reports_of_enemy_incursions_into_our_territory"),
  42978. (try_end),
  42979.  
  42980. #Time in household
  42981. (else_try),
  42982. (eq, ":do_only_collecting_rents", 0),
  42983. (gt, ":hours_since_last_home", 168),
  42984. (eq, ":operation_in_progress", 0),
  42985.  
  42986. (call_script, "script_lord_get_home_center", ":troop_no"),
  42987. (assign, ":home_center", reg0),
  42988. (gt, ":home_center", -1),
  42989.  
  42990. (assign, ":action", spai_holding_center),
  42991. (assign, ":object", ":home_center"),
  42992.  
  42993. (try_begin),
  42994. (eq, ":troop_no", "$g_talk_troop"),
  42995. (str_store_string, s14, "str_i_need_to_spend_some_time_with_my_household"),
  42996. (str_store_string, s16, "str_it_has_been_a_long_time_since_i_have_been_able_to_spend_time_with_my_household"),
  42997. (try_end),
  42998.  
  42999. #Patrolling the borders
  43000. (else_try),
  43001. (eq, ":do_only_collecting_rents", 0),
  43002. (eq, ":faction_is_at_war", 1),
  43003. (gt, ":aggressiveness", 65),
  43004. (eq, ":operation_in_progress", 0),
  43005.  
  43006. (assign, ":center_to_patrol", -1),
  43007. (assign, ":score_to_beat", 75),
  43008.  
  43009. (try_for_range, ":village", villages_begin, villages_end),
  43010. (store_faction_of_party, ":village_faction", ":village"),
  43011. (store_relation, ":relation", ":village_faction", ":faction_no"),
  43012. (lt, ":relation", 0),
  43013.  
  43014. (store_distance_to_party_from_party, ":distance", ":village", ":party_no"),
  43015. (lt, ":distance", ":score_to_beat"),
  43016.  
  43017. (assign, ":score_to_beat", ":distance"),
  43018. (assign, ":center_to_patrol", ":village"),
  43019. (try_end),
  43020.  
  43021. (is_between, ":center_to_patrol", villages_begin, villages_end),
  43022.  
  43023. (assign, ":action", spai_patrolling_around_center),
  43024. (assign, ":object", ":center_to_patrol"),
  43025.  
  43026. (try_begin),
  43027. (eq, ":troop_no", "$g_talk_troop"),
  43028. (str_store_string, s14, "str_i_am_watching_the_borders"),
  43029. (str_store_string, s16, "str_i_may_be_needed_to_watch_the_borders"),
  43030. (try_end),
  43031.  
  43032. #Visiting a friend - temporarily disabled
  43033. (else_try),
  43034. (eq, 1, 0),
  43035.  
  43036. #Patrolling home
  43037. (else_try),
  43038. (eq, ":do_only_collecting_rents", 0),
  43039. (call_script, "script_lord_get_home_center", ":troop_no"),
  43040. (assign, ":home_center", reg0),
  43041.  
  43042. (is_between, ":home_center", centers_begin, centers_end),
  43043. (eq, ":operation_in_progress", 0),
  43044.  
  43045. (assign, ":action", spai_patrolling_around_center),
  43046. (assign, ":object", ":home_center"),
  43047.  
  43048. (try_begin),
  43049. (eq, ":troop_no", "$g_talk_troop"),
  43050. (str_store_string, s14, "str_i_will_guard_the_areas_near_my_home"),
  43051. (str_store_string, s16, "str_i_am_perhaps_needed_most_at_home"),
  43052. (try_end),
  43053.  
  43054. #Default end
  43055. (else_try),
  43056. (eq, ":do_only_collecting_rents", 0),
  43057. (eq, ":operation_in_progress", 0),
  43058.  
  43059. (call_script, "script_lord_get_home_center", ":troop_no"),
  43060. (assign, ":home_center", reg0),
  43061. (is_between, ":home_center", walled_centers_begin, walled_centers_end),
  43062.  
  43063. (assign, ":action", spai_holding_center),
  43064. (assign, ":object", ":home_center"),
  43065.  
  43066. (try_begin),
  43067. (eq, ":troop_no", "$g_talk_troop"),
  43068. (str_store_string, s14, "str_i_cant_think_of_anything_better_to_do"),
  43069. (try_end),
  43070. (else_try),
  43071. (eq, ":do_only_collecting_rents", 0),
  43072. (eq, ":operation_in_progress", 1),
  43073.  
  43074. (party_get_slot, ":action", ":party_no", slot_party_ai_state),
  43075. (party_get_slot, ":object", ":party_no", slot_party_ai_object),
  43076.  
  43077. (try_begin),
  43078. (eq, ":troop_no", "$g_talk_troop"),
  43079. (str_store_string, s14, "str_i_am_completing_what_i_have_already_begun"),
  43080. (try_end),
  43081. (else_try),
  43082. (eq, ":do_only_collecting_rents", 0),
  43083. (assign, ":action", spai_undefined),
  43084. (assign, ":object", -1),
  43085.  
  43086. (try_begin),
  43087. (eq, ":troop_no", "$g_talk_troop"),
  43088. (str_store_string, s14, "str_i_dont_even_have_a_home_to_which_to_return"),
  43089. (try_end),
  43090. (try_end),
  43091.  
  43092. (try_begin),
  43093. (eq, "$cheat_mode", 2),
  43094. (str_store_troop_name, s10, ":troop_no"),
  43095. (display_message, "str_debug__s10_decides_s14_faction_ai_s15"),
  43096. (try_end),
  43097.  
  43098. (assign, reg0, ":action"),
  43099. (assign, reg1, ":object"),
  43100. ]),
  43101.  
  43102. #script_npc_decision_checklist_troop_follow_or_not
  43103. # INPUT: troop_no
  43104. # OUTPUT: reg0
  43105. (
  43106. "npc_decision_checklist_troop_follow_or_not", [
  43107.  
  43108. (store_script_param, ":troop_no", 1),
  43109. (store_faction_of_troop, ":faction_no", ":troop_no"),
  43110. (faction_get_slot, ":faction_ai_state", ":faction_no", slot_faction_ai_state),
  43111.  
  43112. (troop_get_slot, ":troop_reputation", ":troop_no", slot_lord_reputation_type),
  43113. (faction_get_slot, ":faction_marshall", ":faction_no", slot_faction_marshall),
  43114.  
  43115. (assign, ":result", 0),
  43116. (try_begin),
  43117. (eq, ":faction_marshall", -1),
  43118.  
  43119. (try_begin),
  43120. (eq, ":troop_no", "$g_talk_troop"),
  43121. (str_store_string, s15, "str__i_am_acting_independently_because_no_marshal_is_appointed"),
  43122. (try_end),
  43123. (else_try),
  43124. (troop_get_slot, ":faction_marshall_party", ":faction_marshall", slot_troop_leaded_party),
  43125. (neg|party_is_active, ":faction_marshall_party"),
  43126.  
  43127. #Not doing an offensive
  43128. (try_begin),
  43129. (eq, ":troop_no", "$g_talk_troop"),
  43130. (str_store_string, s15, "str__i_am_acting_independently_because_our_marshal_is_currently_indisposed"),
  43131. (try_end),
  43132. (else_try),
  43133. (neq, ":faction_ai_state", sfai_attacking_center),
  43134. (neq, ":faction_ai_state", sfai_raiding_village),
  43135. (neq, ":faction_ai_state", sfai_attacking_enemies_around_center),
  43136. (neq, ":faction_ai_state", sfai_attacking_enemy_army),
  43137. (neq, ":faction_ai_state", sfai_gathering_army),
  43138.  
  43139. #Not doing an offensive
  43140. (try_begin),
  43141. (eq, ":troop_no", "$g_talk_troop"),
  43142. (str_store_string, s15, "str__i_am_acting_independently_because_our_realm_is_currently_not_on_campaign"),
  43143. (try_end),
  43144. (else_try),
  43145. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":faction_marshall"),
  43146. (assign, ":relation_with_marshall", reg0),
  43147.  
  43148. (try_begin),
  43149. (le, ":relation_with_marshall", -10),
  43150. (assign, ":acceptance_level", 10000),
  43151. (else_try),
  43152. (store_mul, ":acceptance_level", ":relation_with_marshall", -1000),
  43153. (try_end),
  43154.  
  43155. (val_add, ":acceptance_level", 1500),
  43156.  
  43157. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  43158. (try_begin),
  43159. (neq, ":faction_no", "$players_kingdom"),
  43160. (try_begin),
  43161. (eq, ":reduce_campaign_ai", 0), #hard
  43162. (val_add, ":acceptance_level", -1250),
  43163. (else_try),
  43164. (eq, ":reduce_campaign_ai", 1), #moderate
  43165. (else_try),
  43166. (eq, ":reduce_campaign_ai", 2), #easy
  43167. (val_add, ":acceptance_level", 1250),
  43168. (try_end),
  43169. (else_try),
  43170. (faction_slot_eq, ":faction_no", slot_faction_marshall, "trp_player"),
  43171. (try_begin),
  43172. (eq, ":reduce_campaign_ai", 0), #hard/player's faction
  43173. (val_add, ":acceptance_level", -1000),
  43174. (else_try),
  43175. (eq, ":reduce_campaign_ai", 1), #moderate/player's faction
  43176. (val_add, ":acceptance_level", -1500),
  43177. (else_try),
  43178. (eq, ":reduce_campaign_ai", 2), #easy/player's faction
  43179. (val_add, ":acceptance_level", -2000),
  43180. (try_end),
  43181. (try_end),
  43182.  
  43183. (troop_get_slot, ":temp_ai_seed", ":troop_no", slot_troop_temp_decision_seed),
  43184.  
  43185. (le, ":temp_ai_seed", ":acceptance_level"),
  43186.  
  43187. #Very low opinion of marshall
  43188. (try_begin),
  43189. (eq, ":troop_no", "$g_talk_troop"),
  43190. (str_store_string, s15, "str__i_am_not_accompanying_the_marshal_because_i_fear_that_he_may_lead_us_into_disaster"),
  43191. (try_end),
  43192. #Make nuanced, depending on personality type
  43193. (else_try),
  43194. (troop_get_slot, ":marshal_controversy", ":faction_marshall", slot_faction_marshall),
  43195.  
  43196. (lt, ":relation_with_marshall", 0),
  43197. (ge, ":marshal_controversy", 50),
  43198.  
  43199. (try_begin),
  43200. (eq, ":troop_no", "$g_talk_troop"),
  43201. (str_store_string, s15, "str_i_am_not_accompanying_the_marshal_because_i_question_his_judgment"),
  43202. (try_end),
  43203. (else_try),
  43204. (troop_get_slot, ":marshal_controversy", ":faction_marshall", slot_faction_marshall),
  43205. (neg|faction_slot_eq, ":faction_no", slot_faction_leader, ":faction_marshall"),
  43206.  
  43207. (lt, ":relation_with_marshall", 5),
  43208. (ge, ":marshal_controversy", 80),
  43209.  
  43210. (try_begin),
  43211. (eq, ":troop_no", "$g_talk_troop"),
  43212. (str_store_string, s15, "str_i_am_not_accompanying_the_marshal_because_will_be_reappointment"),
  43213. (try_end),
  43214. (else_try),
  43215. #(lt, ":relation_with_marshall", 45),
  43216. #(eq, ":faction_marshall", "trp_player"), #moved below as only effector. Search "think about this".
  43217.  
  43218. (store_sub, ":relation_with_marshal_difference", 50, ":relation_with_marshall"),
  43219.  
  43220. #for 50 relation with marshal ":acceptance_level" will be 0
  43221. #for 20 relation with marshal ":acceptance_level" will be 2100
  43222. #for 10 relation with marshal ":acceptance_level" will be 2800
  43223. #for 0 relation with marshal ":acceptance_level" will be 3500
  43224. #for -10 relation with marshal ":acceptance_level" will be 4200
  43225. #average is about 2500
  43226. (store_mul, ":acceptance_level", ":relation_with_marshal_difference", 70),
  43227.  
  43228. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  43229. (try_begin),
  43230. (neq, ":faction_no", "$players_kingdom"),
  43231.  
  43232. (try_begin),
  43233. (eq, ":reduce_campaign_ai", 0), #hard
  43234. (val_add, ":acceptance_level", -1200),
  43235. (else_try),
  43236. (eq, ":reduce_campaign_ai", 1), #moderate
  43237. (else_try),
  43238. (eq, ":reduce_campaign_ai", 2), #easy
  43239. (val_add, ":acceptance_level", 1200),
  43240. (try_end),
  43241. (else_try),
  43242. (eq, ":faction_marshall", "trp_player"),
  43243.  
  43244. (try_begin),
  43245. (eq, ":reduce_campaign_ai", 0), #hard
  43246. (val_add, ":acceptance_level", -1000),
  43247. (else_try),
  43248. (eq, ":reduce_campaign_ai", 1), #moderate
  43249. (val_add, ":acceptance_level", -1500),
  43250. (else_try),
  43251. (eq, ":reduce_campaign_ai", 2), #easy
  43252. (val_add, ":acceptance_level", -2000),
  43253. (try_end),
  43254. (try_end),
  43255.  
  43256. (try_begin),
  43257. (eq, ":troop_reputation", lrep_selfrighteous),
  43258. (val_add, ":acceptance_level", 1500),
  43259. (else_try),
  43260. (this_or_next|eq, ":troop_reputation", lrep_martial),
  43261. (this_or_next|eq, ":troop_reputation", lrep_roguish),
  43262. (eq, ":troop_reputation", lrep_quarrelsome),
  43263. (val_add, ":acceptance_level", 1000),
  43264. (else_try),
  43265. (eq, ":troop_reputation", lrep_cunning),
  43266. (val_add, ":acceptance_level", 500),
  43267. (else_try),
  43268. (eq, ":troop_reputation", lrep_upstanding), #neutral
  43269. (else_try),
  43270. (this_or_next|eq, ":troop_reputation", lrep_benefactor), #helper
  43271. (eq, ":troop_reputation", lrep_goodnatured),
  43272. (val_add, ":acceptance_level", -500),
  43273. (else_try),
  43274. (eq, ":troop_reputation", lrep_custodian), #very helper
  43275. (val_add, ":acceptance_level", -1000),
  43276. (try_end),
  43277.  
  43278. (try_begin),
  43279. (troop_slot_eq, ":faction_marshall", slot_lord_reputation_type, lrep_quarrelsome),
  43280. (val_add, ":acceptance_level", -750),
  43281. (else_try),
  43282. (this_or_next|troop_slot_eq, ":faction_marshall", slot_lord_reputation_type, lrep_martial),
  43283. (troop_slot_eq, ":faction_marshall", slot_lord_reputation_type, lrep_upstanding),
  43284. (val_add, ":acceptance_level", -250),
  43285. (try_end),
  43286.  
  43287. (val_add, ":acceptance_level", 2000),
  43288. #average become 2500 + 2000 = 4500, (45% of lords will not join campaign because of this reason. (33% for hard, 57% for easy, 30% for marshal player))
  43289.  
  43290. (troop_get_slot, ":temp_ai_seed", ":troop_no", slot_troop_temp_decision_seed),
  43291.  
  43292. (le, ":temp_ai_seed", ":acceptance_level"),
  43293.  
  43294. (try_begin),
  43295. (eq, ":troop_no", "$g_talk_troop"),
  43296. (str_store_string, s15, "str_i_am_not_accompanying_the_marshal_because_i_can_do_greater_deeds"),
  43297. (try_end),
  43298.  
  43299. #(try_begin),
  43300. # (ge, "$cheat_mode", 1),
  43301. # (assign, reg7, ":acceptance_level"),
  43302. # (assign, reg8, ":relation_with_marshall"),
  43303. # (display_message, "@{!}DEBUGS : acceptance level : {reg7}, relation with marshal : {reg8}"),
  43304. #(try_end),
  43305. (else_try),
  43306. (store_current_hours, ":hours_since_last_faction_rest"),
  43307. (faction_get_slot, ":last_rest_time", ":faction_no", slot_faction_ai_last_rest_time),
  43308. (val_sub, ":hours_since_last_faction_rest", ":last_rest_time"),
  43309.  
  43310. #nine days on average, marshal will usually end after 10 days
  43311. #ozan changed, 360 hours (15 days) in average, marshal cannot end it during a siege attack/defence anymore.
  43312. (assign, ":troop_campaign_limit", 360),
  43313. (store_mul, ":marshal_relation_modifier", ":relation_with_marshall", 6), #ozan changed 4 to 6.
  43314. (val_add, ":troop_campaign_limit", ":marshal_relation_modifier"),
  43315.  
  43316. (try_begin),
  43317. (eq, ":troop_reputation", lrep_upstanding),
  43318. (val_mul, ":troop_campaign_limit", 4),
  43319. (val_div, ":troop_campaign_limit", 3),
  43320. (try_end),
  43321.  
  43322. (str_store_troop_name, s16, ":faction_marshall"),
  43323.  
  43324. (gt, ":hours_since_last_faction_rest", ":troop_campaign_limit"),
  43325.  
  43326. #Too long a campaign
  43327. (try_begin),
  43328. (eq, ":troop_no", "$g_talk_troop"),
  43329. (str_store_string, s15, "str__s16_has_kept_us_on_campaign_on_far_too_long_and_there_are_other_pressing_matters_to_which_i_must_attend"),
  43330. (try_end),
  43331. #Also make nuanced, depending on personality type
  43332. (else_try),
  43333. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  43334. (neg|party_is_active, ":party_no"),
  43335. #This string should not occur, as it will only happen if a lord is contemplating following the player
  43336. (else_try),
  43337. (troop_get_slot, ":marshal_party", ":faction_marshall", slot_troop_leaded_party),
  43338.  
  43339. (assign, ":information_radius", 40),
  43340. (try_begin),
  43341. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  43342. (assign, ":information_radius", 50),
  43343. (try_end),
  43344.  
  43345. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  43346. (try_begin),
  43347. (neq, ":faction_no", "fac_player_supporters_faction"),
  43348. (neq, ":faction_no", "$players_kingdom"),
  43349. (try_begin),
  43350. (eq, ":reduce_campaign_ai", 2), #easy
  43351. (try_begin),
  43352. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  43353. (val_add, ":information_radius", -10),
  43354. (else_try),
  43355. (val_add, ":information_radius", -8),
  43356. (try_end),
  43357. (else_try),
  43358. (eq, ":reduce_campaign_ai", 1), #moderate
  43359. (try_begin),
  43360. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  43361. (val_add, ":information_radius", -5),
  43362. (else_try),
  43363. (val_add, ":information_radius", -4),
  43364. (try_end),
  43365. (try_end),
  43366. (else_try),
  43367. (try_begin),
  43368. (eq, ":reduce_campaign_ai", 2), #easy
  43369. (try_begin),
  43370. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  43371. (val_add, ":information_radius", 25),
  43372. (else_try),
  43373. (val_add, ":information_radius", 20),
  43374. (try_end),
  43375. (else_try),
  43376. (eq, ":reduce_campaign_ai", 1), #moderate
  43377. (try_begin),
  43378. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  43379. (val_add, ":information_radius", 15),
  43380. (else_try),
  43381. (val_add, ":information_radius", 12),
  43382. (try_end),
  43383. (else_try),
  43384. (eq, ":reduce_campaign_ai", 0), #hard
  43385. (try_begin),
  43386. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_gathering_army),
  43387. (val_add, ":information_radius", 5),
  43388. (else_try),
  43389. (val_add, ":information_radius", 4),
  43390. (try_end),
  43391. (try_end),
  43392. (try_end),
  43393.  
  43394. (faction_get_slot, ":faction_object", ":faction_no", slot_faction_ai_object),
  43395. (assign, reg17, 0),
  43396. (try_begin),
  43397. (try_begin),
  43398. (neg|is_between, ":faction_object", villages_begin, villages_end),
  43399. (assign, reg17, 1),
  43400. (try_end),
  43401. (try_begin),
  43402. (neg|faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_attacking_enemies_around_center),
  43403. (assign, reg17, 1),
  43404. (try_end),
  43405. (eq, reg17, 1),
  43406.  
  43407. (store_distance_to_party_from_party, ":distance", ":marshal_party", ":party_no"),
  43408.  
  43409. (gt, ":distance", ":information_radius"),
  43410.  
  43411. (try_begin),
  43412. (eq, ":troop_no", "$g_talk_troop"),
  43413. (str_store_string, s15, "str__i_am_not_participating_in_the_marshals_campaign_because_i_do_not_know_where_to_find_our_main_army"),
  43414. (try_end),
  43415. (else_try),
  43416. (eq, reg17, 0),
  43417.  
  43418. (assign, reg17, 1),
  43419. (try_begin),
  43420. #if we are already accompanying marshal forget below.
  43421. (party_slot_eq, ":party_no", slot_party_ai_state, spai_accompanying_army),
  43422. (party_slot_eq, ":party_no", slot_party_ai_object, ":marshal_party"),
  43423. (assign, reg17, 0),
  43424. (try_end),
  43425. (eq, reg17, 1),
  43426.  
  43427. #if faction ai is "attacking enemies around a center" is then do not find and compare distance to marshal, find and compare distance to "attacked village"
  43428. (party_get_slot, ":enemy_strength_nearby", ":faction_object", slot_center_sortie_enemy_strength),
  43429.  
  43430. (try_begin), #changes between 70..x (as ":enemy_strength_nearby" increases, ":information_radius" increases too.),
  43431. (ge, ":enemy_strength_nearby", 4000),
  43432. (val_sub, ":enemy_strength_nearby", 4000),
  43433. (store_div, ":information_radius", ":enemy_strength_nearby", 200),
  43434. (val_add, ":information_radius", 70),
  43435. (else_try), #changes between 30..70
  43436. (store_div, ":information_radius", ":enemy_strength_nearby", 100),
  43437. (val_add, ":information_radius", 30),
  43438. (try_end),
  43439.  
  43440. (store_distance_to_party_from_party, ":distance", ":faction_object", ":party_no"),
  43441.  
  43442. (gt, ":distance", ":information_radius"),
  43443.  
  43444. (try_begin),
  43445. (eq, ":troop_no", "$g_talk_troop"),
  43446. (str_store_string, s15, "str__i_am_acting_independently_although_some_enemies_have_been_spotted_within_our_borders_they_havent_come_in_force_and_the_local_troops_should_be_able_to_dispatch_them"),
  43447. (try_end),
  43448. (try_end),
  43449.  
  43450. (gt, ":distance", ":information_radius"),
  43451. (else_try),
  43452. (try_begin),
  43453. (eq, ":troop_no", "$g_talk_troop"),
  43454. (str_store_string, s15, "str__the_needs_of_the_realm_must_come_first"),
  43455. (try_end),
  43456. (assign, ":result", 1),
  43457. (try_end),
  43458.  
  43459. (assign, reg0, ":result"),
  43460. ]),
  43461.  
  43462. #script_find_total_prosperity_score
  43463. # INPUT: center_no
  43464. # OUTPUT: reg0 = total_prosperity_score
  43465. (
  43466. "find_total_prosperity_score",
  43467. [
  43468. (store_script_param, ":center_no", 1),
  43469.  
  43470. (try_begin), #":total_prosperity_score" changes between 10..100
  43471. (is_between, ":center_no", walled_centers_begin, walled_centers_end),
  43472.  
  43473. (party_get_slot, ":center_prosperity", ":center_no", slot_town_prosperity),
  43474. (store_add, ":center_prosperity_add_200_div_10", ":center_prosperity", 200),
  43475. (val_div, ":center_prosperity_add_200_div_10", 10),
  43476. (try_begin),
  43477. (is_between, ":center_no", towns_begin, towns_end),
  43478. (store_mul, ":this_center_score", ":center_prosperity_add_200_div_10", 15),
  43479. (else_try),
  43480. (store_mul, ":this_center_score", ":center_prosperity_add_200_div_10", 5),
  43481. (try_end),
  43482. (assign, ":total_prosperity_score", ":this_center_score"),
  43483.  
  43484. (try_for_range_backwards, ":village_no", villages_begin, villages_end),
  43485. (party_slot_eq, ":village_no", slot_village_bound_center, ":center_no"),
  43486.  
  43487. (party_get_slot, ":village_prosperity", ":village_no", slot_town_prosperity),
  43488. (store_add, ":village_prosperity_add_200_div_10", ":village_prosperity", 200),
  43489. (val_div, ":village_prosperity_add_200_div_10", 10),
  43490. (store_mul, ":this_village_score", ":village_prosperity_add_200_div_10", 5),
  43491.  
  43492. (val_add, ":total_prosperity_score", ":this_village_score"),
  43493. (try_end),
  43494. (else_try),
  43495. (party_get_slot, ":center_prosperity", ":center_no", slot_town_prosperity),
  43496. (store_add, ":center_prosperity_add_200_div_10", ":center_prosperity", 200),
  43497. (val_div, ":center_prosperity_add_200_div_10", 10),
  43498. (store_mul, ":this_center_score", ":center_prosperity_add_200_div_10", 5),
  43499. (assign, ":total_prosperity_score", ":this_center_score"),
  43500. (try_end),
  43501. (val_div, ":total_prosperity_score", 10),
  43502.  
  43503. (assign, reg0, ":total_prosperity_score"),
  43504. ]),
  43505.  
  43506. #script_calculate_center_assailability_score
  43507. # INPUT: faction_no
  43508. # param1: faction_no
  43509. # param2: all_vassals_included, (becomes 1 if we want to find attackable center if we collected 20% of vassals during gathering army phase)
  43510. # OUTPUT:
  43511. # reg0 = center_to_attack (-1 if none is logical)
  43512. # reg1 = maximum_attack_score
  43513. (
  43514. "calculate_center_assailability_score",
  43515. [
  43516. (store_script_param, ":troop_no", 1),
  43517. (store_script_param, ":potential_target", 2),
  43518. (store_script_param, ":all_vassals_included", 3),
  43519.  
  43520. (assign, ":target_score", -1),
  43521.  
  43522. (store_faction_of_troop, ":faction_no", ":troop_no"),
  43523.  
  43524. (store_current_hours, ":hours_since_last_offensive"),
  43525. (faction_get_slot, ":last_offensive_time", ":faction_no", slot_faction_last_offensive_concluded),
  43526. (val_sub, ":hours_since_last_offensive", ":last_offensive_time"),
  43527.  
  43528. (store_div, ":last_offensive_time_score", ":hours_since_last_offensive", 12), #30..50
  43529. (val_add, ":last_offensive_time_score", 30),
  43530. (val_min, ":last_offensive_time_score", 100),
  43531.  
  43532. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  43533.  
  43534. (assign, ":marshal_party", -1),
  43535. (assign, ":marshal_strength", 0),
  43536. #(assign, ":strength_of_nearby_friend", 0),
  43537.  
  43538. (try_begin),
  43539. (gt, ":faction_marshal", 0),
  43540. (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  43541. (party_is_active, ":marshal_party"),
  43542. (party_get_slot, ":marshal_strength", ":marshal_party", slot_party_cached_strength),
  43543. #(eq, ":all_vassals_included", 0),
  43544. (party_get_slot, ":strength_of_current_followers", ":marshal_party", slot_party_follower_strength),
  43545. #(party_get_slot, ":strength_of_nearby_friend", ":marshal_party", slot_party_nearby_friend_strength),
  43546. (try_end),
  43547.  
  43548. #(try_begin),
  43549. # (eq, ":all_vassals_included", 0),
  43550. #
  43551. # (try_begin),
  43552. # (gt, ":faction_marshal", 0),
  43553. # (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  43554. # (party_is_active, ":marshal_party"),
  43555. # (party_get_slot, ":strength_of_potential_followers", ":marshal_party", slot_party_follower_strength),
  43556. # (try_end),
  43557. #(else_try),
  43558. # (eq, ":all_vassals_included", 1),
  43559. #
  43560. # (assign, ":strength_of_potential_followers", 0),
  43561. #
  43562. # (try_for_parties, ":party_no"),
  43563. # (store_faction_of_party, ":party_faction", ":party_no"),
  43564. # (eq, ":party_faction", ":faction_no"),
  43565. # (neq, ":party_no", ":marshal_party"),
  43566. # (party_slot_eq, ":party_no", slot_party_type, spt_kingdom_hero_party),
  43567. # (call_script, "script_party_calculate_strength", ":party_no", 0),
  43568. # (val_add, ":strength_of_potential_followers", reg0),
  43569. # (try_end),
  43570. #
  43571. # (val_div, ":strength_of_potential_followers", 2), #Ozan - Think about this, will you divide strength_of_potential_followers to 3 or 2.5 or 2
  43572. #(else_try),
  43573. # (assign, ":strength_of_potential_followers", 0),
  43574. #(try_end),
  43575.  
  43576. (faction_get_slot, ":last_attacked_center", ":faction_no", slot_faction_last_attacked_center),
  43577. (faction_get_slot, ":last_attacked_hours", ":faction_no", slot_faction_last_attacked_hours),
  43578.  
  43579. (try_begin),
  43580. (store_current_hours, ":hours"),
  43581. (store_add, ":last_attacked_hours_plus_24", ":last_attacked_hours", 24),
  43582. (gt, ":hours", ":last_attacked_hours_plus_24"),
  43583. (faction_set_slot, ":faction_no", slot_faction_last_attacked_center, 0),
  43584. (assign, ":last_attacked_center", 0),
  43585. (try_end),
  43586.  
  43587. (try_begin),
  43588. (this_or_next|eq, ":last_attacked_center", 0),
  43589. (this_or_next|eq, ":last_attacked_center", ":potential_target"),
  43590. (this_or_next|eq, "$g_do_not_skip_other_than_current_ai_object", 1),
  43591. (neg|faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  43592.  
  43593. (party_is_active, ":potential_target"),
  43594. (store_faction_of_party, ":potential_target_faction", ":potential_target"),
  43595.  
  43596. (store_relation, ":relation", ":potential_target_faction", ":faction_no"),
  43597. (lt, ":relation", 0),
  43598.  
  43599. #attack if and only if we are already besieging that center or anybody do not making besiege.
  43600. (assign, ":faction_of_besieger_party", -1),
  43601. (try_begin),
  43602. (is_between, ":potential_target", walled_centers_begin, walled_centers_end),
  43603. (neg|party_slot_eq, ":potential_target", slot_center_is_besieged_by, -1),
  43604. (party_get_slot, ":besieger_party", ":potential_target", slot_center_is_besieged_by),
  43605. (party_is_active, ":besieger_party"),
  43606. (store_faction_of_party, ":faction_of_besieger_party", ":besieger_party"),
  43607. (try_end),
  43608.  
  43609. (this_or_next|eq, ":faction_of_besieger_party", -1),
  43610. (eq, ":faction_of_besieger_party", ":faction_no"),
  43611.  
  43612. #attack if and only if this center is not a village or if it is village it should not be raided or looted
  43613. (assign, ":village_is_looted_or_raided_already", 0),
  43614. (try_begin),
  43615. (is_between, ":potential_target", villages_begin, villages_end),
  43616. (try_begin),
  43617. (party_slot_eq, ":potential_target", slot_village_state, svs_being_raided),
  43618. (party_get_slot, ":raider_party", ":potential_target", slot_village_raided_by),
  43619. (party_is_active, ":raider_party"),
  43620.  
  43621. (store_faction_of_party, ":raider_faction", ":raider_party"),
  43622. (neq, ":raider_faction", ":faction_no"),
  43623. (assign, ":raiding_by_one_other_faction", 1),
  43624. (else_try),
  43625. (assign, ":raiding_by_one_other_faction", 0),
  43626. (try_end),
  43627. (this_or_next|party_slot_eq, ":potential_target", slot_village_state, svs_looted),
  43628. (eq, ":raiding_by_one_other_faction", 1),
  43629. (assign, ":village_is_looted_or_raided_already", 1),
  43630. (try_end),
  43631. (eq, ":village_is_looted_or_raided_already", 0),
  43632.  
  43633. #if ":potential_target" is faction object of some other faction which is enemy to owner of
  43634. #":potential_target" then this target cannot be new target we are looking for.
  43635. (assign, ":this_potantial_target_is_target_of_some_other_faction", 0),
  43636. (try_for_range, ":cur_faction", kingdoms_begin, kingdoms_end),
  43637. (is_between, ":cur_faction", "fac_kingdom_1", kingdoms_end), #Excluding player kingdom
  43638. (neq, ":cur_faction", ":faction_no"),
  43639. (faction_get_slot, ":faction_object", ":cur_faction", slot_faction_ai_object),
  43640. (eq, ":faction_object", ":potential_target"),
  43641. (store_relation, ":rel", ":potential_target_faction", ":cur_faction"),
  43642. (lt, ":rel", 0),
  43643. (assign, ":this_potantial_target_is_target_of_some_other_faction", 1),
  43644. (try_end),
  43645. (eq, ":this_potantial_target_is_target_of_some_other_faction", 0),
  43646.  
  43647. (try_begin),
  43648. (is_between, ":potential_target", walled_centers_begin, walled_centers_end),
  43649. (party_get_slot, ":potential_target_inside_strength", ":potential_target", slot_party_cached_strength),
  43650. (party_get_slot, ":potential_target_nearby_enemy_strength", ":potential_target", slot_party_nearby_friend_strength),
  43651. (val_div, ":potential_target_nearby_enemy_strength", 2),
  43652. (store_add, ":potential_target_strength", ":potential_target_inside_strength", ":potential_target_nearby_enemy_strength"),
  43653.  
  43654. #(try_begin),
  43655. #(eq, ":faction_no", "fac_kingdom_4"),
  43656. #(assign, reg0, ":potential_target_inside_strength"),
  43657. #(assign, reg1, ":potential_target_nearby_enemy_strength"),
  43658. #(assign, reg2, ":marshal_strength"),
  43659. #(assign, reg3, ":strength_of_potential_followers"),
  43660. #(assign, reg4, ":strength_of_nearby_friend"),
  43661. #(assign, reg6, ":marshal_party"),
  43662. #(str_store_party_name, s8, ":potential_target"),
  43663. #(eq, ":all_vassals_included", 0),
  43664. #(display_message, "@DEBUG : {s8}:{reg0}, neare {reg1}, our {reg2}, follow {reg3}, nearf {reg4}"),
  43665. #(try_end),
  43666.  
  43667. (val_mul, ":potential_target_strength", 4), #in walled centers defenders have advantage.
  43668. (val_div, ":potential_target_strength", 3),
  43669.  
  43670. #(store_add, ":army_strength", ":marshal_strength", ":strength_of_potential_followers"),
  43671. (assign, ":army_strength", ":marshal_strength"),
  43672. (val_add, ":army_strength", ":strength_of_current_followers"),
  43673. (store_mul, ":power_ratio", ":army_strength", 100),
  43674.  
  43675. #this ratio ":power_ratio" shows (our total army power) / (their total army power)
  43676. (try_begin),
  43677. (gt, ":potential_target_strength", 0),
  43678. (val_div, ":power_ratio", ":potential_target_strength"),
  43679. (else_try),
  43680. (assign, ":power_ratio", 1000),
  43681. (try_end),
  43682. (else_try),
  43683. (party_get_slot, ":potential_target_nearby_enemy_strength", ":potential_target", slot_party_nearby_friend_strength),
  43684. (assign, ":potential_target_strength", 1000),
  43685.  
  43686. #(store_add, ":army_strength", ":marshal_strength", ":strength_of_potential_followers"),
  43687. (assign, ":army_strength", ":marshal_strength"),
  43688. (val_add, ":army_strength", ":strength_of_current_followers"),
  43689. (store_mul, ":power_ratio", ":army_strength", 100),
  43690.  
  43691. (try_begin),
  43692. (gt, ":potential_target_strength", 0),
  43693. (val_div, ":power_ratio", ":potential_target_strength"),
  43694. (else_try),
  43695. (assign, ":power_ratio", 1000),
  43696. (try_end),
  43697. (try_end),
  43698.  
  43699. (ge, ":power_ratio", 120), #attack if and only if our army is at least 1.2 times powerfull
  43700. (store_sub, ":power_ratio_sub_120", ":power_ratio", 120),
  43701.  
  43702. (try_begin),
  43703. (lt, ":power_ratio_sub_120", 100), #changes between 20..120
  43704. (store_add, ":power_ratio_score", ":power_ratio_sub_120", 20),
  43705. (else_try),
  43706. (lt, ":power_ratio_sub_120", 200), #changes between 120..170
  43707. (store_sub, ":power_ratio_score", ":power_ratio_sub_120", 100),
  43708. (val_div, ":power_ratio_score", 2),
  43709. (val_add, ":power_ratio_score", 120),
  43710. (else_try),
  43711. (lt, ":power_ratio_sub_120", 400), #changes between 170..210
  43712. (store_sub, ":power_ratio_score", ":power_ratio_sub_120", 200),
  43713. (val_div, ":power_ratio_score", 5),
  43714. (val_add, ":power_ratio_score", 170),
  43715. (else_try),
  43716. (lt, ":power_ratio_sub_120", 800), #changes between 210..250
  43717. (store_sub, ":power_ratio_score", ":power_ratio_sub_120", 400),
  43718. (val_div, ":power_ratio_score", 10),
  43719. (val_add, ":power_ratio_score", 210),
  43720. (else_try),
  43721. (assign, ":power_ratio_score", 250),
  43722. (try_end),
  43723.  
  43724. (assign, ":number_of_walled_centers", 0),
  43725. (assign, ":total_distance", 0),
  43726. (try_for_range, ":walled_center", walled_centers_begin, walled_centers_end),
  43727. (store_faction_of_party, ":walled_center_faction", ":walled_center"),
  43728. (eq, ":walled_center_faction", ":faction_no"),
  43729.  
  43730. (store_distance_to_party_from_party, ":dist", ":walled_center", ":potential_target"),
  43731. (val_add, ":total_distance", ":dist"),
  43732.  
  43733. (val_add, ":number_of_walled_centers", 1),
  43734. (try_end),
  43735.  
  43736. (try_begin),
  43737. (gt, ":number_of_walled_centers", 0),
  43738. (store_div, ":average_distance", ":total_distance", ":number_of_walled_centers"),
  43739. #(assign, reg0, ":average_distance"),
  43740. #(str_store_faction_name, s7, ":faction_no"),
  43741. #(str_store_party_name, s8, ":potential_target"),
  43742. #(display_message, "@average distance for {s7} for {s8} is {reg0}"),
  43743.  
  43744. (try_begin),
  43745. (ge, ":marshal_party", 0),
  43746. (party_is_active, ":marshal_party"),
  43747. (store_distance_to_party_from_party, ":marshal_dist_to_potential_target", ":marshal_party", ":potential_target"),
  43748. (else_try),
  43749. (assign, ":marshal_dist_to_potential_target", 100),
  43750. (try_end),
  43751.  
  43752. (try_begin),
  43753. #if currently main aim of our faction is attacking to an enemy center and that center is already besieged/raided by one of
  43754. #our parties then divide marshal_dist_to_potential_target_div_x score for current center to "3/2" instead of "3" and this
  43755. #result in decrease at distance_score, and also decrease some scores from power_ratio_score in order to avoid frequently
  43756. #changes at main aimed target city of our faction during sieges.
  43757.  
  43758. (faction_get_slot, ":current_ai_state", ":faction_no", slot_faction_ai_state),
  43759. (eq, ":current_ai_state", sfai_attacking_center),
  43760. (faction_get_slot, ":current_ai_object", ":faction_no", slot_faction_ai_object),
  43761.  
  43762. (ge, ":current_ai_object", 0),
  43763. (neq, ":current_ai_object", ":potential_target"),
  43764.  
  43765. (try_begin),
  43766. (ge, ":power_ratio_score", 300), #200 max
  43767. (assign, ":power_ratio_score", 200),
  43768. (else_try),
  43769. (ge, ":power_ratio_score", 100), #100..200
  43770. (val_sub, ":power_ratio_score", 100),
  43771. (val_div, ":power_ratio_score", 2),
  43772. (val_add, ":power_ratio_score", 100),
  43773. (try_end),
  43774.  
  43775. (try_begin),
  43776. (faction_slot_eq, ":faction_no", slot_faction_marshall, ":troop_no"),
  43777. (eq, "$g_do_not_skip_other_than_current_ai_object", 0),
  43778. (assign, ":power_ratio_score", 0), #lets completely forget all other choices if we are already besieging one center.
  43779. (try_end),
  43780.  
  43781. (faction_set_slot, ":faction_no", slot_faction_last_attacked_center, ":current_ai_object"),
  43782. (store_current_hours, ":hours"),
  43783. (faction_set_slot, ":faction_no", slot_faction_last_attacked_hours, ":hours"),
  43784.  
  43785. (eq, ":all_vassals_included", 0),
  43786.  
  43787. (store_mul, ":marshal_dist_to_potential_target_div_x", ":marshal_dist_to_potential_target", 2),
  43788. (val_div, ":marshal_dist_to_potential_target_div_x", 3),
  43789. (else_try),
  43790. (store_div, ":marshal_dist_to_potential_target_div_x", ":marshal_dist_to_potential_target", 3),
  43791. (try_end),
  43792.  
  43793. (store_add, ":total_distance", ":average_distance", ":marshal_dist_to_potential_target_div_x"), #in average ":total_distance" is about 150, min : 0, max : 1000
  43794. (else_try),
  43795. (assign, ":total_distance", 100),
  43796. (try_end),
  43797.  
  43798. (try_begin),
  43799. #according to cautious troop distance is more important
  43800.  
  43801. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  43802. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  43803. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_goodnatured),
  43804. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_cunning),
  43805.  
  43806. (try_begin),
  43807. (lt, ":total_distance", 30), #very close (100p)
  43808. (assign, ":distance_score", 100),
  43809. (else_try),
  43810. (lt, ":total_distance", 80), #close (50p-100p)
  43811. (store_sub, ":distance_score", ":total_distance", 30),
  43812. (val_div, ":distance_score", 1),
  43813. (store_sub, ":distance_score", 100, ":distance_score"),
  43814. (else_try),
  43815. (lt, ":total_distance", 160), #far (10p-50p)
  43816. (store_sub, ":distance_score", ":total_distance", 80),
  43817. (val_div, ":distance_score", 2),
  43818. (store_sub, ":distance_score", 50, ":distance_score"),
  43819. (else_try),
  43820. (assign, ":distance_score", 10), #very far
  43821. (try_end),
  43822. (else_try),
  43823. #according to agressive troop distance is less important
  43824.  
  43825. (try_begin),
  43826. (lt, ":total_distance", 40), #very close (100p)
  43827. (assign, ":distance_score", 100),
  43828. (else_try),
  43829. (lt, ":total_distance", 140), #close (50p-100p)
  43830. (store_sub, ":distance_score", ":total_distance", 40),
  43831. (val_div, ":distance_score", 2),
  43832. (store_sub, ":distance_score", 100, ":distance_score"),
  43833. (else_try),
  43834. (lt, ":total_distance", 300), #far (10p-50p)
  43835. (store_sub, ":distance_score", ":total_distance", 140),
  43836. (val_div, ":distance_score", 4),
  43837. (store_sub, ":distance_score", 50, ":distance_score"),
  43838. (else_try),
  43839. (assign, ":distance_score", 10), #very far
  43840. (try_end),
  43841. (try_end),
  43842.  
  43843. (store_mul, ":target_score", ":distance_score", ":power_ratio_score"),
  43844. (val_mul, ":target_score", ":last_offensive_time_score"),
  43845. (val_div, ":target_score", 100), #target score is between 0..10000 generally here
  43846.  
  43847. (call_script, "script_find_total_prosperity_score", ":potential_target"),
  43848. (assign, ":total_prosperity_score", reg0),
  43849.  
  43850. #(try_begin), #new for increase attackability of villages by ai
  43851. #(is_between, ":potential_target", villages_begin, villages_end),
  43852. (val_mul, ":total_prosperity_score", 3),
  43853. (val_div, ":total_prosperity_score", 2),
  43854. #(try_end),
  43855.  
  43856. (val_mul, ":target_score", ":total_prosperity_score"),
  43857.  
  43858. (try_begin), #if both that center was our (original center) and (ex center) than bonus is 1.2x
  43859. (party_slot_eq, ":potential_target", slot_center_ex_faction, ":faction_no"),
  43860. (party_slot_eq, ":potential_target", slot_center_original_faction, ":faction_no"),
  43861. (val_mul, ":target_score", 12),
  43862. (val_div, ":target_score", 10),
  43863. (else_try), #if either that center was our (original center) or (ex center) than bonus is 1.1x
  43864. (this_or_next|party_slot_eq, ":potential_target", slot_center_ex_faction, ":faction_no"),
  43865. (party_slot_eq, ":potential_target", slot_center_original_faction, ":faction_no"),
  43866. (val_mul, ":target_score", 11),
  43867. (val_div, ":target_score", 10),
  43868. (try_end),
  43869.  
  43870. (val_div, ":target_score", 1000), #target score is between 0..1000 generally here
  43871.  
  43872. (try_begin),
  43873. (eq, ":potential_target_faction", "fac_player_supporters_faction"),
  43874. (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
  43875.  
  43876. (assign, ":number_of_walled_centers_player_have", 0),
  43877. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  43878. (store_faction_of_party, ":center_faction", ":center_no"),
  43879. (eq, ":center_faction", "fac_player_supporters_faction"),
  43880. (val_add, ":number_of_walled_centers_player_have", 1),
  43881. (try_end),
  43882.  
  43883. (try_begin),
  43884. (eq, ":reduce_campaign_ai", 2), #easy
  43885.  
  43886. (try_begin),
  43887. (le, ":number_of_walled_centers_player_have", 2),
  43888. (assign, ":hardness_score", 0),
  43889. (else_try),
  43890. (eq, ":number_of_walled_centers_player_have", 3),
  43891. (assign, ":hardness_score", 20),
  43892. (else_try),
  43893. (eq, ":number_of_walled_centers_player_have", 4),
  43894. (assign, ":hardness_score", 40),
  43895. (else_try),
  43896. (eq, ":number_of_walled_centers_player_have", 5),
  43897. (eq, ":number_of_walled_centers_player_have", 6),
  43898. (assign, ":hardness_score", 55),
  43899. (else_try),
  43900. (eq, ":number_of_walled_centers_player_have", 7),
  43901. (eq, ":number_of_walled_centers_player_have", 8),
  43902. (eq, ":number_of_walled_centers_player_have", 9),
  43903. (assign, ":hardness_score", 70),
  43904. (else_try),
  43905. (assign, ":hardness_score", 85),
  43906. (try_end),
  43907. (else_try),
  43908. (eq, ":reduce_campaign_ai", 1), #medium
  43909.  
  43910. (try_begin),
  43911. (le, ":number_of_walled_centers_player_have", 1),
  43912. (assign, ":hardness_score", 25),
  43913. (else_try),
  43914. (eq, ":number_of_walled_centers_player_have", 2),
  43915. (assign, ":hardness_score", 45),
  43916. (else_try),
  43917. (eq, ":number_of_walled_centers_player_have", 3),
  43918. (assign, ":hardness_score", 60),
  43919. (else_try),
  43920. (eq, ":number_of_walled_centers_player_have", 4),
  43921. (eq, ":number_of_walled_centers_player_have", 5),
  43922. (assign, ":hardness_score", 75),
  43923. (else_try),
  43924. (eq, ":number_of_walled_centers_player_have", 6),
  43925. (eq, ":number_of_walled_centers_player_have", 7),
  43926. (eq, ":number_of_walled_centers_player_have", 8),
  43927. (assign, ":hardness_score", 85),
  43928. (else_try),
  43929. (assign, ":hardness_score", 92),
  43930. (try_end),
  43931. (else_try), #hard
  43932. (assign, ":hardness_score", 100),
  43933. (try_end),
  43934.  
  43935. (val_mul, ":target_score", ":hardness_score"),
  43936. (val_div, ":target_score", 100),
  43937. (try_end),
  43938.  
  43939. (try_begin),
  43940. (ge, "$cheat_mode", 1),
  43941. (eq, ":faction_no", "fac_kingdom_4"),
  43942. (ge, ":target_score", -1),
  43943. (assign, reg0, ":target_score"),
  43944. (assign, reg7, ":total_prosperity_score"),
  43945. (assign, reg8, ":power_ratio_score"),
  43946. (assign, reg9, ":distance_score"),
  43947. (assign, reg10, ":last_offensive_time_score"),
  43948. (str_store_party_name, s8, ":potential_target"),
  43949. #(eq, ":all_vassals_included", 0),
  43950. (assign, reg11, ":all_vassals_included"),
  43951. #(display_message, "@DEBUG : attack of {s8} is {reg0}({reg11}), prs:{reg7}, pow:{reg8}, dis:{reg9}, lst:{reg10}"),
  43952. (try_end),
  43953. (try_end),
  43954.  
  43955. (assign, reg0, ":target_score"),
  43956. (assign, reg1, ":power_ratio"),
  43957. (assign, reg2, ":distance_score"),
  43958. (assign, reg3, ":total_prosperity_score"),
  43959. ]),
  43960.  
  43961. #script_find_center_to_defend
  43962. # INPUT:
  43963. # param1: faction_no
  43964. # OUTPUT:
  43965. # reg0 = center_to_defend (-1 if none is logical)
  43966. # reg1 = maximum_defend_score
  43967. # reg3 = enemy_strength_near_most_threatened_center
  43968. (
  43969. "find_center_to_defend",
  43970. [
  43971. (store_script_param, ":troop_no", 1),
  43972.  
  43973. (store_faction_of_troop, ":faction_no", ":troop_no"),
  43974.  
  43975. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  43976. (faction_get_slot, ":current_ai_state", ":faction_no", slot_faction_ai_state),
  43977. (assign, ":marshal_party", -1),
  43978. (try_begin),
  43979. (gt, ":faction_marshal", 0),
  43980. (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  43981. (try_end),
  43982.  
  43983. (assign, ":most_threatened_center", -1),
  43984. (assign, ":maximum_threat_score", 0),
  43985. (try_for_range, ":cur_center", centers_begin, centers_end),
  43986. (store_faction_of_party, ":center_faction", ":cur_center"),
  43987. (eq, ":center_faction", ":faction_no"),
  43988.  
  43989. (party_get_slot, ":exact_enemy_strength", ":cur_center", slot_center_sortie_enemy_strength),
  43990. #Distort this to account for questionable intelligence
  43991. #(call_script, "script_reduce_exact_number_to_estimate", ":exact_enemy_strength"),
  43992. #(assign, ":enemy_strength_nearby", reg0),
  43993. (assign, ":enemy_strength_nearby", ":exact_enemy_strength"),
  43994.  
  43995. (assign, ":threat_importance", 0),
  43996. (try_begin),
  43997. (is_between, ":cur_center", walled_centers_begin, walled_centers_end),
  43998. (party_slot_ge, ":cur_center", slot_center_is_besieged_by, 0),
  43999.  
  44000. (call_script, "script_find_total_prosperity_score", ":cur_center"),
  44001. (assign, ":total_prosperity_score", reg0),
  44002.  
  44003. (party_get_slot, ":cur_center_strength", ":cur_center", slot_party_cached_strength),
  44004. (val_mul, ":cur_center_strength", 4),
  44005. (val_div, ":cur_center_strength", 3), #give 33% bonus to insiders because they are inside a castle
  44006.  
  44007. #I removed below line and assigned ":cur_center_nearby_strength" to 0, because if not when defender army comes to help
  44008. #threat become less because of high defence power but not yet enemy cleared.
  44009. #(party_get_slot, ":cur_center_nearby_strength", ":cur_center", slot_party_nearby_friend_strength),
  44010. (assign, ":cur_center_nearby_strength", 0),
  44011.  
  44012. (val_add, ":cur_center_strength", ":cur_center_nearby_strength"), #add nearby friends and find ":cur_center_strength"
  44013.  
  44014. (store_mul, ":power_ratio", ":enemy_strength_nearby", 100),
  44015. (val_add, ":cur_center_strength", 1),
  44016. (val_max, ":cur_center_strength", 1),
  44017. (val_div, ":power_ratio", ":cur_center_strength"),
  44018.  
  44019. (assign, ":player_is_attacking", 0),
  44020. (party_get_slot, ":besieger_party", ":cur_center", slot_center_is_besieged_by),
  44021. (try_begin),
  44022. (party_is_active, ":besieger_party"),
  44023. (try_begin),
  44024. (eq, ":besieger_party", "p_main_party"),
  44025. (assign, ":player_is_attacking", 1),
  44026. #(display_message, "@{!}DEBUG : player is attacking a center (1)"),
  44027. (else_try),
  44028. (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  44029. (eq, ":besieger_faction", "fac_player_faction"),
  44030. (assign, ":player_is_attacking", 1),
  44031. #(display_message, "@{!}DEBUG : player is attacking a center (2)"),
  44032. (else_try),
  44033. (party_get_attached_to, ":player_is_attached_to", "p_main_party"),
  44034. (ge, ":player_is_attached_to", 0),
  44035. (eq, ":player_is_attached_to", ":besieger_party"),
  44036. (assign, ":player_is_attacking", 1),
  44037. #(display_message, "@{!}DEBUG : player is attacking a center (3)"),
  44038. (try_end),
  44039. (try_end),
  44040.  
  44041. (try_begin),
  44042. (eq, ":player_is_attacking", 0),
  44043.  
  44044. (try_begin),
  44045. (lt, ":power_ratio", 40), #changes between 1..1
  44046. (assign, ":threat_importance", 1),
  44047. (else_try),
  44048. (lt, ":power_ratio", 80), #changes between 1..7
  44049. (store_sub, ":threat_importance", ":power_ratio", 40),
  44050. (val_div, ":threat_importance", 5),
  44051. (val_add, ":threat_importance", 1), #1
  44052. (else_try),
  44053. (lt, ":power_ratio", 120), #changes between 7..17
  44054. (store_sub, ":threat_importance", ":power_ratio", 80),
  44055. (val_div, ":threat_importance", 4),
  44056. (val_add, ":threat_importance", 7), #1 + 6
  44057. (else_try),
  44058. (lt, ":power_ratio", 200),
  44059. (store_sub, ":threat_importance", ":power_ratio", 120),
  44060. (val_div, ":threat_importance", 10),
  44061. (val_add, ":threat_importance", 17), #1 + 6 + 10
  44062. (else_try),
  44063. (assign, ":threat_importance", 25),
  44064. (try_end),
  44065. (else_try),
  44066. (try_begin),
  44067. (lt, ":power_ratio", 200), #changes between 5..25
  44068. (store_div, ":threat_importance", ":power_ratio", 10), #MOTO correction (thanks MOTO:) (mexxico))
  44069. (val_add, ":threat_importance", 6 ),
  44070. (else_try),
  44071. (assign, ":threat_importance", 26),
  44072. (try_end),
  44073. (try_end),
  44074. (else_try),
  44075. (is_between, ":cur_center", villages_begin, villages_end),
  44076. (party_slot_eq, ":cur_center", slot_village_state, svs_being_raided),
  44077.  
  44078. (gt, ":enemy_strength_nearby", 0),
  44079.  
  44080. (call_script, "script_find_total_prosperity_score", ":cur_center"),
  44081. (assign, ":power_ratio", 100), #useless
  44082. (assign, ":total_prosperity_score", reg0),
  44083. (assign, ":threat_importance", 10), #if faction village is looted they lose money for shorter time period. So importance is something low (6-8).
  44084. (try_end),
  44085.  
  44086. (gt, ":threat_importance", 0),
  44087.  
  44088. (try_begin),
  44089. (is_between, ":cur_center", walled_centers_begin, walled_centers_end),
  44090. (assign, ":enemy_strength_nearby_score", 120),
  44091.  
  44092. (try_begin),
  44093. (ge, ":marshal_party", 0),
  44094. (party_is_active, ":marshal_party"),
  44095. (store_distance_to_party_from_party, ":marshal_dist_to_cur_center", ":marshal_party", ":cur_center"),
  44096. (else_try),
  44097. (assign, ":marshal_dist_to_cur_center", 100),
  44098. (try_end),
  44099.  
  44100. (try_begin),
  44101. #if currently our target is ride to break a siege then
  44102. #divide marshal_distance for other center's to "2" instead of "4" and add some small more distance to avoid easily
  44103. #changing mind during siege because of small score differences.
  44104.  
  44105. #(faction_get_slot, ":current_ai_state", ":faction_no", slot_faction_ai_state),
  44106. (eq, ":current_ai_state", sfai_attacking_enemies_around_center),
  44107. (faction_get_slot, ":current_ai_object", ":faction_no", slot_faction_ai_object),
  44108. (is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  44109. (neq, ":current_ai_object", ":cur_center"),
  44110. (val_mul, ":marshal_dist_to_cur_center", 2),
  44111. (val_add, ":marshal_dist_to_cur_center", 20),
  44112. (try_end),
  44113.  
  44114. (val_mul, ":marshal_dist_to_cur_center", 2), #standard multipication (1.5x) to adjust distance scoring same with formula at find_center_to_attack
  44115. #(val_div, ":marshal_dist_to_cur_center", 2),
  44116.  
  44117. (try_begin),
  44118. (lt, ":marshal_dist_to_cur_center", 10), #very close (100p)
  44119. (assign, ":distance_score", 100),
  44120. (else_try),
  44121. (lt, ":marshal_dist_to_cur_center", 160), #close (50p-100p)
  44122. (store_sub, ":distance_score", ":marshal_dist_to_cur_center", 10),
  44123. (val_div, ":distance_score", 3),
  44124. (store_sub, ":distance_score", 100, ":distance_score"),
  44125. (else_try),
  44126. (lt, ":marshal_dist_to_cur_center", 360), #far (10p-50p)
  44127. (store_sub, ":distance_score", ":marshal_dist_to_cur_center", 250),
  44128. (val_div, ":distance_score", 5),
  44129. (store_sub, ":distance_score", 50, ":distance_score"),
  44130. (else_try),
  44131. (assign, ":distance_score", 10), #very far
  44132. (try_end),
  44133. (else_try),
  44134. (store_add, ":enemy_strength_nearby_score", ":enemy_strength_nearby", 20000),
  44135. (val_div, ":enemy_strength_nearby_score", 200),
  44136. (assign, ":distance_score", 70), #not related to marshal's position, because everybody is going same place (no gathering in most village raids)
  44137. (try_end),
  44138.  
  44139. (store_mul, ":threat_score", ":enemy_strength_nearby_score", ":total_prosperity_score"),
  44140. (val_mul, ":threat_score", ":threat_importance"),
  44141. (val_mul, ":threat_score", ":distance_score"),
  44142. (val_div, ":threat_score", 10000),
  44143.  
  44144. (try_begin),
  44145. (ge, "$cheat_mode", 1),
  44146. (gt, ":threat_score", 0),
  44147. (eq, ":faction_no", "fac_kingdom_6"),
  44148. (assign, reg0, ":threat_score"),
  44149. (str_store_party_name, s32, ":cur_center"),
  44150. (assign, reg1, ":total_prosperity_score"),
  44151. (assign, reg2, ":enemy_strength_nearby_score"),
  44152. (assign, reg3, ":threat_importance"),
  44153. (assign, reg4, ":distance_score"),
  44154. #(display_message, "@{!}DEBUG : defend of {s32} is {reg0}, prosperity:{reg1}, enemy nearby:{reg2}, threat importance:{reg3}, distance: {reg4}"),
  44155. (try_end),
  44156.  
  44157. (gt, ":threat_score", ":maximum_threat_score"),
  44158.  
  44159. (assign, ":most_threatened_center", ":cur_center"),
  44160. (assign, ":maximum_threat_score", ":threat_score"),
  44161. (assign, ":enemy_strength_near_most_threatened_center", ":enemy_strength_nearby"),
  44162. (try_end),
  44163.  
  44164. (val_mul, ":maximum_threat_score", 3),
  44165. (val_div, ":maximum_threat_score", 2),
  44166.  
  44167. (assign, reg0, ":most_threatened_center"),
  44168. (assign, reg1, ":maximum_threat_score"),
  44169. (assign, reg2, ":enemy_strength_near_most_threatened_center"),
  44170. ]),
  44171.  
  44172.  
  44173. #script_npc_decision_checklist_peace_or_war
  44174. (
  44175. "npc_decision_checklist_peace_or_war",
  44176. #this script is used to add a bit more color to diplomacy, particularly with regards to the player
  44177.  
  44178. [
  44179. (store_script_param, ":actor_faction", 1),
  44180. (store_script_param, ":target_faction", 2),
  44181. (store_script_param, ":envoy", 3),
  44182.  
  44183. (assign, ":actor_strength", 0),
  44184. (assign, ":target_strength", 0),
  44185. (assign, ":actor_centers_held_by_target", 0),
  44186.  
  44187. # (assign, ":two_factions_share_border", 0),
  44188. (assign, ":third_party_war", 0),
  44189. (assign, ":num_third_party_wars", 0),
  44190.  
  44191. (assign, ":active_mutual_enemy", 0), #an active enemy with which the target is at war
  44192. (assign, "$g_concession_demanded", 0),
  44193.  
  44194. (store_relation, ":current_faction_relation", ":actor_faction", ":target_faction"),
  44195.  
  44196. (try_begin),
  44197. (eq, ":target_faction", "fac_player_supporters_faction"),
  44198. (assign, ":modified_honor_and_relation", "$player_honor"), #this can be affected by the emissary's skill
  44199.  
  44200. (val_add, ":target_strength", 2), #for player party
  44201. (else_try),
  44202. (assign, ":modified_honor_and_relation", 0), #this can be affected by the emissary's skill
  44203. (try_end),
  44204.  
  44205. (faction_get_slot, ":actor_leader", ":actor_faction", slot_faction_leader),
  44206. (faction_get_slot, ":target_leader", ":target_faction", slot_faction_leader),
  44207.  
  44208. (call_script, "script_troop_get_relation_with_troop", ":actor_leader", ":target_leader"),
  44209.  
  44210. (assign, ":relation_bonus", reg0),
  44211. (val_min, ":relation_bonus", 10),
  44212. (val_add, ":modified_honor_and_relation", ":relation_bonus"),
  44213.  
  44214. (str_store_troop_name, s15, ":actor_leader"),
  44215. (str_store_troop_name, s16, ":target_leader"),
  44216.  
  44217.  
  44218. (assign, ":war_damage_suffered", 0),
  44219. (assign, ":war_damage_inflicted", 0),
  44220.  
  44221. (call_script, "script_diplomacy_faction_get_diplomatic_status_with_faction", ":actor_faction", ":target_faction"),
  44222. (assign, ":war_peace_truce_status", reg0),
  44223. (str_clear, s12),
  44224. (try_begin),
  44225. (eq, ":war_peace_truce_status", -2),
  44226. (str_store_string, s12, "str_s15_is_at_war_with_s16_"),
  44227.  
  44228. (store_add, ":war_damage_inflicted_slot", ":target_faction", slot_faction_war_damage_inflicted_on_factions_begin),
  44229. (val_sub, ":war_damage_inflicted_slot", kingdoms_begin),
  44230. (faction_get_slot, ":war_damage_inflicted", ":actor_faction", ":war_damage_inflicted_slot"),
  44231.  
  44232. (store_add, ":war_damage_suffered_slot", ":actor_faction", slot_faction_war_damage_inflicted_on_factions_begin),
  44233. (val_sub, ":war_damage_suffered_slot", kingdoms_begin),
  44234. (faction_get_slot, ":war_damage_suffered", ":target_faction", ":war_damage_suffered_slot"),
  44235.  
  44236.  
  44237. (else_try),
  44238. #truce in effect
  44239. (eq, ":war_peace_truce_status", 1),
  44240. (str_store_string, s12, "str_in_the_short_term_s15_has_a_truce_with_s16_as_a_matter_of_general_policy_"),
  44241. (else_try),
  44242. #provocation noted
  44243. (eq, ":war_peace_truce_status", -1),
  44244. (str_store_string, s12, "str_in_the_short_term_s15_was_recently_provoked_by_s16_and_is_under_pressure_to_declare_war_as_a_matter_of_general_policy_"),
  44245. (try_end),
  44246.  
  44247. #clear for dialog with lords
  44248. (try_begin),
  44249. (is_between, "$g_talk_troop", active_npcs_begin, active_npcs_end),
  44250. (str_clear, s12),
  44251. (try_end),
  44252.  
  44253. (try_begin),
  44254. (gt, ":envoy", -1),
  44255. (store_skill_level, ":persuasion_x_2", "skl_persuasion", ":envoy"),
  44256. (val_mul, ":persuasion_x_2", 2),
  44257. (val_add, ":modified_honor_and_relation", ":persuasion_x_2"),
  44258.  
  44259. (try_begin),
  44260. (eq, "$cheat_mode", 1),
  44261. (assign, reg4, ":modified_honor_and_relation"),
  44262. (display_message, "str_envoymodified_diplomacy_score_honor_plus_relation_plus_envoy_persuasion_=_reg4"),
  44263. (try_end),
  44264.  
  44265. (try_end),
  44266.  
  44267.  
  44268. (try_for_range, ":kingdom_to_reset", kingdoms_begin, kingdoms_end),
  44269. (faction_set_slot, ":kingdom_to_reset", slot_faction_temp_slot, 0),
  44270. (try_end),
  44271.  
  44272. (try_for_parties, ":party_no"),
  44273. (assign, ":party_value", 0),
  44274. (try_begin),
  44275. (is_between, ":party_no", towns_begin, towns_end),
  44276. (assign, ":party_value", 3),
  44277. (else_try),
  44278. (is_between, ":party_no", castles_begin, castles_end),
  44279. (assign, ":party_value", 2),
  44280. (else_try),
  44281. (is_between, ":party_no", villages_begin, villages_end),
  44282. (assign, ":party_value", 1),
  44283. (else_try),
  44284. (party_get_template_id, ":template", ":party_no"),
  44285. (eq, ":template", "pt_kingdom_hero_party"),
  44286. (assign, ":party_value", 2),
  44287. (try_end),
  44288.  
  44289.  
  44290. (store_faction_of_party, ":party_current_faction", ":party_no"),
  44291. (party_get_slot, ":party_original_faction", ":party_no", slot_center_original_faction),
  44292. (party_get_slot, ":party_ex_faction", ":party_no", slot_center_ex_faction),
  44293.  
  44294.  
  44295. #total strengths
  44296. (try_begin),
  44297. (is_between, ":party_current_faction", kingdoms_begin, kingdoms_end),
  44298. (faction_get_slot, ":faction_strength", ":party_current_faction", slot_faction_temp_slot),
  44299. (val_add, ":faction_strength", ":party_value"),
  44300. (faction_set_slot, ":party_current_faction", slot_faction_temp_slot, ":faction_strength"),
  44301. (try_end),
  44302.  
  44303.  
  44304. (try_begin),
  44305. (eq, ":party_current_faction", ":target_faction"),
  44306. (val_add, ":target_strength", ":party_value"),
  44307.  
  44308. (try_begin),
  44309. (this_or_next|eq, ":party_original_faction", ":actor_faction"),
  44310. (eq, ":party_ex_faction", ":actor_faction"),
  44311. (val_add, ":actor_centers_held_by_target", 1),
  44312. (try_begin),
  44313. (is_between, ":party_no", walled_centers_begin, walled_centers_end),
  44314. (assign, "$g_concession_demanded", ":party_no"),
  44315. (str_store_party_name, s18, "$g_concession_demanded"),
  44316. (try_end),
  44317. (try_end),
  44318.  
  44319. # Could include two factions share border, but war is unlikely to break out in the first place unless there is a common border
  44320.  
  44321. # (try_begin),
  44322. # (is_between, ":party_no", walled_centers_begin, walled_centers_end),
  44323. # (try_for_range, ":other_center", walled_centers_begin, walled_centers_end),
  44324. # (assign, ":two_factions_share_border", 0),
  44325. # (store_faction_of_party, ":other_faction", ":other_center"),
  44326. # (eq, ":other_faction", ":actor_faction"),
  44327. # (store_distance_to_party_from_party, ":distance", ":party_no", ":other_center"),
  44328. # (le, ":distance", 15),
  44329. # (assign, ":two_factions_share_border", 1),
  44330. # (try_end),
  44331. # (try_end),
  44332. (else_try),
  44333. (eq, ":party_current_faction", ":actor_faction"),
  44334. (val_add, ":actor_strength", ":party_value"),
  44335. (try_end),
  44336. (try_end),
  44337.  
  44338. #Total Calradia strength = 110 x 1 (villages,), 48? x 2 castles, 22 x 3 towns, 88 x 2 lord parties = 272 + 176 = 448
  44339. (assign, ":strongest_kingdom", -1),
  44340. (assign, ":score_to_beat", 60), #Maybe raise once it works
  44341. (try_for_range, ":strongest_kingdom_candidate", kingdoms_begin, kingdoms_end),
  44342. (faction_get_slot, ":candidate_strength", ":strongest_kingdom_candidate", slot_faction_temp_slot),
  44343. (gt, ":candidate_strength", ":score_to_beat"),
  44344. (assign, ":strongest_kingdom", ":strongest_kingdom_candidate"),
  44345. (assign, ":score_to_beat", ":candidate_strength"),
  44346. (try_end),
  44347.  
  44348.  
  44349. (try_begin),
  44350. (eq, "$cheat_mode", 2),
  44351. (gt, ":strongest_kingdom", 1),
  44352. (str_store_faction_name, s4, ":strongest_kingdom"),
  44353. (assign, reg3, ":score_to_beat"),
  44354. (display_message, "@{!}DEBUG - {s4} strongest kingdom with {reg3} strength"),
  44355. (try_end),
  44356.  
  44357.  
  44358. (assign, ":strength_ratio", 1),
  44359. (try_begin),
  44360. (gt, ":actor_strength", 0),
  44361. (store_mul, ":strength_ratio", ":target_strength", 100),
  44362. (val_div, ":strength_ratio", ":actor_strength"),
  44363. (try_end),
  44364.  
  44365. (try_for_range, ":possible_mutual_enemy", kingdoms_begin, kingdoms_end),
  44366. (neq, ":possible_mutual_enemy", ":target_faction"),
  44367. (neq, ":possible_mutual_enemy", ":actor_faction"),
  44368. (faction_slot_eq, ":possible_mutual_enemy", slot_faction_state, sfs_active),
  44369.  
  44370. (store_relation, ":relation", ":possible_mutual_enemy", ":actor_faction"),
  44371. (lt, ":relation", 0),
  44372. (assign, ":third_party_war", ":possible_mutual_enemy"),
  44373. (val_add, ":num_third_party_wars", 1),
  44374.  
  44375. (store_relation, ":relation", ":possible_mutual_enemy", ":target_faction"),
  44376. (lt, ":relation", 0),
  44377. (assign, ":active_mutual_enemy", ":possible_mutual_enemy"),
  44378. (try_end),
  44379.  
  44380. (store_current_hours, ":cur_hours"),
  44381. (faction_get_slot, ":faction_ai_last_decisive_event", ":actor_faction", slot_faction_ai_last_decisive_event),
  44382. (store_sub, ":hours_since_last_decisive_event", ":cur_hours", ":faction_ai_last_decisive_event"),
  44383.  
  44384. (try_begin),
  44385. (gt, "$supported_pretender", 0),
  44386. (this_or_next|eq, "$supported_pretender", ":actor_leader"),
  44387. (eq, "$supported_pretender", ":target_leader"),
  44388. (this_or_next|eq, ":actor_faction", "$supported_pretender_old_faction"),
  44389. (eq, ":target_faction", "$supported_pretender_old_faction"),
  44390.  
  44391. (assign, ":result", -3),
  44392. (troop_get_type, reg4, ":actor_leader"),
  44393. (assign, ":explainer_string", "str_s12s15_cannot_negotiate_with_s16_as_to_do_so_would_undermine_reg4herhis_own_claim_to_the_throne_this_civil_war_must_almost_certainly_end_with_the_defeat_of_one_side_or_another"),
  44394. (else_try),
  44395. (lt, ":modified_honor_and_relation", -20),
  44396. (lt, ":strength_ratio", 125),
  44397. (lt, ":war_damage_suffered", 400),
  44398. (this_or_next|neq, ":war_peace_truce_status", -2),
  44399. (lt, ":hours_since_last_decisive_event", 720),
  44400.  
  44401. (eq, ":num_third_party_wars", 0),
  44402.  
  44403. (assign, ":result", -3),
  44404. (troop_get_type, reg4, ":actor_leader"),
  44405. (assign, ":explainer_string", "str_s12s15_considers_s16_to_be_dangerous_and_untrustworthy_and_shehe_wants_to_bring_s16_down"),
  44406. (else_try),
  44407. (gt, ":actor_centers_held_by_target", 0),
  44408. (try_begin),
  44409. (eq, "$cheat_mode", 1),
  44410. (display_message, "@{!}Actor centers held by target noted"),
  44411. (try_end),
  44412.  
  44413. (lt, ":war_damage_suffered", 200),
  44414. (try_begin),
  44415. (eq, "$cheat_mode", 1),
  44416. (display_message, "@{!}War damage under minimum"),
  44417. (try_end),
  44418.  
  44419. (lt, ":strength_ratio", 125),
  44420. (try_begin),
  44421. (eq, "$cheat_mode", 1),
  44422. (display_message, "@{!}Strength ratio correct"),
  44423. (try_end),
  44424.  
  44425. (eq, ":num_third_party_wars", 0),
  44426. (try_begin),
  44427. (eq, "$cheat_mode", 1),
  44428. (display_message, "@{!}Third party wars"),
  44429. (try_end),
  44430.  
  44431. (assign, ":result", -2),
  44432. (assign, ":explainer_string", "str_s12s15_is_anxious_to_reclaim_old_lands_such_as_s18_now_held_by_s16"),
  44433. (else_try),
  44434. (eq, ":war_peace_truce_status", -2),
  44435. (lt, ":strength_ratio", 125),
  44436. (le, ":num_third_party_wars", 1),
  44437. (ge, ":war_damage_inflicted", 5),
  44438. (this_or_next|neq, ":war_peace_truce_status", -2),
  44439. (lt, ":hours_since_last_decisive_event", 720),
  44440.  
  44441. (store_mul, ":war_damage_suffered_x_2", ":war_damage_suffered", 2),
  44442. (gt, ":war_damage_inflicted", ":war_damage_suffered_x_2"),
  44443.  
  44444. (assign, ":result", -2),
  44445. (troop_get_type, reg4, ":actor_leader"),
  44446. (assign, ":explainer_string", "str_s12s15_feels_that_reg4shehe_is_winning_the_war_against_s16_and_sees_no_reason_not_to_continue"),
  44447. (else_try),
  44448. (le, ":war_peace_truce_status", -1),
  44449.  
  44450. (this_or_next|eq, ":war_peace_truce_status", -1), #either a war is just beginning, or there is a provocation
  44451. (le, ":war_damage_inflicted", 1),
  44452.  
  44453. (lt, ":strength_ratio", 150),
  44454. (eq, ":num_third_party_wars", 0),
  44455.  
  44456. (faction_slot_ge, ":actor_faction", slot_faction_instability, 60),
  44457.  
  44458. (assign, ":result", -1),
  44459. (assign, ":explainer_string", "str_s12s15_faces_too_much_internal_discontent_to_feel_comfortable_ignoring_recent_provocations_by_s16s_subjects"),
  44460. (else_try),
  44461. (eq, ":war_peace_truce_status", -2),
  44462. (lt, ":war_damage_inflicted", 100),
  44463. (eq, ":num_third_party_wars", 1),
  44464.  
  44465. (assign, ":result", -1),
  44466. (troop_get_type, reg4, ":actor_leader"),
  44467. (assign, ":explainer_string", "str_s12even_though_reg4shehe_is_fighting_on_two_fronts_s15_is_inclined_to_continue_the_war_against_s16_for_a_little_while_longer_for_the_sake_of_honor"),
  44468.  
  44469. (else_try),
  44470. (eq, ":war_peace_truce_status", -2),
  44471. (lt, ":war_damage_inflicted", 100),
  44472. (eq, ":num_third_party_wars", 0),
  44473.  
  44474. (assign, ":result", -1),
  44475. (troop_get_type, reg4, ":actor_leader"),
  44476. (assign, ":explainer_string", "str_s12s15_feels_that_reg4shehe_must_pursue_the_war_against_s16_for_a_little_while_longer_for_the_sake_of_honor"),
  44477. (else_try),
  44478. (this_or_next|faction_slot_eq, ":actor_faction", slot_faction_ai_state, sfai_attacking_center),
  44479. (this_or_next|faction_slot_eq, ":actor_faction", slot_faction_ai_state, sfai_raiding_village),
  44480. (faction_slot_eq, ":actor_faction", slot_faction_ai_state, sfai_attacking_enemy_army),
  44481. (faction_get_slot, ":offensive_object", ":actor_faction", slot_faction_ai_object),
  44482. (party_is_active, ":offensive_object"),
  44483. (store_faction_of_party, ":offensive_object_faction", ":offensive_object"),
  44484. (eq, ":offensive_object_faction", ":target_faction"),
  44485. (str_store_party_name, s17, ":offensive_object"),
  44486.  
  44487. (assign, ":result", -1),
  44488. (assign, ":explainer_string", "str_s12s15_is_currently_on_the_offensive_against_s17_now_held_by_s16_and_reluctant_to_negotiate"),
  44489.  
  44490.  
  44491. (else_try),
  44492. #Attack strongest kingdom, if it is also at war
  44493. (eq, ":strongest_kingdom", ":target_faction"),
  44494. (eq, ":num_third_party_wars", 0),
  44495.  
  44496. #Either not at war, or at war for two months
  44497. (this_or_next|ge, ":war_peace_truce_status", -1),
  44498. (lt, ":hours_since_last_decisive_event", 1440),
  44499.  
  44500. # (eq, ":two_factions_share_border", 0),
  44501.  
  44502. (assign, ":at_least_one_other_faction_at_war_with_strongest", 0),
  44503. (try_for_range, ":kingdom_to_check", kingdoms_begin, kingdoms_end),
  44504. (neq, ":kingdom_to_check", ":actor_faction"),
  44505. (neq, ":kingdom_to_check", ":target_faction"),
  44506. (faction_slot_eq, ":kingdom_to_check", slot_faction_state, sfs_active),
  44507. (store_relation, ":relation_of_factions", ":kingdom_to_check", ":target_faction"),
  44508. (lt, ":relation_of_factions", 0),
  44509. (assign, ":at_least_one_other_faction_at_war_with_strongest", 1),
  44510. (try_end),
  44511. (eq, ":at_least_one_other_faction_at_war_with_strongest", 1),
  44512.  
  44513.  
  44514. (assign, ":result", -1),
  44515. (assign, ":explainer_string", "str_s12s15_is_alarmed_by_the_growing_power_of_s16"),
  44516.  
  44517. #bid to conquer all Calradia
  44518. (else_try),
  44519. (eq, ":num_third_party_wars", 0),
  44520. (try_begin),
  44521. (ge, "$cheat_mode", 1),
  44522. (display_message, "@{!}DEBUG -- No third party wars for {s15}"),
  44523. (try_end),
  44524. (eq, ":actor_faction", ":strongest_kingdom"),
  44525. #peace with no truce or provocation
  44526.  
  44527. (try_begin),
  44528. (ge, "$cheat_mode", 1),
  44529. (display_message, "@{!}DEBUG -- {s15} is strongest kingdom"),
  44530. (try_end),
  44531.  
  44532.  
  44533. (faction_get_slot, ":actor_strength", ":actor_faction", slot_faction_temp_slot),
  44534. (faction_get_slot, ":target_strength", ":target_faction", slot_faction_temp_slot),
  44535. (store_sub, ":strength_difference", ":actor_strength", ":target_strength"),
  44536. (ge, ":strength_difference", 30),
  44537.  
  44538. (try_begin),
  44539. (ge, "$cheat_mode", 1),
  44540. (display_message, "@{!}DEBUG -- {s15} has 30 point advantage over {s16}"),
  44541. (try_end),
  44542.  
  44543.  
  44544. (assign, ":nearby_center_found", 0),
  44545. (try_for_range, ":actor_faction_walled_center", walled_centers_begin, walled_centers_end),
  44546. (store_faction_of_party, ":walled_center_faction_1", ":actor_faction_walled_center"),
  44547. (eq, ":walled_center_faction_1", ":actor_faction"),
  44548. (try_for_range, ":target_faction_walled_center", walled_centers_begin, walled_centers_end),
  44549. (store_faction_of_party, ":walled_center_faction_2", ":target_faction_walled_center"),
  44550. (eq, ":walled_center_faction_2", ":target_faction"),
  44551. (store_distance_to_party_from_party, ":distance", ":target_faction_walled_center", ":actor_faction_walled_center"),
  44552. (lt, ":distance", 25),
  44553. (assign, ":nearby_center_found", 1),
  44554. (try_end),
  44555. (try_end),
  44556. (eq, ":nearby_center_found", 1),
  44557.  
  44558.  
  44559. (try_begin),
  44560. (ge, "$cheat_mode", 1),
  44561. (display_message, "@{!}DEBUG -- {s15} has proximity to {s16}"),
  44562. (try_end),
  44563.  
  44564. (assign, ":result", -1),
  44565. (assign, ":explainer_string", "str_s12s15_declared_war_to_control_calradia"),
  44566.  
  44567. (else_try),
  44568. (lt, ":modified_honor_and_relation", -20),
  44569.  
  44570. (assign, ":result", 0),
  44571. (assign, ":explainer_string", "str_s12s15_distrusts_s16_and_fears_that_any_deals_struck_between_the_two_realms_will_not_be_kept"),
  44572.  
  44573.  
  44574. #wishes to deal
  44575. (else_try),
  44576. (lt, ":current_faction_relation", 0),
  44577. (ge, ":num_third_party_wars", 2),
  44578. (assign, ":result", 3),
  44579.  
  44580. (assign, ":explainer_string", "str_s12s15_is_at_war_on_too_many_fronts_and_eager_to_make_peace_with_s16"),
  44581. (else_try),
  44582. (gt, ":active_mutual_enemy", 0),
  44583. (eq, ":actor_centers_held_by_target", 0),
  44584. (this_or_next|ge, ":current_faction_relation", 0),
  44585. # (eq, ":two_factions_share_border", 0),
  44586. (eq, 1, 1),
  44587.  
  44588. (assign, ":result", 3),
  44589. (str_store_faction_name, s17, ":active_mutual_enemy"),
  44590. (troop_get_type, reg4, ":actor_leader"),
  44591. (assign, ":explainer_string", "str_s12s15_seems_to_think_that_s16_and_reg4shehe_have_a_common_enemy_in_the_s17"),
  44592.  
  44593. (else_try),
  44594. (eq, ":war_peace_truce_status", -2),
  44595. (ge, ":hours_since_last_decisive_event", 720),
  44596.  
  44597. (troop_get_type, reg4, ":actor_leader"),
  44598.  
  44599. (assign, ":result", 2),
  44600. (assign, ":explainer_string", "str_s12s15_feels_frustrated_by_reg4herhis_inability_to_strike_a_decisive_blow_against_s16"),
  44601.  
  44602.  
  44603. (else_try),
  44604. (lt, ":current_faction_relation", 0),
  44605. (gt, ":war_damage_suffered", 100),
  44606.  
  44607. (val_mul, ":war_damage_suffered_x_2", 2),
  44608. (lt, ":war_damage_inflicted", ":war_damage_suffered_x_2"),
  44609.  
  44610. (assign, ":result", 2),
  44611. (assign, ":explainer_string", "str_s12s15_has_suffered_enough_in_the_war_with_s16_for_too_little_gain_and_is_ready_to_pursue_a_peace"),
  44612.  
  44613. (else_try),
  44614. (gt, ":third_party_war", 0),
  44615. (ge, ":modified_honor_and_relation", 0),
  44616. (lt, ":current_faction_relation", 0),
  44617.  
  44618. (assign, ":result", 1),
  44619. (str_store_faction_name, s17, ":third_party_war"),
  44620. (assign, ":explainer_string", "str_s12s15_would_like_to_firm_up_a_truce_with_s16_to_respond_to_the_threat_from_the_s17"),
  44621. (else_try),
  44622. (gt, ":third_party_war", 0),
  44623. (ge, ":modified_honor_and_relation", 0),
  44624.  
  44625. (assign, ":result", 1),
  44626. (str_store_faction_name, s17, ":third_party_war"),
  44627. (assign, ":explainer_string", "str_s12s15_wishes_to_be_at_peace_with_s16_so_as_to_pursue_the_war_against_the_s17"),
  44628. (else_try),
  44629. (gt, ":strength_ratio", 175),
  44630. # (eq, ":two_factions_share_border", 1),
  44631.  
  44632. (assign, ":result", 1),
  44633. (assign, ":explainer_string", "str_s12s15_seems_to_be_intimidated_by_s16_and_would_like_to_avoid_hostilities"),
  44634. (else_try),
  44635. (lt, ":current_faction_relation", 0),
  44636.  
  44637. (assign, ":result", 1),
  44638. (assign, ":explainer_string", "str_s12s15_has_no_particular_reason_to_continue_the_war_with_s16_and_would_probably_make_peace_if_given_the_opportunity"),
  44639. (else_try),
  44640. (assign, ":result", 1),
  44641. (assign, ":explainer_string", "str_s12s15_seems_to_be_willing_to_improve_relations_with_s16"),
  44642. (try_end),
  44643.  
  44644. (str_store_string, s14, ":explainer_string"),
  44645. (assign, reg0, ":result"),
  44646. (assign, reg1, ":explainer_string"),
  44647.  
  44648. ]),
  44649.  
  44650. ("npc_decision_checklist_male_guardian_assess_suitor", #parameters from dialog
  44651. [
  44652. (store_script_param, ":lord", 1),
  44653. (store_script_param, ":suitor", 2),
  44654.  
  44655. (troop_get_slot, ":lord_reputation", ":lord", slot_lord_reputation_type),
  44656. (store_faction_of_troop, ":lord_faction", ":lord"),
  44657.  
  44658. (try_begin),
  44659. (eq, ":suitor", "trp_player"),
  44660. (assign, ":suitor_faction", "$players_kingdom"),
  44661. (else_try),
  44662. (store_faction_of_troop, ":suitor_faction", ":suitor"),
  44663. (try_end),
  44664. (store_relation, ":faction_relation_with_suitor", ":lord_faction", ":suitor_faction"),
  44665.  
  44666. (call_script, "script_troop_get_relation_with_troop", ":lord", ":suitor"),
  44667. (assign, ":lord_suitor_relation", reg0),
  44668.  
  44669.  
  44670.  
  44671. (troop_get_slot, ":suitor_renown", ":suitor", slot_troop_renown),
  44672.  
  44673.  
  44674. (assign, ":competitor_found", -1),
  44675.  
  44676. (try_begin),
  44677. (eq, ":suitor", "trp_player"),
  44678. (gt, "$marriage_candidate", 0),
  44679.  
  44680. (try_for_range, ":competitor", lords_begin, lords_end),
  44681. (store_faction_of_troop, ":competitor_faction", ":competitor"),
  44682. (eq, ":competitor_faction", ":lord_faction"),
  44683. (this_or_next|troop_slot_eq, ":competitor", slot_troop_love_interest_1, "$marriage_candidate"),
  44684. (this_or_next|troop_slot_eq, ":competitor", slot_troop_love_interest_2, "$marriage_candidate"),
  44685. (troop_slot_eq, ":competitor", slot_troop_love_interest_3, "$marriage_candidate"),
  44686.  
  44687. (call_script, "script_troop_get_relation_with_troop", ":competitor", ":lord"),
  44688. (gt, reg0, 5),
  44689.  
  44690. (troop_slot_ge, ":competitor", slot_troop_renown, ":suitor_renown"), #higher renown than player
  44691.  
  44692. (assign, ":competitor_found", ":competitor"),
  44693. (str_store_troop_name, s14, ":competitor"),
  44694. (str_store_troop_name, s16, "$marriage_candidate"),
  44695. (try_end),
  44696. (try_end),
  44697.  
  44698. #renown
  44699. (try_begin),
  44700. (lt, ":suitor_renown", 50),
  44701. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_quarrelsome),
  44702. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_debauched),
  44703. (troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_selfrighteous),
  44704. (assign, ":explainer_string", "str_excuse_me_how_can_you_possibly_imagine_yourself_worthy_to_marry_into_our_family"),
  44705. (assign, ":result", -3),
  44706. (else_try),
  44707. (lt, ":suitor_renown", 50),
  44708. (troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_goodnatured),
  44709.  
  44710. (assign, ":explainer_string", "str_em_with_regard_to_her_ladyship_we_were_looking_specifically_for_a_groom_of_some_distinction_fight_hard_count_your_dinars_and_perhaps_some_day_in_the_future_we_may_speak_of_such_things_my_good_man"),
  44711. (assign, ":result", -1),
  44712. (else_try),
  44713. (lt, ":suitor_renown", 50),
  44714.  
  44715. (assign, ":explainer_string", "str_em_with_regard_to_her_ladyship_we_were_looking_specifically_for_a_groom_of_some_distinction"),
  44716. (assign, ":result", -2),
  44717.  
  44718. (else_try),
  44719. (lt, ":suitor_renown", 200),
  44720. (neg|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_goodnatured),
  44721. (assign, ":explainer_string", "str_it_is_too_early_for_you_to_be_speaking_of_such_things_you_are_still_making_your_mark_in_the_world"),
  44722.  
  44723. (assign, ":result", -1),
  44724.  
  44725. (else_try), #wrong faction
  44726. (eq, ":suitor", "trp_player"),
  44727. (neq, ":suitor_faction", "$players_kingdom"),
  44728. (str_store_faction_name, s4, ":lord_faction"),
  44729. (this_or_next|eq, ":lord_reputation", lrep_quarrelsome),
  44730. (eq, ":lord_reputation", lrep_debauched),
  44731. (assign, ":explainer_string", "str_you_dont_serve_the_s4_so_id_say_no_one_day_we_may_be_at_war_and_i_prefer_not_to_have_to_kill_my_inlaws_if_at_all_possible"),
  44732.  
  44733. (assign, ":result", -1),
  44734.  
  44735. (else_try),
  44736. (eq, ":suitor", "trp_player"),
  44737. (neq, ":suitor_faction", "$players_kingdom"),
  44738. (neq, ":lord_reputation", lrep_goodnatured),
  44739. (neq, ":lord_reputation", lrep_cunning),
  44740.  
  44741. (assign, ":explainer_string", "str_as_you_are_not_a_vassal_of_the_s4_i_must_decline_your_request_the_twists_of_fate_may_mean_that_we_will_one_day_cross_swords_and_i_would_hope_not_to_make_a_widow_of_a_lady_whom_i_am_obligated_to_protect"),
  44742.  
  44743. (assign, ":result", -1),
  44744. (else_try),
  44745. (eq, ":suitor", "trp_player"),
  44746. (lt, ":faction_relation_with_suitor", 0),
  44747.  
  44748. (assign, ":explainer_string", "str_as_you_are_not_a_vassal_of_the_s4_i_must_decline_your_request_the_twists_of_fate_may_mean_that_we_will_one_day_cross_swords_and_i_would_hope_not_to_make_a_widow_of_a_lady_whom_i_am_obligated_to_protect"),
  44749.  
  44750. (assign, ":result", -1),
  44751.  
  44752. (else_try),
  44753. (eq, ":suitor", "trp_player"),
  44754. (neq, "$player_has_homage", 1),
  44755. (neg|faction_slot_eq, "fac_player_supporters_faction", slot_faction_state, sfs_active),
  44756.  
  44757. (assign, ":explainer_string", "str_as_you_are_not_a_pledged_vassal_of_our_liege_with_the_right_to_hold_land_i_must_refuse_your_request_to_marry_into_our_family"),
  44758.  
  44759. (assign, ":result", -1),
  44760. (else_try),
  44761. (gt, ":competitor_found", -1),
  44762.  
  44763. (this_or_next|eq, ":lord_reputation", lrep_selfrighteous),
  44764. (this_or_next|eq, ":lord_reputation", lrep_debauched),
  44765. (this_or_next|eq, ":lord_reputation", lrep_martial),
  44766. (eq, ":lord_reputation", lrep_quarrelsome),
  44767.  
  44768. (assign, ":explainer_string", "str_look_here_lad__the_young_s14_has_been_paying_court_to_s16_and_youll_have_to_admit__hes_a_finer_catch_for_her_than_you_so_lets_have_no_more_of_this_talk_shall_we"),
  44769. (assign, ":result", -1),
  44770.  
  44771. (else_try),
  44772. (lt, ":lord_suitor_relation", -4),
  44773.  
  44774.  
  44775.  
  44776. (assign, ":explainer_string", "str_i_do_not_care_for_you_sir_and_i_consider_it_my_duty_to_protect_the_ladies_of_my_household_from_undesirable_suitors"),
  44777. (assign, ":result", -3),
  44778. (else_try),
  44779. (lt, ":lord_suitor_relation", 5),
  44780.  
  44781. (assign, ":explainer_string", "str_hmm_young_girls_may_easily_be_led_astray_so_out_of_a_sense_of_duty_to_the_ladies_of_my_household_i_think_i_would_like_to_get_to_know_you_a_bit_better_we_may_speak_of_this_at_a_later_date"),
  44782. (assign, ":result", -1),
  44783. (else_try),
  44784.  
  44785. (assign, ":explainer_string", "str_you_may_indeed_make_a_fine_match_for_the_young_mistress"),
  44786. (assign, ":result", 1),
  44787. (try_end),
  44788.  
  44789. (assign, reg0, ":result"),
  44790. (assign, reg1, ":explainer_string"),
  44791.  
  44792. ]),
  44793.  
  44794. ("npc_decision_checklist_marry_female_pc", #
  44795. [
  44796. (store_script_param, ":npc", 1),
  44797.  
  44798.  
  44799. (troop_get_slot, ":npc_reputation_type", ":npc", slot_lord_reputation_type),
  44800.  
  44801. (call_script, "script_troop_get_romantic_chemistry_with_troop", ":npc", "trp_player"),
  44802. (assign, ":romantic_chemistry", reg0),
  44803.  
  44804. (call_script, "script_troop_get_relation_with_troop", ":npc", "trp_player"),
  44805. (assign, ":relation_with_player", reg0),
  44806.  
  44807. (assign, ":competitor", -1),
  44808. (try_for_range, ":competitor_candidate", kingdom_ladies_begin, kingdom_ladies_end),
  44809. (this_or_next|troop_slot_eq, ":npc", slot_troop_love_interest_1, ":competitor_candidate"),
  44810. (this_or_next|troop_slot_eq, ":npc", slot_troop_love_interest_2, ":competitor_candidate"),
  44811. (troop_slot_eq, ":npc", slot_troop_love_interest_3, ":competitor_candidate"),
  44812. (call_script, "script_troop_get_relation_with_troop", ":npc", ":competitor"),
  44813. (assign, ":competitor_relation", reg0),
  44814.  
  44815. (gt, ":competitor_relation", ":relation_with_player"),
  44816. (assign, ":competitor", ":competitor_candidate"),
  44817. (try_end),
  44818.  
  44819. (assign, ":player_possessions", 0),
  44820. (try_for_range, ":center", centers_begin, centers_end),
  44821. (troop_slot_eq, ":center", slot_town_lord, "trp_player"),
  44822. (val_add, ":player_possessions", 1),
  44823. (try_end),
  44824.  
  44825. (assign, ":lord_agrees", 0),
  44826. #reasons for refusal
  44827. (try_begin),
  44828. (troop_slot_ge, "trp_player", slot_troop_betrothed, active_npcs_begin),
  44829. (neg|troop_slot_eq, "trp_player", slot_troop_betrothed, ":npc"),
  44830.  
  44831. (str_store_string, s14, "str_my_lady_engaged_to_another"),
  44832. (else_try),
  44833. #bad relationship - minor
  44834. (lt, ":relation_with_player", -3),
  44835. (this_or_next|eq, ":npc_reputation_type", lrep_upstanding),
  44836. (this_or_next|eq, ":npc_reputation_type", lrep_cunning),
  44837. (eq, ":npc_reputation_type", lrep_goodnatured),
  44838.  
  44839. (str_store_string, s14, "str_madame__given_our_relations_in_the_past_this_proposal_is_most_surprising_i_do_not_think_that_you_are_the_kind_of_woman_who_can_be_bent_to_a_hushands_will_and_i_would_prefer_not_to_have_our_married_life_be_a_source_of_constant_acrimony"),
  44840.  
  44841. (else_try), #really bad relationship
  44842. (lt, ":relation_with_player", -10),
  44843.  
  44844. (this_or_next|eq, ":npc_reputation_type", lrep_quarrelsome),
  44845. (this_or_next|eq, ":npc_reputation_type", lrep_debauched),
  44846. (eq, ":npc_reputation_type", lrep_selfrighteous),
  44847.  
  44848. (str_store_string, s14, "str_i_would_prefer_to_marry_a_proper_maiden_who_will_obey_her_husband_and_is_not_likely_to_split_his_head_with_a_sword"),
  44849. (else_try),
  44850. (lt, ":romantic_chemistry", 5),
  44851.  
  44852. (str_store_string, s14, "str_my_lady_not_sufficient_chemistry"),
  44853.  
  44854. (else_try), #would prefer someone more ladylike
  44855. (this_or_next|eq, ":npc_reputation_type", lrep_upstanding),
  44856. (eq, ":npc_reputation_type", lrep_martial),
  44857.  
  44858. (str_store_string, s14, "str_my_lady_while_i_admire_your_valor_you_will_forgive_me_if_i_tell_you_that_a_woman_like_you_does_not_uphold_to_my_ideal_of_the_feminine_of_the_delicate_and_of_the_pure"),
  44859. (else_try),
  44860. (eq, ":npc_reputation_type", lrep_quarrelsome),
  44861. (lt, ":romantic_chemistry", 15),
  44862.  
  44863. (str_store_string, s14, "str_nah_i_want_a_woman_wholl_keep_quiet_and_do_what_shes_told_i_dont_think_thats_you"),
  44864. (else_try), #no properties
  44865. (this_or_next|eq, ":npc_reputation_type", lrep_selfrighteous),
  44866. (eq, ":npc_reputation_type", lrep_debauched),
  44867.  
  44868. (ge, ":romantic_chemistry", 10),
  44869. (eq, ":player_possessions", 0),
  44870.  
  44871. (str_store_string, s14, "str_my_lady_you_are_possessed_of_great_charms_but_no_properties_until_you_obtain_some_to_marry_you_would_be_an_act_of_ingratitude_towards_my_ancestors_and_my_lineage"),
  44872.  
  44873. (else_try), #you're a nobody - I can do better
  44874. (this_or_next|eq, ":npc_reputation_type", lrep_selfrighteous),
  44875. (eq, ":npc_reputation_type", lrep_debauched),
  44876.  
  44877. (eq, ":player_possessions", 0),
  44878.  
  44879. (str_store_string, s14, "str_my_lady_you_are_a_woman_of_no_known_family_of_no_possessions__in_short_a_nobody_do_you_think_that_you_are_fit_to_marry_into_may_family"),
  44880. (else_try), #just not that into you
  44881. (lt, ":romantic_chemistry", 5),
  44882. (lt, ":relation_with_player", 20),
  44883.  
  44884. (neq, ":npc_reputation_type", lrep_debauched),
  44885. (neq, ":npc_reputation_type", lrep_selfrighteous),
  44886.  
  44887. (str_store_string, s14, "str_my_lady__forgive_me__the_quality_of_our_bond_is_not_of_the_sort_which_the_poets_tell_us_is_necessary_to_sustain_a_happy_marriage"),
  44888.  
  44889. (else_try), #you're a liability, given your relation with the liege
  44890. (eq, ":npc_reputation_type", lrep_cunning),
  44891. (faction_get_slot, ":leader", slot_faction_leader, "$g_talk_troop_faction"),
  44892. (str_store_troop_name, s4, ":leader"),
  44893. (call_script, "script_troop_get_relation_with_troop", ":leader", "trp_player"),
  44894. (lt, reg0, -10),
  44895.  
  44896. (str_store_string, s14, "str_um_i_think_that_if_i_want_to_stay_on_s4s_good_side_id_best_not_marry_you"),
  44897. (else_try), #part of another faction
  44898. (gt, "$players_kingdom", 0),
  44899. (neq, "$players_kingdom", "$g_talk_troop_faction"),
  44900. (faction_get_slot, ":leader", slot_faction_leader, "$g_talk_troop_faction"),
  44901. (troop_get_type, reg4, ":leader"),
  44902.  
  44903. (str_store_string, s14, "str_you_serve_another_realm_i_dont_see_s4_granting_reg4herhis_blessing_to_our_union"),
  44904. (else_try), #there's a competitor
  44905. (gt, ":competitor", -1),
  44906. (str_store_troop_name, s4, ":competitor"),
  44907.  
  44908. (str_store_string, s14, "str_madame_my_heart_currently_belongs_to_s4"),
  44909.  
  44910. (else_try),
  44911. (lt, ":relation_with_player", 10),
  44912. (assign, ":lord_agrees", 2),
  44913.  
  44914. (str_store_string, s14, "str_my_lady_you_are_a_woman_of_great_spirit_and_bravery_possessed_of_beauty_grace_and_wit_i_shall_give_your_proposal_consideration"),
  44915. (else_try),
  44916. (assign, ":lord_agrees", 1),
  44917.  
  44918. (str_store_string, s14, "str_my_lady_you_are_a_woman_of_great_spirit_and_bravery_possessed_of_beauty_grace_and_wit_i_would_be_most_honored_were_you_to_become_my_wife"),
  44919. (try_end),
  44920.  
  44921.  
  44922. (assign, reg0, ":lord_agrees"),
  44923.  
  44924. ]
  44925. ),
  44926.  
  44927.  
  44928. # (
  44929. # "npc_decision_checklist_king_chooses_lord_for_center",
  44930. # [
  44931. # (store_script_param, ":center", 1),
  44932.  
  44933. # (store_faction_of_party, ":faction", ":center"),
  44934. # (faction_get_slot, ":king", ":faction", slot_faction_leader),
  44935.  
  44936. # (assign, ":total_renown_in_faction"),
  44937. # (try_for_range, ":lord_iterator", active_npcs_including_player_begin, active_npcs_end),
  44938. # (assign, ":lord", ":lord_iterator"),
  44939. # (store_faction_of_troop, ":lord_faction", ":lord"),
  44940. # (try_begin),
  44941. # (eq, ":lord_iterator", "trp_kingdom_heroes_including_player_begin"),
  44942. # (assign, ":lord", "trp_player"),
  44943. # (assign, ":lord_faction", "$players_kingdom"),
  44944. # (try_end),
  44945. # (troop_get_slot, ":renown", ":lord", slot_troop_renown),
  44946. # (val_add, ":total_renown_in_faction", ":renown"),
  44947.  
  44948. # (troop_set_slot, ":lord", slot_troop_temp_slot, 0),
  44949. # (try_end),
  44950.  
  44951. # (assign, ":total_property_points_in_faction"),
  44952. # (try_for_range, ":village", villages_begin, villages_end),
  44953.  
  44954. # (try_end),
  44955.  
  44956.  
  44957.  
  44958. # (try_begin),
  44959.  
  44960. #I needed it for myself
  44961.  
  44962. #The one who captured it was suitably deserving
  44963.  
  44964. #I had not sufficiently recognized Lord X for his service
  44965.  
  44966. # (try_end),
  44967.  
  44968.  
  44969. # ]),
  44970.  
  44971.  
  44972.  
  44973. ("courtship_poem_reactions", #parameters from dialog
  44974. [
  44975. (store_script_param, ":lady", 1),
  44976. (store_script_param, ":poem", 2),
  44977.  
  44978. (troop_get_slot, ":lady_reputation", ":lady", slot_lord_reputation_type),
  44979.  
  44980. (try_begin),
  44981. (eq, "$cheat_mode", 1),
  44982. (assign, reg4, ":poem"),
  44983. (assign, reg5, ":lady_reputation"),
  44984. (display_message, "str_poem_choice_reg4_lady_rep_reg5"),
  44985. (try_end),
  44986.  
  44987. (try_begin), #conventional ++, ambitious -, adventurous -
  44988. (eq, ":poem", courtship_poem_tragic),
  44989. (eq, ":lady_reputation", lrep_conventional),
  44990. (str_store_string, s11, "str_ah__kais_and_layali__such_a_sad_tale_many_a_time_has_it_been_recounted_for_my_family_by_the_wandering_poets_who_come_to_our_home_and_it_has_never_failed_to_bring_tears_to_our_eyes"),
  44991. (assign, ":result", 5),
  44992. (else_try),
  44993. (eq, ":poem", courtship_poem_tragic),
  44994. (eq, ":lady_reputation", lrep_ambitious),
  44995. (str_store_string, s11, "str_kais_and_layali_three_hundred_stanzas_of_pathetic_sniveling_if_you_ask_me_if_kais_wanted_to_escape_heartbreak_he_should_have_learned_to_live_within_his_station_and_not_yearn_for_what_he_cannot_have"),
  44996. (assign, ":result", 0),
  44997. (else_try),
  44998. (eq, ":poem", courtship_poem_tragic),
  44999. (eq, ":lady_reputation", lrep_otherworldly),
  45000. (str_store_string, s11, "str_kais_and_layali_no_one_should_ever_have_written_such_a_sad_poem_if_it_was_the_destiny_of_kais_and_layali_to_be_together_than_their_love_should_have_conquered_all_obstacles"),
  45001. (assign, ":result", 1),
  45002. (else_try),
  45003. (eq, ":poem", courtship_poem_tragic),
  45004. # moralizing and adventurous
  45005. (str_store_string, s11, "str_ah_kais_and_layali_a_very_old_standby_but_moving_in_its_way"),
  45006. (assign, ":result", 3),
  45007. #Heroic
  45008. (else_try), #adventurous ++, conventional -1, moralizing -1
  45009. (eq, ":poem", courtship_poem_heroic),
  45010. (eq, ":lady_reputation", lrep_adventurous),
  45011. (str_store_string, s11, "str_the_saga_of_helgered_and_kara_such_happy_times_in_which_our_ancestors_lived_women_like_kara_could_venture_out_into_the_world_like_men_win_a_name_for_themselves_and_not_linger_in_their_husbands_shadow"),
  45012. (assign, ":result", 5),
  45013. (else_try), #adventurous ++, conventional -1, moralizing -1
  45014. (eq, ":poem", courtship_poem_heroic),
  45015. (eq, ":lady_reputation", lrep_ambitious),
  45016. (str_store_string, s11, "str_ah_the_saga_of_helgered_and_kara_now_there_was_a_lady_who_knew_what_she_wanted_and_was_not_afraid_to_obtain_it"),
  45017. (assign, ":result", 2),
  45018. (else_try), #adventurous ++, conventional -1, moralizing -1
  45019. (eq, ":poem", courtship_poem_heroic),
  45020. (eq, ":lady_reputation", lrep_otherworldly),
  45021. (str_store_string, s11, "str_the_saga_of_helgered_and_kara_a_terrible_tale__but_it_speaks_of_a_very_great_love_if_she_were_willing_to_make_war_on_her_own_family"),
  45022. (assign, ":result", 2),
  45023. (else_try), #adventurous ++, conventional -1, moralizing -1
  45024. (eq, ":poem", courtship_poem_heroic),
  45025. (eq, ":lady_reputation", lrep_moralist),
  45026. (str_store_string, s11, "str_the_saga_of_helgered_and_kara_as_i_recall_kara_valued_her_own_base_passions_over_duty_to_her_family_that_she_made_war_on_her_own_father_i_have_no_time_for_a_poem_which_praises_such_a_woman"),
  45027. (assign, ":result", 0),
  45028. (else_try), #adventurous ++, conventional -1, moralizing -1
  45029. (eq, ":poem", courtship_poem_heroic),
  45030. (eq, ":lady_reputation", lrep_conventional),
  45031. (str_store_string, s11, "str_the_saga_of_helgered_and_kara_how_could_a_woman_don_armor_and_carry_a_sword_how_could_a_man_love_so_ungentle_a_creature"),
  45032. (assign, ":result", 0),
  45033. #Comic
  45034. (else_try), #ambitious ++, romantic -, moralizing 0
  45035. (eq, ":poem", courtship_poem_comic),
  45036. (eq, ":lady_reputation", lrep_otherworldly),
  45037. (str_store_string, s11, "str_a_conversation_in_the_garden_i_cannot_understand_the_lady_in_that_poem_if_she_loves_the_man_why_does_she_tease_him_so"),
  45038. (assign, ":result", 0),
  45039. (else_try), #ambitious ++, romantic -, moralizing 0
  45040. (eq, ":poem", courtship_poem_comic),
  45041. (eq, ":lady_reputation", lrep_moralist),
  45042. (str_store_string, s11, "str_a_conversation_in_the_garden_let_us_see__it_is_morally_unedifying_it_exalts_deception_it_ends_with_a_maiden_surrendering_to_her_base_passions_and_yet_i_cannot_help_but_find_it_charming_perhaps_because_it_tells_us_that_love_need_not_be_tragic_to_be_memorable"),
  45043. (assign, ":result", 1),
  45044. (else_try), #ambitious ++, romantic -, moralizing 0
  45045. (eq, ":poem", courtship_poem_comic),
  45046. (eq, ":lady_reputation", lrep_ambitious),
  45047. (str_store_string, s11, "str_a_conversation_in_the_garden_now_that_is_a_tale_every_lady_should_know_by_heart_to_learn_the_subtleties_of_the_politics_she_must_practice"),
  45048. (assign, ":result", 5),
  45049. (else_try), #ambitious ++, romantic -, moralizing 0
  45050. (eq, ":poem", courtship_poem_comic),
  45051. #adventurous, conventional
  45052. (str_store_string, s11, "str_a_conversation_in_the_garden_it_is_droll_i_suppose__although_there_is_nothing_there_that_truly_stirs_my_soul"),
  45053. (assign, ":result", 3),
  45054.  
  45055. #Allegoric
  45056. (else_try), #moralizing ++, adventurous -, romantic -
  45057. (eq, ":poem", courtship_poem_allegoric),
  45058. (eq, ":lady_reputation", lrep_adventurous),
  45059. (str_store_string, s11, "str_storming_the_fortress_of_love_ah_yes_the_lady_sits_within_doing_nothing_while_the_man_is_the_one_who_strives_and_achieves_i_have_enough_of_that_in_my_daily_life_why_listen_to_poems_about_it"),
  45060. (assign, ":result", 0),
  45061. (else_try), #moralizing ++, adventurous -, romantic -
  45062. (eq, ":poem", courtship_poem_allegoric),
  45063. (this_or_next|eq, ":lady_reputation", lrep_conventional),
  45064. (eq, ":lady_reputation", lrep_moralist),
  45065. (str_store_string, s11, "str_storming_the_fortress_of_love_ah_yes_an_uplifting_tribute_to_the_separate_virtues_of_man_and_woman"),
  45066. (assign, ":result", 3),
  45067. (else_try), #moralizing ++, adventurous -, romantic -
  45068. (eq, ":poem", courtship_poem_allegoric),
  45069. (eq, ":lady_reputation", lrep_otherworldly),
  45070. (str_store_string, s11, "str_storming_the_fortress_of_love_ah_yes_but_although_it_is_a_fine_tale_of_virtues_it_speaks_nothing_of_passion"),
  45071. (assign, ":result", 1),
  45072. (else_try), #moralizing ++, adventurous -, romantic -
  45073. (eq, ":poem", courtship_poem_allegoric),
  45074. (eq, ":lady_reputation", lrep_ambitious),
  45075. (str_store_string, s11, "str_storming_the_fortress_of_love_ah_a_sermon_dressed_up_as_a_love_poem_if_you_ask_me"),
  45076. (assign, ":result", 1),
  45077.  
  45078. (else_try), #romantic ++, moralizing 0, ambitious -
  45079. (eq, ":poem", courtship_poem_mystic),
  45080. (eq, ":lady_reputation", lrep_otherworldly),
  45081. (str_store_string, s11, "str_a_hearts_desire_ah_such_a_beautiful_account_of_the_perfect_perfect_love_to_love_like_that_must_be_to_truly_know_rapture"),
  45082. (assign, ":result", 4),
  45083.  
  45084. (else_try), #romantic ++, moralizing 0, ambitious -
  45085. (eq, ":poem", courtship_poem_mystic),
  45086. (eq, ":lady_reputation", lrep_ambitious),
  45087. (str_store_string, s11, "str_a_hearts_desire_silly_if_you_ask_me_if_the_poet_desires_a_lady_then_he_should_endeavor_to_win_her__and_not_dress_up_his_desire_with_a_pretense_of_piety"),
  45088. (assign, ":result", 0),
  45089.  
  45090. (else_try), #romantic ++, moralizing 0, ambitious -
  45091. (eq, ":poem", courtship_poem_mystic),
  45092. (eq, ":lady_reputation", lrep_moralist),
  45093. (str_store_string, s11, "str_a_hearts_desire_hmm__it_is_an_interesting_exploration_of_earthly_and_divine_love_it_does_speak_of_the_spiritual_quest_which_brings_out_the_best_in_man_but_i_wonder_if_the_poet_has_not_confused_his_yearning_for_higher_things_with_his_baser_passions"),
  45094. (assign, ":result", 2),
  45095.  
  45096. (else_try), #romantic ++, moralizing 0, ambitious -
  45097. (eq, ":poem", courtship_poem_mystic),
  45098. (str_store_string, s11, "str_a_hearts_desire_oh_yes__it_is_very_worthy_and_philosophical_but_if_i_am_to_listen_to_a_bard_strum_a_lute_for_three_hours_i_personally_prefer_there_to_be_a_bit_of_a_story"),
  45099. (assign, ":result", 1),
  45100. (try_end),
  45101.  
  45102.  
  45103. (try_begin),
  45104. (eq, "$cheat_mode", 1),
  45105. (assign, reg4, ":result"),
  45106. (display_message, "str_result_reg4_string_s11"),
  45107. (try_end),
  45108.  
  45109.  
  45110. (assign, reg0, ":result"),
  45111.  
  45112. ]),
  45113.  
  45114. (
  45115. "diplomacy_faction_get_diplomatic_status_with_faction",
  45116. #result: -1 faction_1 has a casus belli against faction_2. 1, faction_1 has a truce with faction_2, -2, the two factions are at war
  45117. [
  45118. (store_script_param, ":actor_faction", 1),
  45119. (store_script_param, ":target_faction", 2),
  45120.  
  45121. (store_add, ":truce_slot", ":target_faction", slot_faction_truce_days_with_factions_begin),
  45122. (store_add, ":provocation_slot", ":target_faction", slot_faction_provocation_days_with_factions_begin),
  45123. (val_sub, ":truce_slot", kingdoms_begin),
  45124. (val_sub, ":provocation_slot", kingdoms_begin),
  45125.  
  45126. (assign, ":result", 0),
  45127. (assign, ":duration", 0),
  45128.  
  45129. (try_begin),
  45130. (store_relation, ":relation", ":actor_faction", ":target_faction"),
  45131. (lt, ":relation", 0),
  45132. (assign, ":result", -2),
  45133. (else_try),
  45134. (faction_slot_ge, ":actor_faction", ":truce_slot", 1),
  45135. (assign, ":result", 1),
  45136.  
  45137. (faction_get_slot, ":duration", ":actor_faction", ":truce_slot"),
  45138. (else_try),
  45139. (faction_slot_ge, ":actor_faction", ":provocation_slot", 1),
  45140. (assign, ":result", -1),
  45141.  
  45142. (faction_get_slot, ":duration", ":actor_faction", ":provocation_slot"),
  45143. (try_end),
  45144.  
  45145. (assign, reg0, ":result"),
  45146. (assign, reg1, ":duration"),
  45147. ]),
  45148.  
  45149. ("faction_follows_controversial_policy",
  45150. [
  45151. (store_script_param, ":faction_no", 1),
  45152. (store_script_param, ":policy_type", 2),
  45153.  
  45154. (faction_get_slot, ":faction_leader", ":faction_no", slot_faction_leader),
  45155.  
  45156. (try_begin),
  45157. (ge, "$cheat_mode", 1),
  45158. (str_store_faction_name, s3, ":faction_no"),
  45159. (display_message, "str_calculating_effect_for_policy_for_s3"),
  45160.  
  45161. (val_add, "$number_of_controversial_policy_decisions", 1),
  45162. (try_end),
  45163.  
  45164. (try_begin),
  45165. (eq, ":policy_type", logent_policy_ruler_attacks_without_provocation),
  45166. (assign, ":hawk_relation_effect", 0),
  45167. (assign, ":honorable_relation_effect", -2),
  45168. (assign, ":honor_change", -1),
  45169.  
  45170. (else_try),
  45171. (eq, ":policy_type", logent_policy_ruler_ignores_provocation),
  45172. (assign, ":hawk_relation_effect", -3),
  45173. (assign, ":honorable_relation_effect", 0),
  45174. (assign, ":honor_change", 0),
  45175.  
  45176. (else_try),
  45177. (eq, ":policy_type", logent_policy_ruler_declares_war_with_justification),
  45178. (assign, ":hawk_relation_effect", 3),
  45179. (assign, ":honorable_relation_effect", 1),
  45180. (assign, ":honor_change", 0),
  45181.  
  45182. (else_try),
  45183. (eq, ":policy_type", logent_policy_ruler_breaks_truce),
  45184. (assign, ":hawk_relation_effect", 0),
  45185. (assign, ":honorable_relation_effect", -3),
  45186. (assign, ":honor_change", -5),
  45187.  
  45188. (else_try),
  45189. (eq, ":policy_type", logent_policy_ruler_makes_peace_too_soon),
  45190. (assign, ":hawk_relation_effect", -5),
  45191. (assign, ":honorable_relation_effect", 0),
  45192. (assign, ":honor_change", 0),
  45193.  
  45194. (try_end),
  45195.  
  45196. (try_begin),
  45197. (eq, ":faction_leader", "trp_player"),
  45198. (call_script, "script_change_player_honor", ":honor_change"),
  45199. (try_end),
  45200.  
  45201. (try_for_range, ":lord", active_npcs_begin, active_npcs_end),
  45202. (troop_slot_eq, ":lord", slot_troop_occupation, slto_kingdom_hero),
  45203. (store_faction_of_troop, ":lord_faction", ":lord"),
  45204. (eq, ":lord_faction", ":faction_no"),
  45205. (neq, ":lord", ":faction_leader"),
  45206.  
  45207. (try_begin),
  45208. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_martial),
  45209. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_quarrelsome),
  45210. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_selfrighteous),
  45211. (troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_debauched),
  45212. (call_script, "script_troop_change_relation_with_troop", ":faction_leader", ":lord", ":hawk_relation_effect"),
  45213. (val_add, "$total_policy_dispute_changes", ":hawk_relation_effect"),
  45214. (try_end),
  45215.  
  45216. (try_begin),
  45217. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_martial),
  45218. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_goodnatured),
  45219. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_selfrighteous),
  45220. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_benefactor), #new for enfiefed commoners
  45221. (this_or_next|troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_custodian), #new for enfiefed commoners
  45222. (troop_slot_eq, ":lord", slot_lord_reputation_type, lrep_upstanding),
  45223. (call_script, "script_troop_change_relation_with_troop", ":faction_leader", ":lord", ":honorable_relation_effect"),
  45224. (val_add, "$total_policy_dispute_changes", ":honorable_relation_effect"),
  45225.  
  45226. (try_end),
  45227.  
  45228. (try_end),
  45229.  
  45230. ]),
  45231.  
  45232.  
  45233. ("internal_politics_rate_feast_to_s9",
  45234. [
  45235. (store_script_param, ":householder", 1),
  45236. (store_script_param, ":num_servings", 2),
  45237. # (store_script_param, ":faction", 3),
  45238. (store_script_param, ":consume_items", 4),
  45239.  
  45240. (val_max, ":num_servings", 1),
  45241.  
  45242. (try_for_range, ":item", trade_goods_begin, trade_goods_end),
  45243. (item_set_slot, ":item", slot_item_amount_available, 0), #had no "item"
  45244. (try_end),
  45245.  
  45246. (troop_get_inventory_capacity, ":capacity", ":householder"),
  45247. (try_for_range, ":inventory_slot", 0, ":capacity"),
  45248. (troop_get_inventory_slot, ":item", ":householder", ":inventory_slot"),
  45249. (is_between, ":item", trade_goods_begin, trade_goods_end),
  45250. (troop_inventory_slot_get_item_amount, ":slot_amount", ":householder", ":inventory_slot"),
  45251. (item_get_slot, ":item_amount", ":item", slot_item_amount_available),
  45252. (val_add, ":item_amount", ":slot_amount"),
  45253. (item_set_slot, ":item", slot_item_amount_available, ":item_amount"),
  45254. (try_end),
  45255. #food
  45256. (assign, ":food_amount", 0),
  45257. (assign, ":food_variety", 0),
  45258.  
  45259. (store_div, ":servings_div_by_12", ":num_servings", 12),
  45260. (try_for_range, ":food_item", food_begin, food_end),
  45261. (item_get_slot, ":food_in_slot", ":food_item", slot_item_amount_available),
  45262. (val_add, ":food_amount", ":food_in_slot"),
  45263.  
  45264.  
  45265. ## (str_store_item_name, s4, ":food_item"),
  45266. ## (assign, reg3, ":food_in_slot"),
  45267. ## (assign, reg5, ":servings_div_by_12"),
  45268. ## (display_message, "str_reg3_units_of_s4_for_reg5_guests_and_retinue"),
  45269.  
  45270.  
  45271. (ge, ":food_in_slot", ":servings_div_by_12"),
  45272. (val_add, ":food_variety", 1),
  45273. (try_end),
  45274.  
  45275. (val_mul, ":food_amount", 100),
  45276. (val_div, ":food_amount", ":num_servings"), #1 to 100 for each
  45277. (val_min, ":food_amount", 100),
  45278.  
  45279. (val_mul, ":food_variety", 85), #1 to 100 for each
  45280. (val_div, ":food_variety", 10),
  45281. (val_min, ":food_variety", 100),
  45282.  
  45283. #drink
  45284. (assign, ":drink_amount", 0),
  45285. (assign, ":drink_variety", 0),
  45286. (store_div, ":servings_div_by_4", ":num_servings", 4),
  45287. (try_for_range, ":drink_iterator", "itm_wine", "itm_smoked_fish"),
  45288. (assign, ":drink_item", ":drink_iterator"),
  45289. (item_get_slot, ":drink_in_slot", ":drink_item", slot_item_amount_available),
  45290.  
  45291. (val_add, ":drink_amount", ":drink_in_slot"),
  45292.  
  45293. (ge, ":drink_in_slot", ":servings_div_by_4"),
  45294. (val_add, ":drink_variety", 1),
  45295. (try_end),
  45296.  
  45297. (val_mul, ":drink_amount", 200), #amount needed is 50% of the number of guests
  45298. (val_max, ":num_servings", 1),
  45299.  
  45300. (val_div, ":drink_amount", ":num_servings"), #1 to 100 for each
  45301. (val_min, ":drink_amount", 100),
  45302. (val_mul, ":drink_variety", 50), #1 to 100 for each
  45303.  
  45304. #in the future, it might be worthwhile to add different varieties of spices
  45305. (item_get_slot, ":spice_amount", "itm_spice", slot_item_amount_available),
  45306. (store_mul, ":spice_percentage", ":spice_amount", 100),
  45307. (val_max, ":servings_div_by_12", 1),
  45308. (val_div, ":spice_amount", ":servings_div_by_12"),
  45309. (val_min, ":spice_percentage", 100),
  45310. ## (assign, reg3, ":spice_amount"),
  45311. ## (assign, reg5, ":servings_div_by_12"),
  45312. ## (assign, reg6, ":spice_percentage"),
  45313. ## (display_message, "str_reg3_units_of_spice_of_reg5_to_be_consumed"),
  45314.  
  45315. #oil availability. In the future, this may become an "atmospherics" category, including incenses
  45316. (item_get_slot, ":oil_amount", "itm_oil", slot_item_amount_available),
  45317. (store_mul, ":oil_percentage", ":oil_amount", 100),
  45318. (val_max, ":servings_div_by_12", 1),
  45319. (val_div, ":oil_amount", ":servings_div_by_12"),
  45320. (val_min, ":oil_percentage", 100),
  45321. ## (assign, reg3, ":oil_amount"),
  45322. ## (assign, reg5, ":servings_div_by_12"),
  45323. ## (assign, reg6, ":oil_percentage"),
  45324. ## (display_message, "str_reg3_units_of_oil_of_reg5_to_be_consumed"),
  45325.  
  45326. (store_div, ":food_amount_string", ":food_amount", 20),
  45327. (val_add, ":food_amount_string", "str_feast_description"),
  45328. (str_store_string, s8, ":food_amount_string"),
  45329. (str_store_string, s9, "str_of_food_which_must_come_before_everything_else_the_amount_is_s8"),
  45330.  
  45331. (store_div, ":food_variety_string", ":food_variety", 20),
  45332. (val_add, ":food_variety_string", "str_feast_description"),
  45333. (str_store_string, s8, ":food_variety_string"),
  45334. (str_store_string, s9, "str_s9_and_the_variety_is_s8_"),
  45335.  
  45336. (store_div, ":drink_amount_string", ":drink_amount", 20),
  45337. (val_add, ":drink_amount_string", "str_feast_description"),
  45338. (str_store_string, s8, ":drink_amount_string"),
  45339. (str_store_string, s9, "str_s9_of_drink_which_guests_will_expect_in_great_abundance_the_amount_is_s8"),
  45340.  
  45341. (store_div, ":drink_variety_string", ":drink_variety", 20),
  45342. (val_add, ":drink_variety_string", "str_feast_description"),
  45343. (str_store_string, s8, ":drink_variety_string"),
  45344. (str_store_string, s9, "str_s9_and_the_variety_is_s8_"),
  45345.  
  45346. (store_div, ":spice_string", ":spice_percentage", 20),
  45347. (val_add, ":spice_string", "str_feast_description"),
  45348. (str_store_string, s8, ":spice_string"),
  45349. (str_store_string, s9, "str_s9_of_spice_which_is_essential_to_demonstrate_that_we_spare_no_expense_as_hosts_the_amount_is_s8_"),
  45350.  
  45351. (store_div, ":oil_string", ":oil_percentage", 20),
  45352. (val_add, ":oil_string", "str_feast_description"),
  45353. (str_store_string, s8, ":oil_string"),
  45354. (str_store_string, s9, "str_s9_of_oil_which_we_shall_require_to_light_the_lamps_the_amount_is_s8"),
  45355.  
  45356. (store_mul, ":food_amount_cap", ":food_amount", 8),
  45357. (store_add, ":total", ":food_amount", ":food_variety"),
  45358. (val_mul, ":total", 2), #x4
  45359. (val_add, ":total", ":drink_variety"),
  45360. (val_add, ":total", ":drink_amount"), #x6
  45361. (val_add, ":total", ":spice_amount"), #x7
  45362. (val_add, ":total", ":oil_amount"), #x8
  45363. (val_min, ":total", ":food_amount_cap"),
  45364. (val_div, ":total", 8),
  45365. (val_clamp, ":total", 1, 101),
  45366. (store_div, ":total_string", ":total", 20),
  45367. (val_add, ":total_string", "str_feast_description"),
  45368. (str_store_string, s8, ":total_string"),
  45369. (str_store_string, s9, "str_s9_overall_our_table_will_be_considered_s8"),
  45370.  
  45371. (assign, reg0, ":total"), #zero to 100
  45372.  
  45373.  
  45374.  
  45375. (try_begin),
  45376. (eq, ":consume_items", 1),
  45377.  
  45378. (assign, ":num_of_servings_to_serve", ":num_servings"),
  45379. (try_for_range, ":unused", 0, 1999),
  45380. (gt, ":num_of_servings_to_serve", 0),
  45381.  
  45382. (try_for_range, ":item", trade_goods_begin, trade_goods_end),
  45383. (item_set_slot, ":item", slot_item_is_checked, 0),
  45384. (try_end),
  45385.  
  45386. (troop_get_inventory_capacity, ":inv_size", ":householder"),
  45387. (try_for_range, ":i_slot", 0, ":inv_size"),
  45388. (troop_get_inventory_slot, ":item", ":householder", ":i_slot"),
  45389. (this_or_next|eq, ":item", "itm_spice"),
  45390. (this_or_next|eq, ":item", "itm_oil"),
  45391. (this_or_next|eq, ":item", "itm_wine"),
  45392. (this_or_next|eq, ":item", "itm_ale"),
  45393. (is_between, ":item", food_begin, food_end),
  45394. (item_slot_eq, ":item", slot_item_is_checked, 0),
  45395. (troop_inventory_slot_get_item_amount, ":cur_amount", ":householder", ":i_slot"),
  45396. (gt, ":cur_amount", 0),
  45397.  
  45398. (val_sub, ":cur_amount", 1),
  45399. (troop_inventory_slot_set_item_amount, ":householder", ":i_slot", ":cur_amount"),
  45400. (val_sub, ":num_of_servings_to_serve", 1),
  45401. (item_set_slot, ":item", slot_item_is_checked, 1),
  45402. (try_end),
  45403. (try_end),
  45404. (try_end),
  45405. ]),
  45406.  
  45407.  
  45408. ("faction_get_adjective_to_s10",
  45409. [
  45410. (store_script_param, ":faction_no", 1),
  45411.  
  45412. (try_begin),
  45413. (eq, ":faction_no", "fac_player_faction"),
  45414. (assign, ":faction_no", "$players_kingdom"),
  45415. (try_end),
  45416.  
  45417.  
  45418. (try_begin),
  45419. (eq, ":faction_no", "fac_player_supporters_faction"),
  45420. (str_store_string, s10, "str_rebel"),
  45421. (else_try),
  45422. (this_or_next|eq, ":faction_no", "fac_outlaws"),
  45423. (this_or_next|eq, ":faction_no", "fac_mountain_bandits"),
  45424. (this_or_next|eq, ":faction_no", "fac_forest_bandits"),
  45425. (eq, ":faction_no", "fac_deserters"),
  45426. (str_store_string, s10, "str_bandit"),
  45427. (else_try),
  45428. (faction_get_slot, ":adjective_string", ":faction_no", slot_faction_adjective),
  45429. (str_store_string, s10, ":adjective_string"),
  45430. (try_end),
  45431. ]),
  45432.  
  45433. ("setup_tavern_attacker",
  45434. [
  45435. (store_script_param, ":cur_entry", 1),
  45436.  
  45437. (try_begin),
  45438. (neg|troop_slot_eq, "trp_hired_assassin", slot_troop_cur_center, "$g_encountered_party"),
  45439. (troop_slot_eq, "trp_belligerent_drunk", slot_troop_cur_center, "$g_encountered_party"),
  45440. (set_visitor, ":cur_entry", "trp_belligerent_drunk"),
  45441. (try_end),
  45442.  
  45443. (try_begin),
  45444. (troop_slot_eq, "trp_hired_assassin", slot_troop_cur_center, "$g_encountered_party"),
  45445. (set_visitor, ":cur_entry", "trp_hired_assassin"),
  45446. (try_end),
  45447. ]),
  45448.  
  45449. ("activate_tavern_attackers",
  45450. [
  45451. (set_party_battle_mode),
  45452. (try_for_agents, ":cur_agent"),
  45453. (agent_get_troop_id, ":cur_agent_troop", ":cur_agent"),
  45454. (this_or_next|eq, ":cur_agent_troop", "trp_fugitive"),
  45455. (this_or_next|eq, ":cur_agent_troop", "trp_belligerent_drunk"),
  45456. (eq, ":cur_agent_troop", "trp_hired_assassin"),
  45457. (agent_set_team, ":cur_agent", 1),
  45458. (assign, "$g_main_attacker_agent", ":cur_agent"),
  45459. (agent_ai_set_aggressiveness, ":cur_agent", 199),
  45460. (try_end),
  45461. ]),
  45462.  
  45463. ("deactivate_tavern_attackers",
  45464. [
  45465. (finish_party_battle_mode),
  45466. (try_for_agents, ":cur_agent"),
  45467. (agent_get_troop_id, ":cur_agent_troop", ":cur_agent"),
  45468. (this_or_next|eq, ":cur_agent_troop", "trp_fugitive"),
  45469. (this_or_next|eq, ":cur_agent_troop", "trp_belligerent_drunk"),
  45470. (eq, ":cur_agent_troop", "trp_hired_assassin"),
  45471. (agent_set_team, ":cur_agent", 0),
  45472. (agent_ai_set_aggressiveness, ":cur_agent", 0),
  45473. (try_end),
  45474. ]),
  45475.  
  45476. ("activate_town_guard",
  45477. [
  45478. (set_party_battle_mode),
  45479. #(get_player_agent_no, ":player_agent"),
  45480. #(agent_get_team, ":player_team", ":player_agent"),
  45481.  
  45482. (try_for_agents, ":cur_agent"),
  45483. (agent_get_troop_id, ":troop_type", ":cur_agent"),
  45484. (is_between, ":troop_type", "trp_swadian_recruit", "trp_looter"),
  45485. (agent_set_team, ":cur_agent", 1),
  45486. #(team_give_order, 1, grc_everyone, mordr_charge), - for some reason, this freezes everyone if the player is not yet spawned
  45487. #(try_begin),
  45488. # (eq, "$g_main_attacker_agent", 0),
  45489. # (assign, "$g_main_attacker_agent", ":cur_agent"),
  45490. #(try_end),
  45491. (else_try),
  45492. (this_or_next|is_between, ":cur_agent", walkers_begin, walkers_end),
  45493. (is_between, ":cur_agent", armor_merchants_begin, mayors_end),
  45494.  
  45495. (agent_clear_scripted_mode, ":cur_agent"),
  45496. (agent_set_team, ":cur_agent", 2),
  45497. (try_end),
  45498. ]),
  45499.  
  45500.  
  45501. #this determines whether or not a lord is thrown into a dungeon by his captor, or is kept out on parole
  45502. #Not currently used (ie, it always fails)
  45503. ("cf_prisoner_offered_parole",
  45504. [
  45505. (store_script_param, ":prisoner", 1),
  45506.  
  45507. (eq, 1, 0), #disabled, this will always return false
  45508.  
  45509. (troop_get_slot, ":captor_party", ":prisoner", slot_troop_prisoner_of_party),
  45510. (party_is_active, ":captor_party"),
  45511. (is_between, ":captor_party", walled_centers_begin, walled_centers_end),
  45512. (party_get_slot, ":captor", ":captor_party", slot_town_lord),
  45513.  
  45514. (troop_get_slot, ":prisoner_rep", ":prisoner", slot_lord_reputation_type),
  45515. (troop_get_slot, ":captor_rep", ":captor", slot_lord_reputation_type),
  45516.  
  45517. (neq, ":prisoner_rep", lrep_debauched),
  45518. (neq, ":captor_rep", lrep_debauched),
  45519. (neq, ":captor_rep", lrep_quarrelsome),
  45520.  
  45521. #Prisoner is a noble, or lord is goodnatured
  45522. (this_or_next|eq, ":captor_rep", lrep_goodnatured),
  45523. (this_or_next|troop_slot_eq, ":prisoner", slot_troop_occupation, slto_kingdom_hero),
  45524. (troop_slot_eq, ":prisoner", slot_troop_occupation, slto_kingdom_lady),
  45525.  
  45526. (call_script, "script_troop_get_relation_with_troop", ":captor", ":prisoner"),
  45527. ## (display_message, "str_relation_of_prisoner_with_captor_is_reg0"),
  45528. (ge, reg0, -10),
  45529. ]),
  45530.  
  45531. ("neutral_behavior_in_fight",
  45532. [
  45533. (get_player_agent_no, ":player_agent"),
  45534. (agent_get_position, pos3, ":player_agent"),
  45535. (agent_get_team, ":player_team", ":player_agent"),
  45536.  
  45537. (try_begin),
  45538. (gt, "$g_main_attacker_agent", 0),
  45539. (agent_get_team, ":attacker_team_no", "$g_main_attacker_agent"),
  45540. (agent_get_position, pos5, "$g_main_attacker_agent"),
  45541. (else_try),
  45542. (eq, ":attacker_team_no", -1),
  45543. (agent_get_position, pos5, ":player_agent"),
  45544. (try_end),
  45545.  
  45546. (set_fixed_point_multiplier, 100),
  45547.  
  45548. (try_for_agents, ":agent"),
  45549. (agent_get_team, ":other_team", ":agent"),
  45550. (neq, ":other_team", ":attacker_team_no"),
  45551. (neq, ":other_team", ":player_team"),
  45552.  
  45553. (agent_get_troop_id, ":troop_id", ":agent"),
  45554. (neg|is_between, ":troop_id", "trp_swadian_recruit", "trp_looter"),
  45555.  
  45556. (agent_get_position, pos4, ":agent"),
  45557.  
  45558. (assign, ":best_position_score", 0),
  45559. (assign, ":best_position", -1),
  45560.  
  45561. (try_begin),
  45562. (neg|agent_slot_eq, ":agent", slot_agent_is_running_away, 0), #if agent is running away
  45563. (agent_get_slot, ":target_entry_point_plus_one", ":agent", slot_agent_is_running_away),
  45564. (store_sub, ":target_entry_point", ":target_entry_point_plus_one", 1),
  45565. (entry_point_get_position, pos6, ":target_entry_point"),
  45566. (get_distance_between_positions, ":agent_distance_to_target", pos6, pos4),
  45567. (lt, ":agent_distance_to_target", 100),
  45568. (agent_set_slot, ":agent", slot_agent_is_running_away, 0),
  45569. (try_end),
  45570.  
  45571. (agent_slot_eq, ":agent", slot_agent_is_running_away, 0), #if agent is not already running away
  45572.  
  45573. (try_begin), #stand in place
  45574. (get_distance_between_positions, ":distance", pos4, pos5),
  45575. (get_distance_between_positions, ":distance_to_player", pos4, pos3),
  45576.  
  45577. (val_min, ":distance", ":distance_to_player"),
  45578.  
  45579. (this_or_next|gt, ":distance", 700), #7 meters away from main belligerents
  45580. (main_hero_fallen),
  45581.  
  45582. (agent_set_scripted_destination, ":agent", pos4),
  45583. (else_try), #get out of the way
  45584. (try_for_range, ":target_entry_point", 0, 64),
  45585. (neg|entry_point_is_auto_generated, ":target_entry_point"),
  45586. (entry_point_get_position, pos6, ":target_entry_point"),
  45587. (get_distance_between_positions, ":agent_distance_to_target", pos6, pos4),
  45588. (get_distance_between_positions, ":player_distance_to_target", pos6, pos3),
  45589. (store_sub, ":position_score", ":player_distance_to_target", ":agent_distance_to_target"),
  45590. (ge, ":position_score", 0),
  45591. (try_begin),
  45592. (ge, ":agent_distance_to_target", 2000),
  45593. (store_sub, ":extra_distance", ":agent_distance_to_target", 2000),
  45594. (val_min, ":extra_distance", 1000),
  45595. (val_min, ":agent_distance_to_target", 2000), #if more than 10 meters assume it is 10 meters far while calculating best run away target
  45596. (val_sub, ":agent_distance_to_target", ":extra_distance"),
  45597. (try_end),
  45598. (val_mul, ":position_score", ":agent_distance_to_target"),
  45599. (try_begin),
  45600. (ge, ":position_score", ":best_position_score"),
  45601. (assign, ":best_position_score", ":position_score"),
  45602. (assign, ":best_position", ":target_entry_point"),
  45603. (try_end),
  45604. (try_end),
  45605.  
  45606. (try_begin),
  45607. (ge, ":best_position", 0),
  45608. (entry_point_get_position, pos6, ":best_position"),
  45609. (agent_set_speed_limit, ":agent", 10),
  45610. (agent_set_scripted_destination, ":agent", pos6),
  45611. (store_add, ":best_position_plus_one", ":best_position", 1),
  45612. (agent_set_slot, ":agent", slot_agent_is_running_away, ":best_position_plus_one"),
  45613. (try_end),
  45614. (try_end),
  45615. (try_end),
  45616. ]),
  45617.  
  45618. ("party_inflict_attrition", #parameters from dialog
  45619. [
  45620. (store_script_param, ":party", 1),
  45621. (store_script_param, ":attrition_rate", 2),
  45622. # (store_script_param, ":attrition_type", 3), #1 = desertion, 2 = sickness
  45623.  
  45624. (party_clear, "p_temp_casualties"),
  45625.  
  45626. (party_get_num_companion_stacks, ":num_stacks", ":party"),
  45627.  
  45628. #add to temp casualties
  45629. (try_for_range, ":stack", 0, ":num_stacks"),
  45630. (party_stack_get_troop_id, ":troop_type", ":party", ":stack"),
  45631. (neg|troop_is_hero, ":troop_type"),
  45632. (party_stack_get_size, ":size", ":party", ":stack"),
  45633. (store_mul, ":casualties_x_100", ":attrition_rate", ":size"),
  45634. (store_div, ":casualties", ":casualties_x_100", 100),
  45635. (party_add_members, "p_temp_casualties", ":troop_type", ":casualties"),
  45636.  
  45637. (store_mul, ":subtractor", ":casualties", 100),
  45638. (store_sub, ":chance_of_additional_casualty", ":casualties_x_100", ":subtractor"),
  45639.  
  45640. (try_begin),
  45641. (gt, ":chance_of_additional_casualty", 0),
  45642. (store_random_in_range, ":random", 0, 100),
  45643. (lt, ":random", ":chance_of_additional_casualty"),
  45644. (party_add_members, "p_temp_casualties", ":troop_type", ":casualties"),
  45645. (try_end),
  45646.  
  45647. # (try_begin),
  45648. # (eq, "$cheat_mode", 1),
  45649. # (str_store_party_name, s7, ":party"),
  45650. # ...
  45651. # (try_end),
  45652. (try_end),
  45653.  
  45654. #take temp casualties from main party
  45655. (party_get_num_companion_stacks, ":num_stacks", "p_temp_casualties"),
  45656.  
  45657. #add to temp casualties
  45658. (try_for_range, ":stack", 0, ":num_stacks"),
  45659. (party_stack_get_troop_id, ":troop_type", "p_temp_casualties", ":stack"),
  45660. (party_stack_get_size, ":size", "p_temp_casualties", ":stack"),
  45661. (party_remove_members, ":party", ":troop_type", ":size"),
  45662.  
  45663. (eq, "$cheat_mode", 1),
  45664. (assign, reg3, ":size"),
  45665. (str_store_troop_name, s4, ":troop_type"),
  45666. (str_store_party_name, s5, ":party"),
  45667. # (display_message, "str_s5_suffers_attrition_reg3_x_s4"),
  45668. (str_store_string, s65, "str_s5_suffers_attrition_reg3_x_s4"),
  45669. (display_message, "str_s65"),
  45670. (try_begin),
  45671. (eq, "$debug_message_in_queue", 0),
  45672. (call_script, "script_add_notification_menu", "mnu_debug_alert_from_s65", 0, 0),
  45673. (assign, "$debug_message_in_queue", 1),
  45674. (try_end),
  45675. (try_end),
  45676.  
  45677. ]),
  45678.  
  45679.  
  45680.  
  45681.  
  45682. ("add_rumor_string_to_troop_notes", #parameters from dialog
  45683. [
  45684. (store_script_param, ":object_1", 1),
  45685. (store_script_param, ":object_2", 2),
  45686. (store_script_param, ":string", 3),
  45687.  
  45688. (str_store_troop_name, s10, "$g_talk_troop"),
  45689. (str_store_string_reg, s11, ":string"),
  45690.  
  45691. (store_current_hours, ":hours"),
  45692. (call_script, "script_game_get_date_text", 0, ":hours"),
  45693.  
  45694. (str_store_string, s5, "str_s10_said_on_s1_s11__"),
  45695.  
  45696. (try_begin),
  45697. (is_between, ":object_1", active_npcs_begin, kingdom_ladies_end),
  45698. (troop_get_slot, ":current_rumor_note", ":object_1", slot_troop_current_rumor),
  45699. (val_add, ":current_rumor_note", 1),
  45700. (try_begin),
  45701. (neg|is_between, ":current_rumor_note", 3, 16),
  45702. (assign, ":current_rumor_note", 3),
  45703. (try_end),
  45704. (troop_set_slot, ":object_1", slot_troop_current_rumor, ":current_rumor_note"),
  45705.  
  45706. (add_troop_note_from_sreg, ":object_1", ":current_rumor_note", s5, 0), #troop, note slot, string, show
  45707.  
  45708. (try_begin),
  45709. (eq, "$cheat_mode", 1),
  45710. (str_store_troop_name, s3, ":object_1"),
  45711. (assign, reg4, ":current_rumor_note"),
  45712. (display_message, "str_rumor_note_to_s3s_slot_reg4_s5"),
  45713. (try_end),
  45714. (try_end),
  45715.  
  45716. (try_begin),
  45717. (is_between, ":object_2", active_npcs_begin, kingdom_ladies_end),
  45718. (troop_get_slot, ":current_rumor_note", ":object_2", slot_troop_current_rumor),
  45719. (val_add, ":current_rumor_note", 1),
  45720. (try_begin),
  45721. (neg|is_between, ":current_rumor_note", 3, 16),
  45722. (assign, ":current_rumor_note", 3),
  45723. (try_end),
  45724. (troop_set_slot, ":object_2", slot_troop_current_rumor, ":current_rumor_note"),
  45725.  
  45726. (add_troop_note_from_sreg, ":object_2", ":current_rumor_note", s5, 0), #troop, note slot, string, show
  45727.  
  45728. (try_begin),
  45729. (eq, "$cheat_mode", 1),
  45730. (str_store_troop_name, s3, ":object_2"),
  45731. (assign, reg4, ":current_rumor_note"),
  45732. (display_message, "str_rumor_note_to_s3s_slot_reg4_s5"),
  45733. (try_end),
  45734. (try_end),
  45735. ]),
  45736.  
  45737. ("character_can_wed_character", #empty now, but might want to add mid-game
  45738. [
  45739. ]),
  45740.  
  45741. ("troop_change_career", #empty now, but might want to add mid-game
  45742. [
  45743. ]),
  45744.  
  45745. ("center_get_goods_availability",
  45746. [
  45747. (store_script_param, ":center_no", 1),
  45748.  
  45749. (str_store_party_name, s4, ":center_no"),
  45750.  
  45751. (assign, ":hardship_index", 0),
  45752. (try_for_range, ":cur_good", trade_goods_begin, trade_goods_end),
  45753. #Must have consumption of at least 4 to be relevant
  45754. #This prevents perishables and raw materials from having a major impact
  45755. (try_begin),
  45756. (is_between, ":center_no", villages_begin, villages_end),
  45757. (item_get_slot, ":consumer_consumption", ":cur_good", slot_item_rural_demand),
  45758. (else_try),
  45759. (item_get_slot, ":consumer_consumption", ":cur_good", slot_item_urban_demand),
  45760. (try_end),
  45761. (gt, ":consumer_consumption", 2),
  45762.  
  45763. (store_div, ":max_impact", ":consumer_consumption", 4), #was 4, dropped 3 again 4 now
  45764.  
  45765. #High-demand items like grain tend to have much more dramatic price differentiation, so they yield substantially higher results than low-demand items
  45766.  
  45767. (store_sub, ":cur_good_price_slot", ":cur_good", trade_goods_begin),
  45768. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  45769. (party_get_slot, ":price", ":center_no", ":cur_good_price_slot"),
  45770.  
  45771. (store_sub, ":price_differential", ":price", 1000),
  45772. (gt, ":price_differential", 200), #was 100
  45773.  
  45774. (val_div, ":price_differential", 200),
  45775. (val_min, ":price_differential", ":max_impact"),
  45776.  
  45777. (val_add, ":hardship_index", ":price_differential"),
  45778. (try_end),
  45779.  
  45780. (assign, reg0, ":hardship_index"),
  45781.  
  45782. (try_begin),
  45783. (eq, "$cheat_mode", 1),
  45784. (display_message, "@{!}DEBUG -- hardship index for {s4} = {reg0}"),
  45785. (try_end),
  45786. ]),
  45787.  
  45788. ("lord_find_alternative_faction", #Also, make it so that lords will try to keep at least one center unassigned
  45789. [
  45790. (store_script_param, ":troop_no", 1),
  45791. (store_faction_of_troop, ":orig_faction", ":troop_no"),
  45792.  
  45793. (assign, ":new_faction", -1),
  45794. (assign, ":score_to_beat", -5),
  45795.  
  45796. (try_begin),
  45797. (store_random_in_range, ":advantegous_faction_change_time", 0, 10000),
  45798.  
  45799. (this_or_next|le, "$g_advantegous_faction", 0),
  45800. (eq, ":advantegous_faction_change_time", 0),
  45801. (store_random_in_range, "$g_advantegous_faction", kingdoms_begin, kingdoms_end),
  45802. (try_end),
  45803.  
  45804. (try_for_range, ":faction_no", kingdoms_begin, kingdoms_end),
  45805. (this_or_next|eq, "$g_give_advantage_to_original_faction", 1),
  45806. (neq, ":faction_no", ":orig_faction"),
  45807.  
  45808. (faction_slot_eq, ":faction_no", slot_faction_state, sfs_active),
  45809. (assign, ":number_of_walled_centers", 0),
  45810. (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
  45811. (store_faction_of_party, ":center_faction", ":center_no"),
  45812. (eq, ":center_faction", ":faction_no"),
  45813.  
  45814. (try_begin),
  45815. (party_slot_eq, ":center_no", slot_party_type, spt_town),
  45816. (val_add, ":number_of_walled_centers", 2),
  45817. (else_try),
  45818. (val_add, ":number_of_walled_centers", 1),
  45819. (try_end),
  45820. (try_end),
  45821.  
  45822. (assign, ":number_of_lords", 0),
  45823. (try_for_range, ":troop_id", original_kingdom_heroes_begin, active_npcs_end),
  45824. (store_troop_faction, ":faction_of_troop", ":troop_id"),
  45825. (eq, ":faction_of_troop", ":faction_no"),
  45826. (val_add, ":number_of_lords", 1),
  45827. (try_end),
  45828. (val_max, ":number_of_lords", 1),
  45829.  
  45830. (faction_get_slot, ":liege", ":faction_no", slot_faction_leader),
  45831. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":liege"),
  45832. (assign, ":relation_with_leader", reg0),
  45833.  
  45834. (store_mul, ":faction_score", ":number_of_walled_centers", 100),
  45835. (val_div, ":faction_score", ":number_of_lords"),
  45836. (val_add, ":faction_score", ":relation_with_leader"),
  45837.  
  45838. (try_begin),
  45839. (eq, ":faction_no", ":orig_faction"),
  45840. (eq, "$g_give_advantage_to_original_faction", 1),
  45841. (val_add, ":faction_score", 100),
  45842. (try_end),
  45843.  
  45844. (try_begin),
  45845. (eq, "$g_advantegous_faction", ":faction_no"),
  45846. (val_add, ":faction_score", 50),
  45847. (try_end),
  45848.  
  45849. (try_begin),
  45850. (eq, ":faction_no", "$players_kingdom"),
  45851. (val_sub, ":faction_score", 100),
  45852. (val_add, "$player_right_to_rule"),
  45853. (try_end),
  45854.  
  45855. (gt, ":faction_score", ":score_to_beat"),
  45856.  
  45857. (assign, ":score_to_beat", ":faction_score"),
  45858. (assign, ":new_faction", ":faction_no"),
  45859. (try_end),
  45860.  
  45861. (assign, reg0, ":new_faction"),
  45862. ]),
  45863.  
  45864. ("set_up_duel_with_troop", #now the setup is handled through the menu
  45865. [
  45866. (store_script_param, "$g_duel_troop", 1),
  45867. (assign, "$g_start_arena_fight_at_nearest_town", 1),
  45868. (try_begin),
  45869. (eq, "$g_start_arena_fight_at_nearest_town", 1),
  45870. (try_end),
  45871. (unlock_achievement, ACHIEVEMENT_PUGNACIOUS_D),
  45872. (jump_to_menu, "mnu_arena_duel_fight"),
  45873. (finish_mission),
  45874.  
  45875. ]),
  45876.  
  45877. ("test_player_for_career_and_marriage_incompatability", #empty now, but might want to add mid-game
  45878. [
  45879. #Married to a lord of one faction, while fighting for another
  45880. #Married to one lord while holding a stipend from the king
  45881. ]),
  45882.  
  45883. ("deduct_casualties_from_garrison", #after a battle in a center, deducts any casualties from "$g_encountered_party"
  45884. [
  45885. ##(display_message, "str_totalling_casualties_caused_during_mission"),
  45886.  
  45887. (try_for_agents, ":agent"),
  45888. (agent_get_troop_id, ":troop_type", ":agent"),
  45889. (is_between, ":troop_type", regular_troops_begin, regular_troops_end),
  45890.  
  45891. (neg|agent_is_alive, ":agent"),
  45892.  
  45893. (try_begin), #if troop not present, search for another type which is
  45894. (store_troop_count_companions, ":number", ":troop_type", "$g_encountered_party"),
  45895. (eq, ":number", 0),
  45896. (assign, ":troop_type", 0),
  45897. (try_for_range, ":new_tier", slot_faction_tier_1_troop, slot_faction_tier_5_troop),
  45898. (faction_get_slot, ":troop_type", "$g_encountered_party_faction", ":new_tier"),
  45899. (faction_get_slot, ":new_troop_type", "$g_encountered_party_faction", ":new_tier"),
  45900. (store_troop_count_companions, ":number", ":new_troop_type", "$g_encountered_party"),
  45901. (gt, ":number", 0),
  45902. (assign, ":troop_type", ":new_troop_type"),
  45903. (try_end),
  45904. (try_end),
  45905.  
  45906. (gt, ":troop_type", 0),
  45907.  
  45908. (party_remove_members, "$g_encountered_party", ":troop_type", 1),
  45909. (str_store_troop_name, s4, ":troop_type"),
  45910. (str_store_party_name, s5, "$g_encountered_party"),
  45911. (try_end),
  45912. ]),
  45913.  
  45914. ("npc_decision_checklist_take_stand_on_issue",
  45915. #Called from dialogs, and from simple_triggers
  45916.  
  45917. #This a very inefficient checklist, and if I did it again, I would score for each troop. That way the troop could answer "why not" to an individual lord
  45918. [
  45919. (store_script_param, ":troop_no", 1),
  45920. (store_faction_of_troop, ":troop_faction", ":troop_no"),
  45921.  
  45922. (assign, ":result", -1),
  45923. (faction_get_slot, ":faction_issue", ":troop_faction", slot_faction_political_issue),
  45924.  
  45925. (assign, ":player_declines_honor", 0),
  45926. (try_begin),
  45927. (is_between, ":faction_issue", centers_begin, centers_end),
  45928. (gt, "$g_dont_give_fief_to_player_days", 1),
  45929. (assign, ":player_declines_honor", 1),
  45930. (else_try),
  45931. (gt, "$g_dont_give_marshalship_to_player_days", 1),
  45932. (assign, ":player_declines_honor", 1),
  45933. (try_end),
  45934.  
  45935.  
  45936. (assign, ":total_faction_renown", 0),
  45937. (troop_set_slot, "trp_player", slot_troop_temp_slot, 0),
  45938. (try_begin),
  45939. (eq, "$players_kingdom", ":troop_faction"),
  45940. (eq, "$player_has_homage", 1),
  45941. (troop_get_slot, ":total_faction_renown", "trp_player", slot_troop_renown),
  45942. (try_end),
  45943.  
  45944. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  45945. (troop_set_slot, ":active_npc", slot_troop_temp_slot, 0), #reset to zero
  45946.  
  45947. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  45948. (eq, ":active_npc_faction", ":troop_faction"),
  45949. (troop_slot_eq, ":active_npc", slot_troop_occupation, slto_kingdom_hero),
  45950.  
  45951. (troop_get_slot, ":renown", ":active_npc", slot_troop_renown),
  45952. (val_add, ":total_faction_renown", ":renown"),
  45953. (try_end),
  45954.  
  45955.  
  45956. (assign, ":total_faction_center_value", 0),
  45957. (try_for_range, ":center", centers_begin, centers_end),
  45958. (store_faction_of_party, ":center_faction", ":center"),
  45959. (eq, ":center_faction", ":troop_faction"),
  45960.  
  45961. (assign, ":center_value", 1),
  45962. (try_begin),
  45963. (is_between, ":center", towns_begin, towns_end),
  45964. (assign, ":center_value", 2),
  45965. (try_end),
  45966.  
  45967. (val_add, ":total_faction_center_value", ":center_value"),
  45968.  
  45969. (party_get_slot, ":town_lord", ":center", slot_town_lord),
  45970. (gt, ":town_lord", -1),
  45971.  
  45972. (troop_get_slot, ":temp_slot", ":town_lord", slot_troop_temp_slot),
  45973. (val_add, ":temp_slot", ":center_value"),
  45974. (troop_set_slot, ":town_lord", slot_troop_temp_slot, ":temp_slot"),
  45975. (try_end),
  45976. (val_max, ":total_faction_center_value", 1),
  45977.  
  45978. (store_div, ":average_renown_per_center_point", ":total_faction_renown", ":total_faction_center_value"),
  45979.  
  45980.  
  45981. (try_begin),
  45982. (is_between, ":faction_issue", centers_begin, centers_end),
  45983. #NOTE -- The algorithms here might seem a bit repetitive, but are designed that way to create internal cliques among the lords in a faction.
  45984.  
  45985.  
  45986.  
  45987. (try_begin),#If the center is a village, and a lord has no fief, choose him
  45988. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  45989. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_selfrighteous),
  45990. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_quarrelsome),
  45991.  
  45992. (is_between, ":faction_issue", villages_begin, villages_end),
  45993. (assign, ":favorite_lord_without_center", -1),
  45994. (assign, ":score_to_beat", -1),
  45995.  
  45996.  
  45997. (try_begin),
  45998. (eq, "$players_kingdom", ":troop_faction"),
  45999. (eq, "$player_has_homage", 1),
  46000. (eq, ":player_declines_honor", 0),
  46001.  
  46002. (troop_slot_eq, "trp_player", slot_troop_temp_slot, 0),
  46003. (call_script, "script_troop_get_relation_with_troop", "trp_player", ":troop_no"),
  46004. (assign, ":relation", reg0),
  46005.  
  46006. (gt, ":relation", ":score_to_beat"),
  46007. (neg|troop_slot_ge, "trp_player", slot_troop_controversy, 75),
  46008. (assign, ":favorite_lord_without_center", "trp_player"),
  46009. (assign, ":score_to_beat", ":relation"),
  46010. (try_end),
  46011. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  46012. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  46013. (eq, ":active_npc_faction", ":troop_faction"),
  46014. (troop_slot_eq, ":active_npc", slot_troop_occupation, slto_kingdom_hero),
  46015.  
  46016. (troop_slot_eq, ":active_npc", slot_troop_temp_slot, 0),
  46017. (try_begin),
  46018. (eq, ":active_npc", ":troop_no"),
  46019. (assign, ":relation", 50),
  46020. (else_try),
  46021. (call_script, "script_troop_get_relation_with_troop", ":active_npc", ":troop_no"),
  46022. (assign, ":relation", reg0),
  46023. (try_end),
  46024. (neg|troop_slot_ge, ":active_npc", slot_troop_controversy, 75),
  46025.  
  46026. (gt, ":relation", ":score_to_beat"),
  46027. (assign, ":favorite_lord_without_center", ":active_npc"),
  46028. (assign, ":score_to_beat", ":relation"),
  46029. (try_end),
  46030.  
  46031. (gt, ":favorite_lord_without_center", -1),
  46032. (assign, ":result", ":favorite_lord_without_center"),
  46033. (assign, ":result_explainer", "str_political_explanation_lord_lacks_center"),
  46034.  
  46035. (else_try), #taken by troop
  46036. (is_between, ":faction_issue", walled_centers_begin, walled_centers_end),
  46037. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  46038. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_selfrighteous),
  46039. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_cunning),
  46040.  
  46041. (party_get_slot, ":last_taken_by_troop", ":faction_issue", slot_center_last_taken_by_troop),
  46042. (try_begin),
  46043. (try_begin),
  46044. (neq, ":troop_faction", "$players_kingdom"),
  46045. (assign, ":last_taken_by_troop", -1),
  46046. (else_try),
  46047. (eq, "$player_has_homage", 0),
  46048. (assign, ":last_taken_by_troop", -1),
  46049. (else_try),
  46050. (eq, ":faction_issue", "$g_castle_requested_by_player"),
  46051. (assign, ":last_taken_by_troop", "trp_player"),
  46052. (else_try),
  46053. (eq, ":faction_issue", "$g_castle_requested_for_troop"),
  46054. (assign, ":last_taken_by_troop", "trp_player"),
  46055. (else_try), #ie, the fellow who took it is no longer in the faction
  46056. (gt, ":last_taken_by_troop", -1),
  46057. (store_faction_of_troop, ":last_take_by_troop_faction", ":last_taken_by_troop"),
  46058. (neq, ":last_take_by_troop_faction", ":troop_faction"),
  46059. (assign, ":last_taken_by_troop", -1),
  46060. (try_end),
  46061. (try_end),
  46062. (gt, ":last_taken_by_troop", -1),
  46063.  
  46064. (try_begin),
  46065. (eq, "$cheat_mode", 1),
  46066. (gt, ":last_taken_by_troop", -1),
  46067. (str_store_troop_name, s3, ":last_taken_by_troop"),
  46068. (display_message, "@{!}Castle taken by {s3}"),
  46069. (try_end),
  46070.  
  46071.  
  46072. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":last_taken_by_troop"),
  46073. (ge, reg0, 0),
  46074.  
  46075. (neg|troop_slot_ge, ":last_taken_by_troop", slot_troop_controversy, 25),
  46076.  
  46077. (troop_get_slot, ":renown", ":last_taken_by_troop", slot_troop_renown),
  46078. (troop_get_slot, ":center_points", ":last_taken_by_troop", slot_troop_temp_slot),
  46079. (val_max, ":center_points", 1),
  46080. (store_div, ":renown_divided_by_center_points", ":renown", ":center_points"),
  46081. (val_mul, ":renown_divided_by_center_points", 6), #was five
  46082. (val_div, ":renown_divided_by_center_points", 4),
  46083.  
  46084. (ge, ":renown_divided_by_center_points", ":average_renown_per_center_point"),
  46085.  
  46086.  
  46087. (assign, ":result", ":last_taken_by_troop"),
  46088. (assign, ":result_explainer", "str_political_explanation_lord_took_center"),
  46089.  
  46090.  
  46091. #Check self, immediate family
  46092. #This is done instead of a single weighted score to create cliques -- groups of NPCs who support one another
  46093. (else_try),
  46094. (assign, ":most_deserving_close_friend", -1),
  46095. (assign, ":score_to_beat", ":average_renown_per_center_point"),
  46096. (val_div, ":score_to_beat", 3),
  46097. (val_mul, ":score_to_beat", 2),
  46098.  
  46099. (try_begin),
  46100. (eq, "$cheat_mode", 1),
  46101. (assign, reg3, ":score_to_beat"),
  46102. (display_message, "@{!}Two-thirds average_renown = {reg3}"),
  46103. (try_end),
  46104.  
  46105. (try_begin),
  46106. (eq, "$players_kingdom", ":troop_faction"),
  46107. (eq, "$player_has_homage", 1),
  46108. (eq, ":player_declines_honor", 0),
  46109.  
  46110. (call_script, "script_troop_get_relation_with_troop", "trp_player", ":troop_no"),
  46111. (assign, ":relation", reg0),
  46112. (ge, ":relation", 20),
  46113. (neg|troop_slot_ge, "trp_player", slot_troop_controversy, 50),
  46114.  
  46115. (troop_get_slot, ":renown", "trp_player", slot_troop_renown),
  46116. (troop_get_slot, ":center_points", "trp_player", slot_troop_temp_slot),
  46117. (val_max, ":center_points", 1),
  46118. (store_div, ":renown_divided_by_center_points", ":renown", ":center_points"),
  46119.  
  46120.  
  46121. (assign, ":most_deserving_close_friend", "trp_player"),
  46122. (assign, ":score_to_beat", ":renown_divided_by_center_points"),
  46123. (try_end),
  46124. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  46125. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  46126. (eq, ":active_npc_faction", ":troop_faction"),
  46127. (troop_slot_eq, ":active_npc", slot_troop_occupation, slto_kingdom_hero),
  46128.  
  46129. (call_script, "script_troop_get_relation_with_troop", ":active_npc", ":troop_no"),
  46130. (assign, ":relation", reg0),
  46131.  
  46132. (this_or_next|eq, ":active_npc", ":troop_no"),
  46133. (ge, ":relation", 20),
  46134. (neg|troop_slot_ge, ":active_npc", slot_troop_controversy, 50),
  46135.  
  46136. (troop_get_slot, ":renown", ":active_npc", slot_troop_renown),
  46137. (troop_get_slot, ":center_points", ":active_npc", slot_troop_temp_slot),
  46138. (val_max, ":center_points", 1),
  46139. (store_div, ":renown_divided_by_center_points", ":renown", ":center_points"),
  46140.  
  46141.  
  46142. (try_begin),
  46143. (eq, "$cheat_mode", 1),
  46144. (str_store_troop_name, s10, ":active_npc"),
  46145. (assign, reg3, ":renown_divided_by_center_points"),
  46146. (display_message, "@{!}DEBUG -- Colleague test: score for {s10} = {reg3}"),
  46147. (try_end),
  46148.  
  46149.  
  46150. (gt, ":renown_divided_by_center_points", ":score_to_beat"),
  46151.  
  46152. (assign, ":most_deserving_close_friend", ":active_npc"),
  46153. (assign, ":score_to_beat", ":renown_divided_by_center_points"),
  46154. (try_end),
  46155.  
  46156. (gt, ":most_deserving_close_friend", -1),
  46157.  
  46158.  
  46159. (assign, ":result", ":most_deserving_close_friend"),
  46160. (assign, ":result_explainer", "str_political_explanation_most_deserving_friend"),
  46161.  
  46162.  
  46163.  
  46164. (else_try),
  46165. #Most deserving in entire faction, minus those with no relation
  46166. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  46167. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_selfrighteous),
  46168. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_quarrelsome),
  46169.  
  46170. (assign, ":most_deserving_in_faction", -1),
  46171. (assign, ":score_to_beat", 0),
  46172.  
  46173. (try_begin),
  46174. (eq, "$players_kingdom", ":troop_faction"),
  46175. (eq, "$player_has_homage", 1),
  46176. (eq, ":player_declines_honor", 0),
  46177.  
  46178. (call_script, "script_troop_get_relation_with_troop", "trp_player", ":troop_no"),
  46179. (assign, ":relation", reg0),
  46180. (ge, ":relation", 0),
  46181. (troop_get_slot, ":renown", "trp_player", slot_troop_renown),
  46182. (troop_get_slot, ":center_points", "trp_player", slot_troop_temp_slot),
  46183. (neg|troop_slot_ge, "trp_player", slot_troop_controversy, 25),
  46184.  
  46185. (val_max, ":center_points", 1),
  46186. (store_div, ":renown_divided_by_center_points", ":renown", ":center_points"),
  46187.  
  46188. (assign, ":most_deserving_in_faction", "trp_player"),
  46189. (assign, ":score_to_beat", ":renown_divided_by_center_points"),
  46190. (try_end),
  46191. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  46192. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  46193. (eq, ":active_npc_faction", ":troop_faction"),
  46194. (troop_slot_eq, ":active_npc", slot_troop_occupation, slto_kingdom_hero),
  46195.  
  46196. (call_script, "script_troop_get_relation_with_troop", ":active_npc", ":troop_no"),
  46197. (assign, ":relation", reg0),
  46198. (this_or_next|eq, ":active_npc", ":troop_no"),
  46199. (ge, ":relation", 0),
  46200. (neg|troop_slot_ge, ":active_npc", slot_troop_controversy, 25),
  46201.  
  46202. (troop_get_slot, ":renown", ":active_npc", slot_troop_renown),
  46203. (troop_get_slot, ":center_points", ":active_npc", slot_troop_temp_slot),
  46204. (val_max, ":center_points", 1),
  46205.  
  46206. (store_div, ":renown_divided_by_center_points", ":renown", ":center_points"),
  46207. (gt, ":renown_divided_by_center_points", ":score_to_beat"),
  46208.  
  46209. (try_begin),
  46210. (eq, "$cheat_mode", 1),
  46211. (str_store_string, s10, ":active_npc"),
  46212. (assign, reg3, ":renown_divided_by_center_points"),
  46213. (display_message, "@{!}DEBUG -- Open test: score for {s10} = {reg3}"),
  46214. (try_end),
  46215.  
  46216.  
  46217. (assign, ":most_deserving_in_faction", ":active_npc"),
  46218. (assign, ":score_to_beat", ":renown_divided_by_center_points"),
  46219. (try_end),
  46220.  
  46221.  
  46222. (gt, ":most_deserving_in_faction", -1),
  46223. (assign, ":result", ":most_deserving_in_faction"),
  46224. (assign, ":result_explainer", "str_political_explanation_most_deserving_in_faction"),
  46225.  
  46226. (else_try),
  46227. (assign, ":result", ":troop_no"),
  46228. (assign, ":result_explainer", "str_political_explanation_self"),
  46229. (try_end),
  46230.  
  46231.  
  46232. (else_try),
  46233. (eq, ":faction_issue", 1),
  46234.  
  46235. (assign, ":relationship_threshhold", 15),
  46236. (try_begin),
  46237. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  46238. (assign, ":relationship_threshhold", 5),
  46239. (else_try),
  46240. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  46241. (assign, ":relationship_threshhold", 25),
  46242. (try_end),
  46243.  
  46244. #For marshals, score marshals according to renown divided by controversy - first for friends and family, then for everyone
  46245. (assign, ":marshal_candidate", -1),
  46246. (assign, ":score_to_beat", 0),
  46247. (try_begin),
  46248. (eq, "$players_kingdom", ":troop_faction"),
  46249. (eq, "$player_has_homage", 1),
  46250. (eq, "$g_player_is_captive", 0),
  46251. (eq, ":player_declines_honor", 0),
  46252.  
  46253.  
  46254. (call_script, "script_troop_get_relation_with_troop", "trp_player", ":troop_no"),
  46255. (ge, reg0, ":relationship_threshhold"),
  46256. (assign, ":marshal_candidate", "trp_player"),
  46257. (troop_get_slot, ":renown", "trp_player", slot_troop_renown),
  46258. (troop_get_slot, ":controversy_divisor", "trp_player", slot_troop_controversy),
  46259. (val_add, ":controversy_divisor", 50),
  46260. (store_div, ":score_to_beat", ":renown", ":controversy_divisor"),
  46261. (try_end),
  46262.  
  46263. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end),
  46264. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  46265. (eq, ":active_npc_faction", ":troop_faction"),
  46266. (troop_slot_eq, ":active_npc", slot_troop_occupation, slto_kingdom_hero),
  46267. (troop_slot_eq, ":active_npc", slot_troop_prisoner_of_party, -1),
  46268.  
  46269. (neg|faction_slot_eq, ":troop_faction", slot_faction_leader, ":active_npc"),
  46270.  
  46271. (call_script, "script_troop_get_relation_with_troop", ":active_npc", ":troop_no"),
  46272. (assign, ":relation", reg0),
  46273. (this_or_next|eq, ":active_npc", ":troop_no"),
  46274. (ge, ":relation", ":relationship_threshhold"),
  46275.  
  46276. (troop_get_slot, ":renown", ":active_npc", slot_troop_renown),
  46277. (troop_get_slot, ":controversy_divisor", ":active_npc", slot_troop_controversy),
  46278. (val_add, ":controversy_divisor", 50),
  46279. (store_div, ":score", ":renown", ":controversy_divisor"),
  46280.  
  46281. (gt, ":score", ":score_to_beat"),
  46282.  
  46283. (assign, ":marshal_candidate", ":active_npc"),
  46284. (assign, ":score_to_beat", ":score"),
  46285.  
  46286. (try_end),
  46287.  
  46288. (assign, ":result", ":marshal_candidate"),
  46289. (assign, ":result_explainer", "str_political_explanation_marshal"),
  46290. (try_end),
  46291.  
  46292. (try_begin),
  46293. (eq, "$cheat_mode", 1),
  46294. (gt, ":result", -1),
  46295. (str_store_troop_name, s8, ":troop_no"),
  46296. (str_store_troop_name, s9, ":result"),
  46297. (str_store_string, s10, ":result_explainer"),
  46298. (display_message, "@{!}DEBUG -- {s8} backs {s9}:{s10}"),
  46299. (try_end),
  46300.  
  46301. (assign, reg0, ":result"),
  46302. (assign, reg1, ":result_explainer"),
  46303.  
  46304. ]),
  46305.  
  46306.  
  46307. ("npc_decision_checklist_evaluate_faction_strategy",
  46308. [
  46309. #Decides whether the strategy is good or bad -- to be added
  46310. ]),
  46311.  
  46312.  
  46313. ("process_player_enterprise",
  46314. #reg0: Profit per cycle
  46315. [
  46316. (store_script_param, ":item_type", 1),
  46317. (store_script_param, ":center", 2),
  46318.  
  46319. (item_get_slot, ":price_of_labor", ":item_type", slot_item_overhead_per_run),
  46320.  
  46321. (item_get_slot, ":base_price", ":item_type", slot_item_base_price),
  46322. (store_sub, ":cur_good_price_slot", ":item_type", trade_goods_begin),
  46323. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  46324. (party_get_slot, ":cur_price_modifier", ":center", ":cur_good_price_slot"),
  46325. (store_mul, ":final_price_for_single_produced_good", ":base_price", ":cur_price_modifier"),
  46326. (val_div, ":final_price_for_single_produced_good", 1000),
  46327. (item_get_slot, ":number_of_outputs_produced", ":item_type", slot_item_output_per_run),
  46328. (store_mul, ":final_price_for_total_produced_goods", ":number_of_outputs_produced", ":final_price_for_single_produced_good"),
  46329.  
  46330. (item_get_slot, ":primary_raw_material", ":item_type", slot_item_primary_raw_material),
  46331. (item_get_slot, ":base_price", ":primary_raw_material", slot_item_base_price),
  46332. (store_sub, ":cur_good_price_slot", ":primary_raw_material", trade_goods_begin),
  46333. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  46334. (party_get_slot, ":cur_price_modifier", ":center", ":cur_good_price_slot"),
  46335. (store_mul, ":final_price_for_single_input", ":base_price", ":cur_price_modifier"),
  46336. (val_div, ":final_price_for_single_input", 1000),
  46337. (item_get_slot, ":number_of_inputs_required", ":item_type", slot_item_input_number),
  46338. (try_begin),
  46339. (lt, ":number_of_inputs_required", 0),
  46340. (store_div, ":final_price_for_total_inputs", ":final_price_for_single_input", 2),
  46341. (else_try),
  46342. (store_mul, ":final_price_for_total_inputs", ":final_price_for_single_input", ":number_of_inputs_required"),
  46343. (try_end),
  46344.  
  46345. (try_begin),
  46346. (item_slot_ge, ":item_type", slot_item_secondary_raw_material, 1),
  46347. (item_get_slot, ":secondary_raw_material", ":item_type", slot_item_secondary_raw_material),
  46348. (item_get_slot, ":base_price", ":secondary_raw_material", slot_item_base_price),
  46349. (store_sub, ":cur_good_price_slot", ":secondary_raw_material", trade_goods_begin),
  46350. (val_add, ":cur_good_price_slot", slot_town_trade_good_prices_begin),
  46351. (party_get_slot, ":cur_price_modifier", ":center", ":cur_good_price_slot"),
  46352.  
  46353. (try_begin),
  46354. (lt, ":number_of_inputs_required", 0),
  46355. (store_div, ":final_price_for_secondary_input", ":final_price_for_secondary_input", 2),
  46356. (else_try),
  46357. (store_mul, ":final_price_for_secondary_input", ":final_price_for_secondary_input", ":number_of_inputs_required"),
  46358. (try_end),
  46359.  
  46360. (store_mul, ":final_price_for_secondary_input", ":base_price", ":cur_price_modifier"),
  46361. (val_div, ":final_price_for_secondary_input", 1000),
  46362. (else_try),
  46363. (assign, ":final_price_for_secondary_input", 0),
  46364. (try_end),
  46365.  
  46366. (store_sub, ":profit_per_cycle", ":final_price_for_total_produced_goods", ":final_price_for_total_inputs"),
  46367. (val_sub, ":profit_per_cycle", ":price_of_labor"),
  46368. (val_sub, ":profit_per_cycle", ":final_price_for_secondary_input"),
  46369.  
  46370. (assign, reg0, ":profit_per_cycle"),
  46371. (assign, reg1, ":final_price_for_total_produced_goods"),
  46372. (assign, reg2, ":final_price_for_total_inputs"),
  46373. (assign, reg3, ":price_of_labor"),
  46374. (assign, reg4, ":final_price_for_single_produced_good"),
  46375. (assign, reg5, ":final_price_for_single_input"),
  46376. (assign, reg10, ":final_price_for_secondary_input"),
  46377. ]),
  46378.  
  46379. # script_replace_scene_items_with_spawn_items_before_ms
  46380. # Input: none
  46381. # Output: none
  46382. ("replace_scene_items_with_spawn_items_before_ms",
  46383. [
  46384. (try_for_range, ":item_no", all_items_begin, all_items_end),
  46385. (scene_item_get_num_instances, ":num_instances", ":item_no"),
  46386. (item_set_slot, ":item_no", slot_item_num_positions, 0),
  46387. (assign, ":num_positions", 0),
  46388. (try_for_range, ":cur_instance", 0, ":num_instances"),
  46389. (scene_item_get_instance, ":scene_item", ":item_no", ":cur_instance"),
  46390. (prop_instance_get_position, "$g_position_to_use_for_replacing_scene_items", ":scene_item"),
  46391. (store_add, ":cur_slot", slot_item_positions_begin, ":num_positions"),
  46392. (item_set_slot, ":item_no", ":cur_slot", "$g_position_to_use_for_replacing_scene_items"),
  46393. (val_add, ":num_positions", 1),
  46394. (val_add, "$g_position_to_use_for_replacing_scene_items", 1),
  46395. (item_set_slot, ":item_no", slot_item_num_positions, ":num_positions"),
  46396. (try_end),
  46397. (replace_scene_items_with_scene_props, ":item_no", "spr_empty"),
  46398. (try_end),
  46399. ]),
  46400.  
  46401. # script_replace_scene_items_with_spawn_items_after_ms
  46402. # Input: none
  46403. # Output: none
  46404. ("replace_scene_items_with_spawn_items_after_ms",
  46405. [
  46406. (try_for_range, ":item_no", all_items_begin, all_items_end),
  46407. (item_get_slot, ":num_positions", ":item_no", slot_item_num_positions),
  46408. (try_for_range, ":cur_position", 0, ":num_positions"),
  46409. (store_add, ":cur_slot", slot_item_positions_begin, ":cur_position"),
  46410. (item_get_slot, ":pos_no", ":item_no", ":cur_slot"),
  46411. (set_spawn_position, ":pos_no"),
  46412. (spawn_item, ":item_no", 0),
  46413. (try_end),
  46414. (try_end),
  46415. ]),
  46416.  
  46417. # script_cf_is_melee_weapon_for_tutorial
  46418. # Input: arg1 = item_no
  46419. # Output: none (can fail)
  46420. ("cf_is_melee_weapon_for_tutorial",
  46421. [
  46422. (store_script_param, ":item_no", 1),
  46423. (assign, ":result", 0),
  46424. (try_begin),
  46425. (this_or_next|eq, ":item_no", "itm_quarter_staff"),
  46426. (eq, ":item_no", "itm_practice_sword"),
  46427. (assign, ":result", 1),
  46428. (try_end),
  46429. (eq, ":result", 1),
  46430. ]),
  46431.  
  46432. # script_iterate_pointer_arrow
  46433. # Input: none
  46434. # Output: none
  46435. ("iterate_pointer_arrow",
  46436. [
  46437. (store_mission_timer_a_msec, ":cur_time"),
  46438. (try_begin),
  46439. (assign, ":up_down", ":cur_time"),
  46440. (assign, ":turn_around", ":cur_time"),
  46441. (val_mod, ":up_down", 1080),
  46442. (val_div, ":up_down", 3),
  46443. (scene_prop_get_instance, ":prop_instance", "spr_pointer_arrow", 0),
  46444. (prop_instance_get_position, pos0, ":prop_instance"),
  46445. (position_set_z_to_ground_level, pos0),
  46446. (position_move_z, pos0, "$g_pointer_arrow_height_adder", 1),
  46447. (set_fixed_point_multiplier, 100),
  46448. (val_mul, ":up_down", 100),
  46449. (store_sin, ":up_down_sin", ":up_down"),
  46450. (position_move_z, pos0, ":up_down_sin", 1),
  46451. (position_move_z, pos0, 100, 1),
  46452. (val_mod, ":turn_around", 2880),
  46453. (val_div, ":turn_around", 8),
  46454. (init_position, pos1),
  46455. (position_rotate_z, pos1, ":turn_around"),
  46456. (position_copy_rotation, pos0, pos1),
  46457. (prop_instance_set_position, ":prop_instance", pos0),
  46458. (try_end),
  46459. ]),
  46460.  
  46461. ("find_center_to_attack_alt",
  46462. [
  46463. (store_script_param, ":troop_no", 1),
  46464. (store_script_param, ":attack_by_faction", 2),
  46465. (store_script_param, ":all_vassals_included", 3),
  46466.  
  46467. (assign, ":result", -1),
  46468. (assign, ":score_to_beat", 0),
  46469.  
  46470. (try_for_range, ":center_no", centers_begin, centers_end),
  46471. (call_script, "script_npc_decision_checklist_evaluate_enemy_center_for_attack", ":troop_no", ":center_no", ":attack_by_faction", ":all_vassals_included"),
  46472. (assign, ":score", reg0),
  46473.  
  46474. (gt, ":score", ":score_to_beat"),
  46475.  
  46476. (assign, ":result", ":center_no"),
  46477. (assign, ":score_to_beat", ":score"),
  46478. (try_end),
  46479.  
  46480. (assign, reg0, ":result"),
  46481. (assign, reg1, ":score_to_beat"),
  46482. ]),
  46483.  
  46484. ("npc_decision_checklist_evaluate_enemy_center_for_attack",
  46485. [
  46486. #NOTES -- LAST OFFENSIVE TIME SCORE IS NOT USED
  46487.  
  46488. (store_script_param, ":troop_no", 1),
  46489. (store_script_param, ":potential_target", 2),
  46490. (store_script_param, ":attack_by_faction", 3),
  46491. (store_script_param, ":all_vassals_included", 4),
  46492.  
  46493. (assign, ":result", -1),
  46494. (assign, ":explainer_string", -1),
  46495. #(assign, ":reason_is_obvious", 0),
  46496. (assign, ":power_ratio", 0),
  46497. #(assign, ":hours_since_last_recce", -1),
  46498.  
  46499. #(assign, ":value_of_target", 0),
  46500. #(assign, ":difficulty_of_capture", 0),
  46501. (store_faction_of_troop, ":faction_no", ":troop_no"),
  46502.  
  46503. (try_begin),
  46504. (eq, ":attack_by_faction", 1),
  46505. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  46506. (ge, ":faction_marshal", 0), #STEVE ADDITION TO AVOID MESSAGE SPAM
  46507. (troop_get_slot, ":party_no", ":faction_marshal", slot_troop_leaded_party),
  46508. (else_try),
  46509. (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
  46510. (try_end),
  46511.  
  46512. (assign, "$g_use_current_ai_object_as_s8", 0),
  46513.  
  46514. #THE FIRST BATCH OF DISQUALIFYING CONDITIONS DO NOT REQUIRE THE ATTACKING PARTY TO HAVE CURRENT INTELLIGENCE ON THE TARGET
  46515. (try_begin),
  46516. (neg|party_is_active, ":party_no"),
  46517.  
  46518. (assign, ":result", -1),
  46519. (assign, ":explainer_string", "str_center_party_not_active"),
  46520. #(assign, ":reason_is_obvious", 1),
  46521. (else_try),
  46522. (store_faction_of_party, ":potential_target_faction", ":potential_target"),
  46523. (store_relation, ":relation", ":potential_target_faction", ":faction_no"),
  46524. (ge, ":relation", 0),
  46525.  
  46526. (assign, ":result", -1),
  46527. (assign, ":explainer_string", "str_center_is_friendly"),
  46528. #(assign, ":reason_is_obvious", 1),
  46529. (else_try),
  46530. (is_between, ":potential_target", walled_centers_begin, walled_centers_end),
  46531. (assign, ":faction_of_besieger_party", -1),
  46532. (try_begin),
  46533. (neg|party_slot_eq, ":potential_target", slot_center_is_besieged_by, -1),
  46534. (party_get_slot, ":besieger_party", ":potential_target", slot_center_is_besieged_by),
  46535. (party_is_active, ":besieger_party"),
  46536. (store_faction_of_party, ":faction_of_besieger_party", ":besieger_party"),
  46537. (try_end),
  46538.  
  46539. (neq, ":faction_of_besieger_party", -1),
  46540. (neq, ":faction_of_besieger_party", ":faction_no"),
  46541.  
  46542. (assign, ":result", -1),
  46543. (assign, ":explainer_string", "str_center_is_already_besieged"),
  46544. #(assign, ":reason_is_obvious", 1),
  46545. (else_try),
  46546. (is_between, ":potential_target", villages_begin, villages_end),
  46547. (assign, ":village_is_looted_or_raided_already", 0),
  46548. (try_begin),
  46549. (party_slot_eq, ":potential_target", slot_village_state, svs_being_raided),
  46550. (party_get_slot, ":raider_party", ":potential_target", slot_village_raided_by),
  46551. (party_is_active, ":raider_party"),
  46552. (store_faction_of_party, ":raider_faction", ":raider_party"),
  46553. (neq, ":raider_faction", ":faction_no"),
  46554. (assign, ":raiding_by_one_other_faction", 1),
  46555. (else_try),
  46556. (assign, ":raiding_by_one_other_faction", 0),
  46557. (try_end),
  46558.  
  46559. (try_begin),
  46560. (this_or_next|party_slot_eq, ":potential_target", slot_village_state, svs_looted),
  46561. (eq, ":raiding_by_one_other_faction", 1),
  46562. (assign, ":village_is_looted_or_raided_already", 1),
  46563. (try_end),
  46564.  
  46565. (eq, ":village_is_looted_or_raided_already", 1),
  46566.  
  46567. (assign, ":result", -1),
  46568. (assign, ":explainer_string", "str_center_is_looted_or_raided_already"),
  46569. #(assign, ":reason_is_obvious", 1),
  46570. (else_try),
  46571. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  46572. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_goodnatured),
  46573.  
  46574. (is_between, ":potential_target", villages_begin, villages_end),
  46575. (assign, ":result", -1),
  46576. (assign, ":explainer_string", "str_center_marshal_does_not_want_to_attack_innocents"),
  46577. (else_try),
  46578. (assign, ":distance_from_our_closest_walled_center", 1000),
  46579. (try_for_range, ":cur_center", walled_centers_begin, walled_centers_end),
  46580. (store_faction_of_party, ":cur_center_faction", ":cur_center"),
  46581. (eq, ":cur_center_faction", ":faction_no"),
  46582. (store_distance_to_party_from_party, ":distance_from_cur_center", ":cur_center", ":potential_target"),
  46583. (lt, ":distance_from_cur_center", ":distance_from_our_closest_walled_center"),
  46584. (assign, ":distance_from_our_closest_walled_center", ":distance_from_cur_center"),
  46585. (try_end),
  46586.  
  46587. (gt, ":distance_from_our_closest_walled_center", 75),
  46588. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  46589. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  46590. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_goodnatured),
  46591. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_cunning),
  46592.  
  46593. (assign, ":result", -1),
  46594. (assign, ":explainer_string", "str_center_far_away_our_cautious_marshal_does_not_wish_to_reconnoiter"),
  46595. #RECONNOITERING BEGINS HERE - VALUE WILL BE TEN OR LESS
  46596. (else_try),
  46597. (gt, ":distance_from_our_closest_walled_center", 90),
  46598.  
  46599. (assign, ":result", -1),
  46600. (assign, ":explainer_string", "str_center_far_away_even_for_our_aggressive_marshal_to_reconnoiter"),
  46601. #(assign, ":reason_is_obvious", 1),
  46602. (else_try),
  46603. (is_between, ":potential_target", walled_centers_begin, walled_centers_end),
  46604. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_martial),
  46605. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_quarrelsome),
  46606. (neg|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_selfrighteous),
  46607.  
  46608. (assign, ":close_center_found", 0),
  46609. (try_for_range, ":friendly_walled_center", walled_centers_begin, walled_centers_end),
  46610. (eq, ":close_center_found", 0),
  46611. (store_faction_of_party, ":friendly_walled_center_faction", ":friendly_walled_center"),
  46612. (eq, ":friendly_walled_center_faction", ":faction_no"),
  46613. (store_distance_to_party_from_party, ":distance_from_walled_center", ":potential_target", ":friendly_walled_center"),
  46614. (lt, ":distance_from_walled_center", 60),
  46615. (assign, ":close_center_found", 1),
  46616. (try_end),
  46617. (eq, ":close_center_found", 0),
  46618.  
  46619. (assign, ":result", -1),
  46620. (assign, ":explainer_string", "str_center_is_indefensible"),
  46621. #(else_try),
  46622. #For now it is removed as Armagan's decision, we can add this option in later patchs. I and Armagan accept it has good potential. But this system needs also
  46623. #scouting quests and scouting AI added together. If we only add this then we limit AI very much, it can attack only very few of centers, this damages
  46624. #variability of game and surprise attacks of AI. Player can predict where AI will attack and he can full garnisons of only this center.
  46625. #We can add asking travellers about how good defended center X by paying 100 denars for example to equalize situations of AI and human player.
  46626. #But these needs much work and detailed AI tests so Armagan decided to skip this for now.
  46627.  
  46628. #(store_sub, ":faction_recce_slot", ":faction_no", kingdoms_begin),
  46629. #(val_add, ":faction_recce_slot", slot_center_last_reconnoitered_by_faction_time),
  46630. #(party_get_slot, ":last_recce_time", ":potential_target", ":faction_recce_slot"),
  46631. #(store_current_hours, ":hours_since_last_recce"),
  46632. #(val_sub, ":hours_since_last_recce", ":last_recce_time"),
  46633.  
  46634. #(this_or_next|eq, ":last_recce_time", 0),
  46635. #(gt, ":hours_since_last_recce", 96), #Information is presumed to be accurate for four days
  46636.  
  46637. #(store_sub, ":150_minus_distance_div_by_10", 150, ":distance_from_party"),
  46638. #(val_div, ":150_minus_distance_div_by_10", 10),
  46639.  
  46640. #(assign, ":result", ":150_minus_distance_div_by_10"),
  46641. #(assign, ":explainer_string", "str_center_has_not_been_scouted"),
  46642. #DECISIONS BASED ON ENEMY STRENGTH BEGIN HERE
  46643. (else_try),
  46644. (party_get_slot, ":party_strength", ":party_no", slot_party_cached_strength),
  46645. (party_get_slot, ":follower_strength", ":party_no", slot_party_follower_strength),
  46646. (party_get_slot, ":strength_of_nearby_friend", ":party_no", slot_party_nearby_friend_strength),
  46647.  
  46648. (store_add, ":total_strength", ":party_strength", ":follower_strength"),
  46649. (val_add, ":total_strength", ":strength_of_nearby_friend"),
  46650.  
  46651. #(party_get_slot, ":potential_target_nearby_enemy_exact_strength", ":potential_target", slot_party_nearby_friend_strength),
  46652. #(assign, ":potential_target_nearby_enemy_strength", ":potential_target_nearby_enemy_exact_strength"),
  46653. (try_begin),
  46654. (is_between, ":potential_target", villages_begin, villages_end),
  46655. (assign, ":enemy_strength", 10),
  46656. (else_try),
  46657. (party_get_slot, ":enemy_strength", ":potential_target", slot_party_cached_strength),
  46658. (party_get_slot, ":enemy_strength_nearby", ":potential_target", slot_party_nearby_friend_strength),
  46659. (val_add, ":enemy_strength", ":enemy_strength_nearby"),
  46660. (try_end),
  46661. (val_max, ":enemy_strength", 1),
  46662.  
  46663. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_martial),
  46664. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_quarrelsome),
  46665. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_selfrighteous),
  46666.  
  46667. (store_mul, ":power_ratio", ":total_strength", 100),
  46668. (val_div, ":power_ratio", ":enemy_strength"),
  46669. (lt, ":power_ratio", 150),
  46670.  
  46671. (assign, ":result", -1),
  46672. (assign, ":explainer_string", "str_center_protected_by_enemy_army_aggressive"),
  46673. (else_try),
  46674. (ge, ":enemy_strength", ":total_strength"), #if enemy is powerful
  46675.  
  46676. (assign, ":result", -1),
  46677. (assign, ":explainer_string", "str_center_protected_by_enemy_army_cautious"),
  46678. (else_try),
  46679. (store_mul, ":power_ratio", ":total_strength", 100),
  46680. (val_div, ":power_ratio", ":enemy_strength"),
  46681. (lt, ":power_ratio", 185),
  46682.  
  46683. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  46684. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  46685. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_goodnatured),
  46686. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_cunning),
  46687.  
  46688. #equations here
  46689. (assign, ":result", -1),
  46690. (assign, ":explainer_string", "str_center_cautious_marshal_believes_center_too_difficult_to_capture"),
  46691. (else_try),
  46692. (lt, ":power_ratio", 140), #it was 140
  46693.  
  46694. (assign, ":result", -1),
  46695. (assign, ":explainer_string", "str_center_even_aggressive_marshal_believes_center_too_difficult_to_capture"),
  46696. #To Steve - I moved below two if statement here from upper places, to enable in answering different different answers even
  46697. #if we are close to an unlooted enemy village. For example now it can say "center X" is too far too while our army is
  46698. #looting a village because of its closeness.
  46699. (else_try),
  46700. #if the party has already started the siege
  46701. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_raiding_village),
  46702. (faction_get_slot, ":current_object", ":faction_no", slot_faction_ai_object),
  46703. (is_between, ":current_object", villages_begin, villages_end),
  46704. (neq, ":potential_target", ":current_object"),
  46705. (party_slot_eq, ":current_object", slot_village_state, svs_under_siege),
  46706.  
  46707. (store_current_hours, ":hours_since_siege_began"),
  46708. (party_get_slot, ":hour_that_siege_began", ":current_object", slot_center_siege_begin_hours),
  46709. (val_sub, ":hours_since_siege_began", ":hour_that_siege_began"),
  46710. (gt, ":hours_since_siege_began", 4),
  46711.  
  46712. (call_script, "script_npc_decision_checklist_evaluate_enemy_center_for_attack", ":troop_no", ":current_object", ":attack_by_faction", 0),
  46713. (gt, reg0, -1),
  46714.  
  46715. (assign, ":result", -1),
  46716. (assign, ":explainer_string", "str_center_we_have_already_committed_too_much_time_to_our_present_siege_to_move_elsewhere"),
  46717. (else_try),
  46718. #If the party is close to an unlooted village
  46719. (faction_slot_eq, ":faction_no", slot_faction_ai_state, sfai_raiding_village),
  46720. (faction_get_slot, ":current_object", ":faction_no", slot_faction_ai_object),
  46721. (neq, ":potential_target", ":current_object"),
  46722. (is_between, ":current_object", villages_begin, villages_end),
  46723. (store_distance_to_party_from_party, ":distance_to_cur_object", ":party_no", ":current_object"),
  46724. (lt, ":distance_to_cur_object", 10),
  46725.  
  46726. (call_script, "script_npc_decision_checklist_evaluate_enemy_center_for_attack", ":troop_no", ":current_object", ":attack_by_faction", 0),
  46727. (gt, reg0, -1),
  46728.  
  46729. (assign, "$g_use_current_ai_object_as_s8", 1),
  46730.  
  46731. (assign, ":result", -1),
  46732. (assign, ":explainer_string", "str_center_we_are_already_here_we_should_at_least_loot_the_village"),
  46733. #DECISION TO ATTACK IS HERE
  46734. #(else_try),
  46735. #To Steve - I removed below lines, as here decided. We will use pre-function to evaluate assailability scores for centers rather than below lines to make AI
  46736. #selecting better targets. If you want to make some marshals to select not-best options I can add that option into script_calculate_center_assailability_score,
  46737. #for that we can need seed values for each center and for each lord, so we can add these seed values to create variability, clever marshals have seeds with less
  46738. #standard deviation and less values and less-clever marshals have bigger seeds. Then probability of some lords to disagree marshal increases because their seed
  46739. #values will be different from marshal's. If Steve wants it from me to implement I can add this.
  46740.  
  46741. #(try_begin),
  46742. # (is_between, ":potential_target", villages_begin, villages_end),
  46743. # (party_get_slot, ":score", ":potential_target", slot_town_prosperity),
  46744. # (val_add, ":score", 50), #average 100
  46745. #(else_try),
  46746. # (is_between, ":potential_target", castles_begin, castles_end),
  46747. # (assign, ":score", ":power_ratio"), #ie, at least 140
  46748. #(else_try),
  46749. # (party_get_slot, ":score", ":potential_target", slot_town_prosperity),
  46750. # (val_add, ":score", 75),
  46751. # (val_mul, ":score", ":power_ratio"),
  46752. # (val_div, ":score", 100), #ie, at least about 200
  46753. #(try_end),
  46754. #
  46755. #(val_sub, ":score", ":distance_from_party"),
  46756. #(lt, ":score", -1),
  46757.  
  46758. #(assign, ":result", -1),
  46759. #(assign, ":explainer_string", "str_center_value_outweighed_by_difficulty_of_capture"),
  46760. (else_try),
  46761. (try_begin),
  46762. (eq, "$cheat_mode", 1),
  46763. (eq, ":faction_no", "fac_kingdom_3"),
  46764. (store_faction_of_party, ":potential_target_faction", ":potential_target"),
  46765. (store_relation, ":relation", ":potential_target_faction", ":faction_no"),
  46766. (lt, ":relation", 0),
  46767. (try_end),
  46768.  
  46769. (call_script, "script_calculate_center_assailability_score", ":troop_no", ":potential_target", ":all_vassals_included"),
  46770. (assign, ":score", reg0),
  46771. (assign, ":power_ratio", reg1),
  46772. #(assign, ":distance_score", reg2),
  46773.  
  46774. (assign, ":result", ":score"),
  46775.  
  46776. (try_begin),
  46777. (le, ":power_ratio", 100),
  46778. (try_begin),
  46779. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  46780. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  46781. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_goodnatured),
  46782. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_cunning),
  46783. (assign, ":explainer_string", "str_center_cautious_marshal_believes_center_too_difficult_to_capture"),
  46784. (else_try),
  46785. (assign, ":explainer_string", "str_center_even_aggressive_marshal_believes_center_too_difficult_to_capture"),
  46786. (try_end),
  46787. (else_try),
  46788. (le, ":power_ratio", 150),
  46789.  
  46790. (try_begin),
  46791. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_upstanding),
  46792. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_debauched),
  46793. (this_or_next|troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_goodnatured),
  46794. (troop_slot_eq, ":troop_no", slot_lord_reputation_type, lrep_cunning),
  46795. (assign, ":explainer_string", "str_center_protected_by_enemy_army_cautious"),
  46796. (else_try),
  46797. (assign, ":explainer_string", "str_center_protected_by_enemy_army_aggressive"),
  46798. (try_end),
  46799. (else_try),
  46800. (try_begin),
  46801. (le, ":score", "$g_faction_object_score"),
  46802. (assign, ":explainer_string", "str_center_value_outweighed_by_difficulty_of_capture"),
  46803. (else_try),
  46804. #To Steve, does not this sentence needs to explain why we are not attacking that city?
  46805. #This sentence says it justifies, so why we are not attacking?
  46806. (assign, ":explainer_string", "str_center_value_justifies_the_difficulty_of_capture"),
  46807. (try_end),
  46808. (try_end),
  46809. (try_end),
  46810.  
  46811. (assign, reg0, ":result"),
  46812. (assign, reg1, ":explainer_string"),
  46813. (assign, reg2, ":power_ratio"),
  46814. ]),
  46815.  
  46816. (
  46817. "npc_decision_checklist_faction_ai_alt", #This is called from within decide_faction_ai, or from
  46818. [
  46819. (store_script_param, ":troop_no", 1),
  46820.  
  46821. (store_faction_of_troop, ":faction_no", ":troop_no"),
  46822.  
  46823. (str_store_troop_name, s4, ":troop_no"),
  46824. (str_store_faction_name, s33, ":faction_no"),
  46825. (try_begin),
  46826. (eq, "$cheat_mode", 1),
  46827. (display_message, "@{!}DEBUG -- {s4} produces a faction strategy for {s33}"),
  46828. (try_end),
  46829.  
  46830. #INFORMATIONS COLLECTING STEP 0: Here we obtain general information about current faction like how much parties that faction has, which lord is the marshall, current ai state and current ai target object
  46831. #(faction_get_slot, ":faction_strength", ":faction_no", slot_faction_number_of_parties),
  46832. (faction_get_slot, ":faction_marshal", ":faction_no", slot_faction_marshall),
  46833. (faction_get_slot, ":current_ai_state", ":faction_no", slot_faction_ai_state),
  46834. (faction_get_slot, ":current_ai_object", ":faction_no", slot_faction_ai_object),
  46835.  
  46836. (assign, ":marshal_party", -1),
  46837. (assign, ":marshal_party_strength", 0),
  46838.  
  46839. (try_begin),
  46840. (gt, ":faction_marshal", 0),
  46841. (troop_get_slot, ":marshal_party", ":faction_marshal", slot_troop_leaded_party),
  46842. (party_is_active, ":marshal_party"),
  46843. (party_get_slot, ":marshal_party_itself_strength", ":marshal_party", slot_party_cached_strength),
  46844. (party_get_slot, ":marshal_party_follower_strength", ":marshal_party", slot_party_follower_strength),
  46845. (store_add, ":marshal_party_strength", ":marshal_party_itself_strength", ":marshal_party_follower_strength"),
  46846. (try_end),
  46847.  
  46848. #INFORMATIONS COLLECTING STEP 1: Here we are learning how much hours past from last offensive situation/feast concluded/current state started
  46849. (store_current_hours, ":hours_since_last_offensive"),
  46850. (faction_get_slot, ":last_offensive_time", ":faction_no", slot_faction_last_offensive_concluded),
  46851. (val_sub, ":hours_since_last_offensive", ":last_offensive_time"),
  46852.  
  46853. (store_current_hours, ":hours_since_last_feast_start"),
  46854. (faction_get_slot, ":last_feast_time", ":faction_no", slot_faction_last_feast_start_time),
  46855. (val_sub, ":hours_since_last_feast_start", ":last_feast_time"),
  46856.  
  46857. (store_current_hours, ":hours_at_current_state"),
  46858. (faction_get_slot, ":current_state_started", ":faction_no", slot_faction_ai_current_state_started),
  46859. (val_sub, ":hours_at_current_state", ":current_state_started"),
  46860.  
  46861. (store_current_hours, ":hours_since_last_faction_rest"),
  46862. (faction_get_slot, ":last_rest_time", ":faction_no", slot_faction_ai_last_rest_time),
  46863. (val_sub, ":hours_since_last_faction_rest", ":last_rest_time"),
  46864.  
  46865. (try_begin), #calculating ":last_offensive_time_score", this will be used in #11 and #12
  46866. (ge, ":hours_since_last_offensive", 1080), #more than 45 days (100p)
  46867. (assign, ":last_offensive_time_score", 100),
  46868. (else_try),
  46869. (ge, ":hours_since_last_offensive", 480), #more than 20 days (65p..99p)
  46870. (store_sub, ":last_offensive_time_score", ":hours_since_last_offensive", 480),
  46871. (val_div, ":last_offensive_time_score", 20),
  46872. (val_add, ":last_offensive_time_score", 64),
  46873. (else_try),
  46874. (ge, ":hours_since_last_offensive", 240), #more than 10 days (41p..64p)
  46875. (store_sub, ":last_offensive_time_score", ":hours_since_last_offensive", 240),
  46876. (val_div, ":last_offensive_time_score", 10),
  46877. (val_add, ":last_offensive_time_score", 40),
  46878. (else_try), #less than 10 days (0p..40p)
  46879. (store_div, ":last_offensive_time_score", ":hours_since_last_offensive", 6), #0..40
  46880. (try_end),
  46881.  
  46882. #INFORMATION COLLECTING STEP 3: Here we are finding the most threatened center
  46883. (call_script, "script_find_center_to_defend", ":troop_no"),
  46884. (assign, ":most_threatened_center", reg0),
  46885. (assign, ":threat_danger_level", reg1),
  46886. (assign, ":enemy_strength_near_most_threatened_center", reg2), #NOTE! This will be off by as much as 50%
  46887.  
  46888. #INFORMATION COLLECTING STEP 4: Here we are finding number of vassals who are already following the marshal, and the assigned vassal ratio of current faction.
  46889. (assign, ":vassals_already_assembled", 0),
  46890. (assign, ":total_vassals", 0),
  46891. (try_for_range, ":lord", active_npcs_begin, active_npcs_end),
  46892. (store_faction_of_troop, ":lord_faction", ":lord"),
  46893. (eq, ":lord_faction", ":faction_no"),
  46894. (troop_get_slot, ":led_party", ":lord", slot_troop_leaded_party),
  46895. (party_is_active, ":led_party"),
  46896. (val_add, ":total_vassals", 1),
  46897.  
  46898. (party_slot_eq, ":led_party", slot_party_ai_state, spai_accompanying_army),
  46899. (party_slot_eq, ":led_party", slot_party_ai_object, ":marshal_party"),
  46900.  
  46901. (party_is_active, ":marshal_party"),
  46902. (store_distance_to_party_from_party, ":distance_to_marshal", ":led_party", ":marshal_party"),
  46903. (lt, ":distance_to_marshal", 15),
  46904. (val_add, ":vassals_already_assembled", 1),
  46905. (try_end),
  46906. (assign, ":ratio_of_vassals_assembled", -1),
  46907. (try_begin),
  46908. (gt, ":total_vassals", 0),
  46909. (store_mul, ":ratio_of_vassals_assembled", ":vassals_already_assembled", 100),
  46910. (val_div, ":ratio_of_vassals_assembled", ":total_vassals"),
  46911. (try_end),
  46912.  
  46913. #50% of vassals means that the campaign hour limit is ten days
  46914. (store_mul, ":campaign_hour_limit", ":ratio_of_vassals_assembled", 3),
  46915. (val_add, ":campaign_hour_limit", 90),
  46916.  
  46917. #To Steve - I understand your concern about some marshals will gather army and some will not be able to find any valueable center to attack after gathering,
  46918. #and these marshals will be questioned by other marshals ext. This is ok but if we search for a target without adding all other vassals what if
  46919. #AI cannot find any target for long time because of its low power ratio if enemy cities are equal defended? Do not forget if we do not count other vassals in
  46920. #faction while making target search we can only add marshal army's power and vassals around him. And if there is any threat in our centers even it is smaller,
  46921. #its threat_danger_level will be more than target_value_level if marshal new started gathering for ofensive. Because we only assume marshal and around vassals
  46922. #will join attack. And in our scenarios currently there are less vassals are around him. So power ratio will be low and any small threat will be enought to stop
  46923. #an offensive. Then when players finds out this they periodically will take under siege to enemy's any center and they will be saved from any kind of newly started
  46924. #offensive they will be faced. So we have to calculate both attack levels and select highest one to compare with threat level. Please do not change this part.
  46925.  
  46926. (try_begin),
  46927. (ge, ":faction_marshal", 0),
  46928. (ge, ":marshal_party", 0),
  46929. (party_is_active, ":marshal_party"),
  46930.  
  46931. (call_script, "script_party_count_fit_for_battle", ":marshal_party"),
  46932. (assign, ":number_of_fit_soldiers_in_marshal_party", reg0),
  46933. (ge, ":number_of_fit_soldiers_in_marshal_party", 40),
  46934.  
  46935. (call_script, "script_find_center_to_attack_alt", ":troop_no", 1, 0),
  46936. (assign, ":center_to_attack_all_vassals_included", reg0),
  46937. (assign, ":target_value_level_all_vassals_included", reg1),
  46938.  
  46939. (call_script, "script_find_center_to_attack_alt", ":troop_no", 1, 1),
  46940. (assign, ":center_to_attack_only_marshal_and_followers", reg0),
  46941. (assign, ":target_value_level_only_marshal_and_followers", reg1),
  46942. (else_try),
  46943. (assign, ":target_value_level_all_vassals_included", 0),
  46944. (assign, ":target_value_level_only_marshal_and_followers", 0),
  46945. (assign, ":center_to_attack_all_vassals_included", -1),
  46946. (assign, ":center_to_attack_only_marshal_and_followers", -1),
  46947. (try_end),
  46948.  
  46949. (try_begin),
  46950. (ge, ":target_value_level_all_vassals_included", ":center_to_attack_only_marshal_and_followers"),
  46951. (assign, ":center_to_attack", ":center_to_attack_all_vassals_included"),
  46952. (assign, ":target_value_level", ":target_value_level_all_vassals_included"),
  46953. (else_try),
  46954. (assign, ":center_to_attack", ":center_to_attack_only_marshal_and_followers"),
  46955. (assign, ":target_value_level", ":target_value_level_only_marshal_and_followers"),
  46956. (try_end),
  46957.  
  46958. (try_begin),
  46959. (eq, ":current_ai_state", sfai_attacking_center),
  46960. (val_mul, ":target_value_level", 3),
  46961. (val_div, ":target_value_level", 2),
  46962. (try_end),
  46963.  
  46964. (try_begin),
  46965. (eq, "$cheat_mode", 1),
  46966. (try_begin),
  46967. (is_between, ":center_to_attack", centers_begin, centers_end),
  46968. (str_store_party_name, s4, ":center_to_attack"),
  46969. (display_message, "@{!}Best offensive target {s4} has value level of {reg1}"),
  46970. (else_try),
  46971. (display_message, "@{!}No center found to attack"),
  46972. (try_end),
  46973.  
  46974. (try_begin),
  46975. (is_between, ":most_threatened_center", centers_begin, centers_end),
  46976. (str_store_party_name, s4, ":most_threatened_center"),
  46977. (assign, reg1, ":threat_danger_level"),
  46978. (display_message, "@{!}Best threat of {s4} has value level of {reg1}"),
  46979. (else_try),
  46980. (display_message, "@{!}No center found to defend"),
  46981. (try_end),
  46982. (try_end),
  46983.  
  46984. (try_begin),
  46985. (eq, "$cheat_mode", 1),
  46986.  
  46987. (try_begin),
  46988. (is_between, ":most_threatened_center", centers_begin, centers_end),
  46989. (str_store_party_name, s4, ":most_threatened_center"),
  46990. (assign, reg1, ":threat_danger_level"),
  46991. (display_message, "@Best threat of {s4} has value level of {reg1}"),
  46992. (else_try),
  46993. (display_message, "@No center found to defend"),
  46994. (try_end),
  46995. (try_end),
  46996.  
  46997. (assign, "$g_target_after_gathering", -1),
  46998.  
  46999. (store_current_hours, ":hours"),
  47000. (try_begin),
  47001. (ge, ":target_value_level", ":threat_danger_level"),
  47002. (faction_set_slot, ":faction_no", slot_faction_last_safe_hours, ":hours"),
  47003. (try_end),
  47004. (faction_get_slot, ":last_safe_hours", ":faction_no", slot_faction_last_safe_hours),
  47005. (try_begin),
  47006. (eq, ":last_safe_hours", 0),
  47007. (faction_set_slot, ":faction_no", slot_faction_last_safe_hours, ":hours"),
  47008. (try_end),
  47009. (faction_get_slot, ":last_safe_hours", ":faction_no", slot_faction_last_safe_hours),
  47010. (store_sub, ":hours_since_days_defensive_started", ":hours", ":last_safe_hours"),
  47011. (str_store_faction_name, s7, ":faction_no"),
  47012.  
  47013. (assign, ":at_peace_with_everyone", 1),
  47014. (try_for_range, ":faction_at_war", kingdoms_begin, kingdoms_end),
  47015. (store_relation, ":relation", ":faction_no", ":faction_at_war"),
  47016. (lt, ":relation", 0),
  47017. (assign, ":at_peace_with_everyone", 0),
  47018. (try_end),
  47019.  
  47020.  
  47021. #INFORMATIONS ARE COLLECTED, NOW CHECK ALL POSSIBLE ACTIONS AND DECIDE WHAT TO DO NEXT
  47022. #Player marshal
  47023. (try_begin), # a special case to end long-running feasts
  47024. (eq, ":troop_no", "trp_player"),
  47025.  
  47026. (eq, ":current_ai_state", sfai_feast),
  47027. (ge, ":hours_at_current_state", 72),
  47028.  
  47029. (assign, ":action", sfai_default),
  47030. (assign, ":object", -1),
  47031.  
  47032. #Normally you are not supposed to set permanent values in this state, but this is a special case to end player-called feasts
  47033. (assign, "$player_marshal_ai_state", sfai_default),
  47034. (assign, "$player_marshal_ai_object", -1),
  47035. (else_try), #another special state, to make player-called feasts last for a while when the player is the leader of the faction, but not the marshal
  47036. (eq, "$players_kingdom", "fac_player_supporters_faction"),
  47037. (faction_slot_eq, "$players_kingdom", slot_faction_leader, "trp_player"),
  47038. (neq, ":troop_no", "trp_player"),
  47039.  
  47040. (eq, ":current_ai_state", sfai_feast),
  47041. (le, ":hours_at_current_state", 48),
  47042.  
  47043. (party_slot_eq, ":current_ai_object", slot_town_lord, "trp_player"),
  47044. (store_faction_of_party, ":current_ai_object_faction", ":current_ai_object"),
  47045. (eq, ":current_ai_object_faction", "$players_kingdom"),
  47046.  
  47047. (assign, ":action", sfai_feast),
  47048. (assign, ":object", ":current_ai_object"),
  47049.  
  47050.  
  47051. (else_try), #this is the main player marshal state
  47052. (eq, ":troop_no", "trp_player"),
  47053.  
  47054. (str_clear, s14),
  47055. (assign, ":action", "$player_marshal_ai_state"),
  47056. (assign, ":object", "$player_marshal_ai_object"),
  47057.  
  47058. #1-RESTING IF NEEDED
  47059. #If not currently attacking a besieging a center and vassals did not rest for long time, let them rest.
  47060. #If we do not take this part to toppest level, tired vassals already did not accept any order, so that
  47061. #faction cannot do anything already. So first let vassals rest if they need. Thats why it should be toppest.
  47062. (else_try),
  47063. (neq, ":current_ai_state", sfai_default),
  47064. (neq, ":current_ai_state", sfai_feast),
  47065. (party_is_active, ":marshal_party"),
  47066.  
  47067. (party_slot_eq, ":marshal_party", slot_party_ai_state, spai_retreating_to_center),
  47068.  
  47069. (assign, ":action", sfai_default),
  47070. (assign, ":object", -1),
  47071. (str_store_string, s14, "str_the_enemy_temporarily_has_the_field"),
  47072.  
  47073. (else_try),
  47074. (neq, ":current_ai_state", sfai_feast),
  47075.  
  47076. (assign, ":currently_besieging", 0),
  47077. (try_begin),
  47078. (eq, ":current_ai_state", sfai_attacking_center),
  47079. (is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  47080. (party_get_slot, ":besieger_party", ":current_ai_object", slot_center_is_besieged_by),
  47081. (party_is_active, ":besieger_party"),
  47082. (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  47083. (eq, ":besieger_faction", ":faction_no"),
  47084. (assign, ":currently_besieging", 1),
  47085. (try_end),
  47086.  
  47087. (assign, ":currently_defending_center", 0),
  47088. (try_begin),
  47089. (eq, ":current_ai_state", sfai_attacking_enemies_around_center),
  47090. (gt, ":marshal_party", 0),
  47091. (party_is_active, ":marshal_party"),
  47092.  
  47093. (assign, ":besieged_center", -1),
  47094. (try_begin),
  47095. (party_slot_eq, ":marshal_party", slot_party_ai_state, spai_holding_center), #if commander is holding a center
  47096. (party_get_slot, ":marshal_object", ":marshal_party", slot_party_ai_object), #get commander's ai object (center they are holding)
  47097. (party_get_battle_opponent, ":besieger_enemy", ":marshal_object"), #get this object's battle opponent
  47098. (ge, ":besieger_enemy", 0),
  47099. (assign, ":besieged_center", ":marshal_object"),
  47100. (else_try),
  47101. (party_slot_eq, ":marshal_party", slot_party_ai_state, spai_engaging_army), #if commander is engaging an army
  47102. (party_get_slot, ":marshal_object", ":marshal_party", slot_party_ai_object), #get commander's ai object (army which they engaded)
  47103. (ge, ":marshal_object", 0), #if commander has an object
  47104. (neg|is_between, ":marshal_object", centers_begin, centers_end), #if this object is not a center, so it is a party
  47105. (party_is_active, ":marshal_object"),
  47106. (party_get_battle_opponent, ":besieged_center", ":marshal_object"), #get this object's battle opponent
  47107. (try_end),
  47108.  
  47109. (eq, ":besieged_center", ":current_ai_object"),
  47110. (assign, ":currently_defending_center", 1),
  47111. (try_end),
  47112.  
  47113. (eq, ":currently_besieging", 0),
  47114. (eq, ":currently_defending_center", 0),
  47115. (ge, ":hours_since_last_faction_rest", 1240),
  47116.  
  47117. (assign, ":action", sfai_default),
  47118. (assign, ":object", -1),
  47119. (str_store_string, s14, "str_the_vassals_are_tired_we_let_them_rest_for_some_time"),
  47120.  
  47121. #2-DEFENSIVE ACTIONS : GATHERING ARMY FOR DEFENDING
  47122. (else_try),
  47123. (party_is_active, ":marshal_party"),
  47124. (eq, ":at_peace_with_everyone", 0),
  47125.  
  47126. (is_between, ":most_threatened_center", centers_begin, centers_end),
  47127. (this_or_next|eq, ":current_ai_state", sfai_default), #MOTO not going to attack anyway
  47128. (this_or_next|eq, ":current_ai_state", sfai_feast), #MOTO not going to attack anyway (THIS is the emergency to stop feast)
  47129. (gt, ":threat_danger_level", ":target_value_level"),
  47130.  
  47131. (assign, ":continue_gathering", 0),
  47132. (assign, ":start_gathering", 0),
  47133.  
  47134. (try_begin),
  47135. (is_between, ":most_threatened_center", villages_begin, villages_end),
  47136.  
  47137. (assign, ":continue_gathering", 0),
  47138. (else_try),
  47139. (try_begin),
  47140. (lt, ":hours_since_days_defensive_started", 3),
  47141. (assign, ":multiplier", 150),
  47142. (else_try),
  47143. (lt, ":hours_since_days_defensive_started", 6),
  47144. (assign, ":multiplier", 140),
  47145. (else_try),
  47146. (lt, ":hours_since_days_defensive_started", 9),
  47147. (assign, ":multiplier", 132),
  47148. (else_try),
  47149. (lt, ":hours_since_days_defensive_started", 12),
  47150. (assign, ":multiplier", 124),
  47151. (else_try),
  47152. (lt, ":hours_since_days_defensive_started", 15),
  47153. (assign, ":multiplier", 118),
  47154. (else_try),
  47155. (lt, ":hours_since_days_defensive_started", 18),
  47156. (assign, ":multiplier", 114),
  47157. (else_try),
  47158. (lt, ":hours_since_days_defensive_started", 21),
  47159. (assign, ":multiplier", 110),
  47160. (else_try),
  47161. (lt, ":hours_since_days_defensive_started", 24),
  47162. (assign, ":multiplier", 106),
  47163. (else_try),
  47164. (lt, ":hours_since_days_defensive_started", 27),
  47165. (assign, ":multiplier", 102),
  47166. (else_try),
  47167. (lt, ":hours_since_days_defensive_started", 31),
  47168. (assign, ":multiplier", 98),
  47169. (else_try),
  47170. (lt, ":hours_since_days_defensive_started", 34),
  47171. (assign, ":multiplier", 94),
  47172. (else_try),
  47173. (lt, ":hours_since_days_defensive_started", 37),
  47174. (assign, ":multiplier", 90),
  47175. (else_try),
  47176. (lt, ":hours_since_days_defensive_started", 40),
  47177. (assign, ":multiplier", 86),
  47178. (else_try),
  47179. (lt, ":hours_since_days_defensive_started", 43),
  47180. (assign, ":multiplier", 82),
  47181. (else_try),
  47182. (lt, ":hours_since_days_defensive_started", 46),
  47183. (assign, ":multiplier", 79),
  47184. (else_try),
  47185. (lt, ":hours_since_days_defensive_started", 49),
  47186. (assign, ":multiplier", 76),
  47187. (else_try),
  47188. (lt, ":hours_since_days_defensive_started", 52),
  47189. (assign, ":multiplier", 73),
  47190. (else_try),
  47191. (lt, ":hours_since_days_defensive_started", 56),
  47192. (assign, ":multiplier", 70),
  47193. (else_try),
  47194. (lt, ":hours_since_days_defensive_started", 60),
  47195. (assign, ":multiplier", 68),
  47196. (else_try),
  47197. (lt, ":hours_since_days_defensive_started", 66),
  47198. (assign, ":multiplier", 66),
  47199. (else_try),
  47200. (lt, ":hours_since_days_defensive_started", 72),
  47201. (assign, ":multiplier", 64),
  47202. (else_try),
  47203. (lt, ":hours_since_days_defensive_started", 80),
  47204. (assign, ":multiplier", 62),
  47205. (else_try),
  47206. (lt, ":hours_since_days_defensive_started", 90),
  47207. (assign, ":multiplier", 60),
  47208. (else_try),
  47209. (lt, ":hours_since_days_defensive_started", 100),
  47210. (assign, ":multiplier", 58),
  47211. (else_try),
  47212. (assign, ":multiplier", 56),
  47213. (try_end),
  47214.  
  47215. (store_mul, ":enemy_strength_multiplied", ":enemy_strength_near_most_threatened_center", ":multiplier"),
  47216. (val_div, ":enemy_strength_multiplied", 100),
  47217.  
  47218. (try_begin),
  47219. (lt, ":marshal_party_strength", ":enemy_strength_multiplied"),
  47220. (assign, ":continue_gathering", 1),
  47221. (try_end),
  47222. (else_try),
  47223. (eq, ":current_ai_state", sfai_attacking_enemies_around_center),
  47224. (neq, ":most_threatened_center", ":current_ai_object"),
  47225.  
  47226. (assign, ":marshal_is_already_defending_a_center", 0),
  47227. (try_begin),
  47228. (gt, ":marshal_party", 0),
  47229. (party_is_active, ":marshal_party"),
  47230.  
  47231. (assign, ":besieged_center", -1),
  47232. (try_begin),
  47233. (party_slot_eq, ":marshal_party", slot_party_ai_state, spai_holding_center), #if commander is holding a center
  47234. (party_get_slot, ":marshal_object", ":marshal_party", slot_party_ai_object), #get commander's ai object (center they are holding)
  47235. (party_get_battle_opponent, ":besieger_enemy", ":marshal_object"), #get this object's battle opponent
  47236. (ge, ":besieger_enemy", 0),
  47237. (assign, ":besieged_center", ":marshal_object"),
  47238. (else_try),
  47239. (party_slot_eq, ":marshal_party", slot_party_ai_state, spai_engaging_army), #if commander is engaging an army
  47240. (party_get_slot, ":marshal_object", ":marshal_party", slot_party_ai_object), #get commander's ai object (army which they engaded)
  47241. (ge, ":marshal_object", 0), #if commander has an object
  47242. (neg|is_between, ":marshal_object", centers_begin, centers_end), #if this object is not a center, so it is a party
  47243. (party_is_active, ":marshal_object"),
  47244. (party_get_battle_opponent, ":besieged_center", ":marshal_object"), #get this object's battle opponent
  47245. (try_end),
  47246.  
  47247. (eq, ":besieged_center", ":current_ai_object"),
  47248.  
  47249. (assign, ":marshal_is_already_defending_a_center", 1),
  47250. (try_end),
  47251.  
  47252. (eq, ":marshal_is_already_defending_a_center", 0),
  47253.  
  47254. (store_mul, ":enemy_strength_multiplied", ":enemy_strength_near_most_threatened_center", 80),
  47255. (val_div, ":enemy_strength_multiplied", 100),
  47256. (lt, ":marshal_party_strength", ":enemy_strength_multiplied"),
  47257.  
  47258. (this_or_next|is_between, ":most_threatened_center", walled_centers_begin, walled_centers_end),
  47259. (neq, ":faction_no", "$players_kingdom"),
  47260.  
  47261. (assign, ":start_gathering", 1),
  47262. (try_end),
  47263.  
  47264. (this_or_next|eq, ":continue_gathering", 1),
  47265. (eq, ":start_gathering", 1),
  47266.  
  47267. (assign, ":action", sfai_gathering_army),
  47268. (assign, ":object", -1),
  47269. (str_store_party_name, s21, ":most_threatened_center"),
  47270. (str_store_string, s14, "str_we_should_prepare_to_defend_s21_but_we_should_gather_our_forces_until_we_are_strong_enough_to_engage_them"),
  47271.  
  47272. (try_begin),
  47273. (eq, ":faction_no", "$players_kingdom"),
  47274. (assign, "$g_gathering_reason", ":most_threatened_center"),
  47275. (try_end),
  47276.  
  47277. #3-DEFENSIVE ACTIONS : RIDE TO BREAK ENEMY SIEGE / DEFEAT ENEMIES NEAR OUR CENTER
  47278. (else_try),
  47279. (party_is_active, ":marshal_party"),
  47280. (is_between, ":most_threatened_center", walled_centers_begin, walled_centers_end),
  47281. (this_or_next|eq, ":current_ai_state", sfai_default), #MOTO not going to attack anyway
  47282. (this_or_next|eq, ":current_ai_state", sfai_feast), #MOTO not going to attack anyway (THIS is the emergency to stop feast)
  47283. (ge, ":threat_danger_level", ":target_value_level"),
  47284. (party_slot_ge, ":most_threatened_center", slot_center_is_besieged_by, 0),
  47285.  
  47286. (assign, ":action", sfai_attacking_enemies_around_center),
  47287. (assign, ":object", ":most_threatened_center"),
  47288.  
  47289. (str_store_party_name, s21, ":most_threatened_center"),
  47290. (str_store_string, s14, "str_we_should_ride_to_break_the_siege_of_s21"),
  47291.  
  47292. #3b - DEFEAT ENEMIES NEAR CENTER - similar to above, but a different string
  47293. (else_try),
  47294. (party_is_active, ":marshal_party"),
  47295. (this_or_next|eq, ":current_ai_state", sfai_default), #MOTO not going to attack anyway
  47296. (this_or_next|eq, ":current_ai_state", sfai_feast), #MOTO not going to attack anyway (THIS is the emergency to stop feast)
  47297. (ge, ":threat_danger_level", ":target_value_level"),
  47298. (is_between, ":most_threatened_center", villages_begin, villages_end),
  47299.  
  47300. (assign, ":action", sfai_attacking_enemies_around_center),
  47301. (assign, ":object", ":most_threatened_center"),
  47302. (str_store_party_name, s21, ":most_threatened_center"),
  47303. (str_store_string, s14, "str_we_should_ride_to_defeat_the_enemy_gathered_near_s21"),
  47304.  
  47305. #4-DEMOBILIZATION
  47306. #Let vassals attend their own business
  47307. (else_try),
  47308. (this_or_next|eq, ":current_ai_state", sfai_gathering_army),
  47309. (this_or_next|eq, ":current_ai_state", sfai_attacking_center),
  47310. (eq, ":current_ai_state", sfai_raiding_village),
  47311.  
  47312. (ge, ":hours_since_last_faction_rest", ":campaign_hour_limit"), #Effected by ratio of vassals
  47313. (ge, ":hours_at_current_state", 24),
  47314.  
  47315. #Ozan : I am adding some codes here because sometimes armies demobilize during last seconds of an important event like taking a castle, ext.
  47316. (assign, ":there_is_an_important_situation", 0),
  47317. (try_begin), #do not demobilize during taking a castle/town (fighting in the castle)
  47318. (is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  47319. (party_get_battle_opponent, ":besieger_party", ":current_ai_object"),
  47320. (party_is_active, ":besieger_party"),
  47321. (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  47322. (this_or_next|eq, ":besieger_faction", ":faction_no"),
  47323. (eq, ":besieger_faction", "fac_player_faction"),
  47324. (assign, ":there_is_an_important_situation", 1),
  47325. (else_try), #do not demobilize during besieging a siege (holding around castle)
  47326. (is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  47327. (party_get_slot, ":besieger_party", ":current_ai_object", slot_center_is_besieged_by),
  47328. (party_is_active, ":besieger_party"),
  47329. (store_faction_of_party, ":besieger_faction", ":besieger_party"),
  47330. (this_or_next|eq, ":besieger_faction", ":faction_no"),
  47331. (eq, ":besieger_faction", "fac_player_faction"),
  47332. (assign, ":there_is_an_important_situation", 1),
  47333. (else_try), #do not demobilize during raiding a village (holding around village)
  47334. (is_between, ":current_ai_object", centers_begin, centers_end),
  47335. (neg|is_between, ":current_ai_object", walled_centers_begin, walled_centers_end),
  47336. (party_slot_eq, ":current_ai_object", slot_village_state, svs_being_raided),
  47337. (assign, ":there_is_an_important_situation", 1),
  47338. (try_end),
  47339.  
  47340. (eq, ":there_is_an_important_situation", 0),
  47341. #end addition ozan
  47342.  
  47343. (assign, reg7, ":hours_since_last_faction_rest"),
  47344. (assign, reg8, ":campaign_hour_limit"),
  47345.  
  47346. (str_store_string, s14, "str_this_offensive_needs_to_wind_down_soon_so_the_vassals_can_attend_to_their_own_business"),
  47347. (assign, ":action", sfai_default),
  47348. (assign, ":object", -1),
  47349.  
  47350. #6-GATHERING BECAUSE OF NO REASON
  47351. #Start to gather the army
  47352. (else_try),
  47353. (party_is_active, ":marshal_party"),
  47354. (eq, ":at_peace_with_everyone", 0),
  47355.  
  47356.  
  47357. (eq, ":current_ai_state", sfai_default),
  47358. (ge, ":hours_since_last_offensive", 60),
  47359. (lt, ":hours_since_last_faction_rest", 120),
  47360.  
  47361. #There should not be a center as a precondition for attack
  47362. #Otherwise, we are unlikely to have a situation in which the army gathers, but does nothing -- which is important to have for role-playing purposes
  47363.  
  47364. (assign, ":action", sfai_gathering_army),
  47365. (assign, ":object", -1),
  47366. (str_store_string, s14, "str_it_is_time_to_go_on_the_offensive_and_we_must_first_assemble_the_army"),
  47367.  
  47368. (try_begin),
  47369. (eq, ":faction_no", "$players_kingdom"),
  47370. (assign, "$g_gathering_reason", -1),
  47371. (try_end),
  47372.  
  47373. #7-OFFENSIVE ACTIONS : CONTINUE GATHERING
  47374. (else_try),
  47375. (party_is_active, ":marshal_party"),
  47376. (eq, ":current_ai_state", sfai_gathering_army),
  47377. (eq, ":at_peace_with_everyone", 0),
  47378.  
  47379. (lt, ":hours_at_current_state", 54), #gather army for 54 hours
  47380.  
  47381. (lt, ":ratio_of_vassals_assembled", 12),
  47382.  
  47383. (str_store_string, s14, "str_we_must_continue_to_gather_the_army_before_we_ride_forth_on_an_offensive_operation"),
  47384. (assign, ":action", sfai_gathering_army),
  47385. (assign, ":object", -1),
  47386.  
  47387. #7-OFFENSIVE ACTIONS PART 2 : CONTINUE GATHERING
  47388. (else_try),
  47389. (assign, ":minimum_possible_attackable_target_value_level", 50),
  47390. (eq, ":at_peace_with_everyone", 0),
  47391.  
  47392. (try_begin), #agressive marshal
  47393. (troop_get_slot, ":reputation", ":troop_no", slot_lord_reputation_type),
  47394. (this_or_next|eq, ":reputation", lrep_martial),
  47395. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  47396. (eq, ":reputation", lrep_selfrighteous),
  47397. (val_mul, ":minimum_possible_attackable_target_value_level", 9),
  47398. (val_div, ":minimum_possible_attackable_target_value_level", 10),
  47399. (try_end),
  47400.  
  47401. (party_is_active, ":marshal_party"),
  47402. (eq, ":current_ai_state", sfai_gathering_army),
  47403.  
  47404. (try_begin),
  47405. (lt, ":hours_at_current_state", 6),
  47406. (assign, ":minimum_needed_target_value_level", 1500),
  47407. (else_try),
  47408. (lt, ":hours_at_current_state", 10),
  47409. (assign, ":minimum_needed_target_value_level", 1000),
  47410. (else_try),
  47411. (lt, ":hours_at_current_state", 14),
  47412. (assign, ":minimum_needed_target_value_level", 720),
  47413. (else_try),
  47414. (lt, ":hours_at_current_state", 18),
  47415. (assign, ":minimum_needed_target_value_level", 480),
  47416. (else_try),
  47417. (lt, ":hours_at_current_state", 22),
  47418. (assign, ":minimum_needed_target_value_level", 360),
  47419. (else_try),
  47420. (lt, ":hours_at_current_state", 26),
  47421. (assign, ":minimum_needed_target_value_level", 240),
  47422. (else_try),
  47423. (lt, ":hours_at_current_state", 30),
  47424. (assign, ":minimum_needed_target_value_level", 180),
  47425. (else_try),
  47426. (lt, ":hours_at_current_state", 34),
  47427. (assign, ":minimum_needed_target_value_level", 120),
  47428. (else_try),
  47429. (lt, ":hours_at_current_state", 38),
  47430. (assign, ":minimum_needed_target_value_level", 100),
  47431. (else_try),
  47432. (lt, ":hours_at_current_state", 42),
  47433. (assign, ":minimum_needed_target_value_level", 80),
  47434. (else_try),
  47435. (lt, ":hours_at_current_state", 46),
  47436. (assign, ":minimum_needed_target_value_level", 65),
  47437. (else_try),
  47438. (lt, ":hours_at_current_state", 50),
  47439. (assign, ":minimum_needed_target_value_level", 55),
  47440. (else_try),
  47441. (assign, ":minimum_needed_target_value_level", ":minimum_possible_attackable_target_value_level"),
  47442. (try_end),
  47443.  
  47444. (try_begin), #agressive marshal
  47445. (troop_get_slot, ":reputation", ":troop_no", slot_lord_reputation_type),
  47446. (this_or_next|eq, ":reputation", lrep_martial),
  47447. (this_or_next|eq, ":reputation", lrep_quarrelsome),
  47448. (eq, ":reputation", lrep_selfrighteous),
  47449. (val_mul, ":minimum_needed_target_value_level", 9),
  47450. (val_div, ":minimum_needed_target_value_level", 10),
  47451. (try_end),
  47452.  
  47453. (le, ":target_value_level", ":minimum_needed_target_value_level"),
  47454. (le, ":hours_at_current_state", 54),
  47455.  
  47456. (str_store_string, s14, "str_we_have_assembled_some_vassals"),
  47457. (assign, ":action", sfai_gathering_army),
  47458. (assign, ":object", -1),
  47459.  
  47460. #8-ATTACK AN ENEMY CENTER case 1, reconnaissance against walled center
  47461. #(else_try),
  47462. #(party_is_active, ":marshal_party"),
  47463. #(neq, ":current_ai_state", sfai_default),
  47464. #(neq, ":current_ai_state", sfai_feast),
  47465. #(is_between, ":center_to_attack", walled_centers_begin, walled_centers_end),
  47466.  
  47467. #(store_sub, ":faction_recce_slot", ":faction_no", kingdoms_begin),
  47468. #(val_add, ":faction_recce_slot", slot_center_last_reconnoitered_by_faction_time),
  47469. #(store_current_hours, ":hours_since_last_recon"),
  47470. #(party_get_slot, ":last_recon_time", ":center_to_attack", ":faction_recce_slot"),
  47471. #(val_sub, ":hours_since_last_recon", ":last_recon_time"),
  47472. #(this_or_next|eq, ":last_recon_time", 0),
  47473. #(gt, ":hours_since_last_recon", 96),
  47474.  
  47475. #(assign, ":action", sfai_attacking_center),
  47476. #(assign, ":object", ":center_to_attack"),
  47477. #(str_store_string, s14, "str_we_are_conducting_recce"),
  47478.  
  47479. #8-ATTACK AN ENEMY CENTER case 2, reconnaissance against village
  47480. #(else_try),
  47481. #(party_is_active, ":marshal_party"),
  47482. #(neq, ":current_ai_state", sfai_default),
  47483. #(neq, ":current_ai_state", sfai_feast),
  47484. #(is_between, ":center_to_attack", villages_begin, villages_end),
  47485.  
  47486. #(store_sub, ":faction_recce_slot", ":faction_no", kingdoms_begin),
  47487. #(val_add, ":faction_recce_slot", slot_center_last_reconnoitered_by_faction_time),
  47488. #(store_current_hours, ":hours_since_last_recon"),
  47489. #(party_get_slot, ":last_recon_time", ":center_to_attack", ":faction_recce_slot"),
  47490. #(val_sub, ":hours_since_last_recon", ":last_recon_time"),
  47491. #(this_or_next|eq, ":last_recon_time", 0),
  47492. #(gt, ":hours_since_last_recon", 96),
  47493.  
  47494.  
  47495. #(assign, ":action", sfai_raiding_village),
  47496. #(assign, ":object", ":center_to_attack"),
  47497. #(str_store_string, s14, "str_we_are_conducting_recce"),
  47498. (else_try),
  47499. (party_is_active, ":marshal_party"),
  47500. (neq, ":current_ai_state", sfai_default),
  47501. (neq, ":current_ai_state", sfai_feast),
  47502.  
  47503. (assign, ":center_to_attack", ":center_to_attack_only_marshal_and_followers"),
  47504.  
  47505. (is_between, ":center_to_attack", walled_centers_begin, walled_centers_end),
  47506.  
  47507. (ge, ":target_value_level", ":minimum_possible_attackable_target_value_level"),
  47508.  
  47509. (assign, ":action", sfai_attacking_center),
  47510. (assign, ":object", ":center_to_attack"),
  47511. (str_store_string, s14, "str_we_believe_the_fortress_will_be_worth_the_effort_to_take_it"),
  47512. (else_try),
  47513. (party_is_active, ":marshal_party"),
  47514. (neq, ":current_ai_state", sfai_default),
  47515. (neq, ":current_ai_state", sfai_feast),
  47516.  
  47517. (assign, ":center_to_attack", ":center_to_attack_only_marshal_and_followers"),
  47518.  
  47519. (is_between, ":center_to_attack", villages_begin, villages_end),
  47520.  
  47521. (ge, ":target_value_level", ":minimum_possible_attackable_target_value_level"),
  47522.  
  47523. (assign, ":action", sfai_raiding_village),
  47524. (assign, ":object", ":center_to_attack"),
  47525. (str_store_string, s14, "str_we_shall_leave_a_fiery_trail_through_the_heart_of_the_enemys_lands_targeting_the_wealthy_settlements_if_we_can"),
  47526.  
  47527. #9 -- DISBAND THE ARMY
  47528. (else_try),
  47529. (eq, ":current_ai_state", sfai_gathering_army),
  47530.  
  47531. (str_store_string, s14, "str_the_army_will_be_disbanded_because_we_have_been_waiting_too_long_without_a_target"),
  47532.  
  47533. (assign, ":action", sfai_default),
  47534. (assign, ":object", -1),
  47535. #OFFENSIVE OPERATIONS END
  47536.  
  47537. #FEAST-RELATED OPERATIONS BEGIN
  47538. #10-CONCLUDE CURRENT FEAST
  47539. (else_try),
  47540. (eq, ":current_ai_state", sfai_feast),
  47541. (gt, ":hours_at_current_state", 72),
  47542.  
  47543. (assign, ":action", sfai_default),
  47544. (assign, ":object", -1),
  47545. (str_store_string, s14, "str_it_is_time_for_the_feast_to_conclude"),
  47546.  
  47547. #11-CONTINE FEAST UNLESS THERE IS AN EMERGENCY
  47548. (else_try),
  47549. (eq, ":current_ai_state", sfai_feast),
  47550. (le, ":hours_at_current_state", 72),
  47551.  
  47552. (assign, ":action", sfai_feast),
  47553. (assign, ":object", ":current_ai_object"),
  47554. (str_store_string, s14, "str_we_should_continue_the_feast_unless_there_is_an_emergency"),
  47555.  
  47556. #12-HOLD A FEAST BECAUSE THE PLAYER WANTS TO ORGANIZE ONE
  47557. (else_try),
  47558. (check_quest_active, "qst_organize_feast"),
  47559. (eq, "$players_kingdom", ":faction_no"),
  47560.  
  47561. (quest_get_slot, ":target_center", "qst_organize_feast", slot_quest_target_center),
  47562.  
  47563. (assign, ":action", sfai_feast),
  47564. (assign, ":object", ":target_center"),
  47565. (str_store_string, s14, "str_you_had_wished_to_hold_a_feast"),
  47566.  
  47567. #13-HOLD A FEAST BECAUSE FEMALE PLAYER SCHEDULED TO GET MARRIED
  47568. (else_try),
  47569. (check_quest_active, "qst_wed_betrothed_female"),
  47570.  
  47571. (quest_get_slot, ":groom", "qst_wed_betrothed_female", slot_quest_giver_troop),
  47572. (troop_slot_eq, ":groom", slot_troop_prisoner_of_party, -1),
  47573.  
  47574. (store_faction_of_troop, ":groom_faction", ":groom"),
  47575. (eq, ":groom_faction", ":faction_no"),
  47576.  
  47577. (faction_get_slot, ":faction_leader", ":groom_faction", slot_faction_leader),
  47578.  
  47579. (assign, ":location_feast", -1),
  47580. (try_for_range, ":possible_location", walled_centers_begin, walled_centers_end),
  47581. (eq, ":location_feast", -1),
  47582. (party_slot_eq, ":possible_location", slot_town_lord, ":groom"),
  47583. (party_slot_ge, ":possible_location", slot_center_is_besieged_by, 0),
  47584. (assign, ":location_feast", ":possible_location"),
  47585. (try_end),
  47586.  
  47587. (try_for_range, ":possible_location", walled_centers_begin, walled_centers_end),
  47588. (eq, ":location_feast", -1),
  47589. (party_slot_eq, ":possible_location", slot_town_lord, ":faction_leader"),
  47590. (party_slot_ge, ":possible_location", slot_center_is_besieged_by, 0),
  47591. (assign, ":location_feast", ":possible_location"),
  47592. (try_end),
  47593.  
  47594. (is_between, ":location_feast", walled_centers_begin, walled_centers_end),
  47595.  
  47596. (assign, ":action", sfai_feast),
  47597. (assign, ":object", ":location_feast"),
  47598. (str_store_string, s14, "str_your_wedding_day_approaches_my_lady"),
  47599.  
  47600. #14-HOLD A FEAST BECAUSE A MALE CHARACTER WANTS TO GET MARRIED
  47601. (else_try),
  47602. (check_quest_active, "qst_wed_betrothed"),
  47603. (neg|quest_slot_ge, "qst_wed_betrothed", slot_quest_expiration_days, 362),
  47604.  
  47605. (quest_get_slot, ":bride", "qst_wed_betrothed", slot_quest_target_troop),
  47606. (call_script, "script_get_kingdom_lady_social_determinants", ":bride"),
  47607. (assign, ":feast_host", reg0),
  47608. (store_faction_of_troop, ":feast_host_faction", ":feast_host"),
  47609. (eq, ":feast_host_faction", ":faction_no"),
  47610.  
  47611. (troop_slot_eq, ":feast_host", slot_troop_prisoner_of_party, -1),
  47612. (assign, ":wedding_venue", reg1),
  47613.  
  47614. (is_between, ":wedding_venue", centers_begin, centers_end),
  47615. (party_slot_eq, ":wedding_venue", slot_center_is_besieged_by, -1),
  47616.  
  47617. (assign, ":action", sfai_feast),
  47618. (assign, ":object", ":wedding_venue"),
  47619. (str_store_string, s14, "str_your_wedding_day_approaches"),
  47620.  
  47621. #15-HOLD A FEAST BECAUSE AN NPC WANTS TO GET MARRIED
  47622. (else_try),
  47623. (ge, ":hours_since_last_feast_start", 192), #If at least eight days past last feast start time
  47624.  
  47625. (assign, ":location_feast", -1),
  47626.  
  47627. (try_for_range, ":kingdom_lady", kingdom_ladies_begin, kingdom_ladies_end),
  47628. (troop_get_slot, ":groom", ":kingdom_lady", slot_troop_betrothed),
  47629. (gt, ":groom", 0), #not the player
  47630.  
  47631. (store_faction_of_troop, ":lady_faction", ":kingdom_lady"),
  47632. (store_faction_of_troop, ":groom_faction", ":groom"),
  47633.  
  47634. (try_begin), #The groom checks if he wants to continue or break off relations. This causes actions, rather than just returns a value, so it probably should be moved elsewhere
  47635. (troop_slot_ge, ":groom", slot_troop_prisoner_of_party, 0),
  47636. (else_try),
  47637. (neq, ":groom_faction", ":lady_faction"),
  47638. (neq, ":groom_faction", "fac_player_faction"),
  47639. (call_script, "script_courtship_event_lady_break_relation_with_suitor", ":kingdom_lady", ":groom"),
  47640. (else_try),
  47641. (eq, ":lady_faction", ":faction_no"),
  47642. (store_current_hours, ":hours_since_betrothal"),
  47643. (troop_get_slot, ":betrothal_time", ":kingdom_lady", slot_troop_betrothal_time),
  47644. (val_sub, ":hours_since_betrothal", ":betrothal_time"),
  47645. (ge, ":hours_since_betrothal", 719), #30 days
  47646.  
  47647. (call_script, "script_get_kingdom_lady_social_determinants", ":kingdom_lady"),
  47648. (assign, ":wedding_venue", reg1),
  47649.  
  47650. (assign, ":location_feast", ":wedding_venue"),
  47651. (assign, ":final_bride", ":kingdom_lady"),
  47652. (assign, ":final_groom", ":groom"),
  47653. (try_end),
  47654. (try_end),
  47655.  
  47656. (ge, ":location_feast", centers_begin),
  47657.  
  47658. (assign, ":action", sfai_feast),
  47659. (assign, ":object", ":location_feast"),
  47660.  
  47661. (str_store_troop_name, s22, ":final_bride"),
  47662. (str_store_troop_name, s23, ":final_groom"),
  47663. (str_store_string, s14, "str_s22_and_s23_wish_to_marry"),
  47664.  
  47665. #16-HOLD A FEAST ANYWAY
  47666. (else_try),
  47667. (eq, ":current_ai_state", sfai_default),
  47668. (gt, ":hours_since_last_feast_start", 240), #If at least 10 days past after last feast. (added by ozan)
  47669.  
  47670. (assign, ":location_high_score", 0),
  47671. (assign, ":location_feast", -1),
  47672.  
  47673. (try_for_range, ":location", walled_centers_begin, walled_centers_end),
  47674. (store_faction_of_party, ":location_faction", ":location"),
  47675. (eq, ":location_faction", ":faction_no"),
  47676.  
  47677. (try_begin),
  47678. (neg|party_slot_eq, ":location", slot_village_state, svs_under_siege),
  47679. (party_get_slot, ":location_lord", ":location", slot_town_lord),
  47680. (is_between, ":location_lord", active_npcs_begin, active_npcs_end),
  47681. (troop_get_slot, ":location_score", ":location_lord", slot_troop_renown),
  47682. (store_random_in_range, ":random", 0, 1000), #will probably be king or senior lord
  47683. (val_add, ":location_score", ":random"),
  47684. (gt, ":location_score", ":location_high_score"),
  47685. (assign, ":location_high_score", ":location_score"),
  47686. (assign, ":location_feast", ":location"),
  47687. (else_try), #do not start new feasts if any place is under siege or being raided
  47688. (this_or_next|party_slot_eq, ":location", slot_village_state, svs_under_siege),
  47689. (party_slot_eq, ":location", slot_village_state, svs_being_raided),
  47690. (assign, ":location_high_score", 9999),
  47691. (assign, ":location_feast", -1),
  47692. (try_end),
  47693. (try_end),
  47694.  
  47695. (is_between, ":location_feast", walled_centers_begin, walled_centers_end),
  47696. (party_get_slot, ":feast_host", ":location_feast", slot_town_lord),
  47697. (troop_slot_eq, ":feast_host", slot_troop_prisoner_of_party, -1),
  47698.  
  47699. (assign, ":action", sfai_feast),
  47700. (assign, ":object", ":location_feast"),
  47701. (str_store_string, s14, "str_it_has_been_a_long_time_since_the_lords_of_the_realm_gathered_for_a_feast"),
  47702.  
  47703. #17-DO NOTHING
  47704. (else_try),
  47705. (neq, ":current_ai_state", sfai_default),
  47706.  
  47707. (assign, ":action", sfai_default),
  47708. (assign, ":object", -1),
  47709. (str_store_string, s14, "str_the_circumstances_which_led_to_this_decision_no_longer_apply_so_we_should_stop_and_reconsider_shortly"),
  47710.  
  47711. #18-DO NOTHING
  47712. (else_try),
  47713. (eq, ":current_ai_state", sfai_default),
  47714.  
  47715. (eq, ":at_peace_with_everyone", 1),
  47716.  
  47717. (assign, ":action", sfai_default),
  47718. (assign, ":object", -1),
  47719. (str_store_string, s14, "str_we_are_currently_at_peace"),
  47720. (else_try),
  47721. (eq, ":current_ai_state", sfai_default),
  47722. (faction_slot_eq, ":faction_no", slot_faction_marshall, -1),
  47723. (assign, ":action", sfai_default),
  47724. (assign, ":object", -1),
  47725. (str_store_string, s14, "str_we_are_waiting_for_selection_of_marshal"),
  47726.  
  47727. (else_try),
  47728. (eq, ":current_ai_state", sfai_default),
  47729.  
  47730. (assign, ":action", sfai_default),
  47731. (assign, ":object", -1),
  47732. (str_store_string, s14, "str_the_vassals_still_need_time_to_attend_to_their_own_business"),
  47733. (try_end),
  47734.  
  47735. (assign, reg0, ":action"),
  47736. (assign, reg1, ":object"),
  47737. ]),
  47738.  
  47739. (
  47740. "faction_last_reconnoitered_center", #This is called from within decide_faction_ai, or from
  47741. [
  47742. (store_script_param, ":faction_no", 1),
  47743. (store_script_param, ":center_no", 2),
  47744.  
  47745. (store_sub, ":faction_recce_slot", ":faction_no", kingdoms_begin),
  47746. (val_add, ":faction_recce_slot", slot_center_last_reconnoitered_by_faction_time),
  47747. (store_current_hours, ":hours_since_last_recon"),
  47748. (party_get_slot, ":last_recon_time", ":center_no", ":faction_recce_slot"),
  47749.  
  47750. (try_begin),
  47751. (lt, ":last_recon_time", 1),
  47752. (assign, ":hours_since_last_recon", 1000),
  47753. (else_try),
  47754. (val_sub, ":hours_since_last_recon", ":last_recon_time"),
  47755. (try_end),
  47756.  
  47757. (assign, reg0, ":hours_since_last_recon"),
  47758. (assign, reg1, ":last_recon_time"),
  47759. ]),
  47760.  
  47761. (
  47762. "reduce_exact_number_to_estimate",
  47763. #This is used to simulate limited intelligence
  47764. #It is roughly analogous to the descriptive strings which the player will receive from alarms
  47765. #Information is presumed to be accurate for four days
  47766. #This is obviously cheating for the AI, as the AI will have exact info for four days, and no info at all after that.
  47767. #It would be fairly easy to log the strength at a center when it is scouted, if we want, but I have not done that at this point,
  47768. #The AI also has a hive mind -- ie, each party knows what its allies are thinking. In this, AI factions have an advantage over the player
  47769. #It would be a simple matter to create a set of arrays in which each party's knowledge is individually updated, but that would also take up a lot of data space
  47770.  
  47771. [
  47772. (store_script_param, ":exact_number", 1),
  47773.  
  47774. (try_begin),
  47775. (lt, ":exact_number", 500),
  47776. (assign, ":estimate", 0),
  47777. (else_try),
  47778. (lt, ":exact_number", 1000),
  47779. (assign, ":estimate", 750),
  47780. (else_try),
  47781. (lt, ":exact_number", 2000),
  47782. (assign, ":estimate", 1500),
  47783. (else_try),
  47784. (lt, ":exact_number", 4000),
  47785. (assign, ":estimate", 3000),
  47786. (else_try),
  47787. (lt, ":exact_number", 8000),
  47788. (assign, ":estimate", 6000),
  47789. (else_try),
  47790. (lt, ":exact_number", 16000),
  47791. (assign, ":estimate", 12000),
  47792. (else_try),
  47793. (assign, ":estimate", 24000),
  47794. (try_end),
  47795.  
  47796. (assign, reg0, ":estimate"),
  47797. ]),
  47798.  
  47799. #script_calculate_castle_prosperities_by_using_its_villages
  47800. (
  47801. "calculate_castle_prosperities_by_using_its_villages", #This is called from within decide_faction_ai, or from
  47802. [
  47803. (try_for_range, ":cur_castle", castles_begin, castles_end),
  47804. (assign, ":total_prosperity", 0),
  47805. (assign, ":total_villages", 0),
  47806.  
  47807. (try_for_range, ":cur_village", villages_begin, villages_end),
  47808. (party_get_slot, ":bound_center", ":cur_village", slot_village_bound_center),
  47809. (eq, ":cur_castle", ":bound_center"),
  47810.  
  47811. (party_get_slot, ":village_prosperity", ":cur_village", slot_town_prosperity),
  47812.  
  47813. (val_add, ":total_prosperity", ":village_prosperity"),
  47814. (val_add, ":total_villages", 1),
  47815. (try_end),
  47816.  
  47817. (try_begin),
  47818. (store_div, ":castle_prosperity", ":total_prosperity", ":total_villages"),
  47819. (else_try),
  47820. (assign, ":castle_prosperity", 50),
  47821. (try_end),
  47822.  
  47823. (party_set_slot, ":cur_castle", slot_town_prosperity, ":castle_prosperity"),
  47824. (try_end),
  47825. ]),
  47826.  
  47827. #script_initialize_tavern_variables
  47828. (
  47829. "initialize_tavern_variables",
  47830. [
  47831. (assign, "$g_main_attacker_agent", 0),
  47832. (assign, "$g_attacker_drawn_weapon", 0),
  47833. (assign, "$g_start_belligerent_drunk_fight", 0),
  47834. (assign, "$g_start_hired_assassin_fight", 0),
  47835. (assign, "$g_belligerent_drunk_leaving", 0),
  47836. ]),
  47837.  
  47838. #script_prepare_alley_to_fight
  47839. (
  47840. "prepare_alley_to_fight",
  47841. [
  47842. (party_get_slot, ":scene_no", "$current_town", slot_town_alley),
  47843.  
  47844. #(store_faction_of_party, ":faction_no", "$current_town"),
  47845.  
  47846. (modify_visitors_at_site, ":scene_no"),
  47847.  
  47848. (reset_visitors),
  47849. (set_visitor, 0, "trp_player"),
  47850.  
  47851. #(try_begin),
  47852. # (eq, ":faction_no", "fac_kingdom_1"), #swadian
  47853. # (assign, ":bandit_troop", "trp_steppe_bandit"),
  47854. #(else_try),
  47855. # (eq, ":faction_no", "fac_kingdom_2"), #vaegir
  47856. # (assign, ":bandit_troop", "trp_taiga_bandit"),
  47857. #(else_try),
  47858. # (eq, ":faction_no", "fac_kingdom_3"), #khergit
  47859. # (assign, ":bandit_troop", "trp_mountain_bandit"),
  47860. #(else_try),
  47861. # (eq, ":faction_no", "fac_kingdom_4"), #nord
  47862. # (assign, ":bandit_troop", "trp_sea_raider"),
  47863. #(else_try),
  47864. # (eq, ":faction_no", "fac_kingdom_5"), #rhodok
  47865. # (assign, ":bandit_troop", "trp_forest_bandit"),
  47866. #(else_try),
  47867. # (eq, ":faction_no", "fac_kingdom_6"), #sarradin
  47868. # (assign, ":bandit_troop", "trp_desert_bandit"),
  47869. #(try_end),
  47870.  
  47871. #(set_visitor, 3, ":bandit_troop"),
  47872. (set_visitor, 3, "trp_bandit"),
  47873.  
  47874. (assign, "$talked_with_merchant", 0),
  47875. (set_jump_mission, "mt_alley_fight"),
  47876. (jump_to_scene, ":scene_no"),
  47877. (change_screen_mission),
  47878. ]),
  47879.  
  47880. #script_prepare_town_to_fight
  47881. (
  47882. "prepare_town_to_fight",
  47883. [
  47884. (str_store_party_name_link, s9, "$g_starting_town"),
  47885. (str_store_string, s2, "str_save_town_from_bandits"),
  47886. (call_script, "script_start_quest", "qst_save_town_from_bandits", "$g_talk_troop"),
  47887.  
  47888. (assign, "$g_mt_mode", tcm_default),
  47889. (store_faction_of_party, ":town_faction", "$current_town"),
  47890. (faction_get_slot, ":tier_2_troop", ":town_faction", slot_faction_tier_3_troop),
  47891. (faction_get_slot, ":tier_3_troop", ":town_faction", slot_faction_tier_3_troop),
  47892. (faction_get_slot, ":tier_4_troop", ":town_faction", slot_faction_tier_4_troop),
  47893.  
  47894. (party_get_slot, ":town_scene", "$current_town", slot_town_center),
  47895. (modify_visitors_at_site, ":town_scene"),
  47896. (reset_visitors),
  47897.  
  47898. #people spawned at #32, #33, #34, #35, #36, #37, #38 and #39 are town walkers.
  47899. (try_begin),
  47900. #(eq, "$town_nighttime", 0),
  47901. (try_for_range, ":walker_no", 0, num_town_walkers),
  47902. (store_add, ":troop_slot", slot_center_walker_0_troop, ":walker_no"),
  47903. (party_get_slot, ":walker_troop_id", "$current_town", ":troop_slot"),
  47904. (gt, ":walker_troop_id", 0),
  47905. (store_add, ":entry_no", town_walker_entries_start, ":walker_no"),
  47906. (set_visitor, ":entry_no", ":walker_troop_id"),
  47907. (try_end),
  47908. (try_end),
  47909.  
  47910. #guards will be spawned at #25, #26 and #27
  47911. (set_visitors, 25, ":tier_2_troop", 1),
  47912. (set_visitors, 26, ":tier_3_troop", 1),
  47913. (set_visitors, 27, ":tier_4_troop", 1),
  47914.  
  47915. (set_visitors, 10, "trp_looter", 1),
  47916. (set_visitors, 11, "trp_bandit", 1),
  47917. (set_visitors, 12, "trp_looter", 1),
  47918.  
  47919. (store_faction_of_party, ":starting_town_faction", "$g_starting_town"),
  47920. (try_begin),
  47921. (eq, ":starting_town_faction", "fac_kingdom_1"),
  47922. (assign, ":troop_of_merchant", "trp_swadian_merchant"),
  47923. #(assign, ":troop_of_bandit", "trp_forest_bandit"),
  47924. (else_try),
  47925. (eq, ":starting_town_faction", "fac_kingdom_2"),
  47926. (assign, ":troop_of_merchant", "trp_vaegir_merchant"),
  47927. #(assign, ":troop_of_bandit", "trp_mountain_bandit"),
  47928. (else_try),
  47929. (eq, ":starting_town_faction", "fac_kingdom_3"),
  47930. (assign, ":troop_of_merchant", "trp_khergit_merchant"),
  47931. #(assign, ":troop_of_bandit", "trp_steppe_bandit"),
  47932. (else_try),
  47933. (eq, ":starting_town_faction", "fac_kingdom_4"),
  47934. (assign, ":troop_of_merchant", "trp_nord_merchant"),
  47935. #(assign, ":troop_of_bandit", "trp_sea_raider"),
  47936. (else_try),
  47937. (eq, ":starting_town_faction", "fac_kingdom_5"),
  47938. (assign, ":troop_of_merchant", "trp_rhodok_merchant"),
  47939. #(assign, ":troop_of_bandit", "trp_mountain_bandit"),
  47940. (else_try),
  47941. (eq, ":starting_town_faction", "fac_kingdom_6"),
  47942. (assign, ":troop_of_merchant", "trp_sarranid_merchant"),
  47943. #(assign, ":troop_of_bandit", "trp_desert_bandit"),
  47944. (try_end),
  47945. (str_store_troop_name, s10, ":troop_of_merchant"),
  47946.  
  47947. (set_visitors, 24, "trp_looter", 1),
  47948. (set_visitors, 2, "trp_looter", 2),
  47949. (set_visitors, 4, "trp_looter", 1),
  47950. (set_visitors, 5, "trp_looter", 2),
  47951. (set_visitors, 6, "trp_looter", 1),
  47952. (set_visitors, 7, "trp_looter", 1),
  47953.  
  47954. (set_visitors, 3, ":troop_of_merchant", 1),
  47955.  
  47956. (set_jump_mission,"mt_town_fight"),
  47957. (jump_to_scene, ":town_scene"),
  47958. (change_screen_mission),
  47959. ]),
  47960.  
  47961. (
  47962. "change_player_right_to_rule",
  47963. [
  47964. (store_script_param_1, ":right_to_rule_dif"),
  47965. (val_add, "$player_right_to_rule", ":right_to_rule_dif"),
  47966. (val_clamp, "$player_right_to_rule", 0, 100),
  47967. (try_begin),
  47968. (gt, ":right_to_rule_dif", 0),
  47969. (display_message, "@You gain right to rule."),
  47970. (else_try),
  47971. (lt, ":right_to_rule_dif", 0),
  47972. (display_message, "@You lose right to rule."),
  47973. (try_end),
  47974. ]),
  47975.  
  47976. ("indict_lord_for_treason",#originally included in simple_triggers. Needed to be moved here to allow player to indict
  47977. [
  47978. (store_script_param, ":troop_no", 1),
  47979. (store_script_param, ":faction", 2),
  47980.  
  47981. (troop_get_type, reg4, ":troop_no"),
  47982.  
  47983. (try_for_range, ":center", centers_begin, centers_end), #transfer properties to liege
  47984. (party_slot_eq, ":center", slot_town_lord, ":troop_no"),
  47985. (party_set_slot, ":center", slot_town_lord, stl_unassigned),
  47986. (try_end),
  47987.  
  47988. (faction_get_slot, ":faction_leader", ":faction", slot_faction_leader),
  47989. (call_script, "script_troop_get_relation_with_troop", ":troop_no", ":faction_leader"),
  47990. (assign, ":liege_to_lord_relation", reg0),
  47991. (store_sub, ":base_relation_modifier", -150, ":liege_to_lord_relation"),
  47992. (val_div, ":base_relation_modifier", 40),#-1 at -100, -2 at -70, -3 at -30,etc.
  47993. (val_min, ":base_relation_modifier", -1),
  47994.  
  47995. #Indictments, cont: Influence relations
  47996. (try_for_range, ":active_npc", active_npcs_begin, active_npcs_end), #this effects all lords in all factions
  47997. (store_faction_of_troop, ":active_npc_faction", ":active_npc"),
  47998. (eq, ":faction", ":active_npc_faction"),
  47999.  
  48000. (call_script, "script_troop_get_family_relation_to_troop", ":troop_no", ":active_npc"),
  48001. (assign, ":family_relation", reg0),
  48002.  
  48003. (assign, ":relation_modifier", ":base_relation_modifier"),
  48004. (try_begin),
  48005. (gt, ":family_relation", 1),
  48006. (store_div, ":family_multiplier", reg0, 3),
  48007. (val_sub, ":relation_modifier", ":family_multiplier"),
  48008. (try_end),
  48009.  
  48010. (lt, ":relation_modifier", 0),
  48011.  
  48012. (call_script, "script_troop_change_relation_with_troop", ":faction_leader", ":active_npc", ":relation_modifier"),
  48013. (val_add, "$total_indictment_changes", ":relation_modifier"),
  48014. (try_begin),
  48015. (eq, "$cheat_mode", 1),
  48016. (str_store_troop_name, s17, ":active_npc"),
  48017. (str_store_troop_name, s18, ":faction_leader"),
  48018.  
  48019. (assign, reg3, ":relation_modifier"),
  48020. (display_message, "str_trial_influences_s17s_relation_with_s18_by_reg3"),
  48021. (try_end),
  48022. (try_end),
  48023.  
  48024. #Indictments, cont: Check for other factions
  48025. (assign, ":new_faction", "fac_outlaws"),
  48026. (try_begin),
  48027. (eq, ":troop_no", "trp_player"),
  48028. (assign, ":new_faction", 0), #kicked out of faction
  48029. (else_try),
  48030. (call_script, "script_lord_find_alternative_faction", ":troop_no"),
  48031. (assign, ":new_faction", reg0),
  48032. (try_end),
  48033.  
  48034. #Indictments, cont: Finalize where the lord goes
  48035. (try_begin),
  48036. (is_between, ":new_faction", kingdoms_begin, kingdoms_end),
  48037.  
  48038. (try_begin),
  48039. (ge, "$cheat_mode", 1),
  48040. (str_store_troop_name, s4, ":troop_no"),
  48041. (display_message, "@{!}DEBUG - {s4} faction changed in indictment"),
  48042. (try_end),
  48043.  
  48044. (call_script, "script_change_troop_faction", ":troop_no", ":new_faction"),
  48045. (try_begin), #new-begin
  48046. (neq, ":new_faction", "fac_player_supporters_faction"),
  48047. (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_inactive),
  48048. (troop_set_slot, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
  48049. (try_end), #new-end
  48050. (str_store_faction_name, s10, ":new_faction"),
  48051. (str_store_string, s11, "str_with_the_s10"),
  48052. (else_try),
  48053. (neq, ":troop_no", "trp_player"),
  48054. (call_script, "script_change_troop_faction", ":troop_no", "fac_outlaws"),
  48055. (str_store_string, s11, "str_outside_calradia"),
  48056. (else_try),
  48057. (eq, ":troop_no", "trp_player"),
  48058. (call_script, "script_player_leave_faction", 1),
  48059. (try_end),
  48060.  
  48061. #Indictments, cont: Set up string
  48062. (try_begin),
  48063. (eq, ":troop_no", "trp_player"),
  48064. (str_store_string, s9, "str_you_have_been_indicted_for_treason_to_s7_your_properties_have_been_confiscated_and_you_would_be_well_advised_to_flee_for_your_life"),
  48065. (else_try),
  48066. (str_store_troop_name, s4, ":troop_no"),
  48067. (str_store_faction_name, s5, ":faction"),
  48068. (str_store_troop_name, s6, ":faction_leader"),
  48069.  
  48070. (troop_get_type, reg4, ":troop_no"),
  48071. (str_store_string, s9, "str_by_order_of_s6_s4_of_the_s5_has_been_indicted_for_treason_the_lord_has_been_stripped_of_all_reg4herhis_properties_and_has_fled_for_reg4herhis_life_he_is_rumored_to_have_gone_into_exile_s11"),
  48072. (try_end),
  48073. (display_message, "@{!}{s9}"),
  48074.  
  48075. #Indictments, cont: Remove party
  48076. (troop_get_slot, ":led_party", ":troop_no", slot_troop_leaded_party),
  48077. (try_begin),
  48078. (party_is_active, ":led_party"),
  48079. (neq, ":led_party", "p_main_party"),
  48080. (remove_party, ":led_party"),
  48081. (troop_set_slot, ":troop_no", slot_troop_leaded_party, -1),
  48082. (try_end),
  48083.  
  48084. (try_begin),
  48085. (eq, "$cheat_mode", 1),
  48086. (this_or_next|eq, ":faction", "$players_kingdom"),
  48087. (eq, ":new_faction", "$players_kingdom"),
  48088. (call_script, "script_add_notification_menu", "mnu_notification_treason_indictment", ":troop_no", ":faction"),
  48089. (try_end),
  48090. ]),
  48091.  
  48092.  
  48093. # script_give_center_to_faction_aux
  48094. # Input: arg1 = center_no, arg2 = faction
  48095. ("give_center_to_faction_while_maintaining_lord",
  48096. [
  48097. (store_script_param_1, ":center_no"),
  48098. (store_script_param_2, ":faction_no"),
  48099.  
  48100. (store_faction_of_party, ":old_faction", ":center_no"),
  48101. (party_set_slot, ":center_no", slot_center_ex_faction, ":old_faction"),
  48102. (party_set_faction, ":center_no", ":faction_no"),
  48103.  
  48104. (try_begin),
  48105. (party_slot_eq, ":center_no", slot_party_type, spt_village),
  48106. (party_get_slot, ":farmer_party", ":center_no", slot_village_farmer_party),
  48107. (gt, ":farmer_party", 0),
  48108. (party_is_active, ":farmer_party"),
  48109. (party_set_faction, ":farmer_party", ":faction_no"),
  48110. (try_end),
  48111.  
  48112. (call_script, "script_update_faction_notes", ":faction_no"),
  48113. (call_script, "script_update_center_notes", ":center_no"),
  48114.  
  48115. (try_for_range, ":other_center", centers_begin, centers_end),
  48116. (party_slot_eq, ":other_center", slot_village_bound_center, ":center_no"),
  48117. (call_script, "script_give_center_to_faction_while_maintaining_lord", ":other_center", ":faction_no"),
  48118. (try_end),
  48119. ]),
  48120.  
  48121. # script_check_concilio_calradi_achievement
  48122. ("check_concilio_calradi_achievement",
  48123. [
  48124. (try_begin),
  48125. (eq, "$players_kingdom", "fac_player_supporters_faction"),
  48126. (faction_get_slot, ":player_faction_king", "fac_player_supporters_faction", slot_faction_leader),
  48127. (eq, ":player_faction_king", "trp_player"),
  48128. (assign, ":number_of_vassals", 0),
  48129. (try_for_range, ":cur_troop", active_npcs_begin, active_npcs_end),
  48130. (troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
  48131. (store_faction_of_troop, ":cur_faction", ":cur_troop"),
  48132. (eq, ":cur_faction", "fac_player_supporters_faction"),
  48133. (val_add, ":number_of_vassals", 1),
  48134. (try_end),
  48135. (ge, ":number_of_vassals", 3),
  48136. (unlock_achievement, ACHIEVEMENT_CONCILIO_CALRADI),
  48137. (try_end),
  48138. ]),
  48139.  
  48140. # script_refresh_center_inventories
  48141. ("refresh_center_inventories",
  48142. [
  48143. (set_merchandise_modifier_quality,150),
  48144. (reset_item_probabilities,100),
  48145.  
  48146. # Add trade goods to merchant inventories
  48147. (try_for_range,":cur_center",towns_begin, towns_end),
  48148. (party_get_slot,":cur_merchant",":cur_center",slot_town_merchant),
  48149. (reset_item_probabilities,100),
  48150. (assign, ":total_production", 0),
  48151. (try_for_range, ":cur_goods", trade_goods_begin, trade_goods_end),
  48152. (call_script, "script_center_get_production", ":cur_center", ":cur_goods"),
  48153. (assign, ":cur_production", reg0),
  48154.  
  48155. (try_for_range, ":cur_village", villages_begin, villages_end),
  48156. (party_slot_eq, ":cur_village", slot_village_bound_center, ":cur_center"),
  48157. (call_script, "script_center_get_production", ":cur_village", ":cur_goods"),
  48158. (val_div, reg0, 3),
  48159. (val_add, ":cur_production", reg0),
  48160. (try_end),
  48161.  
  48162. (val_max, ":cur_production", 1),
  48163. (val_mul, ":cur_production", 4),
  48164.  
  48165. (val_add, ":total_production", ":cur_production"),
  48166. (try_end),
  48167.  
  48168. (party_get_slot, ":town_prosperity", ":cur_center", slot_town_prosperity),
  48169. (assign, ":number_of_items_in_town", 25),
  48170.  
  48171. (try_begin), #1.0x - 2.0x (50 - 100 prosperity)
  48172. (ge, ":town_prosperity", 50),
  48173. (store_sub, ":ratio", ":town_prosperity", 50),
  48174. (val_mul, ":ratio", 2),
  48175. (val_add, ":ratio", 100),
  48176. (val_mul, ":number_of_items_in_town", ":ratio"),
  48177. (val_div, ":number_of_items_in_town", 100),
  48178. (else_try), #0.5x - 1.0x (0 - 50 prosperity)
  48179. (store_sub, ":ratio", ":town_prosperity", 50),
  48180. (val_add, ":ratio", 100),
  48181. (val_mul, ":number_of_items_in_town", ":ratio"),
  48182. (val_div, ":number_of_items_in_town", 100),
  48183. (try_end),
  48184.  
  48185. (val_clamp, ":number_of_items_in_town", 10, 40),
  48186.  
  48187. (try_begin),
  48188. (is_between, ":cur_center", castles_begin, castles_end),
  48189. (val_div, ":number_of_items_in_town", 2),
  48190. (try_end),
  48191.  
  48192. (try_for_range, ":cur_goods", trade_goods_begin, trade_goods_end),
  48193. (call_script, "script_center_get_production", ":cur_center", ":cur_goods"),
  48194. (assign, ":cur_production", reg0),
  48195.  
  48196. (try_for_range, ":cur_village", villages_begin, villages_end),
  48197. (party_slot_eq, ":cur_village", slot_village_bound_center, ":cur_center"),
  48198. (call_script, "script_center_get_production", ":cur_village", ":cur_goods"),
  48199. (val_div, reg0, 3),
  48200. (val_add, ":cur_production", reg0),
  48201. (try_end),
  48202.  
  48203. (val_max, ":cur_production", 1),
  48204. (val_mul, ":cur_production", 4),
  48205.  
  48206. (val_mul, ":cur_production", ":number_of_items_in_town"),
  48207. (val_mul, ":cur_production", 100),
  48208. (val_div, ":cur_production", ":total_production"),
  48209. (set_item_probability_in_merchandise, ":cur_goods", ":cur_production"),
  48210. (try_end),
  48211.  
  48212. (troop_clear_inventory, ":cur_merchant"),
  48213. (troop_add_merchandise, ":cur_merchant", itp_type_goods, ":number_of_items_in_town"),
  48214.  
  48215. (troop_ensure_inventory_space, ":cur_merchant", 20),
  48216. (troop_sort_inventory, ":cur_merchant"),
  48217. (store_troop_gold, ":cur_gold",":cur_merchant"),
  48218. (lt,":cur_gold",1500),
  48219. (store_random_in_range,":new_gold",500,1000),
  48220. (call_script, "script_troop_add_gold", ":cur_merchant", ":new_gold"),
  48221. (try_end),
  48222. ]),
  48223.  
  48224. # script_refresh_center_armories
  48225. ("refresh_center_armories",
  48226. [
  48227. (reset_item_probabilities, 100),
  48228. (set_merchandise_modifier_quality, 150),
  48229. (try_for_range, ":cur_merchant", armor_merchants_begin, armor_merchants_end),
  48230. (store_sub, ":cur_town", ":cur_merchant", armor_merchants_begin),
  48231. (val_add, ":cur_town", towns_begin),
  48232. (troop_clear_inventory, ":cur_merchant"),
  48233. (party_get_slot, ":cur_faction", ":cur_town", slot_center_original_faction),
  48234. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_body_armor, 16),
  48235. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_head_armor, 16),
  48236. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_foot_armor, 8),
  48237. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_hand_armor, 4),
  48238. (troop_ensure_inventory_space, ":cur_merchant", merchant_inventory_space),
  48239. (troop_sort_inventory, ":cur_merchant"),
  48240. (store_troop_gold, reg6, ":cur_merchant"),
  48241. (lt, reg6, 1000),
  48242. (store_random_in_range, ":new_gold", 250, 500),
  48243. (call_script, "script_troop_add_gold", ":cur_merchant", ":new_gold"),
  48244. (end_try),
  48245. ]),
  48246.  
  48247. # script_refresh_center_weaponsmiths
  48248. ("refresh_center_weaponsmiths",
  48249. [
  48250. (reset_item_probabilities, 100),
  48251. (set_merchandise_modifier_quality, 150),
  48252. (try_for_range, ":cur_merchant", weapon_merchants_begin, weapon_merchants_end),
  48253. (store_sub, ":cur_town", ":cur_merchant", weapon_merchants_begin),
  48254. (val_add, ":cur_town", towns_begin),
  48255. (troop_clear_inventory, ":cur_merchant"),
  48256. (party_get_slot, ":cur_faction", ":cur_town", slot_center_original_faction),
  48257. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_one_handed_wpn, 5),
  48258. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_two_handed_wpn, 5),
  48259. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_polearm, 5),
  48260. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_shield, 6),
  48261. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_bow, 4),
  48262. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_crossbow, 3),
  48263. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_thrown, 5),
  48264. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_arrows, 2),
  48265. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_bolts, 2),
  48266. (troop_ensure_inventory_space, ":cur_merchant", merchant_inventory_space),
  48267. (troop_sort_inventory, ":cur_merchant"),
  48268. (store_troop_gold, reg6, ":cur_merchant"),
  48269. (lt, reg6, 1000),
  48270. (store_random_in_range, ":new_gold", 250, 500),
  48271. (call_script, "script_troop_add_gold", ":cur_merchant", ":new_gold"),
  48272. (try_end),
  48273. ]),
  48274.  
  48275. # script_refresh_center_stables
  48276. ("refresh_center_stables",
  48277. [
  48278. (reset_item_probabilities, 100),
  48279. (set_merchandise_modifier_quality, 150),
  48280. (try_for_range, ":cur_merchant", horse_merchants_begin, horse_merchants_end),
  48281. (troop_clear_inventory, ":cur_merchant"),
  48282. (store_sub, ":cur_town", ":cur_merchant", horse_merchants_begin),
  48283. (val_add, ":cur_town", towns_begin),
  48284. (party_get_slot, ":cur_faction", ":cur_town", slot_center_original_faction),
  48285. (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_horse, 5),
  48286. (troop_ensure_inventory_space, ":cur_merchant", 65),
  48287. (troop_sort_inventory, ":cur_merchant"),
  48288. (store_troop_gold, ":cur_gold", ":cur_merchant"),
  48289. (lt, ":cur_gold", 600),
  48290. (store_random_in_range, ":new_gold", 250, 500),
  48291. (call_script, "script_troop_add_gold", ":cur_merchant", ":new_gold"),
  48292. (try_end),
  48293. ]),
  48294.  
  48295. #Equipment cost fix
  48296. ("player_get_value_of_original_items",
  48297. [
  48298. (store_script_param, ":player_no", 1),
  48299. (store_script_param, ":agent_no", 2),
  48300. (store_script_param, ":troop_id", 3),
  48301. (assign, ":total_equipment_cost", 0),
  48302. (try_for_range, ":i_item_slot", 0, 8),
  48303. (neg|player_item_slot_is_picked_up, ":player_no", ":i_item_slot"),
  48304. (agent_get_item_slot, ":item_id", ":agent_no", ":i_item_slot"), #value between 0-7, order is weapon1, weapon2, weapon3, weapon4, head_armor, body_armor, leg_armor, hand_armor
  48305. #(player_get_item_id, ":item_id", ":player_no", ":i_item_slot"), #only for server
  48306. (neq, ":item_id", -1),
  48307. (call_script, "script_multiplayer_get_item_value_for_troop", ":item_id", ":troop_id"),
  48308. (val_add, ":total_equipment_cost", reg0),
  48309.  
  48310. #Debugging
  48311. #(assign, reg1, ":total_equipment_cost"),
  48312. #(str_store_item_name, s0, ":item_id"),
  48313. #(multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, "@{s0} for {reg0}g added to total equipment cost, which is now: {reg1}g"),
  48314. ##
  48315. (try_end),
  48316. (try_for_agents, ":cur_horse"),
  48317. #Check all horses in the scene and see if one of them is agent_no's bought horse. Won't be enough to just do (agent_get_horse, ":horse", ":agent_no"),
  48318. #since you get money back for a bought horse, even if you have dismounted it, if the horse is still alive and has no other rider.
  48319. (agent_is_alive, ":cur_horse"),
  48320. (neg|agent_is_human, ":cur_horse"), #Spawned agent is horse
  48321. (agent_get_slot, ":agent_no_bought_horse", ":agent_no", slot_agent_bought_horse),
  48322. (eq, ":agent_no_bought_horse", ":cur_horse"),
  48323. (assign, ":add_horse_cost_to_equipment_value", 0),
  48324. (try_begin),
  48325. (agent_get_rider, ":rider_agent_id", ":cur_horse"),
  48326. (try_begin),
  48327. (neq, ":rider_agent_id", -1),
  48328. (neg|agent_is_non_player, ":rider_agent_id"),
  48329. (agent_get_slot, ":agent_no_bought_horse", ":rider_agent_id", slot_agent_bought_horse),
  48330. (eq, ":agent_no_bought_horse", ":cur_horse"), #agent_no is mounted on the same horse he bought
  48331. (assign, ":add_horse_cost_to_equipment_value", 1),
  48332.  
  48333. #Debugging
  48334. #(agent_get_item_id, ":mount_type", ":cur_horse"), #(works only for horses, returns -1 otherwise)
  48335. #(str_store_item_name, s0, ":mount_type"),
  48336. #(multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, "@You are mounted on your bought {s0} and will get money for it"),
  48337. ##
  48338. (else_try),
  48339. (eq, ":rider_agent_id", -1), #If cur_horse doesn't have a rider
  48340. (agent_get_horse, ":agent_no_mount", ":agent_no"),
  48341. (eq, ":agent_no_mount", -1), #If agent_no is not mounted on another horse
  48342. (agent_get_slot, ":agent_no_bought_horse", ":agent_no", slot_agent_bought_horse),
  48343. (eq, ":agent_no_bought_horse", ":cur_horse"),
  48344. (assign, ":add_horse_cost_to_equipment_value", 1),
  48345.  
  48346. #Debugging
  48347. #(agent_get_item_id, ":mount_type", ":cur_horse"), #(works only for horses, returns -1 otherwise)
  48348. #(str_store_item_name, s0, ":mount_type"),
  48349. #(multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, "@Your bought {s0} is alive so you get money for it"),
  48350. ##
  48351. (try_end),
  48352. (eq, ":add_horse_cost_to_equipment_value", 1),
  48353. (agent_get_item_id, ":cur_mount_type", ":cur_horse"), #Checks which type the horse is
  48354. (call_script, "script_multiplayer_get_item_value_for_troop", ":cur_mount_type", ":troop_id"),
  48355. (val_add, ":total_equipment_cost", reg0),
  48356. (multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, "@Added money for your old horse"),
  48357. (try_end),
  48358. (try_end),
  48359. (agent_set_slot, ":agent_no", slot_agent_bought_horse, -1),
  48360. (assign, reg0, ":total_equipment_cost"),
  48361. ]),
  48362. ###
  48363. #INVASION MODE START
  48364. # script_multiplayer_ccoop_prepare_spawn_wave
  48365. # Input: none
  48366. # Output: none
  48367. ("multiplayer_ccoop_prepare_spawn_wave",
  48368. [
  48369. (try_begin),
  48370. (multiplayer_is_server),
  48371. (set_fixed_point_multiplier, 100),
  48372.  
  48373. #generate next wave spawn points
  48374. (store_random_in_range, ":spawn_point1", 80, 88),
  48375. (store_random_in_range, ":spawn_point2", 80, 88),
  48376. (try_begin),
  48377. (eq, ":spawn_point1", ":spawn_point2"),
  48378. (assign, ":spawn_point2", -1),
  48379. (end_try),
  48380.  
  48381. #(assign, reg0, ":spawn_point1"),
  48382. #(assign, reg1, ":spawn_point2"),
  48383. #(display_message, "@spawn points generated as 1: {reg0} 2: {reg1}"),
  48384.  
  48385. #(store_mod, ":wave_no_mod", "$g_multiplayer_ccoop_wave_no", 10),
  48386. (store_sub, ":wave_no_mod", "$g_multiplayer_ccoop_wave_no", "$g_mp_coop_last_king_wave"),
  48387.  
  48388. #Now the script makes a calculation to decide how many enemies to spawn.
  48389.  
  48390. (assign, ":num_troops_for_wave", 4),
  48391. (assign, ":number_of_players_at_team_1", 0),
  48392. (get_max_players, ":num_players"),
  48393. (try_for_range, ":cur_player", 0, ":num_players"),
  48394. (player_is_active, ":cur_player"),
  48395. (player_get_team_no, ":player_team", ":cur_player"),
  48396. (eq, ":player_team", 0),
  48397. (val_add, ":number_of_players_at_team_1", 1),
  48398. (try_end),
  48399.  
  48400.  
  48401. (assign, reg0, ":number_of_players_at_team_1"), #debug, delete
  48402.  
  48403. (val_sub, ":number_of_players_at_team_1", 1), # for simplifying the formula
  48404. (try_for_range, ":cur_multiplier", 1, 4),
  48405. (gt, ":number_of_players_at_team_1", 0),
  48406. (store_mul, ":used_multiplier", ":cur_multiplier", 2),
  48407. (val_min, ":used_multiplier", ":number_of_players_at_team_1"),
  48408. (val_sub, ":number_of_players_at_team_1", ":used_multiplier"),
  48409. (store_sub, ":used_multiplier_2", 5, ":cur_multiplier"),
  48410. (store_mul, ":added_num_troops", ":used_multiplier_2", ":used_multiplier"),
  48411. (val_add, ":num_troops_for_wave", ":added_num_troops"),
  48412. (try_end),
  48413.  
  48414. (try_begin),
  48415. (le, "$g_multiplayer_ccoop_wave_no", 3),
  48416. (assign, ":spawn_point2", -1), # for the first 3 waves, spawn from only 1 point
  48417. (try_end),
  48418.  
  48419. #Clear all enemy wave data slots
  48420. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin, 0),
  48421. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 1, 0),
  48422. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 2, 0),
  48423. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 3, 0),
  48424. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 4, 0),
  48425. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 5, 0),
  48426. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 6, 0),
  48427. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 7, 0),
  48428. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 8, 0),
  48429. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 9, 0),
  48430. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 10, 0),
  48431. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 11, 0),
  48432. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 12, 0),
  48433. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 13, 0),
  48434. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 14, 0),
  48435. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 15, 0),
  48436.  
  48437.  
  48438. (store_mul, ":wave_effect_on_troops", 20, ":wave_no_mod"),
  48439. (val_add, ":wave_effect_on_troops", 80), # it will be 100, 120, 140, 160, ... beginning from wave 1.
  48440.  
  48441. (val_mul, ":num_troops_for_wave", ":wave_effect_on_troops"),
  48442. (val_div, ":num_troops_for_wave", 100),
  48443.  
  48444. (try_begin),
  48445. (ge, "$g_mp_coop_king_waves", 1), # wave++
  48446. (val_mul, ":num_troops_for_wave", 130),
  48447. (val_div, ":num_troops_for_wave", 100),
  48448. (try_end),
  48449.  
  48450. #Used to reset max enemy level counter for endless mode
  48451. (store_sub, ":since_last_boss", "$g_multiplayer_ccoop_wave_no", "$g_mp_coop_last_king_wave"),
  48452.  
  48453. #Restrict the level of wave troops
  48454. (try_begin),
  48455. (ge, ":since_last_boss", 10),
  48456. (assign, ":max_level", 30),
  48457. (else_try),
  48458. (ge, ":since_last_boss", 8),
  48459. (assign, ":max_level", 24),
  48460. (else_try),
  48461. (ge, ":since_last_boss", 6),
  48462. (assign, ":max_level", 20),
  48463. (else_try),
  48464. (ge, ":since_last_boss", 4),
  48465. (assign, ":max_level", 15),
  48466. (else_try),
  48467. (ge, ":since_last_boss", 2),
  48468. (assign, ":max_level", 10),
  48469. (else_try),
  48470. (ge, ":since_last_boss", 1),
  48471. (assign, ":max_level", 6),
  48472. (try_end),
  48473.  
  48474. (assign, ":spawn_lord", 0),
  48475.  
  48476. (assign, "$g_ccoop_king_troop", -1),
  48477.  
  48478. (try_begin),
  48479. (ge, ":since_last_boss", 3),
  48480. (store_random_in_range, ":spawn_lord_check", 0, 2), #after wave 3, 50% chance for a lord wave
  48481. (this_or_next|ge, ":spawn_lord_check", 1),
  48482. (this_or_next|eq, ":since_last_boss", 3), #always spawn a lord on wave 3
  48483. (eq, ":since_last_boss", 10), #king always spawns on wave 10
  48484. (val_add, "$g_mp_coop_lord_waves", 1),
  48485. (try_begin),
  48486. (store_mod, ":spawn_king", "$g_mp_coop_lord_waves", 5), #If 5th lord wave occurs before wave 10, it become the king wave
  48487. (this_or_next|eq, ":spawn_king", 0),
  48488. (eq, ":since_last_boss", 10),
  48489. (gt, "$g_mp_coop_lord_waves", 0), #prevents first lord wave from being a king wave
  48490. (gt, ":since_last_boss", 1), #not necessary
  48491.  
  48492. (try_begin),
  48493. (eq, "$g_multiplayer_team_2_faction", "fac_ccoop_all_stars"),
  48494. (store_random_in_range, ":used_troop_no", kings_begin, kings_end), #all stars faction uses a random king!
  48495. (else_try),
  48496. (eq, "$g_multiplayer_team_2_faction", "fac_outlaws"),
  48497. (assign, ":reusing_quick_battle_king", 1),
  48498. (try_for_range, ":unused", 0, 10),
  48499. (eq, ":reusing_quick_battle_king", 1),
  48500. (store_random_in_range, ":used_troop_no" ,quick_battle_troops_begin, quick_battle_troops_end), #outlaws wave uses a quick battle troop for a king
  48501. (neg|troop_slot_eq, ":used_troop_no", slot_troop_coop_lord_spawned, 2), #it tries 10 times not to use one of the lords but if it fails, gives up eventually, and raises one from the dead
  48502. (assign, ":reusing_quick_battle_king", 0),
  48503. (try_end),
  48504. (else_try),
  48505. (try_for_range, ":cur_troop", kings_begin, kings_end), #selects the right king for the faction
  48506. (store_troop_faction, ":troop_faction", ":cur_troop"),
  48507. (eq, ":troop_faction", "$g_multiplayer_team_2_faction"),
  48508. (assign, ":used_troop_no", ":cur_troop"),
  48509. (try_end),
  48510. (try_end),
  48511. #(assign, ":cur_max_level", 0),
  48512. (assign, ":spawn_lord", 1),
  48513. (assign, "$g_ccoop_king_troop", ":used_troop_no"),
  48514.  
  48515.  
  48516. #Reset all spawn trackers to allow any lords to spawn again for each elite tier in endless mode
  48517. (try_for_range, ":cur_troop", lords_begin, lords_end),
  48518. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 0),
  48519. (try_end),
  48520. (try_for_range, ":cur_troop", quick_battle_troops_begin, quick_battle_troops_end),
  48521. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 0),
  48522. (try_end),
  48523. (else_try),
  48524. (assign, ":spawn_lord", 1), #variable is used to keep slots safe while generating the rest of the wave
  48525.  
  48526. #reset data for all possible lord troops before generating a lord
  48527.  
  48528. (try_for_range, ":cur_troop", lords_begin, lords_end),
  48529. (neg|troop_slot_eq, ":cur_troop", slot_troop_coop_lord_spawned, 2), #if slot_troop_coop_lord_spawned = 2, lord has already spawned - do not reset data
  48530. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 0),
  48531. (try_end),
  48532.  
  48533. (try_for_range, ":cur_troop", quick_battle_troops_begin, quick_battle_troops_end),
  48534. (neg|troop_slot_eq, ":cur_troop", slot_troop_coop_lord_spawned, 2),
  48535. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 0),
  48536. (try_end),
  48537.  
  48538. (assign, ":eligible_troop_count", 0),
  48539.  
  48540. #Find troops that are eligible
  48541. (try_for_range, ":cur_troop", lords_begin, lords_end),
  48542. (store_troop_faction, ":troop_faction", ":cur_troop"),
  48543. (this_or_next|eq, ":troop_faction", "$g_multiplayer_team_2_faction"),
  48544. (eq, "$g_multiplayer_team_2_faction", "fac_ccoop_all_stars"), #all lords are eligible in all stars
  48545. (neg|troop_slot_eq, ":cur_troop", slot_troop_coop_lord_spawned, 2), #don't resurrect lords (until a king wave)
  48546. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 1), #set eligible to be checked the second time around
  48547. (val_add, ":eligible_troop_count", 1), #increase the upper limit for the random generator
  48548. (try_end),
  48549.  
  48550. (try_for_range, ":cur_troop", quick_battle_troops_begin, quick_battle_troops_end),
  48551. (store_troop_faction, ":troop_faction", ":cur_troop"),
  48552. (this_or_next|eq, "$g_multiplayer_team_2_faction", "fac_outlaws"),
  48553. (eq, "$g_multiplayer_team_2_faction", "fac_ccoop_all_stars"), #all quick battle troops are eligible in all stars
  48554. (neg|troop_slot_eq, ":cur_troop", slot_troop_coop_lord_spawned, 2), #don't resurrect quick battle troops (until a king wave)
  48555. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 1),
  48556. (val_add, ":eligible_troop_count", 1),
  48557. (try_end),
  48558.  
  48559.  
  48560. (store_random_in_range, ":randomiser", 0, ":eligible_troop_count"), #randomise a lord from the eligible troops
  48561. (assign, ":random_checker", 0),
  48562.  
  48563.  
  48564. (try_for_range, ":cur_troop", lords_begin, lords_end),
  48565. (troop_slot_eq, ":cur_troop", slot_troop_coop_lord_spawned, 1), #use this to check the troops we marked as eligible lords
  48566.  
  48567. (assign, reg0, ":cur_troop"), # debug
  48568.  
  48569. (try_begin),
  48570. (eq, ":random_checker", ":randomiser"), #found her/him!
  48571. (assign, ":used_troop_no", ":cur_troop"),
  48572. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 2), #prevent our lord from spawning again
  48573. (try_end),
  48574. (val_add, ":random_checker", 1),
  48575.  
  48576. (try_end),
  48577.  
  48578. #continue checking all possible troops
  48579. (try_for_range, ":cur_troop", quick_battle_troops_begin, quick_battle_troops_end),
  48580. (troop_slot_eq, ":cur_troop", slot_troop_coop_lord_spawned, 1),
  48581.  
  48582. (assign, reg0, ":cur_troop"), # debug
  48583.  
  48584. (try_begin),
  48585. (eq, ":random_checker", ":randomiser"),
  48586. (assign, ":used_troop_no", ":cur_troop"),
  48587. (troop_set_slot, ":cur_troop", slot_troop_coop_lord_spawned, 2),
  48588. (try_end),
  48589. (val_add, ":random_checker", 1),
  48590.  
  48591. (try_end),
  48592. (try_end),
  48593. #set the wave spawn data for our leader
  48594. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 1, ":used_troop_no"),
  48595. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 2, 1), #only one leader
  48596. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 3, ":spawn_point1"), #always use spawn_point1 for simplicity
  48597. (troop_get_slot, ":num_bot_types", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin),
  48598. (val_add, ":num_bot_types", 2), #adding two bot types because we're about to add the guards anyway
  48599. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin, ":num_bot_types"),
  48600. (assign, ":cur_max_level", -1),
  48601. (store_troop_faction, ":used_troop_faction_no", ":used_troop_no"), #use guards from the same faction as the wave leader (used mainly for all stars wave)
  48602. (try_begin),
  48603. (eq, "$g_multiplayer_team_2_faction", "fac_outlaws"),
  48604. (assign, ":guard_troop_no", "trp_sea_raider_leader"), #outlaws always use sea raider captains as guards
  48605. (else_try),
  48606. (try_for_range, ":cur_troop", soldiers_begin, soldiers_end), #check all soldiers to find a suitable guard troop
  48607. (store_troop_faction, ":troop_faction", ":cur_troop"),
  48608. (eq, ":troop_faction", ":used_troop_faction_no"), #same faction as the leader?
  48609. (store_character_level, ":cur_level", ":cur_troop"),
  48610. (gt, ":cur_level", ":cur_max_level"), #higher than previous soldiers found from our required faction?
  48611. (assign, ":cur_max_level", ":cur_level"),
  48612. (assign, ":guard_troop_no", ":cur_troop"),
  48613. (try_end),
  48614. (try_end),
  48615. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 4, ":guard_troop_no"), #set the troop id in the correct wave data slot
  48616. (try_begin),
  48617. (eq, ":spawn_king", 0), #double guards for the king! simple but creates a nice final challenge
  48618. (gt, "$g_mp_coop_lord_waves", 0),
  48619. (gt, ":since_last_boss", 1),
  48620. (assign, ":guard_count", 2),
  48621. (else_try),
  48622. (assign, ":guard_count", 1),
  48623. (try_end),
  48624. (get_max_players, ":num_players"),
  48625. (assign, ":total_players", 0),
  48626. (try_for_range, ":cur_player", 0, ":num_players"), #find out how many players are on the defenders
  48627. (player_is_active, ":cur_player"),
  48628. (player_get_team_no, ":cur_team", ":cur_player"),
  48629. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_ccoop_return_of_the_king, "$g_ccoop_king_troop"),
  48630. (eq, ":cur_team", 0),
  48631. (val_add, ":total_players", 1),
  48632. (try_end),
  48633. (val_mul, ":guard_count", ":total_players"), #1 guard per player for lord waves; 2 for the king
  48634. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 5, ":guard_count"), #set the number
  48635. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 6, ":spawn_point1"), #spawn guards with the wave leader
  48636. (val_add, ":spawn_lord", 1), #used in code below to avoid "boosting" guards when data slots are full... also prevents us legitimately "boosting" generated troops that match the guard troop, which is a shame but not critical
  48637. (try_end),
  48638.  
  48639.  
  48640. (assign, ":eligible_troop_count", 0), #reset this and start looking for eligible troops to fill the wave
  48641.  
  48642. (try_for_range, ":cur_troop", soldiers_begin, soldiers_end),
  48643. (troop_set_slot, ":cur_troop", slot_troop_mp_squad_type, 0), #we use this slot to check if they are eligible - was previously used for something else in WFaS. should have been renamed really...
  48644. (try_end),
  48645.  
  48646. (try_for_range, ":cur_troop", soldiers_begin, soldiers_end),
  48647. (neq, ":cur_troop", "trp_mercenaries_end"),
  48648.  
  48649. (store_troop_faction, ":troop_faction", ":cur_troop"),
  48650. (this_or_next|eq, ":troop_faction", "$g_multiplayer_team_2_faction"), #right faction?
  48651. (eq, "$g_multiplayer_team_2_faction", "fac_ccoop_all_stars"), #... or all stars?
  48652. (store_character_level, ":troop_level", ":cur_troop"),
  48653. (le, ":troop_level", ":max_level"), #doesn't exceed our level cap for the current wave?
  48654. (troop_set_slot, ":cur_troop", slot_troop_mp_squad_type, 1), #eligible!
  48655. (val_add, ":eligible_troop_count", 1), #add the count to be used by the randomiser
  48656. (assign, reg0, ":used_troop_no"), # debug
  48657. (display_debug_message, "@{!}used troop no is {reg0}"), # debug
  48658. (try_end),
  48659.  
  48660. (try_for_range, ":cur_bot_readying", 0, ":num_troops_for_wave"), #run this individually for every single wave bot we want to generate - not very efficient! Causes a momentary spike with a lot of players
  48661. (assign, reg0, ":cur_bot_readying"),
  48662. (try_begin),
  48663. (neg|troop_slot_eq, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 13, 0), #if all data is filled (this slot is the last used for wave bot ids)
  48664. (store_random_in_range, ":booster_slot", ":spawn_lord", 5), #pick an existing troop to "boost" - don't "boost" the wave leader or guards
  48665.  
  48666. (val_mul, ":booster_slot", 3), #get to the right data slot
  48667. (val_add, ":booster_slot", multi_data_ccoop_wave_spawn_data_begin + 1), # used troop no
  48668.  
  48669. (val_add, ":booster_slot", 1), # used troop count
  48670. (troop_get_slot, ":used_troop_count", "trp_multiplayer_data", ":booster_slot"), #get the current number spawning
  48671. (val_add, ":used_troop_count", 1), #boost!
  48672. (troop_set_slot, "trp_multiplayer_data", ":booster_slot", ":used_troop_count"), #rewrite the slot with the new number of that troop
  48673. (else_try),
  48674. #if there are still slots available (there are 5 total), we look for a troop again
  48675.  
  48676.  
  48677. (store_random_in_range, ":randomiser", 0, ":eligible_troop_count"), #pick a number...
  48678. (assign, ":random_checker", 0),
  48679.  
  48680.  
  48681. (try_for_range, ":cur_troop", soldiers_begin, soldiers_end), #this covers all troops for factions, outlaws and all stars
  48682. (troop_slot_eq, ":cur_troop", slot_troop_mp_squad_type, 1),
  48683.  
  48684.  
  48685. (try_begin),
  48686. (eq, ":random_checker", ":randomiser"),
  48687. (assign, ":used_troop_no", ":cur_troop"), #found our troop!
  48688. (try_end),
  48689. (val_add, ":random_checker", 1),
  48690.  
  48691. (try_end),
  48692.  
  48693. (try_begin),
  48694. (assign, ":troop_already_spawning", 0), #found our troop! But is that troop already spawning?
  48695. (try_for_range, ":cur_slot", 0, 5), #check our existing data slots
  48696. (val_mul, ":cur_slot", 3),
  48697. (val_add, ":cur_slot", multi_data_ccoop_wave_spawn_data_begin + 1), #... the ones that hold our troop ids
  48698. (troop_get_slot, ":cur_slot_troop_no", "trp_multiplayer_data", ":cur_slot"),
  48699. (eq, ":cur_slot_troop_no", ":used_troop_no"), #is there a match?
  48700.  
  48701. (val_add, ":cur_slot", 1), # move our slot to the one which holds the number of that troop type which will spawn
  48702. (troop_get_slot, ":used_troop_count", "trp_multiplayer_data", ":cur_slot"),
  48703. (val_add, ":used_troop_count", 1), #and add one more
  48704. (troop_set_slot, "trp_multiplayer_data", ":cur_slot", ":used_troop_count"),
  48705. #(assign, ":used_slot", ":cur_slot"),
  48706. (assign, ":troop_already_spawning", 1),
  48707. #(display_message, "@troop already spawning!"),
  48708. (try_end),
  48709. (eq, ":troop_already_spawning", 1), #don't try else if that troop type was already spawning
  48710. (else_try),
  48711. (assign, ":found_empty_slot", 0), #but if the troop wasn't already spawning..
  48712. (try_for_range, ":cur_slot", ":spawn_lord", 5),
  48713. (neq, ":found_empty_slot", 1), #find the next empty slot
  48714. (val_mul, ":cur_slot", 3),
  48715. (val_add, ":cur_slot", multi_data_ccoop_wave_spawn_data_begin + 1),
  48716.  
  48717. (troop_get_slot, ":cur_slot_troop_no", "trp_multiplayer_data", ":cur_slot"),
  48718. (eq, ":cur_slot_troop_no", 0), #is it empty?
  48719.  
  48720.  
  48721. (troop_set_slot, "trp_multiplayer_data", ":cur_slot", ":used_troop_no"), #not anymore!
  48722.  
  48723.  
  48724. (val_add, ":cur_slot", 1),
  48725. (troop_get_slot, ":used_troop_count", "trp_multiplayer_data", ":cur_slot"),
  48726. (val_add, ":used_troop_count", 1), #should be one anyway, since this is the first troop of that type
  48727. (troop_set_slot, "trp_multiplayer_data", ":cur_slot", ":used_troop_count"),
  48728.  
  48729. (troop_get_slot, ":num_bot_types", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin),
  48730. (val_add, ":num_bot_types", 1), #increase the number of bot types, which is sent along with the other data - used by the spawning script
  48731. (troop_set_slot, "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin, ":num_bot_types"),
  48732.  
  48733. (assign, ":used_slot", ":cur_slot"),
  48734. (assign, ":found_empty_slot", 1),
  48735. (store_random_in_range, ":used_entry_point", 0, 2), #randomise the entry point
  48736. (try_begin),
  48737. (this_or_next|eq, ":used_entry_point", 0),
  48738. (le, ":spawn_point2", 0), #and always user spawn_point1 if spawn_point2 isn't active for this wave
  48739. (assign, ":used_entry_point", ":spawn_point1"),
  48740. (else_try),
  48741. (assign, ":used_entry_point", ":spawn_point2"),
  48742. (try_end),
  48743. (val_add, ":used_slot", 1),
  48744. (troop_set_slot, "trp_multiplayer_data", ":used_slot", ":used_entry_point"),
  48745. (try_end),
  48746. (try_end),
  48747. (try_end),
  48748.  
  48749. (try_end),
  48750.  
  48751. (get_max_players, ":max_players"), #send data to clients so they can see what troops are spawning next
  48752. (try_for_range, ":cur_player", 1, ":max_players"),
  48753. (player_is_active, ":cur_player"),
  48754. (call_script, "script_multiplayer_ccoop_send_troop_data_to_client", ":cur_player"),
  48755. (try_end),
  48756.  
  48757. (try_end),
  48758. ]),
  48759.  
  48760.  
  48761. # script_multiplayer_ccoop_calculate_round_duration
  48762. # Input: none
  48763. # Output: none
  48764. ("multiplayer_ccoop_calculate_round_duration",
  48765. [
  48766. (try_begin),
  48767. (multiplayer_is_server),
  48768. (assign, "$g_multiplayer_ccoop_enemy_respawn_secs", 300), #5min
  48769.  
  48770. (store_sub, ":wave_no", "$g_multiplayer_ccoop_wave_no", 1),
  48771. (val_max, ":wave_no", 0),
  48772. (store_mod, ":mod", ":wave_no", 10),
  48773. (val_mul, ":mod", 30),
  48774. (val_add, "$g_multiplayer_ccoop_enemy_respawn_secs", ":mod"),
  48775.  
  48776. (try_begin),
  48777. (gt, "$g_multiplayer_ccoop_wave_no", 20),
  48778. (val_mul, "$g_multiplayer_ccoop_enemy_respawn_secs", 2),
  48779. (else_try),
  48780. (gt, "$g_multiplayer_ccoop_wave_no", 10),
  48781. (val_mul, "$g_multiplayer_ccoop_enemy_respawn_secs", 3),
  48782. (val_div, "$g_multiplayer_ccoop_enemy_respawn_secs", 2),
  48783. (try_end),
  48784.  
  48785. (get_max_players, ":num_players"),
  48786. (try_for_range, ":cur_player", 1, ":num_players"),
  48787. (player_is_active, ":cur_player"),
  48788. (assign, reg0, ":cur_player"),
  48789. (display_debug_message, "@{!}sending message to {reg0} multiplayer_event_other_event_ccoop_count_down_invisible"),
  48790. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_count_down_invisible, "$g_multiplayer_ccoop_enemy_respawn_secs", "$g_multiplayer_ccoop_wave_no"),
  48791. (try_end),
  48792. (try_end),
  48793. ]),
  48794.  
  48795.  
  48796. # script_multiplayer_ccoop_send_troop_data_to_client
  48797. # Input: client number
  48798. # Output: none
  48799. ("multiplayer_ccoop_send_troop_data_to_client",
  48800. [
  48801. (try_begin),
  48802. (store_script_param, ":cur_player", 1),
  48803.  
  48804. (troop_get_slot, ":data_1", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin),
  48805. (troop_get_slot, ":data_2", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 1),
  48806. (troop_get_slot, ":data_3", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 2),
  48807. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_update_spawn_data_1, ":data_1", ":data_2", ":data_3"),
  48808. (troop_get_slot, ":data_1", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 3),
  48809. (troop_get_slot, ":data_2", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 4),
  48810. (troop_get_slot, ":data_3", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 5),
  48811. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_update_spawn_data_2, ":data_1", ":data_2", ":data_3"),
  48812. (troop_get_slot, ":data_1", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 6),
  48813. (troop_get_slot, ":data_2", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 7),
  48814. (troop_get_slot, ":data_3", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 8),
  48815. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_update_spawn_data_3, ":data_1", ":data_2", ":data_3"),
  48816. (troop_get_slot, ":data_1", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 9),
  48817. (troop_get_slot, ":data_2", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 10),
  48818. (troop_get_slot, ":data_3", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 11),
  48819. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_update_spawn_data_4, ":data_1", ":data_2", ":data_3"),
  48820. (troop_get_slot, ":data_1", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 12),
  48821. (troop_get_slot, ":data_2", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 13),
  48822. (troop_get_slot, ":data_3", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 14),
  48823. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_update_spawn_data_5, ":data_1", ":data_2", ":data_3"),
  48824. (troop_get_slot, ":data_1", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 15),
  48825. (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_update_spawn_data_6, ":data_1"),
  48826. (try_end),
  48827. ]),
  48828.  
  48829. # script_multiplayer_ccoop_spawn_wave
  48830. # Input: spawn_required -> how many bots are needed
  48831. # Output: none
  48832. ("multiplayer_ccoop_spawn_wave",
  48833. [
  48834. (try_begin),
  48835. (multiplayer_is_server),
  48836. (set_fixed_point_multiplier, 100),
  48837.  
  48838. (store_script_param, ":spawn_required", 1),
  48839.  
  48840. (assign, reg0, ":spawn_required"), # debug
  48841. (display_debug_message, "@{!}spawn required is: {reg0}"),
  48842.  
  48843. (assign, ":num_troops_for_wave", 0),
  48844.  
  48845. #(troop_get_slot, ":num_bot_types", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin),
  48846. (try_for_range, ":cur_bot_type", 0, 5),
  48847. (store_mul, ":cur_slot", ":cur_bot_type", 3),
  48848. (val_add, ":cur_slot", multi_data_ccoop_wave_spawn_data_begin + 2),
  48849. (troop_get_slot, ":cur_bot_count", "trp_multiplayer_data", ":cur_slot"),
  48850. (val_add, ":num_troops_for_wave", ":cur_bot_count"),
  48851. (try_end),
  48852.  
  48853. (assign, reg0, ":num_troops_for_wave"), # debug
  48854. (display_debug_message, "@{!}num_troops_for_wave is {reg0}"),
  48855.  
  48856. (assign, ":reduced_spawn_amount", 0),
  48857. (assign, ":reduced_spawn_amount_mod", 0),
  48858. (try_begin),
  48859. (gt, ":num_troops_for_wave", ":spawn_required"),
  48860. (store_sub, ":reduced_spawn_amount", ":num_troops_for_wave", ":spawn_required"),
  48861. #(store_mod, ":reduced_spawn_amount_mod", ":reduced_spawn_amount", ":num_bot_types"),
  48862. #(val_div, ":reduced_spawn_amount", ":num_bot_types"),
  48863.  
  48864. (assign, reg0, ":reduced_spawn_amount"), # debug
  48865. (assign, reg1, ":reduced_spawn_amount_mod"), # debug
  48866. (display_debug_message, "@{!}num_troops_for_wave is gt spawn_required. reduced_spawn_amount is {reg0}, reduced_spawn_amount_mod is {reg1}"),
  48867. (try_end),
  48868.  
  48869. (store_current_scene, ":cur_scene"),
  48870. (modify_visitors_at_site, ":cur_scene"),
  48871. (assign, ":num_troops_spawned", 0),
  48872.  
  48873. #(troop_get_slot, ":leader_no", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 1),
  48874. #(troop_get_slot, ":point_no", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin + 3),
  48875. #(entry_point_get_position, pos60, ":point_no"),
  48876.  
  48877.  
  48878.  
  48879. (try_for_range, ":cur_bot_spawning", 0, 5),
  48880. (store_mul, ":cur_slot", ":cur_bot_spawning", 3),
  48881. (val_add, ":cur_slot", multi_data_ccoop_wave_spawn_data_begin + 1),
  48882. (troop_get_slot, ":spawned_troop_no", "trp_multiplayer_data", ":cur_slot"),
  48883. (gt, ":spawned_troop_no", 0),
  48884. (val_add, ":cur_slot", 1),
  48885. (troop_get_slot, ":spawned_troop_count", "trp_multiplayer_data", ":cur_slot"),
  48886. (assign, ":original_spawned_troop_count", ":spawned_troop_count"),
  48887.  
  48888. (assign, reg0, ":original_spawned_troop_count"), # debug
  48889. (display_debug_message, "@{!}original_spawned_troop_count is {reg0}"),
  48890.  
  48891. (val_add, ":cur_slot", 1),
  48892. (troop_get_slot, ":spawned_troop_entry_point", "trp_multiplayer_data", ":cur_slot"),
  48893.  
  48894.  
  48895. (val_sub, ":spawned_troop_count", ":reduced_spawn_amount"),
  48896. (try_begin),
  48897. (lt, ":cur_bot_spawning", ":reduced_spawn_amount_mod"),
  48898. (val_sub, ":spawned_troop_count", 1),
  48899.  
  48900. (assign, reg0, ":cur_bot_spawning"), # debug
  48901. (assign, reg1, ":reduced_spawn_amount_mod"), # debug
  48902. (display_debug_message, "@{!}reducing spawn amount by one"),
  48903. (try_end),
  48904.  
  48905. (assign, reg0, ":cur_bot_spawning"), # debug
  48906. (assign, reg1, ":spawned_troop_entry_point"), # debug
  48907. (str_store_troop_name, s0, ":spawned_troop_no"), # debug
  48908. (assign, reg2, ":spawned_troop_count"), # debug
  48909. (display_debug_message, "@{!}spawning bot group {reg0}: {reg2} {s0} from entry point {reg1}"),
  48910.  
  48911. (add_visitors_to_current_scene, ":spawned_troop_entry_point", ":spawned_troop_no", ":spawned_troop_count", 1, -1),
  48912.  
  48913. (val_add, ":num_troops_spawned", ":spawned_troop_count"),
  48914. (val_sub, ":original_spawned_troop_count", ":spawned_troop_count"),
  48915. (store_mul, ":cur_slot", ":cur_bot_spawning", 3),
  48916. (val_add, ":cur_slot", multi_data_ccoop_wave_spawn_data_begin + 2),
  48917. (troop_set_slot, "trp_multiplayer_data", ":cur_slot", ":original_spawned_troop_count"),
  48918. (try_end),
  48919.  
  48920. # sync clients
  48921. (get_max_players, ":num_players"),
  48922. (try_for_range, ":cur_player", 1, ":num_players"),
  48923. (player_is_active, ":cur_player"),
  48924. (call_script, "script_multiplayer_ccoop_send_troop_data_to_client", ":cur_player"),
  48925. (try_end),
  48926. (try_end),
  48927. ]),
  48928.  
  48929. # script_multiplayer_ccoop_check_reinforcement
  48930. # Input: arg1 = team 1 initial count, arg2 = team 2 initial count
  48931. # Output: reg0 = number of players to be moved from team1 to team2 (can be negative).
  48932. ("multiplayer_ccoop_check_reinforcement",
  48933. [
  48934. (try_begin),
  48935. (multiplayer_is_server),
  48936.  
  48937. (call_script, "script_multiplayer_ccoop_get_alive_enemy_count"),
  48938. (store_sub, ":free_enemy_slots", 100, reg0), #enemy required
  48939.  
  48940. (try_begin),
  48941. (ge, ":free_enemy_slots", 50), # if 50 or more enemy reinforcement needed
  48942.  
  48943. (call_script, "script_multiplayer_ccoop_spawn_wave", ":free_enemy_slots"),
  48944. (else_try),
  48945. #(lt, ":free_enemy_slots", 50),
  48946. (assign, ":num_troops_for_wave", 0),
  48947. (troop_get_slot, ":num_bot_types", "trp_multiplayer_data", multi_data_ccoop_wave_spawn_data_begin),
  48948. (try_for_range, ":cur_bot_type", 0, ":num_bot_types"),
  48949. (store_mul, ":cur_slot", ":cur_bot_type", 3),
  48950. (val_add, ":cur_slot", multi_data_ccoop_wave_spawn_data_begin + 2),
  48951. (troop_get_slot, ":cur_bot_count", "trp_multiplayer_data", ":cur_slot"),
  48952. (val_add, ":num_troops_for_wave", ":cur_bot_count"),
  48953. (try_end),
  48954.  
  48955. (ge, ":free_enemy_slots", ":num_troops_for_wave"),
  48956. (call_script, "script_multiplayer_ccoop_spawn_wave", ":free_enemy_slots"),
  48957. (try_end),
  48958. (try_end),
  48959. ]),
  48960.  
  48961. # script_multiplayer_get_balance_dif
  48962. # Input: arg1 = team 1 initial count, arg2 = team 2 initial count
  48963. # Output: reg0 = number of players to be moved from team1 to team2 (can be negative).
  48964. ("multiplayer_get_balance_dif",
  48965. [
  48966. (store_script_param, ":number_of_players_at_team_1", 1),
  48967. (store_script_param, ":number_of_players_at_team_2", 2),
  48968. (get_max_players, ":num_players"),
  48969. (try_for_range, ":cur_player", 0, ":num_players"),
  48970. (player_is_active, ":cur_player"),
  48971. (player_get_team_no, ":player_team", ":cur_player"),
  48972. (try_begin),
  48973. (eq, ":player_team", 0),
  48974. (val_add, ":number_of_players_at_team_1", 1),
  48975. (else_try),
  48976. (eq, ":player_team", 1),
  48977. (val_add, ":number_of_players_at_team_2", 1),
  48978. (try_end),
  48979. (try_end),
  48980. (assign, ":single_player_move_effect", 2),
  48981.  
  48982. (store_sub, ":difference_of_number_of_players", ":number_of_players_at_team_1", ":number_of_players_at_team_2"),
  48983. (assign, ":number_of_players_will_be_moved", 0),
  48984. (try_begin),
  48985. (store_mul, ":checked_value", "$g_multiplayer_auto_team_balance_limit", -1),
  48986. (le, ":difference_of_number_of_players", ":checked_value"),
  48987. (store_div, ":number_of_players_will_be_moved", ":difference_of_number_of_players", ":single_player_move_effect"),
  48988. (else_try),
  48989. (ge, ":difference_of_number_of_players", "$g_multiplayer_auto_team_balance_limit"),
  48990. (store_div, ":number_of_players_will_be_moved", ":difference_of_number_of_players", ":single_player_move_effect"),
  48991. (try_end),
  48992. (assign, reg0, ":number_of_players_will_be_moved"),
  48993. ]
  48994. ),
  48995.  
  48996.  
  48997. # script_multiplayer_server_play_sound_at_position
  48998. # Input: arg1 = sound_id
  48999. # Input: pos60 = position
  49000. # Output: none
  49001. ("multiplayer_server_play_sound_at_position",
  49002. [
  49003. (store_script_param, ":sound_id", 1),
  49004.  
  49005. (try_begin),
  49006. (this_or_next|multiplayer_is_server),
  49007. (neg|game_in_multiplayer_mode),
  49008.  
  49009. (is_between, ":sound_id", 0, "snd_sounds_end"), # Valid sound
  49010.  
  49011. (try_begin),
  49012. (neg|multiplayer_is_dedicated_server), # If a client and not a dedicated server that calls then play locally.
  49013. (play_sound_at_position, ":sound_id", pos60),
  49014. (try_end),
  49015.  
  49016. (try_begin),
  49017. (multiplayer_is_server), # If this is a server broadcast the sound to all players
  49018.  
  49019. (set_fixed_point_multiplier, 100),
  49020. (position_get_x,":xvalue", pos60),
  49021. (position_get_y,":yvalue", pos60),
  49022. (position_get_z,":zvalue", pos60),
  49023.  
  49024. (get_max_players, ":num_players"),
  49025. (try_for_range, ":cur_player", 1, ":num_players"),
  49026. (player_is_active,":cur_player"),
  49027.  
  49028. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_return_sound_at_pos,":xvalue",":yvalue",":zvalue",":sound_id"),
  49029. (try_end),
  49030. (try_end),
  49031. (try_end),
  49032. ]),
  49033.  
  49034.  
  49035. # script_mp_set_coop_companions
  49036. ("mp_set_coop_companions",
  49037. [
  49038. (store_script_param, ":player_id", 1),
  49039. (assign, ":slot_id", slot_player_companion_ids_begin),
  49040. (player_set_slot, ":player_id", ":slot_id", "$g_presentation_obj_coop_companion_0"),
  49041. #(str_store_troop_name, s0, "$g_presentation_obj_coop_companion_0"),
  49042. #(troop_set_class, "$g_presentation_obj_coop_companion_0", 0),
  49043. #(class_set_name, 0, s0),
  49044. (val_add, ":slot_id", 1),
  49045. (player_set_slot, ":player_id", ":slot_id", "$g_presentation_obj_coop_companion_1"),
  49046. #(str_store_troop_name, s0, "$g_presentation_obj_coop_companion_1"),
  49047. #(troop_set_class, "$g_presentation_obj_coop_companion_0", 1),
  49048. #(class_set_name, 1, s0),
  49049. (val_add, ":slot_id", 1),
  49050. (player_set_slot, ":player_id", ":slot_id", "$g_presentation_obj_coop_companion_class_0"),
  49051. (assign, reg0, "$g_presentation_obj_coop_companion_class_0"),
  49052. #(display_message, "@setting companion class on client: {reg0}"),
  49053. (val_add, ":slot_id", 1),
  49054. (player_set_slot, ":player_id", ":slot_id", "$g_presentation_obj_coop_companion_class_1"),
  49055. ]),
  49056.  
  49057.  
  49058. # # script_mp_ccoop_change_map
  49059. # #MCA: change map
  49060. # ("mp_ccoop_change_map",
  49061. # [
  49062. # (try_begin),
  49063. # (multiplayer_is_dedicated_server),
  49064. #
  49065. # # random scene
  49066. # (store_random_in_range, ":scene_no", multiplayer_scenes_begin, multiplayer_scenes_end),
  49067. #
  49068. # (assign, "$g_multiplayer_selected_map", ":scene_no"),
  49069. # (team_set_faction, 0, "$g_multiplayer_next_team_1_faction"),
  49070. # (team_set_faction, 1, "$g_multiplayer_next_team_2_faction"),
  49071. # (call_script, "script_game_multiplayer_get_game_type_mission_template", "$g_multiplayer_game_type"),
  49072. # (start_multiplayer_mission, reg0, "$g_multiplayer_selected_map", 1),
  49073. # (else_try),
  49074. # (multiplayer_is_server),
  49075. # (call_script, "script_game_multiplayer_get_game_type_mission_template", "$g_multiplayer_game_type"),
  49076. # (start_multiplayer_mission, reg0, "$g_multiplayer_selected_map", 1),
  49077. # (try_end),
  49078. # ]
  49079. # ),
  49080.  
  49081.  
  49082.  
  49083. # script_mp_get_player_alive_troop_count
  49084. # MCA
  49085. # returns alive bot count for player team on reg0
  49086. ("mp_get_player_alive_troop_count", # parameters: 1. player_id 2. troop_id
  49087. [
  49088. (store_script_param, ":player_id", 1),
  49089. (store_script_param, ":troop_id", 2),
  49090.  
  49091. (player_get_team_no, ":player_team", ":player_id"),
  49092.  
  49093. (assign, ":troop_count", 0),
  49094.  
  49095. (try_for_agents, ":cur_agent"),
  49096. (agent_is_human, ":cur_agent"),
  49097. (agent_is_alive, ":cur_agent"),
  49098. (agent_is_non_player, ":cur_agent"),
  49099. (agent_get_team, ":cur_agent_team", ":cur_agent"),
  49100.  
  49101. (try_begin),
  49102. (eq, ":player_team", ":cur_agent_team"),
  49103. (agent_get_troop_id, ":agent_troop_id", ":cur_agent"),
  49104. (eq, ":troop_id", ":agent_troop_id"),
  49105.  
  49106. # if agent belongs to the player
  49107. (agent_get_group, ":agent_group", ":cur_agent"),
  49108. (eq, ":agent_group", ":player_id"),
  49109.  
  49110. (val_add, ":troop_count", 1),
  49111. (try_end),
  49112. (try_end),
  49113.  
  49114. (assign, reg0, ":troop_count"),
  49115.  
  49116. #MCA
  49117. # (assign, reg1, ":troop_id"),
  49118. # (assign, reg2, ":player_id"),
  49119. # (display_debug_message, "@{!}alive troop ({reg1}) count: {reg0} for player {reg2}"),
  49120. ]),
  49121.  
  49122. # script_mp_get_player_total_alive_troop_count
  49123. # MCA
  49124. # returns total alive bot count for player team on reg0
  49125. ("mp_get_player_total_alive_troop_count", # parameters: 1. player_id
  49126. [
  49127. (store_script_param, ":player_id", 1),
  49128.  
  49129. (player_get_team_no, ":player_team", ":player_id"),
  49130.  
  49131. (assign, ":troop_count", 0),
  49132.  
  49133. (try_for_agents, ":cur_agent"),
  49134. (agent_is_human, ":cur_agent"),
  49135. (agent_is_alive, ":cur_agent"),
  49136. (agent_is_non_player, ":cur_agent"),
  49137. (agent_get_team, ":cur_agent_team", ":cur_agent"),
  49138.  
  49139. # if agent belongs to the player
  49140. (agent_get_group, ":agent_group", ":cur_agent"),
  49141. (eq, ":agent_group", ":player_id"),
  49142.  
  49143. (try_begin),
  49144. (eq, ":player_team", ":cur_agent_team"),
  49145. (val_add, ":troop_count", 1),
  49146. (try_end),
  49147. (try_end),
  49148.  
  49149. (assign, reg0, ":troop_count"),
  49150.  
  49151. #MCA
  49152. # (assign, reg2, ":player_id"),
  49153. # (display_debug_message, "@{!}total alive troop count: {reg0} for player {reg2}"),
  49154. ]),
  49155.  
  49156. # script_multiplayer_spawn_player_bot_squad_at_point
  49157. ("multiplayer_spawn_player_bot_squad_at_point",
  49158. [
  49159. (store_script_param, ":player_no", 1),
  49160. (store_script_param, ":player_team", 2),
  49161. (store_script_param, ":point_no", 3),
  49162.  
  49163. (try_begin),
  49164.  
  49165. (call_script, "script_multiplayer_get_bots_count", ":player_no"),
  49166. (assign, ":player_bot_count", reg0),
  49167.  
  49168.  
  49169. (try_for_range, ":slot_id", slot_player_companion_ids_begin, slot_player_companion_ids_end),
  49170. (lt, ":player_bot_count", 2),
  49171.  
  49172. (player_get_slot, ":companion_id", ":player_no", ":slot_id"),
  49173. (call_script, "script_mp_get_player_alive_troop_count", ":player_no", ":companion_id"),
  49174. (eq, reg0, 0),
  49175. #(try_begin),
  49176. # (try_for_range, ":cur_slot", slot_player_companion_ids_begin, slot_player_companion_classes_end),
  49177. # (assign, reg1, ":cur_slot"),
  49178. # (player_get_slot, reg2, ":player_no", ":cur_slot"),
  49179. # (multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, "@{!}spawning companion slot: {reg1} value {reg2}"),
  49180. # (try_end),
  49181. #(try_end),
  49182.  
  49183. (call_script, "script_mp_spawn_coop_companion", ":player_no", ":companion_id", ":slot_id", ":player_team", ":point_no"),
  49184. #(try_begin),
  49185. # (try_for_range, ":cur_slot", slot_player_companion_ids_begin, slot_player_companion_classes_end),
  49186. # (assign, reg1, ":cur_slot"),
  49187. # (player_get_slot, reg2, ":player_no", ":cur_slot"),
  49188. # (multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, "@{!}after spawning slot: {reg1} value {reg2}"),
  49189. # (try_end),
  49190. #(try_end),
  49191.  
  49192.  
  49193. (val_add, ":player_bot_count", 1),
  49194. (try_end),
  49195.  
  49196. (try_end),
  49197. ]),
  49198.  
  49199. ("multiplayer_get_spawn_point_close_to_bots",
  49200. [
  49201. (store_script_param, ":player_no", 1),
  49202. (player_get_team_no, ":player_team", ":player_no"),
  49203. (assign, ":x_pos", 0),
  49204. (assign, ":y_pos", 0),
  49205. (assign, ":num_living_players", 0),
  49206. (try_for_agents, ":agent_no"),
  49207. (agent_is_human, ":agent_no"),
  49208. (agent_is_alive, ":agent_no"),
  49209. (agent_is_non_player, ":agent_no"),
  49210. (agent_get_group, ":agent_group", ":agent_no"),
  49211. (agent_get_team, ":agent_team", ":agent_no"),
  49212. (try_begin),
  49213. (eq, ":agent_group", ":player_no"),
  49214. (eq, ":agent_team", ":player_team"),
  49215. (agent_get_position, pos2, ":agent_no"),
  49216. (position_get_x, ":x1", pos2),
  49217. (position_get_y, ":y1", pos2),
  49218. (val_add, ":x_pos", ":x1"),
  49219. (val_add, ":y_pos", ":y1"),
  49220. (val_add, ":num_living_players", 1),
  49221. (try_end),
  49222. (try_end),
  49223. (try_begin),
  49224. (gt, ":num_living_players", 0),
  49225. (val_div, ":x_pos", ":num_living_players"),
  49226. (val_div, ":y_pos", ":num_living_players"),
  49227. (try_end),
  49228. (position_set_x, pos0, ":x_pos"),
  49229. (position_set_y, pos0, ":y_pos"),
  49230. (position_set_z, pos0, 0),
  49231. (assign, ":best_score", 0),
  49232. (assign, ":best_point", 0),
  49233. (try_for_range, ":i_point", 0, multi_num_valid_entry_points),
  49234. (entry_point_get_position, pos1, ":i_point"),
  49235. (position_set_z, pos1, 0),
  49236. (get_sq_distance_between_positions_in_meters, ":dist", pos0, pos1),
  49237. (try_begin),
  49238. (le, ":dist", multi_distance_to_captain_spaw_point),
  49239. (val_max, ":dist", 1),
  49240. (store_mul, ":score", multi_distance_to_captain_spaw_point, 1000),
  49241. (val_div, ":score", ":dist"),
  49242. (try_begin),
  49243. (gt, ":score", ":best_score"),
  49244. (assign, ":best_point", ":i_point"),
  49245. (assign, ":best_score", ":score"),
  49246. (try_end),
  49247. (try_end),
  49248. (try_end),
  49249. (assign, reg0, ":best_point"),
  49250. ]),
  49251.  
  49252. # script_multiplayer_get_spawn_point_close_to_player
  49253. # input: arg1 = player_no
  49254. # output: reg0 = best_spawn_point
  49255. ("multiplayer_get_spawn_point_close_to_player",
  49256. [
  49257. (store_script_param, ":player_no", 1),
  49258. (player_get_agent_id, ":player_agent", ":player_no"),
  49259. (position_set_x, pos0, 0),
  49260. (position_set_y, pos0, 0),
  49261. (try_begin),
  49262. (agent_is_alive, ":player_agent"),
  49263. (agent_get_position, pos0, ":player_agent"),
  49264. (try_end),
  49265.  
  49266. (position_set_z, pos0, 0),
  49267. (assign, ":best_score", 0),
  49268. (assign, ":best_point", 0),
  49269. (try_for_range, ":i_point", 0, multi_num_valid_entry_points),
  49270. (entry_point_get_position, pos1, ":i_point"),
  49271. (position_set_z, pos1, 0),
  49272. (get_sq_distance_between_positions_in_meters, ":dist", pos0, pos1),
  49273. (try_begin),
  49274. (le, ":dist", multi_distance_to_captain_spaw_point),
  49275. (val_max, ":dist", 1),
  49276. (store_mul, ":score", multi_distance_to_captain_spaw_point, 1000),
  49277. (val_div, ":score", ":dist"),
  49278. (try_begin),
  49279. (gt, ":score", ":best_score"),
  49280. (assign, ":best_point", ":i_point"),
  49281. (assign, ":best_score", ":score"),
  49282. (try_end),
  49283. (try_end),
  49284. (try_end),
  49285. (assign, reg0, ":best_point"),
  49286. ]),
  49287.  
  49288. ("multiplayer_get_bots_count",
  49289. [
  49290. (store_script_param, ":player_no", 1),
  49291. (player_get_team_no, ":player_team", ":player_no"),
  49292. (assign, ":num_living_players", 0),
  49293. (try_for_agents, ":agent_no"),
  49294. (agent_is_human, ":agent_no"),
  49295. (agent_is_alive, ":agent_no"),
  49296. (agent_is_non_player, ":agent_no"),
  49297. (agent_get_group, ":agent_group", ":agent_no"),
  49298. (agent_get_team, ":agent_team", ":agent_no"),
  49299. (try_begin),
  49300. (eq, ":agent_group", ":player_no"),
  49301. (eq, ":agent_team", ":player_team"),
  49302. (val_add, ":num_living_players", 1),
  49303. (try_end),
  49304. (try_end),
  49305. (assign, reg0, ":num_living_players"),
  49306. ]),
  49307.  
  49308. ("multiplayer_get_selected_squad_slot_id",
  49309. [
  49310. (store_script_param, ":player_no", 1),
  49311. (assign, ":cur_troop_no", slot_player_bot_type_1_wanted),
  49312. (try_for_range, ":slot_no", slot_player_bot_type_1_wanted, slot_player_bot_type_4_wanted+1),
  49313. (player_get_slot, ":value", ":player_no", ":slot_no"),
  49314. (try_begin),
  49315. (eq, ":value", 1),
  49316. (assign, ":cur_troop_no", ":slot_no"),
  49317. (try_end),
  49318. (try_end),
  49319. (assign, reg0, ":cur_troop_no"),
  49320. ]),
  49321.  
  49322.  
  49323. # script_cf_multiplayer_event_team_change
  49324. ("cf_multiplayer_event_team_change",
  49325. [
  49326. (store_script_param, ":player_no", 1),
  49327. (try_begin),
  49328. (eq, "$g_multiplayer_is_game_type_captain", 1),
  49329. (player_get_team_no, ":player_team", ":player_no"),
  49330. #(player_get_agent_id, ":player_agent", ":player_no"),
  49331. (try_for_agents, ":agent_no"),
  49332. (agent_is_human, ":agent_no"),
  49333. (agent_is_alive, ":agent_no"),
  49334. (agent_is_non_player, ":agent_no"),
  49335. (agent_get_group, ":agent_group", ":agent_no"),
  49336. (agent_get_team, ":agent_team", ":agent_no"),
  49337. (try_begin),
  49338. (eq, ":agent_group", ":player_no"),
  49339. (eq, ":agent_team", ":player_team"),
  49340.  
  49341. ## increase player's kill count by 2 since death of each squad member will cause -2 score on team change
  49342. #(player_get_kill_count, ":player_kill_count", ":player_no"),
  49343. #(val_add, ":player_kill_count", 2),
  49344. #(player_set_kill_count, ":player_no", ":player_kill_count"),
  49345. ## also decrease death by 2 for the same reason
  49346. #(player_get_death_count, ":player_death_count", ":player_no"),
  49347. #(val_sub, ":player_death_count", 2),
  49348. #(player_set_death_count, ":player_no", ":player_death_count"),
  49349.  
  49350. #(call_script, "script_add_kill_death_counts", ":player_agent", ":agent_no"),
  49351. (remove_agent, ":agent_no"),
  49352. (try_end),
  49353. (try_end),
  49354. (try_end),
  49355. ]),
  49356.  
  49357.  
  49358.  
  49359.  
  49360. # script_team_get_attack_readying_ranged_agent_percentage
  49361. # Input: arg1: team_no, arg2: try for team's enemies
  49362. # Output: reg0: percentage attack readying ranged agent,
  49363. ("team_get_attack_readying_ranged_agent_percentage",
  49364. [
  49365. (store_script_param, ":team_no", 1),
  49366. (store_script_param, ":negate", 2),
  49367. (assign, ":num_ranged_agents", 0),
  49368. (assign, ":num_readying_attack", 0),
  49369. (try_for_agents,":cur_agent"),
  49370. (agent_is_alive, ":cur_agent"),
  49371. (agent_is_human, ":cur_agent"),
  49372. (agent_get_team, ":agent_team", ":cur_agent"),
  49373. (assign, ":continue", 0),
  49374. (try_begin),
  49375. (eq, ":negate", 1),
  49376. (teams_are_enemies, ":agent_team", ":team_no"),
  49377. (assign, ":continue", 1),
  49378. (else_try),
  49379. (eq, ":agent_team", ":team_no"),
  49380. (assign, ":continue", 1),
  49381. (try_end),
  49382. (eq, ":continue", 1),
  49383. (agent_get_combat_state, ":agent_cs", ":cur_agent"),
  49384. (agent_get_wielded_item, ":agent_wi0", ":cur_agent", 0),
  49385. (try_begin),
  49386. (is_between,":agent_wi0",ranged_weapons_begin,ranged_weapons_end),
  49387. (val_add, ":num_ranged_agents", 1),
  49388. (try_begin),
  49389. (eq, ":agent_cs", 1),#atkcs_readying_attack
  49390. (val_add, ":num_readying_attack", 1),
  49391. (try_end),
  49392. (try_end),
  49393. (try_end),
  49394.  
  49395. (try_begin),
  49396. (eq, ":num_ranged_agents", 0),
  49397. (assign, ":num_ranged_agents", 1),
  49398. (try_end),
  49399. (store_mul, ":perc_readying_attack_over_rangeds", ":num_readying_attack", 100),
  49400. (val_div, ":perc_readying_attack_over_rangeds", ":num_ranged_agents"),
  49401. (assign, reg0, ":perc_readying_attack_over_rangeds"),
  49402. ]),
  49403.  
  49404. # script_multiplayer_get_requested_squad_count
  49405. # Input: none
  49406. # Output: reg0 = requested squad count
  49407. ("multiplayer_get_requested_squad_count",
  49408. [
  49409. (store_script_param, ":player_id", 1),
  49410. (assign, ":total_troop_count", 0),
  49411. (try_for_range, ":slot_id", slot_player_companion_ids_begin, slot_player_companion_ids_end),
  49412. (player_get_slot, ":troop_count", ":player_id", ":slot_id"),
  49413. (val_add, ":total_troop_count", ":troop_count"),
  49414. (try_end),
  49415.  
  49416. (assign, reg0, ":total_troop_count"),
  49417. ]),
  49418.  
  49419.  
  49420.  
  49421.  
  49422. # script_multiplayer_update_cost_labels
  49423. # Input: none
  49424. # Output: none
  49425. ("multiplayer_update_cost_labels",
  49426. [
  49427. (multiplayer_get_my_player, ":my_player_no"),
  49428. (player_get_gold, ":player_gold", ":my_player_no"),
  49429. (call_script, "script_multiplayer_calculate_cur_selected_items_cost", ":my_player_no", 1),
  49430.  
  49431. (overlay_set_text, "$g_presentation_obj_item_select_12", "str_total_item_cost_reg0"),
  49432. (try_begin),
  49433. (ge, ":player_gold", reg0),
  49434. (overlay_set_color, "$g_presentation_obj_item_select_12", 0xFFFFFF),
  49435. (else_try),
  49436. (overlay_set_color, "$g_presentation_obj_item_select_12", 0xFF0000),
  49437. (try_end),
  49438. ]),
  49439.  
  49440. # script_multiplayer_ccoop_give_round_bonus_gold
  49441. # Input: none
  49442. # Output: none
  49443. ("multiplayer_ccoop_give_round_bonus_gold",
  49444. [
  49445. (try_begin),
  49446. (gt, "$g_multiplayer_ccoop_wave_no", 0),
  49447. (store_mul, ":bonus_gold", "$g_multiplayer_ccoop_wave_no", 100),
  49448. (val_add, ":bonus_gold", 400),
  49449.  
  49450. (get_max_players, ":num_players"),
  49451. (try_for_range, ":cur_player", 0, ":num_players"),
  49452. (player_is_active, ":cur_player"),
  49453. (player_get_gold, ":player_gold", ":cur_player"),
  49454. (val_add, ":player_gold", ":bonus_gold"),
  49455. (player_set_gold, ":cur_player", ":player_gold", multi_max_gold_that_can_be_stored),
  49456. (try_end),
  49457. (try_end),
  49458. ]),
  49459.  
  49460. # script_multiplayer_ccoop_destroy_prison_cart
  49461. # Input: none
  49462. # Output: none
  49463. ("multiplayer_ccoop_destroy_prison_cart",
  49464. [
  49465. (try_begin),
  49466. (multiplayer_is_server),
  49467.  
  49468. (try_begin),
  49469. (multiplayer_is_dedicated_server),
  49470.  
  49471. (assign, "$g_prison_cart_previous_point", "$g_prison_cart_point"),
  49472. (assign, "$g_prison_cart_point", 0),
  49473.  
  49474. (scene_prop_get_instance, ":prison_cart", "spr_prison_cart", 0),
  49475. (scene_prop_get_instance, ":prison_cart_door_left", "spr_prison_cart_door_left", 0),
  49476. (scene_prop_get_instance, ":prison_cart_door_right", "spr_prison_cart_door_right", 0),
  49477.  
  49478. (set_fixed_point_multiplier, 100),
  49479.  
  49480. (prop_instance_get_position, pos1, ":prison_cart"),
  49481. (position_set_z, pos1, -4000), #40m down
  49482. (prop_instance_set_position, ":prison_cart", pos1),
  49483. (prop_instance_set_position, ":prison_cart_door_left", pos1),
  49484. (prop_instance_set_position, ":prison_cart_door_right", pos1),
  49485. (try_end),
  49486.  
  49487. (display_debug_message, "@{!}destroy prison cart"),
  49488.  
  49489. # send destroy prison cart event to clients
  49490. (get_max_players, ":max_players"),
  49491. (try_for_range, ":cur_player", 0, ":max_players"),
  49492. (player_is_active, ":cur_player"),
  49493. (multiplayer_send_int_to_player, ":cur_player", multiplayer_event_other_events,
  49494. multiplayer_event_other_destroy_prison_cart),
  49495. (try_end),
  49496.  
  49497. (try_end),
  49498. ]),
  49499.  
  49500. # script_multiplayer_ccoop_spawn_prison_cart
  49501. # INPUT: none
  49502. # OUTPUT: none
  49503. ("multiplayer_ccoop_spawn_prison_cart",
  49504. [
  49505. (try_begin),
  49506. (multiplayer_is_server),
  49507.  
  49508. # get prison cart random spawn point
  49509. (store_random_in_range, "$g_prison_cart_point", 70, 75),
  49510.  
  49511. #
  49512. (assign, reg0, "$g_prison_cart_point"),
  49513. (display_debug_message, "@{!}spawning prison cart at point {reg0}"),
  49514. #
  49515.  
  49516. # set prison cart position
  49517. (set_fixed_point_multiplier, 100),
  49518. (scene_prop_get_instance, ":prison_cart", "spr_prison_cart", 0),
  49519. (entry_point_get_position, pos1, "$g_prison_cart_point"),
  49520. (position_move_y, pos1, -400), #4m back
  49521. (position_set_z_to_ground_level, pos1),
  49522. (prop_instance_set_position, ":prison_cart", pos1),
  49523.  
  49524. # place left door
  49525. (scene_prop_get_instance, ":prison_cart_door_left", "spr_prison_cart_door_left", 0),
  49526. (init_position, pos2),
  49527. (position_set_x, pos2, 84, 0),
  49528. (position_set_y, pos2, -314, 0),
  49529. (position_set_z, pos2, 121, 0),
  49530. (position_transform_position_to_parent, pos3, pos1, pos2),
  49531. (prop_instance_set_position, ":prison_cart_door_left", pos3),
  49532. (scene_prop_set_hit_points, ":prison_cart_door_left", 300),
  49533.  
  49534. # place right door
  49535. (scene_prop_get_instance, ":prison_cart_door_right", "spr_prison_cart_door_right", 0),
  49536. (init_position, pos2),
  49537. (position_set_x, pos2, -84, 0),
  49538. (position_set_y, pos2, -315, 0),
  49539. (position_set_z, pos2, 123, 0),
  49540. (position_transform_position_to_parent, pos3, pos1, pos2),
  49541. (prop_instance_set_position, ":prison_cart_door_right", pos3),
  49542. (scene_prop_set_hit_points, ":prison_cart_door_right", 300),
  49543.  
  49544. (try_begin),
  49545. #(neg|multiplayer_is_dedicated_server),
  49546. (call_script, "script_multiplayer_ccoop_set_prison_cart_visibility", 1),
  49547.  
  49548. # display prison cart hint message to alive players
  49549. (get_player_agent_no, ":player_agent"),
  49550. (ge, ":player_agent", 0),
  49551. (display_message, "str_prison_cart_hint"),
  49552.  
  49553. (start_presentation, "prsnt_multiplayer_ccoop_next_wave_time_counter"), # to display ask for help to respawn hint
  49554. (try_end),
  49555.  
  49556. # send destroy prison cart event to clients
  49557. (get_max_players, ":max_players"),
  49558. (try_for_range, ":cur_player", 1, ":max_players"),
  49559. (try_begin),
  49560. (player_is_active, ":cur_player"),
  49561. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events,
  49562. multiplayer_event_other_spawn_prison_cart, "$g_prison_cart_point", 300),
  49563. (try_end),
  49564. (try_end),
  49565. (try_end),
  49566. ]),
  49567.  
  49568. # script_multiplayer_ccoop_get_alive_enemy_count
  49569. # Input: none
  49570. # Output: reg0 = alive_enemy_count
  49571. ("multiplayer_ccoop_get_alive_enemy_count",
  49572. [
  49573. (assign, ":alive_enemy_count", 0),
  49574. (try_for_agents, ":cur_agent"),
  49575. (try_begin),
  49576. (agent_is_active, ":cur_agent"),
  49577. (agent_is_human, ":cur_agent"),
  49578. (agent_is_alive, ":cur_agent"),
  49579. (agent_get_team, ":cur_agent_team", ":cur_agent"),
  49580. (eq, ":cur_agent_team", 1),
  49581. (val_add, ":alive_enemy_count", 1),
  49582. (try_end),
  49583. (try_end),
  49584. (assign, reg0, ":alive_enemy_count"),
  49585. ]),
  49586.  
  49587.  
  49588. #berk
  49589. #script_add_troop_to_cur_tableau_for_multiplayer
  49590. # INPUT: troop_no
  49591. # OUTPUT: none
  49592. ("add_troop_to_cur_tableau_for_multiplayer",
  49593. [
  49594. (store_script_param, ":troop_no",1),
  49595.  
  49596. (set_fixed_point_multiplier, 100),
  49597.  
  49598. (cur_tableau_clear_override_items),
  49599. (cur_tableau_set_override_flags, af_override_fullhelm),
  49600. ## (cur_tableau_set_override_flags, af_override_head|af_override_weapons),
  49601.  
  49602. (init_position, pos2),
  49603. (cur_tableau_set_camera_parameters, 1, 8, 8, 10, 10000),
  49604.  
  49605. (init_position, pos5),
  49606. (assign, ":cam_height", 300),
  49607. # (val_mod, ":camera_distance", 5),
  49608. (assign, ":camera_distance", 1000),
  49609. (assign, ":camera_yaw", -15),
  49610. (assign, ":camera_pitch", -18),
  49611. (assign, ":animation", anim_stand_man),
  49612.  
  49613. (troop_get_inventory_slot, ":horse_item", ":troop_no", ek_horse),
  49614. (try_begin),
  49615. (gt, ":horse_item", 0),
  49616. (cur_tableau_add_horse, ":horse_item", pos2, "anim_horse_stand", 0),
  49617. (assign, ":animation", "anim_ride_0"),
  49618. (assign, ":camera_pitch", -20),
  49619. (assign, ":camera_yaw", -25),
  49620. (assign, ":cam_height", 500),
  49621. (assign, ":camera_distance", 1400),
  49622. (position_move_x, pos5, 50, 0),
  49623. (try_end),
  49624. (position_set_z, pos5, ":cam_height"),
  49625.  
  49626. # camera looks towards -z axis
  49627. (position_rotate_x, pos5, -90),
  49628. (position_rotate_z, pos5, 180),
  49629.  
  49630. # now apply yaw and pitch
  49631. (position_rotate_y, pos5, ":camera_yaw"),
  49632. (position_rotate_x, pos5, ":camera_pitch"),
  49633. (position_move_z, pos5, ":camera_distance", 0),
  49634. (position_move_x, pos5, -120, 0),
  49635. (position_move_y, pos5, 130, 0),
  49636.  
  49637. (try_begin),
  49638. (troop_is_hero, ":troop_no"),
  49639. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", -1),
  49640. (else_try),
  49641. (store_mul, ":random_seed", ":troop_no", 126233),
  49642. (val_mod, ":random_seed", 1000),
  49643. (val_add, ":random_seed", 1),
  49644. (cur_tableau_add_troop, ":troop_no", pos2, ":animation", ":random_seed"),
  49645. (try_end),
  49646. (cur_tableau_set_camera_position, pos5),
  49647.  
  49648. (copy_position, pos8, pos5),
  49649. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  49650. (position_rotate_z, pos8, 30),
  49651. (position_rotate_x, pos8, -60),
  49652. (cur_tableau_add_sun_light, pos8, 175,150,125),
  49653. ]),
  49654.  
  49655. # script_mp_set_player_troop_id
  49656. # Input: arg1 = player_no, arg2 = troop_id, arg3 = sync with server
  49657. # Output: none
  49658. ("mp_set_player_troop_id",
  49659. [
  49660. (store_script_param, ":player_no", 1),
  49661. (store_script_param, ":troop_id", 2),
  49662. (store_script_param, ":do_sync", 3),
  49663. (player_set_troop_id, ":player_no", ":troop_id"),
  49664. (try_begin),
  49665. (eq, ":troop_id", -1),
  49666. (call_script, "script_multiplayer_clear_player_selected_items", ":player_no"), # just to make sure
  49667. (else_try),
  49668. (call_script, "script_multiplayer_set_default_item_selections_for_troop", ":player_no", ":troop_id"),
  49669. (try_end),
  49670. # server will do the same, so no need to send the new selections
  49671. (try_begin),
  49672. (neq, ":do_sync", 0),
  49673. (multiplayer_send_int_to_server, multiplayer_event_change_troop_id, ":troop_id"),
  49674. (try_end),
  49675. ]),
  49676.  
  49677. # script_mp_set_player_team_no
  49678. # Input: arg1 = player_no, arg2 = team_no, arg3 = sync with server
  49679. # Output: none
  49680. ("mp_set_player_team_no",
  49681. [
  49682. (store_script_param, ":player_no", 1),
  49683. (store_script_param, ":team_no", 2),
  49684. (store_script_param, ":do_sync", 3),
  49685. (player_set_team_no, ":player_no", ":team_no"),
  49686. (try_begin),
  49687. (neq, ":do_sync", 0),
  49688.  
  49689. #(assign, reg0, ":team_no"),
  49690. #(display_debug_message, "@{!}multiplayer_event_change_team_no is sent with team_no: {reg0}"),
  49691.  
  49692. (multiplayer_send_int_to_server, multiplayer_event_change_team_no, ":team_no"),
  49693. (try_end),
  49694. (call_script, "script_mp_set_player_troop_id", ":player_no", -1, 0),
  49695. #(call_script, "script_multiplayer_reset_squad_on_team_change_for_captain_game_types", ":player_no"),
  49696. # server will do the same, so no need to send the new selections
  49697. ]),
  49698.  
  49699.  
  49700.  
  49701.  
  49702. # script_multiplayer_ccoop_set_prison_cart_visibility
  49703. # Input: arg1 = visible
  49704. # Output: none
  49705. ("multiplayer_ccoop_set_prison_cart_visibility",
  49706. [
  49707. (store_script_param, ":visibility", 1),
  49708.  
  49709. (set_fixed_point_multiplier, 100),
  49710.  
  49711. (try_begin),
  49712. (scene_prop_get_instance, ":prison_cart", "spr_prison_cart", 0),
  49713. (scene_prop_get_instance, ":prison_cart_door_left", "spr_prison_cart_door_left", 0),
  49714. (scene_prop_get_instance, ":prison_cart_door_right", "spr_prison_cart_door_right", 0),
  49715.  
  49716. (try_begin),
  49717. (eq, ":visibility", 0), # if make invisible
  49718.  
  49719. (scene_prop_fade_out, ":prison_cart", 400),
  49720. (scene_prop_fade_out, ":prison_cart_door_left", 400),
  49721. (scene_prop_fade_out, ":prison_cart_door_right", 400),
  49722.  
  49723. (prop_instance_enable_physics, ":prison_cart", 0),
  49724. (prop_instance_enable_physics, ":prison_cart_door_left", 0),
  49725. (prop_instance_enable_physics, ":prison_cart_door_right", 0),
  49726.  
  49727. (store_mission_timer_a, "$g_multiplayer_ccoop_move_prison_cart"),
  49728. (val_add, "$g_multiplayer_ccoop_move_prison_cart", 5), # after 5secs (related to 400)
  49729.  
  49730. (assign, "$g_prison_cart_previous_point", "$g_prison_cart_point"),
  49731. (assign, "$g_prison_cart_point", 0),
  49732. (else_try),
  49733. (gt, ":visibility", 0), # if make visible
  49734.  
  49735. (scene_prop_fade_in, ":prison_cart", 300),
  49736. (scene_prop_fade_in, ":prison_cart_door_left", 300),
  49737. (scene_prop_fade_in, ":prison_cart_door_right", 300),
  49738.  
  49739. (prop_instance_enable_physics, ":prison_cart", 1),
  49740. (prop_instance_enable_physics, ":prison_cart_door_left", 1),
  49741. (prop_instance_enable_physics, ":prison_cart_door_right", 1),
  49742. (try_end),
  49743. (try_end),
  49744. ]),
  49745.  
  49746. # script_multiplayer_ccoop_spawn_player_and_bots
  49747. # INPUT: 1. player_no
  49748. # OUTPUT: 0 if player not spawned, 1 if player spawned on reg0
  49749. ("multiplayer_ccoop_spawn_player_and_bots",
  49750. [
  49751. (store_script_param, ":player_no", 1),
  49752.  
  49753. (try_begin),
  49754. (neg|player_is_busy_with_menus, ":player_no"),
  49755. (player_get_team_no, ":player_team", ":player_no"), #if player is currently spectator do not spawn his agent
  49756. (lt, ":player_team", multi_team_spectator),
  49757.  
  49758. (player_get_troop_id, ":player_troop", ":player_no"), #if troop is not selected do not spawn his agent
  49759. (ge, ":player_troop", 0),
  49760.  
  49761. (call_script, "script_multiplayer_buy_agent_equipment", ":player_no"),
  49762.  
  49763. (troop_get_inventory_slot, ":has_horse", ":player_troop", ek_horse),
  49764. (try_begin),
  49765. (ge, ":has_horse", 0),
  49766. (assign, ":is_horseman", 1),
  49767. (else_try),
  49768. (assign, ":is_horseman", 0),
  49769. (try_end),
  49770.  
  49771. (call_script, "script_multiplayer_get_bots_count", ":player_no"),
  49772. (assign, ":bot_count", reg0),
  49773.  
  49774. (try_begin),
  49775. #(gt, "$g_prison_cart_point", 0),
  49776. (gt, "$g_multiplayer_ccoop_enemy_respawn_secs", 31),
  49777.  
  49778. (assign, reg0, "$g_prison_cart_previous_point"),
  49779. (display_debug_message, "@{!}prison cart spawn at point {reg0}"),
  49780.  
  49781. (player_spawn_new_agent, ":player_no", "$g_prison_cart_previous_point"),
  49782. (call_script, "script_multiplayer_spawn_player_bot_squad_at_point", ":player_no", ":player_team", "$g_prison_cart_previous_point"),
  49783. (else_try),
  49784. (try_begin),
  49785. (gt, ":bot_count", 0),
  49786. (call_script, "script_multiplayer_get_spawn_point_close_to_bots", ":player_no"),
  49787. (player_spawn_new_agent, ":player_no", reg0),
  49788.  
  49789. # spawn requested bots
  49790. (call_script, "script_multiplayer_get_spawn_point_close_to_bots", ":player_no"),
  49791. (call_script, "script_multiplayer_spawn_player_bot_squad_at_point", ":player_no", ":player_team", reg0),
  49792. (else_try),
  49793. (call_script, "script_multiplayer_find_spawn_point", ":player_team", 1, ":is_horseman"),
  49794. (assign, ":point_no", reg0),
  49795. (player_spawn_new_agent, ":player_no", ":point_no"),
  49796. (call_script, "script_multiplayer_spawn_player_bot_squad_at_point", ":player_no", ":player_team", ":point_no"),
  49797. (end_try),
  49798. (end_try),
  49799.  
  49800. (try_begin),
  49801. (player_get_slot, ":player_first_spawn", ":player_no", slot_player_first_spawn),
  49802. (gt, ":player_first_spawn", 0),
  49803. #(player_set_slot, ":player_no", slot_player_join_time, ":player_join_time"),
  49804. (player_set_slot, ":player_no", slot_player_first_spawn, 0),
  49805. (try_end),
  49806.  
  49807. (assign, reg0, 1), # player spawned
  49808. (else_try),
  49809. (assign, reg0, 0), # player not spawned
  49810. (end_try),
  49811. ]),
  49812.  
  49813. # script_multiplayer_set_g_multiplayer_is_game_type_captain
  49814. # Input: none
  49815. # Output: none
  49816. ("multiplayer_set_g_multiplayer_is_game_type_captain",
  49817. [
  49818. (try_begin),
  49819. (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_coop),
  49820. (assign, "$g_multiplayer_is_game_type_captain", 1),
  49821. (else_try),
  49822. (assign, "$g_multiplayer_is_game_type_captain", 0),
  49823. (try_end),
  49824. ]),
  49825.  
  49826.  
  49827. # script_cf_multiplayer_can_buy_squad
  49828. # Input: none
  49829. # Output: reg0:can buy squad
  49830. ("cf_multiplayer_can_buy_squad",
  49831. [
  49832. (assign, ":can_buy_squad", 0),
  49833. (try_begin),
  49834. (eq, "$g_multiplayer_is_game_type_captain", 1),
  49835. (assign, ":can_buy_squad", 1),
  49836. (try_end),
  49837. # disable squad buying for second team
  49838. # (try_begin),
  49839. # (eq, ":can_buy_squad", 1),
  49840. # (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_battle),
  49841. # (multiplayer_get_my_team, ":my_team"),
  49842. # (eq, ":my_team", 1),
  49843. # (assign, ":can_buy_squad", 0),
  49844. # (try_end),
  49845. (eq, ":can_buy_squad", 1),
  49846. ]),
  49847.  
  49848. # script_avarage_of_two_points
  49849. # Input: pos1, pos2
  49850. # Output: pos1
  49851. ("avarage_of_two_points",
  49852. [
  49853. (position_get_x, ":x_pos1", pos1),
  49854. (position_get_x, ":x_pos2", pos2),
  49855. (val_add, ":x_pos1", ":x_pos2"),
  49856. (val_div, ":x_pos1", 2),
  49857. (position_set_x, pos1, ":x_pos1"),
  49858.  
  49859. (position_get_y, ":y_pos1", pos1),
  49860. (position_get_y, ":y_pos2", pos2),
  49861. (val_add, ":y_pos1", ":y_pos2"),
  49862. (val_div, ":y_pos1", 2),
  49863. (position_set_y, pos1, ":y_pos1"),
  49864.  
  49865. (position_get_z, ":z_pos1", pos1),
  49866. (position_get_z, ":z_pos2", pos2),
  49867. (val_add, ":z_pos1", ":z_pos2"),
  49868. (val_div, ":z_pos1", 2),
  49869. (position_set_z, pos1, ":z_pos1"),
  49870. ]),
  49871.  
  49872. # script_multiplayer_ccoop_start_player_and_squad_respawn_period
  49873. # INPUT: arg1 = spawn_alive_player_squad
  49874. # OUTPUT: none
  49875. ("multiplayer_ccoop_start_player_and_squad_respawn_period",
  49876. [
  49877. (try_begin),
  49878. (multiplayer_is_server),
  49879. #(neq, "$g_multiplayer_ccoop_wave_no", 1),
  49880.  
  49881. (store_script_param, "$g_multiplayer_ccoop_spawn_alive_player_squad_and_minus_one_first_spawn_slots_and_minus_one_first_spawn_slots", 1),
  49882.  
  49883. # reset first spawn slot
  49884. (get_max_players, ":max_players"),
  49885. (try_for_range, ":player_no", 0, ":max_players"),
  49886. (player_is_active, ":player_no"),
  49887. #(neg|player_slot_eq, ":player_no", slot_player_first_spawn, -1),
  49888. (try_begin),
  49889. (eq, "$g_multiplayer_ccoop_spawn_alive_player_squad_and_minus_one_first_spawn_slots_and_minus_one_first_spawn_slots", 1),
  49890. (player_set_slot, ":player_no", slot_player_first_spawn, 1),
  49891. (else_try),
  49892. (player_get_slot, ":player_first_spawn", ":player_no", slot_player_first_spawn),
  49893. (ge, ":player_first_spawn", 0),
  49894. (player_set_slot, ":player_no", slot_player_first_spawn, 1),
  49895. (try_end),
  49896. #(multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_other_events, multiplayer_event_other_event_ccoop_lock_companions, 1),
  49897. (try_end),
  49898.  
  49899. # start player&squad spawn period
  49900. (assign, "$g_multiplayer_ccoop_spawn_player_and_squad_counter", 30),
  49901. (try_end),
  49902. ]),
  49903.  
  49904.  
  49905.  
  49906. # script_multiplayer_upgrade_player_equipment
  49907. # INPUT: arg1 = player_no
  49908. # OUTPUT: none
  49909. ("multiplayer_upgrade_player_equipment",
  49910. [
  49911. (store_script_param, ":player_no", 1),
  49912.  
  49913. (assign, reg0, ":player_no"),
  49914. (display_debug_message, "@{!}multiplayer_upgrade_player_equipment: {reg0}"),
  49915.  
  49916. (player_get_troop_id, ":player_troop", ":player_no"),
  49917. (player_get_agent_id, ":player_agent", ":player_no"),
  49918. (player_get_gold, ":player_gold", ":player_no"),
  49919. (try_for_range, ":cur_item_slot", 0, ek_horse), # don't include horse
  49920. (store_add, ":cur_player_slot", ":cur_item_slot", slot_player_cur_selected_item_indices_begin),
  49921. (store_add, ":cur_player_slot_i", ":cur_item_slot", slot_player_selected_item_indices_begin),
  49922. (player_get_slot, ":cur_player_slot_i_item", ":player_no", ":cur_player_slot_i"),
  49923. (agent_get_item_slot, ":agent_item", ":player_agent", ":cur_item_slot"),
  49924. (try_begin),
  49925. (this_or_next|lt, ":cur_player_slot_i_item", 0),
  49926. (this_or_next|is_between, ":agent_item", coop_drops_begin, coop_new_items_end),
  49927. (player_item_slot_is_picked_up, ":player_no", ":cur_item_slot"),
  49928. (player_set_slot, ":player_no", ":cur_player_slot", -1),
  49929. #(str_store_item_name, s0, ":agent_item"),
  49930. #(display_message, "@setting {s0} as null"),
  49931. (else_try),
  49932. #(agent_get_item_slot, ":agent_item", ":player_agent", ":cur_item_slot"),
  49933. (player_set_slot, ":player_no", ":cur_player_slot", ":agent_item"),
  49934. (try_end),
  49935.  
  49936. (try_end),
  49937. (player_set_slot, ":player_no", slot_player_cur_selected_item_indices_begin + 8, -1), # mark horse as -1
  49938. (call_script, "script_multiplayer_calculate_cur_selected_items_cost", ":player_no", 0),
  49939. (assign, ":added_gold", reg0),
  49940. #(display_message, "@gold to add: {reg0}"),
  49941. (val_add, ":player_gold", ":added_gold"),
  49942.  
  49943. (try_for_range, ":i_item", slot_player_selected_item_indices_begin, slot_player_selected_item_indices_end),
  49944. (player_get_slot, ":selected_item_index", ":player_no", ":i_item"),
  49945. (store_sub, ":i_cur_selected_item", ":i_item", slot_player_selected_item_indices_begin),
  49946. (agent_get_item_slot, ":agent_item", ":player_agent", ":i_cur_selected_item"),
  49947. (try_begin),
  49948. (this_or_next|lt, ":selected_item_index", 0),
  49949. (this_or_next|player_item_slot_is_picked_up, ":player_no", ":i_cur_selected_item"),
  49950. (this_or_next|is_between, ":agent_item", coop_drops_begin, coop_new_items_end),
  49951. (eq, ":i_cur_selected_item", ek_horse), # remove horse selection for this special case
  49952. (assign, ":selected_item_index", -1),
  49953. (try_end),
  49954. (val_add, ":i_cur_selected_item", slot_player_cur_selected_item_indices_begin),
  49955. (player_set_slot, ":player_no", ":i_cur_selected_item", ":selected_item_index"),
  49956. (try_end),
  49957. (assign, ":end_cond", 1000),
  49958.  
  49959.  
  49960. (try_for_range, ":unused", 0, ":end_cond"),
  49961. (call_script, "script_multiplayer_calculate_cur_selected_items_cost", ":player_no", 0),
  49962. (assign, ":total_cost", reg0),
  49963. (try_begin),
  49964. (gt, ":total_cost", ":player_gold"),
  49965. #downgrade one of the selected items
  49966. #first normalize the prices
  49967. #then prioritize some of the weapon classes for specific troop classes
  49968. (call_script, "script_multiplayer_get_troop_class", ":player_troop"),
  49969. (assign, ":player_troop_class", reg0),
  49970.  
  49971. (assign, ":max_cost_value", 0),
  49972. (assign, ":max_cost_value_index", -1),
  49973. (try_for_range, ":i_item", slot_player_cur_selected_item_indices_begin, slot_player_cur_selected_item_indices_end),
  49974. (player_get_slot, ":item_id", ":player_no", ":i_item"),
  49975. (ge, ":item_id", 0), #might be -1 for horses etc.
  49976. (call_script, "script_multiplayer_get_item_value_for_troop", ":item_id", ":player_troop"),
  49977. (assign, ":item_value", reg0),
  49978. (store_sub, ":item_type", ":i_item", slot_player_cur_selected_item_indices_begin),
  49979. (try_begin), #items
  49980. (this_or_next|eq, ":item_type", 0),
  49981. (this_or_next|eq, ":item_type", 1),
  49982. (this_or_next|eq, ":item_type", 2),
  49983. (eq, ":item_type", 3),
  49984. (val_mul, ":item_value", 5),
  49985. (else_try), #head
  49986. (eq, ":item_type", 4),
  49987. (val_mul, ":item_value", 4),
  49988. (else_try), #body
  49989. (eq, ":item_type", 5),
  49990. (val_mul, ":item_value", 2),
  49991. (else_try), #foot
  49992. (eq, ":item_type", 6),
  49993. (val_mul, ":item_value", 8),
  49994. (else_try), #gloves
  49995. (eq, ":item_type", 7),
  49996. (val_mul, ":item_value", 8),
  49997. (else_try), #horse
  49998. #base value (most expensive)
  49999. (try_end),
  50000. (item_get_slot, ":item_class", ":item_id", slot_item_multiplayer_item_class),
  50001. (try_begin),
  50002. (eq, ":player_troop_class", multi_troop_class_infantry),
  50003. (this_or_next|eq, ":item_class", multi_item_class_type_sword),
  50004. (this_or_next|eq, ":item_class", multi_item_class_type_axe),
  50005. (this_or_next|eq, ":item_class", multi_item_class_type_blunt),
  50006. (this_or_next|eq, ":item_class", multi_item_class_type_war_picks),
  50007. (this_or_next|eq, ":item_class", multi_item_class_type_two_handed_sword),
  50008. (this_or_next|eq, ":item_class", multi_item_class_type_small_shield),
  50009. (eq, ":item_class", multi_item_class_type_two_handed_axe),
  50010. (val_div, ":item_value", 2),
  50011. (else_try),
  50012. (eq, ":player_troop_class", multi_troop_class_spearman),
  50013. (this_or_next|eq, ":item_class", multi_item_class_type_spear),
  50014. (eq, ":item_class", multi_item_class_type_large_shield),
  50015. (val_div, ":item_value", 2),
  50016. (else_try),
  50017. (eq, ":player_troop_class", multi_troop_class_cavalry),
  50018. (this_or_next|eq, ":item_class", multi_item_class_type_lance),
  50019. (this_or_next|eq, ":item_class", multi_item_class_type_sword),
  50020. (eq, ":item_class", multi_item_class_type_horse),
  50021. (val_div, ":item_value", 2),
  50022. (else_try),
  50023. (eq, ":player_troop_class", multi_troop_class_archer),
  50024. (this_or_next|eq, ":item_class", multi_item_class_type_bow),
  50025. (eq, ":item_class", multi_item_class_type_arrow),
  50026. (val_div, ":item_value", 2),
  50027. (else_try),
  50028. (eq, ":player_troop_class", multi_troop_class_crossbowman),
  50029. (this_or_next|eq, ":item_class", multi_item_class_type_crossbow),
  50030. (eq, ":item_class", multi_item_class_type_bolt),
  50031. (val_div, ":item_value", 2),
  50032. (else_try),
  50033. (eq, ":player_troop_class", multi_troop_class_mounted_archer),
  50034. (this_or_next|eq, ":item_class", multi_item_class_type_bow),
  50035. (this_or_next|eq, ":item_class", multi_item_class_type_arrow),
  50036. (eq, ":item_class", multi_item_class_type_horse),
  50037. (val_div, ":item_value", 2),
  50038. (else_try),
  50039. (eq, ":player_troop_class", multi_troop_class_mounted_crossbowman),
  50040. (this_or_next|eq, ":item_class", multi_item_class_type_crossbow),
  50041. (this_or_next|eq, ":item_class", multi_item_class_type_bolt),
  50042. (eq, ":item_class", multi_item_class_type_horse),
  50043. (val_div, ":item_value", 2),
  50044. (try_end),
  50045.  
  50046. (try_begin),
  50047. (gt, ":item_value", ":max_cost_value"),
  50048. (assign, ":max_cost_value", ":item_value"),
  50049. (assign, ":max_cost_value_index", ":i_item"),
  50050. (try_end),
  50051. (try_end),
  50052.  
  50053. #max_cost_value and max_cost_value_index will definitely be valid
  50054. #unless no items are left (therefore some items must cost 0 gold)
  50055. (player_get_slot, ":item_id", ":player_no", ":max_cost_value_index"),
  50056. (call_script, "script_multiplayer_get_previous_item_for_item_and_troop", ":item_id", ":player_troop"),
  50057. (assign, ":item_id", reg0),
  50058. (player_set_slot, ":player_no", ":max_cost_value_index", ":item_id"),
  50059. (else_try),
  50060.  
  50061. (assign, ":end_cond", 0),
  50062. (assign, ":total_cost", reg0),
  50063. #(display_message, "@total_cost: {reg0}"),
  50064. (val_sub, ":player_gold", ":total_cost"),
  50065. (player_set_gold, ":player_no", ":player_gold", multi_max_gold_that_can_be_stored),
  50066. (try_for_range, ":i_item", slot_player_cur_selected_item_indices_begin, slot_player_cur_selected_item_indices_end),
  50067. (player_get_slot, ":item_id", ":player_no", ":i_item"),
  50068.  
  50069.  
  50070. # add the item to agent
  50071. (try_begin),
  50072. (ge, ":item_id", 0),
  50073.  
  50074. (store_sub, ":item_slot", ":i_item", slot_player_cur_selected_item_indices_begin),
  50075. #(store_add, ":i_actual_selected_item", ":item_slot", slot_player_selected_item_indices_begin),
  50076. #(player_slot_ge, ":player_no", ":i_actual_selected_item", 0),
  50077. (agent_get_item_slot, ":agent_item", ":player_agent", ":item_slot"),
  50078. (neq, ":agent_item", ":item_id"),
  50079.  
  50080. (neg|is_between, ":agent_item", coop_drops_begin, coop_new_items_end),
  50081.  
  50082. (get_max_players, ":num_players"),
  50083. (try_begin),
  50084. (ge, ":agent_item", 0),
  50085.  
  50086. (agent_unequip_item, ":player_agent", ":agent_item", ":item_slot"),
  50087.  
  50088. (try_for_range, ":cur_player", 1, ":num_players"),
  50089. (player_is_active, ":cur_player"),
  50090. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_unequip_item,
  50091. ":player_agent", ":agent_item", ":item_slot"),
  50092. (try_end),
  50093. (try_end),
  50094. (agent_equip_item, ":player_agent", ":item_id"),
  50095.  
  50096. (try_for_range, ":cur_player", 1, ":num_players"),
  50097. (player_is_active, ":cur_player"),
  50098. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_equip_item,
  50099. ":player_agent", ":item_id"),
  50100. (try_end),
  50101.  
  50102. (try_end),
  50103. (try_end),
  50104. (player_set_slot, ":player_no", slot_player_total_equipment_value, ":total_cost"),
  50105. (try_end),
  50106. (try_end),
  50107. ]),
  50108.  
  50109. # script_cf_multiplayer_upgrade_companion_equipment
  50110. # INPUT: arg1 = agent_no
  50111. # OUTPUT: none
  50112. ("cf_multiplayer_upgrade_companion_equipment",
  50113. [
  50114. (store_script_param, ":agent_no", 1),
  50115. #(agent_is_human, ":agent_no"),
  50116. #(agent_is_alive, ":agent_no"),
  50117. #(agent_is_non_player, ":agent_no"),
  50118. #(agent_get_team, ":team_no", ":agent_no"),
  50119.  
  50120. (agent_get_group, ":agent_group", ":agent_no"),
  50121. (player_is_active, ":agent_group"),
  50122. (agent_get_troop_id, ":troop_no", ":agent_no"),
  50123.  
  50124. #(assign, reg0, ":troop_no"),
  50125. #(display_message, "@troop no: {reg0}"),
  50126.  
  50127. (assign, ":matching_companion_found", 0),
  50128.  
  50129. (try_for_range, ":cur_slot", slot_player_companion_ids_begin, slot_player_companion_ids_end),
  50130. (player_get_slot, ":companion_no", ":agent_group", ":cur_slot"),
  50131. (eq, ":troop_no", ":companion_no"),
  50132. (assign, ":matching_companion_found", 1),
  50133. #(display_message, "@pass"),
  50134. (val_sub, ":cur_slot", slot_player_companion_ids_begin),
  50135. (val_add, ":cur_slot", slot_player_companion_levels_begin),
  50136. (player_get_slot, ":companion_level", ":agent_group", ":cur_slot"),
  50137. (val_sub, ":cur_slot", slot_player_companion_levels_begin),
  50138. (val_add, ":cur_slot", slot_player_companion_classes_begin),
  50139. (player_get_slot, ":companion_template", ":agent_group", ":cur_slot"),
  50140. (try_end),
  50141.  
  50142. #(try_begin),
  50143. # (ge, ":companion_template", 0),
  50144. # (str_store_troop_name, s0, ":companion_template"),
  50145. # (multiplayer_send_string_to_player, ":agent_group", multiplayer_event_show_server_message, "@{!}companion template identified as {s0}"),
  50146. #(try_end),
  50147.  
  50148. (eq, ":matching_companion_found", 1),
  50149.  
  50150. (try_begin),
  50151. (is_between, ":companion_template", multiplayer_coop_class_templates_begin, multiplayer_coop_class_templates_end),
  50152. (assign, ":multiplier", 18),
  50153. (else_try),
  50154. (assign, ":multiplier", 16),
  50155. (try_end),
  50156.  
  50157. (try_begin),
  50158. (lt, ":companion_level", 3),
  50159. (store_mul, ":template_leveler", ":companion_level", ":multiplier"),
  50160. (val_add, ":companion_template", ":template_leveler"),
  50161. (else_try),
  50162. (store_mul, ":template_leveler", 3, ":multiplier"), #4 is max level
  50163. (val_add, ":companion_template", ":template_leveler"),
  50164. (try_end),
  50165.  
  50166. #(try_begin),
  50167. # (ge, ":companion_template", 0),
  50168. # (str_store_troop_name, s0, ":companion_template"),
  50169. # (multiplayer_send_string_to_player, ":agent_group", multiplayer_event_show_server_message, "@{!}companion template multiplied to {s0}"),
  50170. #(try_end),
  50171.  
  50172. #(assign, reg0, ":companion_template"),
  50173. #(display_message, "@companion template: {reg0}"),
  50174.  
  50175. (assign, ":has_special_melee", 0),
  50176. (assign, ":has_special_ranged", 0),
  50177. #(eq, ":team_no", 0),
  50178.  
  50179. (troop_equip_items, ":companion_template"),
  50180. (get_max_players, ":num_players"),
  50181.  
  50182. (try_for_range, ":cur_slot", 0, 4),
  50183. (agent_get_item_slot, ":item_id", ":agent_no", ":cur_slot"),
  50184. (ge, ":item_id", 0),
  50185. (try_begin),
  50186. (is_between, ":item_id", coop_drops_begin, coop_new_items_end),
  50187. #(assign, reg0, ":agent_no"),
  50188. #(assign, reg1, ":cur_slot"),
  50189. #(assign, reg2, ":item_id"),
  50190. #(display_message, "@special item on companion! agent: {reg0} slot: {reg1} item: {reg2}"),
  50191. (item_get_type, ":item_type", ":item_id"),
  50192. (try_begin),
  50193. (this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
  50194. (this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
  50195. (eq, ":item_type", itp_type_polearm),
  50196. (assign, ":has_special_melee", 1),
  50197. (else_try),
  50198. (this_or_next|eq, ":item_type", itp_type_bow),
  50199. (this_or_next|eq, ":item_type", itp_type_crossbow),
  50200. (eq, ":item_type", itp_type_thrown),
  50201. (assign, ":has_special_ranged", 1),
  50202. (try_end),
  50203. (else_try),
  50204. (agent_unequip_item, ":agent_no", ":item_id", ":cur_slot"),
  50205. (try_for_range, ":cur_player", 1, ":num_players"),
  50206. (player_is_active, ":cur_player"),
  50207. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_unequip_item,
  50208. ":agent_no", ":item_id", ":cur_slot"),
  50209. (try_end),
  50210. (try_end),
  50211. (try_end),
  50212.  
  50213. (try_for_range, ":cur_slot", 0, 9),
  50214. #(ge, ":item_id", 0),
  50215.  
  50216. (troop_get_inventory_slot, ":cur_item", ":companion_template", ":cur_slot"),
  50217. #(assign, reg0, ":cur_item"),
  50218. #(display_message, "@item from template {reg0}"),
  50219. (gt, ":cur_item", 0),
  50220. #(str_store_item_name, s0, ":cur_item"),
  50221. #(multiplayer_send_string_to_player, ":agent_group", multiplayer_event_show_server_message, "@{!}companion template has item {s0}"),
  50222. (item_get_type, ":cur_item_type", ":cur_item"),
  50223. (try_begin),
  50224. (is_between, ":cur_item_type", itp_type_head_armor, itp_type_pistol),
  50225. (assign, ":found_matching_armor_piece", 0),
  50226. (try_for_range, ":cur_equipped_slot", 4, 8),
  50227. (agent_get_item_slot, ":cur_item_equipped", ":agent_no", ":cur_equipped_slot"),
  50228. (ge, ":cur_item_equipped", 0),
  50229. (item_get_type, ":cur_item_equipped_type", ":cur_item_equipped"),
  50230. (eq, ":cur_item_type", ":cur_item_equipped_type"),
  50231. #(str_store_item_name, s1, ":cur_item_equipped"),
  50232. (assign, ":found_matching_armor_piece", 1),
  50233. (neq, ":cur_item_equipped", ":cur_item"),
  50234. #(multiplayer_send_string_to_player, ":agent_group", multiplayer_event_show_server_message, "@{!}found matching armour piece {s1}"),
  50235. #(display_message, "@found_matching_armor_piece"),
  50236. (neg|is_between, ":cur_item_equipped", coop_drops_begin, coop_new_items_end),
  50237. (agent_unequip_item, ":agent_no", ":cur_item_equipped", ":cur_equipped_slot"),
  50238. (try_for_range, ":cur_player", 1, ":num_players"),
  50239. (player_is_active, ":cur_player"),
  50240. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_unequip_item,
  50241. ":agent_no", ":cur_item_equipped", ":cur_equipped_slot"),
  50242. (try_end),
  50243. (agent_equip_item, ":agent_no", ":cur_item"),
  50244. #(multiplayer_send_string_to_player, ":agent_group", multiplayer_event_show_server_message, "@{!}equipping {s0}"),
  50245. (try_for_range, ":cur_player", 1, ":num_players"),
  50246. (player_is_active, ":cur_player"),
  50247. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_equip_item,
  50248. ":agent_no", ":cur_item"),
  50249. (try_end),
  50250. (try_end),
  50251. (try_begin),
  50252. (eq, ":found_matching_armor_piece", 0),
  50253. (agent_equip_item, ":agent_no", ":cur_item"),
  50254. (try_for_range, ":cur_player", 1, ":num_players"),
  50255. (player_is_active, ":cur_player"),
  50256. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_equip_item,
  50257. ":agent_no", ":cur_item"),
  50258. (try_end),
  50259. (try_end),
  50260. (else_try),
  50261. (assign, ":equip_cur_item", 0),
  50262. (try_begin),
  50263. (this_or_next|eq, ":cur_item_type", itp_type_one_handed_wpn),
  50264. (this_or_next|eq, ":cur_item_type", itp_type_two_handed_wpn),
  50265. (this_or_next|eq, ":cur_item_type", itp_type_shield),
  50266. (eq, ":cur_item_type", itp_type_polearm),
  50267. (eq, ":has_special_melee", 0),
  50268. (assign, ":equip_cur_item", 1),
  50269. (else_try),
  50270. (this_or_next|eq, ":cur_item_type", itp_type_bow),
  50271. (this_or_next|eq, ":cur_item_type", itp_type_crossbow),
  50272. (this_or_next|eq, ":cur_item_type", itp_type_thrown),
  50273. (this_or_next|eq, ":cur_item_type", itp_type_bolts),
  50274. (eq, ":cur_item_type", itp_type_arrows),
  50275. (eq, ":has_special_ranged", 0),
  50276. (assign, ":equip_cur_item", 1),
  50277. (try_end),
  50278. (eq, ":equip_cur_item", 1),
  50279. #(multiplayer_send_string_to_player, ":agent_group", multiplayer_event_show_server_message, "@{!}equipping {s0}"),
  50280. (agent_equip_item, ":agent_no", ":cur_item"),
  50281. (try_for_range, ":cur_player", 1, ":num_players"),
  50282. (player_is_active, ":cur_player"),
  50283. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_equip_item,
  50284. ":agent_no", ":cur_item"),
  50285. (try_end),
  50286. #(try_end),
  50287. (try_end),
  50288. (try_end),
  50289.  
  50290. ]),
  50291.  
  50292.  
  50293.  
  50294.  
  50295.  
  50296. #script_mp_spawn_coop_companion
  50297. ("mp_spawn_coop_companion", #this code is to make sure that companions spawn with or without their horse depending on their class/map
  50298. [
  50299. (store_script_param, ":player_no", 1),
  50300. (store_script_param, ":troop_no", 2),
  50301. (store_script_param, ":slot_no", 3),
  50302. (store_script_param, ":player_team", 4),
  50303. (store_script_param, ":point_no", 5),
  50304.  
  50305. (troop_equip_items, ":troop_no"),
  50306.  
  50307.  
  50308. (val_add, ":slot_no", 2),
  50309. (player_get_slot, ":class_id", ":player_no", ":slot_no"),
  50310.  
  50311. (assign, ":has_horse", 0),
  50312.  
  50313. (try_for_range, ":cur_slot", 0, 9), #check if the class they are spawning as is mounted (default classes/personal equipment always has a horse)
  50314. (eq, ":has_horse", 0),
  50315. (troop_get_inventory_slot, ":cur_item", ":class_id", ":cur_slot"),
  50316. (gt, ":cur_item", 0),
  50317. (item_get_type, ":cur_item_type", ":cur_item"),
  50318. (eq, ":cur_item_type", itp_type_horse),
  50319. (assign, ":has_horse", 1), #found a horse!
  50320. (try_end),
  50321.  
  50322. (store_current_scene, ":cur_scene"),
  50323. (scene_get_slot, ":scene_disallow_horses", ":cur_scene", slot_scene_ccoop_disallow_horses), #this is set as 1 for all maps that should be played without horses
  50324.  
  50325. (try_for_range, ":cur_slot", 0, 9),
  50326. (troop_get_inventory_slot, ":cur_item", ":troop_no", ":cur_slot"),
  50327. (ge, ":cur_item", 0),
  50328. (item_get_type, ":cur_item_type", ":cur_item"),
  50329. (troop_remove_item, ":troop_no", ":cur_item"),
  50330. (try_begin),
  50331. (eq, ":cur_item_type", itp_type_horse),
  50332. (troop_set_slot, ":troop_no", slot_troop_coop_lord_spawned, ":cur_item"),
  50333. (else_try),
  50334. (val_add, ":cur_slot", multi_data_equipment_holder_begin),
  50335. (troop_set_slot, "trp_multiplayer_data", ":cur_slot", ":cur_item"),
  50336. (try_end),
  50337. (try_end),
  50338.  
  50339. (troop_clear_inventory, ":troop_no"),
  50340.  
  50341. (try_for_range, ":cur_slot", multi_data_equipment_holder_begin, multi_data_equipment_holder_end),
  50342. (troop_get_slot, ":cur_item", "trp_multiplayer_data", ":cur_slot"),
  50343. (gt, ":cur_item", 0),
  50344. (troop_add_item, ":troop_no", ":cur_item"),
  50345. (try_end),
  50346.  
  50347. (try_begin),
  50348. (eq, ":scene_disallow_horses", 0),
  50349. (eq, ":has_horse", 1),
  50350. (troop_get_slot, ":horse_no", ":troop_no", slot_troop_coop_lord_spawned),
  50351. (troop_add_item, ":troop_no", ":horse_no"),
  50352. (troop_set_slot, ":troop_no", slot_troop_coop_lord_spawned, -1),
  50353. (try_end),
  50354.  
  50355. (troop_equip_items, ":troop_no"),
  50356.  
  50357. (modify_visitors_at_site, ":cur_scene"),
  50358. (add_visitors_to_current_scene, ":point_no", ":troop_no", 1, ":player_team", ":player_no"),
  50359.  
  50360.  
  50361.  
  50362. ]),
  50363.  
  50364. #script_coop_generate_item_drop
  50365. # INPUT: none
  50366. # OUTPUT: reg0 = item_id
  50367. ("coop_generate_item_drop",
  50368. [
  50369. (store_script_param, ":player_id", 1),
  50370. #(store_script_param, ":instance_id", 1),
  50371. #(store_script_param, ":user_id", 2),
  50372.  
  50373. (store_random_in_range, "$g_ccoop_currently_dropping_item", coop_drops_begin, coop_drops_end), #change this to add variation to the items that drop - any item should work! The description will be hidden for regular items
  50374. #(assign, "$g_ccoop_currently_dropping_item", "itm_javelin_bow"), ##DEBUG - makes chests always drop the same item - useful for testing!
  50375. (player_set_slot, ":player_id", slot_player_coop_dropped_item, "$g_ccoop_currently_dropping_item"), #we hold the item in a slot, server-side, to prevent funny business!
  50376. #(assign, reg0, ":dropped_item"),
  50377.  
  50378.  
  50379. ]),
  50380.  
  50381. #script_coop_drop_item
  50382. # INPUT: arg1 = item_id
  50383. # OUTPUT: none
  50384. ("coop_drop_item",
  50385. [
  50386. (store_script_param, reg0, 1),
  50387. (store_script_param, reg1, 2),
  50388. (store_script_param, reg2, 3),
  50389.  
  50390. #script simply starts the presentation but could have extra features added
  50391.  
  50392. (start_presentation, "prsnt_coop_assign_drop_to_group_member"),
  50393.  
  50394.  
  50395. ]),
  50396.  
  50397. #try brackets for this need to be checked and rearranged
  50398. #script_cf_coop_give_item_to_assigned_group_member
  50399. # INPUT: arg1 = item_id, arg2 = item_id
  50400. # OUTPUT: none
  50401. ("cf_coop_give_item_to_assigned_group_member",
  50402. [
  50403. (store_script_param, ":player_no", 1),
  50404. (store_script_param, ":assigned_agent_id", 2),
  50405. (player_is_active, ":player_no"),
  50406.  
  50407. (assign, ":cancel_drop", 0), #script can be awkward because it relies on data sent by clients!
  50408.  
  50409.  
  50410.  
  50411.  
  50412.  
  50413. (assign, ":total_to_be_equipped", 0), #we need to check how many weapon slots the player is using and drop the item if there isn't enough space
  50414.  
  50415. (player_get_slot, ":item_id", ":player_no", slot_player_coop_dropped_item),
  50416. (ge, ":item_id", 0), #we should also make sure that the item is real - this is kept server side but bad code can change slots accidentally! ehem...
  50417.  
  50418. (try_begin),
  50419. (eq, ":assigned_agent_id", 0), #this is sent as 0, when the client wants to equip the item to their own character - behaviour for players and companions is different
  50420. (player_get_agent_id, ":assigned_agent_id", ":player_no"), #but we need the agent id anyway...
  50421. (assign, ":group_id", ":player_no"),
  50422. (try_begin),
  50423. (agent_is_active, ":assigned_agent_id"),
  50424. (agent_is_alive, ":assigned_agent_id"), #let's make sure they didn't die at a bad time!
  50425. (assign, ":num_equipped_weapons", 0),
  50426. (item_get_slot, ":item_has_ammo", ":item_id", slot_item_ccoop_has_ammo), #javelin bow needs two slots (one for ammo) - if the player doesn't have room for both, we just drop everything
  50427. (val_add, ":item_has_ammo", 1), #we use this variable but a better name would be something like ":wep_slots_required" - all weapons need at least one
  50428. (try_for_range, ":cur_slot", 0, 4),
  50429. (agent_get_item_slot, ":cur_item", ":assigned_agent_id", ":cur_slot"),
  50430. (ge, ":cur_item", 0),
  50431. (val_add, ":num_equipped_weapons", 1), #count how many weapon slots they are using
  50432. (try_end),
  50433. (try_begin),
  50434. (item_get_type, ":item_type", ":item_id"),
  50435. (ge, ":item_type", itp_type_head_armor),
  50436. (assign, ":item_has_ammo", 0), #armours always overwrite the existing item
  50437. (try_end),
  50438.  
  50439. (store_add, ":total_to_be_equipped", ":num_equipped_weapons", ":item_has_ammo"), #save the total weapon slots that would be required if we equipped this weapon
  50440. (else_try),
  50441. (assign, ":cancel_drop", 1),
  50442. (player_set_slot, ":player_no", slot_player_coop_dropped_item, -1),
  50443. (try_end),
  50444. (else_try),
  50445. (agent_is_active, ":assigned_agent_id"), #if the assignee isn't the player, let's make sure it's a real agent anyway
  50446. (agent_is_alive, ":assigned_agent_id"),
  50447. (agent_is_human, ":assigned_agent_id"),
  50448. (agent_get_group, ":group_id", ":assigned_agent_id"), #we use this in a check below
  50449. (else_try), #fail script
  50450. (assign, ":cancel_drop", 1),
  50451. (player_set_slot, ":player_no", slot_player_coop_dropped_item, -1),
  50452. (try_end),
  50453.  
  50454. (eq, ":cancel_drop", 0),
  50455.  
  50456.  
  50457.  
  50458. (try_begin),
  50459. (gt, ":total_to_be_equipped", 4), #if we don't have room, the item falls to the floor... grab it, quick!
  50460. (assign, ":cancel_drop", 1),
  50461. (player_set_slot, ":player_no", slot_player_coop_dropped_item, -1), #keep this slot empty while players aren't assigning an item - otherwise a script could allow them to assign it later, which is cheating!
  50462. (agent_get_position, pos1, ":assigned_agent_id"),
  50463. (position_move_z, pos1, 20), #prevents the item from spawning in the ground... most of the time
  50464. (set_spawn_position, pos1),
  50465. (spawn_item, ":item_id"),
  50466. (str_store_string, s0, "str_ccoop_dropping_item_on_ground"),
  50467. (multiplayer_send_string_to_player, ":player_no", multiplayer_event_show_server_message, s0), #tell the player what's happened
  50468. (try_begin),
  50469. (eq, ":item_id", "itm_javelin_bow"),
  50470. (spawn_item, "itm_javelin_bow_ammo"), #and give them the ammo from the jav bow!
  50471. (try_end),
  50472. (try_end),
  50473.  
  50474. (eq, ":cancel_drop", 0), #are we still good?
  50475.  
  50476. (get_max_players, ":num_players"), #we'll be using this in our equipping events
  50477.  
  50478. (try_begin),
  50479. (eq, ":group_id", ":player_no"), #just in case a player tries to assign a drop to someone else's companion!
  50480.  
  50481. (player_is_active, ":group_id"), #let's not have an error in case they disconnected
  50482.  
  50483. (item_get_type, ":item_type", ":item_id"), #different behaviour for weapons/armour etc.
  50484.  
  50485. (try_begin), #for non players, remove existing weapons that are melee/ranged so they always only have one of each
  50486. (agent_is_non_player, ":assigned_agent_id"),
  50487.  
  50488.  
  50489. (try_begin),
  50490. (this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
  50491. (this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
  50492. (eq, ":item_type", itp_type_polearm),
  50493. (try_for_range, ":cur_slot", 0, 4),
  50494. (agent_get_item_slot, ":cur_item", ":assigned_agent_id", ":cur_slot"),
  50495. (ge, ":cur_item", 0),
  50496. (item_get_type, ":cur_item_type", ":cur_item"),
  50497. (this_or_next|eq, ":cur_item_type", itp_type_one_handed_wpn),
  50498. (this_or_next|eq, ":cur_item_type", itp_type_two_handed_wpn),
  50499. (this_or_next|eq, ":cur_item_type", itp_type_shield),
  50500. (eq, ":cur_item_type", itp_type_polearm),
  50501. (agent_unequip_item, ":assigned_agent_id", ":cur_item", ":cur_slot"),
  50502. (try_for_range, ":cur_player", 0, ":num_players"),
  50503. (player_is_active, ":cur_player"),
  50504. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_unequip_item,
  50505. ":assigned_agent_id", ":cur_item", ":cur_slot"),
  50506. (try_end),
  50507. (try_end),
  50508. (else_try),
  50509. (this_or_next|eq, ":item_type", itp_type_bow),
  50510. (this_or_next|eq, ":item_type", itp_type_crossbow),
  50511. (eq, ":item_type", itp_type_thrown),
  50512. (try_for_range, ":cur_slot", 0, 4),
  50513. (agent_get_item_slot, ":cur_item", ":assigned_agent_id", ":cur_slot"),
  50514. (ge, ":cur_item", 0),
  50515. (item_get_type, ":cur_item_type", ":cur_item"),
  50516. (this_or_next|eq, ":cur_item_type", itp_type_bow),
  50517. (this_or_next|eq, ":cur_item_type", itp_type_crossbow),
  50518. (this_or_next|eq, ":cur_item_type", itp_type_thrown),
  50519. (this_or_next|eq, ":cur_item_type", itp_type_bolts),
  50520. (eq, ":cur_item_type", itp_type_arrows),
  50521. (agent_unequip_item, ":assigned_agent_id", ":cur_item", ":cur_slot"),
  50522. (try_for_range, ":cur_player", 0, ":num_players"),
  50523. (player_is_active, ":cur_player"),
  50524. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_unequip_item,
  50525. ":assigned_agent_id", ":cur_item", ":cur_slot"),
  50526. (try_end),
  50527. (try_end),
  50528. (try_end),
  50529. (try_end),
  50530.  
  50531. ##should be set as script to be called with above network messages
  50532. (try_begin),
  50533. (is_between, ":item_type", itp_type_head_armor, itp_type_pistol), #for armours we always replace the existing item directly
  50534. (try_for_range, ":cur_slot", 4, 8),
  50535. (agent_get_item_slot, ":cur_item", ":assigned_agent_id", ":cur_slot"),
  50536. (ge, ":cur_item", 0),
  50537. (item_get_type, ":cur_item_type", ":cur_item"),
  50538. (eq, ":cur_item_type", ":item_type"),
  50539. (agent_unequip_item, ":assigned_agent_id", ":cur_item"),
  50540. (try_for_range, ":cur_player", 0, ":num_players"),
  50541. (player_is_active, ":cur_player"),
  50542. (multiplayer_send_4_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_unequip_item,
  50543. ":assigned_agent_id", ":cur_item", ":cur_slot"),
  50544. (try_end),
  50545. (try_begin), #and we shouldn't forget to remove their special effects!
  50546. (eq, ":cur_item", "itm_running_boots"),
  50547. (agent_set_speed_modifier, ":assigned_agent_id", 100),
  50548. (else_try),
  50549. (eq, ":cur_item", "itm_power_gloves"),
  50550. (agent_set_damage_modifier, ":assigned_agent_id", 100),
  50551. (end_try),
  50552. (try_end),
  50553. (try_end),
  50554.  
  50555. (agent_equip_item, ":assigned_agent_id", ":item_id"), #and now we're ready to equip the item
  50556. (try_for_range, ":cur_player", 0, ":num_players"),
  50557. (player_is_active, ":cur_player"),
  50558. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_equip_item,
  50559. ":assigned_agent_id", ":item_id"),
  50560. (try_end),
  50561.  
  50562. #additional items and effects
  50563. (try_begin),
  50564. (eq, ":item_id", "itm_javelin_bow"),
  50565. (agent_equip_item, ":assigned_agent_id", "itm_javelin_bow_ammo"),
  50566. (try_for_range, ":cur_player", 0, ":num_players"),
  50567. (player_is_active, ":cur_player"),
  50568. (multiplayer_send_3_int_to_player, ":cur_player", multiplayer_event_other_events, multiplayer_event_other_event_equip_item,
  50569. ":assigned_agent_id", "itm_javelin_bow_ammo"), #don't forget to add the ammo for the javelin bow!
  50570. (try_end),
  50571. (else_try),
  50572. (eq, ":item_id", "itm_running_boots"), #and add any new effects...
  50573. (agent_set_speed_modifier, ":assigned_agent_id", 150),
  50574. (else_try),
  50575. (eq, ":item_id", "itm_power_gloves"),
  50576. (agent_set_damage_modifier, ":assigned_agent_id", 150),
  50577. (else_try),
  50578. (eq, ":item_id", "itm_kicking_boots"),
  50579. (agent_is_non_player, ":assigned_agent_id"),
  50580. (agent_set_kick_allowed, ":assigned_agent_id", 1),
  50581. (try_end),
  50582. (try_end),
  50583.  
  50584. (player_set_slot, ":player_no", slot_player_coop_dropped_item, -1), #again, prevent players from trying to equip items when they shouldn't
  50585.  
  50586. ]),
  50587.  
  50588. #script_add_player_to_cur_tableau_for_coop
  50589. # INPUT: type
  50590. # OUTPUT: none
  50591. ("add_player_to_cur_tableau_for_coop", [ #we use this for the image of the player when assigning an item from a chest
  50592. #(store_script_param, ":troop_no", 1),
  50593. #(store_script_param, ":canvas_no", 2),
  50594. (cur_tableau_set_override_flags, af_override_everything),
  50595.  
  50596. (multiplayer_get_my_player, ":my_player_no"),
  50597.  
  50598. (assign, ":canvas_no", "trp_coop_companion_equipment_ui_0"),
  50599.  
  50600. (player_get_agent_id, ":my_agent_no", ":my_player_no"), #player is always alive so we just show their current equipment
  50601.  
  50602. (try_for_range, ":cur_inv_slot", 0, 8),
  50603. (agent_get_item_slot, ":cur_item", ":my_agent_no", ":cur_inv_slot"),
  50604. (ge, ":cur_item", 0),
  50605. (cur_tableau_add_override_item, ":cur_item"),
  50606. (try_end),
  50607.  
  50608.  
  50609. (try_begin),
  50610. (player_get_gender , ":is_female", ":my_player_no"),
  50611. (eq, ":is_female", 1),
  50612. (val_add, ":canvas_no", 1),
  50613. (try_end),
  50614.  
  50615. #(assign, reg0, ":canvas_no"),
  50616. #(display_message, "@canvas no: {reg0}"),
  50617.  
  50618. (str_store_player_face_keys, s0, ":my_player_no"),
  50619. (troop_set_face_keys, ":canvas_no", s0),
  50620.  
  50621. (store_mod, ":animation", ":my_agent_no", 4),
  50622.  
  50623. (val_add, ":animation", "anim_pose_1"),
  50624.  
  50625.  
  50626.  
  50627. (set_fixed_point_multiplier, 100),
  50628. (cur_tableau_set_camera_parameters, 1, 6, 6, 10, 10000),
  50629. (assign, ":cam_height", 145),
  50630. (assign, ":camera_distance", 350),
  50631. (assign, ":camera_pitch", 2),
  50632.  
  50633. (init_position, pos5),
  50634. (position_set_z, pos5, ":cam_height"),
  50635. # camera looks towards -z axis
  50636. (position_rotate_x, pos5, -90),
  50637. (position_rotate_z, pos5, 180),
  50638. # now apply yaw and pitch
  50639. (assign, ":camera_yaw", -50),
  50640. (position_move_x, pos5, -10, 0),
  50641. (position_rotate_y, pos5, ":camera_yaw"),
  50642. (position_rotate_x, pos5, ":camera_pitch"),
  50643. (position_move_z, pos5, ":camera_distance", 0),
  50644. (position_move_y, pos5, 60, 0),
  50645.  
  50646.  
  50647. (init_position, pos2),
  50648. (cur_tableau_add_troop, ":canvas_no", pos2, ":animation", 0),
  50649. (cur_tableau_set_camera_position, pos5),
  50650.  
  50651. (copy_position, pos8, pos5),
  50652. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  50653. (position_rotate_z, pos8, 30),
  50654. (position_rotate_x, pos8, -50),
  50655. (cur_tableau_add_sun_light, pos8, 175,150,125),
  50656. ]),
  50657.  
  50658. #script_add_troop_to_cur_tableau_for_coop
  50659. # INPUT: type
  50660. # OUTPUT: none
  50661. ("add_troop_to_cur_tableau_for_coop", [
  50662. (store_script_param, ":troop_no", 1),
  50663. #(store_script_param, ":canvas_no", 2),
  50664. (cur_tableau_set_override_flags, af_override_everything),
  50665.  
  50666. (multiplayer_get_my_player, ":my_player_no"),
  50667. (assign, ":companion_alive", 0),
  50668. (assign, ":canvas_no", "trp_coop_companion_equipment_ui_0"), #we use different troops for each companion... for simplicity
  50669. (try_for_agents, ":cur_agent"), #lets find the agent for our companion
  50670. (eq, ":companion_alive", 0),
  50671. (agent_is_active, ":cur_agent"), #living companions show their current equipment, while dead companions show what they're going to spawn with next
  50672. (agent_is_alive, ":cur_agent"),
  50673. (agent_is_non_player, ":cur_agent"),
  50674. (agent_get_troop_id, ":cur_troop_id", ":cur_agent"),
  50675. (eq, ":cur_troop_id", ":troop_no"),
  50676. (agent_get_group, ":cur_agent_group", ":cur_agent"),
  50677. (eq, ":cur_agent_group", ":my_player_no"),
  50678. (try_for_range, ":cur_slot", slot_player_companion_ids_begin, slot_player_companion_ids_end),
  50679. (player_slot_eq, ":my_player_no", ":cur_slot", ":cur_troop_id"),
  50680. (try_for_range, ":cur_inv_slot", 0, 8),
  50681. (agent_get_item_slot, ":cur_item", ":cur_agent", ":cur_inv_slot"),
  50682. (ge, ":cur_item", 0),
  50683. (cur_tableau_add_override_item, ":cur_item"),
  50684. (try_end),
  50685. (try_begin),
  50686. (gt, ":cur_slot", slot_player_companion_ids_begin),
  50687. (val_add, ":canvas_no", 2),
  50688. (try_end),
  50689. (try_end),
  50690. (assign, ":companion_alive", 1), #so we'll be using their current gear for the tableau
  50691. (try_end),
  50692.  
  50693. (try_begin),
  50694. (eq, ":companion_alive", 0), #for dead companions, we check their class and level to get the right template
  50695. (try_for_range, ":cur_slot", slot_player_companion_ids_begin, slot_player_companion_ids_end),
  50696. (player_slot_eq, ":my_player_no", ":cur_slot", ":troop_no"), #check which companion we're using (since this isn't sent as a parameter...)
  50697. (try_begin),
  50698. (gt, ":cur_slot", slot_player_companion_ids_begin),
  50699. (val_add, ":canvas_no", 2), #the second companion uses different troops
  50700. (try_end),
  50701. (val_add, ":cur_slot", 2),
  50702. (player_get_slot, ":template_no", ":my_player_no", ":cur_slot"), #get their class
  50703. (val_add, ":cur_slot", 2),
  50704. (player_get_slot, ":level_no", ":my_player_no", ":cur_slot"), #and upgrade it for their level
  50705. (try_begin),
  50706. (ge, ":template_no", "trp_npc1_1"), #companion class troops come after faction class troops
  50707. (val_mul, ":level_no", 16), #there are 16 at each level tier (one for each companion) so multiply by 16 to get to the right level
  50708. (val_add, ":template_no", ":level_no"),
  50709. (else_try),
  50710. (val_mul, ":level_no", 18), #18 at each level tier for faction classes (6 factions * 3 troops, one ranged, one melee, one cav)
  50711. (val_add, ":template_no", ":level_no"),
  50712. (try_end),
  50713. (try_for_range, ":cur_inv_slot", 0, 8),
  50714. (troop_get_inventory_slot, ":cur_item", ":template_no", ":cur_inv_slot"),
  50715. (ge, ":cur_item", 0),
  50716. (cur_tableau_add_override_item, ":cur_item"),
  50717. (try_end),
  50718. (try_end),
  50719. (try_end),
  50720.  
  50721. (try_begin),
  50722. (troop_get_type, ":is_female", ":troop_no"),
  50723. (eq, ":is_female", 1),
  50724. (val_add, ":canvas_no", 1), #the female blank canvas troop is directly after the male for each companion... this line could be (val_add, ":canvas_no", ":is_female"),
  50725. (try_end),
  50726.  
  50727. #(assign, reg0, ":canvas_no"),
  50728. #(display_message, "@canvas no: {reg0}"),
  50729.  
  50730. (str_store_troop_face_keys, s0, ":troop_no"),
  50731. (troop_set_face_keys, ":canvas_no", s0), #give the right face to the canvas...
  50732.  
  50733. (try_begin), #these lines just add some variety to the poses - it's not really random but that would be complicated, since it needs to be consistent when this script is run for the alpha layer
  50734. (eq, ":companion_alive", 1),
  50735. (store_mod, ":animation", ":cur_agent", 4), #for alive troops, it uses the agent id, which is pretty close to random
  50736. (else_try),
  50737. (store_mod, ":animation", ":template_no", 4), #for dead troops it's based on the class
  50738. (try_end),
  50739.  
  50740. (val_add, ":animation", "anim_pose_1"), #there are a few poses after this one, which it chooses from
  50741.  
  50742.  
  50743.  
  50744. (set_fixed_point_multiplier, 100),
  50745. (cur_tableau_set_camera_parameters, 1, 6, 6, 10, 10000),
  50746. (assign, ":cam_height", 145),
  50747. (assign, ":camera_distance", 350),
  50748. (assign, ":camera_pitch", 2),
  50749.  
  50750. (init_position, pos5),
  50751. (position_set_z, pos5, ":cam_height"),
  50752. # camera looks towards -z axis
  50753. (position_rotate_x, pos5, -90),
  50754. (position_rotate_z, pos5, 180),
  50755. # now apply yaw and pitch
  50756. (try_begin),
  50757. (lt, ":canvas_no", "trp_coop_companion_equipment_ui_1"), #use different camera angles for each companion because it looks cooler - also it looks a bit weird if they face towards the edge of the screen
  50758. (assign, ":camera_yaw", -50),
  50759. (position_move_x, pos5, -10, 0),
  50760. (else_try),
  50761. (assign, ":camera_yaw", -10),
  50762. (position_move_x, pos5, 10, 0),
  50763. (try_end),
  50764. (position_rotate_y, pos5, ":camera_yaw"),
  50765. (position_rotate_x, pos5, ":camera_pitch"),
  50766. (position_move_z, pos5, ":camera_distance", 0),
  50767. (position_move_y, pos5, 60, 0),
  50768.  
  50769.  
  50770. (init_position, pos2),
  50771. (cur_tableau_add_troop, ":canvas_no", pos2, ":animation", 0),
  50772. (cur_tableau_set_camera_position, pos5),
  50773.  
  50774. (copy_position, pos8, pos5),
  50775. (position_rotate_x, pos8, -90), #y axis aligned with camera now. z is up
  50776. (position_rotate_z, pos8, 30),
  50777. (position_rotate_x, pos8, -50),
  50778. (cur_tableau_add_sun_light, pos8, 175,150,125),
  50779. ]),
  50780. #INVASION MODE END
  50781.  
  50782. ]
Add Comment
Please, Sign In to add comment