You could use objects and properties for them. Then use a procedure to guide the player through it, then reuse the same procedure for each step changing just a couple lines. Hell you could even make a procedure to check for any object in the room, get the property type and choices etc, guiding through the whole process and blahblahblah blah.
Here's an example, figured you probably were going for multiplayer so that's the format I did it in...
define object <hair.color>
properties <total=5; _
1=black; _
2=blonde; _
3=browne; _
4=grey; _
5=red>
end define
define procedure <CharCreation.HairColor>
set string <choice[userid]; null>
set string <valid[userid]; null>
for <i; 1; $objectproperty(hair.color; total)$> msg <%i%. $objectproperty(hair.color; %i%)$|n>
msg <Choose your hair color. 1-$objectproperty(hair.color; total)$|n>
enter <choice[userid]>
for <i; 1; $objectproperty(hair.color; total)$> {
if ( #enter# = %i% ) then set string <valid[userid]; true>
}
if ( #valid[userid]# <> true ) then {
msg <That is not a valid choice.|n>
do <CharCreation.HairColor>
}
else {
property <player%userid%; hair.color=$objectproperty(hair.color; #choice[userid]#>
do <NEXT CHARACTER CREATION STEP>
}
end define
P.S. Damn I'm good.