Lines Matching defs:reg

68 inside_region(reg, x, y)
69 NhRegion *reg;
74 if (reg == NULL || !inside_rect(&(reg->bounding_box), x, y))
76 for (i = 0; i < reg->nrects; i++)
77 if (inside_rect(&(reg->rects[i]), x, y))
91 NhRegion *reg;
93 reg = (NhRegion *) alloc(sizeof (NhRegion));
96 reg->bounding_box = rects[0];
98 reg->bounding_box.lx = 99;
99 reg->bounding_box.ly = 99;
100 reg->bounding_box.hx = 0;
101 reg->bounding_box.hy = 0;
103 reg->nrects = nrect;
104 reg->rects = nrect > 0 ? (NhRect *)alloc((sizeof (NhRect)) * nrect) : NULL;
106 if (rects[i].lx < reg->bounding_box.lx)
107 reg->bounding_box.lx = rects[i].lx;
108 if (rects[i].ly < reg->bounding_box.ly)
109 reg->bounding_box.ly = rects[i].ly;
110 if (rects[i].hx > reg->bounding_box.hx)
111 reg->bounding_box.hx = rects[i].hx;
112 if (rects[i].hy > reg->bounding_box.hy)
113 reg->bounding_box.hy = rects[i].hy;
114 reg->rects[i] = rects[i];
116 reg->ttl = -1; /* Defaults */
117 reg->attach_2_u = FALSE;
118 reg->attach_2_m = 0;
119 /* reg->attach_2_o = NULL; */
120 reg->enter_msg = NULL;
121 reg->leave_msg = NULL;
122 reg->expire_f = NO_CALLBACK;
123 reg->enter_f = NO_CALLBACK;
124 reg->can_enter_f = NO_CALLBACK;
125 reg->leave_f = NO_CALLBACK;
126 reg->can_leave_f = NO_CALLBACK;
127 reg->inside_f = NO_CALLBACK;
128 clear_hero_inside(reg);
129 clear_heros_fault(reg);
130 reg->n_monst = 0;
131 reg->max_monst = 0;
132 reg->monsters = NULL;
133 reg->arg = NULL;
134 return reg;
141 add_rect_to_reg(reg, rect)
142 NhRegion *reg;
147 tmp_rect = (NhRect *) alloc(sizeof (NhRect) * (reg->nrects + 1));
148 if (reg->nrects > 0) {
149 (void) memcpy((genericptr_t) tmp_rect, (genericptr_t) reg->rects,
150 (sizeof (NhRect) * reg->nrects));
151 free((genericptr_t) reg->rects);
153 tmp_rect[reg->nrects] = *rect;
154 reg->nrects++;
155 reg->rects = tmp_rect;
157 if (reg->bounding_box.lx > rect->lx)
158 reg->bounding_box.lx = rect->lx;
159 if (reg->bounding_box.ly > rect->ly)
160 reg->bounding_box.ly = rect->ly;
161 if (reg->bounding_box.hx < rect->hx)
162 reg->bounding_box.hx = rect->hx;
163 if (reg->bounding_box.hy < rect->hy)
164 reg->bounding_box.hy = rect->hy;
171 add_mon_to_reg(reg, mon)
172 NhRegion *reg;
178 if (reg->max_monst <= reg->n_monst) {
180 alloc(sizeof (unsigned) * (reg->max_monst + MONST_INC));
181 if (reg->max_monst > 0) {
182 for (i = 0; i < reg->max_monst; i++)
183 tmp_m[i] = reg->monsters[i];
184 free((genericptr_t) reg->monsters);
186 reg->monsters = tmp_m;
187 reg->max_monst += MONST_INC;
189 reg->monsters[reg->n_monst++] = mon->m_id;
196 remove_mon_from_reg(reg, mon)
197 NhRegion *reg;
202 for (i = 0; i < reg->n_monst; i++)
203 if (reg->monsters[i] == mon->m_id) {
204 reg->n_monst--;
205 reg->monsters[i] = reg->monsters[reg->n_monst];
216 mon_in_region(reg, mon)
217 NhRegion *reg;
222 for (i = 0; i < reg->n_monst; i++)
223 if (reg->monsters[i] == mon->m_id)
235 clone_region(reg)
236 NhRegion *reg;
240 ret_reg = create_region(reg->rects, reg->nrects);
241 ret_reg->ttl = reg->ttl;
242 ret_reg->attach_2_u = reg->attach_2_u;
243 ret_reg->attach_2_m = reg->attach_2_m;
244 /* ret_reg->attach_2_o = reg->attach_2_o; */
245 ret_reg->expire_f = reg->expire_f;
246 ret_reg->enter_f = reg->enter_f;
247 ret_reg->can_enter_f = reg->can_enter_f;
248 ret_reg->leave_f = reg->leave_f;
249 ret_reg->can_leave_f = reg->can_leave_f;
250 ret_reg->player_flags = reg->player_flags; /* set/clear_hero_inside,&c*/
251 ret_reg->n_monst = reg->n_monst;
252 if (reg->n_monst > 0) {
254 alloc((sizeof (unsigned)) * reg->n_monst);
255 (void) memcpy((genericptr_t) ret_reg->monsters, (genericptr_t) reg->monsters,
256 sizeof (unsigned) * reg->n_monst);
268 free_region(reg)
269 NhRegion *reg;
271 if (reg) {
272 if (reg->rects)
273 free((genericptr_t) reg->rects);
274 if (reg->monsters)
275 free((genericptr_t) reg->monsters);
276 free((genericptr_t) reg);
285 add_region(reg)
286 NhRegion *reg;
301 regions[n_regions] = reg;
304 for (i = reg->bounding_box.lx; i <= reg->bounding_box.hx; i++)
305 for (j = reg->bounding_box.ly; j <= reg->bounding_box.hy; j++) {
309 if (MON_AT(i, j) && inside_region(reg, i, j))
310 add_mon_to_reg(reg, level.monsters[i][j]);
311 if (reg->visible && cansee(i, j))
315 if (inside_region(reg, u.ux, u.uy))
316 set_hero_inside(reg);
318 clear_hero_inside(reg);
325 remove_region(reg)
326 NhRegion *reg;
331 if (regions[i] == reg)
337 if (reg->visible)
338 for (x = reg->bounding_box.lx; x <= reg->bounding_box.hx; x++)
339 for (y = reg->bounding_box.ly; y <= reg->bounding_box.hy; y++)
340 if (isok(x,y) && inside_region(reg, x, y) && cansee(x, y))
343 free_region(reg);
604 show_region(reg, x, y)
605 NhRegion *reg;
608 show_glyph(x, y, reg->glyph);
754 reset_region_mids(reg)
755 NhRegion *reg;
757 int i = 0, n = reg->n_monst;
758 unsigned *mid_list = reg->monsters;
768 reg->n_monst = n;
789 NhRegion *reg = create_region((NhRect *) 0, 0);
791 reg->enter_msg = msg_enter;
792 reg->leave_msg = msg_leave;
797 add_rect_to_reg(reg, &tmprect);
798 reg->ttl = -1;
799 return reg;
880 NhRegion *reg;
883 reg = (NhRegion *) p1;
884 damage = (int) reg->arg;
889 reg->arg = (genericptr_t) damage;
890 reg->ttl = 2; /* Here's the trick : reset ttl */
901 NhRegion *reg;
905 reg = (NhRegion *) p1;
906 dam = (int) reg->arg;
937 if (heros_fault(reg))