Commit fc570065 authored by nekrozar's avatar nekrozar

update

parent 0bc407ca
...@@ -104,7 +104,7 @@ struct field_effect { ...@@ -104,7 +104,7 @@ struct field_effect {
effect_collection cheff; effect_collection cheff;
effect_collection rechargeable; effect_collection rechargeable;
effect_collection spsummon_count_eff; effect_collection spsummon_count_eff;
std::list<card*> disable_check_list; std::list<card*> disable_check_list;
std::unordered_set<card*> disable_check_set; std::unordered_set<card*> disable_check_set;
}; };
...@@ -294,6 +294,8 @@ struct processor { ...@@ -294,6 +294,8 @@ struct processor {
uint8 attack_state_count[2]; uint8 attack_state_count[2];
uint8 battle_phase_count[2]; uint8 battle_phase_count[2];
uint8 battled_count[2]; uint8 battled_count[2];
uint8 tossed_coin_count[2];
uint8 tossed_dice_count[2];
uint8 phase_action; uint8 phase_action;
uint32 hint_timing[2]; uint32 hint_timing[2];
uint8 current_player; uint8 current_player;
...@@ -333,7 +335,7 @@ public: ...@@ -333,7 +335,7 @@ public:
explicit field(duel* pduel); explicit field(duel* pduel);
~field(); ~field();
void reload_field_info(); void reload_field_info();
void add_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence); void add_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence);
void remove_card(card* pcard); void remove_card(card* pcard);
void move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence); void move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence);
...@@ -346,7 +348,7 @@ public: ...@@ -346,7 +348,7 @@ public:
void swap_deck_and_grave(uint8 playerid); void swap_deck_and_grave(uint8 playerid);
void reverse_deck(uint8 playerid); void reverse_deck(uint8 playerid);
void tag_swap(uint8 playerid); void tag_swap(uint8 playerid);
void add_effect(effect* peffect, uint8 owner_player = 2); void add_effect(effect* peffect, uint8 owner_player = 2);
void remove_effect(effect* peffect); void remove_effect(effect* peffect);
void remove_oath_effect(effect* reason_effect); void remove_oath_effect(effect* reason_effect);
...@@ -355,7 +357,7 @@ public: ...@@ -355,7 +357,7 @@ public:
void add_effect_code(uint32 code, uint32 playerid); void add_effect_code(uint32 code, uint32 playerid);
uint32 get_effect_code(uint32 code, uint32 playerid); uint32 get_effect_code(uint32 code, uint32 playerid);
void dec_effect_code(uint32 code, uint32 playerid); void dec_effect_code(uint32 code, uint32 playerid);
void filter_field_effect(uint32 code, effect_set* eset, uint8 sort = TRUE); void filter_field_effect(uint32 code, effect_set* eset, uint8 sort = TRUE);
void filter_affected_cards(effect* peffect, card_set* cset); void filter_affected_cards(effect* peffect, card_set* cset);
void filter_player_effect(uint8 playerid, uint32 code, effect_set* eset, uint8 sort = TRUE); void filter_player_effect(uint8 playerid, uint32 code, effect_set* eset, uint8 sort = TRUE);
...@@ -386,7 +388,7 @@ public: ...@@ -386,7 +388,7 @@ public:
void check_chain_counter(effect* peffect, int32 playerid, int32 chainid, bool cancel = false); void check_chain_counter(effect* peffect, int32 playerid, int32 chainid, bool cancel = false);
void set_spsummon_counter(uint8 playerid, bool add = true, bool chain = false); void set_spsummon_counter(uint8 playerid, bool add = true, bool chain = false);
int32 check_spsummon_counter(uint8 playerid, uint8 ct = 1); int32 check_spsummon_counter(uint8 playerid, uint8 ct = 1);
int32 check_lp_cost(uint8 playerid, uint32 cost); int32 check_lp_cost(uint8 playerid, uint32 cost);
void save_lp_cost(); void save_lp_cost();
void restore_lp_cost(); void restore_lp_cost();
...@@ -405,7 +407,7 @@ public: ...@@ -405,7 +407,7 @@ public:
static int32 check_with_sum_greater_limit(const card_vector& mats, int32 acc, int32 index, int32 opmin); static int32 check_with_sum_greater_limit(const card_vector& mats, int32 acc, int32 index, int32 opmin);
static int32 check_with_sum_greater_limit_m(const card_vector& mats, int32 acc, int32 index, int32 opmin, int32 must_count); static int32 check_with_sum_greater_limit_m(const card_vector& mats, int32 acc, int32 index, int32 opmin, int32 must_count);
int32 check_xyz_material(card* pcard, int32 findex, int32 lv, int32 min, int32 max, group* mg); int32 check_xyz_material(card* pcard, int32 findex, int32 lv, int32 min, int32 max, group* mg);
int32 is_player_can_draw(uint8 playerid); int32 is_player_can_draw(uint8 playerid);
int32 is_player_can_discard_deck(uint8 playerid, int32 count); int32 is_player_can_discard_deck(uint8 playerid, int32 count);
int32 is_player_can_discard_deck_as_cost(uint8 playerid, int32 count); int32 is_player_can_discard_deck_as_cost(uint8 playerid, int32 count);
......
...@@ -506,6 +506,8 @@ static const struct luaL_Reg duellib[] = { ...@@ -506,6 +506,8 @@ static const struct luaL_Reg duellib[] = {
{ "AddCustomActivityCounter", scriptlib::duel_add_custom_activity_counter }, { "AddCustomActivityCounter", scriptlib::duel_add_custom_activity_counter },
{ "GetCustomActivityCount", scriptlib::duel_get_custom_activity_count }, { "GetCustomActivityCount", scriptlib::duel_get_custom_activity_count },
{ "GetBattledCount", scriptlib::duel_get_battled_count }, { "GetBattledCount", scriptlib::duel_get_battled_count },
{ "GetTossedCoinCount", scriptlib::duel_get_tossed_coin_count },
{ "GetTossedDiceCount", scriptlib::duel_get_tossed_dice_count },
{ "IsAbleToEnterBP", scriptlib::duel_is_able_to_enter_bp }, { "IsAbleToEnterBP", scriptlib::duel_is_able_to_enter_bp },
{ "VenomSwampCheck", scriptlib::duel_venom_swamp_check }, { "VenomSwampCheck", scriptlib::duel_venom_swamp_check },
{ "SwapDeckAndGrave", scriptlib::duel_swap_deck_and_grave }, { "SwapDeckAndGrave", scriptlib::duel_swap_deck_and_grave },
......
...@@ -3417,6 +3417,24 @@ int32 scriptlib::duel_get_battled_count(lua_State *L) { ...@@ -3417,6 +3417,24 @@ int32 scriptlib::duel_get_battled_count(lua_State *L) {
lua_pushinteger(L, pduel->game_field->core.battled_count[playerid]); lua_pushinteger(L, pduel->game_field->core.battled_count[playerid]);
return 1; return 1;
} }
int32 scriptlib::duel_get_tossed_coin_count(lua_State *L) {
check_param_count(L, 1);
int32 playerid = lua_tointeger(L, 1);
if(playerid != 0 && playerid != 1)
return 0;
duel* pduel = interpreter::get_duel_info(L);
lua_pushinteger(L, pduel->game_field->core.tossed_coin_count[playerid]);
return 1;
}
int32 scriptlib::duel_get_tossed_dice_count(lua_State *L) {
check_param_count(L, 1);
int32 playerid = lua_tointeger(L, 1);
if(playerid != 0 && playerid != 1)
return 0;
duel* pduel = interpreter::get_duel_info(L);
lua_pushinteger(L, pduel->game_field->core.tossed_dice_count[playerid]);
return 1;
}
int32 scriptlib::duel_is_able_to_enter_bp(lua_State *L) { int32 scriptlib::duel_is_able_to_enter_bp(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L); duel* pduel = interpreter::get_duel_info(L);
lua_pushboolean(L, pduel->game_field->is_able_to_enter_bp()); lua_pushboolean(L, pduel->game_field->is_able_to_enter_bp());
......
...@@ -3623,7 +3623,7 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -3623,7 +3623,7 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
retgrave.insert(pcard); retgrave.insert(pcard);
raise_single_event(pcard, 0, EVENT_RETURN_TO_GRAVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0); raise_single_event(pcard, 0, EVENT_RETURN_TO_GRAVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0);
} else { } else {
tograve.insert(pcard); tograve.insert(pcard);
raise_single_event(pcard, 0, EVENT_TO_GRAVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0); raise_single_event(pcard, 0, EVENT_TO_GRAVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0);
} }
} }
...@@ -5051,6 +5051,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -5051,6 +5051,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
pduel->write_buffer8(count); pduel->write_buffer8(count);
for(int32 i = 0; i < count; ++i) { for(int32 i = 0; i < count; ++i) {
core.coin_result[i] = pduel->get_next_integer(0, 1); core.coin_result[i] = pduel->get_next_integer(0, 1);
core.tossed_dice_count[playerid]++;
pduel->write_buffer8(core.coin_result[i]); pduel->write_buffer8(core.coin_result[i]);
} }
raise_event((card*)0, EVENT_TOSS_COIN_NEGATE, reason_effect, 0, reason_player, playerid, count); raise_event((card*)0, EVENT_TOSS_COIN_NEGATE, reason_effect, 0, reason_player, playerid, count);
...@@ -5096,6 +5097,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -5096,6 +5097,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
pduel->write_buffer8(count1); pduel->write_buffer8(count1);
for(int32 i = 0; i < count1; ++i) { for(int32 i = 0; i < count1; ++i) {
core.dice_result[i] = pduel->get_next_integer(1, 6); core.dice_result[i] = pduel->get_next_integer(1, 6);
core.tossed_dice_count[playerid]++;
pduel->write_buffer8(core.dice_result[i]); pduel->write_buffer8(core.dice_result[i]);
} }
if(count2 > 0) { if(count2 > 0) {
...@@ -5104,6 +5106,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -5104,6 +5106,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
pduel->write_buffer8(count2); pduel->write_buffer8(count2);
for(int32 i = 0; i < count2; ++i) { for(int32 i = 0; i < count2; ++i) {
core.dice_result[count1 + i] = pduel->get_next_integer(1, 6); core.dice_result[count1 + i] = pduel->get_next_integer(1, 6);
core.tossed_dice_count[1 - playerid]++;
pduel->write_buffer8(core.dice_result[count1 + i]); pduel->write_buffer8(core.dice_result[count1 + i]);
} }
} }
......
...@@ -1409,7 +1409,7 @@ int32 field::process_phase_event(int16 step, int32 phase) { ...@@ -1409,7 +1409,7 @@ int32 field::process_phase_event(int16 step, int32 phase) {
core.hint_timing[infos.turn_player] = TIMING_BATTLE_START; core.hint_timing[infos.turn_player] = TIMING_BATTLE_START;
else if(phase == PHASE_BATTLE) else if(phase == PHASE_BATTLE)
core.hint_timing[infos.turn_player] = TIMING_BATTLE_END; core.hint_timing[infos.turn_player] = TIMING_BATTLE_END;
else else
core.hint_timing[infos.turn_player] = TIMING_END_PHASE; core.hint_timing[infos.turn_player] = TIMING_END_PHASE;
pr = effects.activate_effect.equal_range(EVENT_FREE_CHAIN); pr = effects.activate_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) { for(; pr.first != pr.second; ++pr.first) {
...@@ -2720,7 +2720,7 @@ int32 field::process_idle_command(uint16 step) { ...@@ -2720,7 +2720,7 @@ int32 field::process_idle_command(uint16 step) {
add_process(PROCESSOR_SELECT_POSITION, 0, 0, 0, infos.turn_player + (positions << 16), target->data.code); add_process(PROCESSOR_SELECT_POSITION, 0, 0, 0, infos.turn_player + (positions << 16), target->data.code);
core.units.begin()->step = 12; core.units.begin()->step = 12;
return FALSE; return FALSE;
} else } else
add_process(PROCESSOR_FLIP_SUMMON, 0, 0, (group*)target, target->current.controler, 0); add_process(PROCESSOR_FLIP_SUMMON, 0, 0, (group*)target, target->current.controler, 0);
target->set_status(STATUS_FORM_CHANGED, TRUE); target->set_status(STATUS_FORM_CHANGED, TRUE);
core.units.begin()->step = -1; core.units.begin()->step = -1;
...@@ -3126,7 +3126,7 @@ int32 field::process_battle_command(uint16 step) { ...@@ -3126,7 +3126,7 @@ int32 field::process_battle_command(uint16 step) {
core.units.begin()->arg1 = 2; core.units.begin()->arg1 = 2;
if(is_player_affected_by_effect(infos.turn_player, EFFECT_BP_TWICE)) if(is_player_affected_by_effect(infos.turn_player, EFFECT_BP_TWICE))
core.units.begin()->arg2 = 1; core.units.begin()->arg2 = 1;
else else
core.units.begin()->arg2 = 0; core.units.begin()->arg2 = 0;
reset_phase(PHASE_DAMAGE); reset_phase(PHASE_DAMAGE);
if(core.attacker->fieldid_r == afid && !atk_disabled) { if(core.attacker->fieldid_r == afid && !atk_disabled) {
...@@ -3643,7 +3643,7 @@ int32 field::process_battle_command(uint16 step) { ...@@ -3643,7 +3643,7 @@ int32 field::process_battle_command(uint16 step) {
// normal end of battle step // normal end of battle step
if(is_player_affected_by_effect(infos.turn_player, EFFECT_BP_TWICE)) if(is_player_affected_by_effect(infos.turn_player, EFFECT_BP_TWICE))
core.units.begin()->arg2 = 1; core.units.begin()->arg2 = 1;
else else
core.units.begin()->arg2 = 0; core.units.begin()->arg2 = 0;
infos.phase = PHASE_BATTLE; infos.phase = PHASE_BATTLE;
add_process(PROCESSOR_PHASE_EVENT, 0, 0, 0, PHASE_BATTLE, 0); add_process(PROCESSOR_PHASE_EVENT, 0, 0, 0, PHASE_BATTLE, 0);
...@@ -3936,6 +3936,8 @@ int32 field::process_turn(uint16 step, uint8 turn_player) { ...@@ -3936,6 +3936,8 @@ int32 field::process_turn(uint16 step, uint8 turn_player) {
core.attack_state_count[p] = 0; core.attack_state_count[p] = 0;
core.battle_phase_count[p] = 0; core.battle_phase_count[p] = 0;
core.battled_count[p] = 0; core.battled_count[p] = 0;
core.tossed_coin_count[p] = 0;
core.tossed_dice_count[p] = 0;
core.summon_count[p] = 0; core.summon_count[p] = 0;
core.extra_summon[p] = 0; core.extra_summon[p] = 0;
core.spsummon_once_map[p].clear(); core.spsummon_once_map[p].clear();
......
...@@ -16,7 +16,7 @@ public: ...@@ -16,7 +16,7 @@ public:
static int32 check_param(lua_State* L, int32 param_type, int32 index, BOOL retfalse = FALSE); static int32 check_param(lua_State* L, int32 param_type, int32 index, BOOL retfalse = FALSE);
static int32 check_param_count(lua_State* L, int32 count); static int32 check_param_count(lua_State* L, int32 count);
static int32 check_action_permission(lua_State* L); static int32 check_action_permission(lua_State* L);
//card lib //card lib
static int32 card_get_code(lua_State *L); static int32 card_get_code(lua_State *L);
static int32 card_get_origin_code(lua_State *L); static int32 card_get_origin_code(lua_State *L);
...@@ -229,7 +229,7 @@ public: ...@@ -229,7 +229,7 @@ public:
static int32 card_reset_negate_effect(lua_State *L); static int32 card_reset_negate_effect(lua_State *L);
static int32 card_assume_prop(lua_State *L); static int32 card_assume_prop(lua_State *L);
static int32 card_set_spsummon_once(lua_State *L); static int32 card_set_spsummon_once(lua_State *L);
//Effect functions //Effect functions
static int32 effect_new(lua_State *L); static int32 effect_new(lua_State *L);
static int32 effect_newex(lua_State *L); static int32 effect_newex(lua_State *L);
...@@ -363,7 +363,7 @@ public: ...@@ -363,7 +363,7 @@ public:
static int32 duel_check_timing(lua_State *L); static int32 duel_check_timing(lua_State *L);
static int32 duel_get_environment(lua_State *L); static int32 duel_get_environment(lua_State *L);
static int32 duel_is_environment(lua_State *L); static int32 duel_is_environment(lua_State *L);
static int32 duel_win(lua_State *L); static int32 duel_win(lua_State *L);
static int32 duel_draw(lua_State *L); static int32 duel_draw(lua_State *L);
static int32 duel_damage(lua_State *L); static int32 duel_damage(lua_State *L);
...@@ -412,7 +412,7 @@ public: ...@@ -412,7 +412,7 @@ public:
static int32 duel_chain_attack(lua_State *L); static int32 duel_chain_attack(lua_State *L);
static int32 duel_readjust(lua_State *L); static int32 duel_readjust(lua_State *L);
static int32 duel_adjust_instantly(lua_State *L); static int32 duel_adjust_instantly(lua_State *L);
static int32 duel_get_field_group(lua_State *L); static int32 duel_get_field_group(lua_State *L);
static int32 duel_get_field_group_count(lua_State *L); static int32 duel_get_field_group_count(lua_State *L);
static int32 duel_get_decktop_group(lua_State *L); static int32 duel_get_decktop_group(lua_State *L);
...@@ -459,7 +459,7 @@ public: ...@@ -459,7 +459,7 @@ public:
static int32 duel_get_overlay_count(lua_State *L); static int32 duel_get_overlay_count(lua_State *L);
static int32 duel_check_remove_overlay_card(lua_State *L); static int32 duel_check_remove_overlay_card(lua_State *L);
static int32 duel_remove_overlay_card(lua_State *L); static int32 duel_remove_overlay_card(lua_State *L);
static int32 duel_hint(lua_State *L); static int32 duel_hint(lua_State *L);
static int32 duel_hint_selection(lua_State *L); static int32 duel_hint_selection(lua_State *L);
static int32 duel_select_effect_yesno(lua_State *L); static int32 duel_select_effect_yesno(lua_State *L);
...@@ -482,7 +482,7 @@ public: ...@@ -482,7 +482,7 @@ public:
static int32 duel_get_dice_result(lua_State *L); static int32 duel_get_dice_result(lua_State *L);
static int32 duel_set_coin_result(lua_State *L); static int32 duel_set_coin_result(lua_State *L);
static int32 duel_set_dice_result(lua_State *L); static int32 duel_set_dice_result(lua_State *L);
static int32 duel_is_player_affected_by_effect(lua_State *L); static int32 duel_is_player_affected_by_effect(lua_State *L);
static int32 duel_is_player_can_draw(lua_State *L); static int32 duel_is_player_can_draw(lua_State *L);
static int32 duel_is_player_can_discard_deck(lua_State *L); static int32 duel_is_player_can_discard_deck(lua_State *L);
...@@ -507,12 +507,14 @@ public: ...@@ -507,12 +507,14 @@ public:
static int32 duel_get_custom_activity_count(lua_State *L); static int32 duel_get_custom_activity_count(lua_State *L);
static int32 duel_is_able_to_enter_bp(lua_State *L); static int32 duel_is_able_to_enter_bp(lua_State *L);
static int32 duel_get_battled_count(lua_State *L); static int32 duel_get_battled_count(lua_State *L);
static int32 duel_get_tossed_coin_count(lua_State *L);
static int32 duel_get_tossed_dice_count(lua_State *L);
//specific card functions //specific card functions
static int32 duel_venom_swamp_check(lua_State *L); static int32 duel_venom_swamp_check(lua_State *L);
static int32 duel_swap_deck_and_grave(lua_State *L); static int32 duel_swap_deck_and_grave(lua_State *L);
static int32 duel_majestic_copy(lua_State *L); static int32 duel_majestic_copy(lua_State *L);
//preload //preload
static int32 debug_message(lua_State *L); static int32 debug_message(lua_State *L);
static int32 debug_add_card(lua_State *L); static int32 debug_add_card(lua_State *L);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment