1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
--- a/data/json/npcs/appearance_trait_groups.json
+++ b/data/json/npcs/appearance_trait_groups.json
@@ -19,49 +19,49 @@
"type": "trait_group",
"id": "Appearance_Irish",
"subtype": "collection",
- "traits": [ { "group": "Hair_Irish", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Irish", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 }, { "group": "Eye_light", "prob": 100 } ]
},
{
"type": "trait_group",
"id": "Appearance_Caucasian",
"subtype": "collection",
- "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_White", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_White", "prob": 100 }, { "group": "Eye_any", "prob": 100 } ]
},
{
"type": "trait_group",
"id": "Appearance_Germanic",
"subtype": "collection",
- "traits": [ { "group": "Hair_Fair", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Fair", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 }, { "group": "Eye_light", "prob": 100 } ]
},
{
"type": "trait_group",
"id": "Appearance_Latin",
"subtype": "collection",
- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Medium", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Medium", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
},
{
"type": "trait_group",
"id": "Appearance_African",
"subtype": "collection",
- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Dark", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Dark", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
},
{
"type": "trait_group",
"id": "Appearance_EastAsian",
"subtype": "collection",
- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
},
{
"type": "trait_group",
"id": "Appearance_SouthAsian",
"subtype": "collection",
- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
},
{
"type": "trait_group",
"id": "Appearance_Mixed",
"subtype": "collection",
- "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_Any", "prob": 100 } ]
+ "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_Any", "prob": 100 }, { "group": "Eye_any", "prob": 100 } ]
},
{
"type": "trait_group",
@@ -155,6 +155,31 @@
},
{
"type": "trait_group",
+ "id": "Eye_light",
+ "subtype": "distribution",
+ "traits": [ { "trait": "eye_blue", "prob": 55 }, { "trait": "eye_gray", "prob": 25 }, { "trait": "eye_green", "prob": 15 } ]
+ },
+ {
+ "type": "trait_group",
+ "id": "Eye_dark",
+ "subtype": "distribution",
+ "traits": [ { "trait": "eye_brown", "prob": 60 }, { "trait": "eye_hazel", "prob": 20 }, { "trait": "eye_amber", "prob": 20 } ]
+ },
+ {
+ "type": "trait_group",
+ "id": "Eye_any",
+ "subtype": "distribution",
+ "traits": [
+ { "trait": "eye_brown", "prob": 70 },
+ { "trait": "eye_hazel", "prob": 9 },
+ { "trait": "eye_amber", "prob": 8 },
+ { "trait": "eye_blue", "prob": 8 },
+ { "trait": "eye_gray", "prob": 3 },
+ { "trait": "eye_green", "prob": 2 }
+ ]
+ },
+ {
+ "type": "trait_group",
"id": "Hair_Black",
"subtype": "distribution",
"traits": [
--- a/data/json/mutations/mutation_appearance.json
+++ b/data/json/mutations/mutation_appearance.json
@@ -477,6 +513,78 @@
"types": [ "hair_style" ]
},
{
+ "id": "eye_blue",
+ "type": "mutation",
+ "name": { "str": "Eye color: blue" },
+ "description": "You have blue eyes.",
+ "points": 0,
+ "starting_trait": true,
+ "valid": false,
+ "purifiable": false,
+ "player_display": false,
+ "types": [ "eye_color" ]
+ },
+ {
+ "id": "eye_brown",
+ "type": "mutation",
+ "name": { "str": "Eye color: brown" },
+ "description": "You have brown eyes.",
+ "points": 0,
+ "starting_trait": true,
+ "valid": false,
+ "purifiable": false,
+ "player_display": false,
+ "types": [ "eye_color" ]
+ },
+ {
+ "id": "eye_hazel",
+ "type": "mutation",
+ "name": { "str": "Eye color: hazel" },
+ "description": "You have hazel eyes.",
+ "points": 0,
+ "starting_trait": true,
+ "valid": false,
+ "purifiable": false,
+ "player_display": false,
+ "types": [ "eye_color" ]
+ },
+ {
+ "id": "eye_amber",
+ "type": "mutation",
+ "name": { "str": "Eye color: amber" },
+ "description": "You have amber eyes.",
+ "points": 0,
+ "starting_trait": true,
+ "valid": false,
+ "purifiable": false,
+ "player_display": false,
+ "types": [ "eye_color" ]
+ },
+ {
+ "id": "eye_gray",
+ "type": "mutation",
+ "name": { "str": "Eye color: gray" },
+ "description": "You have gray eyes.",
+ "points": 0,
+ "starting_trait": true,
+ "valid": false,
+ "purifiable": false,
+ "player_display": false,
+ "types": [ "eye_color" ]
+ },
+ {
+ "id": "eye_green",
+ "type": "mutation",
+ "name": { "str": "Eye color: green" },
+ "description": "You have green eyes.",
+ "points": 0,
+ "starting_trait": true,
+ "valid": false,
+ "purifiable": false,
+ "player_display": false,
+ "types": [ "eye_color" ]
+ },
+ {
"id": "SKIN_DARK",
"type": "mutation",
"name": { "str": "Skin tone: dark brown" },
--- a/data/json/mutations/mutation_type.json
+++ b/data/json/mutations/mutation_type.json
@@ -69,6 +73,10 @@
},
{
"type": "mutation_type",
+ "id": "eye_color"
+ },
+ {
+ "type": "mutation_type",
"id": "hair_style"
},
{
|