int magic_message(dumb_ptr<map_session_data> caster, XString source_invocation) { if (pc_isdead(caster)) return 0; int power = caster->matk1; // This was the only thing worth saving from magic_preprocess_message. // May it rest only, and never rise again. // For more information on how this code worked, travel through time // and watch all the comments I wrote for myself while trying to figure // out if it was safe to delete. if (caster->state.shroud_active && caster->state.shroud_disappears_on_talk) magic_unshroud(caster); auto pair = magic_tokenise(source_invocation); XString spell_invocation = pair.first; XString parameter = pair.second; dumb_ptr<spell_t> spell = magic_find_spell(spell_invocation); if (spell) { int near_miss; dumb_ptr<env_t> env = spell_create_env(&magic_conf, spell, caster, power, parameter); effect_set_t *effects; if (bool(spell->flags & SPELL_FLAG::NONMAGIC) || (power >= 1)) effects = spell_trigger(spell, caster, env, &near_miss); else effects = NULL; #ifdef DEBUG FPRINTF(stderr, "Found spell `%s', triggered = %d\n", spell_, effects != NULL); #endif if (bool(caster->status.option & Option::HIDE)) return 0; // No spellcasting while hidden MAP_LOG_PC(caster, "CAST %s %s", spell->name, effects ? "SUCCESS" : "FAILURE"); if (effects) { dumb_ptr<invocation> invocation = spell_instantiate(effects, env); spell_bind(caster, invocation); spell_execute(invocation); return bool(spell->flags & SPELL_FLAG::SILENT) ? -1 : 1; } else magic_free_env(env); return 1; } return 0; /* Not a spell */ }
static char *magic_preprocess_message (character_t * character, char *start, char *end) { if (character->state.shroud_active && character->state.shroud_disappears_on_talk) magic_unshroud (character); if (character->state.shroud_active && character->state.shroud_hides_name_talking) { int len = strlen (end); strcpy (start, "? "); memmove (start + 2, end, len + 1); return start + 4; } else return end + 2; /* step past blank */ }