annotate src/creep.c @ 25:2f56bc29a3d6 default tip

Beefed up the cursor a bit. Cleaned up my unused build order array.
author William Morgan <bill@mrgn.org>
date Tue, 14 Jan 2014 00:06:22 -0800
parents 51a0972fcf76
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <genesis.h>
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 creep creeps[MAX_CREEPS];
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 u16 spawn_creep(u8 species, s16 x, s16 y)
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 {
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 u16 index;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 for (index = 0; index < MAX_SPRITE; index++)
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 break;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 }
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 }
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 if (index > 0) {
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), spriteDefCache[0].link);
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 spriteDefCache[0].link = index;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 } else {
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), 0);
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 }
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 creeps[cur_creeps].index = index;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 creeps[cur_creeps].health = 1000;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 creeps[cur_creeps].species = species;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 return cur_creeps++;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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 }