summaryrefslogtreecommitdiffstats
path: root/warp/object.c
blob: a6b9f6a74b054bbc4b7d94741244881d7af699f4 (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
/* Header: object.c,v 7.0 86/10/08 15:12:55 lwall Exp */

/* Log:	object.c,v
 * Revision 7.0  86/10/08  15:12:55  lwall
 * Split into separate files.  Added amoebas and pirates.
 *
 */

#include "EXTERN.h"
#include "warp.h"
#include "INTERN.h"
#include "object.h"

void
object_init(void)
{
    ;
}

OBJECT *
make_object(char typ, char img, int px, int py, int vx, int vy, long energ,
    long mas, OBJECT *where)
{
    OBJECT *obj;

    if (free_root.next == &free_root)
#ifndef lint
	obj = (OBJECT *) malloc(sizeof root);
#else
	obj = Null(OBJECT*);
#endif
    else {
	obj = free_root.next;
	free_root.next = obj->next;
	obj->next->prev = &free_root;
    }
    obj->type = typ;
    obj->image = img;
    obj->next = where;
    obj->prev = where->prev;
    where->prev = obj;
    obj->prev->next = obj;
    obj->velx = vx;
    obj->vely = vy;
    obj->contend = 0;
    obj->strategy = 0;
    obj->flags = 0;
    obj->posx = px;
    obj->posy = py;
    if (typ != Torp && typ != Web) {
	occupant[py][px] = obj;
    }
    obj->energy = energ;
    obj->mass = mas;
    return(obj);
}

void
unmake_object(OBJECT *curobj)
{
    curobj->prev->next = curobj->next;
    curobj->next->prev = curobj->prev;
    if (curobj == movers) {
	movers = curobj->next;
    }
    free_object(curobj);
}

void
free_object(OBJECT *curobj)
{
    curobj->next = free_root.next;
    curobj->prev = &free_root;
    free_root.next->prev = curobj;
    free_root.next = curobj;
}