Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions config/fxdata/lua/bindings/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,12 @@ function Set_creature_configuration(creature_type,property,value,value2) end
---@param value3 any
function SetEffectGeneratorConfiguration(effectgeneratorname,property,value,value2,value3) end

--[[
---Makes changes to keeper powers, as originally set in magic.cfg.
---@param power_kind power_kind
---@param property any
---@param value any
---@param value2 any
function Set_power_configuration(power_kind,property,value,value2) end
]]
function SetPowerConfiguration(power_kind,property,value,value2) end

---Allows you to make changes to room values set in terrain.cfg. Look in that file for explanations on the numbers.
---@param room_type room_type
Expand Down
141 changes: 116 additions & 25 deletions src/config_magic.c
Original file line number Diff line number Diff line change
Expand Up @@ -442,36 +442,127 @@ static void assign_artifact(const struct NamedField* named_field, int64_t value,
game.conf.object_conf.object_to_power_artifact[value] = idx;
}

static void assign_strength_before_last(const struct NamedField* named_field, int64_t value, const struct NamedFieldSet* named_fields_set, int idx, const char* src_str, unsigned char flags)
static int64_t value_strength(const struct NamedField* named_field, const char* value_text, const struct NamedFieldSet* named_fields_set, int idx, const char* src_str, unsigned char flags)
{
// Old power max is one short for spell max, so duplicate final power value to use for lvl10 creatures.
assign_default(named_field,value,named_fields_set,idx,src_str,flags);
named_field++;
assign_default(named_field,value,named_fields_set,idx,src_str,flags);
char word_buf[COMMAND_WORD_LEN];

int32_t pos = 0;
long len = strlen(value_text);
int num_params = 0;
while (get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf)) > 0)
{
num_params++;
}

pos = 0;

if (num_params == 2)
{
get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf));
int32_t strength_value = atoi(word_buf);
get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf));
int32_t slot = atoi(word_buf) - 1;
if (flag_is_set(flags,ccf_SplitExecution))
{
return strength_value | ((int64_t)slot << 32);
}
else
{
struct PowerConfigStats* powerst = get_power_model_stats(idx);
powerst->strength[slot] = strength_value;
return 0;
}

}

if (flag_is_set(flags,ccf_SplitExecution) || (num_params != 9 && num_params != 10))
{
ERRORLOG("Invalid strength value \"%s\" for power %d", value_text, idx);
return -1;
}

int32_t i = 0;
struct PowerConfigStats* powerst = get_power_model_stats(idx);
while (get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf)) > 0)
{
int32_t strength_value = atoi(word_buf);
powerst->strength[i] = strength_value;
i++;
}

if (num_params == 9)
{
powerst->strength[9] = powerst->strength[8];
}
return 0;

}

static int64_t value_cost(const struct NamedField* named_field, const char* value_text, const struct NamedFieldSet* named_fields_set, int idx, const char* src_str, unsigned char flags)
{
char word_buf[COMMAND_WORD_LEN];

int32_t pos = 0;
long len = strlen(value_text);
int num_params = 0;
while (get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf)) > 0)
{
num_params++;
}

pos = 0;

if (num_params == 2)
{
get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf));
int32_t cost_value = atoi(word_buf);
get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf));
int32_t slot = atoi(word_buf) - 1;
if (flag_is_set(flags,ccf_SplitExecution))
{
return cost_value | ((int64_t)slot << 32);
}
else
{
struct PowerConfigStats* powerst = get_power_model_stats(idx);
powerst->cost[slot] = cost_value;
return 0;
}

}

if (flag_is_set(flags,ccf_SplitExecution) || (num_params != 9))
{
ERRORLOG("Invalid cost value \"%s\" for power %d", value_text, idx);
return -1;
}

int32_t i = 0;
struct PowerConfigStats* powerst = get_power_model_stats(idx);
while (get_conf_parameter_single(value_text,&pos,len,word_buf,sizeof(word_buf)) > 0)
{
int32_t cost_value = atoi(word_buf);
powerst->cost[i] = cost_value;
i++;
}
return 0;
}

