Inheritance

A key part of DM, being an Object-Oriented language, is the idea of inheritance.

Let's say you have an type with the path /datum/foo. If you then define a subtype /datum/foo/bar, it will inherit properties from the first.

/datum/foo var/foo_var = 5 /proc/main() var/datum/foo/bar/my_subtype = new world << my_subtype.foo_var // 5

You can also override properties of the parent:

/datum/foo var/foo_var = 5 /datum/foo/bar foo_var = 10 /proc/main() var/datum/foo/bar/my_subtype = new world << my_subtype.foo_var // 10

You can do this with procs as well:

/datum/foo/proc/xyzzy() world << "parent" /datum/foo/bar/xyzzy() world << "child" /proc/main() var/datum/foo/bar/my_subtype = new my_subtype.xyzzy() // "child"

Sometimes, you'll want to have some custom functionality, in addition to, the parent's functionality. This is expressed in other languages sometimes as super(). Instead, we use ..() in DM. This can be called at any point in the proc.

/datum/foo/proc/dream() return "yond" /datum/foo/bar/dream() world << "Be" + ..() /proc/main() var/datum/foo/bar/my_subtype = new my_subtype.dream() // "Beyond"