source: abuse/trunk/src/oldhelp.cpp @ 494

Last change on this file since 494 was 494, checked in by Sam Hocevar, 11 years ago

style: remove trailing spaces, fix copyright statements.

File size: 3.9 KB
Line 
1/*
2 *  Abuse - dark 2D side-scrolling platform game
3 *  Copyright (c) 1995 Crack dot Com
4 *  Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net>
5 *
6 *  This software was released into the Public Domain. As with most public
7 *  domain software, no warranty is made or implied by Crack dot Com or
8 *  Jonathan Clark.
9 */
10
11#include "config.h"
12
13#include <string.h>
14
15#include "help.h"
16#include "game.h"
17
18int help_page=0;
19
20
21#define HELP_PAGES 3
22
23char *get_page(int x)
24{
25  char tmp[800],line[120];
26  FILE *fp=fopen("help.txt","r");
27  if (!fp)
28    return strcpy((char *)malloc(40),"help.txt missing");
29  else
30  {
31    tmp[0]=0;
32    while (x)
33    {
34      fgets(line,120,fp);
35      if (line[0]=='.' && line[1]=='n')
36        x--;
37      if (line[0]=='.' && line[1]=='e')
38      {
39    fclose(fp);
40    return strcpy((char *)malloc(30),"missing page");
41      }
42
43    }
44    do
45    {
46      fgets(line,120,fp);
47      if (line[0]=='.')
48      {
49        fclose(fp);
50        return strdup(tmp);
51      }
52      else strcat(tmp,line);
53    } while (1);
54  }
55}
56
57
58void make_help_page(int page, image *s)
59{
60  int x=0,y=0,fw=wm->font()->width(),fh=wm->font()->height(),ya;
61  char *h,*ho,imname[30],*inp;
62  h=ho=get_page(page);
63
64  s->clear(28);      // light gray
65
66  bFILE *fp=open_file("art/joy.spe","rb");
67  if (fp->open_failure())
68  {
69    wm->font()->put_string(s,10,10,"Help file missing!");
70    return ;
71
72  }
73  spec_directory sd(fp);
74  image *im;
75
76
77  while (*h)
78  {
79    ya=fh;
80    while (*h && *h!='\n')
81    {
82      if (*h=='@')
83      {
84    h++;
85    if (*h=='@')
86    {
87          wm->font()->put_char(s,x,y,*h);
88      x+=fw;
89      h++;
90    }
91        else
92        {
93      inp=imname;
94      int center=0;
95      if (*h=='#')
96      {
97        center=1;
98        h++;
99      }
100      if (*h=='+')
101      {
102        h++;
103        while (*h!='+')
104        {
105          *inp=*h;
106          h++;
107          inp++;
108        }
109        h++;
110        *inp=0;
111        x=atoi(imname);
112        inp=imname;
113      }
114
115
116      while (*h!='@')
117      {
118        *inp=*h;
119        h++;
120        inp++;
121      }
122      *inp=0;
123      h++;
124
125      if (!sd.find(imname))
126      {
127        wm->font()->put_string(s,0,yres-10,"Missing image!");
128        delete fp;
129        free(ho);
130        return ;
131      }
132      im=new image(sd.find(imname),fp);
133
134      if (center)
135      {
136          im->put_image(s,x,y-im->height()/2,1);
137          if (im->height()/2>=ya)
138            ya=im->height()/2+1;
139      }
140      else
141      {
142          im->put_image(s,x,y,1);
143          if (im->height()>=ya)
144            ya=im->height()+1;
145      }
146      x+=im->width()+1;
147      delete im;
148    }
149      } else if (*h=='`')
150      {
151    inp=imname;
152    h+=2;
153    while (*h!='`')
154    {
155      *inp=*h;
156      h++;
157      inp++;
158    }
159    h++;
160    *inp=0;
161    x=atoi(imname);
162      }
163      else
164      {
165    wm->font()->put_char(s,x,y,*h);
166    x+=fw;
167    h++;
168      }
169    }
170    y+=ya;
171    x=0;
172    if (*h) h++;
173  }
174  free(ho);
175  delete fp;
176}
177
178
179void show_help(int direction)
180{
181  int i;
182  image *h=new image(screen->width(),screen->height(),NULL,2),*old_screen;
183
184  if (direction>0)
185    make_help_page(help_page,h);
186  else
187  {
188    old_screen=screen;
189    screen=h;
190    the_game->draw();
191    screen=old_screen;
192  }
193
194
195  int steps=8;
196  int scroll_step=screen->height()/steps;
197  int helpy=-screen->height()+scroll_step;
198
199  for (i=0; i<steps; i++,helpy+=scroll_step)
200  {
201    screen->scroll(0,0,xres,yres,0,scroll_step);
202    h->put_part(screen,0,helpy,0,0,xres,-helpy+scroll_step);
203    wm->flush_screen();
204  }
205  delete h;
206}
207
208
209
210
211
212
213void help_handle_event(event &ev)
214{
215  if (ev.window!=NULL) return ;
216
217  if (the_game->state!=HELP_STATE)
218  {
219    if (ev.type==EV_KEY && (ev.key=='h' || ev.key=='?'))
220    {
221      the_game->state=HELP_STATE;
222      help_page=0;
223      show_help(1);
224    }
225  } else if (ev.type==EV_KEY)
226  {
227    if (ev.key==JK_ESC || help_page==HELP_PAGES-1)
228    {
229      show_help(-1);
230      the_game->state=RUN_STATE;
231    }
232    else
233    {
234      help_page++;
235      show_help(1);
236    }
237  }
238}
Note: See TracBrowser for help on using the repository browser.