added necessary code
[awish.git] / src / title.c
blob6d974cac89a5ef5c653b4e804c5a303f96635196
1 /*
2 * This program is free software: you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation, either version 3 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
19 #include "title.h"
21 #include "resfile.h"
22 #include "video.h"
23 #include "mainloop.h"
24 #include "vm.h"
25 #include "gameglobals.h"
26 #include "game.h"
29 static void scrDrawCrashMask (SDL_Surface *frame, int phase) {
30 if (phase <= 0) {
31 SDL_Rect dst;
33 dst.x = 0;
34 dst.y = 0;
35 dst.w = frame->w;
36 dst.h = frame->h;
37 SDL_FillRect(frame, &dst, palette[0]);
38 } else if (phase < 5) {
39 for (int y = 0; y < 20; ++y) {
40 for (int x = 0; x < 16; ++x) {
41 blitSurface(frame, x*20, y*10, banks[CONST_BANK_FG_TILES].spr[16-phase][0]);
48 static void frmTitleDraw (SDL_Surface *frame) {
49 blitSurface(frame, 0, 0, backs[0]);
50 scrDrawCrashMask(frame, vmGVars[GVAR_TITLE_PHASE]);
52 levelDrawSpriteLayers(frame, 0, 0, 320, 200);
53 clearSpriteLayers();
55 pmDraw(frame);
56 pmClear();
58 textDraw(frame);
59 textClear();
61 if (vmGVars[GVAR_MOUSE_HIDDEN] == 0) {
62 int cur = vmGVars[GVAR_MOUSE_CURSOR];
64 if (cur >= 0 && cur < banks[256].count) {
65 blitSurface(frame, vmGVars[GVAR_MOUSE_X], vmGVars[GVAR_MOUSE_Y], banks[256].spr[cur][0]);
71 static void frmTitleKey (SDL_KeyboardEvent *key) {
72 if (key->type == SDL_KEYDOWN) {
73 switch (key->keysym.sym) {
74 case SDLK_ESCAPE: vmGVars[GVAR_KEY_ESCAPE] = 1; break;
75 case SDLK_F12: vmGVars[GVAR_KEY_QUIT] = 1; break;
76 case SDLK_SPACE: case SDLK_RETURN: vmGVars[GVAR_KEY_START] = 1; break;
77 default: ;
80 switch (key->keysym.sym) {
81 case SDLK_LEFT: case SDLK_KP4: vmGVars[GVAR_KEY_LEFT] = (key->type == SDL_KEYDOWN); break;
82 case SDLK_RIGHT: case SDLK_KP6: vmGVars[GVAR_KEY_RIGHT] = (key->type == SDL_KEYDOWN); break;
83 case SDLK_UP: case SDLK_KP8: vmGVars[GVAR_KEY_UP] = (key->type == SDL_KEYDOWN); break;
84 case SDLK_DOWN: case SDLK_KP2: vmGVars[GVAR_KEY_DOWN] = (key->type == SDL_KEYDOWN); break;
85 default: ;
91 void setMainLoopTitle (void) {
92 frameCB = frmTitleDraw;
93 keyCB = frmTitleKey;
94 mouseCB = NULL;
95 gameRSTCB = NULL;
96 beforeVMCB = NULL;
97 vmMapGetCB = NULL;
98 vmMapSetCB = NULL;
99 vmPaused = 0;
100 clearSpriteLayers();