OSDN Git Service

原作のv1.5.1へのバージョンアップに対応する修正
[starfighter-jp/starfighter-jp.git] / src / resources.cpp
1 /*
2 Copyright (C) 2003 Parallel Realities
3 Copyright (C) 2011, 2012, 2013 Guus Sliepen
4 Copyright (C) 2015, 2016 onpon4 <onpon4@riseup.net>
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 3
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "Starfighter.h"
21
22 void loadBackground(const char *filename)
23 {
24         if (gfx_background != NULL)
25         {
26                 SDL_FreeSurface(gfx_background);
27                 gfx_background = NULL;
28         }
29         gfx_background = gfx_loadImage(filename);
30         SDL_SetColorKey(gfx_background, 0, 0);
31 }
32
33 void loadGameGraphics()
34 {
35         Uint32 *p32;
36         Uint16 *p16;
37         Uint8 *p8;
38
39         gfx_free();
40
41         // Faces
42         gfx_faceSprites[FS_CHRIS] = gfx_loadImage("gfx/face_chris.png");
43         gfx_faceSprites[FS_SID] = gfx_loadImage("gfx/face_sid.png");
44         gfx_faceSprites[FS_KRASS] = gfx_loadImage("gfx/face_krass.png");
45         gfx_faceSprites[FS_PHOEBE] = gfx_loadImage("gfx/face_phoebe.png");
46         gfx_faceSprites[FS_URSULA] = gfx_loadImage("gfx/face_ursula.png");
47         gfx_faceSprites[FS_KLINE] = gfx_loadImage("gfx/face_kline.png");
48         gfx_faceSprites[FS_CREW] = gfx_loadImage("gfx/face_crew.png");
49
50         // Ships
51         gfx_shipSprites[SS_FIREFLY] = gfx_loadImage("gfx/firefly1.png");
52         gfx_shipSprites[SS_FIREFLY_L] = gfx_loadImage("gfx/firefly2.png");
53         gfx_shipSprites[SS_SID] = gfx_loadImage("gfx/sid1.png");
54         gfx_shipSprites[SS_SID_L] = gfx_loadImage("gfx/sid2.png");
55         gfx_shipSprites[SS_FRIEND] = gfx_loadImage("gfx/wingmate1.png");
56         gfx_shipSprites[SS_FRIEND_L] = gfx_loadImage("gfx/wingmate2.png");
57         gfx_shipSprites[SS_GOODTRANSPORT] = gfx_loadImage("gfx/goodTrans1.png");
58         gfx_shipSprites[SS_GOODTRANSPORT_L] = gfx_loadImage("gfx/goodTrans2.png");
59         gfx_shipSprites[SS_REBELCARRIER] = gfx_loadImage("gfx/rebelCarrier1.png");
60         gfx_shipSprites[SS_REBELCARRIER_L] = gfx_loadImage("gfx/rebelCarrier2.png");
61         gfx_shipSprites[SS_DUALFIGHTER] = gfx_loadImage("gfx/dualFighter1.png");
62         gfx_shipSprites[SS_DUALFIGHTER_L] = gfx_loadImage("gfx/dualFighter2.png");
63         gfx_shipSprites[SS_MISSILEBOAT] = gfx_loadImage("gfx/missileBoat1.png");
64         gfx_shipSprites[SS_MISSILEBOAT_L] = gfx_loadImage("gfx/missileBoat2.png");
65         gfx_shipSprites[SS_PROTOFIGHTER] = gfx_loadImage("gfx/eliteFighter1.png");
66         gfx_shipSprites[SS_PROTOFIGHTER_L] = gfx_loadImage("gfx/eliteFighter2.png");
67         gfx_shipSprites[SS_AIMFIGHTER] = gfx_loadImage("gfx/aimFighter1.png");
68         gfx_shipSprites[SS_AIMFIGHTER_L] = gfx_loadImage("gfx/aimFighter2.png");
69         gfx_shipSprites[SS_DRONE] = gfx_loadImage("gfx/drone1.png");
70         gfx_shipSprites[SS_DRONE_L] = gfx_loadImage("gfx/drone2.png");
71         gfx_shipSprites[SS_MINER] = gfx_loadImage("gfx/miner1.png");
72         gfx_shipSprites[SS_MINER_L] = gfx_loadImage("gfx/miner2.png");
73         gfx_shipSprites[SS_ESCORT] = gfx_loadImage("gfx/escort1.png");
74         gfx_shipSprites[SS_ESCORT_L] = gfx_loadImage("gfx/escort2.png");
75         gfx_shipSprites[SS_MOBILE_RAY] = gfx_loadImage("gfx/mobileCannon1.png");
76         gfx_shipSprites[SS_MOBILE_RAY_L] = gfx_loadImage("gfx/mobileCannon2.png");
77         gfx_shipSprites[SS_TRANSPORTSHIP] = gfx_loadImage("gfx/transport1.png");
78         gfx_shipSprites[SS_TRANSPORTSHIP_L] = gfx_loadImage("gfx/transport2.png");
79         gfx_shipSprites[SS_CARGOSHIP] = gfx_loadImage("gfx/tug1.png");
80         gfx_shipSprites[SS_CARGOSHIP_L] = gfx_loadImage("gfx/tug2.png");
81         gfx_shipSprites[SS_SLAVETRANSPORT] = gfx_loadImage("gfx/slaveTrans1.png");
82         gfx_shipSprites[SS_SLAVETRANSPORT_L] = gfx_loadImage("gfx/slaveTrans2.png");
83         gfx_shipSprites[SS_BARRIER] = gfx_loadImage("gfx/barrier.png");
84         gfx_shipSprites[SS_MOBILESHIELD] = gfx_loadImage("gfx/mobileShield1.png");
85         gfx_shipSprites[SS_MOBILESHIELD_L] = gfx_loadImage("gfx/mobileShield2.png");
86         gfx_shipSprites[SS_ASTEROID] = gfx_loadImage("gfx/asteroid1.png");
87         gfx_shipSprites[SS_ASTEROID_SMALL] = gfx_loadImage("gfx/asteroid2.png");
88         gfx_shipSprites[SS_ASTEROID_SMALL_L] = gfx_loadImage("gfx/asteroid3.png");
89         gfx_shipSprites[SS_CLOAKFIGHTER] = gfx_loadImage("gfx/cloakShip1.png");
90         gfx_shipSprites[SS_CLOAKFIGHTER_L] = gfx_loadImage("gfx/cloakShip2.png");
91         gfx_shipSprites[SS_EVILURSULA] = gfx_loadImage("gfx/evilUrsula1.png");
92         gfx_shipSprites[SS_EVILURSULA_L] = gfx_loadImage("gfx/evilUrsula2.png");
93         gfx_shipSprites[SS_KRASS] = gfx_loadImage("gfx/merc1.png");
94         gfx_shipSprites[SS_KRASS_L] = gfx_loadImage("gfx/merc2.png");
95         gfx_shipSprites[SS_FRIGATE] = gfx_loadImage("gfx/frigateBody1.png");
96         gfx_shipSprites[SS_FRIGATE_L] = gfx_loadImage("gfx/frigateBody2.png");
97         gfx_shipSprites[SS_FRIGATE_WING1] = gfx_loadImage("gfx/frigateGun11.png");
98         gfx_shipSprites[SS_FRIGATE_WING1_L] = gfx_loadImage("gfx/frigateGun12.png");
99         gfx_shipSprites[SS_FRIGATE_WING2] = gfx_loadImage("gfx/frigateGun21.png");
100         gfx_shipSprites[SS_FRIGATE_WING2_L] = gfx_loadImage("gfx/frigateGun22.png");
101         gfx_shipSprites[SS_MINERBOSS] = gfx_loadImage("gfx/mineBoss1.png");
102         gfx_shipSprites[SS_MINERBOSS_L] = gfx_loadImage("gfx/mineBoss2.png");
103         gfx_shipSprites[SS_MINERBOSS_WING1] = gfx_loadImage("gfx/mineBossWing11.png");
104         gfx_shipSprites[SS_MINERBOSS_WING1_L] = gfx_loadImage("gfx/mineBossWing12.png");
105         gfx_shipSprites[SS_MINERBOSS_WING2] = gfx_loadImage("gfx/mineBossWing21.png");
106         gfx_shipSprites[SS_MINERBOSS_WING2_L] = gfx_loadImage("gfx/mineBossWing22.png");
107         gfx_shipSprites[SS_MINERBOSS_WING3] = gfx_loadImage("gfx/mineBossWing31.png");
108         gfx_shipSprites[SS_MINERBOSS_WING3_L] = gfx_loadImage("gfx/mineBossWing32.png");
109         gfx_shipSprites[SS_MINERBOSS_WING4] = gfx_loadImage("gfx/mineBossWing41.png");
110         gfx_shipSprites[SS_MINERBOSS_WING4_L] = gfx_loadImage("gfx/mineBossWing42.png");
111         gfx_shipSprites[SS_EXEC] = gfx_loadImage("gfx/execTrans1.png");
112         gfx_shipSprites[SS_EXEC_L] = gfx_loadImage("gfx/execTrans2.png");
113         gfx_shipSprites[SS_PLUTOBOSS] = gfx_loadImage("gfx/plutoBoss1.png");
114         gfx_shipSprites[SS_PLUTOBOSS_L] = gfx_loadImage("gfx/plutoBoss2.png");
115         gfx_shipSprites[SS_URANUSBOSS] = gfx_loadImage("gfx/splitBoss11.png");
116         gfx_shipSprites[SS_URANUSBOSS_L] = gfx_loadImage("gfx/splitBoss12.png");
117         gfx_shipSprites[SS_URANUSBOSS_WING1] = gfx_loadImage("gfx/splitBoss21.png");
118         gfx_shipSprites[SS_URANUSBOSS_WING1_L] = gfx_loadImage("gfx/splitBoss22.png");
119         gfx_shipSprites[SS_URANUSBOSS_WING2] = gfx_loadImage("gfx/splitBoss31.png");
120         gfx_shipSprites[SS_URANUSBOSS_WING2_L] = gfx_loadImage("gfx/splitBoss32.png");
121         gfx_shipSprites[SS_KLINE] = gfx_loadImage("gfx/kline11.png");
122         gfx_shipSprites[SS_KLINE_L] = gfx_loadImage("gfx/kline12.png");
123
124         /*
125         Create images of ships being hit that show a lot of red
126         */
127         for (int i = SS_HIT_INDEX ; i < SS_MAX ; i++)
128         {
129                 if (gfx_shipSprites[i - SS_HIT_INDEX] == NULL)
130                         continue;
131                 gfx_shipSprites[i] = gfx_createSurface(gfx_shipSprites[i - SS_HIT_INDEX]->w,
132                         gfx_shipSprites[i - SS_HIT_INDEX]->h);
133                 SDL_SetSurfaceBlendMode(gfx_shipSprites[i - SS_HIT_INDEX], SDL_BLENDMODE_NONE);
134                 gfx_blit(gfx_shipSprites[i - SS_HIT_INDEX], 0, 0, gfx_shipSprites[i]);
135                 SDL_SetSurfaceBlendMode(gfx_shipSprites[i - SS_HIT_INDEX], SDL_BLENDMODE_BLEND);
136
137                 switch (gfx_shipSprites[i]->format->BitsPerPixel)
138                 {
139                         case 32:
140                                 SDL_LockSurface(gfx_shipSprites[i]);
141                                 p32 = (Uint32 *)gfx_shipSprites[i]->pixels;
142                                 for (int j = 0; j < gfx_shipSprites[i]->w * gfx_shipSprites[i]->h; j++)
143                                 {
144                                         if (p32[j])
145                                                 p32[j] |= gfx_shipSprites[i]->format->Rmask;
146                                 }
147                                 SDL_UnlockSurface(gfx_shipSprites[i]);
148                                 break;
149
150                         case 16:
151                                 SDL_LockSurface(gfx_shipSprites[i]);
152                                 p16 = (Uint16 *)gfx_shipSprites[i]->pixels;
153                                 for (int j = 0; j < gfx_shipSprites[i]->w * gfx_shipSprites[i]->h; j++)
154                                 {
155                                         if (p16[j])
156                                                 p16[j] |= gfx_shipSprites[i]->format->Rmask;
157                                 }
158                                 SDL_UnlockSurface(gfx_shipSprites[i]);
159                                 break;
160
161                         case 8:
162                                 SDL_LockSurface(gfx_shipSprites[i]);
163                                 p8 = (Uint8 *)gfx_shipSprites[i]->pixels;
164                                 for (int j = 0; j < gfx_shipSprites[i]->w * gfx_shipSprites[i]->h; j++)
165                                 {
166                                         if (p8[j])
167                                                 p8[j] = SDL_MapRGB(gfx_shipSprites[i]->format, 255, 0, 0);
168                                 }
169                                 SDL_UnlockSurface(gfx_shipSprites[i]);
170                                 break;
171                 }
172
173                 SDL_SetColorKey(gfx_shipSprites[i], SDL_TRUE,
174                         SDL_MapRGB(gfx_shipSprites[i]->format, 0, 0, 0));
175         }
176
177         // Other sprites
178         gfx_sprites[SP_PLASMA_GREEN] = gfx_loadImage("gfx/plasmaGreen.png");
179         gfx_sprites[SP_PLASMA_RED] = gfx_loadImage("gfx/plasmaRed.png");
180         gfx_sprites[SP_DIR_PLASMA_GREEN] = gfx_loadImage("gfx/greenDir.png");
181         gfx_sprites[SP_DIR_PLASMA_RED] = gfx_loadImage("gfx/redDir.png");
182         gfx_sprites[SP_ROCKET] = gfx_loadImage("gfx/rocket1.png");
183         gfx_sprites[SP_ROCKET_L] = gfx_loadImage("gfx/rocket2.png");
184         gfx_sprites[SP_SMALL_EXPLOSION] = gfx_loadImage("gfx/explode1.png");
185         gfx_sprites[SP_SMALL_EXPLOSION_2] = gfx_loadImage("gfx/explode2.png");
186         gfx_sprites[SP_SMALL_EXPLOSION_3] = gfx_loadImage("gfx/explode3.png");
187         gfx_sprites[SP_SMALL_EXPLOSION_L] = gfx_loadImage("gfx/explode4.png");
188         gfx_sprites[SP_BIG_EXPLOSION] = gfx_loadImage("gfx/explode05.png");
189         gfx_sprites[SP_BIG_EXPLOSION_2] = gfx_loadImage("gfx/explode06.png");
190         gfx_sprites[SP_BIG_EXPLOSION_3] = gfx_loadImage("gfx/explode07.png");
191         gfx_sprites[SP_BIG_EXPLOSION_L] = gfx_loadImage("gfx/explode08.png");
192         gfx_sprites[SP_SMOKE] = gfx_loadImage("gfx/explode9.png");
193         gfx_sprites[SP_SMOKE_2] = gfx_loadImage("gfx/explode10.png");
194         gfx_sprites[SP_SMOKE_3] = gfx_loadImage("gfx/explode11.png");
195         gfx_sprites[SP_SMOKE_L] = gfx_loadImage("gfx/explode12.png");
196         gfx_sprites[SP_TINY_EXPLOSION] = gfx_loadImage("gfx/explode13.png");
197         gfx_sprites[SP_TINY_EXPLOSION_2] = gfx_loadImage("gfx/explode14.png");
198         gfx_sprites[SP_TINY_EXPLOSION_3] = gfx_loadImage("gfx/explode15.png");
199         gfx_sprites[SP_TINY_EXPLOSION_L] = gfx_loadImage("gfx/explode16.png");
200         gfx_sprites[SP_ELECTRICAL] = gfx_loadImage("gfx/elec1.png");
201         gfx_sprites[SP_ELECTRICAL_2] = gfx_loadImage("gfx/elec2.png");
202         gfx_sprites[SP_ELECTRICAL_3] = gfx_loadImage("gfx/elec3.png");
203         gfx_sprites[SP_ELECTRICAL_L] = gfx_loadImage("gfx/elec4.png");
204         gfx_sprites[SP_PICKUP_MONEY] = gfx_loadImage("gfx/dollar.png");
205         gfx_sprites[SP_PICKUP_PLASMA] = gfx_loadImage("gfx/rocket.png");
206         gfx_sprites[SP_PICKUP_SHIELD] = gfx_loadImage("gfx/heart.png");
207         gfx_sprites[SP_PICKUP_PLASMA_OUTPUT] = gfx_loadImage("gfx/plasmaAmmo.png");
208         gfx_sprites[SP_PICKUP_PLASMA_RATE] = gfx_loadImage("gfx/plasmaRate.png");
209         gfx_sprites[SP_PICKUP_PLASMA_POWER] = gfx_loadImage("gfx/plasmaDamage.png");
210         gfx_sprites[SP_CHAIN_LINK] = gfx_loadImage("gfx/chainLink.png");
211         gfx_sprites[SP_MINE] = gfx_loadImage("gfx/mine.png");
212         gfx_sprites[SP_CARGO] = gfx_loadImage("gfx/cargo1.png");
213         gfx_sprites[SP_ION] = gfx_loadImage("gfx/stunBolt.png");
214         gfx_sprites[SP_ARROW_NORTH] = gfx_loadImage("gfx/arrowNorth.png");
215         gfx_sprites[SP_ARROW_NORTHEAST] = gfx_loadImage("gfx/arrowNorthEast.png");
216         gfx_sprites[SP_ARROW_EAST] = gfx_loadImage("gfx/arrowEast.png");
217         gfx_sprites[SP_ARROW_SOUTHEAST] = gfx_loadImage("gfx/arrowSouthEast.png");
218         gfx_sprites[SP_ARROW_SOUTH] = gfx_loadImage("gfx/arrowSouth.png");
219         gfx_sprites[SP_ARROW_SOUTHWEST] = gfx_loadImage("gfx/arrowSouthWest.png");
220         gfx_sprites[SP_ARROW_WEST] = gfx_loadImage("gfx/arrowWest.png");
221         gfx_sprites[SP_ARROW_NORTHWEST] = gfx_loadImage("gfx/arrowNorthWest.png");
222         gfx_sprites[SP_ARROW_FRIEND_NORTH] = gfx_loadImage("gfx/friendArrowNorth.png");
223         gfx_sprites[SP_ARROW_FRIEND_NORTHEAST] = gfx_loadImage("gfx/friendArrowNorthEast.png");
224         gfx_sprites[SP_ARROW_FRIEND_EAST] = gfx_loadImage("gfx/friendArrowEast.png");
225         gfx_sprites[SP_ARROW_FRIEND_SOUTHEAST] = gfx_loadImage("gfx/friendArrowSouthEast.png");
226         gfx_sprites[SP_ARROW_FRIEND_SOUTH] = gfx_loadImage("gfx/friendArrowSouth.png");
227         gfx_sprites[SP_ARROW_FRIEND_SOUTHWEST] = gfx_loadImage("gfx/friendArrowSouthWest.png");
228         gfx_sprites[SP_ARROW_FRIEND_WEST] = gfx_loadImage("gfx/friendArrowWest.png");
229         gfx_sprites[SP_ARROW_FRIEND_NORTHWEST] = gfx_loadImage("gfx/friendArrowNorthWest.png");
230         gfx_sprites[SP_INDICATOR_TARGET] = gfx_loadImage("gfx/targetText.png");
231         gfx_sprites[SP_INDICATOR_SID] = gfx_loadImage("gfx/sidText.png");
232         gfx_sprites[SP_INDICATOR_PHOEBE] = gfx_loadImage("gfx/phoebeText.png");
233         gfx_sprites[SP_INDICATOR_URSULA] = gfx_loadImage("gfx/ursulaText.png");
234         gfx_sprites[SP_INDICATOR_KLINE] = gfx_loadImage("gfx/klineText.png");
235         gfx_sprites[SP_ESCAPE_POD] = gfx_loadImage("gfx/pod.png");
236         gfx_sprites[SP_ORE] = gfx_loadImage("gfx/ore1.png");
237         gfx_sprites[SP_ORE_2] = gfx_loadImage("gfx/ore2.png");
238         gfx_sprites[SP_ORE_L] = gfx_loadImage("gfx/ore3.png");
239         gfx_sprites[SP_PICKUP_ROCKETS] = gfx_loadImage("gfx/rocketAmmo.png");
240         gfx_sprites[SP_SUPERCHARGE] = gfx_loadImage("gfx/superCharge.png");
241
242         loadBackground(systemBackground[game.system]);
243
244         for (int i = 0 ; i < CD_MAX ; i++)
245         {
246                 if (gfx_shipSprites[alien_defs[i].imageIndex[0]] != NULL)
247                 {
248                         alien_defs[i].image[0] = gfx_shipSprites[alien_defs[i].imageIndex[0]];
249                         alien_defs[i].image[1] = gfx_shipSprites[alien_defs[i].imageIndex[1]];
250                         alien_defs[i].engineX = alien_defs[i].image[0]->w;
251                         alien_defs[i].engineY = (alien_defs[i].image[0]->h / 2);
252                 }
253         }
254
255         for (int i = 0 ; i < W_MAX ; i++)
256         {
257                 weapon[i].image[0] = gfx_sprites[weapon[i].imageIndex[0]];
258                 weapon[i].image[1] = gfx_sprites[weapon[i].imageIndex[1]];
259         }
260 }
261
262
263 /*
264 Custom loading to alter the font color before doing
265 all other things
266 */
267 void loadFont()
268 {
269         SDL_Surface *image, *newImage;
270
271         for (int i = 0 ; i < FONT_MAX ; i++)
272         {
273                 image = IMG_Load("gfx/smallFont.png");
274
275                 if (image == NULL) {
276                         printf("Couldn't load game font! (%s) Exitting.\n", SDL_GetError());
277                    exit(1);
278                 }
279
280                 switch(i)
281                 {
282                         case FONT_RED:
283                                 SDL_SetSurfaceColorMod(image, 255, 0, 0);
284                                 break;
285                         case FONT_YELLOW:
286                                 SDL_SetSurfaceColorMod(image, 255, 255, 0);
287                                 break;
288                         case FONT_GREEN:
289                                 SDL_SetSurfaceColorMod(image, 0, 255, 0);
290                                 break;
291                         case FONT_CYAN:
292                                 SDL_SetSurfaceColorMod(image, 0, 255, 255);
293                                 break;
294                         case FONT_OUTLINE:
295                                 SDL_SetSurfaceColorMod(image, 0, 0, 10);
296                                 break;
297                 }
298
299                 newImage = SDL_ConvertSurface(image, screen->format, 0);
300
301                 gfx_fontSprites[i] = gfx_setTransparent(newImage);
302
303                 SDL_FreeSurface(image);
304         }
305 }