1 /* drawing.c */
2
3 # include <stdio.h>
4 # include <stdlib.h>
5 # include "SDL2/SDL.h"
6 # include "SDL2/SDL_image.h"
7 # include "SDL2/SDL_mixer.h"
8
9 # include "structs.h"
10
drawscreen(SDL_Renderer * renderer,uint stagedata[][22][32],SDL_Texture * tiles,uint room[],uint counter[],uint changeflag,Mix_Chunk * fx[],uint changetiles)11 void drawscreen (SDL_Renderer *renderer,uint stagedata[][22][32],SDL_Texture *tiles,uint room[],uint counter[],uint changeflag,Mix_Chunk *fx[],uint changetiles) {
12
13 int coordx = 0;
14 int coordy = 0;
15 SDL_Rect srctiles = {0,0,8,8};
16 SDL_Rect destiles = {0,0,8,8};
17 uint data = 0;
18
19 for (coordy=0; coordy<=21; coordy++) {
20 for (coordx=0; coordx<=31; coordx++) {
21 data = stagedata[room[0]][coordy][coordx];
22 if ((data > 0) && (data != 99)) {
23 destiles.x = coordx * 8;
24 destiles.y = coordy * 8;
25 if (data < 200) {
26 srctiles.w = 8;
27 srctiles.h = 8;
28 if (data < 101) {
29 srctiles.y = 0;
30 if (data == 84) /* Cross brightness */
31 srctiles.x = (data - 1) * 8 + (counter[0]/8 * 8);
32 else
33 srctiles.x = (data - 1) * 8;
34 }
35 else {
36 if (data == 154) {
37 srctiles.x=600 + ((counter[0] / 8) * 16);
38 srctiles.y=0;
39 srctiles.w=16;
40 srctiles.h=24;
41 }
42 else {
43 srctiles.y = 8;
44 srctiles.x = (data - 101) * 8;
45 }
46 }
47 }
48 if ((data > 199) && (data < 300)) {
49 srctiles.x = (data - 201) * 48;
50 srctiles.y = 16;
51 srctiles.w = 48;
52 srctiles.h = 48;
53 }
54 if ((data > 299) && (data < 399)) {
55 srctiles.x = 96 + ((data - 301) * 8);
56 srctiles.y = 16;
57 srctiles.w = 8;
58 srctiles.h = 8;
59 /* Door movement */
60 if ((room[0] == 7) && ((counter[1] > 59) && (counter[1] < 71))) {
61 if ((data == 347) || (data == 348) || (data == 349) || (data == 350)) {
62 destiles.x += 2;
63 if ((data == 350) && (counter[1] == 70))
64 Mix_PlayChannel(-1, fx[3], 0); /* Sound of door */
65 }
66 }
67 }
68 /* Hearts */
69 if ((data > 399) && (data < 405)) {
70 srctiles.x = 96 + ((data - 401) * 8) + (32 * (counter[0] / 15));
71 srctiles.y = 24;
72 srctiles.w = 8;
73 srctiles.h = 8;
74 }
75 /* Crosses */
76 if ((data > 408) && (data < 429)) {
77 srctiles.x = 96 + ((data - 401) * 8) + (32 * (counter[1] / 23));
78 srctiles.y = 24;
79 srctiles.w = 8;
80 srctiles.h = 8;
81 }
82
83 if ((data > 499) && (data < 599)) {
84 srctiles.x = 96 + ((data - 501) * 8);
85 srctiles.y = 32;
86 srctiles.w = 8;
87 srctiles.h = 8;
88 }
89 if ((data > 599) && (data < 650)) {
90 srctiles.x = 96 + ((data - 601) * 8);
91 srctiles.y = 56;
92 srctiles.w = 8;
93 srctiles.h = 8;
94 }
95 if (data == 650) { /* Cup */
96 srctiles.x = 584;
97 srctiles.y = 87;
98 srctiles.w = 16;
99 srctiles.h = 16;
100 }
101 destiles.w = srctiles.w;
102 destiles.h = srctiles.h;
103 if ((data == 152) || (data == 137) || (data == 136)) {
104 if (changeflag == 0) {
105 srctiles.y = srctiles.y + (changetiles * 120);
106 SDL_RenderCopy(renderer,tiles,&srctiles,&destiles);
107 }
108 }
109 else {
110 srctiles.y = srctiles.y + (changetiles * 120);
111 SDL_RenderCopy(renderer,tiles,&srctiles,&destiles);
112 }
113 }
114 }
115 }
116
117 }
118
statusbar(SDL_Renderer * renderer,SDL_Texture * tiles,int room[],int lifes,int crosses,SDL_Texture * fonts,uint changetiles)119 void statusbar (SDL_Renderer *renderer,SDL_Texture *tiles,int room[],int lifes,int crosses,SDL_Texture *fonts,uint changetiles) {
120
121 SDL_Rect srcbar = {448,104,13,12};
122 SDL_Rect desbar = {0,177,13,12};
123 SDL_Rect srcnumbers = {0,460,10,10};
124 SDL_Rect desnumbers = {18,178,10,10};
125 SDL_Rect srctext = {0,0,140,20};
126 SDL_Rect destext = {115,176,136,18};
127 int i = 0;
128
129 /* Show heart and crosses sprites */
130 if (changetiles == 1)
131 srcbar.y = 224;
132 SDL_RenderCopy(renderer,tiles,&srcbar,&desbar);
133 srcbar.x = 461;
134 srcbar.w = 12;
135 desbar.x = 32;
136 SDL_RenderCopy(renderer,tiles,&srcbar,&desbar);
137
138 for (i=0; i<=2; i++) {
139 switch (i) {
140 case 0: srcnumbers.x = lifes * 10;
141 SDL_RenderCopy(renderer,fonts,&srcnumbers,&desnumbers);
142 break;
143 case 1: if (crosses < 10) {
144 desnumbers.x = 50;
145 srcnumbers.x = crosses * 10;
146 SDL_RenderCopy(renderer,fonts,&srcnumbers,&desnumbers);
147 }
148 else {
149 desnumbers.x = 50;
150 srcnumbers.x = 10;
151 SDL_RenderCopy(renderer,fonts,&srcnumbers,&desnumbers);
152 desnumbers.x = 55;
153 srcnumbers.x = (crosses - 10) * 10;
154 SDL_RenderCopy(renderer,fonts,&srcnumbers,&desnumbers);
155 }
156 break;
157 case 2: if ((room[0] > 0) && (room[0] < 4)) {
158 srctext.y = (room[0] - 1) * 20;
159 SDL_RenderCopy(renderer,fonts,&srctext,&destext);
160 }
161 if (room[0] > 4) {
162 srctext.y = (room[0] - 2) * 20;
163 SDL_RenderCopy(renderer,fonts,&srctext,&destext);
164 }
165 break;
166 }
167
168 }
169
170 }
171
drawrope(struct enem enemies,SDL_Renderer * renderer,SDL_Texture * tiles,uint changetiles)172 void drawrope (struct enem enemies,SDL_Renderer *renderer,SDL_Texture *tiles,uint changetiles) {
173
174 int i = 0;
175 int blocks = 0;
176 int j = 0;
177 SDL_Rect srctile = {424,8,16,8};
178 SDL_Rect destile = {0,0,16,8};
179
180 for (i=2; i<6; i++) {
181 blocks = (enemies.y[i] - (enemies.limleft[i] - 8)) / 8;
182 for (j=0; j<=blocks; j++) {
183 srctile.y = 8 + (changetiles * 120);
184 destile.x = enemies.x[i];
185 destile.y = (enemies.limleft[i] - 8) + (8 * j);
186 SDL_RenderCopy(renderer,tiles,&srctile,&destile);
187 }
188 }
189
190 }
191
drawshoots(float proyec[],SDL_Texture * tiles,SDL_Renderer * renderer,struct enem * enemies,uint changetiles)192 void drawshoots (float proyec[],SDL_Texture *tiles,SDL_Renderer *renderer,struct enem *enemies,uint changetiles) {
193 /* Shoots from skeletons & gargoyles */
194
195 SDL_Rect srctile = {656,24,16,8};
196 SDL_Rect destile = {0,0,0,0};
197 int i = 0;
198 int n = 0;
199
200 srctile.y = 24 + (changetiles * 120);
201
202 for (n=0; n<=4; n+=2) {
203 if (proyec[n] > 0) {
204 i = proyec[n+1];
205 if (enemies->type[i] == 15) {
206 srctile.h = 16;
207 srctile.x = 640 - (16 * enemies->direction[i]);
208 }
209
210 /* Move shoot */
211 if (enemies->direction[i] == 1) {
212 if (proyec[n] > enemies->limleft[i])
213 proyec[n] -= 2.5;
214 else {
215 enemies->fire[i] = 0;
216 enemies->speed[i] = 0;
217 proyec[n] = 0;
218 }
219 }
220 else {
221 if (proyec[n] < enemies->limright[i])
222 proyec[n] += 2.5;
223 else {
224 enemies->fire[i] = 0;
225 enemies->speed[i] = 0;
226 proyec[n] = 0;
227 }
228 }
229 destile.w = srctile.w;
230 destile.h = srctile.h;
231
232 /* Draw shoot */
233 switch (enemies->direction[i]) {
234 case 0: if ((proyec[n] < (enemies->limright[i] - 8)) && (proyec[n] != 0)) {
235 destile.x = proyec[n];
236 destile.y = enemies->y[i] + 8;
237 SDL_RenderCopy(renderer,tiles,&srctile,&destile);
238 }
239 break;
240 case 1: if (proyec[n] > (enemies->limleft[i] + 8)) {
241 destile.x = proyec[n];
242 destile.y = enemies->y[i] + 8;
243 SDL_RenderCopy(renderer,tiles,&srctile,&destile);
244 }
245 break;
246 }
247 }
248
249 }
250
251 }
252
showparchment(SDL_Renderer * renderer,uint * parchment)253 void showparchment (SDL_Renderer *renderer,uint *parchment) {
254
255 SDL_Texture *yparchment = NULL;
256
257 switch (*parchment) {
258 case 3: yparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/parchment1.png");
259 break;
260 case 8: yparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/parchment2.png");
261 break;
262 case 12: yparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/parchment3.png");
263 break;
264 case 14: yparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/parchment4.png");
265 break;
266 case 16: yparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/parchment5.png");
267 break;
268 case 21: yparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/parchment6.png");
269 break;
270
271 }
272
273 SDL_RenderCopy(renderer,yparchment,NULL,NULL);
274 SDL_DestroyTexture(yparchment);
275
276 }
277
redparchment(SDL_Renderer * renderer,struct hero * jean)278 void redparchment (SDL_Renderer *renderer,struct hero *jean) {
279
280 SDL_Texture *rparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/redparch.png");
281 SDL_RenderCopy(renderer,rparchment,NULL,NULL);
282 SDL_DestroyTexture(rparchment);
283
284 jean->flags[6] = 4;
285
286 }
287
blueparchment(SDL_Renderer * renderer,struct hero * jean)288 void blueparchment (SDL_Renderer *renderer,struct hero *jean) {
289
290 SDL_Texture *bparchment = IMG_LoadTexture(renderer, DATADIR "/graphics/blueparch.png");
291 SDL_RenderCopy(renderer,bparchment,NULL,NULL);
292 SDL_DestroyTexture(bparchment);
293
294 }