The decrease hand issue has already been fixed in dev.
Now it doesn't deal damage if activated from grave.
I tried a lot

to no avail. Unaltered by me code:
- Code: Select all
int card_soul_of_shandalar(int player, int card, event_t event){
/* Soul of Shandalar |4|R|R 0x200c98d
* Creature - Avatar 6/6
* First strike
* |3|R|R: ~ deals 3 damage to target player or planeswalker and 3 damage to up to one target creature that player or that planeswalker's controller controls.
* |3|R|R, Exile ~ from your graveyard: ~ deals 3 damage to target player or planeswalker and 3 damage to up to one target creature that player or that planeswalker's controller controls. */
if( IS_GAB_EVENT(event) ){
target_definition_t td;
default_target_definition(player, card, &td, TARGET_TYPE_PLANESWALKER);
td.zone = TARGET_ZONE_CREATURE_OR_PLAYER;
target_definition_t td1;
default_target_definition(player, card, &td1, TYPE_CREATURE);
card_instance_t* instance = get_card_instance(player, card);
if( event == EVENT_GRAVEYARD_ABILITY ){
if( has_mana_multi(player, MANACOST_XR(3, 2)) ){
if( can_target(&td) ){
return GA_BASIC;
}
}
}
if( event == EVENT_PAY_FLASHBACK_COSTS ){
instance->number_of_targets = 0;
if( charge_mana_multi(player, MANACOST_XR(3, 2)) ){
if( pick_target(&td, "TARGET_PLAYER_OR_PLANESWALKER") ){
instance->number_of_targets = 1;
td1.allowed_controller = instance->targets[0].player;
td1.preferred_controller = instance->targets[0].player;
if( can_target(&td1) ){
new_pick_target(&td1, "TARGET_CREATURE", 1, 0);
}
}
}
if( spell_fizzled != 1 ){
return GAPAID_EXILE;
}
}
if( event == EVENT_RESOLVE_ACTIVATED_GRAVEYARD_ABILITY ){
if( validate_target(player, card, &td, 0) ){
damage_target0(player, card, 3);
}
if( instance->number_of_targets == 2 && validate_target(player, card, &td1, 1) ){
damage_creature(instance->targets[1].player, instance->targets[1].card, 3, player, card);
}
}
}
if( ! IS_GAA_EVENT(event) ){
return 0;
}
target_definition_t td;
default_target_definition(player, card, &td, TARGET_TYPE_PLANESWALKER);
td.zone = TARGET_ZONE_CREATURE_OR_PLAYER;
target_definition_t td1;
default_target_definition(player, card, &td1, TYPE_CREATURE);
card_instance_t* instance = get_card_instance(player, card);
if( event == EVENT_CAN_ACTIVATE ){
return generic_activated_ability(player, card, event, GAA_CAN_TARGET, MANACOST_XR(3, 2), 0, &td, "TARGET_PLAYER_OR_PLANESWALKER");
}
if( event == EVENT_ACTIVATE ){
instance->number_of_targets = 0;
if( charge_mana_for_activated_ability(player, card, MANACOST_XR(3, 2)) ){
if( pick_target(&td, "TARGET_PLAYER_OR_PLANESWALKER") ){
instance->number_of_targets = 1;
td1.allowed_controller = instance->targets[0].player;
td1.preferred_controller = instance->targets[0].player;
if( can_target(&td1) && new_pick_target(&td1, "TARGET_CREATURE", 1, 0) ){
instance->number_of_targets = 2;
}
}
}
}
if( event == EVENT_RESOLVE_ACTIVATION ){
if( validate_target(player, card, &td, 0) ){
damage_target0(player, card, 3);
}
if( instance->number_of_targets == 2 && validate_target(player, card, &td1, 1) ){
damage_creature(instance->targets[1].player, instance->targets[1].card, 3, instance->parent_controller, instance->parent_card);
}
}
return 0;
}