#include "info-reader/race-reader.h"
+#include "info-reader/parse-error-types.h"
#include "info-reader/race-info-tokens-table.h"
#include "main/angband-headers.h"
#include "monster-race/monster-race.h"
static errr grab_one_basic_flag(monster_race *r_ptr, concptr what)
{
if (grab_one_flag(&r_ptr->flags1, r_info_flags1, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->flags2, r_info_flags2, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->flags3, r_info_flags3, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->flags7, r_info_flags7, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->flags8, r_info_flags8, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->flags9, r_info_flags9, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->flagsr, r_info_flagsr, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
msg_format(_("未知のモンスター・フラグ '%s'。", "Unknown monster flag '%s'."), what);
- return 1;
+ return PARSE_ERROR_GENERIC;
}
/*!
static errr grab_one_spell_flag(monster_race *r_ptr, concptr what)
{
if (grab_one_flag(&r_ptr->flags4, r_info_flags4, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->a_ability_flags1, r_a_ability_flags1, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
if (grab_one_flag(&r_ptr->a_ability_flags2, r_a_ability_flags2, what) == 0)
- return 0;
+ return PARSE_ERROR_NONE;
msg_format(_("未知のモンスター・フラグ '%s'。", "Unknown monster flag '%s'."), what);
- return 1;
+ return PARSE_ERROR_GENERIC;
}
/*!
if (buf[0] == 'N') {
s = angband_strchr(buf + 2, ':');
if (!s)
- return 1;
+ return PARSE_ERROR_GENERIC;
*s++ = '\0';
#ifdef JP
if (!*s)
- return 1;
+ return PARSE_ERROR_GENERIC;
#endif
int i = atoi(buf + 2);
if (i < error_idx)
- return 4;
+ return PARSE_ERROR_NON_SEQUENTIAL_RECORDS;
+
if (i >= head->info_num)
- return 2;
+ return PARSE_ERROR_ABSOLETE_FILE;
error_idx = i;
r_ptr = &r_info[i];
#ifdef JP
if (!add_name(&r_ptr->name, head, s))
- return 7;
+ return PARSE_ERROR_OUT_OF_MEMORY;
#endif
} else if (!r_ptr) {
- return 3;
+ return PARSE_ERROR_MISSING_RECORD_HEADER;
}
#ifdef JP
/* 英語名を読むルーチンを追加 */
else if (buf[0] == 'E') {
s = buf + 2;
if (!add_name(&r_ptr->E_name, head, s))
- return 7;
+ return PARSE_ERROR_OUT_OF_MEMORY;
}
#else
else if (buf[0] == 'E') {
s = buf + 2;
if (!add_name(&r_ptr->name, head, s))
- return 7;
+ return PARSE_ERROR_OUT_OF_MEMORY;
}
#endif
else if (buf[0] == 'D') {
#ifdef JP
if (buf[2] == '$')
- return 0;
+ return PARSE_ERROR_NONE;
+
s = buf + 2;
#else
if (buf[2] != '$')
- return 0;
+ return PARSE_ERROR_NONE;
s = buf + 3;
#endif
if (!add_text(&r_ptr->text, head, s, TRUE))
- return 7;
+ return PARSE_ERROR_OUT_OF_MEMORY;
} else if (buf[0] == 'G') {
- if (buf[1] != ':')
- return 1;
- if (!buf[2])
- return 1;
- if (buf[3] != ':')
- return 1;
- if (!buf[4])
- return 1;
+ if ((buf[1] != ':') || !buf[2] || (buf[3] != ':') || !buf[4])
+ return PARSE_ERROR_GENERIC;
char sym = buf[2];
byte tmp = color_char_to_attr(buf[4]);
if (tmp > 127)
- return 1;
+ return PARSE_ERROR_GENERIC;
r_ptr->d_char = sym;
r_ptr->d_attr = tmp;
} else if (buf[0] == 'I') {
int spd, hp1, hp2, aaf, ac, slp;
-
- if (6 != sscanf(buf + 2, "%d:%dd%d:%d:%d:%d", &spd, &hp1, &hp2, &aaf, &ac, &slp))
- return 1;
+ if (sscanf(buf + 2, "%d:%dd%d:%d:%d:%d", &spd, &hp1, &hp2, &aaf, &ac, &slp) != 6)
+ return PARSE_ERROR_GENERIC;
r_ptr->speed = (SPEED)spd;
r_ptr->hdice = (DICE_NUMBER)MAX(hp1, 1);
long exp;
long nextexp;
int nextmon;
- if (6 != sscanf(buf + 2, "%d:%d:%d:%ld:%ld:%d", &lev, &rar, &pad, &exp, &nextexp, &nextmon))
- return 1;
+ if (sscanf(buf + 2, "%d:%d:%d:%ld:%ld:%d", &lev, &rar, &pad, &exp, &nextexp, &nextmon) != 6)
+ return PARSE_ERROR_GENERIC;
r_ptr->level = (DEPTH)lev;
r_ptr->rarity = (RARITY)rar;
if (r_ptr->reinforce_id[i] == 0)
break;
- if (i == 6)
- return 1;
+ if ((i == 6) || (sscanf(buf + 2, "%d:%dd%d", &id, &dd, &ds) != 3))
+ return PARSE_ERROR_GENERIC;
- if (3 != sscanf(buf + 2, "%d:%dd%d", &id, &dd, &ds))
- return 1;
r_ptr->reinforce_id[i] = (MONRACE_IDX)id;
r_ptr->reinforce_dd[i] = (DICE_NUMBER)dd;
r_ptr->reinforce_ds[i] = (DICE_SID)ds;
break;
if (i == 4)
- return 1;
+ return PARSE_ERROR_GENERIC;
/* loop */
for (s = t = buf + 2; *t && (*t != ':'); t++)
}
if (!r_info_blow_method[n1])
- return 1;
+ return PARSE_ERROR_GENERIC;
/* loop */
for (s = t; *t && (*t != ':'); t++)
}
if (!r_info_blow_effect[n2])
- return 1;
+ return PARSE_ERROR_GENERIC;
/* loop */
for (s = t; *t && (*t != 'd'); t++)
}
if (0 != grab_one_basic_flag(r_ptr, s))
- return 5;
+ return PARSE_ERROR_INVALID_FLAG;
s = t;
}
continue;
}
- if (0 != grab_one_spell_flag(r_ptr, s))
- return 5;
+ if (grab_one_spell_flag(r_ptr, s) != PARSE_ERROR_NONE)
+ return PARSE_ERROR_INVALID_FLAG;
s = t;
}
if (!r_ptr->artifact_id[i])
break;
- if (i == 4)
- return 1;
+ if ((i == 4) || (sscanf(buf + 2, "%d:%d:%d", &id, &rarity, &per) != 3))
+ return PARSE_ERROR_GENERIC;
- if (3 != sscanf(buf + 2, "%d:%d:%d", &id, &rarity, &per))
- return 1;
r_ptr->artifact_id[i] = (ARTIFACT_IDX)id;
r_ptr->artifact_rarity[i] = (RARITY)rarity;
r_ptr->artifact_percent[i] = (PERCENTAGE)per;
} else if (buf[0] == 'V') {
int val;
- if (3 != sscanf(buf + 2, "%d", &val))
+ if (sscanf(buf + 2, "%d", &val) != 3)
return 1;
+
r_ptr->arena_ratio = (PERCENTAGE)val;
} else {
- return 6;
+ return PARSE_ERROR_UNDEFINED_DIRECTIVE;
}
- return 0;
+ return PARSE_ERROR_NONE;
}