aboutsummaryrefslogtreecommitdiff
path: root/engines/mortevielle/prog.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mortevielle/prog.h')
-rw-r--r--engines/mortevielle/prog.h346
1 files changed, 346 insertions, 0 deletions
diff --git a/engines/mortevielle/prog.h b/engines/mortevielle/prog.h
new file mode 100644
index 0000000000..a3ba1896ae
--- /dev/null
+++ b/engines/mortevielle/prog.h
@@ -0,0 +1,346 @@
+/* overlay */ void change_gd(integer ngd)
+{
+ integer i;
+
+ hide_mouse();
+ gd= ngd;
+ hirs();
+ init_mouse();
+ show_mouse();
+ dessine_rouleau();
+ tinke();
+ pendule();
+ if (ipers!=0) affper(ipers); else person();
+ clsf2();
+ clsf3();
+ maff= 68;
+ afdes(0);
+ repon(2,crep);
+ menu_aff();
+}
+
+/* overlay */ void antegame()
+{
+ integer cx;
+ registres regs;
+ array<0,511,char> buffer;
+ integer i,j,k;
+ array<0,2,boolean> test;
+ array<0,7,char> g;
+
+
+ hide_mouse();
+ imen= false;
+ g[1]='M';
+perdu= true;
+ anyone= false;
+okdes= true;
+ test[0]= false;
+ test[1]=false;
+ g[0]='\40';
+ col= false;
+ tesok= true;
+ test[2]=false;
+ g[7]=g[0];
+ g[2]='A';
+ cache= false;
+ brt= false;
+ maff= 68;
+ g[5]='E';
+ mnumo= 0;
+ prebru= 0;
+ g[4]='T';
+ x= 0;
+ y= 0;
+ num= 0;
+ hdb= 0;
+ hfb= 0;
+ cs= 0;
+ is= 0;
+ k= 0;
+ ment= 0;
+syn= true;
+fouil= true;
+ mchai= 0;
+ inei= 0;
+ initouv();
+ g[3]='S';
+ g[6]='R';
+ iouv= 0;
+ dobj= 0;
+ affrep();
+ stpou= ind_mess;
+ while ((test[k]==false) && (k<2))
+ {
+ regs.ax=0;
+ k=succ(integer,k);
+ intr(19,regs);
+ {
+ regs.ax=0x201;regs.cx=0x1;regs.dx=0x100+k-1;regs.es=seg(buffer);regs.bx=ofs(buffer);
+ intr(19,regs);
+ test[k]=! imen;
+ i=0;
+ while ((test[k]) && (i<19))
+ {
+ regs.ax=0x201;
+ syn= false;regs.cx=0x2700+i;regs.dx=0x100+k-1;regs.es=seg(buffer);regs.bx=ofs(buffer);
+ intr(19,regs);if (lo(regs.flags) % 2==1) test[k]=false;i=i+1;
+ }
+ okdes= false;
+ solu= true;
+ for( j=0; j <= 7; j ++) if (buffer[j+504]!=g[j]) test[k]=false;
+ }
+ perdu= false;
+ fouil= false;
+ }
+ person();
+ tinke();
+ pendule();
+ afdes(0);
+ repon(2,crep);
+ clsf3();
+ solu= false;
+ tmlieu(s.mlieu);
+ modinv();
+ if (s.derobj!= 0) modobj2(s.derobj+ 400,test[1],test[2]);
+ else tesok=test[1] || test[2];
+ show_mouse();
+}
+
+
+/* NIVEAU 3 */
+/* procedure PROGRAMME */
+void tmaj3()
+{
+ integer j,h,m;
+
+ calch(j,h,m);
+ if (m== 30) m= 1;
+ h= h+ (j* 24);
+ m= m+ (h* 2);
+ s.heure= chr(m);
+}
+
+void tsitu()
+
+{
+ integer h,j,m;
+
+ if (! col) clsf2();
+ syn= false;
+ iesc= false;
+ if (anyone) goto L1;
+ if (brt)
+ if ((msg[3]== depla) || (msg[4]== sortir) || (msg[4]== dormir) ||
+ (msg[4]== manger))
+ {
+ ctrm= 4;
+ goto L2;
+ }
+ if (msg[3]== depla) taller();
+ if (msg[3]== discut) tparler();
+ if (msg[3]== invent) tsprendre();
+ if (msg[4]== attacher) tattacher();
+ if (msg[4]== attendre) tattendre();
+ if (msg[4]== defoncer) tdefoncer();
+ if (msg[4]== dormir) tdormir();
+ if (msg[4]== ecouter) tecouter();
+ if (msg[4]== entrer) tentrer();
+ if (msg[4]== fermer) tfermer();
+ if (msg[4]== fouiller) tfouiller();
+ if (msg[4]== frapper) tfrapper();
+ if (msg[4]== gratter) tgratter();
+ if (msg[4]== lire) tlire();
+ if (msg[4]== manger) tmanger();
+ if (msg[4]== mettre) tmettre();
+ if (msg[4]== ouvrir) touvrir();
+ if (msg[4]== prendre) tprendre();
+ if (msg[4]== regarder) tregarder();
+ if (msg[4]== sentir) tsentir();
+ if (msg[4]== sonder) tsonder();
+ if (msg[4]== sortir) tsortir();
+ if (msg[4]== soulever) tsoulever();
+ if (msg[4]== tourner) ttourner();
+ if (msg[4]== scacher)
+ {
+ tcacher();
+ goto L1;
+ }
+ if (msg[4]== sfouiller) tsfouiller();
+ if (msg[4]== slire) tslire();
+ if (msg[4]== sposer) tposer();
+ if (msg[4]== sregarder) tsregarder();
+ cache= false;
+L1:
+ if (anyone)
+ {
+ quelquun();
+ anyone= false;
+ goto L2;
+ }
+ calch(j,h,m);
+ if ((((h== 12) || (h== 13) || (h== 19)) && (s.mlieu!= 10)) ||
+ ((h> 0) && (h< 6) && (s.mlieu!= 0))) s.conf= s.conf+ 1;
+ if (((s.mlieu< 16) || (s.mlieu> 19)) && (s.mlieu!= 23)
+ && (s.mlieu!= 0) && (s.derobj!= 152) && (! perdu))
+ {
+ if ((s.conf> 99) && (h> 8) && (h< 16))
+ {
+ crep= 1501;
+ tperd();
+ }
+ if ((s.conf> 99) && (h> 0) && (h< 9))
+ {
+ crep= 1508;
+ tperd();
+ }
+ if ((j> 1) && (h> 8) && (! perdu))
+ {
+ crep= 1502;
+ tperd();
+ }
+ }
+L2:
+ mennor();
+}
+
+void sv_game(integer n);
+
+void ld_game(integer n);
+
+void tecran()
+{
+ const char idem[] = "Idem";
+ const integer lim = 20000;
+ integer temps;
+ char inkey;
+ boolean oo, funct;
+
+ clsf3();
+ oo= false;
+ ctrm= 0;
+ if (! iesc)
+ {
+ draw_menu();
+ imen= true;
+ temps= 0;
+ key= 0;
+ funct= false;
+ inkey='.';
+
+ do {
+ mdn();
+ tinke();
+ mov_mouse(funct,inkey);
+ temps= temps+ 1;
+ } while (!((choisi) || (temps > lim) || (funct) || (anyone)));
+
+ erase_menu();
+ imen= false;
+ if (set::of('\1','\3','\5','\7','\11', eos).has(inkey))
+ {
+ change_gd((cardinal)pred(integer,ord(inkey)) >> 1);
+ return;
+ }
+ if (choisi && (msg[3]==sauve)) sv_game(msg[4] & 7);
+ if (choisi && (msg[3]==charge)) ld_game(pred(integer,msg[4] & 7));
+ if (inkey== '\103') /* F9 */
+ {
+ temps = do_alert(stpou,1);
+ return;
+ }
+ else
+ if (inkey== '\77')
+ {
+ if ((mnumo!= no_choice) && ((msg[3]== action) || (msg[3]== saction)))
+ {
+ msg[4]= mnumo;
+ ecr3(idem);
+ }
+ else return;
+ }
+ else
+ if (inkey== '\104')
+ {
+ if ((x!= 0) && (y!= 0)) num= 9999;
+ return;
+ }
+ }
+ if (inkey== '\73')
+ {
+ arret= true;
+ tmaj3();
+ }
+ else
+ {
+ if ((funct) && (inkey!= '\77')) return;
+ if (temps> lim)
+ {
+ repon(2,141);
+ if (num== 9999) num= 0;
+ }
+ else
+ {
+ mnumo= msg[3];
+ if ((msg[3]== action) || (msg[3]== saction)) mnumo= msg[4];
+ if (! anyone)
+ {
+ if ((fouil) || (obpart))
+ {
+ if (y_s< 12) return;
+ if ((msg[4]== sonder) || (msg[4]== soulever))
+ {
+ oo= true;
+ if ((msg[4]== soulever) || (obpart))
+ {
+ finfouil();
+ caff= s.mlieu;
+ crep= 998;
+ }
+ else tsuiv();
+ mennor();
+ }
+ }
+ }
+ do {
+ if (! oo) tsitu();
+ if ((ctrm== 0) && (! perdu) && (! solu))
+ {
+ taffich();
+ if (okdes)
+ {
+ okdes= false;
+ dessin(0);
+ }
+ if ((! syn) || (col)) repon(2,crep);
+ }
+ } while (!(! syn));
+ if (ctrm!= 0) tctrm();
+ }
+ }
+}
+
+/* NIVEAU 1 */
+
+void theure()
+{
+ vj= ord(s.heure);
+ vh= vj % 48;
+ vj= vj / 48;
+ vm= vh % 2;
+ vh= vh / 2;
+ heu= vh;
+ if (vm== 1) min= 30; else min= 0;
+}
+
+
+void tjouer()
+{
+ antegame();
+ do {
+ tecran();
+ } while (!((arret) || (solu) || (perdu)));
+ if (solu) tmaj1(); else
+ if (perdu) tencore();
+}
+