This seems a wise course, mighty Armok. The earlier that stuff gets added the easier it'll be to add. There's 217 and 212 to consider too, which could test different aspects of the system. I've a few ideas on how to proceed.
Right now, the Player is itself an instance of the Object class, serving as the 'body,' containing display character, color and map coordinates, and other physical properties of game objects. Animate beings have an Entity component class that currently contains attributes, hp and other traits subjective to living creatures, but this early on it should be easy to split the Mind and Body attributes more accordingly.
Some current properties like HP should probably get shifted to the Object itself (that way, in the example of HP, doors, chests, computers and the like could be easily damaged and destroyed, items could use the values as durability, etc).
As for individual body parts, I'm thinking about a dictionary attached to the Object. The default would be a simple indeterminate 'body' value, for items and basic objects, but for creatures, each key in the dictionary could hold a list of lists corresponding to various parts.
Each spawned creature object should have a default body_type variable corresponding to a key from the body dictionary. The creature's body parts would then be assembled accordingly. To transform a body part's shape, material, or other qualities, you could modify the data in the appropriate index. Mind switching with 291 or even 963 might be done by dumping the transferred entities into temporary 'spirit' objects, and then writing those to their respective destination bodies. This may allow for disembodied minds and mindless bodies, should the transfer be somehow interrupted.
There's a rudimentary material system already in place, which was intended for the Clockworks, but it's limited to a few metals right now. Making the SCP will involve separate dungeon branches, security doors and unique dungeon levels, which are murkier waters for me. Drawing the unique level in ASCII and loading it from that seems like the common practice for it. Much of this will be a marked step out of the comfort zone, but that's probably half the reason I'm doing this in the first place, so I appreciate the encouragement.
Edit: Here's what a level for 291 might look like:
# S=player start, R=rubble, #=wall, .=floor, 0=coffin, |=security door, [=card reader,
# :=lockers, ?=door control tiles, A=aperture, \=lever, C=computer, B=button panel,
# &=impassable door, +=regular door, n=container spawn location, $=sign, W=window
map_291=[
'################################################################################',
'################################################################################',
'################################################################################',
'####RRR#########################################################################',
'####...#########################################################################',
'####...#########################################################################',
'####...#########################################################################',
'####...#########################################################################',
'####...#########################################################################',
'####...#########################################################################',
'####...#########################################################################',
'####...#########################################################################',
'###[...#########################################################################',
'####|||#########################################################################',
'###[...+.................................................................SAR####',
'####...###############+#######################################+#################',
'####...###############R##################################R.................R####',
'####...#########################################################################',
'####...+.................................................................#######',
'####...+.................................................................#######',
'####...#............########################################.............#######',
'####...W............########################################.............#######',
'####...#............+....:##################################.............#######',
'####...#............########################################.............#######',
'####...#............##B0####################################.............#######',
'####...#............|?..D#####################::::::::::::##.............#######',
'####...#............|?..D#####################.............|.............#######',
'####...#............|?..D#####################.............|.............#######',
'####...#............|?..D#####################.............|.............#######',
'####...#............|?..D#####################::::::::::::##.............#######',
'####...#............##::####################################.............#######',
'####...#............##################################:....+.............#######',
'####...#............########################################.............#######',
'####...W............########################################.............#######',
'####...#............########################################.............#######',
'####...#.................................................................#######',
'####...#.................................................................#######',
'####...+.................................................................#######',
'####...+.................................................................#######',
'####...########+#####################+#################################..#######',
'####...####n.......n.n#############.....###############################..#######',
'####RRR####.n.n.n.n.n.#############/....###############################..#######',
'#######################################################################..#######',
'#######################################################################..#######',
'#######################################################################..#######',
'#######################################################################..#######',
'#######################################################################..#######',
'#######################################################################..#######',
'#######################################################################RR#######',
'################################################################################',
]
What I'm wondering at the moment is how you're supposed to get living things inside the coffin to begin with. Maybe allowing creatures to get knocked unconscious, and letting the body get carried as an item until it wakes up? Aside from nefarious purposes, that could be used to drag wounded allies out of harm's way or something like that.