Development pointers in Design Philosophy
var/list/hudObjs = newlist( /obj/myHud1, /obj/myHud2, /obj/myHud3, /obj/myHud4)client.screen.Add(hudObjs)
list("left hand", "right hand", "torso", "head", "neck", "pants")
list("neck") //Can only be equipped on the necklist(list("torso", "pants", "head")) //Simultaeneously takes up the torso, pants, and head slots.list("left hand", "right hand") //May be equipped in left or right hand slots.list(list("head", "torso"), "pants") //May be equpped in "pants", or in "head" and "torso"
I'm not sure if it'll be helpful, but here is what I have to say.
Also, I know it is important for all types of games, but plan things out first. In a RPG there is usually a lot of content, and it is easy to get lost in it all and forget what parts of it do (or even that they exist!). So having a detailed plan of things can save yourself a lot of trouble.
Magic is another area that should take some thought and design. My current approach is to divide magic into skill sets by type (animism, necromancy, pyromancy, etc.). "Spells" can be cast from written instructions and rituals such as scrolls or pages, which can be compiled into books ( often called grimoires). Certain talismans, fetishes, etc. can increase the potency or ease of incantations. However, magic is risky, and is likely to be fatiguing at the least. Channeling greater power can invite disaster resulting in injury, death, or far worse.... Additionally, even successful wizards are likely to be influenced by the magic they wield over time. So a necromancer might grow increasing skeletal and gaunt or kill foliage by his touch, while a fire magus may acquire glowing eyes, golden skin, or the scent of brimstone. Such is the price for trafficking in such arcane power.
mob/var/list/equipment = new#define LEFT_HAND 1#define RIGHT_HAND 2#define TORSO 3#define PANTS 4//producing basically the exact same effect in usage:M.equipment[LEFT_HAND] == x
obj/equipment proc/GetEquipLocs() return list()
mob var slot_head slot_torso slot_rhand //etc. proc getEquip(slot) //Returns the item equipped in the given slot, or null if there's nothing there return vars[slot]