It is currently 16 Apr 2024, 05:46
   
Text Size

[fixed][Monkey Cage] others list (Double Sleight) bug

Moderators: BAgate, drool66, Aswan jaguar, gmzombie, stassy, CCGHQ Admins

[fixed][Monkey Cage] others list (Double Sleight) bug

Postby Korath » 18 Oct 2016, 19:44

Describe the Bug:
Monkey Cage makes Ape tokens instead of Monkey tokens. Worse, in dev, it doesn't sacrifice itself anymore either. Plus, it double-sleights the tokens, so if you Sleight of Mind the Monkey Cage from red to blue and then Sleight it again from green to red, you get blue Apes instead of red Monkeys.

Which card did behave improperly ?
Monkey Cage.

Which update are you using?(date,name)Which type(Duel,Gauntlet,Sealed Deck)
dev HEAD, 98bf2ca.

What exactly should be the correct behavior/interaction ?
Monkeys, sacrifice during the trigger so it's not infinite monkeys, and only sleight once (in token_generation.c, where it's done automagically). Or at least a better reason why revision 83f44e3, which had none of these problems, was wrong than "code redone". Even the EMN version just makes apes instead of monkeys.

Are any other cards possibly affected by this bug ?
Nothing else makes Monkey tokens, and the sacrifice is, obviously, specific to Monkey Cage. Plenty of cards with the sleight bug, though. A partial list can be found with "git grep -inp color_forced.*sleight":
| Open
src/cards/conspiracy-take-the-crown.c=543=int card_liutenants_of_the_guard(int player, int card, event_t event){
src/cards/conspiracy-take-the-crown.c:560: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_WHITE);
src/cards/conspiracy-take-the-crown.c=1242=int card_skyline_despot(int player, int card, event_t event){
src/cards/conspiracy-take-the-crown.c:1259: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_RED);
src/cards/conspiracy-take-the-crown.c=1268=int card_subterranean_tremors(int player, int card, event_t event){
src/cards/conspiracy-take-the-crown.c:1294: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_RED);
src/cards/conspiracy-take-the-crown.c=1974=int card_queen_marchesa(int player, int card, event_t event){
src/cards/conspiracy-take-the-crown.c:1995: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/dissension.c=3068=Creature <97> Zombie Shaman 2/2
src/cards/dissension.c:3127: token.color_forced = get_sleighted_color_test(instance->parent_controller, instance->parent_card, COLOR_TEST_RED);
src/cards/eldritch_moon.c=304=int card_it_of_the_horrid_swarm(int player, int card, event_t event)
src/cards/eldritch_moon.c:326: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_GREEN);
src/cards/eldritch_moon.c=2746=int card_dark_salvation(int player, int card, event_t event)
src/cards/eldritch_moon.c:2788: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/eldritch_moon.c=2819=int card_graf_harvest(int player, int card, event_t event)
src/cards/eldritch_moon.c:2860: token.color_forced = get_sleighted_color_test(instance->parent_controller, instance->parent_card, COLOR_TEST_BLACK);
src/cards/eldritch_moon.c=2942=int card_haunted_dead(int player, int card, event_t event)
src/cards/eldritch_moon.c:2971: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_WHITE);
src/cards/eldritch_moon.c=3099=int card_noosegraf_mob(int player, int card, event_t event)
src/cards/eldritch_moon.c:3116: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/eldritch_moon.c=3123=int card_oath_of_liliana(int player, int card, event_t event)
src/cards/eldritch_moon.c:3145: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/eldritch_moon.c=6071=int card_soul_separator(int player, int card, event_t event)
src/cards/eldritch_moon.c:6125: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/eldritch_moon.c=6381=int card_hanweir_garrison(int player, int card, event_t event){
src/cards/eldritch_moon.c:6390: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_RED);
src/cards/guildpact.c=2690=static int teysa_legacy(int player, int card, event_t event){
src/cards/guildpact.c:2736: token.color_forced = get_sleighted_color_test(p, c, COLOR_TEST_WHITE);
src/cards/innistrad.c=2578=void saint_traft_ability(int player, int card, event_t event, int attacker_player, int attacker_card){
src/cards/innistrad.c:2587: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_WHITE);
src/cards/mercadian_masques.c=2287=int card_monkey_cage(int player, int card, event_t event){
src/cards/mercadian_masques.c:2301: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_GREEN);
src/cards/oath_of_the_gatewatch.c=1060=int card_linvala_the_preserver(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:1079: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_WHITE);
src/cards/oath_of_the_gatewatch.c=1143=int card_oath_of_gideon(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:1156: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_WHITE);
src/cards/oath_of_the_gatewatch.c=1880=int card_crush_of_tentacles(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:1915: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLUE);
src/cards/oath_of_the_gatewatch.c=2899=int card_dranas_chosen(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:2927: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/oath_of_the_gatewatch.c=2938=static int kalitas_traitor_of_ghet(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:2975: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/oath_of_the_gatewatch.c=2986=int card_kalitas_traitor_of_ghet(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:3025: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/oath_of_the_gatewatch.c=3101=int card_null_caller(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:3135: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/oath_of_the_gatewatch.c=3608=int card_chandra_flamecaller(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:3697: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_RED);
src/cards/oath_of_the_gatewatch.c=4652=int card_nissa_voice_of_zendikar(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:4695: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_GREEN);
src/cards/oath_of_the_gatewatch.c=4876=int card_seed_guardian(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:4887: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_GREEN);
src/cards/oath_of_the_gatewatch.c=5377=int card_captains_claws(int player, int card, event_t event){
src/cards/oath_of_the_gatewatch.c:5393: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_WHITE);
src/cards/onslaught.c=3242=static int rotlung_reanimator_effect(int player, int card, event_t event){
src/cards/onslaught.c:3317: token.color_forced = p > -1 ? get_sleighted_color_test(p, c, COLOR_TEST_BLACK) : COLOR_TEST_BLACK;
src/cards/shadows_over_innistrad.c=51=static void make_spirit(int s_player, int s_card, int t_player, int qty, int sleight){
src/cards/shadows_over_innistrad.c:58: token.color_forced = (sleight ? get_sleighted_color_test(s_player, s_card, COLOR_TEST_WHITE) : COLOR_TEST_WHITE);
src/cards/shadows_over_innistrad.c=62=static void make_zombie(int s_player, int s_card, int t_player, int qty, int sleight, int action){
src/cards/shadows_over_innistrad.c:67: token.color_forced = (sleight ? get_sleighted_color_test(s_player, s_card, COLOR_TEST_BLACK) : COLOR_TEST_BLACK);
src/cards/shadows_over_innistrad.c=73=static void make_devil(int s_player, int s_card, int t_player, int qty, int sleight){
src/cards/shadows_over_innistrad.c:79: token.color_forced = (sleight ? get_sleighted_color_test(s_player, s_card, COLOR_TEST_RED) : COLOR_TEST_RED);
src/cards/shadows_over_innistrad.c=83=static void make_wolf(int s_player, int s_card, int t_player, int qty, int sleight){
src/cards/shadows_over_innistrad.c:89: token.color_forced = (sleight ? get_sleighted_color_test(s_player, s_card,COLOR_TEST_GREEN) : COLOR_TEST_GREEN);
src/cards/shadows_over_innistrad.c=93=static void make_human_soldier(int s_player, int s_card, int t_player, int qty, int sleight){
src/cards/shadows_over_innistrad.c:98: token.color_forced = (sleight ? get_sleighted_color_test(s_player, s_card, COLOR_TEST_WHITE) : COLOR_TEST_WHITE);
src/cards/shadows_over_innistrad.c=535=int card_descend_upon_the_sinful(int player, int card, event_t event){
src/cards/shadows_over_innistrad.c:552: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_WHITE);
src/cards/shadows_over_innistrad.c=717=int card_westvale_cult_leader(int player, int card, event_t event){
src/cards/shadows_over_innistrad.c:733: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK) |
src/cards/shadows_over_innistrad.c=2878=int card_call_the_bloodline(int player, int card, event_t event ){
src/cards/shadows_over_innistrad.c:2892: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK);
src/cards/shadows_over_innistrad.c=5024=static void make_insect(int s_player, int s_card, int t_player, int qty, int sleight){
src/cards/shadows_over_innistrad.c:5030: token.color_forced = (sleight ? get_sleighted_color_test(s_player, s_card, COLOR_TEST_GREEN) : COLOR_TEST_GREEN);
src/cards/shadows_over_innistrad.c=5357=int card_inexorable_blob(int player, int card, event_t event){
src/cards/shadows_over_innistrad.c:5372: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_GREEN);
src/cards/shadows_over_innistrad.c=6533=int card_sorin_grim_nemesis(int player, int card, event_t event){
src/cards/shadows_over_innistrad.c:6618: token.color_forced = get_sleighted_color_test(pl, ca, COLOR_TEST_BLACK);
src/cards/shadows_over_innistrad.c=7332=int card_westvale_abbey(int player, int card, event_t event){
src/cards/shadows_over_innistrad.c:7433: token.color_forced = get_sleighted_color_test(player, card, COLOR_TEST_BLACK) |
...not that making a full token_generation_t is correct for hardly any of those in the first place. generate_token_by_id() or generate_tokens_by_id() is less typing, more efficient, and doesn't have the timing issues that generate_token() does if the token's just going to have its default characteristics anyway.
Attachments
ape-cage.jpg
Last edited by Aswan jaguar on 13 Mar 2021, 12:33, edited 4 times in total.
Reason: fixed
User avatar
Korath
DEVELOPER
 
Posts: 3707
Joined: 02 Jun 2013, 05:57
Has thanked: 496 times
Been thanked: 1106 times

Re: [confirmed]Monkey Cage makes Ape tokens, doesn't sac its

Postby Aswan jaguar » 18 Oct 2016, 21:03

I confirm the ape tokens can't confirm the no sacrifice and the sleight bug as both cards that do that are broken in public as you know.
---
Trying to squash some bugs and playtesting.
User avatar
Aswan jaguar
Super Tester Elite
 
Posts: 8078
Joined: 13 May 2010, 12:17
Has thanked: 730 times
Been thanked: 458 times

Re: [confirmed]Monkey Cage makes Ape tokens, doesn't sac its

Postby Korath » 18 Oct 2016, 21:13

The EMN version of this sleights correctly. (Or would, if Sleight of Mind worked at all.)
User avatar
Korath
DEVELOPER
 
Posts: 3707
Joined: 02 Jun 2013, 05:57
Has thanked: 496 times
Been thanked: 1106 times

Re: [confirmed]Monkey Cage makes Ape tokens, doesn't sac its

Postby Aswan jaguar » 20 Oct 2019, 11:43

Fixed all mentioned about Monkey Cage and that it didn't trigger for opponent creatures entering the battlefield in commit 78214d93.
I will leave this open until I address the other double sleight bugs.
---
Trying to squash some bugs and playtesting.
User avatar
Aswan jaguar
Super Tester Elite
 
Posts: 8078
Joined: 13 May 2010, 12:17
Has thanked: 730 times
Been thanked: 458 times

Re: [confirmed][Monkey Cage] others list (Double Sleight) bu

Postby Aswan jaguar » 13 Mar 2021, 12:32

Sleight of Mind had this bug Korath:
viewtopic.php?f=86&t=30292#p247500
after this despite the double sleight on those tokens everything seems to work fine in my tests unless I don't make the correct tests. If double sleight doesn't cause issues I will not change the double values.
---
Trying to squash some bugs and playtesting.
User avatar
Aswan jaguar
Super Tester Elite
 
Posts: 8078
Joined: 13 May 2010, 12:17
Has thanked: 730 times
Been thanked: 458 times


Return to Archived Reports

Who is online

Users browsing this forum: No registered users and 90 guests


Who is online

In total there are 90 users online :: 0 registered, 0 hidden and 90 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 90 guests

Login Form