OSDN Git Service

Merge remote-tracking branch 'remotes/origin/feature/Fix-Sanity-Blast-by-AutoSave...
[hengband/hengband.git] / src / load / lore-loader.c
1 #include "load/lore-loader.h"
2 #include "game-option/runtime-arguments.h"
3 #include "monster-race/monster-race.h"
4 #include "load/load-util.h"
5 #include "load/load-v1-5-0.h"
6 #include "load/angband-version-comparer.h"
7
8 /*!
9  * @brief モンスターの思い出を読み込む / Read the monster lore
10  * @param r_idx 読み込み先モンスターID
11  * @return なし
12  */
13 void rd_lore(MONRACE_IDX r_idx)
14 {
15     monster_race *r_ptr = &r_info[r_idx];
16
17     s16b tmp16s;
18     rd_s16b(&tmp16s);
19     r_ptr->r_sights = (MONSTER_NUMBER)tmp16s;
20
21     rd_s16b(&tmp16s);
22     r_ptr->r_deaths = (MONSTER_NUMBER)tmp16s;
23
24     rd_s16b(&tmp16s);
25     r_ptr->r_pkills = (MONSTER_NUMBER)tmp16s;
26
27     if (h_older_than(1, 7, 0, 5)) {
28         r_ptr->r_akills = r_ptr->r_pkills;
29     } else {
30         rd_s16b(&tmp16s);
31         r_ptr->r_akills = (MONSTER_NUMBER)tmp16s;
32     }
33
34     rd_s16b(&tmp16s);
35     r_ptr->r_tkills = (MONSTER_NUMBER)tmp16s;
36
37     rd_byte(&r_ptr->r_wake);
38     rd_byte(&r_ptr->r_ignore);
39     rd_byte(&r_ptr->r_xtra1);
40     rd_byte(&r_ptr->r_xtra2);
41
42     byte tmp8u;
43     rd_byte(&tmp8u);
44     r_ptr->r_drop_gold = (ITEM_NUMBER)tmp8u;
45     rd_byte(&tmp8u);
46     r_ptr->r_drop_item = (ITEM_NUMBER)tmp8u;
47
48     rd_byte(&tmp8u);
49     rd_byte(&r_ptr->r_cast_spell);
50
51     rd_byte(&r_ptr->r_blows[0]);
52     rd_byte(&r_ptr->r_blows[1]);
53     rd_byte(&r_ptr->r_blows[2]);
54     rd_byte(&r_ptr->r_blows[3]);
55
56     rd_u32b(&r_ptr->r_flags1);
57     rd_u32b(&r_ptr->r_flags2);
58     rd_u32b(&r_ptr->r_flags3);
59     rd_u32b(&r_ptr->r_flags4);
60     rd_u32b(&r_ptr->r_flags5);
61     rd_u32b(&r_ptr->r_flags6);
62     if (h_older_than(1, 5, 0, 3))
63         set_old_lore(r_ptr, r_idx);
64     else
65         rd_u32b(&r_ptr->r_flagsr);
66
67     rd_byte(&tmp8u);
68     r_ptr->max_num = (MONSTER_NUMBER)tmp8u;
69
70     rd_s16b(&r_ptr->floor_id);
71     rd_byte(&tmp8u);
72
73     r_ptr->r_flags1 &= r_ptr->flags1;
74     r_ptr->r_flags2 &= r_ptr->flags2;
75     r_ptr->r_flags3 &= r_ptr->flags3;
76     r_ptr->r_flags4 &= r_ptr->flags4;
77     r_ptr->r_flags5 &= r_ptr->a_ability_flags1;
78     r_ptr->r_flags6 &= r_ptr->a_ability_flags2;
79     r_ptr->r_flagsr &= r_ptr->flagsr;
80 }
81
82 errr load_lore(void)
83 {
84     u16b tmp16u;
85     rd_u16b(&tmp16u);
86     if (tmp16u > max_r_idx) {
87         load_note(format(_("モンスターの種族が多すぎる(%u)!", "Too many (%u) monster races!"), tmp16u));
88         return 21;
89     }
90
91     for (int i = 0; i < tmp16u; i++)
92         rd_lore((MONRACE_IDX)i);
93
94     if (arg_fiddle)
95         load_note(_("モンスターの思い出をロードしました", "Loaded Monster Memory"));
96
97     return 0;
98 }