summaryrefslogtreecommitdiff
path: root/src/map/mob.hpp
blob: 47da0952d77185a3935686f28b586140b40b117c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#pragma once
//    mob.hpp - Really scary code.
//
//    Copyright © ????-2004 Athena Dev Teams
//    Copyright © 2004-2011 The Mana World Development Team
//    Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
//
//    This file is part of The Mana World (Athena server)
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.

#include "mob.t.hpp"

#include "fwd.hpp"

#include "../generic/enum.hpp"
#include "../generic/random.t.hpp"

#include "../net/timer.t.hpp"

#include "battle.t.hpp"
#include "../mmo/clif.t.hpp"
#include "map.hpp"
#include "../mmo/skill.t.hpp"


namespace tmwa
{
namespace map
{
#define ENGLISH_NAME stringish<MobName>("--en--"_s)
#define JAPANESE_NAME stringish<MobName>("--ja--"_s)
#define MOB_THIS_MAP stringish<MapName>("this"_s)

#define MaxDrops 8
#define MinMobID 1001
#define MaxMobID 2000

struct mob_skill
{
    MobSkillState state;
    SkillID skill_id;
    short skill_lv;
    short permillage;
    interval_t casttime, delay;
    bool cancel;
    MobSkillCondition cond1;
    int cond2i;
    MobSkillTarget target;
    int val[5];
    short emotion;
};

struct mob_db_
{
    MobName name, jname;
    int lv;
    int max_hp, max_sp;
    int base_exp, job_exp;
    int atk1, atk2;
    int def, mdef;
    earray<int, ATTR, ATTR::COUNT> attrs;
    int range, range2, range3;
    // always 1
    int size;
    Race race;
    LevelElement element;
    MobMode mode;
    interval_t speed, adelay, amotion, dmotion;
    int mutations_nr, mutation_power;
    struct
    {
        ItemNameId nameid;
        random_::Fixed<int, 10000> p;
    } dropitem[MaxDrops];
    short hair, hair_color, weapon;
    ItemNameId shield, head_top, head_mid, head_buttom;
    short option, clothes_color; // [Valaris]
    int equip;                 // [Valaris]
    std::vector<struct mob_skill> skills;
};
struct mob_db_& get_mob_db(Species);

Species mobdb_searchname(MobName str);
Species mobdb_checkid(Species id);
BlockId mob_once_spawn(dumb_ptr<map_session_data> sd,
        MapName mapname, int x, int y,
        MobName mobname, Species class_, int amount,
        NpcEvent event);
BlockId mob_once_spawn_area(dumb_ptr<map_session_data> sd,
        MapName mapname, int x0, int y0, int x1, int y1,
        MobName mobname, Species class_, int amount,
        NpcEvent event);

int mob_target(dumb_ptr<mob_data> md, dumb_ptr<block_list> bl, int dist);
int mob_aggravate(dumb_ptr<mob_data> md, dumb_ptr<block_list> bl);
int mob_stop_walking(dumb_ptr<mob_data> md, int type);
int mob_stopattack(dumb_ptr<mob_data>);
int mob_spawn(BlockId);
int mob_damage(dumb_ptr<block_list>, dumb_ptr<mob_data>, int, int);
int mob_heal(dumb_ptr<mob_data>, int);
short mob_get_hair(Species);
short mob_get_hair_color(Species);
short mob_get_weapon(Species);
ItemNameId mob_get_shield(Species);
ItemNameId mob_get_head_top(Species);
ItemNameId mob_get_head_mid(Species);
ItemNameId mob_get_head_buttom(Species);
short mob_get_clothes_color(Species);  //player mob dye [Valaris]
int mob_get_equip(Species);       // mob equip [Valaris]

bool mob_readdb(ZString filename);
bool mob_readskilldb(ZString filename);
void do_init_mob2(void);

int mob_delete(dumb_ptr<mob_data> md);
int mob_catch_delete(dumb_ptr<mob_data> md, BeingRemoveWhy type);
void mob_timer_delete(TimerData *, tick_t, BlockId);

int mob_deleteslave(dumb_ptr<mob_data> md);

int mob_counttargeted(dumb_ptr<mob_data> md, dumb_ptr<block_list> src,
        ATK target_lv);

int mob_warp(dumb_ptr<mob_data> md, Option<Borrowed<map_local>> m, int x, int y, BeingRemoveWhy type);

int mobskill_use(dumb_ptr<mob_data> md, tick_t tick, MobSkillCondition event);
int mobskill_event(dumb_ptr<mob_data> md, BF flag);
void mobskill_castend_id(TimerData *tid, tick_t tick, BlockId id);
void mobskill_castend_pos(TimerData *tid, tick_t tick, BlockId id);
int mob_summonslave(dumb_ptr<mob_data> md2, int *value, int amount, int flag);

void mob_reload(void);
} // namespace map
} // namespace tmwa