Commit 88724276 authored by nanahira's avatar nanahira

Merge branch 'spell_link'

parents d8ca56be 693e6e06
......@@ -1225,11 +1225,20 @@ uint32 card::get_rscale() {
return rscale;
}
uint32 card::get_link_marker() {
if(!(data.type & TYPE_LINK))
return 0;
effect_set effects;
effect_set effects2;
uint32 link_marker = data.link_marker;
if(!(data.type & TYPE_LINK)) {
effect_set effects3;
filter_effect(EFFECT_LINK_SPELL_KOISHI, &effects3);
if(!effects3.size())
return 0;
for (int32 i = 0; i < effects3.size(); ++i) {
card* ocard = effects3[i]->get_handler();
if (!(effects3[i]->type & EFFECT_TYPE_FIELD) || !(ocard && ocard->get_status(STATUS_TO_LEAVE_FROMEX)))
link_marker = effects3[i]->get_value(this);
}
}
filter_effect(EFFECT_ADD_LINK_MARKER_KOISHI, &effects, FALSE);
filter_effect(EFFECT_REMOVE_LINK_MARKER_KOISHI, &effects);
filter_effect(EFFECT_CHANGE_LINK_MARKER_KOISHI, &effects2);
......@@ -1251,10 +1260,20 @@ int32 card::is_link_marker(uint32 dir) {
return (int32)(get_link_marker() & dir);
}
uint32 card::get_linked_zone() {
if(!(data.type & TYPE_LINK) || current.location != LOCATION_MZONE)
if((!(data.type & TYPE_LINK) || current.location != LOCATION_MZONE) && (!is_affected_by_effect(EFFECT_LINK_SPELL_KOISHI) || current.location != LOCATION_SZONE))
return 0;
int32 zones = 0;
int32 s = current.sequence;
if(current.location == LOCATION_SZONE) {
if(s > 4)
return 0;
if(is_link_marker(LINK_MARKER_TOP_LEFT) && s != 0)
zones |= 1u << (s - 1);
if(is_link_marker(LINK_MARKER_TOP) && s != 0)
zones |= 1u << s;
if(is_link_marker(LINK_MARKER_TOP_RIGHT) && s != 4)
zones |= 1u << (s + 1);
}
if(s > 0 && s <= 4 && is_link_marker(LINK_MARKER_LEFT))
zones |= 1u << (s - 1);
if(s <= 3 && is_link_marker(LINK_MARKER_RIGHT))
......
......@@ -123,6 +123,7 @@ public:
#define EFFECT_REMOVE_SUMMON_TYPE_KOISHI 37564159
#define EFFECT_CHANGE_SUMMON_TYPE_KOISHI 37564160
#define EFFECT_CHANGE_SUMMON_LOCATION_KOISHI 37564161
#define EFFECT_LINK_SPELL_KOISHI 37564162
//status
#define EFFECT_STATUS_AVAILABLE 0x0001
......
......@@ -801,6 +801,14 @@ uint32 field::get_linked_zone(int32 playerid) {
zones |= 1u << (2 - i * 2);
}
}
for(uint32 i = 0; i < 5; ++i) {
if(i > 0 && player[playerid].list_szone[i] && player[playerid].list_szone[i]->is_link_marker(LINK_MARKER_TOP_LEFT))
zones |= 1u << (i - 1);
if(player[playerid].list_szone[i] && player[playerid].list_szone[i]->is_link_marker(LINK_MARKER_TOP))
zones |= 1u << i;
if(i < 4 && player[playerid].list_szone[i] && player[playerid].list_szone[i]->is_link_marker(LINK_MARKER_TOP_RIGHT))
zones |= 1u << (i + 1);
}
return zones;
}
void field::get_linked_cards(uint8 self, uint8 s, uint8 o, card_set* cset) {
......
......@@ -722,6 +722,8 @@ interpreter::interpreter(duel* pd): coroutines(256) {
lua_setglobal(lua_state, "EFFECT_CHANGE_SUMMON_TYPE_KOISHI");
lua_pushinteger(lua_state, EFFECT_CHANGE_SUMMON_LOCATION_KOISHI);
lua_setglobal(lua_state, "EFFECT_CHANGE_SUMMON_LOCATION_KOISHI");
lua_pushinteger(lua_state, EFFECT_LINK_SPELL_KOISHI);
lua_setglobal(lua_state, "EFFECT_LINK_SPELL_KOISHI");
//music hints
lua_pushinteger(lua_state, HINT_MUSIC);
lua_setglobal(lua_state, "HINT_MUSIC");
......
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