OSDN Git Service

[Refactor] #38844 Removed inclusion of monster-race.h in angband.h
[hengband/hengband.git] / src / info-reader / skill-reader.c
1 #include "info-reader/skill-reader.h"
2 #include "player/player-skill.h"
3
4 /*!
5  * @brief 職業技能情報(s_info)のパース関数 /
6  * Initialize the "s_info" array, by parsing an ascii "template" file
7  * @param buf テキスト列
8  * @param head ヘッダ構造体
9  * @return エラーコード
10  */
11 errr parse_s_info(char *buf, angband_header *head)
12 {
13     static skill_table *s_ptr = NULL;
14     if (buf[0] == 'N') {
15         int i = atoi(buf + 2);
16         if (i <= error_idx)
17             return 4;
18         if (i >= head->info_num)
19             return 2;
20
21         error_idx = i;
22         s_ptr = &s_info[i];
23     } else if (!s_ptr) {
24         return 3;
25     } else if (buf[0] == 'W') {
26         int tval, sval, start, max;
27         const s16b exp_conv_table[] = { WEAPON_EXP_UNSKILLED, WEAPON_EXP_BEGINNER, WEAPON_EXP_SKILLED, WEAPON_EXP_EXPERT, WEAPON_EXP_MASTER };
28
29         if (4 != sscanf(buf + 2, "%d:%d:%d:%d", &tval, &sval, &start, &max))
30             return 1;
31
32         if (start < EXP_LEVEL_UNSKILLED || start > EXP_LEVEL_MASTER || max < EXP_LEVEL_UNSKILLED || max > EXP_LEVEL_MASTER)
33             return 8;
34
35         s_ptr->w_start[tval][sval] = exp_conv_table[start];
36         s_ptr->w_max[tval][sval] = exp_conv_table[max];
37     } else if (buf[0] == 'S') {
38         int num, start, max;
39         if (3 != sscanf(buf + 2, "%d:%d:%d", &num, &start, &max))
40             return 1;
41
42         if (start < WEAPON_EXP_UNSKILLED || start > WEAPON_EXP_MASTER || max < WEAPON_EXP_UNSKILLED || max > WEAPON_EXP_MASTER)
43             return 8;
44
45         s_ptr->s_start[num] = (SUB_EXP)start;
46         s_ptr->s_max[num] = (SUB_EXP)max;
47     } else
48         return 6;
49
50     return 0;
51 }