static void assign_strength_cost(const struct NamedField* named_field, int64_t value, const struct NamedFieldSet* named_fields_set, int idx, const char* src_str, unsigned char flags)
{
if (flag_is_set(flags,ccf_SplitExecution))
{
int32_t assign_value = value & 0xFFFFFFFF;
int32_t slot = (value >> 32) & 0xFFFFFFFF;
((int32_t*)named_field->field)[slot] = assign_value;
}
}

static const struct NamedField magic_powers_named_fields[] = {
//name //pos //field //default //min //max //NamedCommand
{"NAME", 0, field(game.conf.magic_conf.power_cfgstats[0].code_name), 0, INT32_MIN,UINT32_MAX, power_desc, value_name, assign_null},
{"POWER", 0, field(game.conf.magic_conf.power_cfgstats[0].strength[0]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 1, field(game.conf.magic_conf.power_cfgstats[0].strength[1]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 2, field(game.conf.magic_conf.power_cfgstats[0].strength[2]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 3, field(game.conf.magic_conf.power_cfgstats[0].strength[3]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 4, field(game.conf.magic_conf.power_cfgstats[0].strength[4]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 5, field(game.conf.magic_conf.power_cfgstats[0].strength[5]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 6, field(game.conf.magic_conf.power_cfgstats[0].strength[6]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 7, field(game.conf.magic_conf.power_cfgstats[0].strength[7]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", 8, field(game.conf.magic_conf.power_cfgstats[0].strength[8]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_strength_before_last},
{"POWER", 8, field(game.conf.magic_conf.power_cfgstats[0].strength[9]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 0, field(game.conf.magic_conf.power_cfgstats[0].cost[0]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 1, field(game.conf.magic_conf.power_cfgstats[0].cost[1]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 2, field(game.conf.magic_conf.power_cfgstats[0].cost[2]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 3, field(game.conf.magic_conf.power_cfgstats[0].cost[3]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 4, field(game.conf.magic_conf.power_cfgstats[0].cost[4]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 5, field(game.conf.magic_conf.power_cfgstats[0].cost[5]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 6, field(game.conf.magic_conf.power_cfgstats[0].cost[6]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 7, field(game.conf.magic_conf.power_cfgstats[0].cost[7]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"COST", 7, field(game.conf.magic_conf.power_cfgstats[0].cost[8]), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"POWER", -1, field(game.conf.magic_conf.power_cfgstats[0].strength[0]), 0, INT32_MIN,UINT32_MAX, NULL, value_strength, assign_strength_cost},
{"COST", -1, field(game.conf.magic_conf.power_cfgstats[0].cost[0]), 0, INT32_MIN,UINT32_MAX, NULL, value_cost, assign_strength_cost},
{"DURATION", 0, field(game.conf.magic_conf.power_cfgstats[0].duration), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"CASTABILITY", -1, field(game.conf.magic_conf.power_cfgstats[0].can_cast_flags), 0, 0,UINT64_MAX, (struct NamedCommand*)powermodel_castability_commands, value_longflagsfield, assign_default},
{"ARTIFACT", 0, field(game.conf.magic_conf.power_cfgstats[0].artifact_model), 0, INT32_MIN,UINT32_MAX, object_desc, value_default, assign_artifact},
Expand All @@ -482,7 +573,7 @@ static const struct NamedField magic_powers_named_fields[] = {
{"POINTERSPRITES", 0, field(game.conf.magic_conf.power_cfgstats[0].pointer_sprite_idx), 0, INT32_MIN,UINT32_MAX, NULL, value_icon, assign_icon},
{"PANELTABINDEX", 0, field(game.conf.magic_conf.power_cfgstats[0].panel_tab_idx), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"SOUNDSAMPLES", 0, field(game.conf.magic_conf.power_cfgstats[0].select_sample_idx), 0, INT32_MIN,UINT32_MAX, NULL, value_default, assign_default},
{"PROPERTIES", 0, field(game.conf.magic_conf.power_cfgstats[0].config_flags), 0, INT32_MIN,UINT32_MAX, powermodel_properties_commands, value_flagsfield,assign_default},
{"PROPERTIES", -1, field(game.conf.magic_conf.power_cfgstats[0].config_flags), 0, INT32_MIN,UINT32_MAX, powermodel_properties_commands, value_flagsfield,assign_default},
{"CASTEXPANDFUNC", 0, field(game.conf.magic_conf.power_cfgstats[0].overcharge_check_idx), 0, INT32_MIN,UINT32_MAX, powermodel_expand_check_func_type, value_default, assign_default},
{"PLAYERSTATE", 0, field(game.conf.magic_conf.power_cfgstats[0].work_state), 0, INT32_MIN,UINT32_MAX, player_state_commands, value_default, assign_default},
{"PARENTPOWER", 0, field(game.conf.magic_conf.power_cfgstats[0].parent_power), 0, INT32_MIN,UINT32_MAX, power_desc, value_default, assign_default},
Expand Down
3 changes: 2 additions & 1 deletion src/config_magic.h
Original file line number Diff line number Diff line change
Expand Up @@ -424,10 +424,11 @@ extern const struct NamedCommand spell_effect_flags[];
extern const struct NamedCommand powermodel_properties_commands[];
extern const struct LongNamedCommand powermodel_castability_commands[];
extern const struct NamedCommand powermodel_expand_check_func_type[];
extern const struct NamedCommand magic_power_commands[];
extern const Expand_Check_Func powermodel_expand_check_func_list[];
extern const struct NamedCommand magic_use_func_commands[];
extern const struct NamedCommand magic_cost_formula_commands[];

extern const struct NamedFieldSet magic_powers_named_fields_set;
/******************************************************************************/
struct SpellConfig *get_spell_config(SpellKind spell_idx);
TbBool spell_config_is_invalid(struct SpellConfig *mgcinfo);
Expand Down
15 changes: 15 additions & 0 deletions src/frontmenu_ingame_tabs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2879,6 +2879,21 @@ void update_powers_tab_to_config(void)
ibtn->draw_call = gui_area_spell_button;
ibtn->maintain_call = maintain_spell;
}

struct PlayerInfo *player = get_my_player();
if (player->view_type == PVT_DungeonTop)
{
if (menu_is_active(GMnu_SPELL))
{
turn_off_menu(GMnu_SPELL);
turn_on_menu(GMnu_SPELL);
}
else if (menu_is_active(GMnu_SPELL2))
{
turn_off_menu(GMnu_SPELL2);
turn_on_menu(GMnu_SPELL2);
}
}
}

void draw_placefiller(long scr_x, long scr_y, long units_per_px)
Expand Down
13 changes: 7 additions & 6 deletions src/lua_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -1028,11 +1028,12 @@ static int lua_Set_effect_generator_configuration(lua_State *L)
return 0;
}

//static int lua_Set_power_configuration(lua_State *L)
//{
// set_configuration(L, &terrain_room_named_fields_set, "SET_POWER_CONFIGURATION");
// return 0;
//}
static int lua_Set_power_configuration(lua_State *L)
{
set_configuration(L, &magic_powers_named_fields_set, "SET_POWER_CONFIGURATION");
update_powers_tab_to_config();
Comment thread
PieterVdc marked this conversation as resolved.
Comment thread
PieterVdc marked this conversation as resolved.
return 0;
}

static int lua_Set_room_configuration(lua_State *L)
{
Expand Down Expand Up @@ -2241,7 +2242,7 @@ static const luaL_Reg global_methods[] = {
{"SetTrapConfiguration", lua_Set_trap_configuration },
//{"SetCreatureConfiguration", lua_Set_creature_configuration },
{"SetEffectGeneratorConfiguration", lua_Set_effect_generator_configuration},
//{"SetPowerConfiguration", lua_Set_power_configuration },
{"SetPowerConfiguration", lua_Set_power_configuration },
{"SetRoomConfiguration", lua_Set_room_configuration },
{"SetGameRule", lua_Set_game_rule },
{"SetHandRule", lua_Set_hand_rule },
Expand Down
Loading