Yeah basically you need to edit skill.cpp, but the change should be minimal if you have a different skill that works similar already.
Basically open skill.cpp in Visual Studio and make Ctrl+F, make sure you select to search only in this document so you don't get too many results.
Then you first search for the skill you want to change to understand how it works. You don't want to change anything about its effects, you just want to change how often it calls "skill_attack" (you want to call it once for each enemy in the area instead of just the target).
So if you search for AM_ACIDTERROR in skill.cpp and check where it calls skill_attack you will find it in a long lists of single target skills:
[...]
case AC_CHARGEARROW:
case MA_CHARGEARROW:
case RG_INTIMIDATE:
case AM_ACIDTERROR:
case BA_MUSICALSTRIKE:
case DC_THROWARROW:
case BA_DISSONANCE:
case CR_HOLYCROSS:
[...]
You will want to remove it here.
Now you search for a skill that you want it to behave like. For example MG_FIREBALL. Then you find a larger list of skills, it's even commented as "Splash skills":
//Splash attack skills.
case AS_GRIMTOOTH:
case MC_CARTREVOLUTION:
case NPC_SPLASHATTACK:
flag |= SD_PREAMBLE; // a fake packet will be sent for the first target to be hit
case AS_SPLASHER:
case HT_BLITZBEAT:
case AC_SHOWER:
case MA_SHOWER:
case MG_NAPALMBEAT:
case MG_FIREBALL:
case RG_RAID:
#ifdef RENEWAL
case SN_SHARPSHOOTING:
#endif
case HW_NAPALMVULCAN:
case NJ_HUUMA:
case ASC_METEORASSAULT:
You just need to add your skill here ("case AM_ACIDTERROR:").
Now it works like a splash skill. The code below looks a bit scary because devs put way too many exceptions in there, but you can just ignore this unless you want your skill to have a unique handling unlike normal splash skills.
Most of the other things you can just define in the skill_db.yml
If you wonder how this section works, basically it will first be called without a flag:
if( flag&1 ) {//Recursive invocation
So this will be false and it goes into the else:
} else {
In the else it then calls a sub function for all units in the area:
// recursive invocation of skill_castend_damage_id() with flag|1
map_foreachinrange(skill_area_sub, bl, splash_size, starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
This will in the end loop back to the same function again for each valid target, except now it has "flag&1" and will just call skill_attack for that target instead.