1 /* xsoldier, a shoot 'em up game with "not shooting" bonus
2 * Copyright (C) 1997 Yuusuke HASHIMOTO <s945750@educ.info.kanagawa-u.ac.jp>
3 * Copyright (C) 2002 Oohara Yuuma <oohara@libra.interq.or.jp>
4 *
5 * This is a copyleft program. See the file LICENSE for details.
6 */
7 /* $Id: callback.c,v 1.15 2002/04/22 15:20:58 oohara Exp $ */
8
9 #include <X11/Xlib.h>
10 #include <X11/xpm.h>
11
12 #include "image.h"
13 #include "xsoldier.h"
14 #include "common.h"
15 #include "extern.h"
16 /* ShotToPoint */
17 #include "enemyshot.h"
18 /* sdl_draw_rect */
19 #include "graphic.h"
20
21 #include "callback.h"
22
23 /* action */
24 /* do nothing */
NullAct(ObjData * my)25 DelAtt NullAct(ObjData *my)
26 {
27 return NoneDel;
28 }
29
30
31 /* hit */
32 /* nothing can hit me, I am immutable */
NullHit(ObjData * my,ObjData * your)33 DelAtt NullHit(ObjData *my, ObjData *your)
34 {
35 return NoneDel;
36 }
37
38 /* simply die */
NullDelHit(ObjData * my,ObjData * your)39 DelAtt NullDelHit(ObjData *my, ObjData *your)
40 {
41 return NullDel;
42 }
43
44 /* die with explosion */
DeleteHit(ObjData * my,ObjData * your)45 DelAtt DeleteHit(ObjData *my, ObjData *your)
46 {
47 NewBomb(my->X,my->Y);
48 return my->EnemyAtt;
49 }
50
51 /* deal damage, explode if dead */
DamageHit(ObjData * my,ObjData * your)52 DelAtt DamageHit(ObjData *my, ObjData *your)
53 {
54 int temp = your->Attack;
55 if (my->HP < your->Attack)
56 temp = my->HP;
57
58 my->HP -= temp;
59 player->Rec[0].score += temp;
60 if (my->HP <= 0)
61 {
62 player->Rec[0].score -= 1;
63 if (manage->Loop > 2)
64 ShotToPoint(my->X,my->Y,manage->player[0]->Data.X,manage->player[0]->Data.Y,5);
65 NewBomb(my->X,my->Y);
66
67 my->showDamegeTime = 0;
68 return my->EnemyAtt;
69 }
70 else
71 {
72 my->showDamegeTime = 15;
73 return NoneDel;
74 }
75
76 }
77
78 /* same above, but with big explosion */
LargeDamageHit(ObjData * my,ObjData * your)79 DelAtt LargeDamageHit(ObjData *my, ObjData *your)
80 {
81 int temp = your->Attack;
82 if (my->HP < your->Attack)
83 temp = my->HP;
84
85 my->HP -= temp;
86 player->Rec[0].score += temp;
87
88 if (my->HP <= 0)
89 {
90 player->Rec[0].score -= 1;
91 if (manage->Loop > 2)
92 ShotToPoint(my->X,my->Y,manage->player[0]->Data.X,manage->player[0]->Data.Y,5);
93 NewLargeBomb(my->X,my->Y);
94
95 my->showDamegeTime = 0;
96 return my->EnemyAtt;
97 }
98 else
99 {
100 my->showDamegeTime = 15;
101 return NoneDel;
102 }
103
104 }
105
106
107 /* display */
NullReal(ObjData * my,GrpData * grp)108 void NullReal(ObjData *my, GrpData *grp)
109 {
110 return;
111 }
112
113 /* rectangle-drawing function for collision-detection debug */
DrawRec(ObjData * my,GrpData * grp)114 void DrawRec(ObjData *my, GrpData *grp)
115 {
116 #ifdef HAVE_LIBSDL
117 /* use double-standard here to keep the 10 pixel boundary */
118 sdl_draw_rect(my->X-my->HarfW + 10, my->Y-my->HarfH + 10,
119 my->Width, my->Height);
120
121 #else /* not HAVE_LIBSDL */
122 /*
123 XFillRectangle(dpy,WorkPixmap,FillGC,my->X-my->HarfW,my->Y-my->HarfH,my->Width,my->Height);
124 */
125 XDrawRectangle(dpy,WorkPixmap,FillGC,my->X-my->HarfW,my->Y-my->HarfH,my->Width,my->Height);
126 #endif /* not HAVE_LIBSDL */
127 return;
128 }
129
130 /* display pixmap */
DrawImage(ObjData * my,GrpData * grp)131 void DrawImage(ObjData *my, GrpData *grp)
132 {
133 PutImage(grp->image[my->image],my->X - grp->HarfW, my->Y - grp->HarfH);
134
135 return;
136 }
137