That question's kind of vague and it would be impossible to sum up every little hardcoded aspect.
The term hardcoded means that some sort of code parts such as functions or parameters are only accessible via source code. If you want to change them you have to rewrite and recompile the code.
This applies to the engine itself and nearly everything that makes no use of external data input.
In case of soc actions you have to devide in:
- those which are only used by one certain kind of object for one certain purpose
- and those which are more commonly used.
The former ones are, for example, nearly all enemy thinkers which contain the name of the enemy itself: A_JetJawChomp, A_PointyThink, A_SnailerThink, A_VultureCheck, A_MonitorPop... and so on and so on
They do not make use of external parameters (var1 & var2) and you can not do much with them as long as you don't want to use them for the exact same purpose they were created for.
These are almost entirely hardcoded (some of their effects can be changed by the mobj's stats).
The latter ones are used by many kinds of objects or were actually implemented for modding purposes and therefor have to be more flexible. They make extensive use of external parameters like, for example: A_CapeChase, A_SpawnObjectRelative, A_SetObjectFlags, A_Thrust... etc.
These guarantee a better access but, of course, have a hardcoded core, too.
If in doubt you will have to browse through every single soc action's description (or its original source code) to find out. :|:|