Mercurial > repos > genjam1
annotate src/creep.c @ 23:330e58fb01aa
simple object selection
author | William Morgan <bill@mrgn.org> |
---|---|
date | Mon, 13 Jan 2014 23:05:30 -0800 |
parents | 51a0972fcf76 |
children |
rev | line source |
---|---|
9 | 1 #include <genesis.h> |
2 #include "creep.h" | |
20
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
19
diff
changeset
|
3 #include "map.h" |
9 | 4 |
5 creep creeps[MAX_CREEPS]; | |
6 u16 cur_creeps; | |
11
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
7 |
14
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
8 const s16 speeds[NUM_SPECIES] = { 2 }; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
9 |
9 | 10 u16 spawn_creep(u8 species, s16 x, s16 y) |
11 { | |
12 u16 index; | |
13 for (index = 0; index < MAX_SPRITE; index++) | |
14 { | |
13
d118fe8fb1db
Make cursor and creeps play nice
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
15 if (spriteDefCache[index].posx == -0x80) { |
9 | 16 break; |
17 } | |
18 } | |
19 if (index > 0) { | |
20 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), spriteDefCache[0].link); | |
21 spriteDefCache[0].link = index; | |
22 } else { | |
23 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), 0); | |
24 } | |
25 creeps[cur_creeps].index = index; | |
26 creeps[cur_creeps].health = 1000; | |
27 creeps[cur_creeps].species = species; | |
28 creeps[cur_creeps].direction = 0; | |
14
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
29 creeps[cur_creeps].targetx = x; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
30 creeps[cur_creeps].targety = y; |
9 | 31 return cur_creeps++; |
32 } | |
11
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
33 |
14
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
34 void update_creeps(void) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
35 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
36 s16 i, disty, distx, mdist; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
37 for (i = cur_creeps-1; i >= 0; --i) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
38 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
39 creep *cur = creeps + i; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
40 SpriteDef * sprite = spriteDefCache + cur->index; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
41 distx = sprite->posx - cur->targetx; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
42 if (distx < 0) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
43 distx = -distx; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
44 disty = sprite->posy - cur->targety; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
45 if (disty < 0) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
46 disty = -disty; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
47 mdist = distx > disty ? distx : disty; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
48 if (mdist < speeds[cur->species]) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
49 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
50 s16 dindex = sprite->posx / 16 + (sprite->posy / 16) * 20; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
51 if (distances[dindex]) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
52 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
53 u16 bestdist = 0xFFFF; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
54 s16 bestindex = 0xFFFF,diff,next; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
55 if (sprite->posx > 8 && distances[dindex-1] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
56 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
57 bestindex = dindex-1; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
58 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
59 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
60 if (sprite->posx < (320-16) && distances[dindex+1] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
61 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
62 bestindex = dindex+1; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
63 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
64 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
65 if (sprite->posy > 8 && distances[dindex-20] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
66 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
67 bestindex = dindex-20; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
68 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
69 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
70 if (sprite->posy < (224-16) && distances[dindex+20] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
71 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
72 bestindex = dindex+20; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
73 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
74 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
75 diff = bestindex-dindex; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
76 next = bestindex + diff; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
77 while (next >= 0 && next < 20*14 && distances[next] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
78 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
79 bestindex = next; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
80 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
81 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
82 cur->targetx = (bestindex % 20) * 16 + 4; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
83 cur->targety = (bestindex / 20) * 16 + 4; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
84 } else { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
85 //creep is at the goal |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
86 VDP_setSpritePosition(cur->index, -0x80, -0x80); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
87 cur_creeps--; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
88 if (i != cur_creeps) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
89 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
90 memcpy(cur, creeps+cur_creeps, sizeof(creep)); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
91 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
92 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
93 } else { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
94 if (distx > disty) { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
95 VDP_setSpritePosition(cur->index, |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
96 sprite->posx + (sprite->posx > cur->targetx ? -speeds[cur->species] : speeds[cur->species]), |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
97 sprite->posy); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
98 } else { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
99 VDP_setSpritePosition(cur->index, |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
100 sprite->posx, |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
101 sprite->posy + (sprite->posy > cur->targety ? -speeds[cur->species] : speeds[cur->species])); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
102 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
103 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
104 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
105 } |