Procs may be derived from /proc. These procs are “global”, in that they can be called anywhere in the code.

proc/poof()
    world << "POOF!"

The proc poof() may now be called anywhere in the code.

Procs may also be attached to objects by defining them under the appropriate object/proc subnode. Currently DM allows procs to be defined or overridden for /mob, /obj, /turf, /area, world, and /client, as well as for datum objects derived from /. Predefined procs are discussed under the “procs” entry for the object type.

mob/proc/poof()
    world << "POOF!"

This can be called by a mob var M, using M.poof().

Return types

It is possible to define what type of value a proc is expected to return, by following its definition with an as clause. This can be a type path, such as as /mob/player, or a more intrinsic type like as num or as list.

mob/monster
    var/mob/player/target
 
    proc/GetTarget() as /mob/player
        if(!target)
            // find a /mob/player in view
            target = locate() in view(src)
        return target

Currently the only purpose for using the as clause is for situations where the compiler needs to infer the type of an expression. Mainly this applies to the . and ?. operators in an expression such as GetTarget()?.Attack(src). Giving GetTarget() a return type allows the compiler to check if Attack() is a valid proc for /mob/player. Otherwise, the . and ?. operators act like : and ?:, respectively; the compiler won’t do any checking to see if Attack() is valid.

See also

204 items under this folder.