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
|
/*
* File: monsplace.cc
* Summary: Functions used when placing monsters in the dungeon.
* Written by: Linley Henzell
*
* Modified for Crawl Reference by $Author$ on $Date$
*
* Change History (most recent first):
*
* <1> -/--/-- LRH Created
*/
#ifndef MONPLACE_H
#define MONPLACE_H
#include "enum.h"
#include "dungeon.h"
#include "FixVec.h"
// last updated 13mar2001 {gdl}
/* ***********************************************************************
* called from: acr - lev-pand - monplace - dungeon
*
* Usage:
* mon_type WANDERING_MONSTER, RANDOM_MONSTER, or monster type
* behaviour standard behaviours (BEH_ENSLAVED, etc)
* target MHITYOU, MHITNOT, or monster id
* extra various things like skeleton/zombie types, colours, etc
* summoned monster is summoned?
* px placement x
* py placement y
* level_type LEVEL_DUNGEON, LEVEL_ABYSS, LEVEL_PANDEMONIUM.
* LEVEL_DUNGEON will generate appropriate power monsters
* proximity 0 = no extra restrictions on monster placement
* 1 = try to place the monster near the player
* 2 = don't place the monster near the player
* 3 = place the monster near stairs (regardless of player pos)
* *********************************************************************** */
int mons_place( int mon_type, beh_type behaviour, int target, bool summoned,
int px, int py, int level_type = LEVEL_DUNGEON,
proximity_type proximity = PROX_ANYWHERE, int extra = 250,
int dur = 0, bool permit_bands = false );
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: acr - debug - decks - effects - fight - it_use3 - item_use -
* items - monstuff - mstuff2 - religion - spell - spells -
* spells2 - spells3 - spells4
* *********************************************************************** */
int create_monster( int cls, int dur, beh_type beha, int cr_x, int cr_y,
int hitting, int zsec, bool permit_bands = false,
bool force_place = false, bool force_behaviour = false );
class level_id;
monster_type pick_random_monster(const level_id &place,
int power,
int &lev_mons);
bool player_angers_monster(monsters *mon);
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: misc - monplace - spells3
* *********************************************************************** */
bool empty_surrounds( int emx, int emy, unsigned char spc_wanted, int radius,
bool allow_centre, FixedVector<char, 2>& empty );
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: ability - acr - items - maps - mstuff2 - spell - spells
* *********************************************************************** */
int summon_any_demon( demon_class_type demon_class );
// last update 13mar2001 {gdl}
/* ***********************************************************************
* called from: dungeon monplace
*
* This isn't really meant to be a public function. It is a low level
* monster placement function used by dungeon building routines and
* mons_place(). If you need to put a monster somewhere, use mons_place().
* Summoned creatures can be created with create_monster().
* *********************************************************************** */
bool place_monster( int &id, int mon_type, int power, beh_type behaviour,
int target, bool summoned, int px, int py, bool allow_bands,
proximity_type proximity = PROX_ANYWHERE, int extra = 250,
int dur = 0, unsigned mmask = 0 );
monster_type rand_dragon( dragon_class_type type );
/* ***********************************************************************
* called from: monplace monstuff
* *********************************************************************** */
void mark_interesting_monst(struct monsters* monster,
beh_type behaviour = BEH_SLEEP);
bool grid_compatible(int grid_wanted, int actual_grid, bool generation = false);
bool monster_habitable_grid(int monster_class, int actual_grid,
int flies = -1, bool paralysed = false);
bool monster_habitable_grid(const monsters *m, int actual_grid);
bool monster_can_submerge(int monster_class, int grid);
coord_def find_newmons_square(int mons_class, int x, int y);
void spawn_random_monsters();
#endif // MONPLACE_H
|