Keedo420
Knight at Arms
Along with Garnier's recruitment script, I have added his banks into my mod. However I am having a problem with them.
At the start of a new game (before doing anything at all) I go straight to the reports menu and select bank report, and this is what I see:
Then, after going to a town with a bank, I visit the bank and this is what I see:
Now, since there are only 5 banks and each one says I only have about 1k borrowed, there is still an incredibly large debt coming from somewhere. As a result, when the trigger to pay interest fires, this happens (NOTE: this one happened after only a few game hours just like the trigger for paying your troops sometimes does even though they are set to fire on a weekly basis):
And then again after a full week and having earned some more money.....
I've got these in module_constants:
These in module_simple_triggers:
This in the game_start part of module_scripts:
And this additional script in module_scripts:
This added to the reports menu in module_game_menus:
This added to the town menu in module_game_menus:
And these menus in module_game_menus:
Now as far as I can tell, none of the new town slots conflict with other town slots, so I am guessing it is related to the registers. But they all seem to be set to 0 before interest on debts or deposits is calculated. I have played garnier's mod and it plays with no errors, so the problem must be a conflict with something in my mod or something I missed while porting the code. I just can't seem to figure out what it is.
At the start of a new game (before doing anything at all) I go straight to the reports menu and select bank report, and this is what I see:
Then, after going to a town with a bank, I visit the bank and this is what I see:
Now, since there are only 5 banks and each one says I only have about 1k borrowed, there is still an incredibly large debt coming from somewhere. As a result, when the trigger to pay interest fires, this happens (NOTE: this one happened after only a few game hours just like the trigger for paying your troops sometimes does even though they are set to fire on a weekly basis):
And then again after a full week and having earned some more money.....
I've got these in module_constants:
slot_town_trade_route_11 = 200
slot_town_trade_route_12 = 201
slot_town_trade_route_13 = 202
slot_town_trade_route_14 = 203
slot_town_trade_route_15 = 204
slot_town_trade_routes_begin = slot_town_trade_route_1
slot_town_trade_routes_end = slot_town_trade_route_15 + 1
num_trade_goods = itm_siege_supply - itm_smoked_fish
slot_town_trade_good_productions_begin = 205
slot_town_trade_good_prices_begin = slot_town_trade_good_productions_begin + num_trade_goods + 1
slot_center_slave_labor = 206
slot_town_has_bank = 239
slot_town_bank_debt = 240
slot_town_bank_deposit = 241
slot_town_bank_debt_interest_rate = 242
slot_town_bank_deposit_interest_rate = 243
slot_town_trade_route_12 = 201
slot_town_trade_route_13 = 202
slot_town_trade_route_14 = 203
slot_town_trade_route_15 = 204
slot_town_trade_routes_begin = slot_town_trade_route_1
slot_town_trade_routes_end = slot_town_trade_route_15 + 1
num_trade_goods = itm_siege_supply - itm_smoked_fish
slot_town_trade_good_productions_begin = 205
slot_town_trade_good_prices_begin = slot_town_trade_good_productions_begin + num_trade_goods + 1
slot_center_slave_labor = 206
slot_town_has_bank = 239
slot_town_bank_debt = 240
slot_town_bank_deposit = 241
slot_town_bank_debt_interest_rate = 242
slot_town_bank_deposit_interest_rate = 243
These in module_simple_triggers:
##############################################
############## GARNIERMOD BEGIN ##############
##############################################
#Interest on deposits.
(730,
[
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":deposit",":center_no",slot_town_bank_deposit),
(party_get_slot,":deposit_interest_rate",":center_no",slot_town_bank_deposit_interest_rate),
(store_mul, ":deposit_interest",":deposit",":deposit_interest_rate"),
(val_div, ":deposit_interest",1000),
(val_add, ":deposit",":deposit_interest"),
(party_set_slot,":center_no", slot_town_bank_deposit,":deposit"),
(try_end),
]),
#Interest on debts.
(24 * 7,
[
(assign, ":total_bank_debt",0),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(val_add, ":total_bank_debt",":debt"),
(try_end),
(try_begin),
(gt, ":total_bank_debt", 0),
(jump_to_menu,"mnu_debt_interest"),
(try_end),
]),
############## GARNIERMOD BEGIN ##############
##############################################
#Interest on deposits.
(730,
[
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":deposit",":center_no",slot_town_bank_deposit),
(party_get_slot,":deposit_interest_rate",":center_no",slot_town_bank_deposit_interest_rate),
(store_mul, ":deposit_interest",":deposit",":deposit_interest_rate"),
(val_div, ":deposit_interest",1000),
(val_add, ":deposit",":deposit_interest"),
(party_set_slot,":center_no", slot_town_bank_deposit,":deposit"),
(try_end),
]),
#Interest on debts.
(24 * 7,
[
(assign, ":total_bank_debt",0),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(val_add, ":total_bank_debt",":debt"),
(try_end),
(try_begin),
(gt, ":total_bank_debt", 0),
(jump_to_menu,"mnu_debt_interest"),
(try_end),
]),
This in the game_start part of module_scripts:
#only put banks in capitals
(try_for_range, ":center_no", towns_begin, towns_end),
(this_or_next|eq,":center_no","p_town_1"),
(this_or_next|eq,":center_no","p_town_5"),
(this_or_next|eq,":center_no","p_town_6"),
(this_or_next|eq,":center_no","p_town_8"),
(eq,":center_no","p_town_10"),
(party_set_slot,":center_no", slot_town_has_bank,0),
(else_try),
(party_set_slot,":center_no", slot_town_has_bank,1),
(try_end),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_set_slot,":center_no", slot_town_bank_deposit_interest_rate,1),
(party_set_slot,":center_no", slot_town_bank_debt_interest_rate,400),
(try_end),
(try_for_range, ":center_no", towns_begin, towns_end),
(this_or_next|eq,":center_no","p_town_1"),
(this_or_next|eq,":center_no","p_town_5"),
(this_or_next|eq,":center_no","p_town_6"),
(this_or_next|eq,":center_no","p_town_8"),
(eq,":center_no","p_town_10"),
(party_set_slot,":center_no", slot_town_has_bank,0),
(else_try),
(party_set_slot,":center_no", slot_town_has_bank,1),
(try_end),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_set_slot,":center_no", slot_town_bank_deposit_interest_rate,1),
(party_set_slot,":center_no", slot_town_bank_debt_interest_rate,400),
(try_end),
And this additional script in module_scripts:
#Bank store debts/deposits
("bank_update_business",
[
(party_set_slot,"$current_town",slot_town_bank_debt,"$g_player_debt"),
(party_set_slot,"$current_town",slot_town_bank_deposit,"$g_player_deposit"),
]),
("bank_update_business",
[
(party_set_slot,"$current_town",slot_town_bank_debt,"$g_player_debt"),
(party_set_slot,"$current_town",slot_town_bank_deposit,"$g_player_deposit"),
]),
This added to the reports menu in module_game_menus:
("view_bank_report",[],"View bank report.",
[(jump_to_menu, "mnu_bank_report"),
]
),
[(jump_to_menu, "mnu_bank_report"),
]
),
This added to the town menu in module_game_menus:
("town_bank",
[
(this_or_next|eq,"$current_town","p_town_1"),
(this_or_next|eq,"$current_town","p_town_5"),
(this_or_next|eq,"$current_town","p_town_6"),
(this_or_next|eq,"$current_town","p_town_8"),
(eq,"$current_town","p_town_10"),
],
"Visit the bank.",
[
(jump_to_menu,"mnu_bank"),
]),
[
(this_or_next|eq,"$current_town","p_town_1"),
(this_or_next|eq,"$current_town","p_town_5"),
(this_or_next|eq,"$current_town","p_town_6"),
(this_or_next|eq,"$current_town","p_town_8"),
(eq,"$current_town","p_town_10"),
],
"Visit the bank.",
[
(jump_to_menu,"mnu_bank"),
]),
And these menus in module_game_menus:
("bank_report",0,
"{s1} {s2}",
"none",
[
(assign, reg1,0),#total_debt
(assign, reg2,0),#weekly_debt_interest
(assign, reg3,0),#total_deposit
(assign, reg4,0),#monthly_deposit_interest
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(val_add,reg1,":debt"),
(party_get_slot,":debt_interest_rate",":center_no",slot_town_bank_debt_interest_rate),
(store_div, ":debt_interest",":debt",52),
(val_mul, ":debt_interest",":debt_interest_rate"),
(val_div, ":debt_interest",100),
(val_add,reg2,":debt_interest"),
(try_end),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":deposit",":center_no",slot_town_bank_deposit),
(val_add, reg3, ":deposit"),
(party_get_slot,":deposit_interest_rate",":center_no",slot_town_bank_deposit_interest_rate),
(assign, ":deposit_interest", ":deposit"),
(val_mul, ":deposit_interest",":deposit_interest_rate"),
(val_div, ":deposit_interest",1000),
(val_add, reg4, ":deposit_interest"),
(try_end),
(try_begin),
(gt, reg1,0),
(str_store_string, s1, "@You have a total debt of {reg1} denars, on which you pay a weekly interest of {reg2} denars."),
(else_try),
(lt, reg1,1),
(str_store_string, s1, "@You have no debts at this time."),
(try_end),
(try_begin),
(gt, reg3,0),
(str_store_string, s2, "@You have a total of {reg3} denars deposited in banks, on which you gain a monthly interest of {reg4} denars."),
(else_try),
(lt, reg3,1),
(str_store_string, s2, "@You have no money deposited in banks."),
(try_end),
],
[
("continue",[],"Continue...",
[(jump_to_menu, "mnu_reports"),
]
),
]
),
(
"debt_interest",mnf_scale_picture|mnf_disable_all_keys,
"{s2}",
"none",
[
(str_clear,s2),
(assign, ":total_bank_debt",0),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(val_add, ":total_bank_debt",":debt"),
(try_end),
(store_troop_gold, ":player_wealth", "trp_player"),
(assign, reg1,0),#total_debt
(val_add, reg1,":total_bank_debt"),
(assign, reg2,0),#expected_interest
(assign, reg3,0),#total_cash
(val_add, reg3,":player_wealth"),
(assign, reg4,0),#debt_interest_paid
(assign, reg5,0),#debt_interest_unpaid
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(party_get_slot,":debt_interest_rate",":center_no",slot_town_bank_debt_interest_rate),
(store_div, ":debt_interest",":debt",52),
(val_mul, ":debt_interest",":debt_interest_rate"),
(val_div, ":debt_interest",100),
(val_add,reg2,":debt_interest"),
(try_begin),
(ge, ":player_wealth", ":debt_interest"),
(troop_remove_gold, "trp_player",":debt_interest"),
(val_add, reg4,":debt_interest"),
(else_try),
(gt, ":debt_interest",":player_wealth"),
(gt, ":player_wealth",0),
(store_sub, ":unpaid_interest", ":debt_interest",":player_wealth"),
(troop_remove_gold, "trp_player",":player_wealth"),
(val_add, reg4,":player_wealth"),
(val_add, ":debt",":unpaid_interest"),
(val_add, reg5,":unpaid_interest"),
(else_try),
(gt, ":debt",0),
(eq, ":player_wealth",0),
(store_sub, ":unpaid_interest", ":debt_interest",":player_wealth"),
(val_add, ":debt",":unpaid_interest"),
(val_add, reg5,":unpaid_interest"),
(try_end),
(try_end),
(party_set_slot,":center_no",slot_town_bank_debt,":debt"),
(store_troop_gold, ":player_wealth", "trp_player"),
(assign, reg6,":player_wealth"),#cash_remaining
(try_begin),
(gt, reg4,0),
(gt, reg3,reg2),
(str_store_string, s2, "@You paid {reg4} of your {reg3} denars in interest on your debt. You have {reg6} denars left."),
(else_try),
(gt, reg4,0),
(ge, reg3,reg2),
(str_store_string, s2, "@You paid all of your {reg3} denars in interest on your debt. You are out of money."),
(else_try),
(lt, reg6,1),
(gt, reg5,0),
(str_store_string, s2, "@You paid all of your {reg3} denars in interest on your debt. There were still {reg5} denars of the interest unpaid, which has been added to your debt. You have 0 denars left."),
(else_try),
(lt, reg3,1),
(str_store_string, s2, "@You had 0 denars left to pay the interest on your debt. The interest of {reg2} denars has been added to your debt."),
(try_end),
],
[
("continue",[],"Continue...",
[
(change_screen_return,0),
]
),
]
),
(
"bank",0,
"You visit the bank of {s1}.\
Here you can deposit money and earn interest over time, or take a loan.\
You currently have {reg6} denars deposited here.\
You currently have {reg7} denars borrowed from this bank.",
"none",
[
(str_store_party_name,s1,"$current_town"),
(party_get_slot,"$g_player_debt","$current_town",slot_town_bank_debt),
(party_get_slot,"$g_player_deposit","$current_town",slot_town_bank_deposit),
(assign, reg6, "$g_player_deposit"),
(assign, reg7, "$g_player_debt"),
],
[
("take_loan",[(store_troop_gold, ":player_wealth", "trp_player"),(store_sub, ":player_real_wealth", ":player_wealth", "$g_player_debt"),(gt,":player_real_wealth",100)],"Take a loan of 1000 denars.",
[
(troop_remove_gold, "trp_player", 100),
(troop_add_gold, "trp_player", 1000),
(val_add, "$g_player_debt", 1000),
(call_script, "script_bank_update_business"),
]),
("give_loan",[(store_troop_gold, ":player_wealth", "trp_player"),(gt,":player_wealth",1000),(gt,"$g_player_debt",1000)],"Repay 1000 denars of your debt.",
[
(troop_remove_gold, "trp_player", 1000),
(val_sub, "$g_player_debt", 1000),
(call_script, "script_bank_update_business"),
]),
("give_loan_all",[(store_troop_gold, ":player_wealth", "trp_player"),(gt,":player_wealth","$g_player_debt"),(gt,"$g_player_debt",0)],"Repay all of your debt.",
[
(troop_remove_gold, "trp_player", "$g_player_debt"),
(val_sub, "$g_player_debt", "$g_player_debt"),
(call_script, "script_bank_update_business"),
]),
("give_deposit",[(store_troop_gold, ":player_wealth", "trp_player"),(gt,":player_wealth",1000)],"Deposit 1000 denars in the bank.",
[
(troop_remove_gold, "trp_player", 1000),
(val_add, "$g_player_deposit", 1000),
(call_script, "script_bank_update_business"),
]),
("take_deposit",[(ge,"$g_player_deposit",1000)],"Withdraw 1000 denars from your deposit.",
[
(troop_add_gold, "trp_player", 1000),
(val_sub, "$g_player_deposit", 1000),
(call_script, "script_bank_update_business"),
]),
("take_deposit_all",[(ge,"$g_player_deposit",1)],"Withdraw your entire deposit.",
[
(troop_add_gold, "trp_player", reg6),
(val_sub, "$g_player_deposit", reg6),
(call_script, "script_bank_update_business"),
]),
("back_to_town_menu",[],"Head back.",
[
(jump_to_menu,"mnu_town"),
]),
]),
"{s1} {s2}",
"none",
[
(assign, reg1,0),#total_debt
(assign, reg2,0),#weekly_debt_interest
(assign, reg3,0),#total_deposit
(assign, reg4,0),#monthly_deposit_interest
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(val_add,reg1,":debt"),
(party_get_slot,":debt_interest_rate",":center_no",slot_town_bank_debt_interest_rate),
(store_div, ":debt_interest",":debt",52),
(val_mul, ":debt_interest",":debt_interest_rate"),
(val_div, ":debt_interest",100),
(val_add,reg2,":debt_interest"),
(try_end),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":deposit",":center_no",slot_town_bank_deposit),
(val_add, reg3, ":deposit"),
(party_get_slot,":deposit_interest_rate",":center_no",slot_town_bank_deposit_interest_rate),
(assign, ":deposit_interest", ":deposit"),
(val_mul, ":deposit_interest",":deposit_interest_rate"),
(val_div, ":deposit_interest",1000),
(val_add, reg4, ":deposit_interest"),
(try_end),
(try_begin),
(gt, reg1,0),
(str_store_string, s1, "@You have a total debt of {reg1} denars, on which you pay a weekly interest of {reg2} denars."),
(else_try),
(lt, reg1,1),
(str_store_string, s1, "@You have no debts at this time."),
(try_end),
(try_begin),
(gt, reg3,0),
(str_store_string, s2, "@You have a total of {reg3} denars deposited in banks, on which you gain a monthly interest of {reg4} denars."),
(else_try),
(lt, reg3,1),
(str_store_string, s2, "@You have no money deposited in banks."),
(try_end),
],
[
("continue",[],"Continue...",
[(jump_to_menu, "mnu_reports"),
]
),
]
),
(
"debt_interest",mnf_scale_picture|mnf_disable_all_keys,
"{s2}",
"none",
[
(str_clear,s2),
(assign, ":total_bank_debt",0),
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(val_add, ":total_bank_debt",":debt"),
(try_end),
(store_troop_gold, ":player_wealth", "trp_player"),
(assign, reg1,0),#total_debt
(val_add, reg1,":total_bank_debt"),
(assign, reg2,0),#expected_interest
(assign, reg3,0),#total_cash
(val_add, reg3,":player_wealth"),
(assign, reg4,0),#debt_interest_paid
(assign, reg5,0),#debt_interest_unpaid
(try_for_range, ":center_no", towns_begin, towns_end),
(party_get_slot,":debt",":center_no",slot_town_bank_debt),
(party_get_slot,":debt_interest_rate",":center_no",slot_town_bank_debt_interest_rate),
(store_div, ":debt_interest",":debt",52),
(val_mul, ":debt_interest",":debt_interest_rate"),
(val_div, ":debt_interest",100),
(val_add,reg2,":debt_interest"),
(try_begin),
(ge, ":player_wealth", ":debt_interest"),
(troop_remove_gold, "trp_player",":debt_interest"),
(val_add, reg4,":debt_interest"),
(else_try),
(gt, ":debt_interest",":player_wealth"),
(gt, ":player_wealth",0),
(store_sub, ":unpaid_interest", ":debt_interest",":player_wealth"),
(troop_remove_gold, "trp_player",":player_wealth"),
(val_add, reg4,":player_wealth"),
(val_add, ":debt",":unpaid_interest"),
(val_add, reg5,":unpaid_interest"),
(else_try),
(gt, ":debt",0),
(eq, ":player_wealth",0),
(store_sub, ":unpaid_interest", ":debt_interest",":player_wealth"),
(val_add, ":debt",":unpaid_interest"),
(val_add, reg5,":unpaid_interest"),
(try_end),
(try_end),
(party_set_slot,":center_no",slot_town_bank_debt,":debt"),
(store_troop_gold, ":player_wealth", "trp_player"),
(assign, reg6,":player_wealth"),#cash_remaining
(try_begin),
(gt, reg4,0),
(gt, reg3,reg2),
(str_store_string, s2, "@You paid {reg4} of your {reg3} denars in interest on your debt. You have {reg6} denars left."),
(else_try),
(gt, reg4,0),
(ge, reg3,reg2),
(str_store_string, s2, "@You paid all of your {reg3} denars in interest on your debt. You are out of money."),
(else_try),
(lt, reg6,1),
(gt, reg5,0),
(str_store_string, s2, "@You paid all of your {reg3} denars in interest on your debt. There were still {reg5} denars of the interest unpaid, which has been added to your debt. You have 0 denars left."),
(else_try),
(lt, reg3,1),
(str_store_string, s2, "@You had 0 denars left to pay the interest on your debt. The interest of {reg2} denars has been added to your debt."),
(try_end),
],
[
("continue",[],"Continue...",
[
(change_screen_return,0),
]
),
]
),
(
"bank",0,
"You visit the bank of {s1}.\
Here you can deposit money and earn interest over time, or take a loan.\
You currently have {reg6} denars deposited here.\
You currently have {reg7} denars borrowed from this bank.",
"none",
[
(str_store_party_name,s1,"$current_town"),
(party_get_slot,"$g_player_debt","$current_town",slot_town_bank_debt),
(party_get_slot,"$g_player_deposit","$current_town",slot_town_bank_deposit),
(assign, reg6, "$g_player_deposit"),
(assign, reg7, "$g_player_debt"),
],
[
("take_loan",[(store_troop_gold, ":player_wealth", "trp_player"),(store_sub, ":player_real_wealth", ":player_wealth", "$g_player_debt"),(gt,":player_real_wealth",100)],"Take a loan of 1000 denars.",
[
(troop_remove_gold, "trp_player", 100),
(troop_add_gold, "trp_player", 1000),
(val_add, "$g_player_debt", 1000),
(call_script, "script_bank_update_business"),
]),
("give_loan",[(store_troop_gold, ":player_wealth", "trp_player"),(gt,":player_wealth",1000),(gt,"$g_player_debt",1000)],"Repay 1000 denars of your debt.",
[
(troop_remove_gold, "trp_player", 1000),
(val_sub, "$g_player_debt", 1000),
(call_script, "script_bank_update_business"),
]),
("give_loan_all",[(store_troop_gold, ":player_wealth", "trp_player"),(gt,":player_wealth","$g_player_debt"),(gt,"$g_player_debt",0)],"Repay all of your debt.",
[
(troop_remove_gold, "trp_player", "$g_player_debt"),
(val_sub, "$g_player_debt", "$g_player_debt"),
(call_script, "script_bank_update_business"),
]),
("give_deposit",[(store_troop_gold, ":player_wealth", "trp_player"),(gt,":player_wealth",1000)],"Deposit 1000 denars in the bank.",
[
(troop_remove_gold, "trp_player", 1000),
(val_add, "$g_player_deposit", 1000),
(call_script, "script_bank_update_business"),
]),
("take_deposit",[(ge,"$g_player_deposit",1000)],"Withdraw 1000 denars from your deposit.",
[
(troop_add_gold, "trp_player", 1000),
(val_sub, "$g_player_deposit", 1000),
(call_script, "script_bank_update_business"),
]),
("take_deposit_all",[(ge,"$g_player_deposit",1)],"Withdraw your entire deposit.",
[
(troop_add_gold, "trp_player", reg6),
(val_sub, "$g_player_deposit", reg6),
(call_script, "script_bank_update_business"),
]),
("back_to_town_menu",[],"Head back.",
[
(jump_to_menu,"mnu_town"),
]),
]),
Now as far as I can tell, none of the new town slots conflict with other town slots, so I am guessing it is related to the registers. But they all seem to be set to 0 before interest on debts or deposits is calculated. I have played garnier's mod and it plays with no errors, so the problem must be a conflict with something in my mod or something I missed while porting the code. I just can't seem to figure out what it is.