@@ -154,6 +154,20 @@ int get_otaku_rea(struct char_data *ch) {
154154 return rea_stat;
155155}
156156
157+ int get_otaku_mpcp (struct char_data *ch) {
158+ int mpcp = (get_otaku_int (ch) + get_otaku_wil (ch) + get_otaku_cha (ch) + 2 ) / 3
159+ + GET_ECHO (ch, ECHO_IMPROVED_MPCP);
160+
161+ // HOUSERULE: cap otaku MPCP to 2x REAL int
162+ #ifdef DIES_IRAE
163+ return MIN (GET_REAL_INT (ch) * 2 , mpcp);
164+ #else
165+ // human/elf/dwarf otaku have 7 max real int, so cap 14
166+ // let troll/ork otaku reach the same mpcp cap
167+ return MIN (14 , mpcp);
168+ #endif
169+ }
170+
157171extern struct obj_data *make_new_finished_part (int part_type, int mpcp, int rating=0 );
158172struct obj_data *make_otaku_deck (struct char_data *ch) {
159173 if (!ch) {
@@ -169,7 +183,7 @@ struct obj_data *make_otaku_deck(struct char_data *ch) {
169183 struct obj_data *new_deck = read_object (OBJ_CUSTOM_CYBERDECK_SHELL, VIRTUAL, OBJ_LOAD_REASON_OTAKU_RESONANCE);
170184
171185 // Add parts.
172- int mpcp = GET_OTAKU_MPCP (ch);
186+ int mpcp = get_otaku_mpcp (ch);
173187
174188 // Real values are assigned in update_otaku_deck()
175189 obj_to_obj (make_new_finished_part (PART_MPCP, mpcp, mpcp), new_deck);
@@ -264,9 +278,9 @@ void _update_living_persona(struct char_data *ch, struct obj_data *cyberdeck, in
264278}
265279
266280void update_otaku_deck (struct char_data *ch, struct obj_data *cyberdeck) {
267- int mpcp = GET_OTAKU_MPCP (ch);
281+ int mpcp = get_otaku_mpcp (ch);
268282
269- GET_CYBERDECK_MPCP (cyberdeck) = MIN ( 12 , mpcp) ;
283+ GET_CYBERDECK_MPCP (cyberdeck) = mpcp;
270284 GET_CYBERDECK_HARDENING (cyberdeck) = (get_otaku_wil (ch) + 1 ) / 2 + GET_ECHO (ch, ECHO_IMPROVED_HARD);
271285 GET_CYBERDECK_HARDENING (cyberdeck) = MIN (get_otaku_wil (ch), GET_CYBERDECK_HARDENING (cyberdeck));
272286 GET_CYBERDECK_ACTIVE_MEMORY (cyberdeck) = 0 ; // Otaku do not have active memory.
0 commit comments