OSDN Git Service

Revert "Revert "Merge branch 'master' of git.osdn.net:/gitroot/hengband/hengband""
[hengbandforosx/hengbandosx.git] / src / info-reader / vault-reader.c
1 #include "info-reader/vault-reader.h"
2 #include "main/angband-headers.h"
3 #include "room/rooms-vault.h"
4 #include "util/string-processor.h"
5
6 /*!
7  * @brief Vault情報(v_info)のパース関数 /
8  * Initialize the "v_info" array, by parsing an ascii "template" file
9  * @param buf テキスト列
10  * @param head ヘッダ構造体
11  * @return エラーコード
12  */
13 errr parse_v_info(char *buf, angband_header *head)
14 {
15     char *s;
16     static vault_type *v_ptr = NULL;
17
18     if (buf[0] == 'N') {
19         s = angband_strchr(buf + 2, ':');
20         if (!s)
21             return 1;
22
23         *s++ = '\0';
24         if (!*s)
25             return 1;
26
27         int i = atoi(buf + 2);
28         if (i <= error_idx)
29             return 4;
30         if (i >= head->info_num)
31             return 2;
32
33         error_idx = i;
34         v_ptr = &v_info[i];
35         if (!add_name(&v_ptr->name, head, s))
36             return 7;
37     } else if (!v_ptr)
38         return 3;
39     else if (buf[0] == 'D') {
40         s = buf + 2;
41         if (!add_text(&v_ptr->text, head, s, FALSE))
42             return 7;
43     } else if (buf[0] == 'X') {
44         EFFECT_ID typ, rat, hgt, wid;
45         if (4 != sscanf(buf + 2, "%d:%d:%d:%d", &typ, &rat, &hgt, &wid))
46             return 1;
47
48         v_ptr->typ = (ROOM_IDX)typ;
49         v_ptr->rat = (PROB)rat;
50         v_ptr->hgt = (POSITION)hgt;
51         v_ptr->wid = (POSITION)wid;
52     } else
53         return 6;
54
55     return 0;
56 }