(try_for_range, ":village_no", villages_begin, villages_end),
(call_script, "script_update_volunteer_troops_in_village", ":village_no"),
(try_end),
(faction_set_slot, "fac_culture_1", slot_faction_tier_3_troop,
Indeed, added. The gong part is commented out tho, it's a bit too much.
Loweing movement with additional trigger checks to restore it back goes beyond this OSP's scope. Sure one can do it, but each mod may have its own approach to agent speed management, so it's better the user will add it to affected targets on his end. Disarming could be a thing, but on my experience bots draw their weapons back in 90% cases so not that much of a use. Dehorsing is already guaranteed to happen, and tbh it looks better when shield hits chest than legs.
Cooldown to this could be implemented in so many ways that I leave it for user to add as well. My older OSPs had them integrated, which resulted in some users having to cut them off to add their own ones. So it will be easier to add when there isn't any included. I like the agility idea a lot though.
As much as I sincerely agree that rhodok pavise and khergit cav shield shouldn't behave exactly the same while flying, I'm also afraid I wouldn't be able to pull this one off by myself. Any kinds of aerodynamic calculations always give me a hard time, but if you provide a code piece for that I'll gladly include it.
That's fair, these should have their impact on damage as well. Added that, lowering the default tresholds with them in mind.
Those are too optional to include in base pack :p I'd love to add some downsides like damaging the shield hp a bit after each throw, but MS is very limited in terms of agent item manipulations and so far I haven't found any tools for that. Best I could do was I went with spawn_item_without_refill which sometimes returns shield in a bit damaged state even when it was thrown at full hp. Sometimes it doesn't. I'm not sure why it has any effect at all, since it's not the operation to equip the shield, only to spawn it. And I still haven't figured out what exactly differs it from spawn_item in that regard.
Nope, it's the sokf_type_ladder flag that slows down the agents, nothing to do with collision. Remove it and movement speed returns to normal. There's still many other situations where the barrier trick would come in handy tho, so thanks for this detailed guide, especially for the blueprints part.
(ti_on_agent_spawn, 0, 0,
[
(ge, "$g_ally_party", 0), # if player has joined already started battle
(eq, "$attacker_reinforcement_stage", 0), # and there hasn't been any reinforcements yet
(eq, "$defender_reinforcement_stage", 0),
],
[
(store_trigger_param_1, ":agent"),
(assign, ":agent_to_move", -1),
(try_begin),
(agent_is_human, ":agent"),
(agent_get_party_id, ":a_party", ":agent"),
(neq, ":a_party", "p_main_party"),
(agent_is_non_player, ":agent"),
(assign, ":agent_to_move", ":agent"),
(else_try),
(neg|agent_is_human, ":agent"),
(agent_get_rider, ":rider", ":agent"),
(agent_get_party_id, ":r_party", ":rider"),
(neq, ":r_party", "p_main_party"),
(agent_is_non_player, ":rider"),
(assign, ":agent_to_move", ":agent"),
(try_end),
(neq, ":agent_to_move", -1),
(get_scene_boundaries, pos10, pos11),
(set_fixed_point_multiplier, 100),
(position_get_x, "$g_scene_max_x", pos11),
(position_get_y, "$g_scene_max_y", pos11),
(val_add, "$g_scene_max_x", 2400), # 2400 has been subtracted automatically because of barriers from outer terrain
(val_add, "$g_scene_max_y", 2400),
(store_div, ":pos_x", "$g_scene_max_x", 2),
(store_div, ":pos_y", "$g_scene_max_x", 2),
(init_position, pos22), # map center
(store_random_in_range, ":x_shift", -1000, 1000),
(store_random_in_range, ":y_shift", -1000, 1000),
(val_add, ":pos_x", ":x_shift"),
(val_add, ":pos_y", ":y_shift"),
(position_set_x, pos22, ":pos_x"),
(position_set_y, pos22, ":pos_y"),
(agent_set_position, ":agent_to_move", pos22),
]),
Or you can just fix it with #13 here: https://forums.taleworlds.com/index...or-tweaks-and-talk.386332/page-6#post-9497319
Judging by equipment there's more to her but recently I come across this screenshot on Nexus: https://www.nexusmods.com/mbwarband/images/293
These are to be changed in scripts.txt. Recruitment troops are operated by ask_companions_for_unique_troops script, and Right to Rule troops by rtr_quest_troops_reward script. In both cases look at the troop IDs, they start with 360. You just have to subtract 360287970189639680 from them to get morghs editor number, or vise-versa. So, if you need Jocelyn and you know his number is 511 in morghs, then in those scrips he is 360287970189640191. Either that, or look up ids of the troops themselves, like you can just replace 360287970189640078 (Silvermist Halberdier) with 360287970189639777 (Sarleon Nobleman) and so on. These changes don't require new game, but require to send companion on a new mission obviously.
Noted but wiki comments clutter way faster than this thread does, so I reply here.
clock_1 = (0, 0, ti_once, [], # preparing the 00:00 situation
[
(try_for_prop_instances, ":instance_no", "itm_linen"),
(prop_instance_get_variation_id, ":var1", ":instance_no"),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 0),
(try_end),
(assign, "$clock_time", 0),
(assign, "$start_clock", 0),
])
clock_2 = (1, 0, 0, # actual clock with 1 sec interval
[
(eq, "$start_clock", 1),
],
[
(val_add, "$clock_time", 1),
(assign, ":time", "$clock_time"),
(store_mission_timer_a_msec, ":cur_time"), # getting msec value to make exact digits
(val_mul, ":time", 1000),
(val_sub, ":cur_time", ":time"),
(val_div, ":time", 1000),
(gt, ":cur_time", 1000),
(store_mod, reg1, ":time", 10),
(call_script, "script_make_digit_of_linens", reg1, 1),
(val_div, ":time", 10),
(store_mod, reg2, ":time", 6),
(call_script, "script_make_digit_of_linens", reg2, 2),
(val_div, ":time", 6),
(store_mod, reg3, ":time", 10),
(call_script, "script_make_digit_of_linens", reg3, 3),
(val_div, ":time", 10),
(store_mod, reg4, ":time", 6),
(call_script, "script_make_digit_of_linens", reg4, 4),
#(tutorial_message, "@{reg4}{reg3}:{reg2}{reg1}"), # I used this to make sure prop clock matches text one
(play_sound, "snd_shield_hit_metal_wood"),
(val_add, "$clock_time", 1),
])
("make_digit_of_linens", # long but very simple script
[
(store_script_param_1, ":digit", 1),
(store_script_param_2, ":position", 2),
(try_for_prop_instances, ":instance_no", "itm_linen"),
(prop_instance_get_variation_id, ":var1", ":instance_no"),
(prop_instance_get_variation_id_2, ":var2", ":instance_no"),
(eq, ":var2", ":position"),
(try_begin),
(eq, ":digit", 0),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 1),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 2),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 0),
(try_end),
(else_try),
(eq, ":digit", 3),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 4),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 5),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 6),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 7),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 8),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(else_try),
(eq, ":digit", 9),
(try_begin),
(eq, ":var1", 1),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 2),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 3),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 4),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 5),
(scene_prop_set_visibility, ":instance_no", 0),
(else_try),
(eq, ":var1", 6),
(scene_prop_set_visibility, ":instance_no", 1),
(else_try),
(eq, ":var1", 7),
(scene_prop_set_visibility, ":instance_no", 1),
(try_end),
(try_end),
(try_end),
]),
("clock_trigger",0,"bucket_a","bo_bucket_a", [
(ti_on_scene_prop_hit,
[
(store_trigger_param_1, ":instance_no"),
(play_sound, "snd_dummy_hit"),
(particle_system_burst, "psys_dummy_smoke", pos1, 3),
(particle_system_burst, "psys_dummy_straw", pos1, 10),
(scene_prop_slot_eq, ":instance_no", scene_prop_open_or_close_slot, 0),
(prop_instance_get_position, pos2, ":instance_no"), # pos1 is trigger param so we use pos2
(position_move_z, pos2, 20),
(prop_instance_animate_to_position, ":instance_no", pos2, 20),
(scene_prop_set_slot, ":instance_no", scene_prop_open_or_close_slot, 1),
(assign, "$start_clock", 1),
]),
(ti_on_scene_prop_animation_finished,
[
(store_trigger_param_1, ":instance_no"),
(scene_prop_slot_eq, ":instance_no", scene_prop_open_or_close_slot, 1),
(prop_instance_get_starting_position, pos1, ":instance_no"),
(prop_instance_animate_to_position, ":instance_no", pos1, 100),
(scene_prop_set_slot, ":instance_no", scene_prop_open_or_close_slot, 0),
]),
]),
missiles_auto_pickup = (0, 0, 0.6,
[
(neg|main_hero_fallen),
(key_is_down, key_numpad_enter),
],
[
(set_fixed_point_multiplier, 100),
(get_player_agent_no, ":player"),
(agent_is_active, ":player"),
(agent_get_position, pos1, ":player"),
(agent_get_wielded_item, ":weapon", ":player", 0),
(neq, ":weapon", -1), # preventing errors from bare fists
(item_get_type, ":w_type", ":weapon"),
(assign, ":free_slots", 0),
(assign, ":valid_ammo", 0),
(try_for_range_backwards, ":s", 0, 4), # retrieve the current quiver that matches weapon type. Game
# spends quivers from top to bottom, so we need backwards loop
(agent_get_item_slot, ":slot_item", ":player", ":s"),
(try_begin),
(eq, ":slot_item", -1),
(assign, ":empty_slot", ":s"),
(val_add, ":free_slots", 1),
(else_try),
(item_get_type, ":m_type", ":slot_item"),
(eq, ":m_type", itp_type_arrows),
(eq, ":w_type", itp_type_bow),
(assign, ":ammo_item", ":slot_item"),
(assign, ":ammo_slot", ":s"),
(else_try),
(item_get_type, ":m_type", ":slot_item"),
(eq, ":m_type", itp_type_bolts),
(eq, ":w_type", itp_type_crossbow),
(assign, ":ammo_item", ":slot_item"),
(assign, ":ammo_slot", ":s"),
(else_try),
(item_get_type, ":m_type", ":slot_item"),
(eq, ":m_type", itp_type_thrown),
(eq, ":slot_item", ":weapon"), # no need to compare weapon type this time, it's a 2-in-1 check
(assign, ":ammo_item", ":slot_item"),
(assign, ":ammo_slot", ":s"),
(try_end),
(try_end),
(try_for_prop_instances, ":missile", -1, somt_spawned_single_ammo_item), # only single missiles, not quivers
(prop_instance_get_position, pos2, ":missile"),
(get_distance_between_positions, ":dist", pos2, pos1),
(le, ":dist", 250), # pickup radius, adjust to your liking
(prop_instance_get_scene_prop_kind, ":item", ":missile"), # get item id to compare it with current weapon
(item_get_type, ":i_type", ":item"),
(try_begin),
(eq, ":i_type", itp_type_arrows),
(eq, ":w_type", itp_type_bow),
(assign, ":valid_ammo", 1),
(else_try),
(eq, ":i_type", itp_type_bolts),
(eq, ":w_type", itp_type_crossbow),
(assign, ":valid_ammo", 1),
(else_try),
(eq, ":i_type", itp_type_thrown),
(eq, ":item", ":weapon"),
(assign, ":valid_ammo", 1),
(try_end),
(eq, ":valid_ammo", 1), #invalid ammo will be ignored without warnings
(neg|item_has_property, ":item", itp_no_pick_up_from_ground),
(agent_get_ammo, ":old_ammo", ":player", 1), # ONLY for total amount comparison
(agent_get_ammo_for_slot, ":s_ammo", ":player", ":ammo_slot"), # for actual pickup calculation
(store_add, ":new_ammo", ":s_ammo", 1),
(agent_set_ammo, ":player", ":ammo_item", ":new_ammo"),
(str_store_item_name, s2, ":item"),
(try_begin),
(agent_get_ammo, ":cur_ammo", ":player", 1),
(eq, ":cur_ammo", ":old_ammo"), # if these values are the same, it means there are no room for more ammo. In this
# case, when you pick up something via F, game will create new quiver given there
# are empty slots left. So we should replicate this behaviour
(try_begin),
(ge, ":free_slots", 1),
(agent_equip_item, ":player", ":item", ":empty_slot"),
(agent_set_ammo, ":player", ":item", 1),
(scene_prop_set_prune_time, ":missile", 0), # remove missile from ground
(display_message, "@Picking up {s2}."), # duplicate default message
(else_try), # if there are no room for ammo in current quiver and no empty slots for new one
(display_message, "@Unable to take that."), # duplicate default warning
(try_end),
(else_try),
(scene_prop_set_prune_time, ":missile", 0),
(display_message, "@Picking up {s2}."),
(try_end),
(try_end),
])
passable_allies = (0, 0, 0,
[
(neg|main_hero_fallen),
(key_is_down, key_left_control),
],
[
(set_fixed_point_multiplier, 1),
(get_player_agent_no, ":player"),
(agent_get_position, pos1, ":player"),
(agent_get_team, ":p_team", ":player"),
(try_for_agents, ":agent", pos1, 1),
(agent_is_alive, ":agent"),
(agent_is_human, ":agent"),
(agent_is_non_player, ":agent"),
(agent_get_team, ":a_team", ":agent"),
(neg|teams_are_enemies, ":a_team", ":p_team"),
(agent_get_speed, pos2, ":player"),
(position_get_y, ":forward_momentum", pos2),
(position_get_x, ":sideway_momentum", pos2),
(convert_to_fixed_point, ":forward_momentum"),
(convert_to_fixed_point, ":sideway_momentum"),
(try_begin),
(lt, ":forward_momentum", 0), # backwards moving speed is higher somehow, so we divide it in half
(val_div, ":forward_momentum", 2),
(try_end),
(val_div, ":sideway_momentum", 2), # so is sideways moving speed
(position_move_y, pos1, ":forward_momentum"),
(position_move_x, pos1, ":sideway_momentum"),
(agent_set_position, ":player", pos1),
(try_end),
])
Seems like you frogot to remove the request about previous range button in cheatmenu with July 26th update. Also bullet trail request is still there, maybe some other too, imo the list should be revised.
dlga_declaration_of_indep3:declaration_of_indep3 4095 269 0 All_Hail_{reg63?King:Queen}_{playername}!_^^_Long_live_the_{reg63?King:Queen}!!! 269 10 2114 2 144115188075856171 65536 603 1 0 1506 2 1224979098644774912 360287970189639680 4 0 32 2 1224979098644774912 0 600 1 1152921504606847611 5 0 600 1 1152921504606847610 3 0 1 1 936748722493063217 NO_VOICEOVER
loot_player_items -1
1 23 2 1224979098644774912 1