From b5c4867e971dc1ae6d727055916472cdcb64e969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Sat, 10 Jan 2015 11:51:33 +0100 Subject: [PATCH 1/6] Converted preprocessor defines to C++ constants and added namespaces for "core" functions. --- Landscape.cpp | 15432 ++++++++++++++++++++++++------------------------ 1 file changed, 7729 insertions(+), 7703 deletions(-) diff --git a/Landscape.cpp b/Landscape.cpp index 16c1534..c523d71 100644 --- a/Landscape.cpp +++ b/Landscape.cpp @@ -1,298 +1,298 @@ -#define NAME "Landscape" -#define TITLE "Landscape" +const char* NAME = "Landscape"; +const char* TITLE = "Landscape"; #define INITGUID -#define KXPIXEL 54 //Breite der Kacheln -#define KYPIXEL 44 //Hoehe der Kacheln -#define S1XPIXEL 20 //Breite der Schrift1 -#define S1YPIXEL 20 //Höhe der Schrift1 -#define S1ABSTAND 13 //Abstand zum nächsten Buchstaben -#define S2XPIXEL 10 //Breite der Schrift2 -#define S2YPIXEL 15 //Höhe der Schrift2 -#define S2ABSTAND 10 //Abstand zum nächsten Buchstaben -#define MAXXKACH 60 //Anzahl der Kacheln -#define MAXYKACH 60 -#define MAXSCAPEX 3360// Größe der Scapesurface -#define MAXSCAPEY 1700 -#define MAXX 800 //Bildschirmauflösung -#define MAXY 600 -#define GIPFEL 3 //Hoehe des Gipfels -#define MAXFLUSS 1000//Maximale Flusslänge -#define FLUSSANZAHL 1 //Wieviele Flüsse? Mehr als 1 funktioniert seltsamerweise nicht mehr.. -#define SKARTEX 370 //Schatzkartenbreite -#define SKARTEY 370 //Schatzkartenhöhe +const unsigned int KXPIXEL = 54; //Breite der Kacheln +const unsigned int KYPIXEL = 44; //Hoehe der Kacheln +const unsigned int S1XPIXEL = 20; //Breite der Schrift1 +const unsigned int S1YPIXEL = 20; //Höhe der Schrift1 +const unsigned int S1ABSTAND = 13; //Abstand zum nächsten Buchstaben +const unsigned int S2XPIXEL = 10; //Breite der Schrift2 +const unsigned int S2YPIXEL = 15; //Höhe der Schrift2 +const unsigned int S2ABSTAND = 10; //Abstand zum nächsten Buchstaben +const unsigned int MAXXKACH = 60; //Anzahl der Kacheln +const unsigned int MAXYKACH = 60; +const unsigned int MAXSCAPEX = 3360;// Größe der Scapesurface +const unsigned int MAXSCAPEY = 1700; +const unsigned int MAXX = 800; //Bildschirmauflösung +const unsigned int MAXY = 600; +const unsigned int GIPFEL = 3; //Hoehe des Gipfels +const unsigned int MAXFLUSS = 1000;//Maximale Flusslänge +const unsigned int FLUSSANZAHL = 1; //Wieviele Flüsse? Mehr als 1 funktioniert seltsamerweise nicht mehr.. +const unsigned int SKARTEX = 370; //Schatzkartenbreite +const unsigned int SKARTEY = 370; //Schatzkartenhöhe #define ROUND(s) ((short) ((short)(s-0.5) == (short) s ? s+1:s)) //Zahlen runden Macro -#define MEERWELLEN 0 -#define FLUSS1 MEERWELLEN+1 -#define FLUSS2 MEERWELLEN+2 -#define FLUSS3 MEERWELLEN+3 -#define FLUSS4 MEERWELLEN+4 -#define FLUSS5 MEERWELLEN+5 -#define FLUSS6 MEERWELLEN+6 -#define FLUSS7 MEERWELLEN+7 -#define FLUSS8 MEERWELLEN+8 -#define FLUSS9 MEERWELLEN+9 -#define FLUSS10 MEERWELLEN+10 -#define MUENDUNG1 MEERWELLEN+11 -#define MUENDUNG2 MEERWELLEN+12 -#define MUENDUNG3 MEERWELLEN+13 -#define MUENDUNG4 MEERWELLEN+14 -#define QUELLE1 MEERWELLEN+15 -#define QUELLE2 MEERWELLEN+16 //Wenn hier was eingefügt wird, auch die FillRohr ändern!! -#define QUELLE3 MEERWELLEN+17 -#define QUELLE4 MEERWELLEN+18 -#define SCHLEUSE1 MEERWELLEN+19 -#define SCHLEUSE2 MEERWELLEN+20 -#define SCHLEUSE3 MEERWELLEN+21 -#define SCHLEUSE4 MEERWELLEN+22 -#define SCHLEUSE5 MEERWELLEN+23 -#define SCHLEUSE6 MEERWELLEN+24 -#define BAUM1 25 -#define BAUM2 BAUM1+1 -#define BAUM3 BAUM1+2 -#define BAUM4 BAUM1+3 -#define BUSCH BAUM1+4 -#define BAUM1DOWN BAUM1+5 -#define BAUM2DOWN BAUM1+6 -#define BAUM3DOWN BAUM1+7 -#define BAUM4DOWN BAUM1+8 -#define BAUMGROSS BAUM1+9 -#define FEUER BAUM1+10 -#define WRACK BAUM1+11 -#define WRACK2 BAUM1+12 -#define FELD 38 -#define ZELT FELD+1 -#define BOOT FELD+2 -#define ROHR FELD+3 -#define SOS FELD+4 -#define HAUS1 FELD+5 -#define HAUS2 FELD+6 -#define HAUS3 FELD+7 -#define FEUERSTELLE FELD+8 -#define CUPFEIL 47 -#define CURICHTUNG CUPFEIL+1 -#define CUUHR CUPFEIL+2 -#define GUYLINKS 50 -#define GUYOBEN GUYLINKS+1 -#define GUYRECHTS GUYLINKS+2 -#define GUYUNTEN GUYLINKS+3 -#define GUYSUCHEN GUYLINKS+4 -#define GUYESSEN GUYLINKS+5 -#define GUYTRINKEN GUYLINKS+6 -#define GUYFAELLEN GUYLINKS+7 -#define GUYWARTEN GUYLINKS+8 -#define GUYFELD GUYLINKS+9 -#define GUYBINDENOBEN GUYLINKS+10 -#define GUYBINDENUNTEN GUYLINKS+11 -#define GUYSCHLAFEN GUYLINKS+12 -#define GUYSCHLAFZELT GUYLINKS+13 -#define GUYGEHINZELT GUYLINKS+14 -#define GUYHINLEGEN GUYLINKS+15 -#define GUYAUFSTEHEN GUYLINKS+16 -#define GUYANGELN1LINKS GUYLINKS+17 -#define GUYANGELN1OBEN GUYLINKS+18 -#define GUYANGELN1RECHTS GUYLINKS+19 -#define GUYANGELN1UNTEN GUYLINKS+20 -#define GUYANGELN2LINKS GUYLINKS+21 -#define GUYANGELN2OBEN GUYLINKS+22 -#define GUYANGELN2RECHTS GUYLINKS+23 -#define GUYANGELN2UNTEN GUYLINKS+24 -#define GUYANGELN3LINKS GUYLINKS+25 -#define GUYANGELN3OBEN GUYLINKS+26 -#define GUYANGELN3RECHTS GUYLINKS+27 -#define GUYANGELN3UNTEN GUYLINKS+28 -#define GUYSCHLAGEN GUYLINKS+29 -#define GUYBOOTLINKS GUYLINKS+30 -#define GUYBOOTOBEN GUYLINKS+31 -#define GUYBOOTRECHTS GUYLINKS+32 -#define GUYBOOTUNTEN GUYLINKS+33 -#define GUYBOOTANGELN1 GUYLINKS+34 -#define GUYBOOTANGELN2 GUYLINKS+35 -#define GUYBOOTANGELN3 GUYLINKS+36 -#define GUYTAUCHEN1 GUYLINKS+37 -#define GUYTAUCHEN2 GUYLINKS+38 -#define GUYTAUCHEN3 GUYLINKS+39 -#define GUYHAMMER GUYLINKS+40 -#define GUYKLETTERN1 GUYLINKS+41 -#define GUYKLETTERN2 GUYLINKS+42 -#define GUYHAMMER2 GUYLINKS+43 -#define GUYGEHINHAUS GUYLINKS+44 -#define GUYSCHLAFHAUS GUYLINKS+45 -#define GUYGEHAUSHAUS GUYLINKS+46 -#define GUYANZUENDEN GUYLINKS+47 -#define GUYAUSSCHAU GUYLINKS+48 -#define GUYSCHAUFELN GUYLINKS+49 -#define GUYSCHIFF GUYLINKS+50 -#define GUYSCHIFFDOWN GUYLINKS+51 -#define GUYSCHWIMMEN GUYLINKS+52 -#define GUYTOD GUYLINKS+53 -#define GUYBOOTTOD GUYLINKS+54 -#define GUYBOOTWARTEN GUYLINKS+55 -#define GUYSCHLEUDER GUYLINKS+56 -#define BUTTGITTER 107 -#define BUTTANIMATION BUTTGITTER+1 -#define BUTTBEENDEN BUTTGITTER+2 -#define BUTTNEU BUTTGITTER+3 -#define BUTTTAGNEU BUTTGITTER+4 -#define BUTTSOUND BUTTGITTER+5 -#define BUTTAKTION BUTTGITTER+6 -#define BUTTBAUEN BUTTGITTER+7 -#define BUTTINVENTAR BUTTGITTER+8 -#define BUTTWEITER BUTTGITTER+9 -#define BUTTSTOP BUTTGITTER+10 -#define BUTTABLEGEN BUTTGITTER+11 -#define BUTTSUCHEN 119 -#define BUTTESSEN BUTTSUCHEN+1 -#define BUTTSCHLAFEN BUTTSUCHEN+2 -#define BUTTFAELLEN BUTTSUCHEN+3 -#define BUTTANGELN BUTTSUCHEN+4 -#define BUTTANZUENDEN BUTTSUCHEN+5 -#define BUTTAUSSCHAU BUTTSUCHEN+6 -#define BUTTSCHATZKARTE BUTTSUCHEN+7 -#define BUTTSCHATZ BUTTSUCHEN+8 -#define BUTTSCHLEUDER BUTTSUCHEN+9 -#define BUTTZELT 129 -#define BUTTFELD BUTTZELT+1 -#define BUTTBOOT BUTTZELT+2 -#define BUTTROHR BUTTZELT+3 -#define BUTTSOS BUTTZELT+4 -#define BUTTHAUS1 BUTTZELT+5 -#define BUTTHAUS2 BUTTZELT+6 -#define BUTTHAUS3 BUTTZELT+7 -#define BUTTFEUERST BUTTZELT+8 -#define BUTTFRAGEZ BUTTZELT+9 -#define BUTTDESTROY BUTTZELT+10 -#define SAEULE1 140 -#define SAEULE2 SAEULE1+1 -#define SAEULE3 SAEULE1+2 -#define ROHAST 143 -#define ROHSTAMM ROHAST+1 -#define ROHSTEIN ROHAST+2 -#define ROHAXT ROHAST+3 -#define ROHBLATT ROHAST+4 -#define ROHEGGE ROHAST+5 -#define ROHLIANE ROHAST+6 -#define ROHANGEL ROHAST+7 -#define ROHHAMMER ROHAST+8 -#define ROHFERNROHR ROHAST+9 -#define ROHSTREICHHOLZ ROHAST+10 -#define ROHSCHAUFEL ROHAST+11 -#define ROHKARTE ROHAST+12 -#define ROHSCHLEUDER ROHAST+13 -#define ROEMISCH1 157 -#define ROEMISCH2 ROEMISCH1+1 -#define INVPAPIER 159 -#define RING INVPAPIER+1 -#define KREUZ INVPAPIER+2 -#define JA INVPAPIER+3 -#define NEIN INVPAPIER+4 -#define SONNE INVPAPIER+5 -#define PROGRAMMIERUNG 165 -#define DIRKPLATE PROGRAMMIERUNG+1 -#define MATTHIAS PROGRAMMIERUNG+2 -#define TOBIAS PROGRAMMIERUNG+3 -#define SIGRID PROGRAMMIERUNG+4 -#define SOUNDS PROGRAMMIERUNG+5 -#define PATHFINDING PROGRAMMIERUNG+6 -#define JOHN PROGRAMMIERUNG+7 -#define HEIKO PROGRAMMIERUNG+8 -#define GISELA PROGRAMMIERUNG+9 -#define WEITEREHILFE PROGRAMMIERUNG+10 -#define TESTSPIELER PROGRAMMIERUNG+11 -#define SCHWARZ PROGRAMMIERUNG+12 -#define MUSIK PROGRAMMIERUNG+13 -#define DPSOFTWARE PROGRAMMIERUNG+14 -#define BILDANZ DPSOFTWARE+1 //Wieviele Bilder +const unsigned int MEERWELLEN = 0; +const unsigned int FLUSS1 = MEERWELLEN + 1; +const unsigned int FLUSS2 = MEERWELLEN + 2; +const unsigned int FLUSS3 = MEERWELLEN + 3; +const unsigned int FLUSS4 = MEERWELLEN + 4; +const unsigned int FLUSS5 = MEERWELLEN + 5; +const unsigned int FLUSS6 = MEERWELLEN + 6; +const unsigned int FLUSS7 = MEERWELLEN + 7; +const unsigned int FLUSS8 = MEERWELLEN + 8; +const unsigned int FLUSS9 = MEERWELLEN + 9; +const unsigned int FLUSS10 = MEERWELLEN + 10; +const unsigned int MUENDUNG1 = MEERWELLEN + 11; +const unsigned int MUENDUNG2 = MEERWELLEN + 12; +const unsigned int MUENDUNG3 = MEERWELLEN + 13; +const unsigned int MUENDUNG4 = MEERWELLEN + 14; +const unsigned int QUELLE1 = MEERWELLEN + 15; +const unsigned int QUELLE2 = MEERWELLEN + 16; //Wenn hier was eingefügt wird, auch die FillRohr ändern!! +const unsigned int QUELLE3 = MEERWELLEN + 17; +const unsigned int QUELLE4 = MEERWELLEN + 18; +const unsigned int SCHLEUSE1 = MEERWELLEN + 19; +const unsigned int SCHLEUSE2 = MEERWELLEN + 20; +const unsigned int SCHLEUSE3 = MEERWELLEN + 21; +const unsigned int SCHLEUSE4 = MEERWELLEN + 22; +const unsigned int SCHLEUSE5 = MEERWELLEN + 23; +const unsigned int SCHLEUSE6 = MEERWELLEN + 24; +const unsigned int BAUM1 = 25; +const unsigned int BAUM2 = BAUM1 + 1; +const unsigned int BAUM3 = BAUM1 + 2; +const unsigned int BAUM4 = BAUM1 + 3; +const unsigned int BUSCH = BAUM1 + 4; +const unsigned int BAUM1DOWN = BAUM1 + 5; +const unsigned int BAUM2DOWN = BAUM1 + 6; +const unsigned int BAUM3DOWN = BAUM1 + 7; +const unsigned int BAUM4DOWN = BAUM1 + 8; +const unsigned int BAUMGROSS = BAUM1 + 9; +const unsigned int FEUER = BAUM1 + 10; +const unsigned int WRACK = BAUM1 + 11; +const unsigned int WRACK2 = BAUM1 + 12; +const unsigned int FELD = 38; +const unsigned int ZELT = FELD + 1; +const unsigned int BOOT = FELD + 2; +const unsigned int ROHR = FELD + 3; +const unsigned int SOS = FELD + 4; +const unsigned int HAUS1 = FELD + 5; +const unsigned int HAUS2 = FELD + 6; +const unsigned int HAUS3 = FELD + 7; +const unsigned int FEUERSTELLE = FELD + 8; +const unsigned int CUPFEIL = 47; +const unsigned int CURICHTUNG = CUPFEIL + 1; +const unsigned int CUUHR = CUPFEIL + 2; +const unsigned int GUYLINKS = 50; +const unsigned int GUYOBEN = GUYLINKS + 1; +const unsigned int GUYRECHTS = GUYLINKS + 2; +const unsigned int GUYUNTEN = GUYLINKS + 3; +const unsigned int GUYSUCHEN = GUYLINKS + 4; +const unsigned int GUYESSEN = GUYLINKS + 5; +const unsigned int GUYTRINKEN = GUYLINKS + 6; +const unsigned int GUYFAELLEN = GUYLINKS + 7; +const unsigned int GUYWARTEN = GUYLINKS + 8; +const unsigned int GUYFELD = GUYLINKS + 9; +const unsigned int GUYBINDENOBEN = GUYLINKS + 10; +const unsigned int GUYBINDENUNTEN = GUYLINKS + 11; +const unsigned int GUYSCHLAFEN = GUYLINKS + 12; +const unsigned int GUYSCHLAFZELT = GUYLINKS + 13; +const unsigned int GUYGEHINZELT = GUYLINKS + 14; +const unsigned int GUYHINLEGEN = GUYLINKS + 15; +const unsigned int GUYAUFSTEHEN = GUYLINKS + 16; +const unsigned int GUYANGELN1LINKS = GUYLINKS + 17; +const unsigned int GUYANGELN1OBEN = GUYLINKS + 18; +const unsigned int GUYANGELN1RECHTS = GUYLINKS + 19; +const unsigned int GUYANGELN1UNTEN = GUYLINKS + 20; +const unsigned int GUYANGELN2LINKS = GUYLINKS + 21; +const unsigned int GUYANGELN2OBEN = GUYLINKS + 22; +const unsigned int GUYANGELN2RECHTS = GUYLINKS + 23; +const unsigned int GUYANGELN2UNTEN = GUYLINKS + 24; +const unsigned int GUYANGELN3LINKS = GUYLINKS + 25; +const unsigned int GUYANGELN3OBEN = GUYLINKS + 26; +const unsigned int GUYANGELN3RECHTS = GUYLINKS + 27; +const unsigned int GUYANGELN3UNTEN = GUYLINKS + 28; +const unsigned int GUYSCHLAGEN = GUYLINKS + 29; +const unsigned int GUYBOOTLINKS = GUYLINKS + 30; +const unsigned int GUYBOOTOBEN = GUYLINKS + 31; +const unsigned int GUYBOOTRECHTS = GUYLINKS + 32; +const unsigned int GUYBOOTUNTEN = GUYLINKS + 33; +const unsigned int GUYBOOTANGELN1 = GUYLINKS + 34; +const unsigned int GUYBOOTANGELN2 = GUYLINKS + 35; +const unsigned int GUYBOOTANGELN3 = GUYLINKS + 36; +const unsigned int GUYTAUCHEN1 = GUYLINKS + 37; +const unsigned int GUYTAUCHEN2 = GUYLINKS + 38; +const unsigned int GUYTAUCHEN3 = GUYLINKS + 39; +const unsigned int GUYHAMMER = GUYLINKS + 40; +const unsigned int GUYKLETTERN1 = GUYLINKS + 41; +const unsigned int GUYKLETTERN2 = GUYLINKS + 42; +const unsigned int GUYHAMMER2 = GUYLINKS + 43; +const unsigned int GUYGEHINHAUS = GUYLINKS + 44; +const unsigned int GUYSCHLAFHAUS = GUYLINKS + 45; +const unsigned int GUYGEHAUSHAUS = GUYLINKS + 46; +const unsigned int GUYANZUENDEN = GUYLINKS + 47; +const unsigned int GUYAUSSCHAU = GUYLINKS + 48; +const unsigned int GUYSCHAUFELN = GUYLINKS + 49; +const unsigned int GUYSCHIFF = GUYLINKS + 50; +const unsigned int GUYSCHIFFDOWN = GUYLINKS + 51; +const unsigned int GUYSCHWIMMEN = GUYLINKS + 52; +const unsigned int GUYTOD = GUYLINKS + 53; +const unsigned int GUYBOOTTOD = GUYLINKS + 54; +const unsigned int GUYBOOTWARTEN = GUYLINKS + 55; +const unsigned int GUYSCHLEUDER = GUYLINKS + 56; +const unsigned int BUTTGITTER = 107; +const unsigned int BUTTANIMATION = BUTTGITTER + 1; +const unsigned int BUTTBEENDEN = BUTTGITTER + 2; +const unsigned int BUTTNEU = BUTTGITTER + 3; +const unsigned int BUTTTAGNEU = BUTTGITTER + 4; +const unsigned int BUTTSOUND = BUTTGITTER + 5; +const unsigned int BUTTAKTION = BUTTGITTER + 6; +const unsigned int BUTTBAUEN = BUTTGITTER + 7; +const unsigned int BUTTINVENTAR = BUTTGITTER + 8; +const unsigned int BUTTWEITER = BUTTGITTER + 9; +const unsigned int BUTTSTOP = BUTTGITTER + 10; +const unsigned int BUTTABLEGEN = BUTTGITTER + 11; +const unsigned int BUTTSUCHEN = 119; +const unsigned int BUTTESSEN = BUTTSUCHEN + 1; +const unsigned int BUTTSCHLAFEN = BUTTSUCHEN + 2; +const unsigned int BUTTFAELLEN = BUTTSUCHEN + 3; +const unsigned int BUTTANGELN = BUTTSUCHEN + 4; +const unsigned int BUTTANZUENDEN = BUTTSUCHEN + 5; +const unsigned int BUTTAUSSCHAU = BUTTSUCHEN + 6; +const unsigned int BUTTSCHATZKARTE = BUTTSUCHEN + 7; +const unsigned int BUTTSCHATZ = BUTTSUCHEN + 8; +const unsigned int BUTTSCHLEUDER = BUTTSUCHEN + 9; +const unsigned int BUTTZELT = 129; +const unsigned int BUTTFELD = BUTTZELT + 1; +const unsigned int BUTTBOOT = BUTTZELT + 2; +const unsigned int BUTTROHR = BUTTZELT + 3; +const unsigned int BUTTSOS = BUTTZELT + 4; +const unsigned int BUTTHAUS1 = BUTTZELT + 5; +const unsigned int BUTTHAUS2 = BUTTZELT + 6; +const unsigned int BUTTHAUS3 = BUTTZELT + 7; +const unsigned int BUTTFEUERST = BUTTZELT + 8; +const unsigned int BUTTFRAGEZ = BUTTZELT + 9; +const unsigned int BUTTDESTROY = BUTTZELT + 10; +const unsigned int SAEULE1 = 140; +const unsigned int SAEULE2 = SAEULE1 + 1; +const unsigned int SAEULE3 = SAEULE1 + 2; +const unsigned int ROHAST = 143; +const unsigned int ROHSTAMM = ROHAST + 1; +const unsigned int ROHSTEIN = ROHAST + 2; +const unsigned int ROHAXT = ROHAST + 3; +const unsigned int ROHBLATT = ROHAST + 4; +const unsigned int ROHEGGE = ROHAST + 5; +const unsigned int ROHLIANE = ROHAST + 6; +const unsigned int ROHANGEL = ROHAST + 7; +const unsigned int ROHHAMMER = ROHAST + 8; +const unsigned int ROHFERNROHR = ROHAST + 9; +const unsigned int ROHSTREICHHOLZ = ROHAST + 10; +const unsigned int ROHSCHAUFEL = ROHAST + 11; +const unsigned int ROHKARTE = ROHAST + 12; +const unsigned int ROHSCHLEUDER = ROHAST + 13; +const unsigned int ROEMISCH1 = 157; +const unsigned int ROEMISCH2 = ROEMISCH1 + 1; +const unsigned int INVPAPIER = 159; +const unsigned int RING = INVPAPIER + 1; +const unsigned int KREUZ = INVPAPIER + 2; +const unsigned int JA = INVPAPIER + 3; +const unsigned int NEIN = INVPAPIER + 4; +const unsigned int SONNE = INVPAPIER + 5; +const unsigned int PROGRAMMIERUNG = 165; +const unsigned int DIRKPLATE = PROGRAMMIERUNG + 1; +const unsigned int MATTHIAS = PROGRAMMIERUNG + 2; +const unsigned int TOBIAS = PROGRAMMIERUNG + 3; +const unsigned int SIGRID = PROGRAMMIERUNG + 4; +const unsigned int SOUNDS = PROGRAMMIERUNG + 5; +const unsigned int PATHFINDING = PROGRAMMIERUNG + 6; +const unsigned int JOHN = PROGRAMMIERUNG + 7; +const unsigned int HEIKO = PROGRAMMIERUNG + 8; +const unsigned int GISELA = PROGRAMMIERUNG + 9; +const unsigned int WEITEREHILFE = PROGRAMMIERUNG + 10; +const unsigned int TESTSPIELER = PROGRAMMIERUNG + 11; +const unsigned int SCHWARZ = PROGRAMMIERUNG + 12; +const unsigned int MUSIK = PROGRAMMIERUNG + 13; +const unsigned int DPSOFTWARE = PROGRAMMIERUNG + 14; +const unsigned int BILDANZ = DPSOFTWARE + 1; //Wieviele Bilder //Sounds -#define WAVNICHTS 0 -#define WAVSTURM 1 -#define WAVSCHWIMMEN WAVSTURM+1 -#define WAVPLATSCH WAVSTURM+2 -#define WAVFAELLEN WAVSTURM+3 -#define WAVSCHLAGEN WAVSTURM+4 -#define WAVSCHLEUDER WAVSTURM+5 -#define WAVSCHAUFELN WAVSTURM+6 -#define WAVHAMMER WAVSTURM+7 -#define WAVCRASH WAVSTURM+8 -#define WAVSCHNARCHEN WAVSTURM+9 -#define WAVTRINKEN WAVSTURM+10 -#define WAVKNISTERN WAVSTURM+11 -#define WAVANGEL WAVSTURM+12 -#define WAVWALD 14 -#define WAVFEUER WAVWALD+1 -#define WAVBRANDUNG WAVWALD+2 -#define WAVBAUMFAELLT WAVWALD+3 -#define WAVFLUSS WAVWALD+4 -#define WAVKLICK 19 -#define WAVKLICK2 WAVKLICK+1 -#define WAVLOGO WAVKLICK+2 -#define WAVABSPANN WAVKLICK+3 -#define WAVWOLF WAVKLICK+4 -#define WAVERFINDUNG WAVKLICK+5 -#define WAVANZ WAVERFINDUNG+1 //Anzahl der Sounds +const unsigned int WAVNICHTS = 0; +const unsigned int WAVSTURM = 1; +const unsigned int WAVSCHWIMMEN = WAVSTURM + 1; +const unsigned int WAVPLATSCH = WAVSTURM + 2; +const unsigned int WAVFAELLEN = WAVSTURM + 3; +const unsigned int WAVSCHLAGEN = WAVSTURM + 4; +const unsigned int WAVSCHLEUDER = WAVSTURM + 5; +const unsigned int WAVSCHAUFELN = WAVSTURM + 6; +const unsigned int WAVHAMMER = WAVSTURM + 7; +const unsigned int WAVCRASH = WAVSTURM + 8; +const unsigned int WAVSCHNARCHEN = WAVSTURM + 9; +const unsigned int WAVTRINKEN = WAVSTURM + 10; +const unsigned int WAVKNISTERN = WAVSTURM + 11; +const unsigned int WAVANGEL = WAVSTURM + 12; +const unsigned int WAVWALD = 14; +const unsigned int WAVFEUER = WAVWALD + 1; +const unsigned int WAVBRANDUNG = WAVWALD + 2; +const unsigned int WAVBAUMFAELLT = WAVWALD + 3; +const unsigned int WAVFLUSS = WAVWALD + 4; +const unsigned int WAVKLICK = 19; +const unsigned int WAVKLICK2 = WAVKLICK + 1; +const unsigned int WAVLOGO = WAVKLICK + 2; +const unsigned int WAVABSPANN = WAVKLICK + 3; +const unsigned int WAVWOLF = WAVKLICK + 4; +const unsigned int WAVERFINDUNG = WAVKLICK + 5; +const unsigned int WAVANZ = WAVERFINDUNG + 1; //Anzahl der Sounds //Aktionen -#define AKNICHTS 0 -#define AKSUCHEN 1 -#define AKESSEN 2 -#define AKTRINKEN 3 -#define AKFAELLEN 4 -#define AKFELD 5 -#define AKTAGENDE 6 -#define AKGERETTET 7 -#define AKZELT 8 -#define AKSCHLAFEN 9 -#define AKABBRUCH 10 -#define AKANGELN 11 -#define AKBOOT 12 -#define AKABLEGEN 13 -#define AKANLEGEN 14 -#define AKROHR 15 -#define AKDESTROY 16 -#define AKSOS 17 -#define AKHAUS1 18 -#define AKHAUS2 19 -#define AKHAUS3 20 -#define AKFEUERSTELLE 21 -#define AKANZUENDEN 22 -#define AKAUSSCHAU 23 -#define AKSCHATZ 24 -#define AKINTRO 25 -#define AKSCHLEUDER 26 -#define AKSPIELVERLASSEN 27 -#define AKNEUBEGINNEN 28 -#define AKTOD 29 -#define AKTAGNEUBEGINNEN 30 - -//Menüs -#define MEKEINS 0 -#define MEAKTION 1 -#define MEBAUEN 2 -#define MEINVENTAR 3 +const unsigned int AKNICHTS = 0; +const unsigned int AKSUCHEN = 1; +const unsigned int AKESSEN = 2; +const unsigned int AKTRINKEN = 3; +const unsigned int AKFAELLEN = 4; +const unsigned int AKFELD = 5; +const unsigned int AKTAGENDE = 6; +const unsigned int AKGERETTET = 7; +const unsigned int AKZELT = 8; +const unsigned int AKSCHLAFEN = 9; +const unsigned int AKABBRUCH = 10; +const unsigned int AKANGELN = 11; +const unsigned int AKBOOT = 12; +const unsigned int AKABLEGEN = 13; +const unsigned int AKANLEGEN = 14; +const unsigned int AKROHR = 15; +const unsigned int AKDESTROY = 16; +const unsigned int AKSOS = 17; +const unsigned int AKHAUS1 = 18; +const unsigned int AKHAUS2 = 19; +const unsigned int AKHAUS3 = 20; +const unsigned int AKFEUERSTELLE = 21; +const unsigned int AKANZUENDEN = 22; +const unsigned int AKAUSSCHAU = 23; +const unsigned int AKSCHATZ = 24; +const unsigned int AKINTRO = 25; +const unsigned int AKSCHLEUDER = 26; +const unsigned int AKSPIELVERLASSEN = 27; +const unsigned int AKNEUBEGINNEN = 28; +const unsigned int AKTOD = 29; +const unsigned int AKTAGNEUBEGINNEN = 30; + +//Menüs +const unsigned int MEKEINS = 0; +const unsigned int MEAKTION = 1; +const unsigned int MEBAUEN = 2; +const unsigned int MEINVENTAR = 3; //Textfelder -#define TXTTEXTFELD 0 -#define TXTFPS 1 -#define TXTTAGESZEIT 2 -#define TXTCHANCE 3 -#define TXTPAPIER 4 //Muß!!! als letztes stehen -#define TEXTANZ 5 //Wieviele Textbreiche +const unsigned int TXTTEXTFELD = 0; +const unsigned int TXTFPS = 1; +const unsigned int TXTTAGESZEIT = 2; +const unsigned int TXTCHANCE = 3; +const unsigned int TXTPAPIER = 4; //Muß!!! als letztes stehen +const unsigned int TEXTANZ = 5; //Wieviele Textbreiche //Resourcen -#define WASSER 0 -#define NAHRUNG 1 -#define GESUNDHEIT 2 - -//Spielzustände -#define SZNICHTS 0 -#define SZINTRO 1 -#define SZSPIEL 2 -#define SZABSPANN 3 -#define SZGERETTET 4 -#define SZLOGO 5 - -extern "C" +const unsigned int WASSER = 0; +const unsigned int NAHRUNG = 1; +const unsigned int GESUNDHEIT = 2; + +//Spielzustände +const unsigned int SZNICHTS = 0; +const unsigned int SZINTRO = 1; +const unsigned int SZSPIEL = 2; +const unsigned int SZABSPANN = 3; +const unsigned int SZGERETTET = 4; +const unsigned int SZLOGO = 5; + +extern "C" #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif @@ -310,7 +310,7 @@ extern "C" #include #include #include -#include //Fürs Random +#include //Fürs Random #include #include @@ -325,206 +325,216 @@ using namespace std; //Deklarationen -void InitDDraw(); //DirectDraw initialisieren -void InitDInput(); //DirectInput initialisieren -void InitDSound(); //DirectSound initialisieren -void CheckMouse(); //Mouse nachprüfen -void SetAcquire(); //Maus aktivieren -void NeuesSpiel(bool neu); // Neues Spiel starten +namespace Direct +{ + void InitDDraw(); // DirectDraw initialisieren + void InitDInput(); // DirectInput initialisieren + void InitDSound(); // DirectSound initialisieren + void SetAcquire(); // Maus aktivieren + + // DirectDraw + LPDIRECTDRAW4 lpDD = NULL; // DirectDraw object + LPDIRECTDRAWSURFACE4 lpDDSPrimary = NULL; // DirectDraw primary surface + LPDIRECTDRAWSURFACE4 lpDDSBack = NULL; // DirectDraw back surface + LPDIRECTDRAWSURFACE4 lpDDSMisc = NULL; // DirectDraw Bilder surface + LPDIRECTDRAWSURFACE4 lpDDSPanel = NULL; // DirectDraw Panel surface + LPDIRECTDRAWSURFACE4 lpDDSGuyAni = NULL; // DirectDraw GuyAni surface + LPDIRECTDRAWSURFACE4 lpDDSAnimation = NULL; // DirectDraw Animation surface + LPDIRECTDRAWSURFACE4 lpDDSKarte = NULL; // DirectDraw MiniMap surface + LPDIRECTDRAWSURFACE4 lpDDSSchrift = NULL; // DirectDraw Schrift surface + LPDIRECTDRAWSURFACE4 lpDDSSchrift1 = NULL; // DirectDraw Schrift1 surface + LPDIRECTDRAWSURFACE4 lpDDSSchrift2 = NULL; // DirectDraw Schrift2 surface + LPDIRECTDRAWSURFACE4 lpDDSTextFeld = NULL; // DirectDraw TextFeld surface + LPDIRECTDRAWSURFACE4 lpDDSPapier = NULL; // DirectDraw Paier surface + LPDIRECTDRAWSURFACE4 lpDDSBaum = NULL; // DirectDraw Bäume surface + LPDIRECTDRAWSURFACE4 lpDDSBau = NULL; // DirectDraw Bauwerke surface + LPDIRECTDRAWSURFACE4 lpDDSCredits = NULL; // DirectDraw Credits surface + LPDIRECTDRAWSURFACE4 lpDDSLogo = NULL; // DirectDraw Logo surface + LPDIRECTDRAWSURFACE4 lpDDSCursor = NULL; // DirectDraw Cursor surface + LPDIRECTDRAWSURFACE4 lpDDSButtons = NULL; // DirectDraw Buttons surface + LPDIRECTDRAWSURFACE4 lpDDSInventar = NULL; // DirectDraw Inventar surface + LPDIRECTDRAWSURFACE4 lpDDSScape = NULL; // DirectDraw Landschaft surface + LPDIRECTDRAWSURFACE4 lpDDSSchatzkarte = NULL; // SchatzkartenSurface + LPDIRECTDRAWPALETTE lpDDPal = NULL; // DirectDraw palette + DDBLTFX ddbltfx; // DirectDraw Effekte + DDPIXELFORMAT ddpf; + DDSURFACEDESC2 ddsd, ddsd2; // Zwischenspeicher der SurfaceEigenschaften + + LPDIRECTDRAWGAMMACONTROL lpDDGammaControl = NULL; // Die drei sind für das Gammaablenden + DDGAMMARAMP DDGammaRamp; + DDGAMMARAMP DDGammaOld; + + // Directinput + IDirectInput* g_pDI = NULL; + IDirectInputDevice* g_pMouse = NULL; + IDirectInputDevice* g_pKey = NULL; + HANDLE g_hMouseEvent = NULL; + HINSTANCE g_hInst = NULL; + BOOL MouseInit = false; + + // DirectSound + LPDIRECTSOUND8 lpds; // DirectSoundObjekt + DSBUFFERDESC dsbdesc; + LPDIRECTSOUNDBUFFER lpdsb; + LPDIRECTSOUNDBUFFER lpdsbPrimary; + LPDIRECTSOUNDBUFFER lpdsbWav[WAVANZ]; // Wavedateispeicher +} + +namespace Sound +{ + void LoadSound(short Sound); // Lädt einen Sound in den Speicher + void PlaySound(short Sound, short Volume); // Spiel eine Wavedatei mit Prozentualer Lautstärke + void StopSound(short Sound); // Stoppt ein Sound +} + +namespace Game +{ + void NeuesSpiel(bool neu); // Neues Spiel starten + void InitStructs(); // Initialisiert die Structs + void SaveGame(); // Speichert den Spielstand + bool LoadGame(); // Lädt den Spielstand +} + void Generate(); // Kacheln in den Speicher zeichnen void Compute(short MinGroesse, short MaxGroesse); //Zufallslandschaft erzeugen void Zeige(); // Landschaft anzeigen -void ZeigeIntro(); // Für das Intro zuständig -void ZeigeAbspann(); // Für den Abspann +void ZeigeIntro(); // Für das Intro zuständig +void ZeigeAbspann(); // Für den Abspann void ZeigeLogo(); // Zeigt das Logo void ZeichneObjekte(); // Alles Landschaftsdetails zeichnen, die nicht im Speicher sind void ZeichneGuy(); // Zeichnet die Spielfigur void ZeichnePanel(); // Zeichnet die Karte -void ZeichneBilder(short x, short y, short i,RECT Ziel, bool Reverse, short Frucht); // Zeichnet die Bmp-Bilder -void Meer(); // Mit Meer aufüllen -void Fluss(); // Erstellt einen Fluß -bool CheckFluss(short x, short y); //Für FLuss() -void Baeume(short Prozent); // Verteilt die Bäume auf Insel +void ZeichneBilder(short x, short y, short i, RECT Ziel, bool Reverse, short Frucht); // Zeichnet die Bmp-Bilder +void Meer(); // Mit Meer aufüllen +void Fluss(); // Erstellt einen Fluß +bool CheckFluss(short x, short y); //Für FLuss() +void Baeume(short Prozent); // Verteilt die Bäume auf Insel void CalcKoor(); // Bildschirmkoordinaten der Kacheln berechnnen; void CheckMouse(); // Maus abfragen short CheckKey(); // Tastatur abfragen -void MouseInSpielflaeche(short Button,short Push, short xDiff, short yDiff); // Falls die Maus in der Spielfäche ist -void MouseInPanel(short Button,short Push); // Falls die Maus im Panel ist +void MouseInSpielflaeche(short Button, short Push, short xDiff, short yDiff); // Falls die Maus in der Spielfäche ist +void MouseInPanel(short Button, short Push); // Falls die Maus im Panel ist bool InDreieck(short X, short Y, short X0, short Y0, short X1, short Y1, short X3, short Y3); -bool InRect(short x,short y, RECT rcRect); //Ist ein Punkt in einem Rechteck -inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b); // Rechnet 24Bit RGB in 16 Bit um (Für ddbltfx.dwFillColor) +bool InRect(short x, short y, RECT rcRect); //Ist ein Punkt in einem Rechteck +inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b); // Rechnet 24Bit RGB in 16 Bit um (Für ddbltfx.dwFillColor) void MarkRoute(bool Mark); //Markiert die Route bool FindTheWay(); //PathFinding short RotateRight(short Dir); //Richtungskoordinate rechtsrum umrechnen void SortRoute(); //Die Route in die richtige Reihenfolge bringen -bool CheckRoute(short x, short y, bool save); //Nachprüfen ob auf aktuellem Teil in der Route ist +bool CheckRoute(short x, short y, bool save); //Nachprüfen ob auf aktuellem Teil in der Route ist void ShortRoute(short Zielx, short Ziely); //Macht eine Mini-Route von den Guy.Position zu den Zielk. void CalcGuyKoor(); //Berechnet die neuen Koordinaten der Spielfigur void Animationen(); //Startet die einzelnen Animationen -void CalcRect(RECT rcBereich); //Beschneidet das BlitRechteck so, daß es nur innerhalb des Bereiches gemalt wird -void DrawString(char *string,short x,short y, short Art); //Schreibt einen String an eine gewünschte Stelle -short DrawText(int TEXT,short Bereich, short Art); //Schreibt einen Text in ein Rechteck -short Refresh(); //Wird ständig ausgeführt und aktuallisiert alles; +void CalcRect(RECT rcBereich); //Beschneidet das BlitRechteck so, daß es nur innerhalb des Bereiches gemalt wird +void DrawString(char *string, short x, short y, short Art); //Schreibt einen String an eine gewünschte Stelle +short DrawText(int TEXT, short Bereich, short Art); //Schreibt einen Text in ein Rechteck +short Refresh(); //Wird ständig ausgeführt und aktuallisiert alles; void LimitScroll(); //Verhindert das Scrollen aus dem Bild -void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon, LPDIRECTDRAWSURFACE4 lpDDSNach,bool Transp); -void ZeichnePapier(); //Zeichnet das Papier für den Text -void Textloeschen(short Bereich); //Löscht einen Breich in der Textsurface -void AddTime(short h,short m); //Addiert Stunden und Minuten zur TagesZeit -void AddResource(short Art, float Anzahl); //Fügt wassser usw hinzu +void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon, LPDIRECTDRAWSURFACE4 lpDDSNach, bool Transp); +void ZeichnePapier(); //Zeichnet das Papier für den Text +void Textloeschen(short Bereich); //Löscht einen Breich in der Textsurface +void AddTime(short h, short m); //Addiert Stunden und Minuten zur TagesZeit +void AddResource(short Art, float Anzahl); //Fügt wassser usw hinzu void Entdecken(); //Deckt die Kacheln neben der Spielfigur auf -void InitStructs(); //Initialisiert die Structs void Event(short Eventnr); //Startet die Aktionsprozeduren -void ButtAniAus(); //Schaltet alle Knopfanimationien aus (für MouseInPanel) -void CheckBenutze(short Objekt); //Prüft ob die richtigen Rohstoffe benutzt wurden (im Inventar) -bool CheckRohstoff(); //Prüft die Rohstoffe die zum Bau benötigt werden -void MakeRohString(short x,short y, short Objekt); //Schreibt in den Rohstring die benötigten Rohstoffe -void CheckSpzButton(); //Wechselt die Knöpfe (Stop,Weiter,Ablegen usw.) -void ChangeBootsFahrt(); //Ändert die notwendigen Sachen für eine Bootsfahrt (und zurück); -void FillRohr(); //Überprüft die Röhren, ob sie an Wassernetz angeschlossen sind -void CheckRohr(short x, short y); //Rekursive Procedure für FillRohr(); -void Fade(short RP,short GP,short BP); //Bild abdunkeln mittels Gamma-Werten (in Prozent pro Farbwert) +void ButtAniAus(); //Schaltet alle Knopfanimationien aus (für MouseInPanel) +void CheckBenutze(short Objekt); //Prüft ob die richtigen Rohstoffe benutzt wurden (im Inventar) +bool CheckRohstoff(); //Prüft die Rohstoffe die zum Bau benötigt werden +void MakeRohString(short x, short y, short Objekt); //Schreibt in den Rohstring die benötigten Rohstoffe +void CheckSpzButton(); //Wechselt die Knöpfe (Stop,Weiter,Ablegen usw.) +void ChangeBootsFahrt(); //Ändert die notwendigen Sachen für eine Bootsfahrt (und zurück); +void FillRohr(); //Ãœberprüft die Röhren, ob sie an Wassernetz angeschlossen sind +void CheckRohr(short x, short y); //Rekursive Procedure für FillRohr(); +void Fade(short RP, short GP, short BP); //Bild abdunkeln mittels Gamma-Werten (in Prozent pro Farbwert) void Schatz(); //Schatz vergraben und Schatzkarte malen void DrawSchatzkarte(); //Schatzkarte malen void PutPixel(short x, short y, DWORD color, LPDDSURFACEDESC2 ddsd); //Schreibt Pixel in eine Surface (davor lock()) void GetPixel(short x, short y, LPDDSURFACEDESC2 ddsd); //Das Ergebnis wird in rgbStruct gespeichert void Piratenwrack(); //Setzt das Piratenwrack -void LoadSound(short Sound); //Lädt einen Sound in den Speicher -void PlaySound(short Sound, short Volume);//Spiel eine Wavedatei mit Prozentualer Lautstärke -void StopSound(short Sound); //Stoppt ein Sound -void SaveGame(); //Speichert den Spielstand -bool LoadGame(); //Lädt den Spielstand -void AbspannCalc(); //Kalkuliert die Koordinaten für den Abspann +void AbspannCalc(); //Kalkuliert die Koordinaten für den Abspann void AbspannBlt(short Bild, short Prozent); //Zeichnet die Bilder im Abspann +namespace Action +{ + //Aktionen + void AkSuchen(); //Kacheln durchsuchen + void AkEssen(); //Früchte essen + void AkTrinken(); //Wasser trinken + void AkFaellen(); //Bäume fällen + void AkFeld(); //Feld anlegen + void AkTagEnde(); //Wenn der Tag zu Ende ist + void AkGerettet(); //Wenn man gerettet wird + void AkZelt(); //Zelt bauen + void AkSchlafen(); //Schlafen + void AkAbbruch(); //Aktion abbrechen + void AkAngeln(); //Aktion abbrechen + void AkBoot(); //Boot bauen + void AkAblegen(); //Vom Strand aus ins Meer ablegen + void AkAnlegen(); //Vom Meer an den Strand anlegen + void AkRohr(); //Bewässerungsrohr bauen + void AkDestroy(); //Objekt abreissen + void AkSOS(); //SOS schreiben + void AkHaus1(); //Leiter bauen + void AkHaus2(); //Plattform bauen + void AkHaus3(); //Baumhaus bauen + void AkFeuerstelle(); //Feuerstelle aufstapeln + void AkAnzuenden(); //Feuerstelle anzuenden + void AkAusschau(); //Ausschau halten + void AkSchatz(); //Nach Schatz graben + void AkIntro(); //Intro aktionen + void AkSchleuder(); //Jagdaktion + void AkSpielverlassen(); //Fragt, ob man es wirklich verlassen will + void AkNeubeginnen(); //Fragt, ob man das Spiel neu beginnen will + void AkTagNeubeginnen(); //Fragt, ob man den Tag neu beginnen will + void AkTod(); //Sterben +} -//Aktionen -void AkSuchen(); //Kacheln durchsuchen -void AkEssen(); //Früchte essen -void AkTrinken(); //Wasser trinken -void AkFaellen(); //Bäume fällen -void AkFeld(); //Feld anlegen -void AkTagEnde(); //Wenn der Tag zu Ende ist -void AkGerettet(); //Wenn man gerettet wird -void AkZelt(); //Zelt bauen -void AkSchlafen(); //Schlafen -void AkAbbruch(); //Aktion abbrechen -void AkAngeln(); //Aktion abbrechen -void AkBoot(); //Boot bauen -void AkAblegen(); //Vom Strand aus ins Meer ablegen -void AkAnlegen(); //Vom Meer an den Strand anlegen -void AkRohr(); //Bewässerungsrohr bauen -void AkDestroy(); //Objekt abreissen -void AkSOS(); //SOS schreiben -void AkHaus1(); //Leiter bauen -void AkHaus2(); //Plattform bauen -void AkHaus3(); //Baumhaus bauen -void AkFeuerstelle(); //Feuerstelle aufstapeln -void AkAnzuenden(); //Feuerstelle anzuenden -void AkAusschau(); //Ausschau halten -void AkSchatz(); //Nach Schatz graben -void AkIntro(); //Intro aktionen -void AkSchleuder(); //Jagdaktion -void AkSpielverlassen(); //Fragt, ob man es wirklich verlassen will -void AkNeubeginnen(); //Fragt, ob man das Spiel neu beginnen will -void AkTagNeubeginnen(); //Fragt, ob man den Tag neu beginnen will -void AkTod(); //Sterben - -//ddraw -LPDIRECTDRAW4 lpDD = NULL; // DirectDraw object -LPDIRECTDRAWSURFACE4 lpDDSPrimary =NULL ; // DirectDraw primary surface -LPDIRECTDRAWSURFACE4 lpDDSBack = NULL; // DirectDraw back surface -LPDIRECTDRAWSURFACE4 lpDDSMisc = NULL; // DirectDraw Bilder surface -LPDIRECTDRAWSURFACE4 lpDDSPanel = NULL; // DirectDraw Panel surface -LPDIRECTDRAWSURFACE4 lpDDSGuyAni = NULL; // DirectDraw GuyAni surface -LPDIRECTDRAWSURFACE4 lpDDSAnimation = NULL; // DirectDraw Animation surface -LPDIRECTDRAWSURFACE4 lpDDSKarte= NULL; // DirectDraw MiniMap surface -LPDIRECTDRAWSURFACE4 lpDDSSchrift= NULL; // DirectDraw Schrift surface -LPDIRECTDRAWSURFACE4 lpDDSSchrift1= NULL; // DirectDraw Schrift1 surface -LPDIRECTDRAWSURFACE4 lpDDSSchrift2= NULL; // DirectDraw Schrift2 surface -LPDIRECTDRAWSURFACE4 lpDDSTextFeld= NULL; // DirectDraw TextFeld surface -LPDIRECTDRAWSURFACE4 lpDDSPapier= NULL; // DirectDraw Paier surface -LPDIRECTDRAWSURFACE4 lpDDSBaum = NULL; // DirectDraw Bäume surface -LPDIRECTDRAWSURFACE4 lpDDSBau = NULL; // DirectDraw Bauwerke surface -LPDIRECTDRAWSURFACE4 lpDDSCredits = NULL; // DirectDraw Credits surface -LPDIRECTDRAWSURFACE4 lpDDSLogo = NULL; // DirectDraw Logo surface -LPDIRECTDRAWSURFACE4 lpDDSCursor = NULL; // DirectDraw Cursor surface -LPDIRECTDRAWSURFACE4 lpDDSButtons = NULL; // DirectDraw Buttons surface -LPDIRECTDRAWSURFACE4 lpDDSInventar = NULL; // DirectDraw Inventar surface -LPDIRECTDRAWSURFACE4 lpDDSScape= NULL; // DirectDraw Landschaft surface -LPDIRECTDRAWSURFACE4 lpDDSSchatzkarte= NULL;// SchatzkartenSurface -LPDIRECTDRAWPALETTE lpDDPal = NULL; // DirectDraw palette -DDBLTFX ddbltfx; // DirectDraw Effekte -DDPIXELFORMAT ddpf; -DDSURFACEDESC2 ddsd,ddsd2; //Zwischenspeicher der SurfaceEigenschaften - -LPDIRECTDRAWGAMMACONTROL lpDDGammaControl = NULL; //Die drei sind für das Gammaablenden -DDGAMMARAMP DDGammaRamp; -DDGAMMARAMP DDGammaOld; - - - - -// Directinput -IDirectInput* g_pDI = NULL; -IDirectInputDevice* g_pMouse = NULL; -IDirectInputDevice* g_pKey = NULL; -HANDLE g_hMouseEvent = NULL; -HINSTANCE g_hInst = NULL; -BOOL MouseInit = false; - -// DirectSound -LPDIRECTSOUND8 lpds; //DirectSoundObjekt -DSBUFFERDESC dsbdesc; -LPDIRECTSOUNDBUFFER lpdsb; -LPDIRECTSOUNDBUFFER lpdsbPrimary; -LPDIRECTSOUNDBUFFER lpdsbWav[WAVANZ]; //Wavedateispeicher - -BOOL bActive =false; // is application active? +BOOL bActive = false; // is application active? BOOL Spielzustand = SZNICHTS; // in welchem Zustand ist das Spiel? BOOL MouseAktiv = false; // Mouse angestellt? BOOL LAnimation = true; // Ist die Landschaftanimation angeschaltet? HWND hwnd; BOOL Gitter; //Gitternetz an/aus -RECT ScapeGrenze; //Diese Koordinaten zeigen die Größe der Landschaft an +RECT ScapeGrenze; //Diese Koordinaten zeigen die Größe der Landschaft an SHORT Flusslaenge[FLUSSANZAHL]; SHORT CursorTyp; //Welcher Cursortyp? -BOOL Button0down; //linke Maustaste gedrückt gehalten -BOOL Button1down; //rechte Maustaste gedrückt gehalten -SHORT RouteLaenge; //Länge +BOOL Button0down; //linke Maustaste gedrückt gehalten +BOOL Button1down; //rechte Maustaste gedrückt gehalten +SHORT RouteLaenge; //Länge SHORT RoutePunkt; //Aktueller Index in RouteKoor -FLOAT Schrittx,Schritty; //Zum Figur laufen lassen +FLOAT Schrittx, Schritty; //Zum Figur laufen lassen LONG Zeit; //Start der Sekunde SHORT Bild, LastBild; //Anzahl der Bilder in der Sekunde -RECT rcRectdes,rcRectsrc; //Ständig benötigte Variable zum Blitten -SHORT Tag,Stunden,Minuten; //Wieviel Uhr (0-12h) +RECT rcRectdes, rcRectsrc; //Ständig benötigte Variable zum Blitten +SHORT Tag, Stunden, Minuten; //Wieviel Uhr (0-12h) CHAR StdString[1024]; //Standard string -CHAR RohString[1024]; //Darin wird gespeichert, wieviel Rohstoffe noch benötigt werden +CHAR RohString[1024]; //Darin wird gespeichert, wieviel Rohstoffe noch benötigt werden SHORT PapierText; //Wieviel Papier? (in Pixel) -1 = Kein Text -SHORT HauptMenue; //Welches Menü? -SHORT TwoClicks; //Für Aktionen mit zwei Mausklicks -FLOAT Chance; //Wie groß ist die Chance am Tag gerettet zu werden +SHORT HauptMenue; //Welches Menü? +SHORT TwoClicks; //Für Aktionen mit zwei Mausklicks +FLOAT Chance; //Wie groß ist die Chance am Tag gerettet zu werden BOOL BootsFahrt; //Gerade mit dem Boot unterwegs? BOOL Nacht; //Wird die Tageszusammenfassung angezeigt? SHORT Soundzustand; //-1 = keine Soundkarte;0=kein Sound;1=Sound an BOOL Spielbeenden = false; //Wenn true wird das Spiel sofort beendet SHORT Frage; //-1=KeineFrage;0=Frage wird gestellt;1=Ja;2=Nein DOUBLE pi = 3.1415926535; //pi, was sonst -SHORT AbspannNr=0; //Zähler für Abspann -SHORT AbspannZustand=0; //Wo im Abspann -BOOL SchatzGef = false; //wurde der Schatz gefunden +SHORT AbspannNr = 0; //Zähler für Abspann +SHORT AbspannZustand = 0; //Wo im Abspann +BOOL SchatzGef = false; //wurde der Schatz gefunden // Pathfinding -short Step,Steps; +short Step, Steps; int LenMap[MAXXKACH][MAXYKACH]; //Bereiche // links, oben, rechts, unten -const RECT rcGesamt = {0, 0, MAXX, MAXY}; -const RECT rcSpielflaeche = {0, 0, MAXX-195, MAXY-20}; -const RECT rcPanel = {MAXX-205, 0, MAXX, MAXY}; -const RECT rcKarte = {MAXX-158, 23, rcKarte.left+MAXXKACH*2,rcKarte.top+MAXYKACH*2}; -const RECT rcTextFeld1 = {0, MAXY-20, MAXX-195, MAXY}; +const RECT rcGesamt = { 0, 0, MAXX, MAXY }; +const RECT rcSpielflaeche = { 0, 0, MAXX - 195, MAXY - 20 }; +const RECT rcPanel = { MAXX - 205, 0, MAXX, MAXY }; +const RECT rcKarte = { MAXX - 158, 23, rcKarte.left + MAXXKACH * 2, rcKarte.top + MAXYKACH * 2 }; +const RECT rcTextFeld1 = { 0, MAXY - 20, MAXX - 195, MAXY }; struct TEXTBEREICH { @@ -537,31 +547,31 @@ struct ZWEID short x; short y; } Camera, //aktueller Kartenausschnitt - MousePosition, // " Mauskoordinaten - RouteZiel, RouteStart, // Koordinaten des Starts und des Endes der Route - Route[MAXXKACH*MAXYKACH], // Liste der Routenpunkte - RouteKoor[2*MAXXKACH*MAXYKACH],// Liste der Routenkoordinaten - SaveRoute[MAXXKACH*MAXYKACH], //Zum zwischenspeichern der Route - NewPos, // Nur innerhalb des Pathfindings benutzt - GuyPosScreenStart, // Absolute StartPosition bei einem Schritt (Für CalcGuyKoor) - SchatzPos; //Hier ist der Schatz vergraben +MousePosition, // " Mauskoordinaten +RouteZiel, RouteStart, // Koordinaten des Starts und des Endes der Route +Route[MAXXKACH*MAXYKACH], // Liste der Routenpunkte +RouteKoor[2 * MAXXKACH*MAXYKACH],// Liste der Routenkoordinaten +SaveRoute[MAXXKACH*MAXYKACH], //Zum zwischenspeichern der Route +NewPos, // Nur innerhalb des Pathfindings benutzt +GuyPosScreenStart, // Absolute StartPosition bei einem Schritt (Für CalcGuyKoor) +SchatzPos; //Hier ist der Schatz vergraben struct RGBSTRUCT { - BYTE r,g,b; + BYTE r, g, b; } rgbStruct; //Hier werden die Farben eines Pixels zwischengespeichert -inline void DWORD2RGB(DWORD color,RGBSTRUCT *PrgbStruct); +inline void DWORD2RGB(DWORD color, RGBSTRUCT *PrgbStruct); struct GUY { bool Aktiv;//Ist er aktiv? - short Aktion; //Welche Aktion (Suchen, fischen ...) (Übergeordnet über Zustand) + short Aktion; //Welche Aktion (Suchen, fischen ...) (Ãœbergeordnet über Zustand) ZWEID Pos; // KachelPosition der Spielfigur - ZWEID PosAlt; //Die ursprünglich Position in der Kachel (für die Aktionsprozeduren) + ZWEID PosAlt; //Die ursprünglich Position in der Kachel (für die Aktionsprozeduren) ZWEID PosScreen; // Absolute Position der Spielfigur short Zustand; //Was macht er gerade? (Animation)(linkslaufen,rechtslaufen...,angeln..) - short AkNummer; //Bei welcher Aktion (für die Aktionsprozeduren) + short AkNummer; //Bei welcher Aktion (für die Aktionsprozeduren) float Resource[3]; //Wieviel Wasservorrat usw short Inventar[BILDANZ]; //Welche Rohstoffe usw. besitzt man } Guy; @@ -569,7 +579,7 @@ struct GUY struct BMP { LPDIRECTDRAWSURFACE4 Surface; //in welcher Surface gespeichert? - bool Animation; //Läuft die Animations? + bool Animation; //Läuft die Animations? short Anzahl; //Anzahl der Animationsphasen short Phase; //die aktuelle Phase RECT rcSrc; //Quelle des 1. Bildes @@ -577,18 +587,18 @@ struct BMP short Breite; //Die Breite des Bildes short Hoehe; //Die Hoehe des Bildes short Geschwindigkeit; //Wieviel Bilder/sec - short Sound; //Welcher Sound gehört dazu + short Sound; //Welcher Sound gehört dazu //zum bauen - short Rohstoff[BILDANZ]; //Anzahl des i.Rohstoffs, den man zum Bau benötigt - short AkAnzahl; //Anzahl der Aktionsfaellen, die zum Bau benötigt werden + short Rohstoff[BILDANZ]; //Anzahl des i.Rohstoffs, den man zum Bau benötigt + short AkAnzahl; //Anzahl der Aktionsfaellen, die zum Bau benötigt werden bool First; //Ist es das erstemal gebaut, dann Hilfetext } Bmp[BILDANZ]; struct WAV { char *Dateiname; //Dateiname der Wavdatei - bool Loop; //Nur einmal abspielen und ständig - short Volume; //Die Standardlautstärke in Prozent + bool Loop; //Nur einmal abspielen und ständig + short Volume; //Die Standardlautstärke in Prozent } Wav[WAVANZ]; struct ABSPANN @@ -597,100 +607,100 @@ struct ABSPANN short Bild; //welches Bild } AbspannListe[10][10]; //Namenabfolge im Abspann - -bool LineIntersect(ZWEID LineStartPos, ZWEID Pos, bool store); //Für Pathfinding (Ist eine Gerade unterbrochen?) -ZWEID GetKachel(short x,short y); // Welche Kachel ist unter den angegebenen Koordinaten -//Die Eckkoordinaten der Kacheln (Achtung: mit überlappendem Rand) +bool LineIntersect(ZWEID LineStartPos, ZWEID Pos, bool store); //Für Pathfinding (Ist eine Gerade unterbrochen?) +ZWEID GetKachel(short x, short y); // Welche Kachel ist unter den angegebenen Koordinaten + +//Die Eckkoordinaten der Kacheln (Achtung: mit überlappendem Rand) const ZWEID EckKoor[13][4] = {// 0 1 2 3 Ecke - {{-1,29}, {26,15}, {54,30}, {27,44}},//0 - {{-1,13}, {26,15}, {54,30}, {27,28}},//1 - {{-1,29}, {26,15}, {54,14}, {27,28}},//2 - {{-1,29}, {26,-1}, {54,14}, {27,44}},//3 - {{-1,13}, {26,-1}, {54,30}, {27,44}},//4 - {{-1,13}, {26,15}, {54,30}, {27,44}},//5 - {{-1,29}, {26,15}, {54,30}, {27,28}},//6 Kacheltyp - {{-1,29}, {26,15}, {54,14}, {27,44}},//7 - {{-1,29}, {26,-1}, {54,30}, {27,44}},//8 - {{-1,13}, {26,-1}, {54,14}, {27,44}},//9 - {{-1,13}, {26,-1}, {54,30}, {27,28}},//10 - {{-1,13}, {26,15}, {54,14}, {27,28}},//11 - {{-1,29}, {26,-1}, {54,14}, {27,28}},//12 - + { { -1, 29 }, { 26, 15 }, { 54, 30 }, { 27, 44 } },//0 + { { -1, 13 }, { 26, 15 }, { 54, 30 }, { 27, 28 } },//1 + { { -1, 29 }, { 26, 15 }, { 54, 14 }, { 27, 28 } },//2 + { { -1, 29 }, { 26, -1 }, { 54, 14 }, { 27, 44 } },//3 + { { -1, 13 }, { 26, -1 }, { 54, 30 }, { 27, 44 } },//4 + { { -1, 13 }, { 26, 15 }, { 54, 30 }, { 27, 44 } },//5 + { { -1, 29 }, { 26, 15 }, { 54, 30 }, { 27, 28 } },//6 Kacheltyp + { { -1, 29 }, { 26, 15 }, { 54, 14 }, { 27, 44 } },//7 + { { -1, 29 }, { 26, -1 }, { 54, 30 }, { 27, 44 } },//8 + { { -1, 13 }, { 26, -1 }, { 54, 14 }, { 27, 44 } },//9 + { { -1, 13 }, { 26, -1 }, { 54, 30 }, { 27, 28 } },//10 + { { -1, 13 }, { 26, 15 }, { 54, 14 }, { 27, 28 } },//11 + { { -1, 29 }, { 26, -1 }, { 54, 14 }, { 27, 28 } },//12 + }; - + const short Vierecke[13][4][13] = //0=Passt nicht 1=1runter 2=gleiche Hoehe 3=1hoch {// 0 1 2 3 4 5 6 7 8 9 10 11 12 - { {{2},{0},{1},{0},{2},{2},{0},{0},{2},{0},{0},{1},{1}},//0 - {{2},{1},{0},{2},{0},{0},{0},{2},{2},{0},{1},{1},{0}},//1 -/*0*/ {{2},{0},{2},{0},{1},{0},{2},{2},{0},{1},{1},{0},{0}},//2 Kante - {{2},{2},{0},{1},{0},{2},{2},{0},{0},{1},{0},{0},{1}} //3 + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } },//0 + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } },//1 + /*0*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } },//2 Kante + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } //3 }, - { {{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2},{0},{0}}, - {{2},{1},{0},{2},{0},{0},{0},{2},{2},{0},{1},{1},{0}}, -/*1*/ {{0},{2},{0},{0},{0},{2},{0},{0},{0},{0},{0},{2},{0}}, - {{3},{3},{0},{2},{0},{3},{3},{0},{0},{2},{0},{0},{2}} + { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, + /*1*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, + { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } }, - { {{2},{0},{1},{0},{2},{2},{0},{0},{2},{0},{0},{1},{1}}, - {{0},{0},{2},{0},{0},{0},{2},{0},{0},{0},{0},{0},{2}}, -/*2*/ {{3},{0},{3},{0},{2},{0},{3},{3},{0},{2},{2},{0},{0}}, - {{0},{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2},{0}} + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, + /*2*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } }, - { {{0},{0},{0},{2},{0},{0},{0},{2},{0},{2},{0},{0},{0}}, - {{3},{2},{0},{3},{0},{0},{0},{3},{3},{0},{2},{2},{0}}, -/*3*/ {{0},{0},{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2}}, - {{2},{2},{0},{1},{0},{0},{2},{0},{0},{1},{0},{0},{1}} + { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, + /*3*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } }, - { {{3},{0},{2},{0},{3},{3},{0},{0},{3},{0},{0},{2},{2}}, - {{0},{0},{0},{0},{2},{2},{0},{0},{0},{2},{0},{0},{0}}, -/*4*/ {{2},{0},{2},{0},{0},{0},{2},{2},{0},{1},{1},{0},{0}}, - {{0},{0},{0},{0},{2},{0},{0},{0},{2},{0},{2},{0},{0}} + { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + /*4*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } },// 0 1 2 3 4 5 6 7 8 9 10 11 12 - { {{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2},{0},{0}}, - {{2},{1},{0},{2},{0},{0},{0},{2},{2},{0},{1},{1},{0}}, -/*5*/ {{2},{0},{2},{0},{1},{0},{2},{2},{0},{1},{1},{0},{0}}, - {{0},{0},{0},{0},{2},{0},{0},{0},{2},{0},{2},{0},{0}} + { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, + /*5*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } }, - { {{2},{0},{1},{0},{2},{2},{0},{0},{2},{0},{0},{1},{1}}, - {{2},{1},{0},{2},{0},{0},{0},{2},{2},{0},{1},{1},{0}}, -/*6*/ {{0},{2},{0},{0},{0},{2},{0},{0},{0},{0},{0},{2},{0}}, - {{0},{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2},{0}} + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, + /*6*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } }, - { {{2},{0},{1},{0},{2},{2},{0},{0},{2},{0},{0},{1},{1}}, - {{0},{0},{2},{0},{0},{0},{2},{0},{0},{0},{0},{0},{2}}, -/*7*/ {{0},{0},{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2}}, - {{2},{2},{0},{1},{0},{2},{2},{0},{0},{1},{0},{0},{1}} + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, + /*7*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } }, - { {{0},{0},{0},{2},{0},{0},{0},{2},{0},{2},{0},{0},{0}}, - {{0},{0},{0},{0},{2},{2},{0},{0},{0},{2},{0},{0},{0}}, -/*8*/ {{2},{0},{2},{0},{1},{0},{2},{2},{0},{1},{1},{0},{0}}, - {{2},{2},{0},{1},{0},{2},{2},{0},{0},{1},{0},{0},{1}} + { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + /*8*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } }, - { {{3},{0},{2},{0},{3},{3},{0},{0},{3},{0},{0},{2},{2}}, - {{3},{2},{0},{3},{0},{0},{0},{3},{3},{0},{2},{2},{0}}, -/*9*/ {{0},{0},{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2}}, - {{0},{0},{0},{0},{2},{0},{0},{0},{2},{0},{2},{0},{0}} + { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, + { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, + /*9*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } },// 0 1 2 3 4 5 6 7 8 9 10 11 12 - { {{3},{0},{2},{0},{3},{3},{0},{0},{3},{0},{0},{2},{2}}, - {{0},{0},{0},{0},{2},{2},{0},{0},{0},{2},{0},{0},{0}}, -/*10*/ {{0},{2},{0},{0},{0},{2},{0},{0},{0},{0},{0},{2},{0}}, - {{3},{3},{0},{2},{0},{3},{3},{0},{0},{2},{0},{0},{2}} + { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + /*10*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, + { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } }, - { {{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2},{0},{0}}, - {{0},{0},{2},{0},{0},{0},{2},{0},{0},{0},{0},{0},{2}}, -/*11*/ {{3},{0},{3},{0},{2},{0},{3},{3},{0},{2},{2},{0},{0}}, - {{3},{3},{0},{2},{0},{3},{3},{0},{0},{2},{0},{0},{2}} + { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, + /*11*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, + { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } }, - { {{0},{0},{0},{2},{0},{0},{0},{2},{0},{2},{0},{0},{0}}, - {{3},{2},{0},{3},{0},{0},{0},{3},{3},{0},{2},{2},{0}}, -/*12*/ {{3},{0},{3},{0},{2},{0},{3},{3},{0},{2},{2},{0},{0}}, - {{0},{0},{2},{0},{0},{0},{0},{2},{0},{0},{0},{2},{0}} + { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, + /*12*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } }, }; - + struct SCAPE { @@ -698,2757 +708,71 @@ struct SCAPE short Art; //Sand, Moor ... short Hoehe; //Die Hoehe der Kachel bool Markiert; //Ist diese Kachel markiert? - short xScreen,yScreen; //Die Koordinaten in der Scape-Surface - bool Begehbar; //notwendig für Pathfinding + short xScreen, yScreen; //Die Koordinaten in der Scape-Surface + bool Begehbar; //notwendig für Pathfinding bool Entdeckt; //Ist dieses Feld schon aufgedeckt? short LaufZeit; //LaufZeit auf dieser Kachel (1 am schnellsten...) - short Objekt; // Welches Objekt steht drauf (z.Bsp. Flüsse) - bool Reverse; // Wird die Objektanimation umgekehrt abgespielt (für flüsse) + short Objekt; // Welches Objekt steht drauf (z.Bsp. Flüsse) + bool Reverse; // Wird die Objektanimation umgekehrt abgespielt (für flüsse) ZWEID ObPos; //Die Koordinaten des Objekts (relativ zu xScreen und yScreen) float Phase; //Welche Animationsphase oder Bildversion short AkNummer; //Welche Aktionsnummer (um Baustellen vortzusetzen) ZWEID GPosAlt; // Damit der Guy an der richtigen Stelle (x,y) weiterbaut short Rohstoff[BILDANZ]; //Anzahl des i.Rohstoffs, den man noch zum bauen braucht - float Timer; //Bis jetzt nur fürs Feuer nötig + float Timer; //Bis jetzt nur fürs Feuer nötig } Scape[MAXXKACH][MAXYKACH]; struct FLUSSLAUF { - short x,y; + short x, y; }; -FLUSSLAUF Flusslauf[FLUSSANZAHL][MAXFLUSS]; +FLUSSLAUF Flusslauf[FLUSSANZAHL][MAXFLUSS]; //Bilder -static char Misc[] = "MISC"; -static char Panel[] = "PANEL"; -static char GuyAni[] = "GUYANI"; +static char Misc[] = "MISC"; +static char Panel[] = "PANEL"; +static char GuyAni[] = "GUYANI"; static char Animation[] = "ANIMATION"; -static char Schrift1[] = "SCHRIFT1"; -static char Schrift2[] = "SCHRIFT2"; -static char TextFeld[] = "TEXTFELD"; -static char Papier[] = "PAPIER"; -static char Baum[] = "BAUM"; +static char Schrift1[] = "SCHRIFT1"; +static char Schrift2[] = "SCHRIFT2"; +static char TextFeld[] = "TEXTFELD"; +static char Papier[] = "PAPIER"; +static char Baum[] = "BAUM"; static char Cursorbmp[] = "CURSORBMP"; -static char Buttons[] = "BUTTONS"; -static char Inventarbmp[]="INVENTARBMP"; -static char Bau[] = "BAU"; -static char Credits[] = "CREDITS"; -static char Logo[] = "LOGO"; - -/* - * finiObjects - * - * finished with all objects we use; release them - */ -static void finiObjects( void ) -{ - if( lpDD != NULL ) - { - if( lpDDSPrimary != NULL ) - { - lpDDSPrimary->Release(); - lpDDSPrimary = NULL; - } - if( lpDDPal != NULL ) - { - lpDDPal->Release(); - lpDDPal = NULL; - } - lpDD->Release(); - lpDD = NULL; - } - -} /* finiObjects */ - -void InitDDraw() -{ - - DDSCAPS2 ddscaps; - HRESULT ddrval; - LPDIRECTDRAW pDD; - - /* - * create the main DirectDraw object - */ - ddrval = DirectDrawCreate( NULL, &pDD, NULL ); - if( ddrval != DD_OK ) - goto error; - ddrval= pDD->QueryInterface(IID_IDirectDraw4, (LPVOID *) & lpDD); - if (ddrval != DD_OK) - goto error;; - // Get exclusive mode - ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ); - if(ddrval != DD_OK ) - goto error; - - // Set the video mode to 800x600x16 - ddrval = lpDD->SetDisplayMode( MAXX, MAXY, 32, 0, 0); - if(ddrval != DD_OK) - { - switch(ddrval) - { - case DDERR_GENERIC: - case DDERR_INVALIDMODE: - case DDERR_INVALIDOBJECT: - case DDERR_INVALIDPARAMS: - case DDERR_LOCKEDSURFACES: - case DDERR_NOEXCLUSIVEMODE: - case DDERR_SURFACEBUSY: - case DDERR_UNSUPPORTED: - case DDERR_UNSUPPORTEDMODE: {MessageBeep(MB_OK);break;} - case DDERR_WASSTILLDRAWING: - ;} - - goto error; - } - - ZeroMemory(&ddsd2, sizeof(ddsd2)); - ddsd2.dwSize = sizeof(ddsd2); - - // Create the primary surface with 1 back buffer - ZeroMemory(&ddsd, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | - DDSCAPS_FLIP | - DDSCAPS_COMPLEX; - ddsd.dwBackBufferCount = 1; //Anzahl ?? - ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ); - if( ddrval != DD_OK ) - goto error; - - //für gamma-ablenden - lpDDSPrimary->QueryInterface(IID_IDirectDrawGammaControl,(void **)&lpDDGammaControl); - lpDDGammaControl->GetGammaRamp(0, &DDGammaOld); - lpDDGammaControl->GetGammaRamp(0, &DDGammaRamp); - - ddscaps.dwCaps = DDSCAPS_BACKBUFFER; - ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack); - - if( ddrval != DD_OK ) - goto error; - - - ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY ; - //In diese Surface sollen die Bausteine geladen werden - lpDD->CreateSurface( &ddsd, &lpDDSMisc, NULL ); - lpDDSMisc = DDLoadBitmap(lpDD, Misc, 0, 0); - DDSetColorKey(lpDDSMisc, RGB(255,0,255)); - //In diese Surface sollen das Panel geladen werden - lpDD->CreateSurface( &ddsd, &lpDDSPanel, NULL ); - lpDDSPanel = DDLoadBitmap(lpDD, Panel, 0, 0); - DDSetColorKey(lpDDSPanel, RGB(255,0,255)); - //In diese Surface sollen die Animation der Figur gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSGuyAni, NULL ); - lpDDSGuyAni = DDLoadBitmap(lpDD, GuyAni, 0, 0); - DDSetColorKey(lpDDSGuyAni, RGB(255,0,255)); - //In diese Surface sollen die Landschaftsanimationen gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSAnimation, NULL ); - lpDDSAnimation = DDLoadBitmap(lpDD, Animation, 0, 0); - DDSetColorKey(lpDDSAnimation, RGB(255,0,255)); - //In diese Surface soll die Schrift1 gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSSchrift1, NULL ); - lpDDSSchrift1 = DDLoadBitmap(lpDD, Schrift1, 0, 0); - DDSetColorKey(lpDDSSchrift1, RGB(255,0,255)); - //In diese Surface soll die Schrift2 gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSSchrift2, NULL ); - lpDDSSchrift2 = DDLoadBitmap(lpDD, Schrift2, 0, 0); - DDSetColorKey(lpDDSSchrift2, RGB(255,0,255)); - //In diese Surface soll das Papier gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSPapier, NULL ); - lpDDSPapier = DDLoadBitmap(lpDD, Papier, 0, 0); - DDSetColorKey(lpDDSPapier, RGB(255,0,255)); - //In diese Surface solln die Bäume gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSBaum, NULL ); - lpDDSBaum = DDLoadBitmap(lpDD, Baum, 0, 0); - DDSetColorKey(lpDDSBaum, RGB(255,0,255)); - //In diese Surface solln die Cursor gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSCursor, NULL ); - lpDDSCursor = DDLoadBitmap(lpDD, Cursorbmp, 0, 0); - DDSetColorKey(lpDDSCursor, RGB(255,0,255)); - //In diese Surface solln die Buttons gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSButtons, NULL ); - lpDDSButtons = DDLoadBitmap(lpDD, Buttons, 0, 0); - DDSetColorKey(lpDDSButtons, RGB(255,0,255)); - //In diese Surface solln das TextFeld gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSTextFeld, NULL ); - lpDDSTextFeld = DDLoadBitmap(lpDD, TextFeld, 0, 0); - DDSetColorKey(lpDDSTextFeld, RGB(255,0,255)); - //In diese Surface solln das Inventar gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSInventar, NULL ); - lpDDSInventar = DDLoadBitmap(lpDD, Inventarbmp, 0, 0); - DDSetColorKey(lpDDSInventar, RGB(255,0,255)); - //In diese Surface solln die Bauwerke gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSBau, NULL ); - lpDDSBau = DDLoadBitmap(lpDD, Bau, 0, 0); - DDSetColorKey(lpDDSBau, RGB(255,0,255)); - //In diese Surface solln die Credits gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSCredits, NULL ); - lpDDSCredits = DDLoadBitmap(lpDD, Credits, 0, 0); - DDSetColorKey(lpDDSCredits, RGB(0,0,0)); //Ausnahmsweise schwarz - //In diese Surface solln das Logo gespeichert werden - lpDD->CreateSurface( &ddsd, &lpDDSLogo, NULL ); - lpDDSLogo = DDLoadBitmap(lpDD, Logo, 0, 0); - - - ZeroMemory(&ddsd, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY ; - //In diese Surface soll die MiniMap gespeichert werden - ddsd.dwWidth = 2*MAXXKACH; - ddsd.dwHeight = 2*MAXYKACH; - lpDD->CreateSurface( &ddsd, &lpDDSKarte, NULL ); - //In diese Surface soll die Landschaft gespeichert werden - ddsd.dwWidth = MAXSCAPEX; - ddsd.dwHeight = MAXSCAPEY; - lpDD->CreateSurface( &ddsd, &lpDDSScape, NULL ); - //In diese Surface soll die Schrift gespeichert werden - ddsd.dwWidth = MAXX; - ddsd.dwHeight = MAXY; - lpDD->CreateSurface( &ddsd, &lpDDSSchrift, NULL ); - DDSetColorKey(lpDDSSchrift, RGB(255,0,255)); - //In diese Surface soll die Schatzkarte gespeichert werden - ddsd.dwWidth = SKARTEX; - ddsd.dwHeight = SKARTEY; - lpDD->CreateSurface( &ddsd, &lpDDSSchatzkarte, NULL ); - - - ddbltfx.dwSize = sizeof(ddbltfx); - ddpf.dwSize = sizeof(ddpf); - lpDDSSchrift->GetPixelFormat(&ddpf); - - error:;/* - finiObjects(); - MessageBox( hwnd, "DirectDraw Init FAILED", TITLE, MB_OK ); - DestroyWindow( hwnd );*/ -} - - -void InitDInput() -{ - DirectInputCreate(g_hInst, DIRECTINPUT_VERSION, &g_pDI, NULL); //DirectInput - g_pDI->CreateDevice(GUID_SysMouse, &g_pMouse, NULL); //Mousepointer - g_pMouse->SetDataFormat(&c_dfDIMouse); //MausDateninformation einstellen - g_pMouse->SetCooperativeLevel(hwnd,DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); //Exklusive Maus - - g_pDI->CreateDevice(GUID_SysKeyboard, &g_pKey, NULL); //Keyboard einrichten - g_pKey->SetDataFormat(&c_dfDIKeyboard); //Datenformat auf KeyBoard umschalten - g_pKey->SetCooperativeLevel(hwnd,DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); //KeyBoard geht nicht exklusive -} - -void InitDSound() -{ - HRESULT hr; - WAVEFORMATEX Waveformat; //Zwischenspeicher des Bufferformats - - Soundzustand = 1; //Sound anschalten - - hr = DirectSoundCreate8(NULL, &lpds, NULL); //DirectSound-Objekt machen - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - hr = IDirectSound_SetCooperativeLevel(lpds, hwnd, DSSCL_PRIORITY); //Prioritäten setzen - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - - //Primary Buffer - ZeroMemory(&dsbdesc, sizeof(DSBUFFERDESC)); - dsbdesc.dwSize = sizeof(DSBUFFERDESC); - dsbdesc.dwFlags = DSBCAPS_PRIMARYBUFFER; - hr = lpds->CreateSoundBuffer(&dsbdesc, &lpdsbPrimary, NULL); - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - - memset(&Waveformat, 0, sizeof(WAVEFORMATEX)); - Waveformat.wFormatTag = WAVE_FORMAT_PCM; - Waveformat.nChannels = 1; //stereo oder mono (1oder2) - Waveformat.nSamplesPerSec = 44100; - Waveformat.wBitsPerSample = 16; - Waveformat.nBlockAlign = Waveformat.wBitsPerSample / 8 * Waveformat.nChannels; - Waveformat.nAvgBytesPerSec = Waveformat.nSamplesPerSec * Waveformat.nBlockAlign; - hr = lpdsbPrimary->SetFormat(&Waveformat); - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - -} - -void LoadSound(short Sound) -{ - HMMIO DateiHandle; // Handle der geöffneten Datei - MMCKINFO parent, // DateiInfos - child; // DateiInfos - WAVEFORMATEX wfmtx; // wave format structure - - UCHAR *snd_buffer, // SoundZwischenspeicher - *audio_ptr_1=NULL, // Pointer1 - *audio_ptr_2=NULL; // Pointer2 - - DWORD audio_length_1=0, // Länge des 1.Buffer - audio_length_2=0; // Länge des 2.Buffer - - if(Soundzustand == -1) return; //Wenn keine Soundkarte vorhanden raus... - - // Dateiinfo initialisieren - parent.ckid = (FOURCC)0; - parent.cksize = 0; - parent.fccType = (FOURCC)0; - parent.dwDataOffset = 0; - parent.dwFlags = 0; - child = parent; - - // Datei öffnen - DateiHandle=mmioOpen(Wav[Sound].Dateiname, NULL, MMIO_READ | MMIO_ALLOCBUF); - - // Dateiinfos auslesen - parent.fccType = mmioFOURCC('W', 'A', 'V', 'E'); - mmioDescend(DateiHandle, &parent, NULL, MMIO_FINDRIFF); - child.ckid = mmioFOURCC('f', 'm', 't', ' '); - mmioDescend(DateiHandle, &child, &parent, 0); - mmioRead(DateiHandle, (char *)&wfmtx, sizeof(wfmtx)); - mmioAscend(DateiHandle, &child, 0); - child.ckid = mmioFOURCC('d', 'a', 't', 'a'); - mmioDescend(DateiHandle, &child, &parent, MMIO_FINDCHUNK); - - //Speicher für die Zwischenspeicherung besorgen - snd_buffer = (UCHAR *)malloc(child.cksize); - - //Die Wav-Daten rüberkopieren - mmioRead(DateiHandle, (char *)snd_buffer, child.cksize); - - // Die Datei schließen - mmioClose(DateiHandle, 0); - - // Den Buffer machen - dsbdesc.dwSize = sizeof(DSBUFFERDESC); - dsbdesc.dwFlags = DSBCAPS_STATIC | DSBCAPS_CTRLVOLUME; //Wenn das mixen nicht funktioniert,dass hier reaktivieren - dsbdesc.dwBufferBytes = child.cksize; - dsbdesc.lpwfxFormat = &wfmtx; - lpds->CreateSoundBuffer(&dsbdesc,&lpdsbWav[Sound],NULL); - - // Buffer locken und Daten reinkopieren und unlocken - lpdsbWav[Sound]->Lock(0,child.cksize, - (void **) &audio_ptr_1, - &audio_length_1, - (void **)&audio_ptr_2, - &audio_length_2, - DSBLOCK_FROMWRITECURSOR); - - memcpy(audio_ptr_1, snd_buffer, audio_length_1); - memcpy(audio_ptr_2, (snd_buffer+audio_length_1),audio_length_2); - lpdsbWav[Sound]->Unlock(audio_ptr_1,audio_length_1,audio_ptr_2,audio_length_2); - - // Den ZwischenSpeicherfreigeben - free(snd_buffer); - - //Die Standardlautstärke festlegen - lpdsbWav[Sound]->SetVolume((long)(-10000+100*Wav[Sound].Volume)); -} - -void PlaySound(short Sound, short Volume) -{ - short z; - - if ((Sound == 0) || (Soundzustand <= 0)) return; - - z = -10000+100*Wav[Sound].Volume; - lpdsbWav[Sound]->SetVolume((long)(-10000+(10000+z)*Volume/100)); - if (Wav[Sound].Loop) lpdsbWav[Sound]->Play(NULL,NULL,DSBPLAY_LOOPING); - else lpdsbWav[Sound]->Play(NULL,NULL,NULL); -} - -void StopSound(short Sound) -{ - if ((Sound == 0) || (Soundzustand <= 0)) return; - lpdsbWav[Sound] -> Stop(); -} - -void SaveGame() -{ - short i; - - ofstream ofs( "save.dat", ios::binary ); - if (!ofs) return; - - ofs.write( (char*)Scape, sizeof(Scape) ); - ofs.write( (char*)&Guy, sizeof(Guy) ); - ofs.write( (char*)&BootsFahrt, sizeof(BootsFahrt) ); - ofs.write( (char*)&Camera, sizeof(Camera) ); - ofs.write( (char*)&Chance, sizeof(Chance) ); - ofs.write( (char*)&Gitter, sizeof(Gitter) ); - ofs.write( (char*)&HauptMenue, sizeof(HauptMenue) ); - ofs.write( (char*)&LAnimation, sizeof(LAnimation) ); - ofs.write( (char*)&Minuten, sizeof(Minuten) ); - ofs.write( (char*)&ScapeGrenze, sizeof(ScapeGrenze) ); - ofs.write( (char*)&SchatzPos, sizeof(SchatzPos) ); - ofs.write( (char*)&Spielzustand, sizeof(Spielzustand) ); - ofs.write( (char*)&Stunden, sizeof(Stunden) ); - ofs.write( (char*)&Tag, sizeof(Tag) ); - ofs.write( (char*)TextBereich, sizeof(TextBereich) ); - ofs.write( (char*)&SchatzGef, sizeof(SchatzGef) ); - - for (i=0;iAcquire(); - if (g_pKey)g_pKey->Acquire(); - - } - else - { - g_pMouse->Unacquire(); - if (g_pKey)g_pKey->Unacquire(); - - } -} - -void InitStructs() -{ - short i,k; - - //BILD - //Standardbildinitialisierung - for (i=0;iGetBltStatus(/*DDGBS_ISBLTDONE |*/ DDGBS_CANBLT); - + if (hr == DD_OK) break; else Sleep(1); - if (z==1000) + if (z == 1000) { MessageBeep(MB_OK); break; } } - while(1) + while (1) { z++; - if (Transp) hr = lpDDSNach->Blt(&rcRectdes,lpDDSVon,&rcRectsrc,DDBLT_KEYSRC | DDBLT_WAIT,NULL); - else hr = lpDDSNach->Blt(&rcRectdes,lpDDSVon,&rcRectsrc,DDBLT_WAIT,NULL); - if (hr!=DDERR_WASSTILLDRAWING) break; - if (z==1000) + if (Transp) hr = lpDDSNach->Blt(&rcRectdes, lpDDSVon, &rcRectsrc, DDBLT_KEYSRC | DDBLT_WAIT, NULL); + else hr = lpDDSNach->Blt(&rcRectdes, lpDDSVon, &rcRectsrc, DDBLT_WAIT, NULL); + if (hr != DDERR_WASSTILLDRAWING) break; + if (z == 1000) { MessageBeep(MB_OK); break; @@ -3459,35 +783,35 @@ void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon,LPDIRECTDRAWSURFACE4 lpDDSNach,bool T void CheckMouse() { DIMOUSESTATE dims; //Da werden die Daten der Maus gespeichert - short Button; //Welcher Knopf ist gedrückt worden - short Push; //Knopf gedrückt(1) oder losgelassen(-1) oder gedrückt(0) gehalten - short xDiff,yDiff; //Die Differenz zur vorherigen Position ((Für Scrollen) + short Button; //Welcher Knopf ist gedrückt worden + short Push; //Knopf gedrückt(1) oder losgelassen(-1) oder gedrückt(0) gehalten + short xDiff, yDiff; //Die Differenz zur vorherigen Position ((Für Scrollen) - g_pMouse->GetDeviceState(sizeof(DIMOUSESTATE), &dims); + Direct::g_pMouse->GetDeviceState(sizeof(DIMOUSESTATE), &dims); //Mausbewegung xDiff = MousePosition.x; - MousePosition.x += (short) dims.lX; + MousePosition.x += (short)dims.lX; xDiff -= MousePosition.x; if (MousePosition.x < 0) MousePosition.x = 0; - if (MousePosition.x > MAXX-2) MousePosition.x = MAXX-2; - yDiff = MousePosition.y; - MousePosition.y += (short) dims.lY; - yDiff -= MousePosition.y; + if (MousePosition.x > MAXX - 2) MousePosition.x = MAXX - 2; + yDiff = MousePosition.y; + MousePosition.y += (short)dims.lY; + yDiff -= MousePosition.y; if (MousePosition.y < 0) MousePosition.y = 0; - if (MousePosition.y > MAXY-2) MousePosition.y = MAXY-2; - - if (TwoClicks == -1) + if (MousePosition.y > MAXY - 2) MousePosition.y = MAXY - 2; + + if (TwoClicks == -1) { - if (Guy.Aktiv) + if (Guy.Aktiv) { - if (InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSTOP].rcDes) && - (Bmp[BUTTSTOP].Phase!=-1)) CursorTyp = CUPFEIL; - else CursorTyp = CUUHR; + if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSTOP].rcDes) && + (Bmp[BUTTSTOP].Phase != -1)) CursorTyp = CUPFEIL; + else CursorTyp = CUUHR; } else CursorTyp = CUPFEIL; } Button = -1; - + if (dims.rgbButtons[0] & 0x80) { Button = 0; @@ -3499,18 +823,18 @@ void CheckMouse() } } else - { + { if (Button0down) { Button = 0; Push = -1; Button0down = false; } - } + } + - if (dims.rgbButtons[1] & 0x80) - { + { Button = 1; if (Button1down) Push = 0; else @@ -3520,21 +844,21 @@ void CheckMouse() } } else - { + { if (Button1down) { Button = 1; Push = -1; Button1down = false; } - } - + } + //Wenn ein Text steht, dann bei Mausdruck Text weg if (PapierText != -1) { if (Frage == 0) { - if (InRect(MousePosition.x,MousePosition.y,Bmp[JA].rcDes)) + if (InRect(MousePosition.x, MousePosition.y, Bmp[JA].rcDes)) { CursorTyp = CUPFEIL; if ((Button == 0) && (Push == 1)) @@ -3543,10 +867,10 @@ void CheckMouse() Textloeschen(TXTPAPIER); PapierText = -1; Guy.Aktiv = false; - PlaySound(WAVKLICK2,100); + Sound::PlaySound(WAVKLICK2, 100); } } - else if (InRect(MousePosition.x,MousePosition.y,Bmp[NEIN].rcDes)) + else if (InRect(MousePosition.x, MousePosition.y, Bmp[NEIN].rcDes)) { CursorTyp = CUPFEIL; if ((Button == 0) && (Push == 1)) @@ -3555,10 +879,10 @@ void CheckMouse() Textloeschen(TXTPAPIER); PapierText = -1; Guy.Aktiv = false; - PlaySound(WAVKLICK2,100); + Sound::PlaySound(WAVKLICK2, 100); } } - else if ((Button == 0) && (Push == 1)) PlaySound(WAVKLICK,100); + else if ((Button == 0) && (Push == 1)) Sound::PlaySound(WAVKLICK, 100); } else if ((Button != -1) && (Push == 1)) { @@ -3567,50 +891,50 @@ void CheckMouse() Guy.Aktiv = false; } return; - + } - - //Animationen und Text löschen (werden dann von den MouseIn.. Sachen neu angestellt + + //Animationen und Text löschen (werden dann von den MouseIn.. Sachen neu angestellt Textloeschen(TXTTEXTFELD); ButtAniAus(); - + //Wenn der Guy aktiv dann linke Mouse-Buttons ignorieren - if ((Guy.Aktiv) && (Button == 0)) + if ((Guy.Aktiv) && (Button == 0)) { - if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSTOP].rcDes)) && - (Bmp[BUTTSTOP].Phase!=-1)) ; + if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSTOP].rcDes)) && + (Bmp[BUTTSTOP].Phase != -1)); else Button = -1; - } - + } + //die Maus ist in der Spielflaeche -> - if (InRect(MousePosition.x,MousePosition.y,rcSpielflaeche)) - MouseInSpielflaeche(Button,Push,xDiff,yDiff); + if (InRect(MousePosition.x, MousePosition.y, rcSpielflaeche)) + MouseInSpielflaeche(Button, Push, xDiff, yDiff); //die Maus ist im Panel -> - if (InRect(MousePosition.x,MousePosition.y,rcPanel)) - MouseInPanel(Button,Push); + if (InRect(MousePosition.x, MousePosition.y, rcPanel)) + MouseInPanel(Button, Push); /*dims.lX, dims.lY, dims.lZ, - (dims.rgbButtons[0] & 0x80) ? '0' : ' ', - (dims.rgbButtons[1] & 0x80) ? '1' : ' ', - (dims.rgbButtons[2] & 0x80) ? '2' : ' ', - (dims.rgbButtons[3] & 0x80) ? '3' : ' ');*/ + (dims.rgbButtons[0] & 0x80) ? '0' : ' ', + (dims.rgbButtons[1] & 0x80) ? '1' : ' ', + (dims.rgbButtons[2] & 0x80) ? '2' : ' ', + (dims.rgbButtons[3] & 0x80) ? '3' : ' ');*/ } -short CheckKey() -{ - #define KEYDOWN(name,key) (name[key] & 0x80) - char buffer[256]; - short x; - - g_pKey->GetDeviceState(sizeof(buffer),(LPVOID)&buffer); - - +short CheckKey() +{ +#define KEYDOWN(name,key) (name[key] & 0x80) + char buffer[256]; + short x; + + Direct::g_pKey->GetDeviceState(sizeof(buffer), (LPVOID)&buffer); + + if (Spielzustand == SZLOGO) { if ((KEYDOWN(buffer, DIK_ESCAPE)) || (KEYDOWN(buffer, DIK_RETURN)) || (KEYDOWN(buffer, DIK_SPACE))) //Logo Abbrechen { - StopSound(WAVLOGO); - NeuesSpiel(false); + Sound::StopSound(WAVLOGO); + Game::NeuesSpiel(false); return(2); } } @@ -3619,44 +943,44 @@ short CheckKey() if ((KEYDOWN(buffer, DIK_ESCAPE)) || (KEYDOWN(buffer, DIK_RETURN)) || (KEYDOWN(buffer, DIK_SPACE)))//Intro Abbrechen { - StopSound(WAVSTURM); //Sound hier sofort stoppen - StopSound(WAVSCHWIMMEN); //Sound hier sofort stoppen + Sound::StopSound(WAVSTURM); //Sound hier sofort stoppen + Sound::StopSound(WAVSCHWIMMEN); //Sound hier sofort stoppen Guy.Aktiv = false; - for (x=Guy.Pos.x;x= 60) + if (Minuten >= 60) { Minuten -= 60; Stunden++; } - for (y=0;y= 1) { - Scape[x][y].Objekt =-1; - Scape[x][y].Timer = 0; - Scape[x][y].ObPos.x = 0; - Scape[x][y].ObPos.y = 0; - Scape[x][y].Phase =-1; - Chance -= 2+2*Scape[x][y].Hoehe; + Scape[x][y].Objekt = -1; + Scape[x][y].Timer = 0; + Scape[x][y].ObPos.x = 0; + Scape[x][y].ObPos.y = 0; + Scape[x][y].Phase = -1; + Chance -= 2 + 2 * Scape[x][y].Hoehe; } } - if ((Scape[x][y].Phase == -1) || + if ((Scape[x][y].Phase == -1) || ((Scape[x][y].Objekt != FELD) && (Scape[x][y].Objekt != BUSCH))) continue; //Wenn kein Fruchtobjekt weiter if (Scape[x][y].Phase >= Bmp[Scape[x][y].Objekt].Anzahl) continue; - if (Scape[x][y].Objekt == FELD) Scape[x][y].Phase += float((60*h+m)*0.005); - else if (Scape[x][y].Objekt == BUSCH) Scape[x][y].Phase += float((60*h+m)*0.0005); //pro Minute Reifungsprozess fortführen - if (Scape[x][y].Phase > Bmp[Scape[x][y].Objekt].Anzahl-1) - Scape[x][y].Phase = (float)Bmp[Scape[x][y].Objekt].Anzahl-1; + if (Scape[x][y].Objekt == FELD) Scape[x][y].Phase += float((60 * h + m)*0.005); + else if (Scape[x][y].Objekt == BUSCH) Scape[x][y].Phase += float((60 * h + m)*0.0005); //pro Minute Reifungsprozess fortführen + if (Scape[x][y].Phase > Bmp[Scape[x][y].Objekt].Anzahl - 1) + Scape[x][y].Phase = (float)Bmp[Scape[x][y].Objekt].Anzahl - 1; } - AddResource(GESUNDHEIT, (60*h+m)*(Guy.Resource[WASSER]-50+Guy.Resource[NAHRUNG]-50)/1000); - + AddResource(GESUNDHEIT, (60 * h + m)*(Guy.Resource[WASSER] - 50 + Guy.Resource[NAHRUNG] - 50) / 1000); + if ((Spielzustand == SZSPIEL) && (!BootsFahrt)) { - for (i=0;i<=(60*h+m);i++) + for (i = 0; i <= (60 * h + m); i++) { if (Chance == 0) break; - if (rand()%((int)(1/(Chance/72000))) == 1) + if (rand() % ((int)(1 / (Chance / 72000))) == 1) { Guy.Aktiv = false; Guy.AkNummer = 0; @@ -3807,10 +1131,10 @@ void AddTime(short h,short m) } } - + } -void AddResource(short Art, float Anzahl) //Fügt wassser usw hinzu +void AddResource(short Art, float Anzahl) //Fügt wassser usw hinzu { Guy.Resource[Art] += Anzahl; if (Guy.Resource[Art] > 100) Guy.Resource[Art] = 100; @@ -3826,49 +1150,49 @@ void AddTime(short h,short m) } void LimitScroll() { - if (Camera.x < ScapeGrenze.left) + if (Camera.x < ScapeGrenze.left) Camera.x = (short)ScapeGrenze.left; - if (Camera.x+rcSpielflaeche.right > ScapeGrenze.right) - Camera.x = (short)ScapeGrenze.right-(short)rcSpielflaeche.right; - if (Camera.y < ScapeGrenze.top) + if (Camera.x + rcSpielflaeche.right > ScapeGrenze.right) + Camera.x = (short)ScapeGrenze.right - (short)rcSpielflaeche.right; + if (Camera.y < ScapeGrenze.top) Camera.y = (short)ScapeGrenze.top; - if (Camera.y+rcSpielflaeche.bottom > ScapeGrenze.bottom) - Camera.y = (short)ScapeGrenze.bottom-(short)rcSpielflaeche.bottom; + if (Camera.y + rcSpielflaeche.bottom > ScapeGrenze.bottom) + Camera.y = (short)ScapeGrenze.bottom - (short)rcSpielflaeche.bottom; } -ZWEID GetKachel(short PosX,short PosY) +ZWEID GetKachel(short PosX, short PosY) { - short x,y; + short x, y; ZWEID Erg; - for (y=0;y Scape[x][y].xScreen) && (PosX < Scape[x][y].xScreen+KXPIXEL) && - (PosY > Scape[x][y].yScreen) && (PosY < Scape[x][y].yScreen+KYPIXEL)) - { - - if ((InDreieck(PosX,PosY, - Scape[x][y].xScreen+EckKoor[Scape[x][y].Typ][0].x, - Scape[x][y].yScreen+EckKoor[Scape[x][y].Typ][0].y, - Scape[x][y].xScreen+EckKoor[Scape[x][y].Typ][1].x, - Scape[x][y].yScreen+EckKoor[Scape[x][y].Typ][1].y, - Scape[x][y].xScreen+EckKoor[Scape[x][y].Typ][3].x, - Scape[x][y].yScreen+EckKoor[Scape[x][y].Typ][3].y)) || - (InDreieck(PosX,PosY, - Scape[x][y].xScreen+EckKoor[Scape[x][y].Typ][2].x, - Scape[x][y].yScreen+EckKoor[Scape[x][y].Typ][2].y, - Scape[x][y].xScreen+EckKoor[Scape[x][y].Typ][1].x, - Scape[x][y].yScreen+EckKoor[Scape[x][y].Typ][1].y, - Scape[x][y].xScreen+EckKoor[Scape[x][y].Typ][3].x, - Scape[x][y].yScreen+EckKoor[Scape[x][y].Typ][3].y))) + for (y = 0; y Scape[x][y].xScreen) && (PosX < Scape[x][y].xScreen + KXPIXEL) && + (PosY > Scape[x][y].yScreen) && (PosY < Scape[x][y].yScreen + KYPIXEL)) + { + + if ((InDreieck(PosX, PosY, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][0].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][0].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][1].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][1].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][3].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][3].y)) || + (InDreieck(PosX, PosY, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][2].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][2].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][1].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][1].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][3].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][3].y))) { Erg.x = x; Erg.y = y; return Erg; } } - } + } Erg.x = -1; Erg.y = -1; return Erg; @@ -3877,39 +1201,39 @@ ZWEID GetKachel(short PosX,short PosY) void MakeRohString(short x, short y, short Objekt) { char TmpString[1024]; - bool keinRohstoff; + bool keinRohstoff; short i; RohString[0] = char(0); keinRohstoff = true; if (Objekt == -1) { - for (i=0;i"); - for (i=0;i= BAUM1) && (Scape[Erg.x][Erg.y].Objekt <= BAUM4)) - LoadString(g_hInst,BAUMTEXT,TextTmp,1024); + + if ((Scape[Erg.x][Erg.y].Objekt >= BAUM1) && (Scape[Erg.x][Erg.y].Objekt <= BAUM4)) + LoadString(Direct::g_hInst, BAUMTEXT, TextTmp, 1024); else if ((Scape[Erg.x][Erg.y].Objekt >= FLUSS1) && (Scape[Erg.x][Erg.y].Objekt <= SCHLEUSE6)) - LoadString(g_hInst,FLUSSTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, FLUSSTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == BUSCH) - LoadString(g_hInst,BUSCHTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, BUSCHTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == ZELT) - LoadString(g_hInst,ZELTTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, ZELTTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == FELD) - LoadString(g_hInst,FELDTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, FELDTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == BOOT) - LoadString(g_hInst,BOOTTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, BOOTTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == ROHR) - LoadString(g_hInst,ROHRTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, ROHRTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == SOS) - LoadString(g_hInst,SOSTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, SOSTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == HAUS1) - LoadString(g_hInst,HAUS1TEXT,TextTmp,1024); + LoadString(Direct::g_hInst, HAUS1TEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == HAUS2) - LoadString(g_hInst,HAUS2TEXT,TextTmp,1024); + LoadString(Direct::g_hInst, HAUS2TEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == HAUS3) - LoadString(g_hInst,HAUS3TEXT,TextTmp,1024); + LoadString(Direct::g_hInst, HAUS3TEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == BAUMGROSS) - LoadString(g_hInst,BAUMGROSSTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, BAUMGROSSTEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == FEUERSTELLE) - LoadString(g_hInst,FEUERSTELLETEXT,TextTmp,1024); + LoadString(Direct::g_hInst, FEUERSTELLETEXT, TextTmp, 1024); else if (Scape[Erg.x][Erg.y].Objekt == FEUER) - LoadString(g_hInst,FEUERTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, FEUERTEXT, TextTmp, 1024); else if ((Scape[Erg.x][Erg.y].Objekt == WRACK) || (Scape[Erg.x][Erg.y].Objekt == WRACK2)) - LoadString(g_hInst,WRACKTEXT,TextTmp,1024); + LoadString(Direct::g_hInst, WRACKTEXT, TextTmp, 1024); strcat(Text, TextTmp); - - if ((Scape[Erg.x][Erg.y].Objekt >= FELD) && + + if ((Scape[Erg.x][Erg.y].Objekt >= FELD) && (Scape[Erg.x][Erg.y].Objekt <= FEUERSTELLE)) { //Baufortschrittanzeigen strcat(Text, " "); strcat(Text, "("); - sprintf(TextTmp, "%d", (Scape[Erg.x][Erg.y].AkNummer*100)/Bmp[Scape[Erg.x][Erg.y].Objekt].AkAnzahl); + sprintf(TextTmp, "%d", (Scape[Erg.x][Erg.y].AkNummer * 100) / Bmp[Scape[Erg.x][Erg.y].Objekt].AkAnzahl); strcat(Text, TextTmp); strcat(Text, "%"); strcat(Text, ")"); - //benötigte Rohstoffe anzeigen - MakeRohString(Erg.x,Erg.y,-1); + //benötigte Rohstoffe anzeigen + MakeRohString(Erg.x, Erg.y, -1); strcat(Text, RohString); } - + } TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(Text,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); + DrawString(Text, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); } - + //rechte Maustastescrollen if ((Button == 1) && (Push == 0)) { @@ -3996,28 +1320,28 @@ void MouseInSpielflaeche(short Button, short Push, short xDiff, short yDiff) Camera.y += yDiff; CursorTyp = CURICHTUNG; } - - //Wenn Maustaste gedrückt wird - if ((Button == 0) && (Push == 1)) + + //Wenn Maustaste gedrückt wird + if ((Button == 0) && (Push == 1)) { - if ((Erg.x != -1) && (Erg.y != -1) && + if ((Erg.x != -1) && (Erg.y != -1) && (Scape[Erg.x][Erg.y].Entdeckt) && (!Guy.Aktiv) && ((Erg.x != Guy.Pos.x) || (Erg.y != Guy.Pos.y)) && - (Erg.x > 0) && (Erg.x < MAXXKACH-1) && - (Erg.y > 0) && (Erg.y < MAXYKACH-1)) + (Erg.x > 0) && (Erg.x < MAXXKACH - 1) && + (Erg.y > 0) && (Erg.y < MAXYKACH - 1)) { - //Klicksound abspielen - PlaySound(WAVKLICK2, 100); + //Klicksound abspielen + Sound::PlaySound(WAVKLICK2, 100); if ((Erg.x == RouteZiel.x) && (Erg.y == RouteZiel.y)) { MarkRoute(false); Bmp[BUTTSTOP].Phase = 0; Guy.Aktiv = true; RoutePunkt = -1; - Steps = 0; - Step = 0; + Steps = 0; + Step = 0; } - else + else { MarkRoute(false); RouteStart.x = Guy.Pos.x; @@ -4035,7 +1359,7 @@ void MouseInSpielflaeche(short Button, short Push, short xDiff, short yDiff) } } } - else PlaySound(WAVKLICK, 100); + else Sound::PlaySound(WAVKLICK, 100); } } @@ -4043,160 +1367,160 @@ void ButtAniAus() { short i; - for (i=BUTTGITTER;i<=BUTTDESTROY;i++) + for (i = BUTTGITTER; i <= BUTTDESTROY; i++) { Bmp[i].Animation = false; } } -void MouseInPanel(short Button,short Push) +void MouseInPanel(short Button, short Push) { - short mx,my,i; //Mauskoordinaten in Minimap - + short mx, my, i; //Mauskoordinaten in Minimap + //wenn die Maus in der Minimap ist -> - if ((InRect(MousePosition.x,MousePosition.y,rcKarte)) && (Button ==0) && (Push != -1)) - { - mx = MousePosition.x-(short)rcKarte.left; - my = MousePosition.y-(short)rcKarte.top; - Camera.x = ((KXPIXEL/4)*(mx-my) + MAXXKACH * KXPIXEL /2) - -(rcSpielflaeche.right-rcSpielflaeche.left)/2; - Camera.y = ((KXPIXEL/7)*(my+mx)) - -(rcSpielflaeche.bottom-rcSpielflaeche.top)/2; - } - else if (InRect(MousePosition.x,MousePosition.y,Bmp[BUTTGITTER].rcDes)) - { - if (Gitter) DrawText(GITTERAUS,TXTTEXTFELD,2); - else DrawText(GITTERAN,TXTTEXTFELD,2); - - if ((Button==0) && (Push==1)) - { - PlaySound(WAVKLICK2, 100); + if ((InRect(MousePosition.x, MousePosition.y, rcKarte)) && (Button == 0) && (Push != -1)) + { + mx = MousePosition.x - (short)rcKarte.left; + my = MousePosition.y - (short)rcKarte.top; + Camera.x = ((KXPIXEL / 4)*(mx - my) + MAXXKACH * KXPIXEL / 2) + - (rcSpielflaeche.right - rcSpielflaeche.left) / 2; + Camera.y = ((KXPIXEL / 7)*(my + mx)) + - (rcSpielflaeche.bottom - rcSpielflaeche.top) / 2; + } + else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTGITTER].rcDes)) + { + if (Gitter) DrawText(GITTERAUS, TXTTEXTFELD, 2); + else DrawText(GITTERAN, TXTTEXTFELD, 2); + + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); Gitter = !Gitter; Generate(); } } - else if (InRect(MousePosition.x,MousePosition.y,Bmp[BUTTANIMATION].rcDes)) - { - if (LAnimation) DrawText(ANIMATIONAUS,TXTTEXTFELD,2); - else DrawText(ANIMATIONAN,TXTTEXTFELD,2); - - if ((Button==0) && (Push==1)) + else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANIMATION].rcDes)) + { + if (LAnimation) DrawText(ANIMATIONAUS, TXTTEXTFELD, 2); + else DrawText(ANIMATIONAN, TXTTEXTFELD, 2); + + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); LAnimation = !LAnimation; Generate(); } } - else if (InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSOUND].rcDes)) - { - if (Soundzustand == 1) DrawText(SOUNDAUS,TXTTEXTFELD,2); - else if (Soundzustand == 0) DrawText(SOUNDAN,TXTTEXTFELD,2); - else DrawText(KEINSOUND,TXTTEXTFELD,2); - - if ((Button==0) && (Push==1)) + else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSOUND].rcDes)) + { + if (Soundzustand == 1) DrawText(SOUNDAUS, TXTTEXTFELD, 2); + else if (Soundzustand == 0) DrawText(SOUNDAN, TXTTEXTFELD, 2); + else DrawText(KEINSOUND, TXTTEXTFELD, 2); + + if ((Button == 0) && (Push == 1)) { - if (Soundzustand == 1) + if (Soundzustand == 1) { - for (i=1;i= FLUSS1) && + if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BUSCH) || + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FELD)) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase == Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl - 1)) Guy.Aktion = AKESSEN; + else if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6)) || ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ROHR) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase == 1))) + (Scape[Guy.Pos.x][Guy.Pos.y].Phase == 1))) Guy.Aktion = AKTRINKEN; - else PapierText = DrawText(KEINESSENTRINKEN,TXTPAPIER,1); + else PapierText = DrawText(KEINESSENTRINKEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSCHLAFEN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLAFEN].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHLAFEN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLAFEN].Phase != -1)) { - DrawText(BEGINNSCHLAFEN,TXTTEXTFELD,2); + DrawText(BEGINNSCHLAFEN, TXTTEXTFELD, 2); Bmp[BUTTSCHLAFEN].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if (Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) { Guy.AkNummer = 0; Guy.Aktion = AKSCHLAFEN; } - else PapierText = DrawText(NICHTAUFWASSERSCHLAFEN,TXTPAPIER,1); + else PapierText = DrawText(NICHTAUFWASSERSCHLAFEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTFAELLEN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTFAELLEN].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFAELLEN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTFAELLEN].Phase != -1)) { - DrawText(BEGINNFAELLEN,TXTTEXTFELD,2); + DrawText(BEGINNFAELLEN, TXTTEXTFELD, 2); Bmp[BUTTFAELLEN].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); Guy.AkNummer = 0; if (Guy.Inventar[ROHSTAMM] <= 10) { if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) { Guy.Aktion = AKFAELLEN; } else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) - PapierText = DrawText(BAUMZUGROSS,TXTPAPIER,1); - else PapierText = DrawText(KEINBAUM,TXTPAPIER,1); + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) + PapierText = DrawText(BAUMZUGROSS, TXTPAPIER, 1); + else PapierText = DrawText(KEINBAUM, TXTPAPIER, 1); } - else PapierText = DrawText(ROHSTAMMZUVIEL,TXTPAPIER,1); + else PapierText = DrawText(ROHSTAMMZUVIEL, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTANGELN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTANGELN].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANGELN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTANGELN].Phase != -1)) { - DrawText(BEGINNANGELN,TXTTEXTFELD,2); + DrawText(BEGINNANGELN, TXTTEXTFELD, 2); Bmp[BUTTANGELN].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); Guy.AkNummer = 0; if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6)) || + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6)) || (BootsFahrt)) Guy.Aktion = AKANGELN; - else PapierText = DrawText(KEINWASSER,TXTPAPIER,1); + else PapierText = DrawText(KEINWASSER, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTANZUENDEN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTANZUENDEN].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANZUENDEN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTANZUENDEN].Phase != -1)) { - DrawText(BEGINNANZUENDEN,TXTTEXTFELD,2); + DrawText(BEGINNANZUENDEN, TXTTEXTFELD, 2); Bmp[BUTTANZUENDEN].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); Guy.AkNummer = 0; if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FEUERSTELLE) && (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Aktion = AKANZUENDEN; - else PapierText = DrawText(KEINEFEUERST,TXTPAPIER,1); + Guy.Aktion = AKANZUENDEN; + else PapierText = DrawText(KEINEFEUERST, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTAUSSCHAU].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTAUSSCHAU].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTAUSSCHAU].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTAUSSCHAU].Phase != -1)) { - DrawText(BEGINNAUSSCHAU,TXTTEXTFELD,2); + DrawText(BEGINNAUSSCHAU, TXTTEXTFELD, 2); Bmp[BUTTAUSSCHAU].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); Guy.AkNummer = 0; if (Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) { Guy.AkNummer = 0; Guy.Aktion = AKAUSSCHAU; } - else PapierText = DrawText(WELLENZUHOCH,TXTPAPIER,1); + else PapierText = DrawText(WELLENZUHOCH, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSCHATZ].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZ].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHATZ].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZ].Phase != -1)) { - DrawText(BEGINNSCHATZ,TXTTEXTFELD,2); + DrawText(BEGINNSCHATZ, TXTTEXTFELD, 2); Bmp[BUTTSCHATZ].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); Guy.AkNummer = 0; if ((Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && @@ -4376,17 +1700,17 @@ void MouseInPanel(short Button,short Push) Guy.AkNummer = 0; Guy.Aktion = AKSCHATZ; } - else PapierText = DrawText(GRABENBEDINGUNGEN,TXTPAPIER,1); + else PapierText = DrawText(GRABENBEDINGUNGEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSCHLEUDER].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLEUDER].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHLEUDER].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLEUDER].Phase != -1)) { - DrawText(BEGINNSCHLEUDER,TXTTEXTFELD,2); + DrawText(BEGINNSCHLEUDER, TXTTEXTFELD, 2); Bmp[BUTTSCHLEUDER].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); Guy.AkNummer = 0; if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) @@ -4396,45 +1720,45 @@ void MouseInPanel(short Button,short Push) } else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) - PapierText = DrawText(BAUMZUGROSS,TXTPAPIER,1); - else PapierText = DrawText(KEINVOGEL,TXTPAPIER,1); + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) + PapierText = DrawText(BAUMZUGROSS, TXTPAPIER, 1); + else PapierText = DrawText(KEINVOGEL, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSCHATZKARTE].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZKARTE].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHATZKARTE].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZKARTE].Phase != -1)) { - DrawText(BEGINNSCHATZKARTE,TXTTEXTFELD,2); + DrawText(BEGINNSCHATZKARTE, TXTTEXTFELD, 2); Bmp[BUTTSCHATZKARTE].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); DrawSchatzkarte(); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTFELD].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTFELD].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFELD].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTFELD].Phase != -1)) { - LoadString(g_hInst,BEGINNFELD,StdString,1024); - MakeRohString(-1,-1,FELD); + LoadString(Direct::g_hInst, BEGINNFELD, StdString, 1024); + MakeRohString(-1, -1, FELD); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTFELD].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && - (Scape[Guy.Pos.x][Guy.Pos.y].Art == 4)) + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && + (Scape[Guy.Pos.x][Guy.Pos.y].Art == 4)) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKFELD; } - else if ((Bmp[BUTTWEITER].Phase != -1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FELD)) + else if ((Bmp[BUTTWEITER].Phase != -1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FELD)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4442,33 +1766,33 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKFELD; } - else PapierText = DrawText(FELDBEDINGUNGEN,TXTPAPIER,1); + else PapierText = DrawText(FELDBEDINGUNGEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTZELT].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTZELT].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTZELT].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTZELT].Phase != -1)) { - LoadString(g_hInst,BEGINNZELT,StdString,1024); - MakeRohString(-1,-1,ZELT); + LoadString(Direct::g_hInst, BEGINNZELT, StdString, 1024); + MakeRohString(-1, -1, ZELT); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTZELT].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && - (Scape[Guy.Pos.x][Guy.Pos.y].Art != -1)) + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && + (Scape[Guy.Pos.x][Guy.Pos.y].Art != -1)) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKZELT; } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT)) + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4476,36 +1800,36 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKZELT; } - else PapierText = DrawText(ZELTBEDINGUNGEN,TXTPAPIER,1); + else PapierText = DrawText(ZELTBEDINGUNGEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTBOOT].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTBOOT].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTBOOT].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTBOOT].Phase != -1)) { - LoadString(g_hInst,BEGINNBOOT,StdString,1024); - MakeRohString(-1,-1,BOOT); + LoadString(Direct::g_hInst, BEGINNBOOT, StdString, 1024); + MakeRohString(-1, -1, BOOT); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTBOOT].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) && - ((Scape[Guy.Pos.x-1][Guy.Pos.y].Art == 1) || - (Scape[Guy.Pos.x][Guy.Pos.y-1].Art == 1) || - (Scape[Guy.Pos.x+1][Guy.Pos.y].Art == 1) || - (Scape[Guy.Pos.x][Guy.Pos.y+1].Art == 1))) + (Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) && + ((Scape[Guy.Pos.x - 1][Guy.Pos.y].Art == 1) || + (Scape[Guy.Pos.x][Guy.Pos.y - 1].Art == 1) || + (Scape[Guy.Pos.x + 1][Guy.Pos.y].Art == 1) || + (Scape[Guy.Pos.x][Guy.Pos.y + 1].Art == 1))) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKBOOT; } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BOOT)) + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BOOT)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4513,32 +1837,32 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKBOOT; } - else PapierText = DrawText(BOOTBEDINGUNGEN,TXTPAPIER,1); + else PapierText = DrawText(BOOTBEDINGUNGEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTROHR].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTROHR].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTROHR].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTROHR].Phase != -1)) { - LoadString(g_hInst,BEGINNROHR,StdString,1024); - MakeRohString(-1,-1,ROHR); + LoadString(Direct::g_hInst, BEGINNROHR, StdString, 1024); + MakeRohString(-1, -1, ROHR); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTROHR].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKROHR; } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ROHR)) + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ROHR)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4546,32 +1870,32 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKROHR; } - else PapierText = DrawText(ROHRBEDINGUNGEN,TXTPAPIER,1); + else PapierText = DrawText(ROHRBEDINGUNGEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTSOS].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTSOS].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSOS].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTSOS].Phase != -1)) { - LoadString(g_hInst,BEGINNSOS,StdString,1024); - MakeRohString(-1,-1,SOS); + LoadString(Direct::g_hInst, BEGINNSOS, StdString, 1024); + MakeRohString(-1, -1, SOS); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTSOS].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKSOS; } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS)) + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4579,34 +1903,34 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKSOS; } - else PapierText = DrawText(SOSBEDINGUNGEN,TXTPAPIER,1); + else PapierText = DrawText(SOSBEDINGUNGEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTHAUS1].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS1].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS1].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS1].Phase != -1)) { - LoadString(g_hInst,BEGINNHAUS1,StdString,1024); - MakeRohString(-1,-1,HAUS1); + LoadString(Direct::g_hInst, BEGINNHAUS1, StdString, 1024); + MakeRohString(-1, -1, HAUS1); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTHAUS1].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - PapierText = DrawText(BAUMZUKLEIN,TXTPAPIER,1); - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) + PapierText = DrawText(BAUMZUKLEIN, TXTPAPIER, 1); + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKHAUS1; } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4614,36 +1938,36 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKHAUS1; } - else PapierText = DrawText(GEGENDNICHT,TXTPAPIER,1); + else PapierText = DrawText(GEGENDNICHT, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTHAUS2].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS2].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS2].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS2].Phase != -1)) { - LoadString(g_hInst,BEGINNHAUS2,StdString,1024); - MakeRohString(-1,-1,HAUS2); + LoadString(Direct::g_hInst, BEGINNHAUS2, StdString, 1024); + MakeRohString(-1, -1, HAUS2); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTHAUS2].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - PapierText = DrawText(BAUMZUKLEIN,TXTPAPIER,1); + PapierText = DrawText(BAUMZUKLEIN, TXTPAPIER, 1); else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) - PapierText = DrawText(NICHTOHNELEITER,TXTPAPIER,1); - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKHAUS2; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2)) + PapierText = DrawText(NICHTOHNELEITER, TXTPAPIER, 1); + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = AKHAUS2; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4651,37 +1975,37 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKHAUS2; } - else PapierText = DrawText(GEGENDNICHT,TXTPAPIER,1); + else PapierText = DrawText(GEGENDNICHT, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTHAUS3].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS3].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS3].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS3].Phase != -1)) { - LoadString(g_hInst,BEGINNHAUS3,StdString,1024); - MakeRohString(-1,-1,HAUS3); + LoadString(Direct::g_hInst, BEGINNHAUS3, StdString, 1024); + MakeRohString(-1, -1, HAUS3); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTHAUS3].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - PapierText = DrawText(BAUMZUKLEIN,TXTPAPIER,1); + PapierText = DrawText(BAUMZUKLEIN, TXTPAPIER, 1); else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) - PapierText = DrawText(NICHTOHNEPLATTFORM,TXTPAPIER,1); - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2) + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) + PapierText = DrawText(NICHTOHNEPLATTFORM, TXTPAPIER, 1); + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKHAUS3; } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3)) + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4689,32 +2013,32 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKHAUS3; } - else PapierText = DrawText(GEGENDNICHT,TXTPAPIER,1); + else PapierText = DrawText(GEGENDNICHT, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTFEUERST].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTFEUERST].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFEUERST].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTFEUERST].Phase != -1)) { - LoadString(g_hInst,BEGINNFEUERSTELLE,StdString,1024); - MakeRohString(-1,-1,FEUERSTELLE); + LoadString(Direct::g_hInst, BEGINNFEUERSTELLE, StdString, 1024); + MakeRohString(-1, -1, FEUERSTELLE); strcat(StdString, RohString); TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString,(short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top,2); - + DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + Bmp[BUTTFEUERST].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) { Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; Bmp[BUTTSTOP].Phase = 0; Guy.Aktion = AKFEUERSTELLE; } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FEUERSTELLE)) + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FEUERSTELLE)) { Bmp[BUTTSTOP].Phase = 0; Guy.PosAlt = Guy.PosScreen; @@ -4722,102 +2046,102 @@ void MouseInPanel(short Button,short Push) Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); Guy.Aktion = AKFEUERSTELLE; } - else PapierText = DrawText(FEUERSTELLENBEDINGUNGEN,TXTPAPIER,1); + else PapierText = DrawText(FEUERSTELLENBEDINGUNGEN, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[BUTTDESTROY].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTDESTROY].Phase != -1)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTDESTROY].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTDESTROY].Phase != -1)) { - DrawText(BEGINNDESTROY,TXTTEXTFELD,2); + DrawText(BEGINNDESTROY, TXTTEXTFELD, 2); Bmp[BUTTDESTROY].Animation = true; - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - PlaySound(WAVKLICK2, 100); + Sound::PlaySound(WAVKLICK2, 100); if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FELD) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= FEUERSTELLE)) + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= FEUERSTELLE)) { Guy.AkNummer = 0; Guy.Aktion = AKDESTROY; } - else PapierText = DrawText(KEINBAUWERK,TXTPAPIER,1); + else PapierText = DrawText(KEINBAUWERK, TXTPAPIER, 1); } } - else if ((InRect(MousePosition.x,MousePosition.y,Bmp[INVPAPIER].rcDes)) && (HauptMenue == MEINVENTAR)) + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[INVPAPIER].rcDes)) && (HauptMenue == MEINVENTAR)) { - for (i=ROHAST;i<=ROHSCHLEUDER;i++) + for (i = ROHAST; i <= ROHSCHLEUDER; i++) { - if (InRect(MousePosition.x,MousePosition.y,Bmp[i].rcDes) && (Guy.Inventar[i]>0)) + if (InRect(MousePosition.x, MousePosition.y, Bmp[i].rcDes) && (Guy.Inventar[i]>0)) { - if ((Button==0) && (Push==1)) + if ((Button == 0) && (Push == 1)) { - if (TwoClicks == -1) + if (TwoClicks == -1) { CursorTyp = i; TwoClicks = i; } else CheckBenutze(i); } - switch(i) + switch (i) { - case ROHAST: DrawText(AST,TXTTEXTFELD,2); break; - case ROHSTEIN: DrawText(STEIN,TXTTEXTFELD,2); break; - case ROHAXT: DrawText(AXT,TXTTEXTFELD,2); break; - case ROHBLATT: DrawText(BLATT,TXTTEXTFELD,2); break; - case ROHSTAMM: DrawText(STAMM,TXTTEXTFELD,2); break; - case ROHEGGE: DrawText(EGGE,TXTTEXTFELD,2); break; - case ROHLIANE: DrawText(LIANE,TXTTEXTFELD,2); break; - case ROHANGEL: DrawText(ANGEL,TXTTEXTFELD,2); break; - case ROHHAMMER: DrawText(HAMMER,TXTTEXTFELD,2); break; - case ROHFERNROHR: DrawText(FERNROHR,TXTTEXTFELD,2); break; - case ROHSTREICHHOLZ: DrawText(STREICHHOLZ,TXTTEXTFELD,2); break; - case ROHSCHAUFEL: DrawText(SCHAUFEL,TXTTEXTFELD,2); break; - case ROHKARTE: DrawText(KARTE,TXTTEXTFELD,2); break; - case ROHSCHLEUDER: DrawText(SCHLEUDER,TXTTEXTFELD,2); break; + case ROHAST: DrawText(AST, TXTTEXTFELD, 2); break; + case ROHSTEIN: DrawText(STEIN, TXTTEXTFELD, 2); break; + case ROHAXT: DrawText(AXT, TXTTEXTFELD, 2); break; + case ROHBLATT: DrawText(BLATT, TXTTEXTFELD, 2); break; + case ROHSTAMM: DrawText(STAMM, TXTTEXTFELD, 2); break; + case ROHEGGE: DrawText(EGGE, TXTTEXTFELD, 2); break; + case ROHLIANE: DrawText(LIANE, TXTTEXTFELD, 2); break; + case ROHANGEL: DrawText(ANGEL, TXTTEXTFELD, 2); break; + case ROHHAMMER: DrawText(HAMMER, TXTTEXTFELD, 2); break; + case ROHFERNROHR: DrawText(FERNROHR, TXTTEXTFELD, 2); break; + case ROHSTREICHHOLZ: DrawText(STREICHHOLZ, TXTTEXTFELD, 2); break; + case ROHSCHAUFEL: DrawText(SCHAUFEL, TXTTEXTFELD, 2); break; + case ROHKARTE: DrawText(KARTE, TXTTEXTFELD, 2); break; + case ROHSCHLEUDER: DrawText(SCHLEUDER, TXTTEXTFELD, 2); break; } break; } } } - else if (InRect(MousePosition.x,MousePosition.y,TextBereich[TXTTAGESZEIT].rcText)) - DrawText(SOSPAET,TXTTEXTFELD,2); - else if (InRect(MousePosition.x,MousePosition.y,TextBereich[TXTCHANCE].rcText)) - DrawText(CHANCETEXT,TXTTEXTFELD,2); - else //TwoClicks löschen + else if (InRect(MousePosition.x, MousePosition.y, TextBereich[TXTTAGESZEIT].rcText)) + DrawText(SOSPAET, TXTTEXTFELD, 2); + else if (InRect(MousePosition.x, MousePosition.y, TextBereich[TXTCHANCE].rcText)) + DrawText(CHANCETEXT, TXTTEXTFELD, 2); + else //TwoClicks löschen { - if ((Button==0) && (Push==1)) PlaySound(WAVKLICK, 100); + if ((Button == 0) && (Push == 1)) Sound::PlaySound(WAVKLICK, 100); TwoClicks = -1; } } bool InDreieck(short X, short Y, short X0, short Y0, short X1, short Y1, short X3, short Y3) { - float x,y,x0,y0,x1,y1,x3,y3,a,b,c,d; - - x=(float)X;y=(float)Y;x0=(float)X0;y0=(float)Y0;x1=(float)X1;y1=(float)Y1;x3=(float)X3;y3=(float)Y3; - - c= (x-x1)/(x0-x1); + float x, y, x0, y0, x1, y1, x3, y3, a, b, c, d; + + x = (float)X; y = (float)Y; x0 = (float)X0; y0 = (float)Y0; x1 = (float)X1; y1 = (float)Y1; x3 = (float)X3; y3 = (float)Y3; + + c = (x - x1) / (x0 - x1); if (c<0) return false; - d= ((y-y3)*(x0-x1)-(x-x1)*(y0-y3))/((y1-y3)*(x0-x1)); + d = ((y - y3)*(x0 - x1) - (x - x1)*(y0 - y3)) / ((y1 - y3)*(x0 - x1)); if (d<0) return false; - b= ((y-y0)*(x1-x0)-(x-x0)*(y1-y0))/((x1-x0)*(y3-y1)); + b = ((y - y0)*(x1 - x0) - (x - x0)*(y1 - y0)) / ((x1 - x0)*(y3 - y1)); if (b<0) return false; - a= (x-x0)/(x1-x0)-b; + a = (x - x0) / (x1 - x0) - b; if (a<0) return false; return true; } -bool InRect(short x,short y,RECT rcRect) +bool InRect(short x, short y, RECT rcRect) { - if ((x <= rcRect.right) && (x >= rcRect.left) && - (y <= rcRect.bottom) && (y >= rcRect.top)) return true; + if ((x <= rcRect.right) && (x >= rcRect.left) && + (y <= rcRect.bottom) && (y >= rcRect.top)) return true; return false; } inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b) { DWORD Erg = 0; - - if (ddpf.dwRBitMask == 63488) + + if (Direct::ddpf.dwRBitMask == 63488) { Erg = (DWORD)((r & 0xF8) >> 3); Erg = Erg << 6; @@ -4825,7 +2149,7 @@ inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b) Erg = Erg << 5; Erg = Erg | (DWORD)((b & 0xF8) >> 3); } - else if (ddpf.dwRBitMask == 31744) + else if (Direct::ddpf.dwRBitMask == 31744) { Erg = (DWORD)((r & 0xF8) >> 3); Erg = Erg << 5; @@ -4833,7 +2157,7 @@ inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b) Erg = Erg << 5; Erg = Erg | (DWORD)((b & 0xF8) >> 3); } - else + else { Erg = 0; MessageBeep(MB_OK); @@ -4843,13 +2167,13 @@ inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b) inline void DWORD2RGB(DWORD color) { - if (ddpf.dwRBitMask == 63488) + if (Direct::ddpf.dwRBitMask == 63488) { rgbStruct.r = (byte)((color & 0xF800) >> 8); rgbStruct.g = (byte)((color & 0x07E0) >> 3); rgbStruct.b = (byte)((color & 0x001F) << 3); } - else if (ddpf.dwRBitMask == 31744) + else if (Direct::ddpf.dwRBitMask == 31744) { rgbStruct.r = (byte)((color & 0x7C00) >> 7); rgbStruct.g = (byte)((color & 0x03E0) >> 2); @@ -4859,456 +2183,344 @@ inline void DWORD2RGB(DWORD color) void PutPixel(short x, short y, DWORD color, LPDDSURFACEDESC2 ddsd) { - WORD *pixels = (WORD *)ddsd->lpSurface; - //DWORD pitch = ddsd->dwWidth+2; - DWORD pitch = ddsd->lPitch>>1; - pixels[y*pitch + x] = (WORD)color; + WORD *pixels = (WORD *)ddsd->lpSurface; + //DWORD pitch = ddsd->dwWidth+2; + DWORD pitch = ddsd->lPitch >> 1; + pixels[y*pitch + x] = (WORD)color; } void GetPixel(short x, short y, LPDDSURFACEDESC2 ddsd) { - DWORD color; + DWORD color; WORD *pixels = (WORD *)ddsd->lpSurface; - //DWORD pitch = ddsd->dwWidth; - DWORD pitch = ddsd->lPitch>>1; + //DWORD pitch = ddsd->dwWidth; + DWORD pitch = ddsd->lPitch >> 1; color = pixels[y*pitch + x]; DWORD2RGB(color); } -void NeuesSpiel(bool neu) -{ - short x,y; - bool LoadOK; - - InitStructs(); - - if (!neu) LoadOK = LoadGame(); - - if ((!LoadOK) || (neu)) - { - //Für die Statusanzeige - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - ddbltfx.dwFillColor = RGB2DWORD(70,70,100); - lpDDSPrimary->Blt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); - ddbltfx.dwFillColor = RGB2DWORD(255,0,255); - lpDDSSchrift->Blt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); - - //Landschaft erzeugen - - DrawString("Erschaffe Landschaft...",5,5,2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - lpDDSPrimary->Blt(&rcRectdes,lpDDSSchrift,&rcRectdes,DDBLT_KEYSRC | DDBLT_WAIT,NULL); - Compute(200,600); - - DrawString("Ueberflute Land...",5,35,2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - lpDDSPrimary->Blt(&rcRectdes,lpDDSSchrift,&rcRectdes,DDBLT_KEYSRC | DDBLT_WAIT,NULL); - Meer(); - - DrawString("Lege Fluss fest...",5,65,2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - lpDDSPrimary->Blt(&rcRectdes,lpDDSSchrift,&rcRectdes,DDBLT_KEYSRC | DDBLT_WAIT,NULL); - Fluss(); - CalcKoor(); - - DrawString("Pflanze Baeume...",5,95,2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - lpDDSPrimary->Blt(&rcRectdes,lpDDSSchrift,&rcRectdes,DDBLT_KEYSRC | DDBLT_WAIT,NULL); - Baeume(30); - - Piratenwrack(); - - //Guy Position - Guy.Pos.x = 1; - Guy.Pos.y = MAXYKACH /2; - Guy.PosScreen.x = - (Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) /2; - Guy.PosScreen.y = - (Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) /2; - - Camera.x = Guy.PosScreen.x-rcGesamt.right/2; - Camera.y = Guy.PosScreen.y-rcGesamt.bottom/2; - - Chance = 0; - - BootsFahrt = false; - if (!BootsFahrt) ChangeBootsFahrt(); - - Tag = 1; Stunden = 0; Minuten = 0; - - Spielzustand = SZINTRO; - Guy.Aktiv = false; - Guy.Zustand = GUYSCHIFF; - Guy.AkNummer = 0; - Guy.Aktion = AKINTRO; - } - - //SchriftSurface löschen - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - ddbltfx.dwFillColor = RGB2DWORD(255,0,255); - lpDDSSchrift->Blt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); - - BOOL Anitmp = LAnimation; - bool Entdeckttmp[MAXXKACH][MAXYKACH]; - - LAnimation = false; - //Schatzvergraben und Schatzkarte malen - for (y=0;yBlt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = 2 * MAXXKACH; + rcRectdes.bottom = 2 * MAXYKACH; + Direct::ddbltfx.dwFillColor = RGB2DWORD(247, 222, 191); + Direct::lpDDSKarte->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); //Die Landschaftshintergrundfarbe - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXSCAPEX; - rcRectdes.bottom = MAXSCAPEY; - ddbltfx.dwFillColor = RGB2DWORD(0,0,0); - lpDDSScape->Blt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); - - for (y=0;yBlt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); + + for (y = 0; y= MEERWELLEN) && (Scape[x][y].Objekt <=SCHLEUSE6)) + if ((Scape[x][y].Objekt >= MEERWELLEN) && (Scape[x][y].Objekt <= SCHLEUSE6)) { - rcRectsrc.left = Bmp[Scape[x][y].Objekt].rcSrc.left; - rcRectsrc.right = Bmp[Scape[x][y].Objekt].rcSrc.right; + rcRectsrc.left = Bmp[Scape[x][y].Objekt].rcSrc.left; + rcRectsrc.right = Bmp[Scape[x][y].Objekt].rcSrc.right; if (Scape[x][y].Objekt == MEERWELLEN) { - i=rand()%6; - rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top+i*Bmp[Scape[x][y].Objekt].Hoehe; - rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom+i*Bmp[Scape[x][y].Objekt].Hoehe; + i = rand() % 6; + rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top + i*Bmp[Scape[x][y].Objekt].Hoehe; + rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom + i*Bmp[Scape[x][y].Objekt].Hoehe; } else { - rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top; - rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom; + rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top; + rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom; } - rcRectdes.left = Scape[x][y].xScreen+Bmp[Scape[x][y].Objekt].rcDes.left; - rcRectdes.right = Scape[x][y].xScreen+Bmp[Scape[x][y].Objekt].rcDes.right; - rcRectdes.top = Scape[x][y].yScreen+Bmp[Scape[x][y].Objekt].rcDes.top; - rcRectdes.bottom = Scape[x][y].yScreen+Bmp[Scape[x][y].Objekt].rcDes.bottom; - //Landschaftsobjekt zeichnen - Blitten(lpDDSAnimation,lpDDSScape,true); + rcRectdes.left = Scape[x][y].xScreen + Bmp[Scape[x][y].Objekt].rcDes.left; + rcRectdes.right = Scape[x][y].xScreen + Bmp[Scape[x][y].Objekt].rcDes.right; + rcRectdes.top = Scape[x][y].yScreen + Bmp[Scape[x][y].Objekt].rcDes.top; + rcRectdes.bottom = Scape[x][y].yScreen + Bmp[Scape[x][y].Objekt].rcDes.bottom; + //Landschaftsobjekt zeichnen + Blitten(Direct::lpDDSAnimation, Direct::lpDDSScape, true); } } //MiniMap zeichnen - rcRectdes.left = 2*x; - rcRectdes.top = 2*y; - rcRectdes.right = rcRectdes.left+2; - rcRectdes.bottom = rcRectdes.top+2; - + rcRectdes.left = 2 * x; + rcRectdes.top = 2 * y; + rcRectdes.right = rcRectdes.left + 2; + rcRectdes.bottom = rcRectdes.top + 2; + if ((Scape[x][y].Art == 1) && (Scape[x][y].Typ == 0)) //Meer - ddbltfx.dwFillColor = RGB2DWORD(228,207,182); + Direct::ddbltfx.dwFillColor = RGB2DWORD(228, 207, 182); else { - if ((Scape[x][y].Typ == 0) && + if ((Scape[x][y].Typ == 0) && ((Scape[x][y].Art == 2) || - (Scape[x][y].Art == 3))) //Strand - ddbltfx.dwFillColor = RGB2DWORD(112,103,93); + (Scape[x][y].Art == 3))) //Strand + Direct::ddbltfx.dwFillColor = RGB2DWORD(112, 103, 93); else //Land - ddbltfx.dwFillColor = RGB2DWORD(139+Scape[x][y].Hoehe*20,128+Scape[x][y].Hoehe*20,115+Scape[x][y].Hoehe*20); + Direct::ddbltfx.dwFillColor = RGB2DWORD(139 + Scape[x][y].Hoehe * 20, 128 + Scape[x][y].Hoehe * 20, 115 + Scape[x][y].Hoehe * 20); } - lpDDSKarte->Blt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); + Direct::lpDDSKarte->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); } - + } void Zeige() { HRESULT ddrval; short i; - char Stringsave1[128],Stringsave2[128]; //Für die Zeitausgabe - - rcRectsrc.left = Camera.x+rcSpielflaeche.left; - rcRectsrc.top = Camera.y+rcSpielflaeche.top; - rcRectsrc.right = Camera.x+rcSpielflaeche.right; - rcRectsrc.bottom = Camera.y+rcSpielflaeche.bottom; - rcRectdes.left = rcSpielflaeche.left; - rcRectdes.top = rcSpielflaeche.top; - rcRectdes.right = rcSpielflaeche.right; - rcRectdes.bottom = rcSpielflaeche.bottom; - - Blitten(lpDDSScape,lpDDSBack,false); //Landschaft zeichnen - + char Stringsave1[128], Stringsave2[128]; //Für die Zeitausgabe + + rcRectsrc.left = Camera.x + rcSpielflaeche.left; + rcRectsrc.top = Camera.y + rcSpielflaeche.top; + rcRectsrc.right = Camera.x + rcSpielflaeche.right; + rcRectsrc.bottom = Camera.y + rcSpielflaeche.bottom; + rcRectdes.left = rcSpielflaeche.left; + rcRectdes.top = rcSpielflaeche.top; + rcRectdes.right = rcSpielflaeche.right; + rcRectdes.bottom = rcSpielflaeche.bottom; + + Blitten(Direct::lpDDSScape, Direct::lpDDSBack, false); //Landschaft zeichnen + ZeichneObjekte(); - + ZeichnePanel(); - + //Die TagesZeit ausgeben Textloeschen(TXTTAGESZEIT); TextBereich[TXTTAGESZEIT].Aktiv = true; - sprintf(Stringsave1, "%d", Stunden+6); + sprintf(Stringsave1, "%d", Stunden + 6); sprintf(Stringsave2, "%d", Minuten); strcpy(StdString, ""); - if (Stunden+6 < 10) strcat( StdString, "0"); - strcat( StdString, Stringsave1); - strcat( StdString, ":" ); - if (Minuten < 10) strcat( StdString, "0"); - strcat( StdString, Stringsave2); - DrawString(StdString,(short)(TextBereich[TXTTAGESZEIT].rcText.left), - (short)(TextBereich[TXTTAGESZEIT].rcText.top),2); - + if (Stunden + 6 < 10) strcat(StdString, "0"); + strcat(StdString, Stringsave1); + strcat(StdString, ":"); + if (Minuten < 10) strcat(StdString, "0"); + strcat(StdString, Stringsave2); + DrawString(StdString, (short)(TextBereich[TXTTAGESZEIT].rcText.left), + (short)(TextBereich[TXTTAGESZEIT].rcText.top), 2); + if (PapierText != -1) ZeichnePapier(); - + //Die Textsurface blitten - for (i=0;iBlt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); - - if (PapierText != -1) - { + Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); + Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); + + if (PapierText != -1) + { ZeichnePapier(); - rcRectsrc = TextBereich[TXTPAPIER].rcText; - rcRectdes = TextBereich[TXTPAPIER].rcText; - Blitten(lpDDSSchrift,lpDDSBack,true); + rcRectsrc = TextBereich[TXTPAPIER].rcText; + rcRectdes = TextBereich[TXTPAPIER].rcText; + Blitten(Direct::lpDDSSchrift, Direct::lpDDSBack, true); } - Fade(100,100,100); + Fade(100, 100, 100); } //Cursor if (CursorTyp == CUPFEIL) ZeichneBilder(MousePosition.x, MousePosition.y, - CursorTyp, rcGesamt, false,-1); - else ZeichneBilder(MousePosition.x-Bmp[CursorTyp].Breite/2, - MousePosition.y-Bmp[CursorTyp].Hoehe/2, - CursorTyp, rcGesamt, false,-1); - //Flippen - while(1) - { - ddrval = lpDDSPrimary->Flip(NULL, 0); - if(ddrval == DD_OK) - { - break; - } - if(ddrval == DDERR_SURFACELOST) - { - ddrval = lpDDSPrimary->Restore(); - if(ddrval != DD_OK) - { - break; - } - } - if(ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } - - - if (Nacht) Fade(100,100,100); //Das muß hier stehen, damit man die Textnachricht in der Nacht lesen kann - + CursorTyp, rcGesamt, false, -1); + else ZeichneBilder(MousePosition.x - Bmp[CursorTyp].Breite / 2, + MousePosition.y - Bmp[CursorTyp].Hoehe / 2, + CursorTyp, rcGesamt, false, -1); + //Flippen + while (1) + { + ddrval = Direct::lpDDSPrimary->Flip(NULL, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = Direct::lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } + + + if (Nacht) Fade(100, 100, 100); //Das muß hier stehen, damit man die Textnachricht in der Nacht lesen kann + } void ZeigeIntro() { HRESULT ddrval; - short i,z; - + short i, z; + rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right= MAXX; + rcRectdes.top = 0; + rcRectdes.right = MAXX; rcRectdes.bottom = MAXY; - ddbltfx.dwFillColor = RGB2DWORD(0,0,0); - z=0; - while(1) + Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); + z = 0; + while (1) { z++; - ddrval = lpDDSBack->Blt(&rcRectdes,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx); - if (ddrval!=DDERR_WASSTILLDRAWING) break; - if (z==1000) + ddrval = Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &Direct::ddbltfx); + if (ddrval != DDERR_WASSTILLDRAWING) break; + if (z == 1000) { MessageBeep(MB_OK); break; } } - rcRectsrc.left = Camera.x+rcSpielflaeche.left; - rcRectsrc.top = Camera.y+rcSpielflaeche.top; - rcRectsrc.right = Camera.x+rcSpielflaeche.right; - rcRectsrc.bottom = Camera.y+rcSpielflaeche.bottom; - rcRectdes.left = rcSpielflaeche.left; - rcRectdes.top = rcSpielflaeche.top; - rcRectdes.right = rcSpielflaeche.right; - rcRectdes.bottom = rcSpielflaeche.bottom; - - Blitten(lpDDSScape,lpDDSBack,false); //Landschaft zeichnen - + rcRectsrc.left = Camera.x + rcSpielflaeche.left; + rcRectsrc.top = Camera.y + rcSpielflaeche.top; + rcRectsrc.right = Camera.x + rcSpielflaeche.right; + rcRectsrc.bottom = Camera.y + rcSpielflaeche.bottom; + rcRectdes.left = rcSpielflaeche.left; + rcRectdes.top = rcSpielflaeche.top; + rcRectdes.right = rcSpielflaeche.right; + rcRectdes.bottom = rcSpielflaeche.bottom; + + Blitten(Direct::lpDDSScape, Direct::lpDDSBack, false); //Landschaft zeichnen + ZeichneObjekte(); - + if (PapierText != -1) ZeichnePapier(); - + //Die Textsurface blitten - for (i=0;iFlip(NULL, 0); - if(ddrval == DD_OK) - { - break; - } - if(ddrval == DDERR_SURFACELOST) - { - ddrval = lpDDSPrimary->Restore(); - if(ddrval != DD_OK) - { - break; - } - } - if(ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } - + while (1) + { + ddrval = Direct::lpDDSPrimary->Flip(NULL, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = Direct::lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } + } void ZeigeAbspann() { HRESULT ddrval; short z; - - PlaySound(WAVABSPANN,100); + + Sound::PlaySound(WAVABSPANN, 100); rcRectdes.left = 0; rcRectdes.top = 0; rcRectdes.right = MAXX; rcRectdes.bottom = MAXY; - ddbltfx.dwFillColor = RGB2DWORD(0,0,0); - z=0; - while(1) + Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); + z = 0; + while (1) { z++; - ddrval = lpDDSBack->Blt(&rcRectdes,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx); - if (ddrval!=DDERR_WASSTILLDRAWING) break; - if (z==1000) + ddrval = Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &Direct::ddbltfx); + if (ddrval != DDERR_WASSTILLDRAWING) break; + if (z == 1000) { MessageBeep(MB_OK); break; @@ -5316,199 +2528,199 @@ void ZeigeAbspann() } if (AbspannZustand == 0) { - ZeichneBilder((short)MAXX/2-Bmp[AbspannListe[AbspannNr][0].Bild].Breite/2,100, - AbspannListe[AbspannNr][0].Bild,rcGesamt,false,-1); - for(z=1;z<10;z++) + ZeichneBilder((short)MAXX / 2 - Bmp[AbspannListe[AbspannNr][0].Bild].Breite / 2, 100, + AbspannListe[AbspannNr][0].Bild, rcGesamt, false, -1); + for (z = 1; z<10; z++) { if (AbspannListe[AbspannNr][z].Aktiv) AbspannBlt(AbspannListe[AbspannNr][z].Bild, - (short)(100*sin(pi/MAXY*(Bmp[AbspannListe[AbspannNr][z].Bild].rcDes.top+ - Bmp[AbspannListe[AbspannNr][z].Aktiv].Hoehe/2)))); + (short)(100 * sin(pi / MAXY*(Bmp[AbspannListe[AbspannNr][z].Bild].rcDes.top + + Bmp[AbspannListe[AbspannNr][z].Aktiv].Hoehe / 2)))); } } else if (AbspannZustand == 1) { rcRectsrc = Bmp[AbspannNr].rcSrc; rcRectsrc.top += Bmp[AbspannNr].Phase*Bmp[AbspannNr].Hoehe; - rcRectsrc.bottom = rcRectsrc.top+Bmp[AbspannNr].Hoehe; - + rcRectsrc.bottom = rcRectsrc.top + Bmp[AbspannNr].Hoehe; + rcRectdes.left = 2; rcRectdes.top = 2; - rcRectdes.right = Bmp[AbspannNr].Breite+2; - rcRectdes.bottom = Bmp[AbspannNr].Hoehe+2; + rcRectdes.right = Bmp[AbspannNr].Breite + 2; + rcRectdes.bottom = Bmp[AbspannNr].Hoehe + 2; - Blitten(Bmp[AbspannNr].Surface,lpDDSBack,true); + Blitten(Bmp[AbspannNr].Surface, Direct::lpDDSBack, true); rcRectsrc.left = 0; rcRectsrc.top = 0; - rcRectsrc.right = Bmp[AbspannNr].Breite+4; - rcRectsrc.bottom = Bmp[AbspannNr].Hoehe+4; + rcRectsrc.right = Bmp[AbspannNr].Breite + 4; + rcRectsrc.bottom = Bmp[AbspannNr].Hoehe + 4; + + rcRectdes.left = (short)MAXX / 2 - rcRectsrc.right * 10 / 2; + rcRectdes.top = (short)MAXY / 2 - rcRectsrc.bottom * 10 / 2; + rcRectdes.right = rcRectdes.left + rcRectsrc.right * 10; + rcRectdes.bottom = rcRectdes.top + rcRectsrc.bottom * 10; - rcRectdes.left = (short)MAXX/2-rcRectsrc.right*10/2; - rcRectdes.top = (short)MAXY/2-rcRectsrc.bottom*10/2; - rcRectdes.right = rcRectdes.left+rcRectsrc.right*10; - rcRectdes.bottom = rcRectdes.top+rcRectsrc.bottom*10; - - Blitten(lpDDSBack,lpDDSBack,false); + Blitten(Direct::lpDDSBack, Direct::lpDDSBack, false); rcRectsrc.left = 100; rcRectsrc.top = 2; - rcRectsrc.right = 100+Bmp[AbspannNr].Breite+2; - rcRectsrc.bottom = Bmp[AbspannNr].Hoehe+2; + rcRectsrc.right = 100 + Bmp[AbspannNr].Breite + 2; + rcRectsrc.bottom = Bmp[AbspannNr].Hoehe + 2; rcRectdes.left = 2; rcRectdes.top = 2; - rcRectdes.right = Bmp[AbspannNr].Breite+2; - rcRectdes.bottom = Bmp[AbspannNr].Hoehe+2; + rcRectdes.right = Bmp[AbspannNr].Breite + 2; + rcRectdes.bottom = Bmp[AbspannNr].Hoehe + 2; - Blitten(lpDDSBack,lpDDSBack,false); + Blitten(Direct::lpDDSBack, Direct::lpDDSBack, false); } //Flippen - while(1) - { - ddrval = lpDDSPrimary->Flip(NULL, 0); - if(ddrval == DD_OK) - { - break; - } - if(ddrval == DDERR_SURFACELOST) - { - ddrval = lpDDSPrimary->Restore(); - if(ddrval != DD_OK) - { - break; - } - } - if(ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } + while (1) + { + ddrval = Direct::lpDDSPrimary->Flip(NULL, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = Direct::lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } } void ZeigeLogo() { HRESULT ddrval; short z; - + rcRectdes.left = 0; rcRectdes.top = 0; rcRectdes.right = MAXX; rcRectdes.bottom = MAXY; - ddbltfx.dwFillColor = RGB2DWORD(0,0,0); - z=0; - while(1) + Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); + z = 0; + while (1) { z++; - ddrval = lpDDSBack->Blt(&rcRectdes,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx); - if (ddrval!=DDERR_WASSTILLDRAWING) break; - if (z==1000) + ddrval = Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &Direct::ddbltfx); + if (ddrval != DDERR_WASSTILLDRAWING) break; + if (z == 1000) { MessageBeep(MB_OK); break; } } - + rcRectsrc.left = 0; rcRectsrc.right = 500; - rcRectsrc.top = 0; + rcRectsrc.top = 0; rcRectsrc.bottom = 500; - rcRectdes.left = MAXX/2-250; - rcRectdes.right = MAXX/2+250; - rcRectdes.top = MAXY/2-250; - rcRectdes.bottom= MAXY/2+250; + rcRectdes.left = MAXX / 2 - 250; + rcRectdes.right = MAXX / 2 + 250; + rcRectdes.top = MAXY / 2 - 250; + rcRectdes.bottom = MAXY / 2 + 250; + + Blitten(Direct::lpDDSLogo, Direct::lpDDSBack, false); - Blitten(lpDDSLogo,lpDDSBack,false); - - PlaySound(WAVLOGO,100); + Sound::PlaySound(WAVLOGO, 100); //Flippen - while(1) - { - ddrval = lpDDSPrimary->Flip(NULL, 0); - if(ddrval == DD_OK) - { - break; - } - if(ddrval == DDERR_SURFACELOST) - { - ddrval = lpDDSPrimary->Restore(); - if(ddrval != DD_OK) - { - break; - } - } - if(ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } + while (1) + { + ddrval = Direct::lpDDSPrimary->Flip(NULL, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = Direct::lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } } void AbspannBlt(short Bild, short Prozent) { - short x,y; + short x, y; RGBSTRUCT rgbalt; - Bmp[Bild].Surface->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL); - lpDDSBack->Lock(NULL,&ddsd2,DDLOCK_WAIT,NULL); - - for (x=0;xLock(NULL, &Direct::ddsd, DDLOCK_WAIT, NULL); + Direct::lpDDSBack->Lock(NULL, &Direct::ddsd2, DDLOCK_WAIT, NULL); + + for (x = 0; x=MAXX) || (x+Bmp[Bild].rcDes.left<=0) || - (y+Bmp[Bild].rcDes.top>=MAXY) || (y+Bmp[Bild].rcDes.top<=0)) continue; - GetPixel((short)(x+Bmp[Bild].rcDes.left), - (short)(y+Bmp[Bild].rcDes.top),&ddsd2); + if ((x + Bmp[Bild].rcDes.left >= MAXX) || (x + Bmp[Bild].rcDes.left <= 0) || + (y + Bmp[Bild].rcDes.top >= MAXY) || (y + Bmp[Bild].rcDes.top <= 0)) continue; + GetPixel((short)(x + Bmp[Bild].rcDes.left), + (short)(y + Bmp[Bild].rcDes.top), &Direct::ddsd2); rgbalt = rgbStruct; - GetPixel((short)(x+Bmp[Bild].rcSrc.left), - (short)(y+Bmp[Bild].rcSrc.top),&ddsd); + GetPixel((short)(x + Bmp[Bild].rcSrc.left), + (short)(y + Bmp[Bild].rcSrc.top), &Direct::ddsd); if ((rgbStruct.r == 0) && (rgbStruct.g == 0) && (rgbStruct.b == 0)) continue; - PutPixel((short)(x+Bmp[Bild].rcDes.left), - (short)(y+Bmp[Bild].rcDes.top), - RGB2DWORD(rgbalt.r+(rgbStruct.r-rgbalt.r)*Prozent/100, - rgbalt.g+(rgbStruct.g-rgbalt.g)*Prozent/100, - rgbalt.b+(rgbStruct.b-rgbalt.b)*Prozent/100), - &ddsd2); - } - + PutPixel((short)(x + Bmp[Bild].rcDes.left), + (short)(y + Bmp[Bild].rcDes.top), + RGB2DWORD(rgbalt.r + (rgbStruct.r - rgbalt.r)*Prozent / 100, + rgbalt.g + (rgbStruct.g - rgbalt.g)*Prozent / 100, + rgbalt.b + (rgbStruct.b - rgbalt.b)*Prozent / 100), + &Direct::ddsd2); + } + Bmp[Bild].Surface->Unlock(NULL); - lpDDSBack->Unlock(NULL); - + Direct::lpDDSBack->Unlock(NULL); + } void AbspannCalc() { - short i,k; - + short i, k; + if (AbspannZustand == 0) { - for (k=1;k<10;k++) + for (k = 1; k<10; k++) { if (AbspannListe[AbspannNr][k].Bild == -1) break; if (!AbspannListe[AbspannNr][k].Aktiv) continue; - i = 150/LastBild; + i = 150 / LastBild; Bmp[AbspannListe[AbspannNr][k].Bild].rcDes.top -= i; - - if (Bmp[AbspannListe[AbspannNr][k].Bild].rcDes.top=Bmp[AbspannNr].Anzahl) + if (Bmp[AbspannNr].Phase >= Bmp[AbspannNr].Anzahl) { Bmp[AbspannNr].Phase = 0; AbspannNr++; @@ -5542,110 +2754,110 @@ void ZeichneBilder(short x, short y, short i, RECT Ziel, bool Reverse, short Fru rcRectsrc = Bmp[i].rcSrc; if (!Reverse) { - rcRectsrc.top += Phase*(Bmp[i].Hoehe); + rcRectsrc.top += Phase*(Bmp[i].Hoehe); } else { - rcRectsrc.top = Bmp[i].rcSrc.top+(Bmp[i].Anzahl-1)*Bmp[i].Hoehe-Phase*Bmp[i].Hoehe; + rcRectsrc.top = Bmp[i].rcSrc.top + (Bmp[i].Anzahl - 1)*Bmp[i].Hoehe - Phase*Bmp[i].Hoehe; } rcRectsrc.bottom = rcRectsrc.top + (Bmp[i].Hoehe); rcRectdes.left = x; - rcRectdes.top = y; - rcRectdes.right= x + (Bmp[i].Breite); - rcRectdes.bottom=y + (Bmp[i].Hoehe); + rcRectdes.top = y; + rcRectdes.right = x + (Bmp[i].Breite); + rcRectdes.bottom = y + (Bmp[i].Hoehe); CalcRect(Ziel); - Blitten(Bmp[i].Surface,lpDDSBack,true); + Blitten(Bmp[i].Surface, Direct::lpDDSBack, true); } void ZeichneObjekte() { - short x,y; + short x, y; bool Guyzeichnen; - for (y=0;y Camera.x+rcSpielflaeche.left-KXPIXEL) && - (Scape[x][y].xScreen < Camera.x+rcSpielflaeche.right+KXPIXEL) && - (Scape[x][y].yScreen > Camera.y+rcSpielflaeche.top-KYPIXEL) && - (Scape[x][y].yScreen < Camera.y+rcSpielflaeche.bottom+KYPIXEL) && - (Scape[x][y].Entdeckt) && + + if (!((Scape[x][y].xScreen > Camera.x + rcSpielflaeche.left - KXPIXEL) && + (Scape[x][y].xScreen < Camera.x + rcSpielflaeche.right + KXPIXEL) && + (Scape[x][y].yScreen > Camera.y + rcSpielflaeche.top - KYPIXEL) && + (Scape[x][y].yScreen < Camera.y + rcSpielflaeche.bottom + KYPIXEL) && + (Scape[x][y].Entdeckt) && ((Scape[x][y].Markiert) || (Scape[x][y].Objekt != -1) || (Guyzeichnen)))) continue; - + if (Scape[x][y].Markiert) //Die Rahmen um die markierten Kacheln malen { - rcRectsrc.left = KXPIXEL * Scape[x][y].Typ; - rcRectsrc.right = KXPIXEL * Scape[x][y].Typ+KXPIXEL; - rcRectsrc.top = 2*KYPIXEL; - rcRectsrc.bottom = 3*KYPIXEL; - rcRectdes.left = Scape[x][y].xScreen-Camera.x; - rcRectdes.right = rcRectdes.left+KXPIXEL; - rcRectdes.top = Scape[x][y].yScreen-Camera.y; - rcRectdes.bottom = rcRectdes.top+KYPIXEL; + rcRectsrc.left = KXPIXEL * Scape[x][y].Typ; + rcRectsrc.right = KXPIXEL * Scape[x][y].Typ + KXPIXEL; + rcRectsrc.top = 2 * KYPIXEL; + rcRectsrc.bottom = 3 * KYPIXEL; + rcRectdes.left = Scape[x][y].xScreen - Camera.x; + rcRectdes.right = rcRectdes.left + KXPIXEL; + rcRectdes.top = Scape[x][y].yScreen - Camera.y; + rcRectdes.bottom = rcRectdes.top + KYPIXEL; CalcRect(rcSpielflaeche); - Blitten(lpDDSMisc,lpDDSBack,true); + Blitten(Direct::lpDDSMisc, Direct::lpDDSBack, true); } //Landschaftsanimationen malen (und Feld) - if ((Scape[x][y].Objekt != -1) && (LAnimation) && - ((Scape[x][y].Objekt <= SCHLEUSE6)) - || (Scape[x][y].Objekt == FELD) //Der Guy ist immer vor diesen Objekten - || (Scape[x][y].Objekt == ROHR) - || (Scape[x][y].Objekt == SOS)) + if ((Scape[x][y].Objekt != -1) && (LAnimation) && + ((Scape[x][y].Objekt <= SCHLEUSE6)) + || (Scape[x][y].Objekt == FELD) //Der Guy ist immer vor diesen Objekten + || (Scape[x][y].Objekt == ROHR) + || (Scape[x][y].Objekt == SOS)) { //Sound abspielen - if (((Guy.Pos.x -1 <= x) && (x <= Guy.Pos.x +1)) && - ((Guy.Pos.y -1 <= y) && (y <= Guy.Pos.y +1))) + if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && + ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) { if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) - PlaySound(Bmp[Scape[x][y].Objekt].Sound,100); - else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) - PlaySound(Bmp[Scape[x][y].Objekt].Sound,90); + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 100); + else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 90); } - - ZeichneBilder(Scape[x][y].xScreen+Scape[x][y].ObPos.x-Camera.x, - Scape[x][y].yScreen+Scape[x][y].ObPos.y-Camera.y, + + ZeichneBilder(Scape[x][y].xScreen + Scape[x][y].ObPos.x - Camera.x, + Scape[x][y].yScreen + Scape[x][y].ObPos.y - Camera.y, Scape[x][y].Objekt, rcSpielflaeche, Scape[x][y].Reverse, - (short)Scape[x][y].Phase); + (short)Scape[x][y].Phase); } - else + else { - - if (((Scape[x][y].Objekt >= BAUM1) && (Scape[x][y].Objekt <=BAUM4DOWN)) || + + if (((Scape[x][y].Objekt >= BAUM1) && (Scape[x][y].Objekt <= BAUM4DOWN)) || (Scape[x][y].Objekt == BAUMGROSS) || (Scape[x][y].Objekt == FEUER) || (Scape[x][y].Objekt == WRACK) || (Scape[x][y].Objekt == WRACK2) || - (Scape[x][y].Objekt >= ZELT)) //Bäume und Früchte (und alle anderen Objekte) malen + (Scape[x][y].Objekt >= ZELT)) //Bäume und Früchte (und alle anderen Objekte) malen { //Sound abspielen - if (((Guy.Pos.x -1 <= x) && (x <= Guy.Pos.x +1)) && - ((Guy.Pos.y -1 <= y) && (y <= Guy.Pos.y +1))) + if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && + ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) { if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) - PlaySound(Bmp[Scape[x][y].Objekt].Sound,100); - else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) - PlaySound(Bmp[Scape[x][y].Objekt].Sound,90); + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 100); + else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 90); } if (Guyzeichnen) { - if ((Guy.PosScreen.y) < (Scape[x][y].yScreen+Scape[x][y].ObPos.y - +Bmp[Scape[x][y].Objekt].Hoehe)) + if ((Guy.PosScreen.y) < (Scape[x][y].yScreen + Scape[x][y].ObPos.y + + Bmp[Scape[x][y].Objekt].Hoehe)) { ZeichneGuy(); Guyzeichnen = false; } } - - ZeichneBilder(Scape[x][y].xScreen+Scape[x][y].ObPos.x-Camera.x, - Scape[x][y].yScreen+Scape[x][y].ObPos.y-Camera.y, - Scape[x][y].Objekt, rcSpielflaeche, false, - (short)Scape[x][y].Phase); + + ZeichneBilder(Scape[x][y].xScreen + Scape[x][y].ObPos.x - Camera.x, + Scape[x][y].yScreen + Scape[x][y].ObPos.y - Camera.y, + Scape[x][y].Objekt, rcSpielflaeche, false, + (short)Scape[x][y].Phase); } } if (Guyzeichnen) ZeichneGuy(); - } + } } void ZeichneGuy() @@ -5654,378 +2866,378 @@ void ZeichneGuy() { if (Guy.Zustand == GUYSCHIFF) { - ZeichneBilder(Guy.PosScreen.x-30-Camera.x, - Guy.PosScreen.y-28-Camera.y, - Guy.Zustand, rcSpielflaeche, false,-1); + ZeichneBilder(Guy.PosScreen.x - 30 - Camera.x, + Guy.PosScreen.y - 28 - Camera.y, + Guy.Zustand, rcSpielflaeche, false, -1); } else { - ZeichneBilder(Guy.PosScreen.x-(Bmp[Guy.Zustand].Breite)/2-Camera.x, - Guy.PosScreen.y-(Bmp[Guy.Zustand].Hoehe )/2-Camera.y, - Guy.Zustand, rcSpielflaeche, false,-1); + ZeichneBilder(Guy.PosScreen.x - (Bmp[Guy.Zustand].Breite) / 2 - Camera.x, + Guy.PosScreen.y - (Bmp[Guy.Zustand].Hoehe) / 2 - Camera.y, + Guy.Zustand, rcSpielflaeche, false, -1); } } - else ZeichneBilder(Guy.PosScreen.x-(Bmp[Guy.Zustand].Breite)/2-Camera.x, - Guy.PosScreen.y-(Bmp[Guy.Zustand].Hoehe ) -Camera.y, - Guy.Zustand, rcSpielflaeche, false,-1); + else ZeichneBilder(Guy.PosScreen.x - (Bmp[Guy.Zustand].Breite) / 2 - Camera.x, + Guy.PosScreen.y - (Bmp[Guy.Zustand].Hoehe) - Camera.y, + Guy.Zustand, rcSpielflaeche, false, -1); //Sound abspielen - if (Guy.Aktiv) PlaySound(Bmp[Guy.Zustand].Sound,100); + if (Guy.Aktiv) Sound::PlaySound(Bmp[Guy.Zustand].Sound, 100); } void ZeichnePapier() { - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 464; - rcRectsrc.bottom = 77; - rcRectdes.left = TextBereich[TXTPAPIER].rcText.left-60; - rcRectdes.top = TextBereich[TXTPAPIER].rcText.top-30; - rcRectdes.right = rcRectdes.left+464; - rcRectdes.bottom = rcRectdes.top+77; - Blitten(lpDDSPapier,lpDDSBack,true); - rcRectdes.left = rcRectdes.left+34; - rcRectdes.top = rcRectdes.top+77; - rcRectdes.right = rcRectdes.right; - rcRectdes.bottom = TextBereich[TXTPAPIER].rcText.top+PapierText; - ddbltfx.dwFillColor = RGB2DWORD(236,215,179); - lpDDSBack->Blt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); - rcRectsrc.left = 0; - rcRectsrc.top = 77; - rcRectsrc.right = 464; - rcRectsrc.bottom = 154; - rcRectdes.left = TextBereich[TXTPAPIER].rcText.left-60; - rcRectdes.top = rcRectdes.bottom-47; - rcRectdes.right = rcRectdes.left+464; - rcRectdes.bottom = rcRectdes.top+77; - Blitten(lpDDSPapier,lpDDSBack,true); + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 464; + rcRectsrc.bottom = 77; + rcRectdes.left = TextBereich[TXTPAPIER].rcText.left - 60; + rcRectdes.top = TextBereich[TXTPAPIER].rcText.top - 30; + rcRectdes.right = rcRectdes.left + 464; + rcRectdes.bottom = rcRectdes.top + 77; + Blitten(Direct::lpDDSPapier, Direct::lpDDSBack, true); + rcRectdes.left = rcRectdes.left + 34; + rcRectdes.top = rcRectdes.top + 77; + rcRectdes.right = rcRectdes.right; + rcRectdes.bottom = TextBereich[TXTPAPIER].rcText.top + PapierText; + Direct::ddbltfx.dwFillColor = RGB2DWORD(236, 215, 179); + Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); + rcRectsrc.left = 0; + rcRectsrc.top = 77; + rcRectsrc.right = 464; + rcRectsrc.bottom = 154; + rcRectdes.left = TextBereich[TXTPAPIER].rcText.left - 60; + rcRectdes.top = rcRectdes.bottom - 47; + rcRectdes.right = rcRectdes.left + 464; + rcRectdes.bottom = rcRectdes.top + 77; + Blitten(Direct::lpDDSPapier, Direct::lpDDSBack, true); } void ZeichnePanel() { - short diffx,diffy,TagesZeit,i,j,Ringtmp; //für die Sonnenanzeige - + short diffx, diffy, TagesZeit, i, j, Ringtmp; //für die Sonnenanzeige + //Karte - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 2*MAXXKACH; - rcRectsrc.bottom = 2*MAXYKACH; - rcRectdes.left = rcKarte.left; - rcRectdes.top = rcKarte.top; - rcRectdes.right = rcKarte.right; - rcRectdes.bottom = rcKarte.bottom; - Blitten(lpDDSKarte,lpDDSBack,false); + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 2 * MAXXKACH; + rcRectsrc.bottom = 2 * MAXYKACH; + rcRectdes.left = rcKarte.left; + rcRectdes.top = rcKarte.top; + rcRectdes.right = rcKarte.right; + rcRectdes.bottom = rcKarte.bottom; + Blitten(Direct::lpDDSKarte, Direct::lpDDSBack, false); //Spielfigur - rcRectdes.left = rcKarte.left+2*Guy.Pos.x; - rcRectdes.top = rcKarte.top+2*Guy.Pos.y; - rcRectdes.right = rcRectdes.left+2; - rcRectdes.bottom = rcRectdes.top+2; - ddbltfx.dwFillColor = RGB2DWORD(255,0,0); - lpDDSBack->Blt(&rcRectdes, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); - + rcRectdes.left = rcKarte.left + 2 * Guy.Pos.x; + rcRectdes.top = rcKarte.top + 2 * Guy.Pos.y; + rcRectdes.right = rcRectdes.left + 2; + rcRectdes.bottom = rcRectdes.top + 2; + Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 0); + Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); + //Position einmalen - rcRectsrc.left = 205; - rcRectsrc.top = 0; - rcRectsrc.right = 205+65; - rcRectsrc.bottom = 0+65; - rcRectdes.left = rcKarte.left + (Camera.x+2*Camera.y)/(KXPIXEL/2) -MAXXKACH -2; - rcRectdes.top = rcKarte.top + (2*Camera.y-Camera.x)/(KXPIXEL/2) +MAXYKACH-21 -2; - rcRectdes.right = rcRectdes.left+65; - rcRectdes.bottom = rcRectdes.top +65; + rcRectsrc.left = 205; + rcRectsrc.top = 0; + rcRectsrc.right = 205 + 65; + rcRectsrc.bottom = 0 + 65; + rcRectdes.left = rcKarte.left + (Camera.x + 2 * Camera.y) / (KXPIXEL / 2) - MAXXKACH - 2; + rcRectdes.top = rcKarte.top + (2 * Camera.y - Camera.x) / (KXPIXEL / 2) + MAXYKACH - 21 - 2; + rcRectdes.right = rcRectdes.left + 65; + rcRectdes.bottom = rcRectdes.top + 65; CalcRect(rcKarte); - Blitten(lpDDSPanel,lpDDSBack,true); - + Blitten(Direct::lpDDSPanel, Direct::lpDDSBack, true); + //Panel malen - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 205; - rcRectsrc.bottom = 600; - rcRectdes.left = rcPanel.left; - rcRectdes.top = rcPanel.top; - rcRectdes.right = rcPanel.right; - rcRectdes.bottom = rcPanel.bottom; - Blitten(lpDDSPanel,lpDDSBack,true); + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 205; + rcRectsrc.bottom = 600; + rcRectdes.left = rcPanel.left; + rcRectdes.top = rcPanel.top; + rcRectdes.right = rcPanel.right; + rcRectdes.bottom = rcPanel.bottom; + Blitten(Direct::lpDDSPanel, Direct::lpDDSBack, true); //Gitternetzknopf if (Gitter) Bmp[BUTTGITTER].Phase = 1; else Bmp[BUTTGITTER].Phase = 0; ZeichneBilder((short)Bmp[BUTTGITTER].rcDes.left, - (short)Bmp[BUTTGITTER].rcDes.top, - BUTTGITTER, rcPanel, false,-1); + (short)Bmp[BUTTGITTER].rcDes.top, + BUTTGITTER, rcPanel, false, -1); //SOUNDknopf if ((Soundzustand == 0) || (Soundzustand == -1)) Bmp[BUTTSOUND].Phase = 1; else Bmp[BUTTSOUND].Phase = 0; ZeichneBilder((short)Bmp[BUTTSOUND].rcDes.left, - (short)Bmp[BUTTSOUND].rcDes.top, - BUTTSOUND, rcPanel, false,-1); + (short)Bmp[BUTTSOUND].rcDes.top, + BUTTSOUND, rcPanel, false, -1); //ANIMATIONknopf if (!LAnimation) Bmp[BUTTANIMATION].Phase = 1; else Bmp[BUTTANIMATION].Phase = 0; ZeichneBilder((short)Bmp[BUTTANIMATION].rcDes.left, - (short)Bmp[BUTTANIMATION].rcDes.top, - BUTTANIMATION, rcPanel, false,-1); + (short)Bmp[BUTTANIMATION].rcDes.top, + BUTTANIMATION, rcPanel, false, -1); //BEENDENknopf ZeichneBilder((short)Bmp[BUTTBEENDEN].rcDes.left, - (short)Bmp[BUTTBEENDEN].rcDes.top, - BUTTBEENDEN, rcPanel, false,-1); + (short)Bmp[BUTTBEENDEN].rcDes.top, + BUTTBEENDEN, rcPanel, false, -1); //NEUknopf ZeichneBilder((short)Bmp[BUTTNEU].rcDes.left, - (short)Bmp[BUTTNEU].rcDes.top, - BUTTNEU, rcPanel, false,-1); - + (short)Bmp[BUTTNEU].rcDes.top, + BUTTNEU, rcPanel, false, -1); + //TAGNEUknopf ZeichneBilder((short)Bmp[BUTTTAGNEU].rcDes.left, - (short)Bmp[BUTTTAGNEU].rcDes.top, - BUTTTAGNEU, rcPanel, false,-1); + (short)Bmp[BUTTTAGNEU].rcDes.top, + BUTTTAGNEU, rcPanel, false, -1); //Aktionsknopf if (HauptMenue == MEAKTION) Bmp[BUTTAKTION].Phase = Bmp[BUTTAKTION].Anzahl; else if (Bmp[BUTTAKTION].Phase == Bmp[BUTTAKTION].Anzahl) Bmp[BUTTAKTION].Phase = 0; ZeichneBilder((short)Bmp[BUTTAKTION].rcDes.left, - (short)Bmp[BUTTAKTION].rcDes.top, - BUTTAKTION, rcPanel, false,-1); - + (short)Bmp[BUTTAKTION].rcDes.top, + BUTTAKTION, rcPanel, false, -1); + //BauKnopf if (HauptMenue == MEBAUEN) Bmp[BUTTBAUEN].Phase = Bmp[BUTTBAUEN].Anzahl; else if (Bmp[BUTTBAUEN].Phase == Bmp[BUTTBAUEN].Anzahl) Bmp[BUTTBAUEN].Phase = 0; ZeichneBilder((short)Bmp[BUTTBAUEN].rcDes.left, - (short)Bmp[BUTTBAUEN].rcDes.top, - BUTTBAUEN, rcPanel, false,-1); + (short)Bmp[BUTTBAUEN].rcDes.top, + BUTTBAUEN, rcPanel, false, -1); //Inventarknopf - if (HauptMenue == MEINVENTAR) Bmp[BUTTINVENTAR].Phase = Bmp[BUTTINVENTAR].Anzahl; + if (HauptMenue == MEINVENTAR) Bmp[BUTTINVENTAR].Phase = Bmp[BUTTINVENTAR].Anzahl; else if (Bmp[BUTTINVENTAR].Phase == Bmp[BUTTINVENTAR].Anzahl) Bmp[BUTTINVENTAR].Phase = 0; ZeichneBilder((short)Bmp[BUTTINVENTAR].rcDes.left, - (short)Bmp[BUTTINVENTAR].rcDes.top, - BUTTINVENTAR, rcPanel, false,-1); + (short)Bmp[BUTTINVENTAR].rcDes.top, + BUTTINVENTAR, rcPanel, false, -1); //WEITERknopf if (Bmp[BUTTWEITER].Phase != -1) ZeichneBilder((short)Bmp[BUTTWEITER].rcDes.left, - (short)Bmp[BUTTWEITER].rcDes.top, - BUTTWEITER, rcPanel, false,-1); + (short)Bmp[BUTTWEITER].rcDes.top, + BUTTWEITER, rcPanel, false, -1); //STOPknopf if (Bmp[BUTTSTOP].Phase != -1) ZeichneBilder((short)Bmp[BUTTSTOP].rcDes.left, - (short)Bmp[BUTTSTOP].rcDes.top, - BUTTSTOP, rcPanel, false,-1); - + (short)Bmp[BUTTSTOP].rcDes.top, + BUTTSTOP, rcPanel, false, -1); + //ABLEGENknopf if (Bmp[BUTTABLEGEN].Phase != -1) ZeichneBilder((short)Bmp[BUTTABLEGEN].rcDes.left, - (short)Bmp[BUTTABLEGEN].rcDes.top, - BUTTABLEGEN, rcPanel, false,-1); - - //Welches Menü zeichnen? + (short)Bmp[BUTTABLEGEN].rcDes.top, + BUTTABLEGEN, rcPanel, false, -1); + + //Welches Menü zeichnen? switch (HauptMenue) { case MEAKTION: - for (i=BUTTSUCHEN;i<=BUTTSCHLEUDER;i++) + for (i = BUTTSUCHEN; i <= BUTTSCHLEUDER; i++) { - if (Bmp[i].Phase == -1) + if (Bmp[i].Phase == -1) { ZeichneBilder((short)Bmp[i].rcDes.left, (short)Bmp[i].rcDes.top, - BUTTFRAGEZ, rcPanel, false,-1); + BUTTFRAGEZ, rcPanel, false, -1); continue; } ZeichneBilder((short)Bmp[i].rcDes.left, (short)Bmp[i].rcDes.top, - i, rcPanel, false,-1); + i, rcPanel, false, -1); } break; case MEBAUEN: - for (i=BUTTZELT;i<=BUTTDESTROY;i++) + for (i = BUTTZELT; i <= BUTTDESTROY; i++) { - if (Bmp[i].Phase == -1) + if (Bmp[i].Phase == -1) { ZeichneBilder((short)Bmp[i].rcDes.left, (short)Bmp[i].rcDes.top, - BUTTFRAGEZ, rcPanel, false,-1); + BUTTFRAGEZ, rcPanel, false, -1); continue; } ZeichneBilder((short)Bmp[i].rcDes.left, (short)Bmp[i].rcDes.top, - i, rcPanel, false,-1); + i, rcPanel, false, -1); } break; case MEINVENTAR: ZeichneBilder((short)Bmp[INVPAPIER].rcDes.left, - (short)Bmp[INVPAPIER].rcDes.top, - INVPAPIER, rcPanel, false,-1); - for (i=ROHAST;i<=ROHSCHLEUDER;i++) + (short)Bmp[INVPAPIER].rcDes.top, + INVPAPIER, rcPanel, false, -1); + for (i = ROHAST; i <= ROHSCHLEUDER; i++) { if (Guy.Inventar[i] <= 0) continue; ZeichneBilder((short)Bmp[i].rcDes.left, (short)Bmp[i].rcDes.top, - i, rcPanel, false,-1); - Bmp[ROEMISCH1].rcDes.top = Bmp[i].rcDes.top; - Bmp[ROEMISCH2].rcDes.top = Bmp[i].rcDes.top; - for(j=1;j<=Guy.Inventar[i];j++) + i, rcPanel, false, -1); + Bmp[ROEMISCH1].rcDes.top = Bmp[i].rcDes.top; + Bmp[ROEMISCH2].rcDes.top = Bmp[i].rcDes.top; + for (j = 1; j <= Guy.Inventar[i]; j++) { if (j<5) { - ZeichneBilder((short)Bmp[i].rcDes.left+20+j*4, + ZeichneBilder((short)Bmp[i].rcDes.left + 20 + j * 4, (short)Bmp[ROEMISCH1].rcDes.top, - ROEMISCH1, rcPanel, false,-1); + ROEMISCH1, rcPanel, false, -1); } - else if (j==5) ZeichneBilder((short)Bmp[i].rcDes.left+23, + else if (j == 5) ZeichneBilder((short)Bmp[i].rcDes.left + 23, (short)Bmp[ROEMISCH2].rcDes.top, - ROEMISCH2, rcPanel, false,-1); - else if ((j>5)&&(j<10)) + ROEMISCH2, rcPanel, false, -1); + else if ((j>5) && (j<10)) { - ZeichneBilder((short)Bmp[i].rcDes.left+20+j*4, + ZeichneBilder((short)Bmp[i].rcDes.left + 20 + j * 4, (short)Bmp[ROEMISCH1].rcDes.top, - ROEMISCH1, rcPanel, false,-1); + ROEMISCH1, rcPanel, false, -1); } - else if (j==10) - ZeichneBilder((short)Bmp[i].rcDes.left+43, + else if (j == 10) + ZeichneBilder((short)Bmp[i].rcDes.left + 43, (short)Bmp[ROEMISCH2].rcDes.top, - ROEMISCH2, rcPanel, false,-1); + ROEMISCH2, rcPanel, false, -1); } } break; } - //Säule1 - i = Bmp[SAEULE1].Hoehe-(short)Guy.Resource[WASSER]*Bmp[SAEULE1].Hoehe/100; + //Säule1 + i = Bmp[SAEULE1].Hoehe - (short)Guy.Resource[WASSER] * Bmp[SAEULE1].Hoehe / 100; rcRectsrc = Bmp[SAEULE1].rcSrc; rcRectsrc.top += i; rcRectdes = Bmp[SAEULE1].rcDes; rcRectdes.top += i; - Blitten(Bmp[SAEULE1].Surface,lpDDSBack,true); + Blitten(Bmp[SAEULE1].Surface, Direct::lpDDSBack, true); - //Säule2 - i = Bmp[SAEULE2].Hoehe-(short)Guy.Resource[NAHRUNG]*Bmp[SAEULE2].Hoehe/100; + //Säule2 + i = Bmp[SAEULE2].Hoehe - (short)Guy.Resource[NAHRUNG] * Bmp[SAEULE2].Hoehe / 100; rcRectsrc = Bmp[SAEULE2].rcSrc; rcRectsrc.top += i; rcRectdes = Bmp[SAEULE2].rcDes; rcRectdes.top += i; - Blitten(Bmp[SAEULE2].Surface,lpDDSBack,true); - - //Säule3 - i = Bmp[SAEULE3].Hoehe-(short)Guy.Resource[GESUNDHEIT]*Bmp[SAEULE3].Hoehe/100; + Blitten(Bmp[SAEULE2].Surface, Direct::lpDDSBack, true); + + //Säule3 + i = Bmp[SAEULE3].Hoehe - (short)Guy.Resource[GESUNDHEIT] * Bmp[SAEULE3].Hoehe / 100; rcRectsrc = Bmp[SAEULE3].rcSrc; rcRectsrc.top += i; rcRectdes = Bmp[SAEULE3].rcDes; rcRectdes.top += i; - Blitten(Bmp[SAEULE3].Surface,lpDDSBack,true); - + Blitten(Bmp[SAEULE3].Surface, Direct::lpDDSBack, true); + //Sonnenanzeige - diffx = ((short)Bmp[SONNE].rcDes.right-(short)Bmp[SONNE].rcDes.left-Bmp[SONNE].Breite)/2; - diffy = (short)Bmp[SONNE].rcDes.bottom-(short)Bmp[SONNE].rcDes.top-Bmp[SONNE].Hoehe/2; - TagesZeit = (Stunden*10+Minuten*10/60); - - ZeichneBilder((short)(Bmp[SONNE].rcDes.left+diffx * cos(pi-pi*TagesZeit/120)+diffx), - (short)(Bmp[SONNE].rcDes.top+(-diffy * sin(pi-pi*TagesZeit/120)+diffy)), - SONNE, Bmp[SONNE].rcDes, false,-1); - + diffx = ((short)Bmp[SONNE].rcDes.right - (short)Bmp[SONNE].rcDes.left - Bmp[SONNE].Breite) / 2; + diffy = (short)Bmp[SONNE].rcDes.bottom - (short)Bmp[SONNE].rcDes.top - Bmp[SONNE].Hoehe / 2; + TagesZeit = (Stunden * 10 + Minuten * 10 / 60); + + ZeichneBilder((short)(Bmp[SONNE].rcDes.left + diffx * cos(pi - pi*TagesZeit / 120) + diffx), + (short)(Bmp[SONNE].rcDes.top + (-diffy * sin(pi - pi*TagesZeit / 120) + diffy)), + SONNE, Bmp[SONNE].rcDes, false, -1); + //Rettungsring - if (Chance < 100) Ringtmp = (short)(100*sin(pi/200*Chance)); + if (Chance < 100) Ringtmp = (short)(100 * sin(pi / 200 * Chance)); else Ringtmp = 100; if (Ringtmp > 100) Ringtmp = 100; ZeichneBilder((short)(Bmp[RING].rcDes.left), - (short)(Bmp[RING].rcDes.top+Ringtmp), - RING, rcPanel, false,-1); - + (short)(Bmp[RING].rcDes.top + Ringtmp), + RING, rcPanel, false, -1); + //Die ChanceZahl ausgeben Textloeschen(TXTCHANCE); TextBereich[TXTCHANCE].Aktiv = true; - TextBereich[TXTCHANCE].rcText.top = Bmp[RING].rcDes.top+Ringtmp+Bmp[RING].Hoehe; - TextBereich[TXTCHANCE].rcText.bottom= TextBereich[TXTCHANCE].rcText.top + S2YPIXEL; + TextBereich[TXTCHANCE].rcText.top = Bmp[RING].rcDes.top + Ringtmp + Bmp[RING].Hoehe; + TextBereich[TXTCHANCE].rcText.bottom = TextBereich[TXTCHANCE].rcText.top + S2YPIXEL; sprintf(StdString, "%.1f", Chance); - DrawString(StdString,(short)(TextBereich[TXTCHANCE].rcText.left), - (short)(TextBereich[TXTCHANCE].rcText.top),2); + DrawString(StdString, (short)(TextBereich[TXTCHANCE].rcText.left), + (short)(TextBereich[TXTCHANCE].rcText.top), 2); //TextFeld malen - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 605; - rcRectsrc.bottom = 20; - rcRectdes = rcTextFeld1; - Blitten(lpDDSTextFeld,lpDDSBack,false); + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 605; + rcRectsrc.bottom = 20; + rcRectdes = rcTextFeld1; + Blitten(Direct::lpDDSTextFeld, Direct::lpDDSBack, false); } void DrawString(char *string, short x, short y, short Art) { - short length, index, cindex,Breite,Hoehe; - - if (Art==1) + short length, index, cindex, Breite, Hoehe; + + if (Art == 1) { Breite = S1XPIXEL; - Hoehe = S1YPIXEL; + Hoehe = S1YPIXEL; } - if (Art==2) + if (Art == 2) { Breite = S2XPIXEL; - Hoehe = S2YPIXEL; + Hoehe = S2YPIXEL; } - - // Länge der Schrift ermitteln - length = strlen(string); - + + // Länge der Schrift ermitteln + length = strlen(string); + // Alle Zeichen durchgehen - for (index=0; index=' ')&& (string[index] <= '/')) + + if ((string[index] >= ' ') && (string[index] <= '/')) { - rcRectsrc.left = cindex*Breite; - rcRectsrc.top = 0; + rcRectsrc.left = cindex*Breite; + rcRectsrc.top = 0; } - if ((string[index]>='0')&& (string[index] <= '?')) + if ((string[index] >= '0') && (string[index] <= '?')) { - rcRectsrc.left = (cindex-16)*Breite; - rcRectsrc.top = Hoehe; + rcRectsrc.left = (cindex - 16)*Breite; + rcRectsrc.top = Hoehe; } - if ((string[index]>='@')&& (string[index] <= 'O')) + if ((string[index] >= '@') && (string[index] <= 'O')) { - rcRectsrc.left = (cindex-16*2)*Breite; - rcRectsrc.top = 2*Hoehe; + rcRectsrc.left = (cindex - 16 * 2)*Breite; + rcRectsrc.top = 2 * Hoehe; } - if ((string[index]>='P')&& (string[index] <= '_')) + if ((string[index] >= 'P') && (string[index] <= '_')) { - rcRectsrc.left = (cindex-16*3)*Breite; - rcRectsrc.top = 3*Hoehe; + rcRectsrc.left = (cindex - 16 * 3)*Breite; + rcRectsrc.top = 3 * Hoehe; } - if ((string[index]>'_')&& (string[index] <= 'o')) + if ((string[index]>'_') && (string[index] <= 'o')) { - rcRectsrc.left = (cindex-16*4)*Breite; - rcRectsrc.top = 4*Hoehe; + rcRectsrc.left = (cindex - 16 * 4)*Breite; + rcRectsrc.top = 4 * Hoehe; } - if ((string[index]>='p')&& (string[index] <= '~')) + if ((string[index] >= 'p') && (string[index] <= '~')) { - rcRectsrc.left = (cindex-16*5)*Breite; - rcRectsrc.top = 5*Hoehe; + rcRectsrc.left = (cindex - 16 * 5)*Breite; + rcRectsrc.top = 5 * Hoehe; } - rcRectsrc.right = rcRectsrc.left + Breite; - rcRectsrc.bottom = rcRectsrc.top +Hoehe; - rcRectdes.left = x; - rcRectdes.top = y; - rcRectdes.right = x+Breite; - rcRectdes.bottom = y+Hoehe; + rcRectsrc.right = rcRectsrc.left + Breite; + rcRectsrc.bottom = rcRectsrc.top + Hoehe; + rcRectdes.left = x; + rcRectdes.top = y; + rcRectdes.right = x + Breite; + rcRectdes.bottom = y + Hoehe; //Zeichen zeichnen - if (Art == 1) + if (Art == 1) { - Blitten(lpDDSSchrift1,lpDDSSchrift,true); + Blitten(Direct::lpDDSSchrift1, Direct::lpDDSSchrift, true); //x Position weiterschieben - x+=S1ABSTAND; + x += S1ABSTAND; } - if (Art == 2) + if (Art == 2) { - Blitten(lpDDSSchrift2,lpDDSSchrift,true); + Blitten(Direct::lpDDSSchrift2, Direct::lpDDSSchrift, true); //x Position weiterschieben - x+=S2ABSTAND; + x += S2ABSTAND; } - } -} + } +} -short DrawText(int TEXT,short Bereich, short Art) +short DrawText(int TEXT, short Bereich, short Art) { - short BBreite,BHoehe,Posx,Posy; + short BBreite, BHoehe, Posx, Posy; short Pos; char *Posnext, *Posnext2; char Text[1024]; int blank = ' '; @@ -6039,88 +3251,88 @@ short DrawText(int TEXT,short Bereich, short Art) Textloeschen(Bereich); TextBereich[Bereich].Aktiv = true; - if (Art==1) + if (Art == 1) { BBreite = S1ABSTAND; - BHoehe = S1YPIXEL; + BHoehe = S1YPIXEL; } - if (Art==2) + if (Art == 2) { BBreite = S2ABSTAND; - BHoehe = S2YPIXEL; + BHoehe = S2YPIXEL; } - LoadString(g_hInst,TEXT,Text,1024); + LoadString(Direct::g_hInst, TEXT, Text, 1024); Posx = (short)TextBereich[Bereich].rcText.left; Posy = (short)TextBereich[Bereich].rcText.top; - Pos = 0; + Pos = 0; Posnext = Text; - - while(1) + + while (1) { - strcpy(StdString,""); - Pos = Posnext-Text; - Posnext = strchr(Text+Pos+1, blank); - Posnext2 = strchr(Text+Pos+1, slash); + strcpy(StdString, ""); + Pos = Posnext - Text; + Posnext = strchr(Text + Pos + 1, blank); + Posnext2 = strchr(Text + Pos + 1, slash); if ((Posnext != NULL) && (Posnext2 != NULL) && (Posnext2 <= Posnext)) { - scratch = *(Posnext2+1); + scratch = *(Posnext2 + 1); switch (scratch) { case 'a': Anzahl = sprintf(StdString2, " %d", Tag); - DrawString(StdString2,Posx,Posy,Art); + DrawString(StdString2, Posx, Posy, Art); Posx += BBreite*(Anzahl); break; case 'b': Anzahl = sprintf(StdString2, " %d", (short)Guy.Resource[GESUNDHEIT]); - DrawString(StdString2,Posx,Posy,Art); + DrawString(StdString2, Posx, Posy, Art); Posx += BBreite*(Anzahl); break; case 'c': Anzahl = sprintf(StdString2, " %.2f", Chance); - DrawString(StdString2,Posx,Posy,Art); + DrawString(StdString2, Posx, Posy, Art); Posx += BBreite*(Anzahl); break; case 'd': Frage = 0; rcRectsrc = Bmp[JA].rcSrc; - rcRectdes.left = (short)TextBereich[Bereich].rcText.left+50; - rcRectdes.top = Posy + 50; + rcRectdes.left = (short)TextBereich[Bereich].rcText.left + 50; + rcRectdes.top = Posy + 50; rcRectdes.right = rcRectdes.left + Bmp[JA].Breite; rcRectdes.bottom = rcRectdes.top + Bmp[JA].Hoehe; Bmp[JA].rcDes = rcRectdes; - Blitten(Bmp[JA].Surface,lpDDSSchrift,false); - + Blitten(Bmp[JA].Surface, Direct::lpDDSSchrift, false); + rcRectsrc = Bmp[NEIN].rcSrc; - rcRectdes.left = (short)TextBereich[Bereich].rcText.left+220; - rcRectdes.top = Posy + 50; + rcRectdes.left = (short)TextBereich[Bereich].rcText.left + 220; + rcRectdes.top = Posy + 50; rcRectdes.right = rcRectdes.left + Bmp[NEIN].Breite; rcRectdes.bottom = rcRectdes.top + Bmp[NEIN].Hoehe; Bmp[NEIN].rcDes = rcRectdes; - Blitten(Bmp[NEIN].Surface,lpDDSSchrift,false); + Blitten(Bmp[NEIN].Surface, Direct::lpDDSSchrift, false); Posy += 115; break; case 'z': - Posx = (short)TextBereich[Bereich].rcText.left-BBreite; - Posy += BHoehe+3; + Posx = (short)TextBereich[Bereich].rcText.left - BBreite; + Posy += BHoehe + 3; break; } - Pos = Pos+3; - Posnext = Posnext2+2; + Pos = Pos + 3; + Posnext = Posnext2 + 2; } - if (Posnext == NULL) Posnext = strchr(Text+Pos+1, strend); - strncpy(StdString, Text+Pos, (Posnext-Text)-Pos); - if (Posx + BBreite*((Posnext-Text)-Pos) > TextBereich[Bereich].rcText.right) + if (Posnext == NULL) Posnext = strchr(Text + Pos + 1, strend); + strncpy(StdString, Text + Pos, (Posnext - Text) - Pos); + if (Posx + BBreite*((Posnext - Text) - Pos) > TextBereich[Bereich].rcText.right) { - Posx = (short)TextBereich[Bereich].rcText.left-BBreite; - Posy += BHoehe+3; + Posx = (short)TextBereich[Bereich].rcText.left - BBreite; + Posy += BHoehe + 3; } - StdString[(Posnext-Text)-Pos] = (char)0; - DrawString(StdString,Posx,Posy,Art); + StdString[(Posnext - Text) - Pos] = (char)0; + DrawString(StdString, Posx, Posy, Art); if (Posnext[0] == (char)0) break; - Posx += BBreite*((Posnext-Text)-Pos); + Posx += BBreite*((Posnext - Text) - Pos); } - Erg = (short)(Posy+BHoehe-TextBereich[Bereich].rcText.top); + Erg = (short)(Posy + BHoehe - TextBereich[Bereich].rcText.top); if (Erg < 100) Erg = 100; return Erg; } @@ -6128,48 +3340,48 @@ short DrawText(int TEXT,short Bereich, short Art) void Textloeschen(short Bereich) { TextBereich[Bereich].Aktiv = false; - ddbltfx.dwFillColor = RGB2DWORD(255,0,255); - lpDDSSchrift->Blt(&TextBereich[Bereich].rcText, NULL,NULL,DDBLT_COLORFILL, &ddbltfx); + Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 255); + Direct::lpDDSSchrift->Blt(&TextBereich[Bereich].rcText, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); } void DrawSchatzkarte() { - Textloeschen(TXTPAPIER); + Textloeschen(TXTPAPIER); TextBereich[TXTPAPIER].Aktiv = true; PapierText = SKARTEY; - - rcRectsrc.left = 0; - rcRectsrc.right = SKARTEX; - rcRectsrc.top = 0; - rcRectsrc.bottom = SKARTEY; - rcRectdes.left = TextBereich[TXTPAPIER].rcText.left; - rcRectdes.top = TextBereich[TXTPAPIER].rcText.top; - rcRectdes.right = rcRectdes.left+SKARTEX; - rcRectdes.bottom = rcRectdes.top+SKARTEY; - - Blitten(lpDDSSchatzkarte,lpDDSSchrift,false); + + rcRectsrc.left = 0; + rcRectsrc.right = SKARTEX; + rcRectsrc.top = 0; + rcRectsrc.bottom = SKARTEY; + rcRectdes.left = TextBereich[TXTPAPIER].rcText.left; + rcRectdes.top = TextBereich[TXTPAPIER].rcText.top; + rcRectdes.right = rcRectdes.left + SKARTEX; + rcRectdes.bottom = rcRectdes.top + SKARTEY; + + Blitten(Direct::lpDDSSchatzkarte, Direct::lpDDSSchrift, false); } void CalcRect(RECT rcBereich) -{ +{ if (rcRectdes.left< rcBereich.left) { - rcRectsrc.left = rcRectsrc.left+rcBereich.left-rcRectdes.left; + rcRectsrc.left = rcRectsrc.left + rcBereich.left - rcRectdes.left; rcRectdes.left = rcBereich.left; } if (rcRectdes.top< rcBereich.top) { - rcRectsrc.top = rcRectsrc.top+rcBereich.top-rcRectdes.top; + rcRectsrc.top = rcRectsrc.top + rcBereich.top - rcRectdes.top; rcRectdes.top = rcBereich.top; } if (rcRectdes.right> rcBereich.right) { - rcRectsrc.right = rcRectsrc.right+rcBereich.right-rcRectdes.right; + rcRectsrc.right = rcRectsrc.right + rcBereich.right - rcRectdes.right; rcRectdes.right = rcBereich.right; } if (rcRectdes.bottom> rcBereich.bottom) { - rcRectsrc.bottom = rcRectsrc.bottom+rcBereich.bottom-rcRectdes.bottom; + rcRectsrc.bottom = rcRectsrc.bottom + rcBereich.bottom - rcRectdes.bottom; rcRectdes.bottom = rcBereich.bottom; } } @@ -6178,7 +3390,7 @@ void MarkRoute(bool Mark) { short i; - for (i = 0; i < RouteLaenge; i++) + for (i = 0; i < RouteLaenge; i++) { Scape[Route[i].x][Route[i].y].Markiert = Mark; } @@ -6187,21 +3399,21 @@ void MarkRoute(bool Mark) void CheckSpzButton() { if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FELD) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= FEUERSTELLE) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase >= Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase >= Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl) && (Bmp[BUTTSTOP].Phase == -1)) - { + { if (Bmp[BUTTWEITER].Phase == -1) Bmp[BUTTWEITER].Phase = 0; } else Bmp[BUTTWEITER].Phase = -1; - + if ((Bmp[BUTTSTOP].Phase == -1) && (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BOOT) && (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) || - ((BootsFahrt) && - (((Scape[Guy.Pos.x-1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x-1][Guy.Pos.y].Objekt == -1)) || - ((Scape[Guy.Pos.x][Guy.Pos.y-1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y-1].Objekt == -1)) || - ((Scape[Guy.Pos.x+1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x+1][Guy.Pos.y].Objekt == -1)) || - ((Scape[Guy.Pos.x][Guy.Pos.y+1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y+1].Objekt == -1)))))) - { + ((BootsFahrt) && + (((Scape[Guy.Pos.x - 1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x - 1][Guy.Pos.y].Objekt == -1)) || + ((Scape[Guy.Pos.x][Guy.Pos.y - 1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y - 1].Objekt == -1)) || + ((Scape[Guy.Pos.x + 1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x + 1][Guy.Pos.y].Objekt == -1)) || + ((Scape[Guy.Pos.x][Guy.Pos.y + 1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y + 1].Objekt == -1)))))) + { if (Bmp[BUTTABLEGEN].Phase == -1) Bmp[BUTTABLEGEN].Phase = 0; } else Bmp[BUTTABLEGEN].Phase = -1; @@ -6210,23 +3422,23 @@ void CheckSpzButton() bool CheckRohstoff() { short i; - short Benoetigt; //Anzahl der Gesamtbenötigten Rohstoffe - float GebrauchtTmp; //Soviel Rohstoffe werden für diesen Schritt benötigt - short Gebraucht; //Soviel Rohstoffe werden für diesen Schritt benötigt + short Benoetigt; //Anzahl der Gesamtbenötigten Rohstoffe + float GebrauchtTmp; //Soviel Rohstoffe werden für diesen Schritt benötigt + short Gebraucht; //Soviel Rohstoffe werden für diesen Schritt benötigt bool Check; //Wenn kein Rohstoff mehr vorhanden nur noch einmal die While-Schleife Benoetigt = 0; - for (i=0;i 0) && @@ -6241,7 +3453,7 @@ bool CheckRohstoff() } if (Check == false) break; } - PapierText = DrawText(ROHSTOFFNICHT,TXTPAPIER,1); + PapierText = DrawText(ROHSTOFFNICHT, TXTPAPIER, 1); Guy.AkNummer = 0; Guy.Aktion = AKABBRUCH; Bmp[BUTTSTOP].Phase = -1; @@ -6256,2800 +3468,2803 @@ void Event(short Eventnr) RouteZiel.x = -1; RouteZiel.y = -1; } - switch(Eventnr) + switch (Eventnr) { case AKNICHTS: break; - case AKSUCHEN: - AkSuchen(); + case AKSUCHEN: + Action::AkSuchen(); break; - case AKESSEN: - AkEssen(); + case AKESSEN: + Action::AkEssen(); break; - case AKTRINKEN: - AkTrinken(); + case AKTRINKEN: + Action::AkTrinken(); break; - case AKFAELLEN: - AkFaellen(); + case AKFAELLEN: + Action::AkFaellen(); break; - case AKFELD: - AkFeld(); + case AKFELD: + Action::AkFeld(); break; - case AKTAGENDE: - AkTagEnde(); + case AKTAGENDE: + Action::AkTagEnde(); break; - case AKGERETTET: - AkGerettet(); + case AKGERETTET: + Action::AkGerettet(); break; - case AKZELT: - AkZelt(); + case AKZELT: + Action::AkZelt(); break; - case AKSCHLAFEN: - AkSchlafen(); + case AKSCHLAFEN: + Action::AkSchlafen(); break; case AKABBRUCH: - AkAbbruch(); + Action::AkAbbruch(); break; case AKANGELN: - AkAngeln(); + Action::AkAngeln(); break; - case AKBOOT: - AkBoot(); + case AKBOOT: + Action::AkBoot(); break; - case AKABLEGEN: - AkAblegen(); + case AKABLEGEN: + Action::AkAblegen(); break; - case AKANLEGEN: - AkAnlegen(); + case AKANLEGEN: + Action::AkAnlegen(); break; - case AKROHR: - AkRohr(); + case AKROHR: + Action::AkRohr(); break; - case AKDESTROY: - AkDestroy(); + case AKDESTROY: + Action::AkDestroy(); break; - case AKSOS: - AkSOS(); + case AKSOS: + Action::AkSOS(); break; - case AKHAUS1: - AkHaus1(); + case AKHAUS1: + Action::AkHaus1(); break; - case AKHAUS2: - AkHaus2(); + case AKHAUS2: + Action::AkHaus2(); break; - case AKHAUS3: - AkHaus3(); + case AKHAUS3: + Action::AkHaus3(); break; - case AKFEUERSTELLE: - AkFeuerstelle(); + case AKFEUERSTELLE: + Action::AkFeuerstelle(); break; - case AKANZUENDEN: - AkAnzuenden(); + case AKANZUENDEN: + Action::AkAnzuenden(); break; - case AKAUSSCHAU: - AkAusschau(); + case AKAUSSCHAU: + Action::AkAusschau(); break; - case AKSCHATZ: - AkSchatz(); + case AKSCHATZ: + Action::AkSchatz(); break; case AKINTRO: - AkIntro(); + Action::AkIntro(); break; case AKSCHLEUDER: - AkSchleuder(); + Action::AkSchleuder(); break; case AKSPIELVERLASSEN: - AkSpielverlassen(); + Action::AkSpielverlassen(); break; case AKNEUBEGINNEN: - AkNeubeginnen(); + Action::AkNeubeginnen(); break; case AKTAGNEUBEGINNEN: - AkTagNeubeginnen(); + Action::AkTagNeubeginnen(); break; case AKTOD: - AkTod(); + Action::AkTod(); break; } } -void AkIntro() +namespace Action { - short x; - - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkIntro() { - case 1: - //Intro Route herstellen - Guy.Aktiv = true; - RoutePunkt = -1; - Steps = 0; - Step = 0; - RouteStart.x = Guy.Pos.x; - RouteStart.y = Guy.Pos.y; - RouteZiel.y = Guy.Pos.y; - for (x=Guy.Pos.x;x 10) SaveGame(); - Spielzustand = SZABSPANN; + case 1: + Erg = GetKachel(Guy.PosAlt.x, Guy.PosAlt.y); + if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + else if (RoutePunkt % 2 == 0) ShortRoute(RouteKoor[RoutePunkt].x, RouteKoor[RoutePunkt].y); //Nur bis zur Mitte der aktuellen Kacheln laufen + else ShortRoute(RouteKoor[RoutePunkt + 1].x, RouteKoor[RoutePunkt + 1].y); + TwoClicks = -1; //Keine Ahnung warum ich das hier machen muß + break; + case 2: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTWARTEN; + else Guy.Zustand = GUYWARTEN; + PapierText = DrawText(TAGNEU, TXTPAPIER, 1); + break; + case 3: + Guy.Aktion = AKNICHTS; + if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; + else Guy.Zustand = GUYLINKS; + if (Frage == 1) + { + Game::NeuesSpiel(false); + return; + } + Frage = -1; + break; } - Frage = -1; - break; } -} -void AkTod() -{ - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkSpielverlassen() { - case 1: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTWARTEN; - else Guy.Zustand = GUYWARTEN; - PapierText = DrawText(TOD,TXTPAPIER,1); - break; - case 2: - if (!BootsFahrt) + ZWEID Erg; + Guy.AkNummer++; + switch (Guy.AkNummer) { + case 1: + Erg = GetKachel(Guy.PosAlt.x, Guy.PosAlt.y); + if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + else if (RoutePunkt % 2 == 0) ShortRoute(RouteKoor[RoutePunkt].x, RouteKoor[RoutePunkt].y); //Nur bis zur Mitte der aktuellen Kacheln laufen + else ShortRoute(RouteKoor[RoutePunkt + 1].x, RouteKoor[RoutePunkt + 1].y); + TwoClicks = -1; //Keine Ahnung warum ich das hier machen muß + break; + case 2: Guy.Aktiv = true; - Guy.Zustand = GUYHINLEGEN; + if (BootsFahrt) Guy.Zustand = GUYBOOTWARTEN; + else Guy.Zustand = GUYWARTEN; + PapierText = DrawText(SPIELVERLASSEN, TXTPAPIER, 1); + break; + case 3: + Guy.Aktion = AKNICHTS; + if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; + else Guy.Zustand = GUYLINKS; + if (Frage == 1) + { + if (Guy.Resource[GESUNDHEIT] > 10) Game::SaveGame(); + Spielzustand = SZABSPANN; + } + Frage = -1; + break; } - break; - case 3: - Guy.Aktiv = true; - Nacht = false; - Fade(100,100,100); - if (BootsFahrt) Guy.Zustand = GUYBOOTTOD; - else Guy.Zustand = GUYTOD; - break; - case 4: - Guy.Aktiv = true; - Nacht = true; - Guy.Zustand = GUYWARTEN; - PapierText = DrawText(TAGNEU,TXTPAPIER,1); - break; - case 5: - Nacht = false; - if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; - else Guy.Zustand = GUYLINKS; - Guy.Aktion = AKNICHTS; - if (Frage == 2) + } + + void AkTod() + { + Guy.AkNummer++; + switch (Guy.AkNummer) { - Spielzustand = SZABSPANN; + case 1: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTWARTEN; + else Guy.Zustand = GUYWARTEN; + PapierText = DrawText(TOD, TXTPAPIER, 1); + break; + case 2: + if (!BootsFahrt) + { + Guy.Aktiv = true; + Guy.Zustand = GUYHINLEGEN; + } + break; + case 3: + Guy.Aktiv = true; + Nacht = false; + Fade(100, 100, 100); + if (BootsFahrt) Guy.Zustand = GUYBOOTTOD; + else Guy.Zustand = GUYTOD; + break; + case 4: + Guy.Aktiv = true; + Nacht = true; + Guy.Zustand = GUYWARTEN; + PapierText = DrawText(TAGNEU, TXTPAPIER, 1); + break; + case 5: + Nacht = false; + if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; + else Guy.Zustand = GUYLINKS; + Guy.Aktion = AKNICHTS; + if (Frage == 2) + { + Spielzustand = SZABSPANN; + } + else Game::NeuesSpiel(false); + Frage = -1; + break; } - else NeuesSpiel(false); - Frage = -1; - break; } -} -void AkAbbruch() -{ - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkAbbruch() { - case 1: - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x = Guy.PosScreen.x; - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y = Guy.PosScreen.y; + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x = Guy.PosScreen.x; + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y = Guy.PosScreen.y; - ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) /2), - ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) /2)); - break; - case 2: - Guy.Aktion = AKNICHTS; - break; + ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2), + ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); + break; + case 2: + Guy.Aktion = AKNICHTS; + break; + } } -} - -void AkDestroy() -{ - short i; //Um sich kurz das Objekt zu merken - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkDestroy() { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite+4, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe); - break; - case 2: case 4: - Guy.Aktiv = true; - Guy.Zustand = GUYFAELLEN; - AddResource(WASSER,-1); - AddResource(NAHRUNG,-1); - AddTime(0,5); - break; - case 3: case 5: - Guy.Aktiv = true; - Guy.Zustand = GUYSCHLAGEN; - AddResource(WASSER,-1); - AddResource(NAHRUNG,-1); - AddTime(0,5); - break; - case 6: - if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS) Chance -= 0.1f; - i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt; - if ((i>= HAUS1) && (i<=HAUS3)) Scape[Guy.Pos.x][Guy.Pos.y].Objekt = BAUMGROSS; - else - { - Scape[Guy.Pos.x][Guy.Pos.y].Objekt =-1; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = 0; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = 0; - Scape[Guy.Pos.x][Guy.Pos.y].Phase =-1; - } - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - if (i == ROHR) FillRohr(); - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 7: - Guy.Aktion = AKNICHTS; - break; - } -} + short i; //Um sich kurz das Objekt zu merken -void AkSuchen() -{ - ZWEID Ziel; - ZWEID Erg; - short i; - - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - while(1) - { - Ziel.x = Scape[Guy.Pos.x][Guy.Pos.y].xScreen+rand()%KXPIXEL; - Ziel.y = Scape[Guy.Pos.x][Guy.Pos.y].yScreen+rand()%KYPIXEL; - Erg = GetKachel(Ziel.x,Ziel.y); - if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) break; //Wenn das gefundene Ziel in der Kachel, dann fertig - } - Guy.AkNummer++; - switch(Guy.AkNummer) - { - case 1: case 3: case 5: case 7: - if (BootsFahrt) - { - if (Guy.AkNummer == 1) - { - Guy.Aktiv = true; - Guy.PosScreen.y -= 2; - Guy.Zustand = GUYTAUCHEN1; - PlaySound(WAVPLATSCH,100); - } + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken } - else ShortRoute(Ziel.x,Ziel.y); - break; - case 2: case 4: case 6: case 8: - Guy.Aktiv = true; - if (BootsFahrt) + Guy.AkNummer++; + switch (Guy.AkNummer) { - if (Guy.AkNummer == 2) + case 1: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite + 4, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe); + break; + case 2: case 4: + Guy.Aktiv = true; + Guy.Zustand = GUYFAELLEN; + AddResource(WASSER, -1); + AddResource(NAHRUNG, -1); + AddTime(0, 5); + break; + case 3: case 5: + Guy.Aktiv = true; + Guy.Zustand = GUYSCHLAGEN; + AddResource(WASSER, -1); + AddResource(NAHRUNG, -1); + AddTime(0, 5); + break; + case 6: + if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS) Chance -= 0.1f; + i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt; + if ((i >= HAUS1) && (i <= HAUS3)) Scape[Guy.Pos.x][Guy.Pos.y].Objekt = BAUMGROSS; + else { - Guy.PosScreen.y += 5; + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = 0; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = 0; + Scape[Guy.Pos.x][Guy.Pos.y].Phase = -1; } - Guy.Zustand = GUYTAUCHEN2; + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + if (i == ROHR) FillRohr(); + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 7: + Guy.Aktion = AKNICHTS; + break; } - else Guy.Zustand = GUYSUCHEN; - AddTime(0,4); - break; - case 9: - if (BootsFahrt) + } + + void AkSuchen() + { + ZWEID Ziel; + ZWEID Erg; + short i; + + if (Guy.AkNummer == 0) { - Guy.Aktiv = true; - Guy.Zustand = GUYTAUCHEN3; - PlaySound(WAVPLATSCH,100); + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken } - break; - case 10: - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 11: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; - //Auf Strand und Fluss - if ((Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6))) - { - - if (Guy.Inventar[ROHSTEIN] < 10) - { - PapierText = DrawText(ROHSTEINGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHSTEIN] += 3; - if (Guy.Inventar[ROHSTEIN] > 10) Guy.Inventar[ROHSTEIN] = 10; - } - else PapierText = DrawText(ROHSTEINZUVIEL,TXTPAPIER,1); - - } - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BUSCH) - { - i = rand()%2; - switch(i) - { - case 0: - if (Guy.Inventar[ROHAST] < 10) - { - PapierText = DrawText(ROHASTGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHAST]++; - } - else PapierText = DrawText(ROHASTZUVIEL,TXTPAPIER,1); - break; - case 1: - if (Guy.Inventar[ROHBLATT] < 10) + while (1) + { + Ziel.x = Scape[Guy.Pos.x][Guy.Pos.y].xScreen + rand() % KXPIXEL; + Ziel.y = Scape[Guy.Pos.x][Guy.Pos.y].yScreen + rand() % KYPIXEL; + Erg = GetKachel(Ziel.x, Ziel.y); + if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) break; //Wenn das gefundene Ziel in der Kachel, dann fertig + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: case 3: case 5: case 7: + if (BootsFahrt) + { + if (Guy.AkNummer == 1) { - PapierText = DrawText(ROHBLATTGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHBLATT]++; + Guy.Aktiv = true; + Guy.PosScreen.y -= 2; + Guy.Zustand = GUYTAUCHEN1; + Sound::PlaySound(WAVPLATSCH, 100); } - else PapierText = DrawText(ROHBLATTZUVIEL,TXTPAPIER,1); - break; } - } - else if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUMGROSS)) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) - { - i = rand()%3; - switch(i) + else ShortRoute(Ziel.x, Ziel.y); + break; + case 2: case 4: case 6: case 8: + Guy.Aktiv = true; + if (BootsFahrt) { - case 0: - if (Guy.Inventar[ROHAST] < 10) + if (Guy.AkNummer == 2) { - PapierText = DrawText(ROHASTGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHAST]++; + Guy.PosScreen.y += 5; } - else PapierText = DrawText(ROHASTZUVIEL,TXTPAPIER,1); - break; - case 1: - if (Guy.Inventar[ROHBLATT] < 10) + Guy.Zustand = GUYTAUCHEN2; + } + else Guy.Zustand = GUYSUCHEN; + AddTime(0, 4); + break; + case 9: + if (BootsFahrt) + { + Guy.Aktiv = true; + Guy.Zustand = GUYTAUCHEN3; + Sound::PlaySound(WAVPLATSCH, 100); + } + break; + case 10: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 11: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; + //Auf Strand und Fluss + if ((Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) || + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6))) + { + + if (Guy.Inventar[ROHSTEIN] < 10) { - PapierText = DrawText(ROHBLATTGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHBLATT]++; + PapierText = DrawText(ROHSTEINGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHSTEIN] += 3; + if (Guy.Inventar[ROHSTEIN] > 10) Guy.Inventar[ROHSTEIN] = 10; } - else PapierText = DrawText(ROHBLATTZUVIEL,TXTPAPIER,1); - break; - case 2: - if (Guy.Inventar[ROHLIANE] < 10) + else PapierText = DrawText(ROHSTEINZUVIEL, TXTPAPIER, 1); + + } + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BUSCH) + { + i = rand() % 2; + switch (i) { - PapierText = DrawText(ROHLIANEGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHLIANE]++; + case 0: + if (Guy.Inventar[ROHAST] < 10) + { + PapierText = DrawText(ROHASTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHAST]++; + } + else PapierText = DrawText(ROHASTZUVIEL, TXTPAPIER, 1); + break; + case 1: + if (Guy.Inventar[ROHBLATT] < 10) + { + PapierText = DrawText(ROHBLATTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHBLATT]++; + } + else PapierText = DrawText(ROHBLATTZUVIEL, TXTPAPIER, 1); + break; } - else PapierText = DrawText(ROHLIANEZUVIEL,TXTPAPIER,1); - break; } - } - else if (BootsFahrt) - { - if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK) + else if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUMGROSS)) || + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) { - if (Guy.Inventar[ROHFERNROHR] == 0) + i = rand() % 3; + switch (i) { - PapierText = DrawText(FERNROHRGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHFERNROHR] = 1; - Bmp[BUTTAUSSCHAU].Phase = 0; - Guy.Inventar[ROHHAMMER] = 1; - Bmp[BUTTHAUS1].Phase = 0; - Bmp[BUTTHAUS2].Phase = 0; - Bmp[BUTTHAUS3].Phase = 0; + case 0: + if (Guy.Inventar[ROHAST] < 10) + { + PapierText = DrawText(ROHASTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHAST]++; + } + else PapierText = DrawText(ROHASTZUVIEL, TXTPAPIER, 1); + break; + case 1: + if (Guy.Inventar[ROHBLATT] < 10) + { + PapierText = DrawText(ROHBLATTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHBLATT]++; + } + else PapierText = DrawText(ROHBLATTZUVIEL, TXTPAPIER, 1); + break; + case 2: + if (Guy.Inventar[ROHLIANE] < 10) + { + PapierText = DrawText(ROHLIANEGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHLIANE]++; + } + else PapierText = DrawText(ROHLIANEZUVIEL, TXTPAPIER, 1); + break; } - else PapierText = DrawText(NICHTSGEFUNDEN2,TXTPAPIER,1); } - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK2) + else if (BootsFahrt) { - if (Guy.Inventar[ROHKARTE] == 0) + if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK) + { + if (Guy.Inventar[ROHFERNROHR] == 0) + { + PapierText = DrawText(FERNROHRGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHFERNROHR] = 1; + Bmp[BUTTAUSSCHAU].Phase = 0; + Guy.Inventar[ROHHAMMER] = 1; + Bmp[BUTTHAUS1].Phase = 0; + Bmp[BUTTHAUS2].Phase = 0; + Bmp[BUTTHAUS3].Phase = 0; + } + else PapierText = DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); + } + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK2) { - PapierText = DrawText(KARTEGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHKARTE] = 1; - Bmp[BUTTSCHATZKARTE].Phase = 0; - Guy.Inventar[ROHSCHAUFEL] = 1; - Bmp[BUTTSCHATZ].Phase = 0; + if (Guy.Inventar[ROHKARTE] == 0) + { + PapierText = DrawText(KARTEGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHKARTE] = 1; + Bmp[BUTTSCHATZKARTE].Phase = 0; + Guy.Inventar[ROHSCHAUFEL] = 1; + Bmp[BUTTSCHATZ].Phase = 0; + } + else PapierText = DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); } - else PapierText = DrawText(NICHTSGEFUNDEN2,TXTPAPIER,1); + else PapierText = DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); } - else PapierText = DrawText(NICHTSGEFUNDEN2,TXTPAPIER,1); - } - else - { - PapierText = DrawText(NICHTSGEFUNDEN,TXTPAPIER,1); + else + { + PapierText = DrawText(NICHTSGEFUNDEN, TXTPAPIER, 1); + } + break; + case 12: + Guy.Aktion = AKNICHTS; + break; } - break; - case 12: - Guy.Aktion = AKNICHTS; - break; } -} -void AkEssen() -{ - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkEssen() { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite/2, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe+2); - break; - case 2: case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYESSEN; - AddResource(NAHRUNG,15); - AddTime(0,2); - break; - case 4: - Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 5: - Guy.Aktion = AKNICHTS; - break; + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 2); + break; + case 2: case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYESSEN; + AddResource(NAHRUNG, 15); + AddTime(0, 2); + break; + case 4: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 5: + Guy.Aktion = AKNICHTS; + break; + } } -} -void AkSchleuder() -{ - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkSchleuder() { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite/2-14, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe+9); - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYSCHLEUDER; - Guy.PosScreen.x += 5; - AddTime(0,2); - PlaySound(WAVSCHLEUDER,100); - break; - case 3: - Guy.PosScreen.x -= 5; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite/2+6, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe+2); - break; - case 4: - Guy.Aktiv = true; - Guy.Zustand = GUYSUCHEN; - AddResource(NAHRUNG,5); - AddTime(0,20); - break; - case 5: - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 6: - Guy.Aktion = AKNICHTS; - break; + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 - 14, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 9); + break; + case 2: + Guy.Aktiv = true; + Guy.Zustand = GUYSCHLEUDER; + Guy.PosScreen.x += 5; + AddTime(0, 2); + Sound::PlaySound(WAVSCHLEUDER, 100); + break; + case 3: + Guy.PosScreen.x -= 5; + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 + 6, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 2); + break; + case 4: + Guy.Aktiv = true; + Guy.Zustand = GUYSUCHEN; + AddResource(NAHRUNG, 5); + AddTime(0, 20); + break; + case 5: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 6: + Guy.Aktion = AKNICHTS; + break; + } } -} -void AkTrinken() -{ - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkTrinken() { - case 1: - ShortRoute(Guy.PosScreen.x-4, - Guy.PosScreen.y-2); - break; - case 2: case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYTRINKEN; - AddResource(WASSER,30); - AddTime(0,3); - break; - case 4: - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 5: - Guy.Aktion = AKNICHTS; - break; + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + ShortRoute(Guy.PosScreen.x - 4, + Guy.PosScreen.y - 2); + break; + case 2: case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYTRINKEN; + AddResource(WASSER, 30); + AddTime(0, 3); + break; + case 4: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 5: + Guy.Aktion = AKNICHTS; + break; + } } -} - -void AkFaellen() -{ - short i; - if (Guy.AkNummer == 0) + void AkFaellen() { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch(Guy.AkNummer) - { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite/2+9, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe+3); - break; - case 2: case 3: case 4: case 5: case 6: - Guy.Aktiv = true; - Guy.Zustand = GUYFAELLEN; - AddResource(WASSER,-2); - AddResource(NAHRUNG,-2); - AddTime(0,10); - break; - case 7: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt+(BAUM1DOWN-BAUM1); - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = i; - Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x -= 17; - PlaySound(WAVBAUMFAELLT,100); - break; - case 8: - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 9: - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; - Guy.Inventar[ROHSTAMM]++; - if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; - Guy.Inventar[ROHAST] += 5; - if (Guy.Inventar[ROHAST] > 10) Guy.Inventar[ROHAST] = 10; - Guy.Inventar[ROHBLATT] += 5; - if (Guy.Inventar[ROHBLATT] > 10) Guy.Inventar[ROHBLATT] = 10; - Guy.Inventar[ROHLIANE] += 2; - if (Guy.Inventar[ROHLIANE] > 10) Guy.Inventar[ROHLIANE] = 10; - Guy.Aktion = AKNICHTS; - break; - } -} + short i; -void AkAngeln() -{ - - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch(Guy.AkNummer) - { - case 1: - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + if (Guy.AkNummer == 0) { - case FLUSS1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+35, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+26); - break; - case FLUSS2: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+19, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+26); - break; - case FLUSS3: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+22, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+20); - break; - case FLUSS4: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+34, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+23); + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 + 9, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 3); break; - case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+34, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+33); + case 2: case 3: case 4: case 5: case 6: + Guy.Aktiv = true; + Guy.Zustand = GUYFAELLEN; + AddResource(WASSER, -2); + AddResource(NAHRUNG, -2); + AddTime(0, 10); break; - case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+20, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+33); + case 7: + Guy.Aktiv = true; + Guy.Zustand = GUYWARTEN; + i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt + (BAUM1DOWN - BAUM1); + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = i; + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x -= 17; + Sound::PlaySound(WAVBAUMFAELLT, 100); break; - case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+22, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+26); + case 8: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); break; - case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+32, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+26); + case 9: + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; + Guy.Inventar[ROHSTAMM]++; + if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; + Guy.Inventar[ROHAST] += 5; + if (Guy.Inventar[ROHAST] > 10) Guy.Inventar[ROHAST] = 10; + Guy.Inventar[ROHBLATT] += 5; + if (Guy.Inventar[ROHBLATT] > 10) Guy.Inventar[ROHBLATT] = 10; + Guy.Inventar[ROHLIANE] += 2; + if (Guy.Inventar[ROHLIANE] > 10) Guy.Inventar[ROHLIANE] = 10; + Guy.Aktion = AKNICHTS; break; } - break; - case 2: - Guy.Aktiv = true; - PlaySound(WAVANGEL,100); - if (BootsFahrt) + } + + void AkAngeln() + { + + if (Guy.AkNummer == 0) { - Guy.PosScreen.y -= 2; - Guy.Zustand = GUYBOOTANGELN1; + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken } - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + Guy.AkNummer++; + switch (Guy.AkNummer) { - case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - Guy.Zustand = GUYANGELN1LINKS; + case 1: + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 35, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + case FLUSS2: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 19, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + case FLUSS3: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 22, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 20); + break; + case FLUSS4: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 34, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 23); + break; + case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 34, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 33); + break; + case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 20, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 33); + break; + case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 22, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 32, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + } + break; + case 2: + Guy.Aktiv = true; + Sound::PlaySound(WAVANGEL, 100); + if (BootsFahrt) + { + Guy.PosScreen.y -= 2; + Guy.Zustand = GUYBOOTANGELN1; + } + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + Guy.Zustand = GUYANGELN1LINKS; + break; + case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + Guy.Zustand = GUYANGELN1OBEN; + break; + case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + Guy.Zustand = GUYANGELN1RECHTS; + break; + case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + Guy.Zustand = GUYANGELN1UNTEN; + break; + } + break; + case 3: case 4: case 5: case 6: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN2; + + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + Guy.Zustand = GUYANGELN2LINKS; + break; + case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + Guy.Zustand = GUYANGELN2OBEN; + break; + case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + Guy.Zustand = GUYANGELN2RECHTS; + break; + case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + Guy.Zustand = GUYANGELN2UNTEN; + break; + } + Guy.Resource[GESUNDHEIT] += 2; + AddTime(0, 20); break; - case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - Guy.Zustand = GUYANGELN1OBEN; + case 7: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN3; + + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + Guy.Zustand = GUYANGELN3LINKS; + break; + case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + Guy.Zustand = GUYANGELN3OBEN; + break; + case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + Guy.Zustand = GUYANGELN3RECHTS; + break; + case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + Guy.Zustand = GUYANGELN3UNTEN; + break; + } break; - case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - Guy.Zustand = GUYANGELN1RECHTS; + case 8: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); break; - case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - Guy.Zustand = GUYANGELN1UNTEN; + case 9: + Guy.Resource[NAHRUNG] += 20; + Guy.Aktion = AKNICHTS; break; } - break; - case 3: case 4: case 5: case 6: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN2; - - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + } + + void AkAnzuenden() + { + if (Guy.AkNummer == 0) { - case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - Guy.Zustand = GUYANGELN2LINKS; + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 - 10, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 1); + break; + case 2: + Guy.Aktiv = true; + Guy.Zustand = GUYANZUENDEN; + Guy.PosScreen.x += 5; + AddTime(0, 1); break; - case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - Guy.Zustand = GUYANGELN2OBEN; + case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYWARTEN; + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = FEUER; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[FEUER].rcDes.left; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[FEUER].rcDes.top; + Chance += 2 + 2 * Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + AddTime(0, 2); + Guy.PosScreen.x -= 5; break; - case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - Guy.Zustand = GUYANGELN2RECHTS; + case 4: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); break; - case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - Guy.Zustand = GUYANGELN2UNTEN; + case 5: + Guy.Aktion = AKNICHTS; break; } - Guy.Resource[GESUNDHEIT] += 2; - AddTime(0,20); - break; - case 7: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN3; - - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + } + + void AkAusschau() + { + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) { - case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - Guy.Zustand = GUYANGELN3LINKS; + case 1: + Guy.Aktiv = true; + Guy.Zustand = GUYAUSSCHAU; + AddTime(0, 40); + Chance += 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + break; + case 2: + Guy.Aktiv = true; + Guy.Zustand = GUYWARTEN; + AddTime(0, 40); break; - case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - Guy.Zustand = GUYANGELN3OBEN; + case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYAUSSCHAU; + AddTime(0, 40); break; - case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - Guy.Zustand = GUYANGELN3RECHTS; + case 4: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); break; - case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - Guy.Zustand = GUYANGELN3UNTEN; + case 5: + Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + Guy.Aktion = AKNICHTS; break; } - break; - case 8: - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 9: - Guy.Resource[NAHRUNG] += 20; - Guy.Aktion = AKNICHTS; - break; } -} -void AkAnzuenden() -{ - if (Guy.AkNummer == 0) + void AkSchatz() { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; + } + Guy.AkNummer++; + + switch (Guy.AkNummer) + { + case 1: + Guy.PosScreen.x -= 5; + Guy.PosScreen.y += 1; + Guy.Aktiv = true; + Guy.Zustand = GUYSCHAUFELN; + break; + case 2: + AddTime(0, 20); + AddResource(WASSER, -10); + AddResource(NAHRUNG, -10); + Guy.PosScreen.x += 5; + Guy.PosScreen.y -= 1; + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + if (((Guy.Pos.x == SchatzPos.x) && (Guy.Pos.y == SchatzPos.y)) && + (!SchatzGef)) + { + PapierText = DrawText(SCHATZGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHSTREICHHOLZ] = 1; + Bmp[BUTTANZUENDEN].Phase = 0; + SchatzGef = true; + } + else PapierText = DrawText(KEINSCHATZ, TXTPAPIER, 1); + break; + case 3: + Guy.Aktion = AKNICHTS; + break; + } } - Guy.AkNummer++; - switch(Guy.AkNummer) + + void AkFeld() { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite/2-10, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - +Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe+1); - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYANZUENDEN; - Guy.PosScreen.x += 5; - AddTime(0,1); - break; - case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = FEUER; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[FEUER].rcDes.left; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[FEUER].rcDes.top; - Chance += 2+2*Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - AddTime(0,2); - Guy.PosScreen.x -= 5; - break; - case 4: - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 5: - Guy.Aktion = AKNICHTS; - break; - } -} - -void AkAusschau() -{ - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch(Guy.AkNummer) - { - case 1: - Guy.Aktiv = true; - Guy.Zustand = GUYAUSSCHAU; - AddTime(0,40); - Chance += 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - AddTime(0,40); - break; - case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYAUSSCHAU; - AddTime(0,40); - break; - case 4: - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - break; - case 5: - Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - Guy.Aktion = AKNICHTS; - break; - } -} - -void AkSchatz() -{ - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; - } - Guy.AkNummer++; - - switch(Guy.AkNummer) - { - case 1: - Guy.PosScreen.x -= 5; - Guy.PosScreen.y += 1; - Guy.Aktiv = true; - Guy.Zustand = GUYSCHAUFELN; - break; - case 2: - AddTime(0,20); - AddResource(WASSER,-10); - AddResource(NAHRUNG,-10); - Guy.PosScreen.x += 5; - Guy.PosScreen.y -= 1; - ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - if (((Guy.Pos.x == SchatzPos.x) && (Guy.Pos.y == SchatzPos.y)) && - (!SchatzGef)) - { - PapierText = DrawText(SCHATZGEFUNDEN,TXTPAPIER,1); - Guy.Inventar[ROHSTREICHHOLZ] = 1; - Bmp[BUTTANZUENDEN].Phase = 0; - SchatzGef = true; - } - else PapierText = DrawText(KEINSCHATZ,TXTPAPIER,1); - break; - case 3: - Guy.Aktion = AKNICHTS; - break; - } -} - -void AkFeld() -{ - short i; - - if (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - for (i=0;i= BAUM1DOWN) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4DOWN)) + switch (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer) { - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; - Guy.Inventar[ROHSTAMM]++; - if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; + case 1: + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + 22, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + 23); + break; + case 4: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 4; + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + 25, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + 21); + AddResource(WASSER, -2); + AddResource(NAHRUNG, -2); + AddTime(0, 30); + break; + case 7: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 5; + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + 28, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + 19); + AddResource(WASSER, -2); + AddResource(NAHRUNG, -2); + AddTime(0, 30); + break; + case 10: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 6; + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + 31, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + 17); + AddResource(WASSER, -2); + AddResource(NAHRUNG, -2); + AddTime(0, 30); + break; + case 13: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 7; + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + 34, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + 15); + AddResource(WASSER, -2); + AddResource(NAHRUNG, -2); + AddTime(0, 30); + break; + case 16: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 8; + ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + 36, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + 13); + AddResource(WASSER, -2); + AddResource(NAHRUNG, -2); + AddTime(0, 30); + break; + case 2: case 3: case 5: case 6: case 8: case 9: case 11: case 12: case 14: case 15: case 17: case 18: + Guy.Aktiv = true; + Guy.Zustand = GUYFELD; + break; + case 19: + ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = FELD; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[FELD].rcDes.left; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[FELD].rcDes.top; + break; + case 20: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; + Bmp[BUTTSTOP].Phase = -1; + if (Bmp[FELD].First) + { + PapierText = DrawText(FELDHILFE, TXTPAPIER, 1); + Bmp[FELD].First = false; + } + Guy.Aktion = AKNICHTS; + break; } - - //Je nach Schlafort Zustand verändern - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + } + + void AkTagEnde() + { + ZWEID Erg; + + Guy.AkNummer++; + switch (Guy.AkNummer) { - AddResource(GESUNDHEIT,-5); - if (Guy.Resource[GESUNDHEIT] <= 0) + case 1: + Fade(100, 90, 90); + Stunden = 12; + Minuten = 0; + TwoClicks = -1; //Keine Ahnung warum ich das hier machen muß + Bmp[BUTTSTOP].Phase = -1; + if ((Guy.Zustand == GUYSCHLAFZELT) || (Guy.Zustand == GUYSCHLAFEN) || + (Guy.Zustand == GUYSCHLAFHAUS) || (BootsFahrt)) break; + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x = Guy.PosScreen.x; + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y = Guy.PosScreen.y; + Erg = GetKachel(Guy.PosAlt.x, Guy.PosAlt.y); + if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + else if (RoutePunkt % 2 == 0) ShortRoute(RouteKoor[RoutePunkt].x, RouteKoor[RoutePunkt].y); //Nur bis zur Mitte der aktuellen Kacheln laufen + else ShortRoute(RouteKoor[RoutePunkt + 1].x, RouteKoor[RoutePunkt + 1].y); + break; + case 2: + Fade(95, 80, 80); + Stunden = 12; + Minuten = 0; + if ((Guy.Zustand == GUYSCHLAFZELT) || (Guy.Zustand == GUYSCHLAFEN) || + (Guy.Zustand == GUYSCHLAFHAUS) || (BootsFahrt)) break; + //Wohnbare Objekte in der Umgebung suchen + Erg.x = -1; + Erg.y = -1; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) || (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3)) + { + Erg.x = Guy.Pos.x; + Erg.y = Guy.Pos.y; + } + else if (Scape[Guy.Pos.x - 1][Guy.Pos.y].Objekt == HAUS3) + { + Erg.x = Guy.Pos.x - 1; + Erg.y = Guy.Pos.y; + } + else if (Scape[Guy.Pos.x][Guy.Pos.y - 1].Objekt == HAUS3) + { + Erg.x = Guy.Pos.x; + Erg.y = Guy.Pos.y - 1; + } + else if (Scape[Guy.Pos.x + 1][Guy.Pos.y].Objekt == HAUS3) + { + Erg.x = Guy.Pos.x + 1; + Erg.y = Guy.Pos.y; + } + else if (Scape[Guy.Pos.x][Guy.Pos.y + 1].Objekt == HAUS3) + { + Erg.x = Guy.Pos.x; + Erg.y = Guy.Pos.y + 1; + } + else if (Scape[Guy.Pos.x - 1][Guy.Pos.y].Objekt == ZELT) + { + Erg.x = Guy.Pos.x - 1; + Erg.y = Guy.Pos.y; + } + else if (Scape[Guy.Pos.x][Guy.Pos.y - 1].Objekt == ZELT) + { + Erg.x = Guy.Pos.x; + Erg.y = Guy.Pos.y - 1; + } + else if (Scape[Guy.Pos.x + 1][Guy.Pos.y].Objekt == ZELT) + { + Erg.x = Guy.Pos.x + 1; + Erg.y = Guy.Pos.y; + } + else if (Scape[Guy.Pos.x][Guy.Pos.y + 1].Objekt == ZELT) + { + Erg.x = Guy.Pos.x; + Erg.y = Guy.Pos.y + 1; + } + if ((Erg.x != -1) && (Erg.y != -1)) + { + Guy.Pos.x = Erg.x; + Guy.Pos.y = Erg.y; + if ((Scape[Erg.x][Erg.y].Objekt == ZELT) && + (Scape[Erg.x][Erg.y].Phase < Bmp[Scape[Erg.x][Erg.y].Objekt].Anzahl)) + ShortRoute(Scape[Erg.x][Erg.y].xScreen + Scape[Erg.x][Erg.y].ObPos.x + 3, + Scape[Erg.x][Erg.y].yScreen + Scape[Erg.x][Erg.y].ObPos.y + 20); + else if ((Scape[Erg.x][Erg.y].Objekt == HAUS3) && + (Scape[Erg.x][Erg.y].Phase < Bmp[Scape[Erg.x][Erg.y].Objekt].Anzahl)) + ShortRoute(Scape[Erg.x][Erg.y].xScreen + Scape[Erg.x][Erg.y].ObPos.x + + Bmp[BAUMGROSS].Breite / 2, + Scape[Erg.x][Erg.y].yScreen + Scape[Erg.x][Erg.y].ObPos.y + + Bmp[BAUMGROSS].Hoehe + 1); + } + break; + case 3: + Fade(90, 70, 70); + Stunden = 12; + Minuten = 0; + if ((Guy.Zustand == GUYSCHLAFZELT) || (Guy.Zustand == GUYSCHLAFEN) || + (Guy.Zustand == GUYSCHLAFHAUS) || (BootsFahrt)) break; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) { Guy.Aktiv = true; - PapierText = DrawText(TAGENDE5,TXTPAPIER,1); - Guy.AkNummer = 2; - Guy.Aktion = AKTOD; - Stunden = 0; - Minuten = 0; + Guy.Zustand = GUYKLETTERN1; + } + break; + case 4: + Fade(70, 60, 60); + Stunden = 12; + Minuten = 0; + if ((Guy.Zustand == GUYSCHLAFZELT) || (Guy.Zustand == GUYSCHLAFEN) || + (Guy.Zustand == GUYSCHLAFHAUS) || (BootsFahrt)) break; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + Guy.Aktiv = true; + Guy.Zustand = GUYGEHINZELT; + } + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + Guy.Aktiv = true; + Guy.Zustand = GUYGEHINHAUS; } else { + Guy.PosScreen.x += 3; Guy.Aktiv = true; - PapierText = DrawText(TAGENDE2,TXTPAPIER,1); + Guy.Zustand = GUYHINLEGEN; } - } - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - { - AddResource(GESUNDHEIT,+20); + break; + case 5: + Fade(55, 50, 55); + Stunden = 12; + Minuten = 0; + if (BootsFahrt) break; Guy.Aktiv = true; - PapierText = DrawText(TAGENDE4,TXTPAPIER,1); - } - else if (BootsFahrt) - { + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + if (Guy.Zustand != GUYSCHLAFZELT) Guy.PosScreen.x += 4; + Guy.Zustand = GUYSCHLAFZELT; + } + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + if (Guy.Zustand != GUYSCHLAFHAUS) Guy.PosScreen.x += 14; + Guy.Zustand = GUYSCHLAFHAUS; + } + else Guy.Zustand = GUYSCHLAFEN; + break; + case 6: + Fade(25, 25, 35); + Stunden = 12; + Minuten = 0; + if (BootsFahrt) break; Guy.Aktiv = true; - Guy.Zustand = GUYBOOTWARTEN; - PapierText = DrawText(TAGENDE3,TXTPAPIER,1); - Guy.AkNummer = 2; - Guy.Aktion = AKTOD; - Stunden = 0; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFZELT; + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFHAUS; + else Guy.Zustand = GUYSCHLAFEN; + break; + case 7: + Fade(0, 0, 0); // Nicht verwirren lassen, da das Bild in Zeige() schwarz übermalt wird + Nacht = true; + Stunden = 12; Minuten = 0; - } - else - { - AddResource(GESUNDHEIT,-20); - if (Guy.Resource[GESUNDHEIT] <= 0) + Sound::PlaySound(WAVWOLF, 100); + //Falsche Objekte Löschen + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1DOWN) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4DOWN)) + { + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; + Guy.Inventar[ROHSTAMM]++; + if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; + } + + //Je nach Schlafort Zustand verändern + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + AddResource(GESUNDHEIT, -5); + if (Guy.Resource[GESUNDHEIT] <= 0) + { + Guy.Aktiv = true; + PapierText = DrawText(TAGENDE5, TXTPAPIER, 1); + Guy.AkNummer = 2; + Guy.Aktion = AKTOD; + Stunden = 0; + Minuten = 0; + } + else + { + Guy.Aktiv = true; + PapierText = DrawText(TAGENDE2, TXTPAPIER, 1); + } + } + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + AddResource(GESUNDHEIT, +20); + Guy.Aktiv = true; + PapierText = DrawText(TAGENDE4, TXTPAPIER, 1); + } + else if (BootsFahrt) { Guy.Aktiv = true; - PapierText = DrawText(TAGENDE5,TXTPAPIER,1); + Guy.Zustand = GUYBOOTWARTEN; + PapierText = DrawText(TAGENDE3, TXTPAPIER, 1); Guy.AkNummer = 2; Guy.Aktion = AKTOD; Stunden = 0; Minuten = 0; } else + { + AddResource(GESUNDHEIT, -20); + if (Guy.Resource[GESUNDHEIT] <= 0) + { + Guy.Aktiv = true; + PapierText = DrawText(TAGENDE5, TXTPAPIER, 1); + Guy.AkNummer = 2; + Guy.Aktion = AKTOD; + Stunden = 0; + Minuten = 0; + } + else + { + Guy.Aktiv = true; + PapierText = DrawText(TAGENDE1, TXTPAPIER, 1); + } + } + break; + case 8: + Fade(20, 20, 30); + Nacht = false; + Tag++; + Stunden = 0; + Minuten = 0; + //if (BootsFahrt) Game::NeuesSpiel(true); //Später hier tot!! + + Guy.Aktiv = true; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFZELT; + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFHAUS; + else Guy.Zustand = GUYSCHLAFEN; + break; + case 9: + Fade(40, 40, 40); + Stunden = 0; + Minuten = 0; + + Stunden = 0; Minuten = 0; + Guy.Aktiv = true; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFZELT; + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFHAUS; + else Guy.Zustand = GUYSCHLAFEN; + break; + case 10: + Fade(70, 60, 60); + Stunden = 0; + Minuten = 0; + Sound::StopSound(WAVSCHNARCHEN); + Guy.Aktiv = true; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + Guy.PosScreen.x -= 14; + Guy.Zustand = GUYGEHAUSHAUS; + } + else Guy.Zustand = GUYAUFSTEHEN; + break; + case 11: + Fade(90, 80, 80); + Stunden = 0; + Minuten = 0; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) { Guy.Aktiv = true; - PapierText = DrawText(TAGENDE1,TXTPAPIER,1); + Guy.Zustand = GUYKLETTERN2; } + break; + case 12: + Fade(100, 100, 100); + Stunden = 0; + Minuten = 0; + Guy.Zustand = GUYLINKS; + Guy.Aktion = AKNICHTS; + if (Guy.Resource[GESUNDHEIT] > 10) Game::SaveGame(); + break; } - break; - case 8: - Fade(20,20,30); - Nacht = false; - Tag++; - Stunden = 0; - Minuten = 0; - //if (BootsFahrt) NeuesSpiel(true); //Später hier tot!! - - Guy.Aktiv = true; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFZELT; - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFHAUS; - else Guy.Zustand = GUYSCHLAFEN; - break; - case 9: - Fade(40,40,40); - Stunden = 0; - Minuten = 0; - - Stunden = 0; Minuten = 0; - Guy.Aktiv = true; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFZELT; - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFHAUS; - else Guy.Zustand = GUYSCHLAFEN; - break; - case 10: - Fade(70,60,60); - Stunden = 0; - Minuten = 0; - StopSound(WAVSCHNARCHEN); - Guy.Aktiv = true; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - { - Guy.PosScreen.x -= 14; - Guy.Zustand = GUYGEHAUSHAUS; - } - else Guy.Zustand = GUYAUFSTEHEN; - break; - case 11: - Fade(90,80,80); - Stunden = 0; - Minuten = 0; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + } + + void AkGerettet() + { + ZWEID Erg; + short x; + + Guy.AkNummer++; + switch (Guy.AkNummer) { + case 1: + Erg = GetKachel(Guy.PosAlt.x, Guy.PosAlt.y); + if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + else if (RoutePunkt % 2 == 0) ShortRoute(RouteKoor[RoutePunkt].x, RouteKoor[RoutePunkt].y); //Nur bis zur Mitte der aktuellen Kacheln laufen + else ShortRoute(RouteKoor[RoutePunkt + 1].x, RouteKoor[RoutePunkt + 1].y); + TwoClicks = -1; //Keine Ahnung warum ich das hier machen muß + break; + case 2: Guy.Aktiv = true; - Guy.Zustand = GUYKLETTERN2; + Guy.Zustand = GUYWARTEN; + PapierText = DrawText(GERETTET, TXTPAPIER, 1); + break; + case 3: + if (Frage == 2) + { + Guy.Aktion = AKNICHTS; + Frage = -1; + break; + } + Spielzustand = SZGERETTET; + Frage = -1; + break; + case 4: + // Route herstellen + Guy.Aktiv = true; + Guy.Zustand = GUYLINKS; + RoutePunkt = -1; + Steps = 0; + Step = 0; + RouteStart.x = Guy.Pos.x; + RouteStart.y = Guy.Pos.y; + RouteZiel.y = Guy.Pos.y; + for (x = MAXXKACH - 1; x>1; x--)//Position des Rettungsschiffs festlegen + { + if (Scape[x][Guy.Pos.y].Art != 1) break; + RouteZiel.x = x + 1; + } + //Schiff hinbauen + Scape[RouteZiel.x][RouteZiel.y].Phase = 0; + Scape[RouteZiel.x][RouteZiel.y].Objekt = GUYSCHIFF; + Scape[RouteZiel.x][RouteZiel.y].ObPos.x = 10; + Scape[RouteZiel.x][RouteZiel.y].ObPos.y = 10; + RouteZiel.x -= 2; + FindTheWay(); + Guy.Zustand = GUYLINKS; + break; + case 5: + Guy.Zustand = GUYLINKS; + ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].x) / 2), + ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); + break; + case 6: + Guy.Pos.x += 2; + Guy.Zustand = GUYSCHWIMMEN; + ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2), + ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); + break; + case 7: + Guy.PosScreen.y -= 10; + if (!BootsFahrt) ChangeBootsFahrt(); + Guy.Aktiv = true; + Guy.Zustand = GUYSCHIFF; + RoutePunkt = -1; + Steps = 0; + Step = 0; + RouteStart.x = Guy.Pos.x; + RouteStart.y = Guy.Pos.y; + RouteZiel.y = Guy.Pos.y; + RouteZiel.x = MAXXKACH - 2; + FindTheWay(); + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[MEERWELLEN].rcDes.left; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[MEERWELLEN].rcDes.top; + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = MEERWELLEN; + break; + case 8: + Guy.Aktiv = true; + Guy.Zustand = GUYSCHIFF; + break; + case 9: + Guy.Aktion = AKNICHTS; + Guy.Zustand = GUYLINKS; + Spielzustand = SZABSPANN; + break; } - break; - case 12: - Fade(100,100,100); - Stunden = 0; - Minuten = 0; - Guy.Zustand = GUYLINKS; - Guy.Aktion = AKNICHTS; - if (Guy.Resource[GESUNDHEIT] > 10) SaveGame(); - break; } -} - -void AkGerettet() -{ - ZWEID Erg; - short x; - Guy.AkNummer++; - switch(Guy.AkNummer) + void AkZelt() { - case 1: - Erg = GetKachel(Guy.PosAlt.x,Guy.PosAlt.y); - if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) ShortRoute(Guy.PosAlt.x,Guy.PosAlt.y); - else if (RoutePunkt%2 == 0) ShortRoute(RouteKoor[RoutePunkt].x, RouteKoor[RoutePunkt].y); //Nur bis zur Mitte der aktuellen Kacheln laufen - else ShortRoute(RouteKoor[RoutePunkt+1].x, RouteKoor[RoutePunkt+1].y); - TwoClicks = -1; //Keine Ahnung warum ich das hier machen muß - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - PapierText = DrawText(GERETTET,TXTPAPIER,1); - break; - case 3: - if (Frage == 2) + short i; + + if (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = ZELT; + for (i = 0; i1;x--)//Position des Rettungsschiffs festlegen - { - if (Scape[x][Guy.Pos.y].Art != 1) break; - RouteZiel.x = x+1; - } - //Schiff hinbauen - Scape[RouteZiel.x][RouteZiel.y].Phase = 0; - Scape[RouteZiel.x][RouteZiel.y].Objekt = GUYSCHIFF; - Scape[RouteZiel.x][RouteZiel.y].ObPos.x = 10; - Scape[RouteZiel.x][RouteZiel.y].ObPos.y = 10; - RouteZiel.x -= 2; - FindTheWay(); - Guy.Zustand = GUYLINKS; - break; - case 5: - Guy.Zustand = GUYLINKS; - ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].x) /2), - ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) /2)); - break; - case 6: - Guy.Pos.x += 2; - Guy.Zustand = GUYSCHWIMMEN; - ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) /2), - ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen+EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) /2)); - break; - case 7: - Guy.PosScreen.y -= 10; - if (!BootsFahrt) ChangeBootsFahrt(); - Guy.Aktiv = true; - Guy.Zustand = GUYSCHIFF; - RoutePunkt = -1; - Steps = 0; - Step = 0; - RouteStart.x = Guy.Pos.x; - RouteStart.y = Guy.Pos.y; - RouteZiel.y = Guy.Pos.y; - RouteZiel.x = MAXXKACH-2; - FindTheWay(); - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[MEERWELLEN].rcDes.left; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[MEERWELLEN].rcDes.top; - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = MEERWELLEN; - break; - case 8: - Guy.Aktiv = true; - Guy.Zustand = GUYSCHIFF; - break; - case 9: - Guy.Aktion = AKNICHTS; - Guy.Zustand = GUYLINKS; - Spielzustand = SZABSPANN; - break; } -} - -void AkZelt() -{ - short i; - if (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = ZELT; - for (i=0;i= Mittex) break; + y = Mittey - l - 1; + //Als erstes den oberen Bereich von links nach rechts durchgehen + for (x = Mittex - l; x <= Mittex + l; x++) { - if (l >= Mittex) break; - y = Mittey-l-1; - //Als erstes den oberen Bereich von links nach rechts durchgehen - for (x=Mittex-l;x<=Mittex+l;x++) + gefunden = false; + i = 0; + while (!gefunden) //Passendes Teil finden und Hoehe festlegen { - gefunden = false; - i=0; - while (! gefunden) //Passendes Teil finden und Hoehe festlegen + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) { - i+=1; - if (i==1000) {gefunden=true;} - - Scape[x][y].Typ = rand()%13; - for (j=0;j<10;j++) + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 1))) { - if (! ((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 1))) - { - Scape[x][y].Typ = rand()%13; - } + Scape[x][y].Typ = rand() % 13; } - - if ((x == Mittex-l) || ((x != Mittex-l) - && ((Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x-1][y].Typ][2][Scape[x][y].Typ] != 0)))) + } + + if ((x == Mittex - l) || ((x != Mittex - l) + && ((Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] != 0)))) + { + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 1) { - if (Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] == 1) + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) { - Scape[x][y].Hoehe = Scape[x][y+1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } - if (Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y+1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x][y+1].Hoehe + 1; - gefunden = true; - } - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][2][3] == 2) && (Vierecke[Scape[x+1][y+1].Typ][1][4] == 2)) || - ((Vierecke[Scape[x][y].Typ][2][1] == 2) && (Vierecke[Scape[x+1][y+1].Typ][1][2] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if (((Scape[x-1][y].Typ == 0) && (Scape[x-1][y].Hoehe == 0)) && - ((Scape[x][y+1].Typ == 0) && (Scape[x][y+1].Hoehe == 0))) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + gefunden = true; } - - } - } - - //Teil rechts-oben - x =Mittex+l+1; - y =Mittey-l-1; - gefunden = false; - i=0; - while (! gefunden) //Passendes Teil finden und Hoehe festlegen - { - i+=1; - if (i==1000) {gefunden=true;} - - Scape[x][y].Typ = rand()%13; - for (j=0;j<10;j++) - { - if (! ((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 5))) + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 2) { - Scape[x][y].Typ = rand()%13; + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe; + gefunden = true; } - } - - if (Vierecke[Scape[x-1][y].Typ][2][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x-1][y].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 3) { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe + 1; + gefunden = true; } - gefunden = true; } - if (Vierecke[Scape[x-1][y].Typ][2][Scape[x][y].Typ] == 2) + //Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][2][3] == 2) && (Vierecke[Scape[x + 1][y + 1].Typ][1][4] == 2)) || + ((Vierecke[Scape[x][y].Typ][2][1] == 2) && (Vierecke[Scape[x + 1][y + 1].Typ][1][2] == 2))) { - Scape[x][y].Hoehe = Scape[x-1][y].Hoehe; - gefunden = true; + gefunden = false; } - if (Vierecke[Scape[x-1][y].Typ][2][Scape[x][y].Typ] == 3) + //Nebeninseln vermeiden + if (((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) && + ((Scape[x][y + 1].Typ == 0) && (Scape[x][y + 1].Hoehe == 0))) { - Scape[x][y].Hoehe = Scape[x-1][y].Hoehe + 1; - gefunden = true; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x-1][y+1].Typ][2][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x-1][y+1].Typ][2][1] == 2))) + + } + } + + //Teil rechts-oben + x = Mittex + l + 1; + y = Mittey - l - 1; + gefunden = false; + i = 0; + while (!gefunden) //Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 5))) { - gefunden = false; + Scape[x][y].Typ = rand() % 13; } - //Nebeninseln vermeiden - if ((Scape[x-1][y].Typ == 0) && (Scape[x-1][y].Hoehe == 0)) + } + + if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } + gefunden = true; + } + if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe; + gefunden = true; } - - //Den rechten Bereich von oben nach unten durchgehen - x= Mittex +l+1; - for (y=Mittey-l;y<=Mittey+l;y++) + if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe + 1; + gefunden = true; + } + //Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][1] == 2))) { gefunden = false; - i=0; - while (! gefunden) //Passendes Teil finden und Hoehe festlegen - { - i+=1; - if (i==1000) {gefunden=true;} - - Scape[x][y].Typ = rand()%13; - for (j=0;j<10;j++) - { - if (! ((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 4))) - { - Scape[x][y].Typ = rand()%13; - } - } - - if ((Vierecke[Scape[x-1][y].Typ][2][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] != 0)) - { - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe + 1; - gefunden = true; - } - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x-1][y+1].Typ][2][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x-1][y+1].Typ][2][1] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if (((Scape[x-1][y].Typ == 0) && (Scape[x-1][y].Hoehe == 0)) && - ((Scape[x][y-1].Typ == 0) && (Scape[x][y-1].Hoehe == 0))) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } } - - //Teil rechts-unten - x = Mittex+l+1; - y = Mittey+l+1; + //Nebeninseln vermeiden + if ((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + + //Den rechten Bereich von oben nach unten durchgehen + x = Mittex + l + 1; + for (y = Mittey - l; y <= Mittey + l; y++) + { gefunden = false; - i=0; - while (! gefunden) //Passendes Teil finden und Hoehe festlegen + i = 0; + while (!gefunden) //Passendes Teil finden und Hoehe festlegen { - i+=1; - if (i==1000) {gefunden=true;} - - Scape[x][y].Typ = rand()%13; - for (j=0;j<10;j++) + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) { - if (! ((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 8))) + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 4))) { - Scape[x][y].Typ = rand()%13; + Scape[x][y].Typ = rand() % 13; } } - - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 1) + + if ((Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] != 0)) { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; + gefunden = true; } - gefunden = true; } - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 2) + //Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][1] == 2))) { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe; - gefunden = true; + gefunden = false; } - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 3) + //Nebeninseln vermeiden + if (((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) && + ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0))) { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe + 1; - gefunden = true; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x-1][y-1].Typ][3][2] == 2)) || - ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x-1][y-1].Typ][3][4] == 2))) + } + } + + //Teil rechts-unten + x = Mittex + l + 1; + y = Mittey + l + 1; + gefunden = false; + i = 0; + while (!gefunden) //Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 8))) { - gefunden = false; + Scape[x][y].Typ = rand() % 13; } - //Nebeninsel vermeiden - if ((Scape[x][y-1].Typ == 0) && (Scape[x][y-1].Hoehe == 0)) + } + + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; + gefunden = true; } - - //Den unteren Bereich von rechts nach links durchgehen - y = Mittey+l+1; - for (x=Mittex+l;x>=Mittex-l;x--) + //Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][2] == 2)) || + ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][4] == 2))) { gefunden = false; - i=0; - while (! gefunden) //Passendes Teil finden und Hoehe festlegen + } + //Nebeninsel vermeiden + if ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0)) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + + //Den unteren Bereich von rechts nach links durchgehen + y = Mittey + l + 1; + for (x = Mittex + l; x >= Mittex - l; x--) + { + gefunden = false; + i = 0; + while (!gefunden) //Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) { - i+=1; - if (i==1000) {gefunden=true;} - - Scape[x][y].Typ = rand()%13; - for (j=0;j<10;j++) + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 3))) { - if (! ((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 3))) - { - Scape[x][y].Typ = rand()%13; - } + Scape[x][y].Typ = rand() % 13; } - - if ((Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x+1][y].Typ][0][Scape[x][y].Typ] != 0)) + } + + if ((Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] != 0)) + { + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) { - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y-1].Typ][3][Scape[x][y].Typ] == 3) + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) { - Scape[x][y].Hoehe = Scape[x][y-1].Hoehe + 1; - gefunden = true; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } + gefunden = true; } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x-1][y-1].Typ][3][2] == 2)) || - ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x-1][y-1].Typ][3][4] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if (((Scape[x+1][y].Typ == 0) && (Scape[x+1][y].Hoehe == 0)) && - ((Scape[x][y-1].Typ == 0) && (Scape[x][y-1].Hoehe == 0))) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } - } - - //Teil links-unten - x = Mittex-l-1; - y = Mittey+l+1; - gefunden = false; - i=0; - while (! gefunden) //Passendes Teil finden und Hoehe festlegen - { - i+=1; - if (i==1000) {gefunden=true;} - - Scape[x][y].Typ = rand()%13; - for (j=0;j<10;j++) - { - if (! ((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 7))) + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) { - Scape[x][y].Typ = rand()%13; + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; + gefunden = true; } - } - - if (Vierecke[Scape[x+1][y].Typ][0][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x+1][y].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; + gefunden = true; } - gefunden = true; } - if (Vierecke[Scape[x+1][y].Typ][0][Scape[x][y].Typ] == 2) + //Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][2] == 2)) || + ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][4] == 2))) { - Scape[x][y].Hoehe = Scape[x+1][y].Hoehe; - gefunden = true; + gefunden = false; } - if (Vierecke[Scape[x+1][y].Typ][0][Scape[x][y].Typ] == 3) + //Nebeninseln vermeiden + if (((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) && + ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0))) { - Scape[x][y].Hoehe = Scape[x+1][y].Hoehe + 1; - gefunden = true; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x+1][y-1].Typ][0][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x+1][y-1].Typ][0][1] == 2))) + } + } + + //Teil links-unten + x = Mittex - l - 1; + y = Mittey + l + 1; + gefunden = false; + i = 0; + while (!gefunden) //Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 7))) { - gefunden = false; + Scape[x][y].Typ = rand() % 13; } - //Nebeninsel vermeiden - if ((Scape[x+1][y].Typ == 0) && (Scape[x+1][y].Hoehe == 0)) + } + + if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } + gefunden = true; + } + if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe + 1; + gefunden = true; } - - //Den linken Bereich von unten nach oben durchgehen - x = Mittex-l-1; - for (y=Mittey+l;y>=Mittey-l-1;y--) + //Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][1] == 2))) { gefunden = false; - i=0; - while (! gefunden) //Passendes Teil finden und Hoehe festlegen + } + //Nebeninsel vermeiden + if ((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + + //Den linken Bereich von unten nach oben durchgehen + x = Mittex - l - 1; + for (y = Mittey + l; y >= Mittey - l - 1; y--) + { + gefunden = false; + i = 0; + while (!gefunden) //Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) { - i+=1; - if (i==1000) {gefunden=true;} - Scape[x][y].Typ = rand()%13; - for (j=0;j<10;j++) + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 2))) { - if (! ((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 2))) - { - Scape[x][y].Typ = rand()%13; - } + Scape[x][y].Typ = rand() % 13; } - - if ((Vierecke[Scape[x+1][y].Typ][0][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] != 0)) + } + + if ((Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] != 0)) + { + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 1) { - if (Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y+1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y+1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y+1].Typ][1][Scape[x][y].Typ] == 3) + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) { - Scape[x][y].Hoehe = Scape[x][y+1].Hoehe + 1; - gefunden = true; + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; } + gefunden = true; } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x+1][y-1].Typ][0][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x+1][y-1].Typ][0][1] == 2))) + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 2) { - gefunden = false; + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe; + gefunden = true; } - //Nebeninseln vermeiden - if (((Scape[x+1][y].Typ == 0) && (Scape[x+1][y].Hoehe == 0)) && - ((Scape[x][y+1].Typ == 0) && (Scape[x][y+1].Hoehe == 0))) + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 3) { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe + 1; + gefunden = true; } } + //Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][1] == 2))) + { + gefunden = false; + } + //Nebeninseln vermeiden + if (((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) && + ((Scape[x][y + 1].Typ == 0) && (Scape[x][y + 1].Hoehe == 0))) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } } } - Anzahl = 0; - CheckRand = true; - for (y=0;y 0) Anzahl++; - - if (Scape[x][y].Typ == 0) Scape[x][y].LaufZeit = 1; - else Scape[x][y].LaufZeit = 2; - - if ((Scape[x][y].Typ != 0) && - ((x<=2) || (x>=MAXXKACH-2) || (y<=2) || (y>=MAXYKACH-2))) - CheckRand=false; - } - if ((Anzahl > MinGroesse) && (Anzahl < MaxGroesse) && (CheckRand)) break; - } + } + Anzahl = 0; + CheckRand = true; + for (y = 0; y 0) Anzahl++; + + if (Scape[x][y].Typ == 0) Scape[x][y].LaufZeit = 1; + else Scape[x][y].LaufZeit = 2; + + if ((Scape[x][y].Typ != 0) && + ((x <= 2) || (x >= MAXXKACH - 2) || (y <= 2) || (y >= MAXYKACH - 2))) + CheckRand = false; + } + if ((Anzahl > MinGroesse) && (Anzahl < MaxGroesse) && (CheckRand)) break; + } } void Meer() //Das Meer und den Strand bestimmen { - short x,y; - short Anzahl; //Anzahl von angrenzenden Landstücken - - for (y=0;y= 1) && (Anzahl < 6)) { Scape[x][y].Art = 2; @@ -9072,63 +6287,63 @@ void Meer() //Das Meer und den Strand bestimmen Scape[x][y].Objekt = MEERWELLEN; Scape[x][y].ObPos.x = (short)Bmp[MEERWELLEN].rcDes.left; Scape[x][y].ObPos.y = (short)Bmp[MEERWELLEN].rcDes.top; - Scape[x][y].Phase = (float)(Bmp[Scape[x][y].Objekt].Anzahl- - rand()%(Bmp[Scape[x][y].Objekt].Anzahl)-1); - if (rand()%2 == 0) Scape[x][y].Reverse = true; + Scape[x][y].Phase = (float)(Bmp[Scape[x][y].Objekt].Anzahl - + rand() % (Bmp[Scape[x][y].Objekt].Anzahl) - 1); + if (rand() % 2 == 0) Scape[x][y].Reverse = true; Scape[x][y].Begehbar = false; } } - + } void ChangeBootsFahrt() { - short x,y; - + short x, y; + BootsFahrt = !BootsFahrt; //Begehbarkeit umdrehen - for (y=0;ySetGammaRamp(0, &DDGammaRamp); + Direct::lpDDGammaControl->SetGammaRamp(0, &Direct::DDGammaRamp); } void CheckRohr(short x, short y) { Scape[x][y].Phase = 1; - if (Scape[x][y].Art == 0) Scape[x][y] .Art = 4; - if (Scape[x-1][y].Art == 0) Scape[x-1][y].Art = 4; - if (Scape[x-1][y-1].Art == 0) Scape[x-1][y-1].Art = 4; - if (Scape[x][y-1].Art == 0) Scape[x][y-1].Art = 4; - if (Scape[x+1][y-1].Art == 0) Scape[x+1][y-1].Art = 4; - if (Scape[x+1][y].Art == 0) Scape[x+1][y].Art = 4; - if (Scape[x+1][y+1].Art == 0) Scape[x+1][y+1].Art = 4; - if (Scape[x][y+1].Art == 0) Scape[x][y+1].Art = 4; - if (Scape[x-1][y+1].Art == 0) Scape[x-1][y+1].Art = 4; - - if ((Scape[x-1][y].Objekt == ROHR) && (Scape[x-1][y].Phase == 0)) CheckRohr(x-1,y); - if ((Scape[x][y-1].Objekt == ROHR) && (Scape[x][y-1].Phase == 0)) CheckRohr(x,y-1); - if ((Scape[x+1][y].Objekt == ROHR) && (Scape[x+1][y].Phase == 0)) CheckRohr(x+1,y); - if ((Scape[x][y+1].Objekt == ROHR) && (Scape[x][y+1].Phase == 0)) CheckRohr(x,y+1); + if (Scape[x][y].Art == 0) Scape[x][y].Art = 4; + if (Scape[x - 1][y].Art == 0) Scape[x - 1][y].Art = 4; + if (Scape[x - 1][y - 1].Art == 0) Scape[x - 1][y - 1].Art = 4; + if (Scape[x][y - 1].Art == 0) Scape[x][y - 1].Art = 4; + if (Scape[x + 1][y - 1].Art == 0) Scape[x + 1][y - 1].Art = 4; + if (Scape[x + 1][y].Art == 0) Scape[x + 1][y].Art = 4; + if (Scape[x + 1][y + 1].Art == 0) Scape[x + 1][y + 1].Art = 4; + if (Scape[x][y + 1].Art == 0) Scape[x][y + 1].Art = 4; + if (Scape[x - 1][y + 1].Art == 0) Scape[x - 1][y + 1].Art = 4; + + if ((Scape[x - 1][y].Objekt == ROHR) && (Scape[x - 1][y].Phase == 0)) CheckRohr(x - 1, y); + if ((Scape[x][y - 1].Objekt == ROHR) && (Scape[x][y - 1].Phase == 0)) CheckRohr(x, y - 1); + if ((Scape[x + 1][y].Objekt == ROHR) && (Scape[x + 1][y].Phase == 0)) CheckRohr(x + 1, y); + if ((Scape[x][y + 1].Objekt == ROHR) && (Scape[x][y + 1].Phase == 0)) CheckRohr(x, y + 1); } void FillRohr() { - short x,y; + short x, y; - for (y=0;y= FLUSS1) && (Scape[x][y].Objekt <= SCHLEUSE6)) + if ((Scape[x][y].Objekt >= FLUSS1) && (Scape[x][y].Objekt <= SCHLEUSE6)) { - if (Scape[x][y].Art == 0) Scape[x][y] .Art = 4; - if (Scape[x-1][y].Art == 0) Scape[x-1][y].Art = 4; - if (Scape[x-1][y-1].Art == 0) Scape[x-1][y-1].Art = 4; - if (Scape[x][y-1].Art == 0) Scape[x][y-1].Art = 4; - if (Scape[x+1][y-1].Art == 0) Scape[x+1][y-1].Art = 4; - if (Scape[x+1][y].Art == 0) Scape[x+1][y].Art = 4; - if (Scape[x+1][y+1].Art == 0) Scape[x+1][y+1].Art = 4; - if (Scape[x][y+1].Art == 0) Scape[x][y+1].Art = 4; - if (Scape[x-1][y+1].Art == 0) Scape[x-1][y+1].Art = 4; + if (Scape[x][y].Art == 0) Scape[x][y].Art = 4; + if (Scape[x - 1][y].Art == 0) Scape[x - 1][y].Art = 4; + if (Scape[x - 1][y - 1].Art == 0) Scape[x - 1][y - 1].Art = 4; + if (Scape[x][y - 1].Art == 0) Scape[x][y - 1].Art = 4; + if (Scape[x + 1][y - 1].Art == 0) Scape[x + 1][y - 1].Art = 4; + if (Scape[x + 1][y].Art == 0) Scape[x + 1][y].Art = 4; + if (Scape[x + 1][y + 1].Art == 0) Scape[x + 1][y + 1].Art = 4; + if (Scape[x][y + 1].Art == 0) Scape[x][y + 1].Art = 4; + if (Scape[x - 1][y + 1].Art == 0) Scape[x - 1][y + 1].Art = 4; } if ((Scape[x][y].Objekt != ROHR) || (Scape[x][y].Phase >= Bmp[ROHR].Anzahl)) continue; - if ((Scape[x-1][y].Objekt >= FLUSS5) && (Scape[x-1][y].Objekt <= FLUSS10)) + if ((Scape[x - 1][y].Objekt >= FLUSS5) && (Scape[x - 1][y].Objekt <= FLUSS10)) { - Scape[x-1][y].Objekt += 14; - Scape[x-1][y].ObPos.x = (short)Bmp[Scape[x-1][y].Objekt].rcDes.left; - Scape[x-1][y].ObPos.y = (short)Bmp[Scape[x-1][y].Objekt].rcDes.top; - CheckRohr(x,y); + Scape[x - 1][y].Objekt += 14; + Scape[x - 1][y].ObPos.x = (short)Bmp[Scape[x - 1][y].Objekt].rcDes.left; + Scape[x - 1][y].ObPos.y = (short)Bmp[Scape[x - 1][y].Objekt].rcDes.top; + CheckRohr(x, y); } - else if ((Scape[x-1][y].Objekt >= SCHLEUSE1) && (Scape[x-1][y].Objekt <= SCHLEUSE6)) + else if ((Scape[x - 1][y].Objekt >= SCHLEUSE1) && (Scape[x - 1][y].Objekt <= SCHLEUSE6)) { - CheckRohr(x,y); + CheckRohr(x, y); } - if ((Scape[x][y-1].Objekt >= FLUSS5) && (Scape[x][y-1].Objekt <= FLUSS10)) + if ((Scape[x][y - 1].Objekt >= FLUSS5) && (Scape[x][y - 1].Objekt <= FLUSS10)) { - Scape[x][y-1].Objekt += 14; - Scape[x][y-1].ObPos.x = (short)Bmp[Scape[x][y-1].Objekt].rcDes.left; - Scape[x][y-1].ObPos.y = (short)Bmp[Scape[x][y-1].Objekt].rcDes.top; - CheckRohr(x,y); + Scape[x][y - 1].Objekt += 14; + Scape[x][y - 1].ObPos.x = (short)Bmp[Scape[x][y - 1].Objekt].rcDes.left; + Scape[x][y - 1].ObPos.y = (short)Bmp[Scape[x][y - 1].Objekt].rcDes.top; + CheckRohr(x, y); } - else if ((Scape[x][y-1].Objekt >= SCHLEUSE1) && (Scape[x][y-1].Objekt <= SCHLEUSE6)) + else if ((Scape[x][y - 1].Objekt >= SCHLEUSE1) && (Scape[x][y - 1].Objekt <= SCHLEUSE6)) { - CheckRohr(x,y); + CheckRohr(x, y); } - if ((Scape[x+1][y].Objekt >= FLUSS5) && (Scape[x+1][y].Objekt <= FLUSS10)) + if ((Scape[x + 1][y].Objekt >= FLUSS5) && (Scape[x + 1][y].Objekt <= FLUSS10)) { - Scape[x+1][y].Objekt += 14; - Scape[x+1][y].ObPos.x = (short)Bmp[Scape[x+1][y].Objekt].rcDes.left; - Scape[x+1][y].ObPos.y = (short)Bmp[Scape[x+1][y].Objekt].rcDes.top; - CheckRohr(x,y); + Scape[x + 1][y].Objekt += 14; + Scape[x + 1][y].ObPos.x = (short)Bmp[Scape[x + 1][y].Objekt].rcDes.left; + Scape[x + 1][y].ObPos.y = (short)Bmp[Scape[x + 1][y].Objekt].rcDes.top; + CheckRohr(x, y); } - else if ((Scape[x+1][y].Objekt >= SCHLEUSE1) && (Scape[x+1][y].Objekt <= SCHLEUSE6)) + else if ((Scape[x + 1][y].Objekt >= SCHLEUSE1) && (Scape[x + 1][y].Objekt <= SCHLEUSE6)) { - CheckRohr(x,y); + CheckRohr(x, y); } - if ((Scape[x][y+1].Objekt >= FLUSS5) && (Scape[x][y+1].Objekt <= FLUSS10)) + if ((Scape[x][y + 1].Objekt >= FLUSS5) && (Scape[x][y + 1].Objekt <= FLUSS10)) { - Scape[x][y+1].Objekt += 14; - Scape[x][y+1].ObPos.x = (short)Bmp[Scape[x][y+1].Objekt].rcDes.left; - Scape[x][y+1].ObPos.y = (short)Bmp[Scape[x][y+1].Objekt].rcDes.top; - CheckRohr(x,y); + Scape[x][y + 1].Objekt += 14; + Scape[x][y + 1].ObPos.x = (short)Bmp[Scape[x][y + 1].Objekt].rcDes.left; + Scape[x][y + 1].ObPos.y = (short)Bmp[Scape[x][y + 1].Objekt].rcDes.top; + CheckRohr(x, y); } - else if ((Scape[x][y+1].Objekt >= SCHLEUSE1) && (Scape[x][y+1].Objekt <= SCHLEUSE6)) + else if ((Scape[x][y + 1].Objekt >= SCHLEUSE1) && (Scape[x][y + 1].Objekt <= SCHLEUSE6)) { - CheckRohr(x,y); + CheckRohr(x, y); } - + } - //Felder auf trockenen Wiesen löschen - for (y=0;yLaengetmp) + if (i>Laengetmp) { //neue Variante speichern - if (gefunden) Laengetmp = i; else Laengetmp = i-1; - for (j=0;j<=Laengetmp;j++) + if (gefunden) Laengetmp = i; else Laengetmp = i - 1; + for (j = 0; j <= Laengetmp; j++) { Flusstmp[j].x = Flusslauf[m][j].x; Flusstmp[j].y = Flusslauf[m][j].y; } } } - for (i=0;ix1) + if (x2>x1) { Scape[x1][y1].Objekt = QUELLE1; continue; @@ -9430,7 +6645,7 @@ void FillRohr() Scape[x1][y1].Objekt = QUELLE4; continue; } - if (y2>y1) + if (y2>y1) { Scape[x1][y1].Objekt = QUELLE2; continue; @@ -9441,19 +6656,19 @@ void FillRohr() continue; } } - - //Alle Möglichkeiten durchgehen - - if (Scape[x1][y1].Typ ==1) Scape[x1][y1].Objekt = FLUSS1; - if (Scape[x1][y1].Typ ==2) Scape[x1][y1].Objekt = FLUSS2; - if (Scape[x1][y1].Typ ==3) Scape[x1][y1].Objekt = FLUSS3; - if (Scape[x1][y1].Typ ==4) Scape[x1][y1].Objekt = FLUSS4; - - if (Scape[x1][y1].Typ ==0) + + //Alle Möglichkeiten durchgehen + + if (Scape[x1][y1].Typ == 1) Scape[x1][y1].Objekt = FLUSS1; + if (Scape[x1][y1].Typ == 2) Scape[x1][y1].Objekt = FLUSS2; + if (Scape[x1][y1].Typ == 3) Scape[x1][y1].Objekt = FLUSS3; + if (Scape[x1][y1].Typ == 4) Scape[x1][y1].Objekt = FLUSS4; + + if (Scape[x1][y1].Typ == 0) { if ((x0 < x1) && (y0 == y1)) { - if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG3; //Mündung + if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG3; //Mündung else { if ((x1 < x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS5; @@ -9463,12 +6678,12 @@ void FillRohr() } if ((x0 == x1) && (y0 < y1)) { - if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG4; //Mündung + if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG4; //Mündung else { if ((x1 < x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS8; if ((x1 == x2) && (y1 < y2)) Scape[x1][y1].Objekt = FLUSS6; - if ((x1 > x2) && (y1 == y2)) + if ((x1 > x2) && (y1 == y2)) { Scape[x1][y1].Objekt = FLUSS9; Scape[x1][y1].Reverse = true; @@ -9477,7 +6692,7 @@ void FillRohr() } if ((x0 > x1) && (y0 == y1)) { - if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt =MUENDUNG1; //Mündung + if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG1; //Mündung else { if ((x1 > x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS5; @@ -9488,13 +6703,13 @@ void FillRohr() } if ((x0 == x1) && (y0 > y1)) { - if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG2; //Mündung + if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG2; //Mündung else { if ((x1 == x2) && (y1 > y2)) Scape[x1][y1].Objekt = FLUSS6; if ((x1 > x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS7; Scape[x1][y1].Reverse = true; - if ((x1 < x2) && (y1 == y2)) + if ((x1 < x2) && (y1 == y2)) { Scape[x1][y1].Objekt = FLUSS10; Scape[x1][y1].Reverse = false; @@ -9503,7 +6718,7 @@ void FillRohr() } } } - //Für das letzte Flussstück + //Für das letzte Flussstück Scape[x1][y1].ObPos.x = (short)Bmp[Scape[x1][y1].Objekt].rcDes.left; Scape[x1][y1].ObPos.y = (short)Bmp[Scape[x1][y1].Objekt].rcDes.top; } @@ -9512,88 +6727,88 @@ void FillRohr() void Baeume(short Prozent) { - short x,y; //Diese Kachel wird angeschaut + short x, y; //Diese Kachel wird angeschaut ZWEID Erg; ZWEID Pos; //Da steht der Baum short r; //random speicherung - bool einGrosserBaum = false; //gibt es bereits einen großen Baum + bool einGrosserBaum = false; //gibt es bereits einen großen Baum - for (y=0;y=0;i--) + y = MAXYKACH / 2; + for (i = MAXXKACH - 1; i >= 0; i--) { if (Scape[i][y].Art != 1) { - x = i+1; + x = i + 1; break; } } break; case 2: - x = MAXXKACH/2; - for (i=MAXYKACH-1;i>=0;i--) + x = MAXXKACH / 2; + for (i = MAXYKACH - 1; i >= 0; i--) { if (Scape[x][i].Art != 1) { - y = i+1; + y = i + 1; break; } } @@ -9606,15 +6821,15 @@ void Piratenwrack() void Schatz() { - short x,y,i,j; //Diese Kachel wird angeschaut - RGBSTRUCT rgbleft,rgbtop,rgbright,rgbbottom; - - while(1) - { - x = rand()%(MAXXKACH-1); - y = rand()%(MAXYKACH-1); + short x, y, i, j; //Diese Kachel wird angeschaut + RGBSTRUCT rgbleft, rgbtop, rgbright, rgbbottom; + + while (1) + { + x = rand() % (MAXXKACH - 1); + y = rand() % (MAXYKACH - 1); //nur auf flachen Kacheln ohne Objekt - if ((Scape[x][y].Objekt == -1) && (Scape[x][y].Typ ==0) + if ((Scape[x][y].Objekt == -1) && (Scape[x][y].Typ == 0) && (Scape[x][y].Art != 3)) { if (SchatzPos.x == -1) @@ -9622,105 +6837,105 @@ void Schatz() SchatzPos.x = x; SchatzPos.y = y; } - - lpDDSScape->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL); - lpDDSSchatzkarte->Lock(NULL,&ddsd2,DDLOCK_WAIT,NULL); - - for (i=0;iLock(NULL, &Direct::ddsd, DDLOCK_WAIT, NULL); + Direct::lpDDSSchatzkarte->Lock(NULL, &Direct::ddsd2, DDLOCK_WAIT, NULL); + + for (i = 0; iUnlock(NULL); - lpDDSSchatzkarte->Unlock(NULL); - - rcRectsrc = Bmp[KREUZ].rcSrc; - rcRectdes.left = SKARTEX/2-Bmp[KREUZ].Breite/2; - rcRectdes.right= rcRectdes.left+Bmp[KREUZ].Breite; - rcRectdes.top = SKARTEY/2-Bmp[KREUZ].Hoehe/2; - rcRectdes.bottom= rcRectdes.top+Bmp[KREUZ].Hoehe; - Blitten(Bmp[KREUZ].Surface,lpDDSSchatzkarte,true); - - - lpDDSSchatzkarte->Lock(NULL,&ddsd2,DDLOCK_WAIT,NULL); - + Direct::lpDDSScape->Unlock(NULL); + Direct::lpDDSSchatzkarte->Unlock(NULL); + + rcRectsrc = Bmp[KREUZ].rcSrc; + rcRectdes.left = SKARTEX / 2 - Bmp[KREUZ].Breite / 2; + rcRectdes.right = rcRectdes.left + Bmp[KREUZ].Breite; + rcRectdes.top = SKARTEY / 2 - Bmp[KREUZ].Hoehe / 2; + rcRectdes.bottom = rcRectdes.top + Bmp[KREUZ].Hoehe; + Blitten(Bmp[KREUZ].Surface, Direct::lpDDSSchatzkarte, true); + + + Direct::lpDDSSchatzkarte->Lock(NULL, &Direct::ddsd2, DDLOCK_WAIT, NULL); + //Weichzeichnen - for (i=0;i0) && (i0) && (j0) && (i0) && (jUnlock(NULL); + Direct::lpDDSSchatzkarte->Unlock(NULL); break; } - } + } } short RotateRight(short Dir) //Richtungskoordinate rechtsrum umrechnen { - switch(Dir) + switch (Dir) { - case 2 : { NewPos.x++; NewPos.y++; Dir=4; break; } - case 4 : { NewPos.x--; NewPos.y++; Dir=8; break; } - case 8: { NewPos.x--; NewPos.y--; Dir=1; break; } - case 1 : { NewPos.x++; NewPos.y--; Dir=2; break; } + case 2: { NewPos.x++; NewPos.y++; Dir = 4; break; } + case 4: { NewPos.x--; NewPos.y++; Dir = 8; break; } + case 8: { NewPos.x--; NewPos.y--; Dir = 1; break; } + case 1: { NewPos.x++; NewPos.y--; Dir = 2; break; } }; return Dir; } - + bool LineIntersect(ZWEID LineStartPos, ZWEID Pos, bool store) -{ +{ short i; - float x,y; + float x, y; short Dx, Dy; float Sx, Sy; bool erg = false; - float Nextx,Nexty; - - Steps=0; - - Dx = LineStartPos.x-Pos.x; - Dy = LineStartPos.y-Pos.y; + float Nextx, Nexty; + + Steps = 0; + + Dx = LineStartPos.x - Pos.x; + Dy = LineStartPos.y - Pos.y; x = LineStartPos.x; y = LineStartPos.y; - if (abs(Dx)>abs(Dy)) + if (abs(Dx)>abs(Dy)) { if (Dx>0) Sx = -1; else Sx = 1; - if (Dx==0) Sy = 0; else Sy = (float)Dy/((float)(Dx*Sx)); + if (Dx == 0) Sy = 0; else Sy = (float)Dy / ((float)(Dx*Sx)); Steps = abs(Dx); - } + } else { if (Dy>0) Sy = -1; else Sy = 1; - if (Dy==0) Sx = 0; else Sx = (float)Dx/((float)(Dy*Sy)); + if (Dy == 0) Sx = 0; else Sx = (float)Dx / ((float)(Dy*Sy)); Steps = abs(Dy); } - - for (i=0; i 0)) + while ((!GoalReached) && (PCnt > 0)) { - //den mit der kürzesten Entfernung zum Ziel finden (der in der Liste ist) - Shortest=0; - for (CI = 0;CI <= PCnt-1; CI++) + //den mit der kürzesten Entfernung zum Ziel finden (der in der Liste ist) + Shortest = 0; + for (CI = 0; CI <= PCnt - 1; CI++) { - if (Llist[CI] Llist[Shortest]) || (ShortEntf == -1)) { ShortEntf = Llist[Shortest]; ShortKoor = Plist[Shortest]; } - - //Den Nächsten aus der Liste löschen - Plist[Shortest] = Plist[PCnt-1]; - Llist[Shortest] = Llist[PCnt-1]; + + //Den Nächsten aus der Liste löschen + Plist[Shortest] = Plist[PCnt - 1]; + Llist[Shortest] = Llist[PCnt - 1]; PCnt--; NewPos = Pos; Dir = 2; NewPos.y--; //Oben nachschauen anfangen - for (BI = 0; BI<=3; BI++) //In jede Richtung schauen + for (BI = 0; BI <= 3; BI++) //In jede Richtung schauen { //ist das Feld noch nicht besucht und frei? - if ((LenMap[NewPos.x][NewPos.y]==65535) && - (Scape[NewPos.x][NewPos.y].Begehbar)) + if ((LenMap[NewPos.x][NewPos.y] == 65535) && + (Scape[NewPos.x][NewPos.y].Begehbar)) { // Wieviele Schritte braucht man um zu diesem Feld zu kommen - StepCnt = LenMap[Pos.x][Pos.y]+1; + StepCnt = LenMap[Pos.x][Pos.y] + 1; LenMap[NewPos.x][NewPos.y] = StepCnt; Plist[PCnt] = NewPos; //Die Entfernung in die Liste aufnehmen - DiffX = (NewPos.x-RouteZiel.x); - DiffY = (NewPos.y-RouteZiel.y); - Llist[PCnt] = (DiffX*DiffX)+(DiffY*DiffY); + DiffX = (NewPos.x - RouteZiel.x); + DiffY = (NewPos.y - RouteZiel.y); + Llist[PCnt] = (DiffX*DiffX) + (DiffY*DiffY); PCnt++; } //Ziel erreicht? - if ((NewPos.x==RouteZiel.x) && (NewPos.y==RouteZiel.y)) + if ((NewPos.x == RouteZiel.x) && (NewPos.y == RouteZiel.y)) { GoalReached = true; - BI=3; + BI = 3; } Dir = RotateRight(Dir); } } - if ((PCnt == 0) || (!Scape[RouteZiel.x][RouteZiel.y].Begehbar)) + if ((PCnt == 0) || (!Scape[RouteZiel.x][RouteZiel.y].Begehbar)) { RouteZiel.x = ShortKoor.x; RouteZiel.y = ShortKoor.y; - + if (FindTheWay()) return true; else return false; } - else if (GoalReached) //Punkt rückwärts durchgehen und Abkürzungen finden + else if (GoalReached) //Punkt rückwärts durchgehen und Abkürzungen finden { Pos = RouteZiel; LineStartPos = Pos; - while ((Pos.x!=RouteStart.x) || (Pos.y!=RouteStart.y)) + while ((Pos.x != RouteStart.x) || (Pos.y != RouteStart.y)) { NewPos = Pos; ShStep = 65535; Dir = 2; NewPos.y--; //Zuerst nach oben probieren - for (AI=0; AI<=3; AI++) + for (AI = 0; AI <= 3; AI++) { - if (LenMap[NewPos.x][NewPos.y]=BAUM1DOWN) && (j<=BAUM4DOWN) && //Die Baumfällenanimation nur ein mal abspielen - (Scape[x][y].Phase == Bmp[j].Anzahl-1)); + if ((j >= BAUM1DOWN) && (j <= BAUM4DOWN) && //Die Baumfällenanimation nur ein mal abspielen + (Scape[x][y].Phase == Bmp[j].Anzahl - 1)); else Scape[x][y].Phase++; - if (Scape[x][y].Phase>=Bmp[j].Anzahl) Scape[x][y].Phase = 0; + if (Scape[x][y].Phase >= Bmp[j].Anzahl) Scape[x][y].Phase = 0; } - + } - - for (j=BUTTGITTER;j<=BUTTDESTROY;j++) + + for (j = BUTTGITTER; j <= BUTTDESTROY; j++) { if (!Bmp[j].Animation) continue; - i = LastBild/Bmp[j].Geschwindigkeit; + i = LastBild / Bmp[j].Geschwindigkeit; if (i<1) i = 1; if (Bild%i == 0) { - Bmp[j].Phase++; - if (Bmp[j].Phase>=Bmp[j].Anzahl) Bmp[j].Phase = 0; + Bmp[j].Phase++; + if (Bmp[j].Phase >= Bmp[j].Anzahl) Bmp[j].Phase = 0; } } - + //Spielfigur //laufen if (((Guy.Zustand >= GUYLINKS) && (Guy.Zustand <= GUYUNTEN)) || ((Guy.Zustand >= GUYBOOTLINKS) && (Guy.Zustand <= GUYBOOTUNTEN)) || - ( Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) + (Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) { - i = LastBild/Bmp[Guy.Zustand].Geschwindigkeit; + i = LastBild / Bmp[Guy.Zustand].Geschwindigkeit; if (i<1) i = 1; - if (LastBild-Bmp[Guy.Zustand].Geschwindigkeit < 0) loop = 2; else loop=1; - if (BootsFahrt) loop = loop*2; - for (k=0;k= GUYSUCHEN) && (Guy.Zustand <= GUYSCHLEUDER) && + if ((Guy.Zustand >= GUYSUCHEN) && (Guy.Zustand <= GUYSCHLEUDER) && (Bmp[Guy.Zustand].Phase != Bmp[Guy.Zustand].Anzahl)) { - i = LastBild/Bmp[Guy.Zustand].Geschwindigkeit; + i = LastBild / Bmp[Guy.Zustand].Geschwindigkeit; if (i<1) i = 1; if (Bild%i == 0) { Bmp[Guy.Zustand].Phase++; - if (Bmp[Guy.Zustand].Phase>=Bmp[Guy.Zustand].Anzahl) + if (Bmp[Guy.Zustand].Phase >= Bmp[Guy.Zustand].Anzahl) { Bmp[Guy.Zustand].Phase = 0; if (PapierText == -1) Guy.Aktiv = false; @@ -10169,15 +7384,15 @@ void Animationen() } void CalcGuyKoor() -{ - short Dx,Dy; //Differenz zwischen Ziel und Start - +{ + short Dx, Dy; //Differenz zwischen Ziel und Start + if (Step >= Steps) { RoutePunkt++; - - if ((RoutePunkt >= (RouteLaenge>1 ? 2*(RouteLaenge-1):1) || - ((Guy.Aktion == AKABBRUCH) && (RouteLaenge>1)))) + + if ((RoutePunkt >= (RouteLaenge>1 ? 2 * (RouteLaenge - 1) : 1) || + ((Guy.Aktion == AKABBRUCH) && (RouteLaenge>1)))) { if (RouteLaenge>1) Bmp[BUTTSTOP].Phase = -1; Bmp[Guy.Zustand].Phase = 0; @@ -10186,61 +7401,61 @@ void CalcGuyKoor() RouteZiel.y = -1; return; } - Guy.Pos.x = Route[(RoutePunkt+1)/2].x; - Guy.Pos.y = Route[(RoutePunkt+1)/2].y; + Guy.Pos.x = Route[(RoutePunkt + 1) / 2].x; + Guy.Pos.y = Route[(RoutePunkt + 1) / 2].y; Entdecken(); - if (BootsFahrt) - AddTime(0,Scape[Route[(RoutePunkt+1)/2].x][Route[(RoutePunkt+1)/2].y].LaufZeit*3); - else AddTime(0,Scape[Route[(RoutePunkt+1)/2].x][Route[(RoutePunkt+1)/2].y].LaufZeit*5); - AddResource(NAHRUNG,-1); + if (BootsFahrt) + AddTime(0, Scape[Route[(RoutePunkt + 1) / 2].x][Route[(RoutePunkt + 1) / 2].y].LaufZeit * 3); + else AddTime(0, Scape[Route[(RoutePunkt + 1) / 2].x][Route[(RoutePunkt + 1) / 2].y].LaufZeit * 5); + AddResource(NAHRUNG, -1); AddResource(WASSER, -1); - - if ((Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) Guy.Zustand -=2; //nichts machen + + if ((Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) Guy.Zustand -= 2; //nichts machen else if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; else Guy.Zustand = GUYLINKS; - - if (RouteLaenge > 1) //Bei normaler Routenabarbeitung die Richung Kachelmäßig rausfinden + + if (RouteLaenge > 1) //Bei normaler Routenabarbeitung die Richung Kachelmäßig rausfinden { - if (Route[RoutePunkt/2].x > Route[RoutePunkt/2+1].x) Guy.Zustand += 0; - else if (Route[RoutePunkt/2].x < Route[RoutePunkt/2+1].x) Guy.Zustand += 2; - else if (Route[RoutePunkt/2].y < Route[RoutePunkt/2+1].y) Guy.Zustand += 3; - else if (Route[RoutePunkt/2].y > Route[RoutePunkt/2+1].y) Guy.Zustand += 1; + if (Route[RoutePunkt / 2].x > Route[RoutePunkt / 2 + 1].x) Guy.Zustand += 0; + else if (Route[RoutePunkt / 2].x < Route[RoutePunkt / 2 + 1].x) Guy.Zustand += 2; + else if (Route[RoutePunkt / 2].y < Route[RoutePunkt / 2 + 1].y) Guy.Zustand += 3; + else if (Route[RoutePunkt / 2].y > Route[RoutePunkt / 2 + 1].y) Guy.Zustand += 1; } else { - if ((RouteKoor[RoutePunkt].x > RouteKoor[RoutePunkt+1].x) && - (RouteKoor[RoutePunkt].y >= RouteKoor[RoutePunkt+1].y)) Guy.Zustand += 0; - else if ((RouteKoor[RoutePunkt].x <= RouteKoor[RoutePunkt+1].x) && - (RouteKoor[RoutePunkt].y > RouteKoor[RoutePunkt+1].y)) Guy.Zustand += 1; - else if ((RouteKoor[RoutePunkt].x < RouteKoor[RoutePunkt+1].x) && - (RouteKoor[RoutePunkt].y <= RouteKoor[RoutePunkt+1].y)) Guy.Zustand += 2; - else if ((RouteKoor[RoutePunkt].x >= RouteKoor[RoutePunkt+1].x) && - (RouteKoor[RoutePunkt].y < RouteKoor[RoutePunkt+1].y)) Guy.Zustand += 3; - } - - Dx = RouteKoor[RoutePunkt+1].x-RouteKoor[RoutePunkt].x; - Dy = RouteKoor[RoutePunkt+1].y-RouteKoor[RoutePunkt].y; + if ((RouteKoor[RoutePunkt].x > RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y >= RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 0; + else if ((RouteKoor[RoutePunkt].x <= RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y > RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 1; + else if ((RouteKoor[RoutePunkt].x < RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y <= RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 2; + else if ((RouteKoor[RoutePunkt].x >= RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y < RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 3; + } + + Dx = RouteKoor[RoutePunkt + 1].x - RouteKoor[RoutePunkt].x; + Dy = RouteKoor[RoutePunkt + 1].y - RouteKoor[RoutePunkt].y; GuyPosScreenStart.x = RouteKoor[RoutePunkt].x; GuyPosScreenStart.y = RouteKoor[RoutePunkt].y; Step = 0; - - if (abs(Dx)>abs(Dy)) + + if (abs(Dx)>abs(Dy)) { if (Dx>0) Schrittx = 1; else Schrittx = -1; - if (Dx==0) Schritty = 0; else Schritty = (float)Dy/((float)(Dx*Schrittx)); + if (Dx == 0) Schritty = 0; else Schritty = (float)Dy / ((float)(Dx*Schrittx)); Steps = abs(Dx); - - } + + } else { if (Dy>0) Schritty = 1; else Schritty = -1; - if (Dy==0) Schrittx = 0; else Schrittx = (float)Dx/((float)(Dy*Schritty)); + if (Dy == 0) Schrittx = 0; else Schrittx = (float)Dx / ((float)(Dy*Schritty)); Steps = abs(Dy); } - + } - + if (Bild % Scape[Guy.Pos.x][Guy.Pos.y].LaufZeit == 0) { Step++; @@ -10253,10 +7468,10 @@ void CalcGuyKoor() } Guy.PosScreen.x = GuyPosScreenStart.x + ROUND(Step*Schrittx); Guy.PosScreen.y = GuyPosScreenStart.y + ROUND(Step*Schritty); - if ((Spielzustand == SZINTRO) || (Spielzustand == SZGERETTET)) //Beim Intro fährt die Kamera mit + if ((Spielzustand == SZINTRO) || (Spielzustand == SZGERETTET)) //Beim Intro fährt die Kamera mit { - Camera.x = Guy.PosScreen.x-rcGesamt.right/2; - Camera.y = Guy.PosScreen.y-rcGesamt.bottom/2; + Camera.x = Guy.PosScreen.x - rcGesamt.right / 2; + Camera.y = Guy.PosScreen.y - rcGesamt.bottom / 2; } } } @@ -10264,14 +7479,14 @@ void CalcGuyKoor() void Entdecken() { bool Aenderung = false; - short i,j; + short i, j; - for (i=-1;i<=1;i++) - for (j=-1;j<=1;j++) + for (i = -1; i <= 1; i++) + for (j = -1; j <= 1; j++) { - if (!Scape[Guy.Pos.x+i][Guy.Pos.y+j].Entdeckt) + if (!Scape[Guy.Pos.x + i][Guy.Pos.y + j].Entdeckt) { - Scape[Guy.Pos.x+i][Guy.Pos.y+j].Entdeckt = true; + Scape[Guy.Pos.x + i][Guy.Pos.y + j].Entdeckt = true; Aenderung = true; } } @@ -10281,211 +7496,3022 @@ void Entdecken() void CalcKoor() { - short x,y; + short x, y; // Bildschirmkoordinaten berechnen und speichern - for (y=0;yRelease(); + lpDDSPrimary = NULL; + } + if (lpDDPal != NULL) + { + lpDDPal->Release(); + lpDDPal = NULL; + } + lpDD->Release(); + lpDD = NULL; + } + + } /* finiObjects */ + + void InitDDraw() + { + + DDSCAPS2 ddscaps; + HRESULT ddrval; + LPDIRECTDRAW pDD; + + /* + * create the main DirectDraw object + */ + ddrval = DirectDrawCreate(NULL, &pDD, NULL); + if (ddrval != DD_OK) + goto error; + ddrval = pDD->QueryInterface(IID_IDirectDraw4, (LPVOID *)& lpDD); + if (ddrval != DD_OK) + goto error; + // Get exclusive mode + ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + if (ddrval != DD_OK) + goto error; + + // Set the video mode to 800x600x16 + ddrval = lpDD->SetDisplayMode(MAXX, MAXY, 32, 0, 0); + if (ddrval != DD_OK) + { + switch (ddrval) + { + case DDERR_GENERIC: + case DDERR_INVALIDMODE: + case DDERR_INVALIDOBJECT: + case DDERR_INVALIDPARAMS: + case DDERR_LOCKEDSURFACES: + case DDERR_NOEXCLUSIVEMODE: + case DDERR_SURFACEBUSY: + case DDERR_UNSUPPORTED: + case DDERR_UNSUPPORTEDMODE: {MessageBeep(MB_OK); break; } + case DDERR_WASSTILLDRAWING: + ; + } + + goto error; + } + + ZeroMemory(&ddsd2, sizeof(ddsd2)); + ddsd2.dwSize = sizeof(ddsd2); + + // Create the primary surface with 1 back buffer + ZeroMemory(&ddsd, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | + DDSCAPS_FLIP | + DDSCAPS_COMPLEX; + ddsd.dwBackBufferCount = 1; //Anzahl ?? + ddrval = lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL); + if (ddrval != DD_OK) + goto error; + + //für gamma-ablenden + lpDDSPrimary->QueryInterface(IID_IDirectDrawGammaControl, (void **)&lpDDGammaControl); + lpDDGammaControl->GetGammaRamp(0, &DDGammaOld); + lpDDGammaControl->GetGammaRamp(0, &DDGammaRamp); + + ddscaps.dwCaps = DDSCAPS_BACKBUFFER; + ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack); + + if (ddrval != DD_OK) + goto error; + + + ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + //In diese Surface sollen die Bausteine geladen werden + lpDD->CreateSurface(&ddsd, &lpDDSMisc, NULL); + lpDDSMisc = DDLoadBitmap(lpDD, Misc, 0, 0); + DDSetColorKey(lpDDSMisc, RGB(255, 0, 255)); + //In diese Surface sollen das Panel geladen werden + lpDD->CreateSurface(&ddsd, &lpDDSPanel, NULL); + lpDDSPanel = DDLoadBitmap(lpDD, Panel, 0, 0); + DDSetColorKey(lpDDSPanel, RGB(255, 0, 255)); + //In diese Surface sollen die Animation der Figur gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSGuyAni, NULL); + lpDDSGuyAni = DDLoadBitmap(lpDD, GuyAni, 0, 0); + DDSetColorKey(lpDDSGuyAni, RGB(255, 0, 255)); + //In diese Surface sollen die Landschaftsanimationen gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSAnimation, NULL); + lpDDSAnimation = DDLoadBitmap(lpDD, Animation, 0, 0); + DDSetColorKey(lpDDSAnimation, RGB(255, 0, 255)); + //In diese Surface soll die Schrift1 gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSSchrift1, NULL); + lpDDSSchrift1 = DDLoadBitmap(lpDD, Schrift1, 0, 0); + DDSetColorKey(lpDDSSchrift1, RGB(255, 0, 255)); + //In diese Surface soll die Schrift2 gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSSchrift2, NULL); + lpDDSSchrift2 = DDLoadBitmap(lpDD, Schrift2, 0, 0); + DDSetColorKey(lpDDSSchrift2, RGB(255, 0, 255)); + //In diese Surface soll das Papier gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSPapier, NULL); + lpDDSPapier = DDLoadBitmap(lpDD, Papier, 0, 0); + DDSetColorKey(lpDDSPapier, RGB(255, 0, 255)); + //In diese Surface solln die Bäume gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSBaum, NULL); + lpDDSBaum = DDLoadBitmap(lpDD, Baum, 0, 0); + DDSetColorKey(lpDDSBaum, RGB(255, 0, 255)); + //In diese Surface solln die Cursor gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSCursor, NULL); + lpDDSCursor = DDLoadBitmap(lpDD, Cursorbmp, 0, 0); + DDSetColorKey(lpDDSCursor, RGB(255, 0, 255)); + //In diese Surface solln die Buttons gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSButtons, NULL); + lpDDSButtons = DDLoadBitmap(lpDD, Buttons, 0, 0); + DDSetColorKey(lpDDSButtons, RGB(255, 0, 255)); + //In diese Surface solln das TextFeld gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSTextFeld, NULL); + lpDDSTextFeld = DDLoadBitmap(lpDD, TextFeld, 0, 0); + DDSetColorKey(lpDDSTextFeld, RGB(255, 0, 255)); + //In diese Surface solln das Inventar gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSInventar, NULL); + lpDDSInventar = DDLoadBitmap(lpDD, Inventarbmp, 0, 0); + DDSetColorKey(lpDDSInventar, RGB(255, 0, 255)); + //In diese Surface solln die Bauwerke gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSBau, NULL); + lpDDSBau = DDLoadBitmap(lpDD, Bau, 0, 0); + DDSetColorKey(lpDDSBau, RGB(255, 0, 255)); + //In diese Surface solln die Credits gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSCredits, NULL); + lpDDSCredits = DDLoadBitmap(lpDD, Credits, 0, 0); + DDSetColorKey(lpDDSCredits, RGB(0, 0, 0)); //Ausnahmsweise schwarz + //In diese Surface solln das Logo gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSLogo, NULL); + lpDDSLogo = DDLoadBitmap(lpDD, Logo, 0, 0); + + + ZeroMemory(&ddsd, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + //In diese Surface soll die MiniMap gespeichert werden + ddsd.dwWidth = 2 * MAXXKACH; + ddsd.dwHeight = 2 * MAXYKACH; + lpDD->CreateSurface(&ddsd, &lpDDSKarte, NULL); + //In diese Surface soll die Landschaft gespeichert werden + ddsd.dwWidth = MAXSCAPEX; + ddsd.dwHeight = MAXSCAPEY; + lpDD->CreateSurface(&ddsd, &lpDDSScape, NULL); + //In diese Surface soll die Schrift gespeichert werden + ddsd.dwWidth = MAXX; + ddsd.dwHeight = MAXY; + lpDD->CreateSurface(&ddsd, &lpDDSSchrift, NULL); + DDSetColorKey(lpDDSSchrift, RGB(255, 0, 255)); + //In diese Surface soll die Schatzkarte gespeichert werden + ddsd.dwWidth = SKARTEX; + ddsd.dwHeight = SKARTEY; + lpDD->CreateSurface(&ddsd, &lpDDSSchatzkarte, NULL); + + + ddbltfx.dwSize = sizeof(ddbltfx); + ddpf.dwSize = sizeof(ddpf); + lpDDSSchrift->GetPixelFormat(&ddpf); + + error:;/* + finiObjects(); + MessageBox( hwnd, "DirectDraw Init FAILED", TITLE, MB_OK ); + DestroyWindow( hwnd );*/ + } + + void InitDInput() { - Spielzustand = SZLOGO; - InitStructs(); //Nur zum Wavinitialisieren + DirectInputCreate(Direct::g_hInst, DIRECTINPUT_VERSION, &g_pDI, NULL); //DirectInput + g_pDI->CreateDevice(GUID_SysMouse, &g_pMouse, NULL); //Mousepointer + g_pMouse->SetDataFormat(&c_dfDIMouse); //MausDateninformation einstellen + g_pMouse->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); //Exklusive Maus + + g_pDI->CreateDevice(GUID_SysKeyboard, &g_pKey, NULL); //Keyboard einrichten + g_pKey->SetDataFormat(&c_dfDIKeyboard); //Datenformat auf KeyBoard umschalten + g_pKey->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); //KeyBoard geht nicht exklusive } - while(1) + + void InitDSound() { - Bild++; - Zeitsave = time(nullptr); - if (Zeit+5 < Zeitsave) + HRESULT hr; + WAVEFORMATEX Waveformat; //Zwischenspeicher des Bufferformats + + Soundzustand = 1; //Sound anschalten + + hr = DirectSoundCreate8(NULL, &lpds, NULL); //DirectSound-Objekt machen + if (hr != DD_OK) { - Zeit = Zeitsave; - LastBild = (LastBild+Bild/5)/2; - Bild = 0; - if (LastBild==0) LastBild = 50; - - //BilderproSec ausgeben - /*Textloeschen(TXTFPS); - TextBereich[TXTFPS].Aktiv = true; - sprintf(StdString, "%d", LastBild); - DrawString(StdString,(short)TextBereich[TXTFPS].rcText.left,(short)TextBereich[TXTFPS].rcText.top,1); - */ } - if (Spielzustand == SZLOGO) + Soundzustand = -1; + return; + } + hr = IDirectSound_SetCooperativeLevel(lpds, hwnd, DSSCL_PRIORITY); //Prioritäten setzen + if (hr != DD_OK) { - if (CheckKey()==2) break; //Das Keyboard abfragen - ZeigeLogo(); //Bild auffrischen - + Soundzustand = -1; + return; } - else if ((Spielzustand == SZINTRO) || (Spielzustand == SZGERETTET)) + + //Primary Buffer + ZeroMemory(&dsbdesc, sizeof(DSBUFFERDESC)); + dsbdesc.dwSize = sizeof(DSBUFFERDESC); + dsbdesc.dwFlags = DSBCAPS_PRIMARYBUFFER; + hr = lpds->CreateSoundBuffer(&dsbdesc, &lpdsbPrimary, NULL); + if (hr != DD_OK) { - if (CheckKey()==0) return(0); //Das Keyboard abfragen + Soundzustand = -1; + return; + } - Animationen(); //Animationen weiterschalten - if (!Guy.Aktiv) Event(Guy.Aktion); //Aktionen starten - if (Guy.Pos.x == RouteStart.x) ZeigeIntro(); //Bild auffrischen (if-Abfrage nötig (seltsamerweise)) - + memset(&Waveformat, 0, sizeof(WAVEFORMATEX)); + Waveformat.wFormatTag = WAVE_FORMAT_PCM; + Waveformat.nChannels = 1; //stereo oder mono (1oder2) + Waveformat.nSamplesPerSec = 44100; + Waveformat.wBitsPerSample = 16; + Waveformat.nBlockAlign = Waveformat.wBitsPerSample / 8 * Waveformat.nChannels; + Waveformat.nAvgBytesPerSec = Waveformat.nSamplesPerSec * Waveformat.nBlockAlign; + hr = lpdsbPrimary->SetFormat(&Waveformat); + if (hr != DD_OK) + { + Soundzustand = -1; + return; } - else if (Spielzustand == SZSPIEL) + + } + + void SetAcquire() + { + if (!MouseInit) return; + if (bActive) { - if ((Stunden >= 12) && (Minuten != 0) && (Guy.Aktion != AKTAGENDE)) //Hier ist der Tag zuende - { - if (Guy.Aktion == AKAUSSCHAU) Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - Guy.Aktiv = false; - Guy.AkNummer = 0; - Guy.Aktion = AKTAGENDE; - } - - CheckSpzButton(); //Die Spezialknöpfe umschalten - if (MouseAktiv) CheckMouse(); //Den MouseZustand abchecken - if (CheckKey()==0) return(0); //Das Keyboard abfragen - LimitScroll(); //Das Scrollen an die Grenzen der Landschaft anpassen - Animationen(); //Die Animationsphasen weiterschalten - if (!Guy.Aktiv) Event(Guy.Aktion); //Die Aktionen starten - Zeige();//Das Bild zeichnen - if (Spielbeenden) return(0); - + g_pMouse->Acquire(); + if (g_pKey)g_pKey->Acquire(); + + } + else + { + g_pMouse->Unacquire(); + if (g_pKey)g_pKey->Unacquire(); + } - else if (Spielzustand == SZABSPANN) + } +} + +namespace Sound +{ + void LoadSound(short Sound) + { + HMMIO DateiHandle; // Handle der geöffneten Datei + MMCKINFO parent, // DateiInfos + child; // DateiInfos + WAVEFORMATEX wfmtx; // wave format structure + + UCHAR *snd_buffer, // SoundZwischenspeicher + *audio_ptr_1 = NULL, // Pointer1 + *audio_ptr_2 = NULL; // Pointer2 + + DWORD audio_length_1 = 0, // Länge des 1.Buffer + audio_length_2 = 0; // Länge des 2.Buffer + + if (Soundzustand == -1) return; //Wenn keine Soundkarte vorhanden raus... + + // Dateiinfo initialisieren + parent.ckid = (FOURCC)0; + parent.cksize = 0; + parent.fccType = (FOURCC)0; + parent.dwDataOffset = 0; + parent.dwFlags = 0; + child = parent; + + // Datei öffnen + DateiHandle = mmioOpen(Wav[Sound].Dateiname, NULL, MMIO_READ | MMIO_ALLOCBUF); + + // Dateiinfos auslesen + parent.fccType = mmioFOURCC('W', 'A', 'V', 'E'); + mmioDescend(DateiHandle, &parent, NULL, MMIO_FINDRIFF); + child.ckid = mmioFOURCC('f', 'm', 't', ' '); + mmioDescend(DateiHandle, &child, &parent, 0); + mmioRead(DateiHandle, (char *)&wfmtx, sizeof(wfmtx)); + mmioAscend(DateiHandle, &child, 0); + child.ckid = mmioFOURCC('d', 'a', 't', 'a'); + mmioDescend(DateiHandle, &child, &parent, MMIO_FINDCHUNK); + + //Speicher für die Zwischenspeicherung besorgen + snd_buffer = (UCHAR *)malloc(child.cksize); + + //Die Wav-Daten rüberkopieren + mmioRead(DateiHandle, (char *)snd_buffer, child.cksize); + + // Die Datei schließen + mmioClose(DateiHandle, 0); + + // Den Buffer machen + Direct::dsbdesc.dwSize = sizeof(DSBUFFERDESC); + Direct::dsbdesc.dwFlags = DSBCAPS_STATIC | DSBCAPS_CTRLVOLUME; //Wenn das mixen nicht funktioniert,dass hier reaktivieren + Direct::dsbdesc.dwBufferBytes = child.cksize; + Direct::dsbdesc.lpwfxFormat = &wfmtx; + Direct::lpds->CreateSoundBuffer(&Direct::dsbdesc, &Direct::lpdsbWav[Sound], NULL); + + // Buffer locken und Daten reinkopieren und unlocken + Direct::lpdsbWav[Sound]->Lock(0, child.cksize, + (void **)&audio_ptr_1, + &audio_length_1, + (void **)&audio_ptr_2, + &audio_length_2, + DSBLOCK_FROMWRITECURSOR); + + memcpy(audio_ptr_1, snd_buffer, audio_length_1); + memcpy(audio_ptr_2, (snd_buffer + audio_length_1), audio_length_2); + Direct::lpdsbWav[Sound]->Unlock(audio_ptr_1, audio_length_1, audio_ptr_2, audio_length_2); + + // Den ZwischenSpeicherfreigeben + free(snd_buffer); + + //Die Standardlautstärke festlegen + Direct::lpdsbWav[Sound]->SetVolume((long)(-10000 + 100 * Wav[Sound].Volume)); + } + + void PlaySound(short Sound, short Volume) + { + short z; + + if ((Sound == 0) || (Soundzustand <= 0)) return; + + z = -10000 + 100 * Wav[Sound].Volume; + Direct::lpdsbWav[Sound]->SetVolume((long)(-10000 + (10000 + z)*Volume / 100)); + if (Wav[Sound].Loop) Direct::lpdsbWav[Sound]->Play(NULL, NULL, DSBPLAY_LOOPING); + else Direct::lpdsbWav[Sound]->Play(NULL, NULL, NULL); + } + + void StopSound(short Sound) + { + if ((Sound == 0) || (Soundzustand <= 0)) return; + Direct::lpdsbWav[Sound]->Stop(); + } +} + +namespace Game +{ + void SaveGame() + { + short i; + + ofstream ofs("save.dat", ios::binary); + if (!ofs) return; + + ofs.write((char*)Scape, sizeof(Scape)); + ofs.write((char*)&Guy, sizeof(Guy)); + ofs.write((char*)&BootsFahrt, sizeof(BootsFahrt)); + ofs.write((char*)&Camera, sizeof(Camera)); + ofs.write((char*)&Chance, sizeof(Chance)); + ofs.write((char*)&Gitter, sizeof(Gitter)); + ofs.write((char*)&HauptMenue, sizeof(HauptMenue)); + ofs.write((char*)&LAnimation, sizeof(LAnimation)); + ofs.write((char*)&Minuten, sizeof(Minuten)); + ofs.write((char*)&ScapeGrenze, sizeof(ScapeGrenze)); + ofs.write((char*)&SchatzPos, sizeof(SchatzPos)); + ofs.write((char*)&Spielzustand, sizeof(Spielzustand)); + ofs.write((char*)&Stunden, sizeof(Stunden)); + ofs.write((char*)&Tag, sizeof(Tag)); + ofs.write((char*)TextBereich, sizeof(TextBereich)); + ofs.write((char*)&SchatzGef, sizeof(SchatzGef)); + + for (i = 0; iBlt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); + Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 255); + Direct::lpDDSSchrift->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); + + //Landschaft erzeugen + + DrawString("Erschaffe Landschaft...", 5, 5, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); + Compute(200, 600); + + DrawString("Ueberflute Land...", 5, 35, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); + Meer(); + + DrawString("Lege Fluss fest...", 5, 65, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); + Fluss(); + CalcKoor(); + + DrawString("Pflanze Baeume...", 5, 95, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); + Baeume(30); + + Piratenwrack(); + + //Guy Position + Guy.Pos.x = 1; + Guy.Pos.y = MAXYKACH / 2; + Guy.PosScreen.x = + (Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2; + Guy.PosScreen.y = + (Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2; + + Camera.x = Guy.PosScreen.x - rcGesamt.right / 2; + Camera.y = Guy.PosScreen.y - rcGesamt.bottom / 2; + + Chance = 0; + + BootsFahrt = false; + if (!BootsFahrt) ChangeBootsFahrt(); + + Tag = 1; Stunden = 0; Minuten = 0; + + Spielzustand = SZINTRO; + Guy.Aktiv = false; + Guy.Zustand = GUYSCHIFF; + Guy.AkNummer = 0; + Guy.Aktion = AKINTRO; + } + + //SchriftSurface löschen + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 255); + Direct::lpDDSSchrift->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); + + BOOL Anitmp = LAnimation; + bool Entdeckttmp[MAXXKACH][MAXYKACH]; + + LAnimation = false; + //Schatzvergraben und Schatzkarte malen + for (y = 0; y= 12) && (Minuten != 0) && (Guy.Aktion != AKTAGENDE)) //Hier ist der Tag zuende + { + if (Guy.Aktion == AKAUSSCHAU) Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + Guy.Aktiv = false; + Guy.AkNummer = 0; + Guy.Aktion = AKTAGENDE; + } + + CheckSpzButton(); //Die Spezialknöpfe umschalten + if (MouseAktiv) CheckMouse(); //Den MouseZustand abchecken + if (CheckKey() == 0) return(0); //Das Keyboard abfragen + LimitScroll(); //Das Scrollen an die Grenzen der Landschaft anpassen + Animationen(); //Die Animationsphasen weiterschalten + if (!Guy.Aktiv) Event(Guy.Aktion); //Die Aktionen starten + Zeige();//Das Bild zeichnen + if (Spielbeenden) return(0); + + } + else if (Spielzustand == SZABSPANN) + { + if (CheckKey() == 0) return(0); + AbspannCalc(); + ZeigeAbspann(); + } + } + return(1); + } + + long FAR PASCAL WindowProc(HWND hWnd, UINT message, + WPARAM wParam, LPARAM lParam) + { static BYTE phase = 0; - - switch( message ) - { - case WM_ACTIVATEAPP: - bActive = wParam; - SetAcquire(); - break; - - case WM_ACTIVATE: // sent when window changes active state - bActive=wParam; - SetAcquire(); - break; - - case WM_CREATE: - break; - case WM_TIMER: - if (Refresh()==0) PostMessage(hwnd, WM_DESTROY,0,0); - break; - case WM_DESTROY: - finiObjects(); - PostQuitMessage( 0 ); - break; - } - return DefWindowProc(hWnd, message, wParam, lParam); + switch (message) + { + case WM_ACTIVATEAPP: + bActive = wParam; + Direct::SetAcquire(); + break; + + case WM_ACTIVATE: // sent when window changes active state + bActive = wParam; + Direct::SetAcquire(); + break; -} /* WindowProc */ + case WM_CREATE: + break; + case WM_TIMER: + if (Refresh() == 0) PostMessage(hwnd, WM_DESTROY, 0, 0); + break; + case WM_DESTROY: + Direct::finiObjects(); + PostQuitMessage(0); + break; + } -/* - * doInit - do work required for every instance of the application: - * create the window, initialize data - */ -static BOOL doInit( HINSTANCE hInstance, int nCmdShow ) -{ - - WNDCLASS wc; - - /* - * set up and register window class - */ - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = WindowProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION ); - wc.hCursor = LoadCursor( NULL, IDC_ARROW ); - wc.hbrBackground = NULL; - wc.lpszMenuName = NAME; - wc.lpszClassName = NAME; - RegisterClass( &wc ); - - /* - * create a window - */ - hwnd = CreateWindowEx( - WS_EX_TOPMOST, - NAME, - TITLE, - WS_POPUP, - 0, - 0, - GetSystemMetrics(SM_CXSCREEN), - GetSystemMetrics(SM_CYSCREEN), - NULL, - NULL, - hInstance, - NULL ); - - if( !hwnd ) - { - return FALSE; - } - - InitDInput(); - MouseInit = true; - - ShowWindow( hwnd, nCmdShow ); - UpdateWindow( hwnd ); - - InitDDraw(); - InitDSound(); - - SetTimer( hwnd, 0, 1000, NULL ); //Provisorisch - srand( (unsigned)time(NULL)); //Random initialisieren - return TRUE; - -} /* doInit */ + return DefWindowProc(hWnd, message, wParam, lParam); + + } /* WindowProc */ + + /* + * doInit - do work required for every instance of the application: + * create the window, initialize data + */ + static BOOL doInit(HINSTANCE hInstance, int nCmdShow) + { + + WNDCLASS wc; + + /* + * set up and register window class + */ + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = WindowProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = NULL; + wc.lpszMenuName = NAME; + wc.lpszClassName = NAME; + RegisterClass(&wc); + + /* + * create a window + */ + hwnd = CreateWindowEx( + WS_EX_TOPMOST, + NAME, + TITLE, + WS_POPUP, + 0, + 0, + GetSystemMetrics(SM_CXSCREEN), + GetSystemMetrics(SM_CYSCREEN), + NULL, + NULL, + hInstance, + NULL); + + if (!hwnd) + { + return FALSE; + } + + Direct::InitDInput(); + Direct::MouseInit = true; + + ShowWindow(hwnd, nCmdShow); + UpdateWindow(hwnd); + + Direct::InitDDraw(); + Direct::InitDSound(); + + SetTimer(hwnd, 0, 1000, NULL); //Provisorisch + srand((unsigned)time(NULL)); //Random initialisieren + return TRUE; + + } /* doInit */ +} /* - * WinMain - initialization, message loop - */ -int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPSTR lpCmdLine, int nCmdShow) +* WinMain - initialization, message loop +*/ +int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPSTR lpCmdLine, int nCmdShow) { - MSG msg; + MSG msg; - lpCmdLine = lpCmdLine; - hPrevInstance = hPrevInstance; - g_hInst = hInstance; - if( !doInit( hInstance, nCmdShow ) ) - { - return FALSE; - } + lpCmdLine = lpCmdLine; + hPrevInstance = hPrevInstance; + Direct::g_hInst = hInstance; + if (!Application::doInit(hInstance, nCmdShow)) + { + return FALSE; + } - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); } - return msg.wParam; + return msg.wParam; } /* WinMain */ From 950dc8d68cb89b776c8be1bff8fb33c51d9de906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Tue, 13 Jan 2015 18:03:56 +0100 Subject: [PATCH 2/6] Split up functions into possible namespace classes and wrote the first iteration of the Application class. --- Action.cpp | 2207 ++++++++ Action.hpp | 75 + Application.cpp | 321 ++ Application.hpp | 41 + Direct.cpp | 558 ++ Direct.hpp | 35 + Game.cpp | 2454 +++++++++ Game.hpp | 12 + Landscape.cpp | 10517 ------------------------------------ Landscape.vcxproj | 358 +- Landscape.vcxproj.filters | 163 + Math.cpp | 1245 +++++ Math.hpp | 20 + Renderer.cpp | 1153 ++++ Renderer.hpp | 30 + Routing.cpp | 295 + Routing.hpp | 14 + Sound.cpp | 99 + Sound.hpp | 11 + World.cpp | 1526 ++++++ World.hpp | 26 + constants.hpp | 275 + ddutil.cpp | 40 +- extern.hpp | 118 + globals.cpp | 206 + headers.hpp | 22 + main.cpp | 8 + types.hpp | 89 + 28 files changed, 11214 insertions(+), 10704 deletions(-) create mode 100644 Action.cpp create mode 100644 Action.hpp create mode 100644 Application.cpp create mode 100644 Application.hpp create mode 100644 Direct.cpp create mode 100644 Direct.hpp create mode 100644 Game.cpp create mode 100644 Game.hpp delete mode 100644 Landscape.cpp create mode 100644 Landscape.vcxproj.filters create mode 100644 Math.cpp create mode 100644 Math.hpp create mode 100644 Renderer.cpp create mode 100644 Renderer.hpp create mode 100644 Routing.cpp create mode 100644 Routing.hpp create mode 100644 Sound.cpp create mode 100644 Sound.hpp create mode 100644 World.cpp create mode 100644 World.hpp create mode 100644 constants.hpp create mode 100644 extern.hpp create mode 100644 globals.cpp create mode 100644 headers.hpp create mode 100644 main.cpp create mode 100644 types.hpp diff --git a/Action.cpp b/Action.cpp new file mode 100644 index 0000000..584769c --- /dev/null +++ b/Action.cpp @@ -0,0 +1,2207 @@ +#include "Action.hpp" + +#include "types.hpp" + +#include "Game.hpp" +#include "Renderer.hpp" +#include "Routing.hpp" +#include "Sound.hpp" +#include "World.hpp" + +namespace Action +{ + void intro() + { + short x; + + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + // Intro Route herstellen + Guy.Aktiv = true; + RoutePunkt = -1; + Steps = 0; + Step = 0; + RouteStart.x = Guy.Pos.x; + RouteStart.y = Guy.Pos.y; + RouteZiel.y = Guy.Pos.y; + for (x = Guy.Pos.x; x 10) Game::SaveGame(); + Spielzustand = SZABSPANN; + } + Frage = -1; + break; + } + } + + void death() + { + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTWARTEN; + else Guy.Zustand = GUYWARTEN; + PapierText = Renderer::DrawText(TOD, TXTPAPIER, 1); + break; + case 2: + if (!BootsFahrt) + { + Guy.Aktiv = true; + Guy.Zustand = GUYHINLEGEN; + } + break; + case 3: + Guy.Aktiv = true; + Nacht = false; + Renderer::Fade(100, 100, 100); + if (BootsFahrt) Guy.Zustand = GUYBOOTTOD; + else Guy.Zustand = GUYTOD; + break; + case 4: + Guy.Aktiv = true; + Nacht = true; + Guy.Zustand = GUYWARTEN; + PapierText = Renderer::DrawText(TAGNEU, TXTPAPIER, 1); + break; + case 5: + Nacht = false; + if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; + else Guy.Zustand = GUYLINKS; + Guy.Aktion = Action::NOTHING; + if (Frage == 2) + { + Spielzustand = SZABSPANN; + } + else Game::NeuesSpiel(false); + Frage = -1; + break; + } + } + + void cancel() + { + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x = Guy.PosScreen.x; + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y = Guy.PosScreen.y; + + Routing::ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2), + ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); + break; + case 2: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void destroy() + { + short i; // Um sich kurz das Objekt zu merken + + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite + 4, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe); + break; + case 2: case 4: + Guy.Aktiv = true; + Guy.Zustand = GUYFAELLEN; + World::AddResource(WASSER, -1); + World::AddResource(NAHRUNG, -1); + World::AddTime(0, 5); + break; + case 3: case 5: + Guy.Aktiv = true; + Guy.Zustand = GUYSCHLAGEN; + World::AddResource(WASSER, -1); + World::AddResource(NAHRUNG, -1); + World::AddTime(0, 5); + break; + case 6: + if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS) Chance -= 0.1f; + i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt; + if ((i >= HAUS1) && (i <= HAUS3)) Scape[Guy.Pos.x][Guy.Pos.y].Objekt = BAUMGROSS; + else + { + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = 0; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = 0; + Scape[Guy.Pos.x][Guy.Pos.y].Phase = -1; + } + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + if (i == ROHR) World::FillRohr(); + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 7: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void search() + { + ZWEID Ziel; + ZWEID Erg; + short i; + + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + while (1) + { + Ziel.x = Scape[Guy.Pos.x][Guy.Pos.y].xScreen + rand() % KXPIXEL; + Ziel.y = Scape[Guy.Pos.x][Guy.Pos.y].yScreen + rand() % KYPIXEL; + Erg = Renderer::GetKachel(Ziel.x, Ziel.y); + if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) break; // Wenn das gefundene Ziel in der Kachel, dann fertig + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: case 3: case 5: case 7: + if (BootsFahrt) + { + if (Guy.AkNummer == 1) + { + Guy.Aktiv = true; + Guy.PosScreen.y -= 2; + Guy.Zustand = GUYTAUCHEN1; + Sound::PlaySound(WAVPLATSCH, 100); + } + } + else Routing::ShortRoute(Ziel.x, Ziel.y); + break; + case 2: case 4: case 6: case 8: + Guy.Aktiv = true; + if (BootsFahrt) + { + if (Guy.AkNummer == 2) + { + Guy.PosScreen.y += 5; + } + Guy.Zustand = GUYTAUCHEN2; + } + else Guy.Zustand = GUYSUCHEN; + World::AddTime(0, 4); + break; + case 9: + if (BootsFahrt) + { + Guy.Aktiv = true; + Guy.Zustand = GUYTAUCHEN3; + Sound::PlaySound(WAVPLATSCH, 100); + } + break; + case 10: + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 11: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; + //Auf Strand und Fluss + if ((Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) || + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6))) + { + + if (Guy.Inventar[ROHSTEIN] < 10) + { + PapierText = Renderer::DrawText(ROHSTEINGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHSTEIN] += 3; + if (Guy.Inventar[ROHSTEIN] > 10) Guy.Inventar[ROHSTEIN] = 10; + } + else PapierText = Renderer::DrawText(ROHSTEINZUVIEL, TXTPAPIER, 1); + + } + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BUSCH) + { + i = rand() % 2; + switch (i) + { + case 0: + if (Guy.Inventar[ROHAST] < 10) + { + PapierText = Renderer::DrawText(ROHASTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHAST]++; + } + else PapierText = Renderer::DrawText(ROHASTZUVIEL, TXTPAPIER, 1); + break; + case 1: + if (Guy.Inventar[ROHBLATT] < 10) + { + PapierText = Renderer::DrawText(ROHBLATTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHBLATT]++; + } + else PapierText = Renderer::DrawText(ROHBLATTZUVIEL, TXTPAPIER, 1); + break; + } + } + else if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUMGROSS)) || + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) + { + i = rand() % 3; + switch (i) + { + case 0: + if (Guy.Inventar[ROHAST] < 10) + { + PapierText = Renderer::DrawText(ROHASTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHAST]++; + } + else PapierText = Renderer::DrawText(ROHASTZUVIEL, TXTPAPIER, 1); + break; + case 1: + if (Guy.Inventar[ROHBLATT] < 10) + { + PapierText = Renderer::DrawText(ROHBLATTGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHBLATT]++; + } + else PapierText = Renderer::DrawText(ROHBLATTZUVIEL, TXTPAPIER, 1); + break; + case 2: + if (Guy.Inventar[ROHLIANE] < 10) + { + PapierText = Renderer::DrawText(ROHLIANEGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHLIANE]++; + } + else PapierText = Renderer::DrawText(ROHLIANEZUVIEL, TXTPAPIER, 1); + break; + } + } + else if (BootsFahrt) + { + if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK) + { + if (Guy.Inventar[ROHFERNROHR] == 0) + { + PapierText = Renderer::DrawText(FERNROHRGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHFERNROHR] = 1; + Bmp[BUTTAUSSCHAU].Phase = 0; + Guy.Inventar[ROHHAMMER] = 1; + Bmp[BUTTHAUS1].Phase = 0; + Bmp[BUTTHAUS2].Phase = 0; + Bmp[BUTTHAUS3].Phase = 0; + } + else PapierText = Renderer::DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); + } + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK2) + { + if (Guy.Inventar[ROHKARTE] == 0) + { + PapierText = Renderer::DrawText(KARTEGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHKARTE] = 1; + Bmp[BUTTSCHATZKARTE].Phase = 0; + Guy.Inventar[ROHSCHAUFEL] = 1; + Bmp[BUTTSCHATZ].Phase = 0; + } + else PapierText = Renderer::DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); + } + else PapierText = Renderer::DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); + } + else + { + PapierText = Renderer::DrawText(NICHTSGEFUNDEN, TXTPAPIER, 1); + } + break; + case 12: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void eat() + { + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 2); + break; + case 2: case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYESSEN; + World::AddResource(NAHRUNG, 15); + World::AddTime(0, 2); + break; + case 4: + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 5: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void slingshot() + { + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 - 14, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 9); + break; + case 2: + Guy.Aktiv = true; + Guy.Zustand = GUYSCHLEUDER; + Guy.PosScreen.x += 5; + World::AddTime(0, 2); + Sound::PlaySound(WAVSCHLEUDER, 100); + break; + case 3: + Guy.PosScreen.x -= 5; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 + 6, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 2); + break; + case 4: + Guy.Aktiv = true; + Guy.Zustand = GUYSUCHEN; + World::AddResource(NAHRUNG, 5); + World::AddTime(0, 20); + break; + case 5: + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 6: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void drink() + { + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Routing::ShortRoute(Guy.PosScreen.x - 4, + Guy.PosScreen.y - 2); + break; + case 2: case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYTRINKEN; + World::AddResource(WASSER, 30); + World::AddTime(0, 3); + break; + case 4: + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 5: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void log() + { + short i; + + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 + 9, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 3); + break; + case 2: case 3: case 4: case 5: case 6: + Guy.Aktiv = true; + Guy.Zustand = GUYFAELLEN; + World::AddResource(WASSER, -2); + World::AddResource(NAHRUNG, -2); + World::AddTime(0, 10); + break; + case 7: + Guy.Aktiv = true; + Guy.Zustand = GUYWARTEN; + i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt + (BAUM1DOWN - BAUM1); + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = i; + Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x -= 17; + Sound::PlaySound(WAVBAUMFAELLT, 100); + break; + case 8: + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 9: + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; + Guy.Inventar[ROHSTAMM]++; + if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; + Guy.Inventar[ROHAST] += 5; + if (Guy.Inventar[ROHAST] > 10) Guy.Inventar[ROHAST] = 10; + Guy.Inventar[ROHBLATT] += 5; + if (Guy.Inventar[ROHBLATT] > 10) Guy.Inventar[ROHBLATT] = 10; + Guy.Inventar[ROHLIANE] += 2; + if (Guy.Inventar[ROHLIANE] > 10) Guy.Inventar[ROHLIANE] = 10; + Guy.Aktion = Action::NOTHING; + break; + } + } + + void fish() + { + + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 35, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + case FLUSS2: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 19, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + case FLUSS3: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 22, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 20); + break; + case FLUSS4: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 34, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 23); + break; + case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 34, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 33); + break; + case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 20, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 33); + break; + case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 22, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 32, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); + break; + } + break; + case 2: + Guy.Aktiv = true; + Sound::PlaySound(WAVANGEL, 100); + if (BootsFahrt) + { + Guy.PosScreen.y -= 2; + Guy.Zustand = GUYBOOTANGELN1; + } + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + Guy.Zustand = GUYANGELN1LINKS; + break; + case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + Guy.Zustand = GUYANGELN1OBEN; + break; + case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + Guy.Zustand = GUYANGELN1RECHTS; + break; + case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + Guy.Zustand = GUYANGELN1UNTEN; + break; + } + break; + case 3: case 4: case 5: case 6: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN2; + + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + Guy.Zustand = GUYANGELN2LINKS; + break; + case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + Guy.Zustand = GUYANGELN2OBEN; + break; + case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + Guy.Zustand = GUYANGELN2RECHTS; + break; + case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + Guy.Zustand = GUYANGELN2UNTEN; + break; + } + Guy.Resource[GESUNDHEIT] += 2; + World::AddTime(0, 20); + break; + case 7: + Guy.Aktiv = true; + if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN3; + + switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) + { + case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: + Guy.Zustand = GUYANGELN3LINKS; + break; + case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: + Guy.Zustand = GUYANGELN3OBEN; + break; + case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: + Guy.Zustand = GUYANGELN3RECHTS; + break; + case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: + Guy.Zustand = GUYANGELN3UNTEN; + break; + } + break; + case 8: + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 9: + Guy.Resource[NAHRUNG] += 20; + Guy.Aktion = Action::NOTHING; + break; + } + } + + void light() + { + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 - 10, + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y + + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 1); + break; + case 2: + Guy.Aktiv = true; + Guy.Zustand = GUYANZUENDEN; + Guy.PosScreen.x += 5; + World::AddTime(0, 1); + break; + case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYWARTEN; + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = FEUER; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[FEUER].rcDes.left; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[FEUER].rcDes.top; + Chance += 2 + 2 * Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + World::AddTime(0, 2); + Guy.PosScreen.x -= 5; + break; + case 4: + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 5: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void lookout() + { + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + } + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Guy.Aktiv = true; + Guy.Zustand = GUYAUSSCHAU; + World::AddTime(0, 40); + Chance += 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + break; + case 2: + Guy.Aktiv = true; + Guy.Zustand = GUYWARTEN; + World::AddTime(0, 40); + break; + case 3: + Guy.Aktiv = true; + Guy.Zustand = GUYAUSSCHAU; + World::AddTime(0, 40); + break; + case 4: + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + break; + case 5: + Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + Guy.Aktion = Action::NOTHING; + break; + } + } + + void treasure() + { + if (Guy.AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; + } + Guy.AkNummer++; + + switch (Guy.AkNummer) + { + case 1: + Guy.PosScreen.x -= 5; + Guy.PosScreen.y += 1; + Guy.Aktiv = true; + Guy.Zustand = GUYSCHAUFELN; + break; + case 2: + World::AddTime(0, 20); + World::AddResource(WASSER, -10); + World::AddResource(NAHRUNG, -10); + Guy.PosScreen.x += 5; + Guy.PosScreen.y -= 1; + Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + if (((Guy.Pos.x == SchatzPos.x) && (Guy.Pos.y == SchatzPos.y)) && + (!SchatzGef)) + { + PapierText = Renderer::DrawText(SCHATZGEFUNDEN, TXTPAPIER, 1); + Guy.Inventar[ROHSTREICHHOLZ] = 1; + Bmp[BUTTANZUENDEN].Phase = 0; + SchatzGef = true; + } + else PapierText = Renderer::DrawText(KEINSCHATZ, TXTPAPIER, 1); + break; + case 3: + Guy.Aktion = Action::NOTHING; + break; + } + } + + void field() + { + short i; + + if (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + for (i = 0; i= BAUM1DOWN) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4DOWN)) + { + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; + Guy.Inventar[ROHSTAMM]++; + if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; + } + + // Je nach Schlafort Zustand verändern + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + World::AddResource(GESUNDHEIT, -5); + if (Guy.Resource[GESUNDHEIT] <= 0) + { + Guy.Aktiv = true; + PapierText = Renderer::DrawText(TAGENDE5, TXTPAPIER, 1); + Guy.AkNummer = 2; + Guy.Aktion = Action::DEATH; + Stunden = 0; + Minuten = 0; + } + else + { + Guy.Aktiv = true; + PapierText = Renderer::DrawText(TAGENDE2, TXTPAPIER, 1); + } + } + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + World::AddResource(GESUNDHEIT, +20); + Guy.Aktiv = true; + PapierText = Renderer::DrawText(TAGENDE4, TXTPAPIER, 1); + } + else if (BootsFahrt) + { + Guy.Aktiv = true; + Guy.Zustand = GUYBOOTWARTEN; + PapierText = Renderer::DrawText(TAGENDE3, TXTPAPIER, 1); + Guy.AkNummer = 2; + Guy.Aktion = Action::DEATH; + Stunden = 0; + Minuten = 0; + } + else + { + World::AddResource(GESUNDHEIT, -20); + if (Guy.Resource[GESUNDHEIT] <= 0) + { + Guy.Aktiv = true; + PapierText = Renderer::DrawText(TAGENDE5, TXTPAPIER, 1); + Guy.AkNummer = 2; + Guy.Aktion = Action::DEATH; + Stunden = 0; + Minuten = 0; + } + else + { + Guy.Aktiv = true; + PapierText = Renderer::DrawText(TAGENDE1, TXTPAPIER, 1); + } + } + break; + case 8: + Renderer::Fade(20, 20, 30); + Nacht = false; + Tag++; + Stunden = 0; + Minuten = 0; + // if (BootsFahrt) Game::NeuesSpiel(true); // Später hier tot!! + + Guy.Aktiv = true; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFZELT; + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFHAUS; + else Guy.Zustand = GUYSCHLAFEN; + break; + case 9: + Renderer::Fade(40, 40, 40); + Stunden = 0; + Minuten = 0; + + Stunden = 0; Minuten = 0; + Guy.Aktiv = true; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFZELT; + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Zustand = GUYSCHLAFHAUS; + else Guy.Zustand = GUYSCHLAFEN; + break; + case 10: + Renderer::Fade(70, 60, 60); + Stunden = 0; + Minuten = 0; + Sound::StopSound(WAVSCHNARCHEN); + Guy.Aktiv = true; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + Guy.PosScreen.x -= 14; + Guy.Zustand = GUYGEHAUSHAUS; + } + else Guy.Zustand = GUYAUFSTEHEN; + break; + case 11: + Renderer::Fade(90, 80, 80); + Stunden = 0; + Minuten = 0; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + { + Guy.Aktiv = true; + Guy.Zustand = GUYKLETTERN2; + } + break; + case 12: + Renderer::Fade(100, 100, 100); + Stunden = 0; + Minuten = 0; + Guy.Zustand = GUYLINKS; + Guy.Aktion = Action::NOTHING; + if (Guy.Resource[GESUNDHEIT] > 10) Game::SaveGame(); + break; + } + } + + void rescued() + { + ZWEID Erg; + short x; + + Guy.AkNummer++; + switch (Guy.AkNummer) + { + case 1: + Erg = Renderer::GetKachel(Guy.PosAlt.x, Guy.PosAlt.y); + if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) Routing::ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); + else if (RoutePunkt % 2 == 0) Routing::ShortRoute(RouteKoor[RoutePunkt].x, RouteKoor[RoutePunkt].y); //Nur bis zur Mitte der aktuellen Kacheln laufen + else Routing::ShortRoute(RouteKoor[RoutePunkt + 1].x, RouteKoor[RoutePunkt + 1].y); + TwoClicks = -1; // Keine Ahnung warum ich das hier machen muß + break; + case 2: + Guy.Aktiv = true; + Guy.Zustand = GUYWARTEN; + PapierText = Renderer::DrawText(GERETTET, TXTPAPIER, 1); + break; + case 3: + if (Frage == 2) + { + Guy.Aktion = Action::NOTHING; + Frage = -1; + break; + } + Spielzustand = SZGERETTET; + Frage = -1; + break; + case 4: + // Route herstellen + Guy.Aktiv = true; + Guy.Zustand = GUYLINKS; + RoutePunkt = -1; + Steps = 0; + Step = 0; + RouteStart.x = Guy.Pos.x; + RouteStart.y = Guy.Pos.y; + RouteZiel.y = Guy.Pos.y; + for (x = MAXXKACH - 1; x>1; x--) // Position des Rettungsschiffs festlegen + { + if (Scape[x][Guy.Pos.y].Art != 1) break; + RouteZiel.x = x + 1; + } + // Schiff hinbauen + Scape[RouteZiel.x][RouteZiel.y].Phase = 0; + Scape[RouteZiel.x][RouteZiel.y].Objekt = GUYSCHIFF; + Scape[RouteZiel.x][RouteZiel.y].ObPos.x = 10; + Scape[RouteZiel.x][RouteZiel.y].ObPos.y = 10; + RouteZiel.x -= 2; + Routing::FindTheWay(); + Guy.Zustand = GUYLINKS; + break; + case 5: + Guy.Zustand = GUYLINKS; + Routing::ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].x) / 2), + ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); + break; + case 6: + Guy.Pos.x += 2; + Guy.Zustand = GUYSCHWIMMEN; + Routing::ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2), + ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); + break; + case 7: + Guy.PosScreen.y -= 10; + if (!BootsFahrt) World::ChangeBootsFahrt(); + Guy.Aktiv = true; + Guy.Zustand = GUYSCHIFF; + RoutePunkt = -1; + Steps = 0; + Step = 0; + RouteStart.x = Guy.Pos.x; + RouteStart.y = Guy.Pos.y; + RouteZiel.y = Guy.Pos.y; + RouteZiel.x = MAXXKACH - 2; + Routing::FindTheWay(); + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[MEERWELLEN].rcDes.left; + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[MEERWELLEN].rcDes.top; + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = MEERWELLEN; + break; + case 8: + Guy.Aktiv = true; + Guy.Zustand = GUYSCHIFF; + break; + case 9: + Guy.Aktion = Action::NOTHING; + Guy.Zustand = GUYLINKS; + Spielzustand = SZABSPANN; + break; + } + } + + void tent() + { + short i; + + if (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer == 0) + { + Guy.PosAlt = Guy.PosScreen; // Die Originalposition merken + Scape[Guy.Pos.x][Guy.Pos.y].Objekt = ZELT; + for (i = 0; i +#include +#include + +Application::Application(const std::string& name, HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +: m_name(name) +, m_hInstance(hInstance) +, m_hPrevInstance(hPrevInstance) +, m_lpCmdLine(lpCmdLine) +, m_nCmdShow(nCmdShow) +{ + g_hInst = m_hInstance; + + if (!create_window()) + throw std::runtime_error("Failed to create a valid window."); + + hwnd = m_hWnd; + + Direct::InitDInput(); + MouseInit = true; + + ShowWindow(m_hWnd, m_nCmdShow); + UpdateWindow(m_hWnd); + + Direct::InitDDraw(); + Direct::InitDSound(); + + SetTimer(hwnd, 0, 1000, nullptr); // Provisorisch + srand((unsigned)time(nullptr)); // Random initialisieren +} + +LRESULT CALLBACK Application::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + Application* pApp = nullptr; + + if (uMsg == WM_NCCREATE) + { + // Get the pointer to the window from lpCreateParams which was set in create_window + SetWindowLong(hWnd, GWL_USERDATA, (long)((LPCREATESTRUCT(lParam))->lpCreateParams)); + } + + // Get the pointer to the application + pApp = Application::ptr(hWnd); + + // If we have the pointer, go to the message handler of the window else, use DefWindowProc + if (pApp) + return pApp->process_events(hWnd, uMsg, wParam, lParam); + else + return DefWindowProc(hWnd, uMsg, wParam, lParam); +} + +LRESULT CALLBACK Application::process_events(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + m_hWnd = hWnd; + + static BYTE phase = 0; + + switch (uMsg) + { + case WM_ACTIVATEAPP: + bActive = wParam; + Direct::SetAcquire(); + break; + + case WM_ACTIVATE: // Sent when window changes active state + bActive = wParam; + Direct::SetAcquire(); + break; + + case WM_CREATE: + break; + + case WM_TIMER: + if (Refresh() == 0) + PostMessage(hwnd, WM_DESTROY, 0, 0); + break; + + case WM_QUIT: + case WM_DESTROY: + Direct::finiObjects(); + PostQuitMessage(0); + break; + } + + return DefWindowProc(hWnd, uMsg, wParam, lParam); +} + +bool Application::create_window() +{ + WNDCLASS wc; + + // Set up and register window class + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = &Application::WindowProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = m_hInstance; + wc.hIcon = LoadIcon(m_hInstance, IDI_APPLICATION); + wc.hCursor = LoadCursor(nullptr, IDC_ARROW); + wc.hbrBackground = nullptr; + wc.lpszMenuName = m_name.c_str(); + wc.lpszClassName = m_name.c_str(); + RegisterClass(&wc); + + // Create a window + m_hWnd = CreateWindowEx( + WS_EX_TOPMOST, + m_name.c_str(), + m_name.c_str(), + WS_POPUP, + 0, + 0, + GetSystemMetrics(SM_CXSCREEN), + GetSystemMetrics(SM_CYSCREEN), + nullptr, + nullptr, + m_hInstance, + nullptr); + + return m_hWnd != nullptr; +} + +int Application::run() +{ + while (GetMessage(&m_msg, nullptr, 0, 0)) + { + TranslateMessage(&m_msg); + DispatchMessage(&m_msg); + } + + return m_msg.wParam; +} + +short Application::Refresh() +{ + long Zeitsave; + + if (Spielzustand == SZNICHTS) + { + Spielzustand = SZLOGO; + Game::InitStructs(); // Nur zum Wavinitialisieren + } + while (1) + { + Bild++; + Zeitsave = time(nullptr); + if (Zeit + 5 < Zeitsave) + { + Zeit = Zeitsave; + LastBild = (LastBild + Bild / 5) / 2; + Bild = 0; + if (LastBild == 0) LastBild = 50; + + // BilderproSec ausgeben + /*Textloeschen(TXTFPS); + TextBereich[TXTFPS].Aktiv = true; + std::sprintf(StdString, "%d", LastBild); + DrawString(StdString,(short)TextBereich[TXTFPS].rcText.left,(short)TextBereich[TXTFPS].rcText.top,1); + */ + } + if (Spielzustand == SZLOGO) + { + if (Direct::CheckKey() == 2) break; // Das Keyboard abfragen + Renderer::ZeigeLogo(); //Bild auffrischen + + } + else if ((Spielzustand == SZINTRO) || (Spielzustand == SZGERETTET)) + { + if (Direct::CheckKey() == 0) return(0); // Das Keyboard abfragen + + Math::Animationen(); // Animationen weiterschalten + if (!Guy.Aktiv) Event(Guy.Aktion); // Aktionen starten + if (Guy.Pos.x == RouteStart.x) Renderer::ZeigeIntro(); // Bild auffrischen (if-Abfrage nötig (seltsamerweise)) + + } + else if (Spielzustand == SZSPIEL) + { + if ((Stunden >= 12) && (Minuten != 0) && (Guy.Aktion != Action::DAY_END)) // Hier ist der Tag zuende + { + if (Guy.Aktion == Action::LOOKOUT) Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; + Guy.Aktiv = false; + Guy.AkNummer = 0; + Guy.Aktion = Action::DAY_END; + } + + World::CheckSpzButton(); // Die Spezialknöpfe umschalten + if (MouseAktiv) Direct::CheckMouse(); // Den MouseZustand abchecken + if (Direct::CheckKey() == 0) return(0); // Das Keyboard abfragen + Renderer::LimitScroll(); // Das Scrollen an die Grenzen der Landschaft anpassen + Math::Animationen(); // Die Animationsphasen weiterschalten + if (!Guy.Aktiv) Event(Guy.Aktion); // Die Aktionen starten + Renderer::Zeige(); // Das Bild zeichnen + if (Spielbeenden) return(0); + + } + else if (Spielzustand == SZABSPANN) + { + if (Direct::CheckKey() == 0) return(0); + Math::AbspannCalc(); + Renderer::ZeigeAbspann(); + } + } + return(1); +} + +void Application::Event(short Eventnr) +{ + if (Eventnr != Action::NOTHING) + { + Routing::MarkRoute(false); + RouteZiel.x = -1; + RouteZiel.y = -1; + } + switch (Eventnr) + { + case Action::NOTHING: + break; + case Action::SEARCH: + Action::search(); + break; + case Action::EAT: + Action::eat(); + break; + case Action::DRINK: + Action::drink(); + break; + case Action::LOG: + Action::log(); + break; + case Action::FIELD: + Action::field(); + break; + case Action::DAY_END: + Action::day_end(); + break; + case Action::RESCUED: + Action::rescued(); + break; + case Action::TENT: + Action::tent(); + break; + case Action::SLEEP: + Action::sleep(); + break; + case Action::CANCEL: + Action::cancel(); + break; + case Action::FISH: + Action::fish(); + break; + case Action::BOAT: + Action::boat(); + break; + case Action::UNDOCK: + Action::undock(); + break; + case Action::DOCK: + Action::dock(); + break; + case Action::PIPE: + Action::pipe(); + break; + case Action::DESTROY: + Action::destroy(); + break; + case Action::SOS: + Action::sos(); + break; + case Action::HOUSE1: + Action::house1(); + break; + case Action::HOUSE2: + Action::house2(); + break; + case Action::HOUSE3: + Action::house3(); + break; + case Action::FIREPLACE: + Action::fireplace(); + break; + case Action::LIGHT: + Action::light(); + break; + case Action::LOOKOUT: + Action::lookout(); + break; + case Action::TREASURE: + Action::treasure(); + break; + case Action::INTRO: + Action::intro(); + break; + case Action::SLINGSHOT: + Action::slingshot(); + break; + case Action::QUIT: + Action::quit(); + break; + case Action::RESTART: + Action::restart(); + break; + case Action::DAY_RESTART: + Action::day_restart(); + break; + case Action::DEATH: + Action::death(); + break; + } +} diff --git a/Application.hpp b/Application.hpp new file mode 100644 index 0000000..50c0d91 --- /dev/null +++ b/Application.hpp @@ -0,0 +1,41 @@ +#pragma once + +#include "headers.hpp" +#include "extern.hpp" + +#include + +class Application +{ +public: + static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + +public: + Application(const std::string& name, HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); + + int run(); + + short Refresh(); + void Event(short Eventnr); + BOOL doInit(); + +private: + LRESULT CALLBACK process_events(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + + bool create_window(); + + // Returns a pointer the application (stored as the WindowLong) + inline static Application *ptr(HWND hWnd) + { + return (Application *)GetWindowLong(hWnd, GWL_USERDATA); + } + +private: + std::string m_name; + MSG m_msg; + HWND m_hWnd; + HINSTANCE m_hInstance; + HINSTANCE m_hPrevInstance; + LPSTR m_lpCmdLine; + int m_nCmdShow; +}; diff --git a/Direct.cpp b/Direct.cpp new file mode 100644 index 0000000..c6aa60a --- /dev/null +++ b/Direct.cpp @@ -0,0 +1,558 @@ +#include "Direct.hpp" + +#include "types.hpp" + +#include "Action.hpp" +#include "Game.hpp" +#include "Math.hpp" +#include "Renderer.hpp" +#include "Sound.hpp" +#include "World.hpp" + +namespace Direct +{ + void InitDDraw() + { + + DDSCAPS2 ddscaps; + HRESULT ddrval; + LPDIRECTDRAW pDD; + + // Create the main DirectDraw object + ddrval = DirectDrawCreate(nullptr, &pDD, nullptr); + if (ddrval != DD_OK) + goto error; + ddrval = pDD->QueryInterface(IID_IDirectDraw4, (LPVOID *)& lpDD); + if (ddrval != DD_OK) + goto error; + + // Get exclusive mode + ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + if (ddrval != DD_OK) + goto error; + + // Set the video mode to 800x600x16 + ddrval = lpDD->SetDisplayMode(MAXX, MAXY, 32, 0, 0); + if (ddrval != DD_OK) + { + switch (ddrval) + { + case DDERR_GENERIC: + case DDERR_INVALIDMODE: + case DDERR_INVALIDOBJECT: + case DDERR_INVALIDPARAMS: + case DDERR_LOCKEDSURFACES: + case DDERR_NOEXCLUSIVEMODE: + case DDERR_SURFACEBUSY: + case DDERR_UNSUPPORTED: + case DDERR_UNSUPPORTEDMODE: {MessageBeep(MB_OK); break; } + case DDERR_WASSTILLDRAWING: + ; + } + + goto error; + } + + ZeroMemory(&ddsd2, sizeof(ddsd2)); + ddsd2.dwSize = sizeof(ddsd2); + + // Create the primary surface with 1 back buffer + ZeroMemory(&ddsd, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | + DDSCAPS_FLIP | + DDSCAPS_COMPLEX; + ddsd.dwBackBufferCount = 1; // Anzahl ?? + ddrval = lpDD->CreateSurface(&ddsd, &lpDDSPrimary, nullptr); + if (ddrval != DD_OK) + goto error; + + // für gamma-ablenden + lpDDSPrimary->QueryInterface(IID_IDirectDrawGammaControl, (void **)&lpDDGammaControl); + lpDDGammaControl->GetGammaRamp(0, &DDGammaOld); + lpDDGammaControl->GetGammaRamp(0, &DDGammaRamp); + + ddscaps.dwCaps = DDSCAPS_BACKBUFFER; + ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack); + + if (ddrval != DD_OK) + goto error; + + + ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + // In diese Surface sollen die Bausteine geladen werden + lpDD->CreateSurface(&ddsd, &lpDDSMisc, nullptr); + lpDDSMisc = DDLoadBitmap(lpDD, Misc, 0, 0); + DDSetColorKey(lpDDSMisc, RGB(255, 0, 255)); + // In diese Surface sollen das Panel geladen werden + lpDD->CreateSurface(&ddsd, &lpDDSPanel, nullptr); + lpDDSPanel = DDLoadBitmap(lpDD, Panel, 0, 0); + DDSetColorKey(lpDDSPanel, RGB(255, 0, 255)); + // In diese Surface sollen die Animation der Figur gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSGuyAni, nullptr); + lpDDSGuyAni = DDLoadBitmap(lpDD, GuyAni, 0, 0); + DDSetColorKey(lpDDSGuyAni, RGB(255, 0, 255)); + // In diese Surface sollen die Landschaftsanimationen gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSAnimation, nullptr); + lpDDSAnimation = DDLoadBitmap(lpDD, Animation, 0, 0); + DDSetColorKey(lpDDSAnimation, RGB(255, 0, 255)); + // In diese Surface soll die Schrift1 gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSSchrift1, nullptr); + lpDDSSchrift1 = DDLoadBitmap(lpDD, Schrift1, 0, 0); + DDSetColorKey(lpDDSSchrift1, RGB(255, 0, 255)); + // In diese Surface soll die Schrift2 gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSSchrift2, nullptr); + lpDDSSchrift2 = DDLoadBitmap(lpDD, Schrift2, 0, 0); + DDSetColorKey(lpDDSSchrift2, RGB(255, 0, 255)); + // In diese Surface soll das Papier gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSPapier, nullptr); + lpDDSPapier = DDLoadBitmap(lpDD, Papier, 0, 0); + DDSetColorKey(lpDDSPapier, RGB(255, 0, 255)); + // In diese Surface solln die Bäume gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSBaum, nullptr); + lpDDSBaum = DDLoadBitmap(lpDD, Baum, 0, 0); + DDSetColorKey(lpDDSBaum, RGB(255, 0, 255)); + // In diese Surface solln die Cursor gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSCursor, nullptr); + lpDDSCursor = DDLoadBitmap(lpDD, Cursorbmp, 0, 0); + DDSetColorKey(lpDDSCursor, RGB(255, 0, 255)); + // In diese Surface solln die Buttons gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSButtons, nullptr); + lpDDSButtons = DDLoadBitmap(lpDD, Buttons, 0, 0); + DDSetColorKey(lpDDSButtons, RGB(255, 0, 255)); + // In diese Surface solln das TextFeld gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSTextFeld, nullptr); + lpDDSTextFeld = DDLoadBitmap(lpDD, TextFeld, 0, 0); + DDSetColorKey(lpDDSTextFeld, RGB(255, 0, 255)); + // In diese Surface solln das Inventar gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSInventar, nullptr); + lpDDSInventar = DDLoadBitmap(lpDD, Inventarbmp, 0, 0); + DDSetColorKey(lpDDSInventar, RGB(255, 0, 255)); + // In diese Surface solln die Bauwerke gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSBau, nullptr); + lpDDSBau = DDLoadBitmap(lpDD, Bau, 0, 0); + DDSetColorKey(lpDDSBau, RGB(255, 0, 255)); + // In diese Surface solln die Credits gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSCredits, nullptr); + lpDDSCredits = DDLoadBitmap(lpDD, Credits, 0, 0); + DDSetColorKey(lpDDSCredits, RGB(0, 0, 0)); //Ausnahmsweise schwarz + // In diese Surface solln das Logo gespeichert werden + lpDD->CreateSurface(&ddsd, &lpDDSLogo, nullptr); + lpDDSLogo = DDLoadBitmap(lpDD, Logo, 0, 0); + + + ZeroMemory(&ddsd, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + // In diese Surface soll die MiniMap gespeichert werden + ddsd.dwWidth = 2 * MAXXKACH; + ddsd.dwHeight = 2 * MAXYKACH; + lpDD->CreateSurface(&ddsd, &lpDDSKarte, nullptr); + // In diese Surface soll die Landschaft gespeichert werden + ddsd.dwWidth = MAXSCAPEX; + ddsd.dwHeight = MAXSCAPEY; + lpDD->CreateSurface(&ddsd, &lpDDSScape, nullptr); + // In diese Surface soll die Schrift gespeichert werden + ddsd.dwWidth = MAXX; + ddsd.dwHeight = MAXY; + lpDD->CreateSurface(&ddsd, &lpDDSSchrift, nullptr); + DDSetColorKey(lpDDSSchrift, RGB(255, 0, 255)); + // In diese Surface soll die Schatzkarte gespeichert werden + ddsd.dwWidth = SKARTEX; + ddsd.dwHeight = SKARTEY; + lpDD->CreateSurface(&ddsd, &lpDDSSchatzkarte, nullptr); + + + ddbltfx.dwSize = sizeof(ddbltfx); + ddpf.dwSize = sizeof(ddpf); + lpDDSSchrift->GetPixelFormat(&ddpf); + + error:; + /* + finiObjects(); + MessageBox( hwnd, "DirectDraw Init FAILED", TITLE, MB_OK ); + DestroyWindow( hwnd ); + */ + } + + void InitDInput() + { + DirectInputCreate(g_hInst, DIRECTINPUT_VERSION, &g_pDI, nullptr); // DirectInput + g_pDI->CreateDevice(GUID_SysMouse, &g_pMouse, nullptr); // Mousepointer + g_pMouse->SetDataFormat(&c_dfDIMouse); // MausDateninformation einstellen + g_pMouse->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); // Exklusive Maus + + g_pDI->CreateDevice(GUID_SysKeyboard, &g_pKey, nullptr); // Keyboard einrichten + g_pKey->SetDataFormat(&c_dfDIKeyboard); // Datenformat auf KeyBoard umschalten + g_pKey->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); // KeyBoard geht nicht exklusive + } + + void InitDSound() + { + HRESULT hr; + WAVEFORMATEX Waveformat; // Zwischenspeicher des Bufferformats + + Soundzustand = 1; // Sound anschalten + + hr = DirectSoundCreate8(nullptr, &lpds, nullptr); // DirectSound-Objekt machen + if (hr != DD_OK) + { + Soundzustand = -1; + return; + } + hr = IDirectSound_SetCooperativeLevel(lpds, hwnd, DSSCL_PRIORITY); // Prioritäten setzen + if (hr != DD_OK) + { + Soundzustand = -1; + return; + } + + // Primary Buffer + ZeroMemory(&dsbdesc, sizeof(DSBUFFERDESC)); + dsbdesc.dwSize = sizeof(DSBUFFERDESC); + dsbdesc.dwFlags = DSBCAPS_PRIMARYBUFFER; + hr = lpds->CreateSoundBuffer(&dsbdesc, &lpdsbPrimary, nullptr); + if (hr != DD_OK) + { + Soundzustand = -1; + return; + } + + memset(&Waveformat, 0, sizeof(WAVEFORMATEX)); + Waveformat.wFormatTag = WAVE_FORMAT_PCM; + Waveformat.nChannels = 1; // stereo oder mono (1 oder 2) + Waveformat.nSamplesPerSec = 44100; + Waveformat.wBitsPerSample = 16; + Waveformat.nBlockAlign = Waveformat.wBitsPerSample / 8 * Waveformat.nChannels; + Waveformat.nAvgBytesPerSec = Waveformat.nSamplesPerSec * Waveformat.nBlockAlign; + hr = lpdsbPrimary->SetFormat(&Waveformat); + if (hr != DD_OK) + { + Soundzustand = -1; + return; + } + } + + void SetAcquire() + { + if (!MouseInit) return; + if (bActive) + { + g_pMouse->Acquire(); + if (g_pKey)g_pKey->Acquire(); + + } + else + { + g_pMouse->Unacquire(); + if (g_pKey)g_pKey->Unacquire(); + + } + } + + void CheckMouse() + { + DIMOUSESTATE dims; // Da werden die Daten der Maus gespeichert + short Button; // Welcher Knopf ist gedrückt worden + short Push; // Knopf gedrückt(1) oder losgelassen(-1) oder gedrückt(0) gehalten + short xDiff, yDiff; // Die Differenz zur vorherigen Position ((Für Scrollen) + + g_pMouse->GetDeviceState(sizeof(DIMOUSESTATE), &dims); + // Mausbewegung + xDiff = MousePosition.x; + MousePosition.x += (short)dims.lX; + xDiff -= MousePosition.x; + if (MousePosition.x < 0) MousePosition.x = 0; + if (MousePosition.x > MAXX - 2) MousePosition.x = MAXX - 2; + yDiff = MousePosition.y; + MousePosition.y += (short)dims.lY; + yDiff -= MousePosition.y; + if (MousePosition.y < 0) MousePosition.y = 0; + if (MousePosition.y > MAXY - 2) MousePosition.y = MAXY - 2; + + if (TwoClicks == -1) + { + if (Guy.Aktiv) + { + if (Math::InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSTOP].rcDes) && + (Bmp[BUTTSTOP].Phase != -1)) CursorTyp = CUPFEIL; + else CursorTyp = CUUHR; + } + else CursorTyp = CUPFEIL; + } + Button = -1; + + if (dims.rgbButtons[0] & 0x80) + { + Button = 0; + if (Button0down) Push = 0; + else + { + Push = 1; + Button0down = true; + } + } + else + { + if (Button0down) + { + Button = 0; + Push = -1; + Button0down = false; + } + } + + + if (dims.rgbButtons[1] & 0x80) + { + Button = 1; + if (Button1down) Push = 0; + else + { + Push = 1; + Button1down = true; + } + } + else + { + if (Button1down) + { + Button = 1; + Push = -1; + Button1down = false; + } + } + + // Wenn ein Text steht, dann bei Mausdruck Text weg + if (PapierText != -1) + { + if (Frage == 0) + { + if (Math::InRect(MousePosition.x, MousePosition.y, Bmp[JA].rcDes)) + { + CursorTyp = CUPFEIL; + if ((Button == 0) && (Push == 1)) + { + Frage = 1; + Renderer::Textloeschen(TXTPAPIER); + PapierText = -1; + Guy.Aktiv = false; + Sound::PlaySound(WAVKLICK2, 100); + } + } + else if (Math::InRect(MousePosition.x, MousePosition.y, Bmp[NEIN].rcDes)) + { + CursorTyp = CUPFEIL; + if ((Button == 0) && (Push == 1)) + { + Frage = 2; + Renderer::Textloeschen(TXTPAPIER); + PapierText = -1; + Guy.Aktiv = false; + Sound::PlaySound(WAVKLICK2, 100); + } + } + else if ((Button == 0) && (Push == 1)) Sound::PlaySound(WAVKLICK, 100); + } + else if ((Button != -1) && (Push == 1)) + { + Renderer::Textloeschen(TXTPAPIER); + PapierText = -1; + Guy.Aktiv = false; + } + return; + + } + + // Animationen und Text löschen (werden dann von den MouseIn.. Sachen neu angestellt + Renderer::Textloeschen(TXTTEXTFELD); + Math::ButtAniAus(); + + // Wenn der Guy aktiv dann linke Mouse-Buttons ignorieren + if ((Guy.Aktiv) && (Button == 0)) + { + if ((Math::InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSTOP].rcDes)) && + (Bmp[BUTTSTOP].Phase != -1)); + else Button = -1; + } + + // die Maus ist in der Spielflaeche -> + if (Math::InRect(MousePosition.x, MousePosition.y, rcSpielflaeche)) + Math::MouseInSpielflaeche(Button, Push, xDiff, yDiff); + // die Maus ist im Panel -> + if (Math::InRect(MousePosition.x, MousePosition.y, rcPanel)) + Math::MouseInPanel(Button, Push); + /* + dims.lX, dims.lY, dims.lZ, + (dims.rgbButtons[0] & 0x80) ? '0' : ' ', + (dims.rgbButtons[1] & 0x80) ? '1' : ' ', + (dims.rgbButtons[2] & 0x80) ? '2' : ' ', + (dims.rgbButtons[3] & 0x80) ? '3' : ' '); + */ + } + + short CheckKey() + { +#define KEYDOWN(name,key) (name[key] & 0x80) + char buffer[256]; + short x; + + g_pKey->GetDeviceState(sizeof(buffer), (LPVOID)&buffer); + + + if (Spielzustand == SZLOGO) + { + if ((KEYDOWN(buffer, DIK_ESCAPE)) || (KEYDOWN(buffer, DIK_RETURN)) || + (KEYDOWN(buffer, DIK_SPACE))) // Logo Abbrechen + { + Sound::StopSound(WAVLOGO); + Game::NeuesSpiel(false); + return(2); + } + } + else if (Spielzustand == SZINTRO) + { + if ((KEYDOWN(buffer, DIK_ESCAPE)) || (KEYDOWN(buffer, DIK_RETURN)) || + (KEYDOWN(buffer, DIK_SPACE))) // Intro Abbrechen + { + Sound::StopSound(WAVSTURM); // Sound hier sofort stoppen + Sound::StopSound(WAVSCHWIMMEN); // Sound hier sofort stoppen + Guy.Aktiv = false; + for (x = Guy.Pos.x; xRelease(); + lpDDSPrimary = nullptr; + } + if (lpDDPal != nullptr) + { + lpDDPal->Release(); + lpDDPal = nullptr; + } + lpDD->Release(); + lpDD = nullptr; + } + } + + void InitDDraw(); // DirectDraw initialisieren + void InitDInput(); // DirectInput initialisieren + void InitDSound(); // DirectSound initialisieren + void SetAcquire(); // Maus aktivieren + void CheckMouse(); // Maus abfragen + short CheckKey(); // Tastatur abfragen + +} \ No newline at end of file diff --git a/Game.cpp b/Game.cpp new file mode 100644 index 0000000..d87f473 --- /dev/null +++ b/Game.cpp @@ -0,0 +1,2454 @@ +#include "Game.hpp" + +#include "Action.hpp" +#include "Direct.hpp" +#include "Math.hpp" +#include "Sound.hpp" +#include "Renderer.hpp" +#include "World.hpp" + +#include +#include + +namespace Game +{ + void SaveGame() + { + short i; + + std::ofstream ofs("save.dat", std::ios::binary); + if (!ofs) return; + + ofs.write((char*)Scape, sizeof(Scape)); + ofs.write((char*)&Guy, sizeof(Guy)); + ofs.write((char*)&BootsFahrt, sizeof(BootsFahrt)); + ofs.write((char*)&Camera, sizeof(Camera)); + ofs.write((char*)&Chance, sizeof(Chance)); + ofs.write((char*)&Gitter, sizeof(Gitter)); + ofs.write((char*)&HauptMenue, sizeof(HauptMenue)); + ofs.write((char*)&LAnimation, sizeof(LAnimation)); + ofs.write((char*)&Minuten, sizeof(Minuten)); + ofs.write((char*)&ScapeGrenze, sizeof(ScapeGrenze)); + ofs.write((char*)&SchatzPos, sizeof(SchatzPos)); + ofs.write((char*)&Spielzustand, sizeof(Spielzustand)); + ofs.write((char*)&Stunden, sizeof(Stunden)); + ofs.write((char*)&Tag, sizeof(Tag)); + ofs.write((char*)TextBereich, sizeof(TextBereich)); + ofs.write((char*)&SchatzGef, sizeof(SchatzGef)); + + for (i = 0; iBlt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + ddbltfx.dwFillColor = Renderer::RGB2DWORD(255, 0, 255); + lpDDSSchrift->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + + // Landschaft erzeugen + + Renderer::DrawString("Erschaffe Landschaft...", 5, 5, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + lpDDSPrimary->Blt(&rcRectdes, lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, nullptr); + World::Compute(200, 600); + + Renderer::DrawString("Ueberflute Land...", 5, 35, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + lpDDSPrimary->Blt(&rcRectdes, lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, nullptr); + World::Meer(); + + Renderer::DrawString("Lege Fluss fest...", 5, 65, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + lpDDSPrimary->Blt(&rcRectdes, lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, nullptr); + World::Fluss(); + Math::CalcKoor(); + + Renderer::DrawString("Pflanze Baeume...", 5, 95, 2); + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + lpDDSPrimary->Blt(&rcRectdes, lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, nullptr); + World::Baeume(30); + + World::Piratenwrack(); + + // Guy Position + Guy.Pos.x = 1; + Guy.Pos.y = MAXYKACH / 2; + Guy.PosScreen.x = + (Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + + Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2; + Guy.PosScreen.y = + (Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + + Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2; + + Camera.x = Guy.PosScreen.x - rcGesamt.right / 2; + Camera.y = Guy.PosScreen.y - rcGesamt.bottom / 2; + + Chance = 0; + + BootsFahrt = false; + if (!BootsFahrt) World::ChangeBootsFahrt(); + + Tag = 1; Stunden = 0; Minuten = 0; + + Spielzustand = SZINTRO; + Guy.Aktiv = false; + Guy.Zustand = GUYSCHIFF; + Guy.AkNummer = 0; + Guy.Aktion = Action::INTRO; + } + + // SchriftSurface löschen + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + ddbltfx.dwFillColor = Renderer::RGB2DWORD(255, 0, 255); + lpDDSSchrift->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + + BOOL Anitmp = LAnimation; + bool Entdeckttmp[MAXXKACH][MAXYKACH]; + + LAnimation = false; + // Schatzvergraben und Schatzkarte malen + for (y = 0; y -#include -#include -#include -#include -#include -#include -#include -#include //Fürs Random -#include -#include - -#include -#include -#include - -using namespace std; - -#include "ddutil.h" -#include "resource.h" - - -//Deklarationen - -namespace Direct -{ - void InitDDraw(); // DirectDraw initialisieren - void InitDInput(); // DirectInput initialisieren - void InitDSound(); // DirectSound initialisieren - void SetAcquire(); // Maus aktivieren - - // DirectDraw - LPDIRECTDRAW4 lpDD = NULL; // DirectDraw object - LPDIRECTDRAWSURFACE4 lpDDSPrimary = NULL; // DirectDraw primary surface - LPDIRECTDRAWSURFACE4 lpDDSBack = NULL; // DirectDraw back surface - LPDIRECTDRAWSURFACE4 lpDDSMisc = NULL; // DirectDraw Bilder surface - LPDIRECTDRAWSURFACE4 lpDDSPanel = NULL; // DirectDraw Panel surface - LPDIRECTDRAWSURFACE4 lpDDSGuyAni = NULL; // DirectDraw GuyAni surface - LPDIRECTDRAWSURFACE4 lpDDSAnimation = NULL; // DirectDraw Animation surface - LPDIRECTDRAWSURFACE4 lpDDSKarte = NULL; // DirectDraw MiniMap surface - LPDIRECTDRAWSURFACE4 lpDDSSchrift = NULL; // DirectDraw Schrift surface - LPDIRECTDRAWSURFACE4 lpDDSSchrift1 = NULL; // DirectDraw Schrift1 surface - LPDIRECTDRAWSURFACE4 lpDDSSchrift2 = NULL; // DirectDraw Schrift2 surface - LPDIRECTDRAWSURFACE4 lpDDSTextFeld = NULL; // DirectDraw TextFeld surface - LPDIRECTDRAWSURFACE4 lpDDSPapier = NULL; // DirectDraw Paier surface - LPDIRECTDRAWSURFACE4 lpDDSBaum = NULL; // DirectDraw Bäume surface - LPDIRECTDRAWSURFACE4 lpDDSBau = NULL; // DirectDraw Bauwerke surface - LPDIRECTDRAWSURFACE4 lpDDSCredits = NULL; // DirectDraw Credits surface - LPDIRECTDRAWSURFACE4 lpDDSLogo = NULL; // DirectDraw Logo surface - LPDIRECTDRAWSURFACE4 lpDDSCursor = NULL; // DirectDraw Cursor surface - LPDIRECTDRAWSURFACE4 lpDDSButtons = NULL; // DirectDraw Buttons surface - LPDIRECTDRAWSURFACE4 lpDDSInventar = NULL; // DirectDraw Inventar surface - LPDIRECTDRAWSURFACE4 lpDDSScape = NULL; // DirectDraw Landschaft surface - LPDIRECTDRAWSURFACE4 lpDDSSchatzkarte = NULL; // SchatzkartenSurface - LPDIRECTDRAWPALETTE lpDDPal = NULL; // DirectDraw palette - DDBLTFX ddbltfx; // DirectDraw Effekte - DDPIXELFORMAT ddpf; - DDSURFACEDESC2 ddsd, ddsd2; // Zwischenspeicher der SurfaceEigenschaften - - LPDIRECTDRAWGAMMACONTROL lpDDGammaControl = NULL; // Die drei sind für das Gammaablenden - DDGAMMARAMP DDGammaRamp; - DDGAMMARAMP DDGammaOld; - - // Directinput - IDirectInput* g_pDI = NULL; - IDirectInputDevice* g_pMouse = NULL; - IDirectInputDevice* g_pKey = NULL; - HANDLE g_hMouseEvent = NULL; - HINSTANCE g_hInst = NULL; - BOOL MouseInit = false; - - // DirectSound - LPDIRECTSOUND8 lpds; // DirectSoundObjekt - DSBUFFERDESC dsbdesc; - LPDIRECTSOUNDBUFFER lpdsb; - LPDIRECTSOUNDBUFFER lpdsbPrimary; - LPDIRECTSOUNDBUFFER lpdsbWav[WAVANZ]; // Wavedateispeicher -} - -namespace Sound -{ - void LoadSound(short Sound); // Lädt einen Sound in den Speicher - void PlaySound(short Sound, short Volume); // Spiel eine Wavedatei mit Prozentualer Lautstärke - void StopSound(short Sound); // Stoppt ein Sound -} - -namespace Game -{ - void NeuesSpiel(bool neu); // Neues Spiel starten - void InitStructs(); // Initialisiert die Structs - void SaveGame(); // Speichert den Spielstand - bool LoadGame(); // Lädt den Spielstand -} - -void Generate(); // Kacheln in den Speicher zeichnen -void Compute(short MinGroesse, short MaxGroesse); //Zufallslandschaft erzeugen -void Zeige(); // Landschaft anzeigen -void ZeigeIntro(); // Für das Intro zuständig -void ZeigeAbspann(); // Für den Abspann -void ZeigeLogo(); // Zeigt das Logo -void ZeichneObjekte(); // Alles Landschaftsdetails zeichnen, die nicht im Speicher sind -void ZeichneGuy(); // Zeichnet die Spielfigur -void ZeichnePanel(); // Zeichnet die Karte -void ZeichneBilder(short x, short y, short i, RECT Ziel, bool Reverse, short Frucht); // Zeichnet die Bmp-Bilder -void Meer(); // Mit Meer aufüllen -void Fluss(); // Erstellt einen Fluß -bool CheckFluss(short x, short y); //Für FLuss() -void Baeume(short Prozent); // Verteilt die Bäume auf Insel -void CalcKoor(); // Bildschirmkoordinaten der Kacheln berechnnen; -void CheckMouse(); // Maus abfragen -short CheckKey(); // Tastatur abfragen -void MouseInSpielflaeche(short Button, short Push, short xDiff, short yDiff); // Falls die Maus in der Spielfäche ist -void MouseInPanel(short Button, short Push); // Falls die Maus im Panel ist -bool InDreieck(short X, short Y, short X0, short Y0, short X1, short Y1, short X3, short Y3); -bool InRect(short x, short y, RECT rcRect); //Ist ein Punkt in einem Rechteck -inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b); // Rechnet 24Bit RGB in 16 Bit um (Für ddbltfx.dwFillColor) -void MarkRoute(bool Mark); //Markiert die Route -bool FindTheWay(); //PathFinding -short RotateRight(short Dir); //Richtungskoordinate rechtsrum umrechnen -void SortRoute(); //Die Route in die richtige Reihenfolge bringen -bool CheckRoute(short x, short y, bool save); //Nachprüfen ob auf aktuellem Teil in der Route ist -void ShortRoute(short Zielx, short Ziely); //Macht eine Mini-Route von den Guy.Position zu den Zielk. -void CalcGuyKoor(); //Berechnet die neuen Koordinaten der Spielfigur -void Animationen(); //Startet die einzelnen Animationen -void CalcRect(RECT rcBereich); //Beschneidet das BlitRechteck so, daß es nur innerhalb des Bereiches gemalt wird -void DrawString(char *string, short x, short y, short Art); //Schreibt einen String an eine gewünschte Stelle -short DrawText(int TEXT, short Bereich, short Art); //Schreibt einen Text in ein Rechteck -short Refresh(); //Wird ständig ausgeführt und aktuallisiert alles; -void LimitScroll(); //Verhindert das Scrollen aus dem Bild -void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon, LPDIRECTDRAWSURFACE4 lpDDSNach, bool Transp); -void ZeichnePapier(); //Zeichnet das Papier für den Text -void Textloeschen(short Bereich); //Löscht einen Breich in der Textsurface -void AddTime(short h, short m); //Addiert Stunden und Minuten zur TagesZeit -void AddResource(short Art, float Anzahl); //Fügt wassser usw hinzu -void Entdecken(); //Deckt die Kacheln neben der Spielfigur auf -void Event(short Eventnr); //Startet die Aktionsprozeduren -void ButtAniAus(); //Schaltet alle Knopfanimationien aus (für MouseInPanel) -void CheckBenutze(short Objekt); //Prüft ob die richtigen Rohstoffe benutzt wurden (im Inventar) -bool CheckRohstoff(); //Prüft die Rohstoffe die zum Bau benötigt werden -void MakeRohString(short x, short y, short Objekt); //Schreibt in den Rohstring die benötigten Rohstoffe -void CheckSpzButton(); //Wechselt die Knöpfe (Stop,Weiter,Ablegen usw.) -void ChangeBootsFahrt(); //Ändert die notwendigen Sachen für eine Bootsfahrt (und zurück); -void FillRohr(); //Ãœberprüft die Röhren, ob sie an Wassernetz angeschlossen sind -void CheckRohr(short x, short y); //Rekursive Procedure für FillRohr(); -void Fade(short RP, short GP, short BP); //Bild abdunkeln mittels Gamma-Werten (in Prozent pro Farbwert) -void Schatz(); //Schatz vergraben und Schatzkarte malen -void DrawSchatzkarte(); //Schatzkarte malen -void PutPixel(short x, short y, DWORD color, LPDDSURFACEDESC2 ddsd); //Schreibt Pixel in eine Surface (davor lock()) -void GetPixel(short x, short y, LPDDSURFACEDESC2 ddsd); //Das Ergebnis wird in rgbStruct gespeichert -void Piratenwrack(); //Setzt das Piratenwrack -void AbspannCalc(); //Kalkuliert die Koordinaten für den Abspann -void AbspannBlt(short Bild, short Prozent); //Zeichnet die Bilder im Abspann - -namespace Action -{ - //Aktionen - void AkSuchen(); //Kacheln durchsuchen - void AkEssen(); //Früchte essen - void AkTrinken(); //Wasser trinken - void AkFaellen(); //Bäume fällen - void AkFeld(); //Feld anlegen - void AkTagEnde(); //Wenn der Tag zu Ende ist - void AkGerettet(); //Wenn man gerettet wird - void AkZelt(); //Zelt bauen - void AkSchlafen(); //Schlafen - void AkAbbruch(); //Aktion abbrechen - void AkAngeln(); //Aktion abbrechen - void AkBoot(); //Boot bauen - void AkAblegen(); //Vom Strand aus ins Meer ablegen - void AkAnlegen(); //Vom Meer an den Strand anlegen - void AkRohr(); //Bewässerungsrohr bauen - void AkDestroy(); //Objekt abreissen - void AkSOS(); //SOS schreiben - void AkHaus1(); //Leiter bauen - void AkHaus2(); //Plattform bauen - void AkHaus3(); //Baumhaus bauen - void AkFeuerstelle(); //Feuerstelle aufstapeln - void AkAnzuenden(); //Feuerstelle anzuenden - void AkAusschau(); //Ausschau halten - void AkSchatz(); //Nach Schatz graben - void AkIntro(); //Intro aktionen - void AkSchleuder(); //Jagdaktion - void AkSpielverlassen(); //Fragt, ob man es wirklich verlassen will - void AkNeubeginnen(); //Fragt, ob man das Spiel neu beginnen will - void AkTagNeubeginnen(); //Fragt, ob man den Tag neu beginnen will - void AkTod(); //Sterben -} - -BOOL bActive = false; // is application active? -BOOL Spielzustand = SZNICHTS; // in welchem Zustand ist das Spiel? -BOOL MouseAktiv = false; // Mouse angestellt? -BOOL LAnimation = true; // Ist die Landschaftanimation angeschaltet? -HWND hwnd; -BOOL Gitter; //Gitternetz an/aus -RECT ScapeGrenze; //Diese Koordinaten zeigen die Größe der Landschaft an -SHORT Flusslaenge[FLUSSANZAHL]; -SHORT CursorTyp; //Welcher Cursortyp? -BOOL Button0down; //linke Maustaste gedrückt gehalten -BOOL Button1down; //rechte Maustaste gedrückt gehalten -SHORT RouteLaenge; //Länge -SHORT RoutePunkt; //Aktueller Index in RouteKoor -FLOAT Schrittx, Schritty; //Zum Figur laufen lassen -LONG Zeit; //Start der Sekunde -SHORT Bild, LastBild; //Anzahl der Bilder in der Sekunde -RECT rcRectdes, rcRectsrc; //Ständig benötigte Variable zum Blitten -SHORT Tag, Stunden, Minuten; //Wieviel Uhr (0-12h) -CHAR StdString[1024]; //Standard string -CHAR RohString[1024]; //Darin wird gespeichert, wieviel Rohstoffe noch benötigt werden -SHORT PapierText; //Wieviel Papier? (in Pixel) -1 = Kein Text -SHORT HauptMenue; //Welches Menü? -SHORT TwoClicks; //Für Aktionen mit zwei Mausklicks -FLOAT Chance; //Wie groß ist die Chance am Tag gerettet zu werden -BOOL BootsFahrt; //Gerade mit dem Boot unterwegs? -BOOL Nacht; //Wird die Tageszusammenfassung angezeigt? -SHORT Soundzustand; //-1 = keine Soundkarte;0=kein Sound;1=Sound an -BOOL Spielbeenden = false; //Wenn true wird das Spiel sofort beendet -SHORT Frage; //-1=KeineFrage;0=Frage wird gestellt;1=Ja;2=Nein -DOUBLE pi = 3.1415926535; //pi, was sonst -SHORT AbspannNr = 0; //Zähler für Abspann -SHORT AbspannZustand = 0; //Wo im Abspann -BOOL SchatzGef = false; //wurde der Schatz gefunden - -// Pathfinding -short Step, Steps; -int LenMap[MAXXKACH][MAXYKACH]; - -//Bereiche -// links, oben, rechts, unten -const RECT rcGesamt = { 0, 0, MAXX, MAXY }; -const RECT rcSpielflaeche = { 0, 0, MAXX - 195, MAXY - 20 }; -const RECT rcPanel = { MAXX - 205, 0, MAXX, MAXY }; -const RECT rcKarte = { MAXX - 158, 23, rcKarte.left + MAXXKACH * 2, rcKarte.top + MAXYKACH * 2 }; -const RECT rcTextFeld1 = { 0, MAXY - 20, MAXX - 195, MAXY }; - -struct TEXTBEREICH -{ - bool Aktiv; //Steht Text in diesem Bereich? - RECT rcText; //Die Position des Ausgabe -} TextBereich[TEXTANZ]; - -struct ZWEID -{ - short x; - short y; -} Camera, //aktueller Kartenausschnitt -MousePosition, // " Mauskoordinaten -RouteZiel, RouteStart, // Koordinaten des Starts und des Endes der Route -Route[MAXXKACH*MAXYKACH], // Liste der Routenpunkte -RouteKoor[2 * MAXXKACH*MAXYKACH],// Liste der Routenkoordinaten -SaveRoute[MAXXKACH*MAXYKACH], //Zum zwischenspeichern der Route -NewPos, // Nur innerhalb des Pathfindings benutzt -GuyPosScreenStart, // Absolute StartPosition bei einem Schritt (Für CalcGuyKoor) -SchatzPos; //Hier ist der Schatz vergraben - -struct RGBSTRUCT -{ - BYTE r, g, b; -} rgbStruct; //Hier werden die Farben eines Pixels zwischengespeichert - -inline void DWORD2RGB(DWORD color, RGBSTRUCT *PrgbStruct); - -struct GUY -{ - bool Aktiv;//Ist er aktiv? - short Aktion; //Welche Aktion (Suchen, fischen ...) (Ãœbergeordnet über Zustand) - ZWEID Pos; // KachelPosition der Spielfigur - ZWEID PosAlt; //Die ursprünglich Position in der Kachel (für die Aktionsprozeduren) - ZWEID PosScreen; // Absolute Position der Spielfigur - short Zustand; //Was macht er gerade? (Animation)(linkslaufen,rechtslaufen...,angeln..) - short AkNummer; //Bei welcher Aktion (für die Aktionsprozeduren) - float Resource[3]; //Wieviel Wasservorrat usw - short Inventar[BILDANZ]; //Welche Rohstoffe usw. besitzt man -} Guy; - -struct BMP -{ - LPDIRECTDRAWSURFACE4 Surface; //in welcher Surface gespeichert? - bool Animation; //Läuft die Animations? - short Anzahl; //Anzahl der Animationsphasen - short Phase; //die aktuelle Phase - RECT rcSrc; //Quelle des 1. Bildes - RECT rcDes; //Falls es immer an die gleiche Stelle gezeichnet wird. (Buttons) - short Breite; //Die Breite des Bildes - short Hoehe; //Die Hoehe des Bildes - short Geschwindigkeit; //Wieviel Bilder/sec - short Sound; //Welcher Sound gehört dazu - //zum bauen - short Rohstoff[BILDANZ]; //Anzahl des i.Rohstoffs, den man zum Bau benötigt - short AkAnzahl; //Anzahl der Aktionsfaellen, die zum Bau benötigt werden - bool First; //Ist es das erstemal gebaut, dann Hilfetext -} Bmp[BILDANZ]; - -struct WAV -{ - char *Dateiname; //Dateiname der Wavdatei - bool Loop; //Nur einmal abspielen und ständig - short Volume; //Die Standardlautstärke in Prozent -} Wav[WAVANZ]; - -struct ABSPANN -{ - bool Aktiv; //Bewegt sich gerade - short Bild; //welches Bild -} -AbspannListe[10][10]; //Namenabfolge im Abspann - -bool LineIntersect(ZWEID LineStartPos, ZWEID Pos, bool store); //Für Pathfinding (Ist eine Gerade unterbrochen?) -ZWEID GetKachel(short x, short y); // Welche Kachel ist unter den angegebenen Koordinaten - -//Die Eckkoordinaten der Kacheln (Achtung: mit überlappendem Rand) -const ZWEID EckKoor[13][4] = -{// 0 1 2 3 Ecke - { { -1, 29 }, { 26, 15 }, { 54, 30 }, { 27, 44 } },//0 - { { -1, 13 }, { 26, 15 }, { 54, 30 }, { 27, 28 } },//1 - { { -1, 29 }, { 26, 15 }, { 54, 14 }, { 27, 28 } },//2 - { { -1, 29 }, { 26, -1 }, { 54, 14 }, { 27, 44 } },//3 - { { -1, 13 }, { 26, -1 }, { 54, 30 }, { 27, 44 } },//4 - { { -1, 13 }, { 26, 15 }, { 54, 30 }, { 27, 44 } },//5 - { { -1, 29 }, { 26, 15 }, { 54, 30 }, { 27, 28 } },//6 Kacheltyp - { { -1, 29 }, { 26, 15 }, { 54, 14 }, { 27, 44 } },//7 - { { -1, 29 }, { 26, -1 }, { 54, 30 }, { 27, 44 } },//8 - { { -1, 13 }, { 26, -1 }, { 54, 14 }, { 27, 44 } },//9 - { { -1, 13 }, { 26, -1 }, { 54, 30 }, { 27, 28 } },//10 - { { -1, 13 }, { 26, 15 }, { 54, 14 }, { 27, 28 } },//11 - { { -1, 29 }, { 26, -1 }, { 54, 14 }, { 27, 28 } },//12 - -}; - - -const short Vierecke[13][4][13] = //0=Passt nicht 1=1runter 2=gleiche Hoehe 3=1hoch -{// 0 1 2 3 4 5 6 7 8 9 10 11 12 - { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } },//0 - { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } },//1 - /*0*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } },//2 Kante - { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } //3 - }, - { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, - { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, - /*1*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, - { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } - }, - { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, - { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, - /*2*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, - { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } - }, - { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, - { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, - /*3*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, - { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } - }, - { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, - { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, - /*4*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, - { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } - },// 0 1 2 3 4 5 6 7 8 9 10 11 12 - { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, - { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, - /*5*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, - { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } - }, - { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, - { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, - /*6*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, - { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } - }, - { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, - { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, - /*7*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, - { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } - }, - { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, - { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, - /*8*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, - { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } - }, - { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, - { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, - /*9*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, - { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } - },// 0 1 2 3 4 5 6 7 8 9 10 11 12 - { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, - { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, - /*10*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, - { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } - }, - { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, - { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, - /*11*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, - { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } - }, - { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, - { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, - /*12*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, - { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } - }, - -}; - - -struct SCAPE -{ - short Typ; //Flach, Hang usw. - short Art; //Sand, Moor ... - short Hoehe; //Die Hoehe der Kachel - bool Markiert; //Ist diese Kachel markiert? - short xScreen, yScreen; //Die Koordinaten in der Scape-Surface - bool Begehbar; //notwendig für Pathfinding - bool Entdeckt; //Ist dieses Feld schon aufgedeckt? - short LaufZeit; //LaufZeit auf dieser Kachel (1 am schnellsten...) - short Objekt; // Welches Objekt steht drauf (z.Bsp. Flüsse) - bool Reverse; // Wird die Objektanimation umgekehrt abgespielt (für flüsse) - ZWEID ObPos; //Die Koordinaten des Objekts (relativ zu xScreen und yScreen) - float Phase; //Welche Animationsphase oder Bildversion - short AkNummer; //Welche Aktionsnummer (um Baustellen vortzusetzen) - ZWEID GPosAlt; // Damit der Guy an der richtigen Stelle (x,y) weiterbaut - short Rohstoff[BILDANZ]; //Anzahl des i.Rohstoffs, den man noch zum bauen braucht - float Timer; //Bis jetzt nur fürs Feuer nötig -} Scape[MAXXKACH][MAXYKACH]; - -struct FLUSSLAUF -{ - short x, y; -}; -FLUSSLAUF Flusslauf[FLUSSANZAHL][MAXFLUSS]; - -//Bilder -static char Misc[] = "MISC"; -static char Panel[] = "PANEL"; -static char GuyAni[] = "GUYANI"; -static char Animation[] = "ANIMATION"; -static char Schrift1[] = "SCHRIFT1"; -static char Schrift2[] = "SCHRIFT2"; -static char TextFeld[] = "TEXTFELD"; -static char Papier[] = "PAPIER"; -static char Baum[] = "BAUM"; -static char Cursorbmp[] = "CURSORBMP"; -static char Buttons[] = "BUTTONS"; -static char Inventarbmp[] = "INVENTARBMP"; -static char Bau[] = "BAU"; -static char Credits[] = "CREDITS"; -static char Logo[] = "LOGO"; - -void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon, LPDIRECTDRAWSURFACE4 lpDDSNach, bool Transp) -{ - HRESULT hr; - short z; - z = 0; - - while (1) - { - z++; - hr = lpDDSNach->GetBltStatus(/*DDGBS_ISBLTDONE |*/ DDGBS_CANBLT); - - if (hr == DD_OK) break; - else Sleep(1); - - if (z == 1000) - { - MessageBeep(MB_OK); - break; - } - } - - while (1) - { - z++; - if (Transp) hr = lpDDSNach->Blt(&rcRectdes, lpDDSVon, &rcRectsrc, DDBLT_KEYSRC | DDBLT_WAIT, NULL); - else hr = lpDDSNach->Blt(&rcRectdes, lpDDSVon, &rcRectsrc, DDBLT_WAIT, NULL); - if (hr != DDERR_WASSTILLDRAWING) break; - if (z == 1000) - { - MessageBeep(MB_OK); - break; - } - } -} - -void CheckMouse() -{ - DIMOUSESTATE dims; //Da werden die Daten der Maus gespeichert - short Button; //Welcher Knopf ist gedrückt worden - short Push; //Knopf gedrückt(1) oder losgelassen(-1) oder gedrückt(0) gehalten - short xDiff, yDiff; //Die Differenz zur vorherigen Position ((Für Scrollen) - - Direct::g_pMouse->GetDeviceState(sizeof(DIMOUSESTATE), &dims); - //Mausbewegung - xDiff = MousePosition.x; - MousePosition.x += (short)dims.lX; - xDiff -= MousePosition.x; - if (MousePosition.x < 0) MousePosition.x = 0; - if (MousePosition.x > MAXX - 2) MousePosition.x = MAXX - 2; - yDiff = MousePosition.y; - MousePosition.y += (short)dims.lY; - yDiff -= MousePosition.y; - if (MousePosition.y < 0) MousePosition.y = 0; - if (MousePosition.y > MAXY - 2) MousePosition.y = MAXY - 2; - - if (TwoClicks == -1) - { - if (Guy.Aktiv) - { - if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSTOP].rcDes) && - (Bmp[BUTTSTOP].Phase != -1)) CursorTyp = CUPFEIL; - else CursorTyp = CUUHR; - } - else CursorTyp = CUPFEIL; - } - Button = -1; - - if (dims.rgbButtons[0] & 0x80) - { - Button = 0; - if (Button0down) Push = 0; - else - { - Push = 1; - Button0down = true; - } - } - else - { - if (Button0down) - { - Button = 0; - Push = -1; - Button0down = false; - } - } - - - if (dims.rgbButtons[1] & 0x80) - { - Button = 1; - if (Button1down) Push = 0; - else - { - Push = 1; - Button1down = true; - } - } - else - { - if (Button1down) - { - Button = 1; - Push = -1; - Button1down = false; - } - } - - //Wenn ein Text steht, dann bei Mausdruck Text weg - if (PapierText != -1) - { - if (Frage == 0) - { - if (InRect(MousePosition.x, MousePosition.y, Bmp[JA].rcDes)) - { - CursorTyp = CUPFEIL; - if ((Button == 0) && (Push == 1)) - { - Frage = 1; - Textloeschen(TXTPAPIER); - PapierText = -1; - Guy.Aktiv = false; - Sound::PlaySound(WAVKLICK2, 100); - } - } - else if (InRect(MousePosition.x, MousePosition.y, Bmp[NEIN].rcDes)) - { - CursorTyp = CUPFEIL; - if ((Button == 0) && (Push == 1)) - { - Frage = 2; - Textloeschen(TXTPAPIER); - PapierText = -1; - Guy.Aktiv = false; - Sound::PlaySound(WAVKLICK2, 100); - } - } - else if ((Button == 0) && (Push == 1)) Sound::PlaySound(WAVKLICK, 100); - } - else if ((Button != -1) && (Push == 1)) - { - Textloeschen(TXTPAPIER); - PapierText = -1; - Guy.Aktiv = false; - } - return; - - } - - //Animationen und Text löschen (werden dann von den MouseIn.. Sachen neu angestellt - Textloeschen(TXTTEXTFELD); - ButtAniAus(); - - //Wenn der Guy aktiv dann linke Mouse-Buttons ignorieren - if ((Guy.Aktiv) && (Button == 0)) - { - if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSTOP].rcDes)) && - (Bmp[BUTTSTOP].Phase != -1)); - else Button = -1; - } - - //die Maus ist in der Spielflaeche -> - if (InRect(MousePosition.x, MousePosition.y, rcSpielflaeche)) - MouseInSpielflaeche(Button, Push, xDiff, yDiff); - //die Maus ist im Panel -> - if (InRect(MousePosition.x, MousePosition.y, rcPanel)) - MouseInPanel(Button, Push); - /*dims.lX, dims.lY, dims.lZ, - (dims.rgbButtons[0] & 0x80) ? '0' : ' ', - (dims.rgbButtons[1] & 0x80) ? '1' : ' ', - (dims.rgbButtons[2] & 0x80) ? '2' : ' ', - (dims.rgbButtons[3] & 0x80) ? '3' : ' ');*/ -} - -short CheckKey() -{ -#define KEYDOWN(name,key) (name[key] & 0x80) - char buffer[256]; - short x; - - Direct::g_pKey->GetDeviceState(sizeof(buffer), (LPVOID)&buffer); - - - if (Spielzustand == SZLOGO) - { - if ((KEYDOWN(buffer, DIK_ESCAPE)) || (KEYDOWN(buffer, DIK_RETURN)) || - (KEYDOWN(buffer, DIK_SPACE))) //Logo Abbrechen - { - Sound::StopSound(WAVLOGO); - Game::NeuesSpiel(false); - return(2); - } - } - else if (Spielzustand == SZINTRO) - { - if ((KEYDOWN(buffer, DIK_ESCAPE)) || (KEYDOWN(buffer, DIK_RETURN)) || - (KEYDOWN(buffer, DIK_SPACE)))//Intro Abbrechen - { - Sound::StopSound(WAVSTURM); //Sound hier sofort stoppen - Sound::StopSound(WAVSCHWIMMEN); //Sound hier sofort stoppen - Guy.Aktiv = false; - for (x = Guy.Pos.x; x= 60) - { - Minuten -= 60; - Stunden++; - } - for (y = 0; y= 1) - { - Scape[x][y].Objekt = -1; - Scape[x][y].Timer = 0; - Scape[x][y].ObPos.x = 0; - Scape[x][y].ObPos.y = 0; - Scape[x][y].Phase = -1; - Chance -= 2 + 2 * Scape[x][y].Hoehe; - } - } - if ((Scape[x][y].Phase == -1) || - ((Scape[x][y].Objekt != FELD) && - (Scape[x][y].Objekt != BUSCH))) continue; //Wenn kein Fruchtobjekt weiter - if (Scape[x][y].Phase >= Bmp[Scape[x][y].Objekt].Anzahl) continue; - if (Scape[x][y].Objekt == FELD) Scape[x][y].Phase += float((60 * h + m)*0.005); - else if (Scape[x][y].Objekt == BUSCH) Scape[x][y].Phase += float((60 * h + m)*0.0005); //pro Minute Reifungsprozess fortführen - if (Scape[x][y].Phase > Bmp[Scape[x][y].Objekt].Anzahl - 1) - Scape[x][y].Phase = (float)Bmp[Scape[x][y].Objekt].Anzahl - 1; - } - AddResource(GESUNDHEIT, (60 * h + m)*(Guy.Resource[WASSER] - 50 + Guy.Resource[NAHRUNG] - 50) / 1000); - - if ((Spielzustand == SZSPIEL) && (!BootsFahrt)) - { - for (i = 0; i <= (60 * h + m); i++) - { - if (Chance == 0) break; - if (rand() % ((int)(1 / (Chance / 72000))) == 1) - { - Guy.Aktiv = false; - Guy.AkNummer = 0; - Guy.Aktion = AKGERETTET; - break; - } - } - } - - -} - -void AddResource(short Art, float Anzahl) //Fügt wassser usw hinzu -{ - Guy.Resource[Art] += Anzahl; - if (Guy.Resource[Art] > 100) Guy.Resource[Art] = 100; - if (Guy.Resource[Art] < 0) Guy.Resource[Art] = 0; - //Wann tod - if ((Guy.Resource[GESUNDHEIT] <= 0) && (Guy.Aktion != AKTOD) && - (Guy.Aktion != AKTAGENDE) && (Spielzustand == SZSPIEL)) - { - Guy.Aktiv = false; - Guy.AkNummer = 0; - Guy.Aktion = AKTOD; - } -} -void LimitScroll() -{ - if (Camera.x < ScapeGrenze.left) - Camera.x = (short)ScapeGrenze.left; - if (Camera.x + rcSpielflaeche.right > ScapeGrenze.right) - Camera.x = (short)ScapeGrenze.right - (short)rcSpielflaeche.right; - if (Camera.y < ScapeGrenze.top) - Camera.y = (short)ScapeGrenze.top; - if (Camera.y + rcSpielflaeche.bottom > ScapeGrenze.bottom) - Camera.y = (short)ScapeGrenze.bottom - (short)rcSpielflaeche.bottom; -} - -ZWEID GetKachel(short PosX, short PosY) -{ - short x, y; - ZWEID Erg; - - for (y = 0; y Scape[x][y].xScreen) && (PosX < Scape[x][y].xScreen + KXPIXEL) && - (PosY > Scape[x][y].yScreen) && (PosY < Scape[x][y].yScreen + KYPIXEL)) - { - - if ((InDreieck(PosX, PosY, - Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][0].x, - Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][0].y, - Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][1].x, - Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][1].y, - Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][3].x, - Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][3].y)) || - (InDreieck(PosX, PosY, - Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][2].x, - Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][2].y, - Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][1].x, - Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][1].y, - Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][3].x, - Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][3].y))) - { - Erg.x = x; - Erg.y = y; - return Erg; - } - } - } - Erg.x = -1; - Erg.y = -1; - return Erg; -} - -void MakeRohString(short x, short y, short Objekt) -{ - char TmpString[1024]; - bool keinRohstoff; - short i; - - RohString[0] = char(0); - keinRohstoff = true; - if (Objekt == -1) - { - for (i = 0; i"); - for (i = 0; i= BAUM1) && (Scape[Erg.x][Erg.y].Objekt <= BAUM4)) - LoadString(Direct::g_hInst, BAUMTEXT, TextTmp, 1024); - else if ((Scape[Erg.x][Erg.y].Objekt >= FLUSS1) && (Scape[Erg.x][Erg.y].Objekt <= SCHLEUSE6)) - LoadString(Direct::g_hInst, FLUSSTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == BUSCH) - LoadString(Direct::g_hInst, BUSCHTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == ZELT) - LoadString(Direct::g_hInst, ZELTTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == FELD) - LoadString(Direct::g_hInst, FELDTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == BOOT) - LoadString(Direct::g_hInst, BOOTTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == ROHR) - LoadString(Direct::g_hInst, ROHRTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == SOS) - LoadString(Direct::g_hInst, SOSTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == HAUS1) - LoadString(Direct::g_hInst, HAUS1TEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == HAUS2) - LoadString(Direct::g_hInst, HAUS2TEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == HAUS3) - LoadString(Direct::g_hInst, HAUS3TEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == BAUMGROSS) - LoadString(Direct::g_hInst, BAUMGROSSTEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == FEUERSTELLE) - LoadString(Direct::g_hInst, FEUERSTELLETEXT, TextTmp, 1024); - else if (Scape[Erg.x][Erg.y].Objekt == FEUER) - LoadString(Direct::g_hInst, FEUERTEXT, TextTmp, 1024); - else if ((Scape[Erg.x][Erg.y].Objekt == WRACK) || (Scape[Erg.x][Erg.y].Objekt == WRACK2)) - LoadString(Direct::g_hInst, WRACKTEXT, TextTmp, 1024); - strcat(Text, TextTmp); - - if ((Scape[Erg.x][Erg.y].Objekt >= FELD) && - (Scape[Erg.x][Erg.y].Objekt <= FEUERSTELLE)) - { - //Baufortschrittanzeigen - strcat(Text, " "); - strcat(Text, "("); - sprintf(TextTmp, "%d", (Scape[Erg.x][Erg.y].AkNummer * 100) / Bmp[Scape[Erg.x][Erg.y].Objekt].AkAnzahl); - strcat(Text, TextTmp); - strcat(Text, "%"); - strcat(Text, ")"); - //benötigte Rohstoffe anzeigen - MakeRohString(Erg.x, Erg.y, -1); - strcat(Text, RohString); - } - - } - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(Text, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - } - - //rechte Maustastescrollen - if ((Button == 1) && (Push == 0)) - { - Camera.x += xDiff; - Camera.y += yDiff; - CursorTyp = CURICHTUNG; - } - - //Wenn Maustaste gedrückt wird - if ((Button == 0) && (Push == 1)) - { - if ((Erg.x != -1) && (Erg.y != -1) && - (Scape[Erg.x][Erg.y].Entdeckt) && (!Guy.Aktiv) && - ((Erg.x != Guy.Pos.x) || (Erg.y != Guy.Pos.y)) && - (Erg.x > 0) && (Erg.x < MAXXKACH - 1) && - (Erg.y > 0) && (Erg.y < MAXYKACH - 1)) - { - //Klicksound abspielen - Sound::PlaySound(WAVKLICK2, 100); - if ((Erg.x == RouteZiel.x) && (Erg.y == RouteZiel.y)) - { - MarkRoute(false); - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktiv = true; - RoutePunkt = -1; - Steps = 0; - Step = 0; - } - else - { - MarkRoute(false); - RouteStart.x = Guy.Pos.x; - RouteStart.y = Guy.Pos.y; - RouteZiel.x = Erg.x; - RouteZiel.y = Erg.y; - if (FindTheWay()) MarkRoute(true); - else //Wenn keine Route gefunden - { - RouteStart.x = -1; - RouteStart.y = -1; - RouteZiel.x = -1; - RouteZiel.y = -1; - MessageBeep(MB_OK); - } - } - } - else Sound::PlaySound(WAVKLICK, 100); - } -} - -void ButtAniAus() -{ - short i; - - for (i = BUTTGITTER; i <= BUTTDESTROY; i++) - { - Bmp[i].Animation = false; - } -} - -void MouseInPanel(short Button, short Push) -{ - short mx, my, i; //Mauskoordinaten in Minimap - - //wenn die Maus in der Minimap ist -> - if ((InRect(MousePosition.x, MousePosition.y, rcKarte)) && (Button == 0) && (Push != -1)) - { - mx = MousePosition.x - (short)rcKarte.left; - my = MousePosition.y - (short)rcKarte.top; - Camera.x = ((KXPIXEL / 4)*(mx - my) + MAXXKACH * KXPIXEL / 2) - - (rcSpielflaeche.right - rcSpielflaeche.left) / 2; - Camera.y = ((KXPIXEL / 7)*(my + mx)) - - (rcSpielflaeche.bottom - rcSpielflaeche.top) / 2; - } - else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTGITTER].rcDes)) - { - if (Gitter) DrawText(GITTERAUS, TXTTEXTFELD, 2); - else DrawText(GITTERAN, TXTTEXTFELD, 2); - - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - Gitter = !Gitter; - Generate(); - } - } - else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANIMATION].rcDes)) - { - if (LAnimation) DrawText(ANIMATIONAUS, TXTTEXTFELD, 2); - else DrawText(ANIMATIONAN, TXTTEXTFELD, 2); - - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - LAnimation = !LAnimation; - Generate(); - } - } - else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSOUND].rcDes)) - { - if (Soundzustand == 1) DrawText(SOUNDAUS, TXTTEXTFELD, 2); - else if (Soundzustand == 0) DrawText(SOUNDAN, TXTTEXTFELD, 2); - else DrawText(KEINSOUND, TXTTEXTFELD, 2); - - if ((Button == 0) && (Push == 1)) - { - if (Soundzustand == 1) - { - for (i = 1; i= FLUSS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6)) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ROHR) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase == 1))) - Guy.Aktion = AKTRINKEN; - else PapierText = DrawText(KEINESSENTRINKEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHLAFEN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLAFEN].Phase != -1)) - { - DrawText(BEGINNSCHLAFEN, TXTTEXTFELD, 2); - Bmp[BUTTSCHLAFEN].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if (Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) - { - Guy.AkNummer = 0; - Guy.Aktion = AKSCHLAFEN; - } - else PapierText = DrawText(NICHTAUFWASSERSCHLAFEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFAELLEN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTFAELLEN].Phase != -1)) - { - DrawText(BEGINNFAELLEN, TXTTEXTFELD, 2); - Bmp[BUTTFAELLEN].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - Guy.AkNummer = 0; - if (Guy.Inventar[ROHSTAMM] <= 10) - { - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - { - Guy.Aktion = AKFAELLEN; - } - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) - PapierText = DrawText(BAUMZUGROSS, TXTPAPIER, 1); - else PapierText = DrawText(KEINBAUM, TXTPAPIER, 1); - } - else PapierText = DrawText(ROHSTAMMZUVIEL, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANGELN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTANGELN].Phase != -1)) - { - DrawText(BEGINNANGELN, TXTTEXTFELD, 2); - Bmp[BUTTANGELN].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - Guy.AkNummer = 0; - if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6)) || - (BootsFahrt)) Guy.Aktion = AKANGELN; - else PapierText = DrawText(KEINWASSER, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANZUENDEN].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTANZUENDEN].Phase != -1)) - { - DrawText(BEGINNANZUENDEN, TXTTEXTFELD, 2); - Bmp[BUTTANZUENDEN].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - Guy.AkNummer = 0; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FEUERSTELLE) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Aktion = AKANZUENDEN; - else PapierText = DrawText(KEINEFEUERST, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTAUSSCHAU].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTAUSSCHAU].Phase != -1)) - { - DrawText(BEGINNAUSSCHAU, TXTTEXTFELD, 2); - Bmp[BUTTAUSSCHAU].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - Guy.AkNummer = 0; - if (Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) - { - Guy.AkNummer = 0; - Guy.Aktion = AKAUSSCHAU; - } - else PapierText = DrawText(WELLENZUHOCH, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHATZ].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZ].Phase != -1)) - { - DrawText(BEGINNSCHATZ, TXTTEXTFELD, 2); - Bmp[BUTTSCHATZ].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - Guy.AkNummer = 0; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1)) - { - Guy.AkNummer = 0; - Guy.Aktion = AKSCHATZ; - } - else PapierText = DrawText(GRABENBEDINGUNGEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHLEUDER].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLEUDER].Phase != -1)) - { - DrawText(BEGINNSCHLEUDER, TXTTEXTFELD, 2); - Bmp[BUTTSCHLEUDER].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - Guy.AkNummer = 0; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - { - Guy.AkNummer = 0; - Guy.Aktion = AKSCHLEUDER; - } - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) - PapierText = DrawText(BAUMZUGROSS, TXTPAPIER, 1); - else PapierText = DrawText(KEINVOGEL, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHATZKARTE].rcDes)) && - (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZKARTE].Phase != -1)) - { - DrawText(BEGINNSCHATZKARTE, TXTTEXTFELD, 2); - Bmp[BUTTSCHATZKARTE].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - DrawSchatzkarte(); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFELD].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTFELD].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNFELD, StdString, 1024); - MakeRohString(-1, -1, FELD); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTFELD].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && - (Scape[Guy.Pos.x][Guy.Pos.y].Art == 4)) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKFELD; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FELD)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKFELD; - } - else PapierText = DrawText(FELDBEDINGUNGEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTZELT].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTZELT].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNZELT, StdString, 1024); - MakeRohString(-1, -1, ZELT); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTZELT].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && - (Scape[Guy.Pos.x][Guy.Pos.y].Art != -1)) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKZELT; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKZELT; - } - else PapierText = DrawText(ZELTBEDINGUNGEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTBOOT].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTBOOT].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNBOOT, StdString, 1024); - MakeRohString(-1, -1, BOOT); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTBOOT].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) && - ((Scape[Guy.Pos.x - 1][Guy.Pos.y].Art == 1) || - (Scape[Guy.Pos.x][Guy.Pos.y - 1].Art == 1) || - (Scape[Guy.Pos.x + 1][Guy.Pos.y].Art == 1) || - (Scape[Guy.Pos.x][Guy.Pos.y + 1].Art == 1))) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKBOOT; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BOOT)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKBOOT; - } - else PapierText = DrawText(BOOTBEDINGUNGEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTROHR].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTROHR].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNROHR, StdString, 1024); - MakeRohString(-1, -1, ROHR); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTROHR].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKROHR; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ROHR)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKROHR; - } - else PapierText = DrawText(ROHRBEDINGUNGEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSOS].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTSOS].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNSOS, StdString, 1024); - MakeRohString(-1, -1, SOS); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTSOS].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKSOS; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKSOS; - } - else PapierText = DrawText(SOSBEDINGUNGEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS1].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS1].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNHAUS1, StdString, 1024); - MakeRohString(-1, -1, HAUS1); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTHAUS1].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - PapierText = DrawText(BAUMZUKLEIN, TXTPAPIER, 1); - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKHAUS1; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKHAUS1; - } - else PapierText = DrawText(GEGENDNICHT, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS2].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS2].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNHAUS2, StdString, 1024); - MakeRohString(-1, -1, HAUS2); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTHAUS2].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - PapierText = DrawText(BAUMZUKLEIN, TXTPAPIER, 1); - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) - PapierText = DrawText(NICHTOHNELEITER, TXTPAPIER, 1); - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKHAUS2; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKHAUS2; - } - else PapierText = DrawText(GEGENDNICHT, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS3].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS3].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNHAUS3, StdString, 1024); - MakeRohString(-1, -1, HAUS3); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTHAUS3].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) - PapierText = DrawText(BAUMZUKLEIN, TXTPAPIER, 1); - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) - PapierText = DrawText(NICHTOHNEPLATTFORM, TXTPAPIER, 1); - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKHAUS3; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKHAUS3; - } - else PapierText = DrawText(GEGENDNICHT, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFEUERST].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTFEUERST].Phase != -1)) - { - LoadString(Direct::g_hInst, BEGINNFEUERSTELLE, StdString, 1024); - MakeRohString(-1, -1, FEUERSTELLE); - strcat(StdString, RohString); - TextBereich[TXTTEXTFELD].Aktiv = true; - DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, - (short)TextBereich[TXTTEXTFELD].rcText.top, 2); - - Bmp[BUTTFEUERST].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) - { - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - Bmp[BUTTSTOP].Phase = 0; - Guy.Aktion = AKFEUERSTELLE; - } - else if ((Bmp[BUTTWEITER].Phase != -1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FEUERSTELLE)) - { - Bmp[BUTTSTOP].Phase = 0; - Guy.PosAlt = Guy.PosScreen; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); - Guy.Aktion = AKFEUERSTELLE; - } - else PapierText = DrawText(FEUERSTELLENBEDINGUNGEN, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTDESTROY].rcDes)) && - (HauptMenue == MEBAUEN) && (Bmp[BUTTDESTROY].Phase != -1)) - { - DrawText(BEGINNDESTROY, TXTTEXTFELD, 2); - Bmp[BUTTDESTROY].Animation = true; - if ((Button == 0) && (Push == 1)) - { - Sound::PlaySound(WAVKLICK2, 100); - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FELD) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= FEUERSTELLE)) - { - Guy.AkNummer = 0; - Guy.Aktion = AKDESTROY; - } - else PapierText = DrawText(KEINBAUWERK, TXTPAPIER, 1); - } - } - else if ((InRect(MousePosition.x, MousePosition.y, Bmp[INVPAPIER].rcDes)) && (HauptMenue == MEINVENTAR)) - { - for (i = ROHAST; i <= ROHSCHLEUDER; i++) - { - if (InRect(MousePosition.x, MousePosition.y, Bmp[i].rcDes) && (Guy.Inventar[i]>0)) - { - if ((Button == 0) && (Push == 1)) - { - if (TwoClicks == -1) - { - CursorTyp = i; - TwoClicks = i; - } - else CheckBenutze(i); - } - switch (i) - { - case ROHAST: DrawText(AST, TXTTEXTFELD, 2); break; - case ROHSTEIN: DrawText(STEIN, TXTTEXTFELD, 2); break; - case ROHAXT: DrawText(AXT, TXTTEXTFELD, 2); break; - case ROHBLATT: DrawText(BLATT, TXTTEXTFELD, 2); break; - case ROHSTAMM: DrawText(STAMM, TXTTEXTFELD, 2); break; - case ROHEGGE: DrawText(EGGE, TXTTEXTFELD, 2); break; - case ROHLIANE: DrawText(LIANE, TXTTEXTFELD, 2); break; - case ROHANGEL: DrawText(ANGEL, TXTTEXTFELD, 2); break; - case ROHHAMMER: DrawText(HAMMER, TXTTEXTFELD, 2); break; - case ROHFERNROHR: DrawText(FERNROHR, TXTTEXTFELD, 2); break; - case ROHSTREICHHOLZ: DrawText(STREICHHOLZ, TXTTEXTFELD, 2); break; - case ROHSCHAUFEL: DrawText(SCHAUFEL, TXTTEXTFELD, 2); break; - case ROHKARTE: DrawText(KARTE, TXTTEXTFELD, 2); break; - case ROHSCHLEUDER: DrawText(SCHLEUDER, TXTTEXTFELD, 2); break; - } - - break; - } - } - } - else if (InRect(MousePosition.x, MousePosition.y, TextBereich[TXTTAGESZEIT].rcText)) - DrawText(SOSPAET, TXTTEXTFELD, 2); - else if (InRect(MousePosition.x, MousePosition.y, TextBereich[TXTCHANCE].rcText)) - DrawText(CHANCETEXT, TXTTEXTFELD, 2); - else //TwoClicks löschen - { - if ((Button == 0) && (Push == 1)) Sound::PlaySound(WAVKLICK, 100); - TwoClicks = -1; - } -} -bool InDreieck(short X, short Y, short X0, short Y0, short X1, short Y1, short X3, short Y3) -{ - float x, y, x0, y0, x1, y1, x3, y3, a, b, c, d; - - x = (float)X; y = (float)Y; x0 = (float)X0; y0 = (float)Y0; x1 = (float)X1; y1 = (float)Y1; x3 = (float)X3; y3 = (float)Y3; - - c = (x - x1) / (x0 - x1); - if (c<0) return false; - d = ((y - y3)*(x0 - x1) - (x - x1)*(y0 - y3)) / ((y1 - y3)*(x0 - x1)); - if (d<0) return false; - b = ((y - y0)*(x1 - x0) - (x - x0)*(y1 - y0)) / ((x1 - x0)*(y3 - y1)); - if (b<0) return false; - a = (x - x0) / (x1 - x0) - b; - if (a<0) return false; - return true; -} - -bool InRect(short x, short y, RECT rcRect) -{ - if ((x <= rcRect.right) && (x >= rcRect.left) && - (y <= rcRect.bottom) && (y >= rcRect.top)) return true; - return false; -} - -inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b) -{ - DWORD Erg = 0; - - if (Direct::ddpf.dwRBitMask == 63488) - { - Erg = (DWORD)((r & 0xF8) >> 3); - Erg = Erg << 6; - Erg = Erg | (DWORD)((g & 0xFC) >> 2); - Erg = Erg << 5; - Erg = Erg | (DWORD)((b & 0xF8) >> 3); - } - else if (Direct::ddpf.dwRBitMask == 31744) - { - Erg = (DWORD)((r & 0xF8) >> 3); - Erg = Erg << 5; - Erg = Erg | (DWORD)((g & 0xF8) >> 3); - Erg = Erg << 5; - Erg = Erg | (DWORD)((b & 0xF8) >> 3); - } - else - { - Erg = 0; - MessageBeep(MB_OK); - } - return Erg; -} - -inline void DWORD2RGB(DWORD color) -{ - if (Direct::ddpf.dwRBitMask == 63488) - { - rgbStruct.r = (byte)((color & 0xF800) >> 8); - rgbStruct.g = (byte)((color & 0x07E0) >> 3); - rgbStruct.b = (byte)((color & 0x001F) << 3); - } - else if (Direct::ddpf.dwRBitMask == 31744) - { - rgbStruct.r = (byte)((color & 0x7C00) >> 7); - rgbStruct.g = (byte)((color & 0x03E0) >> 2); - rgbStruct.b = (byte)((color & 0x001F) << 3); - } -} - -void PutPixel(short x, short y, DWORD color, LPDDSURFACEDESC2 ddsd) -{ - WORD *pixels = (WORD *)ddsd->lpSurface; - //DWORD pitch = ddsd->dwWidth+2; - DWORD pitch = ddsd->lPitch >> 1; - pixels[y*pitch + x] = (WORD)color; -} - -void GetPixel(short x, short y, LPDDSURFACEDESC2 ddsd) -{ - DWORD color; - - WORD *pixels = (WORD *)ddsd->lpSurface; - //DWORD pitch = ddsd->dwWidth; - DWORD pitch = ddsd->lPitch >> 1; - color = pixels[y*pitch + x]; - - DWORD2RGB(color); -} - -void Generate() -{ - - short x, y; - short i; - - //Die Kartehintergrundfarbe - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = 2 * MAXXKACH; - rcRectdes.bottom = 2 * MAXYKACH; - Direct::ddbltfx.dwFillColor = RGB2DWORD(247, 222, 191); - Direct::lpDDSKarte->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - - //Die Landschaftshintergrundfarbe - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXSCAPEX; - rcRectdes.bottom = MAXSCAPEY; - Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); - Direct::lpDDSScape->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - - for (y = 0; y= MEERWELLEN) && (Scape[x][y].Objekt <= SCHLEUSE6)) - { - rcRectsrc.left = Bmp[Scape[x][y].Objekt].rcSrc.left; - rcRectsrc.right = Bmp[Scape[x][y].Objekt].rcSrc.right; - if (Scape[x][y].Objekt == MEERWELLEN) - { - i = rand() % 6; - rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top + i*Bmp[Scape[x][y].Objekt].Hoehe; - rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom + i*Bmp[Scape[x][y].Objekt].Hoehe; - } - else - { - rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top; - rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom; - } - rcRectdes.left = Scape[x][y].xScreen + Bmp[Scape[x][y].Objekt].rcDes.left; - rcRectdes.right = Scape[x][y].xScreen + Bmp[Scape[x][y].Objekt].rcDes.right; - rcRectdes.top = Scape[x][y].yScreen + Bmp[Scape[x][y].Objekt].rcDes.top; - rcRectdes.bottom = Scape[x][y].yScreen + Bmp[Scape[x][y].Objekt].rcDes.bottom; - //Landschaftsobjekt zeichnen - Blitten(Direct::lpDDSAnimation, Direct::lpDDSScape, true); - } - } - - //MiniMap zeichnen - rcRectdes.left = 2 * x; - rcRectdes.top = 2 * y; - rcRectdes.right = rcRectdes.left + 2; - rcRectdes.bottom = rcRectdes.top + 2; - - if ((Scape[x][y].Art == 1) && (Scape[x][y].Typ == 0)) //Meer - Direct::ddbltfx.dwFillColor = RGB2DWORD(228, 207, 182); - else - { - if ((Scape[x][y].Typ == 0) && - ((Scape[x][y].Art == 2) || - (Scape[x][y].Art == 3))) //Strand - Direct::ddbltfx.dwFillColor = RGB2DWORD(112, 103, 93); - else - //Land - Direct::ddbltfx.dwFillColor = RGB2DWORD(139 + Scape[x][y].Hoehe * 20, 128 + Scape[x][y].Hoehe * 20, 115 + Scape[x][y].Hoehe * 20); - } - Direct::lpDDSKarte->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - } - -} - -void Zeige() -{ - HRESULT ddrval; - short i; - char Stringsave1[128], Stringsave2[128]; //Für die Zeitausgabe - - rcRectsrc.left = Camera.x + rcSpielflaeche.left; - rcRectsrc.top = Camera.y + rcSpielflaeche.top; - rcRectsrc.right = Camera.x + rcSpielflaeche.right; - rcRectsrc.bottom = Camera.y + rcSpielflaeche.bottom; - rcRectdes.left = rcSpielflaeche.left; - rcRectdes.top = rcSpielflaeche.top; - rcRectdes.right = rcSpielflaeche.right; - rcRectdes.bottom = rcSpielflaeche.bottom; - - Blitten(Direct::lpDDSScape, Direct::lpDDSBack, false); //Landschaft zeichnen - - ZeichneObjekte(); - - ZeichnePanel(); - - //Die TagesZeit ausgeben - Textloeschen(TXTTAGESZEIT); - TextBereich[TXTTAGESZEIT].Aktiv = true; - sprintf(Stringsave1, "%d", Stunden + 6); - sprintf(Stringsave2, "%d", Minuten); - strcpy(StdString, ""); - if (Stunden + 6 < 10) strcat(StdString, "0"); - strcat(StdString, Stringsave1); - strcat(StdString, ":"); - if (Minuten < 10) strcat(StdString, "0"); - strcat(StdString, Stringsave2); - DrawString(StdString, (short)(TextBereich[TXTTAGESZEIT].rcText.left), - (short)(TextBereich[TXTTAGESZEIT].rcText.top), 2); - - if (PapierText != -1) ZeichnePapier(); - - //Die Textsurface blitten - for (i = 0; iBlt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - - if (PapierText != -1) - { - ZeichnePapier(); - rcRectsrc = TextBereich[TXTPAPIER].rcText; - rcRectdes = TextBereich[TXTPAPIER].rcText; - Blitten(Direct::lpDDSSchrift, Direct::lpDDSBack, true); - } - Fade(100, 100, 100); - } - - //Cursor - if (CursorTyp == CUPFEIL) ZeichneBilder(MousePosition.x, MousePosition.y, - CursorTyp, rcGesamt, false, -1); - else ZeichneBilder(MousePosition.x - Bmp[CursorTyp].Breite / 2, - MousePosition.y - Bmp[CursorTyp].Hoehe / 2, - CursorTyp, rcGesamt, false, -1); - //Flippen - while (1) - { - ddrval = Direct::lpDDSPrimary->Flip(NULL, 0); - if (ddrval == DD_OK) - { - break; - } - if (ddrval == DDERR_SURFACELOST) - { - ddrval = Direct::lpDDSPrimary->Restore(); - if (ddrval != DD_OK) - { - break; - } - } - if (ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } - - - if (Nacht) Fade(100, 100, 100); //Das muß hier stehen, damit man die Textnachricht in der Nacht lesen kann - -} - -void ZeigeIntro() -{ - HRESULT ddrval; - short i, z; - - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); - z = 0; - while (1) - { - z++; - ddrval = Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &Direct::ddbltfx); - if (ddrval != DDERR_WASSTILLDRAWING) break; - if (z == 1000) - { - MessageBeep(MB_OK); - break; - } - } - - rcRectsrc.left = Camera.x + rcSpielflaeche.left; - rcRectsrc.top = Camera.y + rcSpielflaeche.top; - rcRectsrc.right = Camera.x + rcSpielflaeche.right; - rcRectsrc.bottom = Camera.y + rcSpielflaeche.bottom; - rcRectdes.left = rcSpielflaeche.left; - rcRectdes.top = rcSpielflaeche.top; - rcRectdes.right = rcSpielflaeche.right; - rcRectdes.bottom = rcSpielflaeche.bottom; - - Blitten(Direct::lpDDSScape, Direct::lpDDSBack, false); //Landschaft zeichnen - - ZeichneObjekte(); - - if (PapierText != -1) ZeichnePapier(); - - //Die Textsurface blitten - for (i = 0; iFlip(NULL, 0); - if (ddrval == DD_OK) - { - break; - } - if (ddrval == DDERR_SURFACELOST) - { - ddrval = Direct::lpDDSPrimary->Restore(); - if (ddrval != DD_OK) - { - break; - } - } - if (ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } - -} - -void ZeigeAbspann() -{ - HRESULT ddrval; - short z; - - Sound::PlaySound(WAVABSPANN, 100); - - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); - z = 0; - while (1) - { - z++; - ddrval = Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &Direct::ddbltfx); - if (ddrval != DDERR_WASSTILLDRAWING) break; - if (z == 1000) - { - MessageBeep(MB_OK); - break; - } - } - if (AbspannZustand == 0) - { - ZeichneBilder((short)MAXX / 2 - Bmp[AbspannListe[AbspannNr][0].Bild].Breite / 2, 100, - AbspannListe[AbspannNr][0].Bild, rcGesamt, false, -1); - for (z = 1; z<10; z++) - { - if (AbspannListe[AbspannNr][z].Aktiv) - AbspannBlt(AbspannListe[AbspannNr][z].Bild, - (short)(100 * sin(pi / MAXY*(Bmp[AbspannListe[AbspannNr][z].Bild].rcDes.top + - Bmp[AbspannListe[AbspannNr][z].Aktiv].Hoehe / 2)))); - } - } - else if (AbspannZustand == 1) - { - rcRectsrc = Bmp[AbspannNr].rcSrc; - rcRectsrc.top += Bmp[AbspannNr].Phase*Bmp[AbspannNr].Hoehe; - rcRectsrc.bottom = rcRectsrc.top + Bmp[AbspannNr].Hoehe; - - rcRectdes.left = 2; - rcRectdes.top = 2; - rcRectdes.right = Bmp[AbspannNr].Breite + 2; - rcRectdes.bottom = Bmp[AbspannNr].Hoehe + 2; - - Blitten(Bmp[AbspannNr].Surface, Direct::lpDDSBack, true); - - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = Bmp[AbspannNr].Breite + 4; - rcRectsrc.bottom = Bmp[AbspannNr].Hoehe + 4; - - rcRectdes.left = (short)MAXX / 2 - rcRectsrc.right * 10 / 2; - rcRectdes.top = (short)MAXY / 2 - rcRectsrc.bottom * 10 / 2; - rcRectdes.right = rcRectdes.left + rcRectsrc.right * 10; - rcRectdes.bottom = rcRectdes.top + rcRectsrc.bottom * 10; - - Blitten(Direct::lpDDSBack, Direct::lpDDSBack, false); - - rcRectsrc.left = 100; - rcRectsrc.top = 2; - rcRectsrc.right = 100 + Bmp[AbspannNr].Breite + 2; - rcRectsrc.bottom = Bmp[AbspannNr].Hoehe + 2; - - rcRectdes.left = 2; - rcRectdes.top = 2; - rcRectdes.right = Bmp[AbspannNr].Breite + 2; - rcRectdes.bottom = Bmp[AbspannNr].Hoehe + 2; - - Blitten(Direct::lpDDSBack, Direct::lpDDSBack, false); - } - //Flippen - while (1) - { - ddrval = Direct::lpDDSPrimary->Flip(NULL, 0); - if (ddrval == DD_OK) - { - break; - } - if (ddrval == DDERR_SURFACELOST) - { - ddrval = Direct::lpDDSPrimary->Restore(); - if (ddrval != DD_OK) - { - break; - } - } - if (ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } -} - -void ZeigeLogo() -{ - HRESULT ddrval; - short z; - - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::ddbltfx.dwFillColor = RGB2DWORD(0, 0, 0); - z = 0; - while (1) - { - z++; - ddrval = Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &Direct::ddbltfx); - if (ddrval != DDERR_WASSTILLDRAWING) break; - if (z == 1000) - { - MessageBeep(MB_OK); - break; - } - } - - rcRectsrc.left = 0; - rcRectsrc.right = 500; - rcRectsrc.top = 0; - rcRectsrc.bottom = 500; - rcRectdes.left = MAXX / 2 - 250; - rcRectdes.right = MAXX / 2 + 250; - rcRectdes.top = MAXY / 2 - 250; - rcRectdes.bottom = MAXY / 2 + 250; - - - Blitten(Direct::lpDDSLogo, Direct::lpDDSBack, false); - - Sound::PlaySound(WAVLOGO, 100); - - //Flippen - while (1) - { - ddrval = Direct::lpDDSPrimary->Flip(NULL, 0); - if (ddrval == DD_OK) - { - break; - } - if (ddrval == DDERR_SURFACELOST) - { - ddrval = Direct::lpDDSPrimary->Restore(); - if (ddrval != DD_OK) - { - break; - } - } - if (ddrval != DDERR_WASSTILLDRAWING) - { - break; - } - } -} - -void AbspannBlt(short Bild, short Prozent) -{ - short x, y; - RGBSTRUCT rgbalt; - - Bmp[Bild].Surface->Lock(NULL, &Direct::ddsd, DDLOCK_WAIT, NULL); - Direct::lpDDSBack->Lock(NULL, &Direct::ddsd2, DDLOCK_WAIT, NULL); - - for (x = 0; x= MAXX) || (x + Bmp[Bild].rcDes.left <= 0) || - (y + Bmp[Bild].rcDes.top >= MAXY) || (y + Bmp[Bild].rcDes.top <= 0)) continue; - GetPixel((short)(x + Bmp[Bild].rcDes.left), - (short)(y + Bmp[Bild].rcDes.top), &Direct::ddsd2); - rgbalt = rgbStruct; - GetPixel((short)(x + Bmp[Bild].rcSrc.left), - (short)(y + Bmp[Bild].rcSrc.top), &Direct::ddsd); - if ((rgbStruct.r == 0) && (rgbStruct.g == 0) && (rgbStruct.b == 0)) continue; - PutPixel((short)(x + Bmp[Bild].rcDes.left), - (short)(y + Bmp[Bild].rcDes.top), - RGB2DWORD(rgbalt.r + (rgbStruct.r - rgbalt.r)*Prozent / 100, - rgbalt.g + (rgbStruct.g - rgbalt.g)*Prozent / 100, - rgbalt.b + (rgbStruct.b - rgbalt.b)*Prozent / 100), - &Direct::ddsd2); - } - - Bmp[Bild].Surface->Unlock(NULL); - Direct::lpDDSBack->Unlock(NULL); - -} - -void AbspannCalc() -{ - short i, k; - - if (AbspannZustand == 0) - { - for (k = 1; k<10; k++) - { - if (AbspannListe[AbspannNr][k].Bild == -1) break; - if (!AbspannListe[AbspannNr][k].Aktiv) continue; - i = 150 / LastBild; - Bmp[AbspannListe[AbspannNr][k].Bild].rcDes.top -= i; - - if (Bmp[AbspannListe[AbspannNr][k].Bild].rcDes.top= Bmp[AbspannNr].Anzahl) - { - Bmp[AbspannNr].Phase = 0; - AbspannNr++; - if (AbspannNr > GUYSCHLEUDER) AbspannNr = GUYLINKS; - } - } - } -} - -void ZeichneBilder(short x, short y, short i, RECT Ziel, bool Reverse, short Frucht) -{ - short Phase; - - if (Frucht == -1) Phase = Bmp[i].Phase; else Phase = Frucht; - rcRectsrc = Bmp[i].rcSrc; - if (!Reverse) - { - rcRectsrc.top += Phase*(Bmp[i].Hoehe); - } - else - { - rcRectsrc.top = Bmp[i].rcSrc.top + (Bmp[i].Anzahl - 1)*Bmp[i].Hoehe - Phase*Bmp[i].Hoehe; - } - rcRectsrc.bottom = rcRectsrc.top + (Bmp[i].Hoehe); - rcRectdes.left = x; - rcRectdes.top = y; - rcRectdes.right = x + (Bmp[i].Breite); - rcRectdes.bottom = y + (Bmp[i].Hoehe); - CalcRect(Ziel); - Blitten(Bmp[i].Surface, Direct::lpDDSBack, true); -} - -void ZeichneObjekte() -{ - short x, y; - bool Guyzeichnen; - - for (y = 0; y Camera.x + rcSpielflaeche.left - KXPIXEL) && - (Scape[x][y].xScreen < Camera.x + rcSpielflaeche.right + KXPIXEL) && - (Scape[x][y].yScreen > Camera.y + rcSpielflaeche.top - KYPIXEL) && - (Scape[x][y].yScreen < Camera.y + rcSpielflaeche.bottom + KYPIXEL) && - (Scape[x][y].Entdeckt) && - ((Scape[x][y].Markiert) || (Scape[x][y].Objekt != -1) || (Guyzeichnen)))) continue; - - if (Scape[x][y].Markiert) //Die Rahmen um die markierten Kacheln malen - { - rcRectsrc.left = KXPIXEL * Scape[x][y].Typ; - rcRectsrc.right = KXPIXEL * Scape[x][y].Typ + KXPIXEL; - rcRectsrc.top = 2 * KYPIXEL; - rcRectsrc.bottom = 3 * KYPIXEL; - rcRectdes.left = Scape[x][y].xScreen - Camera.x; - rcRectdes.right = rcRectdes.left + KXPIXEL; - rcRectdes.top = Scape[x][y].yScreen - Camera.y; - rcRectdes.bottom = rcRectdes.top + KYPIXEL; - CalcRect(rcSpielflaeche); - Blitten(Direct::lpDDSMisc, Direct::lpDDSBack, true); - } - //Landschaftsanimationen malen (und Feld) - if ((Scape[x][y].Objekt != -1) && (LAnimation) && - ((Scape[x][y].Objekt <= SCHLEUSE6)) - || (Scape[x][y].Objekt == FELD) //Der Guy ist immer vor diesen Objekten - || (Scape[x][y].Objekt == ROHR) - || (Scape[x][y].Objekt == SOS)) - { - //Sound abspielen - if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && - ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) - { - if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) - Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 100); - else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) - Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 90); - } - - ZeichneBilder(Scape[x][y].xScreen + Scape[x][y].ObPos.x - Camera.x, - Scape[x][y].yScreen + Scape[x][y].ObPos.y - Camera.y, - Scape[x][y].Objekt, rcSpielflaeche, Scape[x][y].Reverse, - (short)Scape[x][y].Phase); - } - else - { - - if (((Scape[x][y].Objekt >= BAUM1) && (Scape[x][y].Objekt <= BAUM4DOWN)) || - (Scape[x][y].Objekt == BAUMGROSS) || (Scape[x][y].Objekt == FEUER) || - (Scape[x][y].Objekt == WRACK) || (Scape[x][y].Objekt == WRACK2) || - (Scape[x][y].Objekt >= ZELT)) //Bäume und Früchte (und alle anderen Objekte) malen - { - //Sound abspielen - if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && - ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) - { - if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) - Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 100); - else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) - Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 90); - } - if (Guyzeichnen) - { - if ((Guy.PosScreen.y) < (Scape[x][y].yScreen + Scape[x][y].ObPos.y - + Bmp[Scape[x][y].Objekt].Hoehe)) - { - ZeichneGuy(); - Guyzeichnen = false; - } - } - - ZeichneBilder(Scape[x][y].xScreen + Scape[x][y].ObPos.x - Camera.x, - Scape[x][y].yScreen + Scape[x][y].ObPos.y - Camera.y, - Scape[x][y].Objekt, rcSpielflaeche, false, - (short)Scape[x][y].Phase); - } - } - if (Guyzeichnen) ZeichneGuy(); - } -} - -void ZeichneGuy() -{ - if (BootsFahrt) - { - if (Guy.Zustand == GUYSCHIFF) - { - ZeichneBilder(Guy.PosScreen.x - 30 - Camera.x, - Guy.PosScreen.y - 28 - Camera.y, - Guy.Zustand, rcSpielflaeche, false, -1); - } - else - { - ZeichneBilder(Guy.PosScreen.x - (Bmp[Guy.Zustand].Breite) / 2 - Camera.x, - Guy.PosScreen.y - (Bmp[Guy.Zustand].Hoehe) / 2 - Camera.y, - Guy.Zustand, rcSpielflaeche, false, -1); - } - } - else ZeichneBilder(Guy.PosScreen.x - (Bmp[Guy.Zustand].Breite) / 2 - Camera.x, - Guy.PosScreen.y - (Bmp[Guy.Zustand].Hoehe) - Camera.y, - Guy.Zustand, rcSpielflaeche, false, -1); - //Sound abspielen - if (Guy.Aktiv) Sound::PlaySound(Bmp[Guy.Zustand].Sound, 100); -} - -void ZeichnePapier() -{ - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 464; - rcRectsrc.bottom = 77; - rcRectdes.left = TextBereich[TXTPAPIER].rcText.left - 60; - rcRectdes.top = TextBereich[TXTPAPIER].rcText.top - 30; - rcRectdes.right = rcRectdes.left + 464; - rcRectdes.bottom = rcRectdes.top + 77; - Blitten(Direct::lpDDSPapier, Direct::lpDDSBack, true); - rcRectdes.left = rcRectdes.left + 34; - rcRectdes.top = rcRectdes.top + 77; - rcRectdes.right = rcRectdes.right; - rcRectdes.bottom = TextBereich[TXTPAPIER].rcText.top + PapierText; - Direct::ddbltfx.dwFillColor = RGB2DWORD(236, 215, 179); - Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - rcRectsrc.left = 0; - rcRectsrc.top = 77; - rcRectsrc.right = 464; - rcRectsrc.bottom = 154; - rcRectdes.left = TextBereich[TXTPAPIER].rcText.left - 60; - rcRectdes.top = rcRectdes.bottom - 47; - rcRectdes.right = rcRectdes.left + 464; - rcRectdes.bottom = rcRectdes.top + 77; - Blitten(Direct::lpDDSPapier, Direct::lpDDSBack, true); -} - -void ZeichnePanel() -{ - short diffx, diffy, TagesZeit, i, j, Ringtmp; //für die Sonnenanzeige - - //Karte - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 2 * MAXXKACH; - rcRectsrc.bottom = 2 * MAXYKACH; - rcRectdes.left = rcKarte.left; - rcRectdes.top = rcKarte.top; - rcRectdes.right = rcKarte.right; - rcRectdes.bottom = rcKarte.bottom; - Blitten(Direct::lpDDSKarte, Direct::lpDDSBack, false); - - //Spielfigur - rcRectdes.left = rcKarte.left + 2 * Guy.Pos.x; - rcRectdes.top = rcKarte.top + 2 * Guy.Pos.y; - rcRectdes.right = rcRectdes.left + 2; - rcRectdes.bottom = rcRectdes.top + 2; - Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 0); - Direct::lpDDSBack->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - - //Position einmalen - rcRectsrc.left = 205; - rcRectsrc.top = 0; - rcRectsrc.right = 205 + 65; - rcRectsrc.bottom = 0 + 65; - rcRectdes.left = rcKarte.left + (Camera.x + 2 * Camera.y) / (KXPIXEL / 2) - MAXXKACH - 2; - rcRectdes.top = rcKarte.top + (2 * Camera.y - Camera.x) / (KXPIXEL / 2) + MAXYKACH - 21 - 2; - rcRectdes.right = rcRectdes.left + 65; - rcRectdes.bottom = rcRectdes.top + 65; - CalcRect(rcKarte); - Blitten(Direct::lpDDSPanel, Direct::lpDDSBack, true); - - //Panel malen - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 205; - rcRectsrc.bottom = 600; - rcRectdes.left = rcPanel.left; - rcRectdes.top = rcPanel.top; - rcRectdes.right = rcPanel.right; - rcRectdes.bottom = rcPanel.bottom; - Blitten(Direct::lpDDSPanel, Direct::lpDDSBack, true); - - //Gitternetzknopf - if (Gitter) Bmp[BUTTGITTER].Phase = 1; else Bmp[BUTTGITTER].Phase = 0; - ZeichneBilder((short)Bmp[BUTTGITTER].rcDes.left, - (short)Bmp[BUTTGITTER].rcDes.top, - BUTTGITTER, rcPanel, false, -1); - - //SOUNDknopf - if ((Soundzustand == 0) || (Soundzustand == -1)) Bmp[BUTTSOUND].Phase = 1; else Bmp[BUTTSOUND].Phase = 0; - ZeichneBilder((short)Bmp[BUTTSOUND].rcDes.left, - (short)Bmp[BUTTSOUND].rcDes.top, - BUTTSOUND, rcPanel, false, -1); - - //ANIMATIONknopf - if (!LAnimation) Bmp[BUTTANIMATION].Phase = 1; else Bmp[BUTTANIMATION].Phase = 0; - ZeichneBilder((short)Bmp[BUTTANIMATION].rcDes.left, - (short)Bmp[BUTTANIMATION].rcDes.top, - BUTTANIMATION, rcPanel, false, -1); - - //BEENDENknopf - ZeichneBilder((short)Bmp[BUTTBEENDEN].rcDes.left, - (short)Bmp[BUTTBEENDEN].rcDes.top, - BUTTBEENDEN, rcPanel, false, -1); - - //NEUknopf - ZeichneBilder((short)Bmp[BUTTNEU].rcDes.left, - (short)Bmp[BUTTNEU].rcDes.top, - BUTTNEU, rcPanel, false, -1); - - //TAGNEUknopf - ZeichneBilder((short)Bmp[BUTTTAGNEU].rcDes.left, - (short)Bmp[BUTTTAGNEU].rcDes.top, - BUTTTAGNEU, rcPanel, false, -1); - - //Aktionsknopf - if (HauptMenue == MEAKTION) Bmp[BUTTAKTION].Phase = Bmp[BUTTAKTION].Anzahl; - else if (Bmp[BUTTAKTION].Phase == Bmp[BUTTAKTION].Anzahl) Bmp[BUTTAKTION].Phase = 0; - ZeichneBilder((short)Bmp[BUTTAKTION].rcDes.left, - (short)Bmp[BUTTAKTION].rcDes.top, - BUTTAKTION, rcPanel, false, -1); - - //BauKnopf - if (HauptMenue == MEBAUEN) Bmp[BUTTBAUEN].Phase = Bmp[BUTTBAUEN].Anzahl; - else if (Bmp[BUTTBAUEN].Phase == Bmp[BUTTBAUEN].Anzahl) Bmp[BUTTBAUEN].Phase = 0; - ZeichneBilder((short)Bmp[BUTTBAUEN].rcDes.left, - (short)Bmp[BUTTBAUEN].rcDes.top, - BUTTBAUEN, rcPanel, false, -1); - - //Inventarknopf - if (HauptMenue == MEINVENTAR) Bmp[BUTTINVENTAR].Phase = Bmp[BUTTINVENTAR].Anzahl; - else if (Bmp[BUTTINVENTAR].Phase == Bmp[BUTTINVENTAR].Anzahl) Bmp[BUTTINVENTAR].Phase = 0; - ZeichneBilder((short)Bmp[BUTTINVENTAR].rcDes.left, - (short)Bmp[BUTTINVENTAR].rcDes.top, - BUTTINVENTAR, rcPanel, false, -1); - - //WEITERknopf - if (Bmp[BUTTWEITER].Phase != -1) ZeichneBilder((short)Bmp[BUTTWEITER].rcDes.left, - (short)Bmp[BUTTWEITER].rcDes.top, - BUTTWEITER, rcPanel, false, -1); - - //STOPknopf - if (Bmp[BUTTSTOP].Phase != -1) ZeichneBilder((short)Bmp[BUTTSTOP].rcDes.left, - (short)Bmp[BUTTSTOP].rcDes.top, - BUTTSTOP, rcPanel, false, -1); - - //ABLEGENknopf - if (Bmp[BUTTABLEGEN].Phase != -1) ZeichneBilder((short)Bmp[BUTTABLEGEN].rcDes.left, - (short)Bmp[BUTTABLEGEN].rcDes.top, - BUTTABLEGEN, rcPanel, false, -1); - - //Welches Menü zeichnen? - switch (HauptMenue) - { - case MEAKTION: - for (i = BUTTSUCHEN; i <= BUTTSCHLEUDER; i++) - { - if (Bmp[i].Phase == -1) - { - ZeichneBilder((short)Bmp[i].rcDes.left, - (short)Bmp[i].rcDes.top, - BUTTFRAGEZ, rcPanel, false, -1); - continue; - } - ZeichneBilder((short)Bmp[i].rcDes.left, - (short)Bmp[i].rcDes.top, - i, rcPanel, false, -1); - } - break; - case MEBAUEN: - for (i = BUTTZELT; i <= BUTTDESTROY; i++) - { - if (Bmp[i].Phase == -1) - { - ZeichneBilder((short)Bmp[i].rcDes.left, - (short)Bmp[i].rcDes.top, - BUTTFRAGEZ, rcPanel, false, -1); - continue; - } - ZeichneBilder((short)Bmp[i].rcDes.left, - (short)Bmp[i].rcDes.top, - i, rcPanel, false, -1); - } - break; - case MEINVENTAR: - ZeichneBilder((short)Bmp[INVPAPIER].rcDes.left, - (short)Bmp[INVPAPIER].rcDes.top, - INVPAPIER, rcPanel, false, -1); - for (i = ROHAST; i <= ROHSCHLEUDER; i++) - { - if (Guy.Inventar[i] <= 0) continue; - ZeichneBilder((short)Bmp[i].rcDes.left, - (short)Bmp[i].rcDes.top, - i, rcPanel, false, -1); - Bmp[ROEMISCH1].rcDes.top = Bmp[i].rcDes.top; - Bmp[ROEMISCH2].rcDes.top = Bmp[i].rcDes.top; - for (j = 1; j <= Guy.Inventar[i]; j++) - { - if (j<5) - { - ZeichneBilder((short)Bmp[i].rcDes.left + 20 + j * 4, - (short)Bmp[ROEMISCH1].rcDes.top, - ROEMISCH1, rcPanel, false, -1); - } - else if (j == 5) ZeichneBilder((short)Bmp[i].rcDes.left + 23, - (short)Bmp[ROEMISCH2].rcDes.top, - ROEMISCH2, rcPanel, false, -1); - else if ((j>5) && (j<10)) - { - ZeichneBilder((short)Bmp[i].rcDes.left + 20 + j * 4, - (short)Bmp[ROEMISCH1].rcDes.top, - ROEMISCH1, rcPanel, false, -1); - } - else if (j == 10) - ZeichneBilder((short)Bmp[i].rcDes.left + 43, - (short)Bmp[ROEMISCH2].rcDes.top, - ROEMISCH2, rcPanel, false, -1); - } - } - break; - - } - - //Säule1 - i = Bmp[SAEULE1].Hoehe - (short)Guy.Resource[WASSER] * Bmp[SAEULE1].Hoehe / 100; - rcRectsrc = Bmp[SAEULE1].rcSrc; - rcRectsrc.top += i; - rcRectdes = Bmp[SAEULE1].rcDes; - rcRectdes.top += i; - Blitten(Bmp[SAEULE1].Surface, Direct::lpDDSBack, true); - - //Säule2 - i = Bmp[SAEULE2].Hoehe - (short)Guy.Resource[NAHRUNG] * Bmp[SAEULE2].Hoehe / 100; - rcRectsrc = Bmp[SAEULE2].rcSrc; - rcRectsrc.top += i; - rcRectdes = Bmp[SAEULE2].rcDes; - rcRectdes.top += i; - Blitten(Bmp[SAEULE2].Surface, Direct::lpDDSBack, true); - - //Säule3 - i = Bmp[SAEULE3].Hoehe - (short)Guy.Resource[GESUNDHEIT] * Bmp[SAEULE3].Hoehe / 100; - rcRectsrc = Bmp[SAEULE3].rcSrc; - rcRectsrc.top += i; - rcRectdes = Bmp[SAEULE3].rcDes; - rcRectdes.top += i; - Blitten(Bmp[SAEULE3].Surface, Direct::lpDDSBack, true); - - //Sonnenanzeige - diffx = ((short)Bmp[SONNE].rcDes.right - (short)Bmp[SONNE].rcDes.left - Bmp[SONNE].Breite) / 2; - diffy = (short)Bmp[SONNE].rcDes.bottom - (short)Bmp[SONNE].rcDes.top - Bmp[SONNE].Hoehe / 2; - TagesZeit = (Stunden * 10 + Minuten * 10 / 60); - - ZeichneBilder((short)(Bmp[SONNE].rcDes.left + diffx * cos(pi - pi*TagesZeit / 120) + diffx), - (short)(Bmp[SONNE].rcDes.top + (-diffy * sin(pi - pi*TagesZeit / 120) + diffy)), - SONNE, Bmp[SONNE].rcDes, false, -1); - - //Rettungsring - if (Chance < 100) Ringtmp = (short)(100 * sin(pi / 200 * Chance)); - else Ringtmp = 100; - if (Ringtmp > 100) Ringtmp = 100; - ZeichneBilder((short)(Bmp[RING].rcDes.left), - (short)(Bmp[RING].rcDes.top + Ringtmp), - RING, rcPanel, false, -1); - - //Die ChanceZahl ausgeben - Textloeschen(TXTCHANCE); - TextBereich[TXTCHANCE].Aktiv = true; - TextBereich[TXTCHANCE].rcText.top = Bmp[RING].rcDes.top + Ringtmp + Bmp[RING].Hoehe; - TextBereich[TXTCHANCE].rcText.bottom = TextBereich[TXTCHANCE].rcText.top + S2YPIXEL; - sprintf(StdString, "%.1f", Chance); - DrawString(StdString, (short)(TextBereich[TXTCHANCE].rcText.left), - (short)(TextBereich[TXTCHANCE].rcText.top), 2); - - //TextFeld malen - rcRectsrc.left = 0; - rcRectsrc.top = 0; - rcRectsrc.right = 605; - rcRectsrc.bottom = 20; - rcRectdes = rcTextFeld1; - Blitten(Direct::lpDDSTextFeld, Direct::lpDDSBack, false); -} - -void DrawString(char *string, short x, short y, short Art) -{ - short length, index, cindex, Breite, Hoehe; - - if (Art == 1) - { - Breite = S1XPIXEL; - Hoehe = S1YPIXEL; - } - if (Art == 2) - { - Breite = S2XPIXEL; - Hoehe = S2YPIXEL; - } - - // Länge der Schrift ermitteln - length = strlen(string); - - // Alle Zeichen durchgehen - for (index = 0; index= ' ') && (string[index] <= '/')) - { - rcRectsrc.left = cindex*Breite; - rcRectsrc.top = 0; - } - if ((string[index] >= '0') && (string[index] <= '?')) - { - rcRectsrc.left = (cindex - 16)*Breite; - rcRectsrc.top = Hoehe; - } - if ((string[index] >= '@') && (string[index] <= 'O')) - { - rcRectsrc.left = (cindex - 16 * 2)*Breite; - rcRectsrc.top = 2 * Hoehe; - } - if ((string[index] >= 'P') && (string[index] <= '_')) - { - rcRectsrc.left = (cindex - 16 * 3)*Breite; - rcRectsrc.top = 3 * Hoehe; - } - if ((string[index]>'_') && (string[index] <= 'o')) - { - rcRectsrc.left = (cindex - 16 * 4)*Breite; - rcRectsrc.top = 4 * Hoehe; - } - if ((string[index] >= 'p') && (string[index] <= '~')) - { - rcRectsrc.left = (cindex - 16 * 5)*Breite; - rcRectsrc.top = 5 * Hoehe; - } - - rcRectsrc.right = rcRectsrc.left + Breite; - rcRectsrc.bottom = rcRectsrc.top + Hoehe; - rcRectdes.left = x; - rcRectdes.top = y; - rcRectdes.right = x + Breite; - rcRectdes.bottom = y + Hoehe; - //Zeichen zeichnen - if (Art == 1) - { - Blitten(Direct::lpDDSSchrift1, Direct::lpDDSSchrift, true); - //x Position weiterschieben - x += S1ABSTAND; - } - if (Art == 2) - { - Blitten(Direct::lpDDSSchrift2, Direct::lpDDSSchrift, true); - //x Position weiterschieben - x += S2ABSTAND; - } - } -} - -short DrawText(int TEXT, short Bereich, short Art) -{ - short BBreite, BHoehe, Posx, Posy; - short Pos; char *Posnext, *Posnext2; - char Text[1024]; - int blank = ' '; - int slash = '/'; - int strend = 0x0; - char scratch;//Zur Variablenausgabe - char StdString2[10];//Zur Variablenausgabe - short Anzahl; //Zur Variablenausgabe - short Erg; - - Textloeschen(Bereich); - TextBereich[Bereich].Aktiv = true; - - if (Art == 1) - { - BBreite = S1ABSTAND; - BHoehe = S1YPIXEL; - } - if (Art == 2) - { - BBreite = S2ABSTAND; - BHoehe = S2YPIXEL; - } - LoadString(Direct::g_hInst, TEXT, Text, 1024); - Posx = (short)TextBereich[Bereich].rcText.left; - Posy = (short)TextBereich[Bereich].rcText.top; - Pos = 0; - Posnext = Text; - - while (1) - { - strcpy(StdString, ""); - Pos = Posnext - Text; - Posnext = strchr(Text + Pos + 1, blank); - Posnext2 = strchr(Text + Pos + 1, slash); - if ((Posnext != NULL) && (Posnext2 != NULL) && (Posnext2 <= Posnext)) - { - scratch = *(Posnext2 + 1); - switch (scratch) - { - case 'a': - Anzahl = sprintf(StdString2, " %d", Tag); - DrawString(StdString2, Posx, Posy, Art); - Posx += BBreite*(Anzahl); - break; - case 'b': - Anzahl = sprintf(StdString2, " %d", (short)Guy.Resource[GESUNDHEIT]); - DrawString(StdString2, Posx, Posy, Art); - Posx += BBreite*(Anzahl); - break; - case 'c': - Anzahl = sprintf(StdString2, " %.2f", Chance); - DrawString(StdString2, Posx, Posy, Art); - Posx += BBreite*(Anzahl); - break; - case 'd': - Frage = 0; - rcRectsrc = Bmp[JA].rcSrc; - rcRectdes.left = (short)TextBereich[Bereich].rcText.left + 50; - rcRectdes.top = Posy + 50; - rcRectdes.right = rcRectdes.left + Bmp[JA].Breite; - rcRectdes.bottom = rcRectdes.top + Bmp[JA].Hoehe; - Bmp[JA].rcDes = rcRectdes; - Blitten(Bmp[JA].Surface, Direct::lpDDSSchrift, false); - - rcRectsrc = Bmp[NEIN].rcSrc; - rcRectdes.left = (short)TextBereich[Bereich].rcText.left + 220; - rcRectdes.top = Posy + 50; - rcRectdes.right = rcRectdes.left + Bmp[NEIN].Breite; - rcRectdes.bottom = rcRectdes.top + Bmp[NEIN].Hoehe; - Bmp[NEIN].rcDes = rcRectdes; - Blitten(Bmp[NEIN].Surface, Direct::lpDDSSchrift, false); - Posy += 115; - break; - case 'z': - Posx = (short)TextBereich[Bereich].rcText.left - BBreite; - Posy += BHoehe + 3; - break; - } - Pos = Pos + 3; - Posnext = Posnext2 + 2; - } - if (Posnext == NULL) Posnext = strchr(Text + Pos + 1, strend); - strncpy(StdString, Text + Pos, (Posnext - Text) - Pos); - if (Posx + BBreite*((Posnext - Text) - Pos) > TextBereich[Bereich].rcText.right) - { - Posx = (short)TextBereich[Bereich].rcText.left - BBreite; - Posy += BHoehe + 3; - } - StdString[(Posnext - Text) - Pos] = (char)0; - DrawString(StdString, Posx, Posy, Art); - if (Posnext[0] == (char)0) break; - Posx += BBreite*((Posnext - Text) - Pos); - } - Erg = (short)(Posy + BHoehe - TextBereich[Bereich].rcText.top); - if (Erg < 100) Erg = 100; - return Erg; -} - -void Textloeschen(short Bereich) -{ - TextBereich[Bereich].Aktiv = false; - Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 255); - Direct::lpDDSSchrift->Blt(&TextBereich[Bereich].rcText, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); -} - -void DrawSchatzkarte() -{ - Textloeschen(TXTPAPIER); - TextBereich[TXTPAPIER].Aktiv = true; - PapierText = SKARTEY; - - rcRectsrc.left = 0; - rcRectsrc.right = SKARTEX; - rcRectsrc.top = 0; - rcRectsrc.bottom = SKARTEY; - rcRectdes.left = TextBereich[TXTPAPIER].rcText.left; - rcRectdes.top = TextBereich[TXTPAPIER].rcText.top; - rcRectdes.right = rcRectdes.left + SKARTEX; - rcRectdes.bottom = rcRectdes.top + SKARTEY; - - Blitten(Direct::lpDDSSchatzkarte, Direct::lpDDSSchrift, false); -} - -void CalcRect(RECT rcBereich) -{ - if (rcRectdes.left< rcBereich.left) - { - rcRectsrc.left = rcRectsrc.left + rcBereich.left - rcRectdes.left; - rcRectdes.left = rcBereich.left; - } - if (rcRectdes.top< rcBereich.top) - { - rcRectsrc.top = rcRectsrc.top + rcBereich.top - rcRectdes.top; - rcRectdes.top = rcBereich.top; - } - if (rcRectdes.right> rcBereich.right) - { - rcRectsrc.right = rcRectsrc.right + rcBereich.right - rcRectdes.right; - rcRectdes.right = rcBereich.right; - } - if (rcRectdes.bottom> rcBereich.bottom) - { - rcRectsrc.bottom = rcRectsrc.bottom + rcBereich.bottom - rcRectdes.bottom; - rcRectdes.bottom = rcBereich.bottom; - } -} - -void MarkRoute(bool Mark) -{ - short i; - - for (i = 0; i < RouteLaenge; i++) - { - Scape[Route[i].x][Route[i].y].Markiert = Mark; - } -} - -void CheckSpzButton() -{ - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FELD) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= FEUERSTELLE) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase >= Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl) && - (Bmp[BUTTSTOP].Phase == -1)) - { - if (Bmp[BUTTWEITER].Phase == -1) Bmp[BUTTWEITER].Phase = 0; - } - else Bmp[BUTTWEITER].Phase = -1; - - if ((Bmp[BUTTSTOP].Phase == -1) && (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BOOT) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) || - ((BootsFahrt) && - (((Scape[Guy.Pos.x - 1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x - 1][Guy.Pos.y].Objekt == -1)) || - ((Scape[Guy.Pos.x][Guy.Pos.y - 1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y - 1].Objekt == -1)) || - ((Scape[Guy.Pos.x + 1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x + 1][Guy.Pos.y].Objekt == -1)) || - ((Scape[Guy.Pos.x][Guy.Pos.y + 1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y + 1].Objekt == -1)))))) - { - if (Bmp[BUTTABLEGEN].Phase == -1) Bmp[BUTTABLEGEN].Phase = 0; - } - else Bmp[BUTTABLEGEN].Phase = -1; -} - -bool CheckRohstoff() -{ - short i; - short Benoetigt; //Anzahl der Gesamtbenötigten Rohstoffe - float GebrauchtTmp; //Soviel Rohstoffe werden für diesen Schritt benötigt - short Gebraucht; //Soviel Rohstoffe werden für diesen Schritt benötigt - bool Check; //Wenn kein Rohstoff mehr vorhanden nur noch einmal die While-Schleife - - Benoetigt = 0; - for (i = 0; i 0) && - (Guy.Inventar[i] > 0)) - { - Guy.Inventar[i]--; - Scape[Guy.Pos.x][Guy.Pos.y].Rohstoff[i]--; - Gebraucht--; - if (Gebraucht == 0) return true; - Check = true; - } - } - if (Check == false) break; - } - PapierText = DrawText(ROHSTOFFNICHT, TXTPAPIER, 1); - Guy.AkNummer = 0; - Guy.Aktion = AKABBRUCH; - Bmp[BUTTSTOP].Phase = -1; - return false; -} - -void Event(short Eventnr) -{ - if (Eventnr != AKNICHTS) - { - MarkRoute(false); - RouteZiel.x = -1; - RouteZiel.y = -1; - } - switch (Eventnr) - { - case AKNICHTS: - break; - case AKSUCHEN: - Action::AkSuchen(); - break; - case AKESSEN: - Action::AkEssen(); - break; - case AKTRINKEN: - Action::AkTrinken(); - break; - case AKFAELLEN: - Action::AkFaellen(); - break; - case AKFELD: - Action::AkFeld(); - break; - case AKTAGENDE: - Action::AkTagEnde(); - break; - case AKGERETTET: - Action::AkGerettet(); - break; - case AKZELT: - Action::AkZelt(); - break; - case AKSCHLAFEN: - Action::AkSchlafen(); - break; - case AKABBRUCH: - Action::AkAbbruch(); - break; - case AKANGELN: - Action::AkAngeln(); - break; - case AKBOOT: - Action::AkBoot(); - break; - case AKABLEGEN: - Action::AkAblegen(); - break; - case AKANLEGEN: - Action::AkAnlegen(); - break; - case AKROHR: - Action::AkRohr(); - break; - case AKDESTROY: - Action::AkDestroy(); - break; - case AKSOS: - Action::AkSOS(); - break; - case AKHAUS1: - Action::AkHaus1(); - break; - case AKHAUS2: - Action::AkHaus2(); - break; - case AKHAUS3: - Action::AkHaus3(); - break; - case AKFEUERSTELLE: - Action::AkFeuerstelle(); - break; - case AKANZUENDEN: - Action::AkAnzuenden(); - break; - case AKAUSSCHAU: - Action::AkAusschau(); - break; - case AKSCHATZ: - Action::AkSchatz(); - break; - case AKINTRO: - Action::AkIntro(); - break; - case AKSCHLEUDER: - Action::AkSchleuder(); - break; - case AKSPIELVERLASSEN: - Action::AkSpielverlassen(); - break; - case AKNEUBEGINNEN: - Action::AkNeubeginnen(); - break; - case AKTAGNEUBEGINNEN: - Action::AkTagNeubeginnen(); - break; - case AKTOD: - Action::AkTod(); - break; - } -} - -namespace Action -{ - void AkIntro() - { - short x; - - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - //Intro Route herstellen - Guy.Aktiv = true; - RoutePunkt = -1; - Steps = 0; - Step = 0; - RouteStart.x = Guy.Pos.x; - RouteStart.y = Guy.Pos.y; - RouteZiel.y = Guy.Pos.y; - for (x = Guy.Pos.x; x 10) Game::SaveGame(); - Spielzustand = SZABSPANN; - } - Frage = -1; - break; - } - } - - void AkTod() - { - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTWARTEN; - else Guy.Zustand = GUYWARTEN; - PapierText = DrawText(TOD, TXTPAPIER, 1); - break; - case 2: - if (!BootsFahrt) - { - Guy.Aktiv = true; - Guy.Zustand = GUYHINLEGEN; - } - break; - case 3: - Guy.Aktiv = true; - Nacht = false; - Fade(100, 100, 100); - if (BootsFahrt) Guy.Zustand = GUYBOOTTOD; - else Guy.Zustand = GUYTOD; - break; - case 4: - Guy.Aktiv = true; - Nacht = true; - Guy.Zustand = GUYWARTEN; - PapierText = DrawText(TAGNEU, TXTPAPIER, 1); - break; - case 5: - Nacht = false; - if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; - else Guy.Zustand = GUYLINKS; - Guy.Aktion = AKNICHTS; - if (Frage == 2) - { - Spielzustand = SZABSPANN; - } - else Game::NeuesSpiel(false); - Frage = -1; - break; - } - } - - void AkAbbruch() - { - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x = Guy.PosScreen.x; - Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y = Guy.PosScreen.y; - - ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2), - ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); - break; - case 2: - Guy.Aktion = AKNICHTS; - break; - } - } - - - void AkDestroy() - { - short i; //Um sich kurz das Objekt zu merken - - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite + 4, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe); - break; - case 2: case 4: - Guy.Aktiv = true; - Guy.Zustand = GUYFAELLEN; - AddResource(WASSER, -1); - AddResource(NAHRUNG, -1); - AddTime(0, 5); - break; - case 3: case 5: - Guy.Aktiv = true; - Guy.Zustand = GUYSCHLAGEN; - AddResource(WASSER, -1); - AddResource(NAHRUNG, -1); - AddTime(0, 5); - break; - case 6: - if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS) Chance -= 0.1f; - i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt; - if ((i >= HAUS1) && (i <= HAUS3)) Scape[Guy.Pos.x][Guy.Pos.y].Objekt = BAUMGROSS; - else - { - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = 0; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = 0; - Scape[Guy.Pos.x][Guy.Pos.y].Phase = -1; - } - Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; - if (i == ROHR) FillRohr(); - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 7: - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkSuchen() - { - ZWEID Ziel; - ZWEID Erg; - short i; - - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - while (1) - { - Ziel.x = Scape[Guy.Pos.x][Guy.Pos.y].xScreen + rand() % KXPIXEL; - Ziel.y = Scape[Guy.Pos.x][Guy.Pos.y].yScreen + rand() % KYPIXEL; - Erg = GetKachel(Ziel.x, Ziel.y); - if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) break; //Wenn das gefundene Ziel in der Kachel, dann fertig - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: case 3: case 5: case 7: - if (BootsFahrt) - { - if (Guy.AkNummer == 1) - { - Guy.Aktiv = true; - Guy.PosScreen.y -= 2; - Guy.Zustand = GUYTAUCHEN1; - Sound::PlaySound(WAVPLATSCH, 100); - } - } - else ShortRoute(Ziel.x, Ziel.y); - break; - case 2: case 4: case 6: case 8: - Guy.Aktiv = true; - if (BootsFahrt) - { - if (Guy.AkNummer == 2) - { - Guy.PosScreen.y += 5; - } - Guy.Zustand = GUYTAUCHEN2; - } - else Guy.Zustand = GUYSUCHEN; - AddTime(0, 4); - break; - case 9: - if (BootsFahrt) - { - Guy.Aktiv = true; - Guy.Zustand = GUYTAUCHEN3; - Sound::PlaySound(WAVPLATSCH, 100); - } - break; - case 10: - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 11: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; - //Auf Strand und Fluss - if ((Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6))) - { - - if (Guy.Inventar[ROHSTEIN] < 10) - { - PapierText = DrawText(ROHSTEINGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHSTEIN] += 3; - if (Guy.Inventar[ROHSTEIN] > 10) Guy.Inventar[ROHSTEIN] = 10; - } - else PapierText = DrawText(ROHSTEINZUVIEL, TXTPAPIER, 1); - - } - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BUSCH) - { - i = rand() % 2; - switch (i) - { - case 0: - if (Guy.Inventar[ROHAST] < 10) - { - PapierText = DrawText(ROHASTGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHAST]++; - } - else PapierText = DrawText(ROHASTZUVIEL, TXTPAPIER, 1); - break; - case 1: - if (Guy.Inventar[ROHBLATT] < 10) - { - PapierText = DrawText(ROHBLATTGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHBLATT]++; - } - else PapierText = DrawText(ROHBLATTZUVIEL, TXTPAPIER, 1); - break; - } - } - else if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUMGROSS)) || - ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) - { - i = rand() % 3; - switch (i) - { - case 0: - if (Guy.Inventar[ROHAST] < 10) - { - PapierText = DrawText(ROHASTGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHAST]++; - } - else PapierText = DrawText(ROHASTZUVIEL, TXTPAPIER, 1); - break; - case 1: - if (Guy.Inventar[ROHBLATT] < 10) - { - PapierText = DrawText(ROHBLATTGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHBLATT]++; - } - else PapierText = DrawText(ROHBLATTZUVIEL, TXTPAPIER, 1); - break; - case 2: - if (Guy.Inventar[ROHLIANE] < 10) - { - PapierText = DrawText(ROHLIANEGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHLIANE]++; - } - else PapierText = DrawText(ROHLIANEZUVIEL, TXTPAPIER, 1); - break; - } - } - else if (BootsFahrt) - { - if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK) - { - if (Guy.Inventar[ROHFERNROHR] == 0) - { - PapierText = DrawText(FERNROHRGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHFERNROHR] = 1; - Bmp[BUTTAUSSCHAU].Phase = 0; - Guy.Inventar[ROHHAMMER] = 1; - Bmp[BUTTHAUS1].Phase = 0; - Bmp[BUTTHAUS2].Phase = 0; - Bmp[BUTTHAUS3].Phase = 0; - } - else PapierText = DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); - } - else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == WRACK2) - { - if (Guy.Inventar[ROHKARTE] == 0) - { - PapierText = DrawText(KARTEGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHKARTE] = 1; - Bmp[BUTTSCHATZKARTE].Phase = 0; - Guy.Inventar[ROHSCHAUFEL] = 1; - Bmp[BUTTSCHATZ].Phase = 0; - } - else PapierText = DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); - } - else PapierText = DrawText(NICHTSGEFUNDEN2, TXTPAPIER, 1); - } - else - { - PapierText = DrawText(NICHTSGEFUNDEN, TXTPAPIER, 1); - } - break; - case 12: - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkEssen() - { - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 2); - break; - case 2: case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYESSEN; - AddResource(NAHRUNG, 15); - AddTime(0, 2); - break; - case 4: - Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 5: - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkSchleuder() - { - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 - 14, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 9); - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYSCHLEUDER; - Guy.PosScreen.x += 5; - AddTime(0, 2); - Sound::PlaySound(WAVSCHLEUDER, 100); - break; - case 3: - Guy.PosScreen.x -= 5; - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 + 6, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 2); - break; - case 4: - Guy.Aktiv = true; - Guy.Zustand = GUYSUCHEN; - AddResource(NAHRUNG, 5); - AddTime(0, 20); - break; - case 5: - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 6: - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkTrinken() - { - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - ShortRoute(Guy.PosScreen.x - 4, - Guy.PosScreen.y - 2); - break; - case 2: case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYTRINKEN; - AddResource(WASSER, 30); - AddTime(0, 3); - break; - case 4: - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 5: - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkFaellen() - { - short i; - - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 + 9, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 3); - break; - case 2: case 3: case 4: case 5: case 6: - Guy.Aktiv = true; - Guy.Zustand = GUYFAELLEN; - AddResource(WASSER, -2); - AddResource(NAHRUNG, -2); - AddTime(0, 10); - break; - case 7: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - i = Scape[Guy.Pos.x][Guy.Pos.y].Objekt + (BAUM1DOWN - BAUM1); - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = i; - Scape[Guy.Pos.x][Guy.Pos.y].Phase = 0; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x -= 17; - Sound::PlaySound(WAVBAUMFAELLT, 100); - break; - case 8: - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 9: - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; - Guy.Inventar[ROHSTAMM]++; - if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; - Guy.Inventar[ROHAST] += 5; - if (Guy.Inventar[ROHAST] > 10) Guy.Inventar[ROHAST] = 10; - Guy.Inventar[ROHBLATT] += 5; - if (Guy.Inventar[ROHBLATT] > 10) Guy.Inventar[ROHBLATT] = 10; - Guy.Inventar[ROHLIANE] += 2; - if (Guy.Inventar[ROHLIANE] > 10) Guy.Inventar[ROHLIANE] = 10; - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkAngeln() - { - - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) - { - case FLUSS1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 35, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); - break; - case FLUSS2: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 19, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); - break; - case FLUSS3: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 22, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 20); - break; - case FLUSS4: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 34, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 23); - break; - case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 34, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 33); - break; - case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 20, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 33); - break; - case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 22, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); - break; - case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + 32, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + 26); - break; - } - break; - case 2: - Guy.Aktiv = true; - Sound::PlaySound(WAVANGEL, 100); - if (BootsFahrt) - { - Guy.PosScreen.y -= 2; - Guy.Zustand = GUYBOOTANGELN1; - } - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) - { - case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - Guy.Zustand = GUYANGELN1LINKS; - break; - case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - Guy.Zustand = GUYANGELN1OBEN; - break; - case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - Guy.Zustand = GUYANGELN1RECHTS; - break; - case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - Guy.Zustand = GUYANGELN1UNTEN; - break; - } - break; - case 3: case 4: case 5: case 6: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN2; - - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) - { - case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - Guy.Zustand = GUYANGELN2LINKS; - break; - case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - Guy.Zustand = GUYANGELN2OBEN; - break; - case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - Guy.Zustand = GUYANGELN2RECHTS; - break; - case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - Guy.Zustand = GUYANGELN2UNTEN; - break; - } - Guy.Resource[GESUNDHEIT] += 2; - AddTime(0, 20); - break; - case 7: - Guy.Aktiv = true; - if (BootsFahrt) Guy.Zustand = GUYBOOTANGELN3; - - switch (Scape[Guy.Pos.x][Guy.Pos.y].Objekt) - { - case FLUSS1: case FLUSS6: case FLUSS7: case MUENDUNG2: case QUELLE2: case SCHLEUSE2: case SCHLEUSE3: - Guy.Zustand = GUYANGELN3LINKS; - break; - case FLUSS2: case FLUSS5: case FLUSS9: case MUENDUNG1: case QUELLE1: case SCHLEUSE1: case SCHLEUSE5: - Guy.Zustand = GUYANGELN3OBEN; - break; - case FLUSS3: case FLUSS8: case MUENDUNG4: case QUELLE3: case SCHLEUSE4: - Guy.Zustand = GUYANGELN3RECHTS; - break; - case FLUSS4: case FLUSS10: case MUENDUNG3: case QUELLE4: case SCHLEUSE6: - Guy.Zustand = GUYANGELN3UNTEN; - break; - } - break; - case 8: - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 9: - Guy.Resource[NAHRUNG] += 20; - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkAnzuenden() - { - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].xScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Breite / 2 - 10, - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y - + Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Hoehe + 1); - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYANZUENDEN; - Guy.PosScreen.x += 5; - AddTime(0, 1); - break; - case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = FEUER; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[FEUER].rcDes.left; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[FEUER].rcDes.top; - Chance += 2 + 2 * Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - AddTime(0, 2); - Guy.PosScreen.x -= 5; - break; - case 4: - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 5: - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkAusschau() - { - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - } - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - Guy.Aktiv = true; - Guy.Zustand = GUYAUSSCHAU; - AddTime(0, 40); - Chance += 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - AddTime(0, 40); - break; - case 3: - Guy.Aktiv = true; - Guy.Zustand = GUYAUSSCHAU; - AddTime(0, 40); - break; - case 4: - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - break; - case 5: - Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkSchatz() - { - if (Guy.AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; - } - Guy.AkNummer++; - - switch (Guy.AkNummer) - { - case 1: - Guy.PosScreen.x -= 5; - Guy.PosScreen.y += 1; - Guy.Aktiv = true; - Guy.Zustand = GUYSCHAUFELN; - break; - case 2: - AddTime(0, 20); - AddResource(WASSER, -10); - AddResource(NAHRUNG, -10); - Guy.PosScreen.x += 5; - Guy.PosScreen.y -= 1; - ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - if (((Guy.Pos.x == SchatzPos.x) && (Guy.Pos.y == SchatzPos.y)) && - (!SchatzGef)) - { - PapierText = DrawText(SCHATZGEFUNDEN, TXTPAPIER, 1); - Guy.Inventar[ROHSTREICHHOLZ] = 1; - Bmp[BUTTANZUENDEN].Phase = 0; - SchatzGef = true; - } - else PapierText = DrawText(KEINSCHATZ, TXTPAPIER, 1); - break; - case 3: - Guy.Aktion = AKNICHTS; - break; - } - } - - void AkFeld() - { - short i; - - if (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - for (i = 0; i= BAUM1DOWN) && - (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4DOWN)) - { - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = -1; - Guy.Inventar[ROHSTAMM]++; - if (Guy.Inventar[ROHSTAMM] > 10) Guy.Inventar[ROHSTAMM] = 10; - } - - //Je nach Schlafort Zustand verändern - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - { - AddResource(GESUNDHEIT, -5); - if (Guy.Resource[GESUNDHEIT] <= 0) - { - Guy.Aktiv = true; - PapierText = DrawText(TAGENDE5, TXTPAPIER, 1); - Guy.AkNummer = 2; - Guy.Aktion = AKTOD; - Stunden = 0; - Minuten = 0; - } - else - { - Guy.Aktiv = true; - PapierText = DrawText(TAGENDE2, TXTPAPIER, 1); - } - } - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - { - AddResource(GESUNDHEIT, +20); - Guy.Aktiv = true; - PapierText = DrawText(TAGENDE4, TXTPAPIER, 1); - } - else if (BootsFahrt) - { - Guy.Aktiv = true; - Guy.Zustand = GUYBOOTWARTEN; - PapierText = DrawText(TAGENDE3, TXTPAPIER, 1); - Guy.AkNummer = 2; - Guy.Aktion = AKTOD; - Stunden = 0; - Minuten = 0; - } - else - { - AddResource(GESUNDHEIT, -20); - if (Guy.Resource[GESUNDHEIT] <= 0) - { - Guy.Aktiv = true; - PapierText = DrawText(TAGENDE5, TXTPAPIER, 1); - Guy.AkNummer = 2; - Guy.Aktion = AKTOD; - Stunden = 0; - Minuten = 0; - } - else - { - Guy.Aktiv = true; - PapierText = DrawText(TAGENDE1, TXTPAPIER, 1); - } - } - break; - case 8: - Fade(20, 20, 30); - Nacht = false; - Tag++; - Stunden = 0; - Minuten = 0; - //if (BootsFahrt) Game::NeuesSpiel(true); //Später hier tot!! - - Guy.Aktiv = true; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFZELT; - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFHAUS; - else Guy.Zustand = GUYSCHLAFEN; - break; - case 9: - Fade(40, 40, 40); - Stunden = 0; - Minuten = 0; - - Stunden = 0; Minuten = 0; - Guy.Aktiv = true; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFZELT; - else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - Guy.Zustand = GUYSCHLAFHAUS; - else Guy.Zustand = GUYSCHLAFEN; - break; - case 10: - Fade(70, 60, 60); - Stunden = 0; - Minuten = 0; - Sound::StopSound(WAVSCHNARCHEN); - Guy.Aktiv = true; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - { - Guy.PosScreen.x -= 14; - Guy.Zustand = GUYGEHAUSHAUS; - } - else Guy.Zustand = GUYAUFSTEHEN; - break; - case 11: - Fade(90, 80, 80); - Stunden = 0; - Minuten = 0; - if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3) && - (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) - { - Guy.Aktiv = true; - Guy.Zustand = GUYKLETTERN2; - } - break; - case 12: - Fade(100, 100, 100); - Stunden = 0; - Minuten = 0; - Guy.Zustand = GUYLINKS; - Guy.Aktion = AKNICHTS; - if (Guy.Resource[GESUNDHEIT] > 10) Game::SaveGame(); - break; - } - } - - void AkGerettet() - { - ZWEID Erg; - short x; - - Guy.AkNummer++; - switch (Guy.AkNummer) - { - case 1: - Erg = GetKachel(Guy.PosAlt.x, Guy.PosAlt.y); - if ((Erg.x == Guy.Pos.x) && (Erg.y == Guy.Pos.y)) ShortRoute(Guy.PosAlt.x, Guy.PosAlt.y); - else if (RoutePunkt % 2 == 0) ShortRoute(RouteKoor[RoutePunkt].x, RouteKoor[RoutePunkt].y); //Nur bis zur Mitte der aktuellen Kacheln laufen - else ShortRoute(RouteKoor[RoutePunkt + 1].x, RouteKoor[RoutePunkt + 1].y); - TwoClicks = -1; //Keine Ahnung warum ich das hier machen muß - break; - case 2: - Guy.Aktiv = true; - Guy.Zustand = GUYWARTEN; - PapierText = DrawText(GERETTET, TXTPAPIER, 1); - break; - case 3: - if (Frage == 2) - { - Guy.Aktion = AKNICHTS; - Frage = -1; - break; - } - Spielzustand = SZGERETTET; - Frage = -1; - break; - case 4: - // Route herstellen - Guy.Aktiv = true; - Guy.Zustand = GUYLINKS; - RoutePunkt = -1; - Steps = 0; - Step = 0; - RouteStart.x = Guy.Pos.x; - RouteStart.y = Guy.Pos.y; - RouteZiel.y = Guy.Pos.y; - for (x = MAXXKACH - 1; x>1; x--)//Position des Rettungsschiffs festlegen - { - if (Scape[x][Guy.Pos.y].Art != 1) break; - RouteZiel.x = x + 1; - } - //Schiff hinbauen - Scape[RouteZiel.x][RouteZiel.y].Phase = 0; - Scape[RouteZiel.x][RouteZiel.y].Objekt = GUYSCHIFF; - Scape[RouteZiel.x][RouteZiel.y].ObPos.x = 10; - Scape[RouteZiel.x][RouteZiel.y].ObPos.y = 10; - RouteZiel.x -= 2; - FindTheWay(); - Guy.Zustand = GUYLINKS; - break; - case 5: - Guy.Zustand = GUYLINKS; - ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].x) / 2), - ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); - break; - case 6: - Guy.Pos.x += 2; - Guy.Zustand = GUYSCHWIMMEN; - ShortRoute(((Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2), - ((Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2)); - break; - case 7: - Guy.PosScreen.y -= 10; - if (!BootsFahrt) ChangeBootsFahrt(); - Guy.Aktiv = true; - Guy.Zustand = GUYSCHIFF; - RoutePunkt = -1; - Steps = 0; - Step = 0; - RouteStart.x = Guy.Pos.x; - RouteStart.y = Guy.Pos.y; - RouteZiel.y = Guy.Pos.y; - RouteZiel.x = MAXXKACH - 2; - FindTheWay(); - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.x = (short)Bmp[MEERWELLEN].rcDes.left; - Scape[Guy.Pos.x][Guy.Pos.y].ObPos.y = (short)Bmp[MEERWELLEN].rcDes.top; - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = MEERWELLEN; - break; - case 8: - Guy.Aktiv = true; - Guy.Zustand = GUYSCHIFF; - break; - case 9: - Guy.Aktion = AKNICHTS; - Guy.Zustand = GUYLINKS; - Spielzustand = SZABSPANN; - break; - } - } - - void AkZelt() - { - short i; - - if (Scape[Guy.Pos.x][Guy.Pos.y].AkNummer == 0) - { - Guy.PosAlt = Guy.PosScreen; //Die Originalposition merken - Scape[Guy.Pos.x][Guy.Pos.y].Objekt = ZELT; - for (i = 0; i= Mittex) break; - y = Mittey - l - 1; - //Als erstes den oberen Bereich von links nach rechts durchgehen - for (x = Mittex - l; x <= Mittex + l; x++) - { - gefunden = false; - i = 0; - while (!gefunden) //Passendes Teil finden und Hoehe festlegen - { - i += 1; - if (i == 1000) { gefunden = true; } - - Scape[x][y].Typ = rand() % 13; - for (j = 0; j<10; j++) - { - if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 1))) - { - Scape[x][y].Typ = rand() % 13; - } - } - - if ((x == Mittex - l) || ((x != Mittex - l) - && ((Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] != 0)))) - { - if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe + 1; - gefunden = true; - } - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][2][3] == 2) && (Vierecke[Scape[x + 1][y + 1].Typ][1][4] == 2)) || - ((Vierecke[Scape[x][y].Typ][2][1] == 2) && (Vierecke[Scape[x + 1][y + 1].Typ][1][2] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if (((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) && - ((Scape[x][y + 1].Typ == 0) && (Scape[x][y + 1].Hoehe == 0))) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - - } - } - - //Teil rechts-oben - x = Mittex + l + 1; - y = Mittey - l - 1; - gefunden = false; - i = 0; - while (!gefunden) //Passendes Teil finden und Hoehe festlegen - { - i += 1; - if (i == 1000) { gefunden = true; } - - Scape[x][y].Typ = rand() % 13; - for (j = 0; j<10; j++) - { - if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 5))) - { - Scape[x][y].Typ = rand() % 13; - } - } - - if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe + 1; - gefunden = true; - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][1] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if ((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } - - //Den rechten Bereich von oben nach unten durchgehen - x = Mittex + l + 1; - for (y = Mittey - l; y <= Mittey + l; y++) - { - gefunden = false; - i = 0; - while (!gefunden) //Passendes Teil finden und Hoehe festlegen - { - i += 1; - if (i == 1000) { gefunden = true; } - - Scape[x][y].Typ = rand() % 13; - for (j = 0; j<10; j++) - { - if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 4))) - { - Scape[x][y].Typ = rand() % 13; - } - } - - if ((Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] != 0)) - { - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; - gefunden = true; - } - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][1] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if (((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) && - ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0))) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } - } - - //Teil rechts-unten - x = Mittex + l + 1; - y = Mittey + l + 1; - gefunden = false; - i = 0; - while (!gefunden) //Passendes Teil finden und Hoehe festlegen - { - i += 1; - if (i == 1000) { gefunden = true; } - - Scape[x][y].Typ = rand() % 13; - for (j = 0; j<10; j++) - { - if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 8))) - { - Scape[x][y].Typ = rand() % 13; - } - } - - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; - gefunden = true; - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][2] == 2)) || - ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][4] == 2))) - { - gefunden = false; - } - //Nebeninsel vermeiden - if ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0)) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } - - //Den unteren Bereich von rechts nach links durchgehen - y = Mittey + l + 1; - for (x = Mittex + l; x >= Mittex - l; x--) - { - gefunden = false; - i = 0; - while (!gefunden) //Passendes Teil finden und Hoehe festlegen - { - i += 1; - if (i == 1000) { gefunden = true; } - - Scape[x][y].Typ = rand() % 13; - for (j = 0; j<10; j++) - { - if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 3))) - { - Scape[x][y].Typ = rand() % 13; - } - } - - if ((Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] != 0)) - { - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; - gefunden = true; - } - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][2] == 2)) || - ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][4] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if (((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) && - ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0))) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } - } - - //Teil links-unten - x = Mittex - l - 1; - y = Mittey + l + 1; - gefunden = false; - i = 0; - while (!gefunden) //Passendes Teil finden und Hoehe festlegen - { - i += 1; - if (i == 1000) { gefunden = true; } - - Scape[x][y].Typ = rand() % 13; - for (j = 0; j<10; j++) - { - if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 7))) - { - Scape[x][y].Typ = rand() % 13; - } - } - - if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe + 1; - gefunden = true; - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][1] == 2))) - { - gefunden = false; - } - //Nebeninsel vermeiden - if ((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } - - //Den linken Bereich von unten nach oben durchgehen - x = Mittex - l - 1; - for (y = Mittey + l; y >= Mittey - l - 1; y--) - { - gefunden = false; - i = 0; - while (!gefunden) //Passendes Teil finden und Hoehe festlegen - { - i += 1; - if (i == 1000) { gefunden = true; } - Scape[x][y].Typ = rand() % 13; - for (j = 0; j<10; j++) - { - if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 2))) - { - Scape[x][y].Typ = rand() % 13; - } - } - - if ((Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] != 0) - && (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] != 0)) - { - if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 1) - { - Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe - 1; - if (Scape[x][y].Hoehe < 0) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - gefunden = true; - } - if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 2) - { - Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe; - gefunden = true; - } - if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 3) - { - Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe + 1; - gefunden = true; - } - } - //Verzwickte Fälle ausfiltern - if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][3] == 2)) || - ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][1] == 2))) - { - gefunden = false; - } - //Nebeninseln vermeiden - if (((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) && - ((Scape[x][y + 1].Typ == 0) && (Scape[x][y + 1].Hoehe == 0))) - { - Scape[x][y].Typ = 0; - Scape[x][y].Hoehe = 0; - } - } - } - } - Anzahl = 0; - CheckRand = true; - for (y = 0; y 0) Anzahl++; - - if (Scape[x][y].Typ == 0) Scape[x][y].LaufZeit = 1; - else Scape[x][y].LaufZeit = 2; - - if ((Scape[x][y].Typ != 0) && - ((x <= 2) || (x >= MAXXKACH - 2) || (y <= 2) || (y >= MAXYKACH - 2))) - CheckRand = false; - } - if ((Anzahl > MinGroesse) && (Anzahl < MaxGroesse) && (CheckRand)) break; - } -} - -void Meer() //Das Meer und den Strand bestimmen -{ - short x, y; - short Anzahl; //Anzahl von angrenzenden Landstücken - - for (y = 0; y= 1) && (Anzahl < 6)) - { - Scape[x][y].Art = 2; - Scape[x][y].Objekt = -1; - Scape[x][y].Reverse = false; - Scape[x][y].Begehbar = true; - Scape[x][y].Phase = -1; - continue; - } - if (Anzahl >= 6) - { - Scape[x][y].Art = 3; - Scape[x][y].Objekt = -1; - Scape[x][y].Reverse = false; - Scape[x][y].Begehbar = false; - Scape[x][y].Phase = -1; - continue; - } - Scape[x][y].Art = 1; //sonst Meer - Scape[x][y].Objekt = MEERWELLEN; - Scape[x][y].ObPos.x = (short)Bmp[MEERWELLEN].rcDes.left; - Scape[x][y].ObPos.y = (short)Bmp[MEERWELLEN].rcDes.top; - Scape[x][y].Phase = (float)(Bmp[Scape[x][y].Objekt].Anzahl - - rand() % (Bmp[Scape[x][y].Objekt].Anzahl) - 1); - if (rand() % 2 == 0) Scape[x][y].Reverse = true; - Scape[x][y].Begehbar = false; - } - } - -} - -void ChangeBootsFahrt() -{ - short x, y; - - BootsFahrt = !BootsFahrt; - //Begehbarkeit umdrehen - for (y = 0; ySetGammaRamp(0, &Direct::DDGammaRamp); -} - -void CheckRohr(short x, short y) -{ - Scape[x][y].Phase = 1; - if (Scape[x][y].Art == 0) Scape[x][y].Art = 4; - if (Scape[x - 1][y].Art == 0) Scape[x - 1][y].Art = 4; - if (Scape[x - 1][y - 1].Art == 0) Scape[x - 1][y - 1].Art = 4; - if (Scape[x][y - 1].Art == 0) Scape[x][y - 1].Art = 4; - if (Scape[x + 1][y - 1].Art == 0) Scape[x + 1][y - 1].Art = 4; - if (Scape[x + 1][y].Art == 0) Scape[x + 1][y].Art = 4; - if (Scape[x + 1][y + 1].Art == 0) Scape[x + 1][y + 1].Art = 4; - if (Scape[x][y + 1].Art == 0) Scape[x][y + 1].Art = 4; - if (Scape[x - 1][y + 1].Art == 0) Scape[x - 1][y + 1].Art = 4; - - if ((Scape[x - 1][y].Objekt == ROHR) && (Scape[x - 1][y].Phase == 0)) CheckRohr(x - 1, y); - if ((Scape[x][y - 1].Objekt == ROHR) && (Scape[x][y - 1].Phase == 0)) CheckRohr(x, y - 1); - if ((Scape[x + 1][y].Objekt == ROHR) && (Scape[x + 1][y].Phase == 0)) CheckRohr(x + 1, y); - if ((Scape[x][y + 1].Objekt == ROHR) && (Scape[x][y + 1].Phase == 0)) CheckRohr(x, y + 1); -} - -void FillRohr() -{ - short x, y; - - for (y = 0; y= SCHLEUSE1) && (Scape[x][y].Objekt <= SCHLEUSE6)) - { - Scape[x][y].Objekt -= 14; - Scape[x][y].ObPos.x = (short)Bmp[Scape[x][y].Objekt].rcDes.left; - Scape[x][y].ObPos.y = (short)Bmp[Scape[x][y].Objekt].rcDes.top; - } - } - //StartRohr finden - for (y = 0; y= FLUSS1) && (Scape[x][y].Objekt <= SCHLEUSE6)) - { - if (Scape[x][y].Art == 0) Scape[x][y].Art = 4; - if (Scape[x - 1][y].Art == 0) Scape[x - 1][y].Art = 4; - if (Scape[x - 1][y - 1].Art == 0) Scape[x - 1][y - 1].Art = 4; - if (Scape[x][y - 1].Art == 0) Scape[x][y - 1].Art = 4; - if (Scape[x + 1][y - 1].Art == 0) Scape[x + 1][y - 1].Art = 4; - if (Scape[x + 1][y].Art == 0) Scape[x + 1][y].Art = 4; - if (Scape[x + 1][y + 1].Art == 0) Scape[x + 1][y + 1].Art = 4; - if (Scape[x][y + 1].Art == 0) Scape[x][y + 1].Art = 4; - if (Scape[x - 1][y + 1].Art == 0) Scape[x - 1][y + 1].Art = 4; - } - if ((Scape[x][y].Objekt != ROHR) || (Scape[x][y].Phase >= Bmp[ROHR].Anzahl)) - continue; - if ((Scape[x - 1][y].Objekt >= FLUSS5) && (Scape[x - 1][y].Objekt <= FLUSS10)) - { - Scape[x - 1][y].Objekt += 14; - Scape[x - 1][y].ObPos.x = (short)Bmp[Scape[x - 1][y].Objekt].rcDes.left; - Scape[x - 1][y].ObPos.y = (short)Bmp[Scape[x - 1][y].Objekt].rcDes.top; - CheckRohr(x, y); - } - else if ((Scape[x - 1][y].Objekt >= SCHLEUSE1) && (Scape[x - 1][y].Objekt <= SCHLEUSE6)) - { - CheckRohr(x, y); - } - if ((Scape[x][y - 1].Objekt >= FLUSS5) && (Scape[x][y - 1].Objekt <= FLUSS10)) - { - Scape[x][y - 1].Objekt += 14; - Scape[x][y - 1].ObPos.x = (short)Bmp[Scape[x][y - 1].Objekt].rcDes.left; - Scape[x][y - 1].ObPos.y = (short)Bmp[Scape[x][y - 1].Objekt].rcDes.top; - CheckRohr(x, y); - } - else if ((Scape[x][y - 1].Objekt >= SCHLEUSE1) && (Scape[x][y - 1].Objekt <= SCHLEUSE6)) - { - CheckRohr(x, y); - } - if ((Scape[x + 1][y].Objekt >= FLUSS5) && (Scape[x + 1][y].Objekt <= FLUSS10)) - { - Scape[x + 1][y].Objekt += 14; - Scape[x + 1][y].ObPos.x = (short)Bmp[Scape[x + 1][y].Objekt].rcDes.left; - Scape[x + 1][y].ObPos.y = (short)Bmp[Scape[x + 1][y].Objekt].rcDes.top; - CheckRohr(x, y); - } - else if ((Scape[x + 1][y].Objekt >= SCHLEUSE1) && (Scape[x + 1][y].Objekt <= SCHLEUSE6)) - { - CheckRohr(x, y); - } - if ((Scape[x][y + 1].Objekt >= FLUSS5) && (Scape[x][y + 1].Objekt <= FLUSS10)) - { - Scape[x][y + 1].Objekt += 14; - Scape[x][y + 1].ObPos.x = (short)Bmp[Scape[x][y + 1].Objekt].rcDes.left; - Scape[x][y + 1].ObPos.y = (short)Bmp[Scape[x][y + 1].Objekt].rcDes.top; - CheckRohr(x, y); - } - else if ((Scape[x][y + 1].Objekt >= SCHLEUSE1) && (Scape[x][y + 1].Objekt <= SCHLEUSE6)) - { - CheckRohr(x, y); - } - - } - //Felder auf trockenen Wiesen löschen - for (y = 0; yLaengetmp) - { - //neue Variante speichern - if (gefunden) Laengetmp = i; else Laengetmp = i - 1; - for (j = 0; j <= Laengetmp; j++) - { - Flusstmp[j].x = Flusslauf[m][j].x; - Flusstmp[j].y = Flusslauf[m][j].y; - } - } - } - for (i = 0; ix1) - { - Scape[x1][y1].Objekt = QUELLE1; - continue; - } - if (x2y1) - { - Scape[x1][y1].Objekt = QUELLE2; - continue; - } - if (y2 y2)) Scape[x1][y1].Objekt = FLUSS9; - } - } - if ((x0 == x1) && (y0 < y1)) - { - if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG4; //Mündung - else - { - if ((x1 < x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS8; - if ((x1 == x2) && (y1 < y2)) Scape[x1][y1].Objekt = FLUSS6; - if ((x1 > x2) && (y1 == y2)) - { - Scape[x1][y1].Objekt = FLUSS9; - Scape[x1][y1].Reverse = true; - } - } - } - if ((x0 > x1) && (y0 == y1)) - { - if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG1; //Mündung - else - { - if ((x1 > x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS5; - if ((x1 == x2) && (y1 < y2)) Scape[x1][y1].Objekt = FLUSS10; - if ((x1 == x2) && (y1 > y2)) Scape[x1][y1].Objekt = FLUSS8; - Scape[x1][y1].Reverse = true; - } - } - if ((x0 == x1) && (y0 > y1)) - { - if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG2; //Mündung - else - { - if ((x1 == x2) && (y1 > y2)) Scape[x1][y1].Objekt = FLUSS6; - if ((x1 > x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS7; - Scape[x1][y1].Reverse = true; - if ((x1 < x2) && (y1 == y2)) - { - Scape[x1][y1].Objekt = FLUSS10; - Scape[x1][y1].Reverse = false; - } - } - } - } - } - //Für das letzte Flussstück - Scape[x1][y1].ObPos.x = (short)Bmp[Scape[x1][y1].Objekt].rcDes.left; - Scape[x1][y1].ObPos.y = (short)Bmp[Scape[x1][y1].Objekt].rcDes.top; - } - } -} - -void Baeume(short Prozent) -{ - short x, y; //Diese Kachel wird angeschaut - ZWEID Erg; - ZWEID Pos; //Da steht der Baum - short r; //random speicherung - bool einGrosserBaum = false; //gibt es bereits einen großen Baum - - for (y = 0; y= 0; i--) - { - if (Scape[i][y].Art != 1) - { - x = i + 1; - break; - } - } - break; - case 2: - x = MAXXKACH / 2; - for (i = MAXYKACH - 1; i >= 0; i--) - { - if (Scape[x][i].Art != 1) - { - y = i + 1; - break; - } - } - break; - } - Scape[x][y].Objekt = WRACK2; - Scape[x][y].ObPos.x = (short)Bmp[WRACK2].rcDes.left; - Scape[x][y].ObPos.y = (short)Bmp[WRACK2].rcDes.top; -} - -void Schatz() -{ - short x, y, i, j; //Diese Kachel wird angeschaut - RGBSTRUCT rgbleft, rgbtop, rgbright, rgbbottom; - - while (1) - { - x = rand() % (MAXXKACH - 1); - y = rand() % (MAXYKACH - 1); - //nur auf flachen Kacheln ohne Objekt - if ((Scape[x][y].Objekt == -1) && (Scape[x][y].Typ == 0) - && (Scape[x][y].Art != 3)) - { - if (SchatzPos.x == -1) - { - SchatzPos.x = x; - SchatzPos.y = y; - } - - Direct::lpDDSScape->Lock(NULL, &Direct::ddsd, DDLOCK_WAIT, NULL); - Direct::lpDDSSchatzkarte->Lock(NULL, &Direct::ddsd2, DDLOCK_WAIT, NULL); - - for (i = 0; iUnlock(NULL); - Direct::lpDDSSchatzkarte->Unlock(NULL); - - rcRectsrc = Bmp[KREUZ].rcSrc; - rcRectdes.left = SKARTEX / 2 - Bmp[KREUZ].Breite / 2; - rcRectdes.right = rcRectdes.left + Bmp[KREUZ].Breite; - rcRectdes.top = SKARTEY / 2 - Bmp[KREUZ].Hoehe / 2; - rcRectdes.bottom = rcRectdes.top + Bmp[KREUZ].Hoehe; - Blitten(Bmp[KREUZ].Surface, Direct::lpDDSSchatzkarte, true); - - - Direct::lpDDSSchatzkarte->Lock(NULL, &Direct::ddsd2, DDLOCK_WAIT, NULL); - - //Weichzeichnen - for (i = 0; i0) && (i0) && (jUnlock(NULL); - break; - } - } -} - -short RotateRight(short Dir) //Richtungskoordinate rechtsrum umrechnen -{ - switch (Dir) - { - case 2: { NewPos.x++; NewPos.y++; Dir = 4; break; } - case 4: { NewPos.x--; NewPos.y++; Dir = 8; break; } - case 8: { NewPos.x--; NewPos.y--; Dir = 1; break; } - case 1: { NewPos.x++; NewPos.y--; Dir = 2; break; } - }; - return Dir; -} - -bool LineIntersect(ZWEID LineStartPos, ZWEID Pos, bool store) -{ - short i; - float x, y; - short Dx, Dy; - float Sx, Sy; - bool erg = false; - float Nextx, Nexty; - - Steps = 0; - - Dx = LineStartPos.x - Pos.x; - Dy = LineStartPos.y - Pos.y; - x = LineStartPos.x; - y = LineStartPos.y; - if (abs(Dx)>abs(Dy)) - { - if (Dx>0) Sx = -1; else Sx = 1; - if (Dx == 0) Sy = 0; else Sy = (float)Dy / ((float)(Dx*Sx)); - Steps = abs(Dx); - } - else - { - if (Dy>0) Sy = -1; else Sy = 1; - if (Dy == 0) Sx = 0; else Sx = (float)Dx / ((float)(Dy*Sy)); - Steps = abs(Dy); - } - - for (i = 0; i 0)) - { - //den mit der kürzesten Entfernung zum Ziel finden (der in der Liste ist) - Shortest = 0; - for (CI = 0; CI <= PCnt - 1; CI++) - { - if (Llist[CI] Llist[Shortest]) || (ShortEntf == -1)) - { - ShortEntf = Llist[Shortest]; - ShortKoor = Plist[Shortest]; - } - - //Den Nächsten aus der Liste löschen - Plist[Shortest] = Plist[PCnt - 1]; - Llist[Shortest] = Llist[PCnt - 1]; - PCnt--; - NewPos = Pos; - Dir = 2; NewPos.y--; //Oben nachschauen anfangen - for (BI = 0; BI <= 3; BI++) //In jede Richtung schauen - { - //ist das Feld noch nicht besucht und frei? - if ((LenMap[NewPos.x][NewPos.y] == 65535) && - (Scape[NewPos.x][NewPos.y].Begehbar)) - { - // Wieviele Schritte braucht man um zu diesem Feld zu kommen - StepCnt = LenMap[Pos.x][Pos.y] + 1; - LenMap[NewPos.x][NewPos.y] = StepCnt; - Plist[PCnt] = NewPos; - //Die Entfernung in die Liste aufnehmen - DiffX = (NewPos.x - RouteZiel.x); - DiffY = (NewPos.y - RouteZiel.y); - Llist[PCnt] = (DiffX*DiffX) + (DiffY*DiffY); - PCnt++; - } - //Ziel erreicht? - if ((NewPos.x == RouteZiel.x) && (NewPos.y == RouteZiel.y)) - { - GoalReached = true; - BI = 3; - } - Dir = RotateRight(Dir); - } - } - if ((PCnt == 0) || (!Scape[RouteZiel.x][RouteZiel.y].Begehbar)) - { - RouteZiel.x = ShortKoor.x; - RouteZiel.y = ShortKoor.y; - - if (FindTheWay()) return true; - else return false; - } - else if (GoalReached) //Punkt rückwärts durchgehen und Abkürzungen finden - { - Pos = RouteZiel; - LineStartPos = Pos; - while ((Pos.x != RouteStart.x) || (Pos.y != RouteStart.y)) - { - NewPos = Pos; - ShStep = 65535; - Dir = 2; NewPos.y--; //Zuerst nach oben probieren - for (AI = 0; AI <= 3; AI++) - { - if (LenMap[NewPos.x][NewPos.y]= BAUM1DOWN) && (j <= BAUM4DOWN) && //Die Baumfällenanimation nur ein mal abspielen - (Scape[x][y].Phase == Bmp[j].Anzahl - 1)); - else Scape[x][y].Phase++; - if (Scape[x][y].Phase >= Bmp[j].Anzahl) Scape[x][y].Phase = 0; - } - - } - - for (j = BUTTGITTER; j <= BUTTDESTROY; j++) - { - if (!Bmp[j].Animation) continue; - i = LastBild / Bmp[j].Geschwindigkeit; - if (i<1) i = 1; - if (Bild%i == 0) - { - Bmp[j].Phase++; - if (Bmp[j].Phase >= Bmp[j].Anzahl) Bmp[j].Phase = 0; - } - } - - //Spielfigur - - //laufen - if (((Guy.Zustand >= GUYLINKS) && (Guy.Zustand <= GUYUNTEN)) || - ((Guy.Zustand >= GUYBOOTLINKS) && (Guy.Zustand <= GUYBOOTUNTEN)) || - (Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) - { - i = LastBild / Bmp[Guy.Zustand].Geschwindigkeit; - if (i<1) i = 1; - if (LastBild - Bmp[Guy.Zustand].Geschwindigkeit < 0) loop = 2; else loop = 1; - if (BootsFahrt) loop = loop * 2; - for (k = 0; k= GUYSUCHEN) && (Guy.Zustand <= GUYSCHLEUDER) && - (Bmp[Guy.Zustand].Phase != Bmp[Guy.Zustand].Anzahl)) - { - i = LastBild / Bmp[Guy.Zustand].Geschwindigkeit; - if (i<1) i = 1; - if (Bild%i == 0) - { - Bmp[Guy.Zustand].Phase++; - if (Bmp[Guy.Zustand].Phase >= Bmp[Guy.Zustand].Anzahl) - { - Bmp[Guy.Zustand].Phase = 0; - if (PapierText == -1) Guy.Aktiv = false; - } - } - } -} - -void CalcGuyKoor() -{ - short Dx, Dy; //Differenz zwischen Ziel und Start - - if (Step >= Steps) - { - RoutePunkt++; - - if ((RoutePunkt >= (RouteLaenge>1 ? 2 * (RouteLaenge - 1) : 1) || - ((Guy.Aktion == AKABBRUCH) && (RouteLaenge>1)))) - { - if (RouteLaenge>1) Bmp[BUTTSTOP].Phase = -1; - Bmp[Guy.Zustand].Phase = 0; - Guy.Aktiv = false; - RouteZiel.x = -1; - RouteZiel.y = -1; - return; - } - Guy.Pos.x = Route[(RoutePunkt + 1) / 2].x; - Guy.Pos.y = Route[(RoutePunkt + 1) / 2].y; - Entdecken(); - - if (BootsFahrt) - AddTime(0, Scape[Route[(RoutePunkt + 1) / 2].x][Route[(RoutePunkt + 1) / 2].y].LaufZeit * 3); - else AddTime(0, Scape[Route[(RoutePunkt + 1) / 2].x][Route[(RoutePunkt + 1) / 2].y].LaufZeit * 5); - AddResource(NAHRUNG, -1); - AddResource(WASSER, -1); - - if ((Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) Guy.Zustand -= 2; //nichts machen - else if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; - else Guy.Zustand = GUYLINKS; - - if (RouteLaenge > 1) //Bei normaler Routenabarbeitung die Richung Kachelmäßig rausfinden - { - if (Route[RoutePunkt / 2].x > Route[RoutePunkt / 2 + 1].x) Guy.Zustand += 0; - else if (Route[RoutePunkt / 2].x < Route[RoutePunkt / 2 + 1].x) Guy.Zustand += 2; - else if (Route[RoutePunkt / 2].y < Route[RoutePunkt / 2 + 1].y) Guy.Zustand += 3; - else if (Route[RoutePunkt / 2].y > Route[RoutePunkt / 2 + 1].y) Guy.Zustand += 1; - } - else - { - if ((RouteKoor[RoutePunkt].x > RouteKoor[RoutePunkt + 1].x) && - (RouteKoor[RoutePunkt].y >= RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 0; - else if ((RouteKoor[RoutePunkt].x <= RouteKoor[RoutePunkt + 1].x) && - (RouteKoor[RoutePunkt].y > RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 1; - else if ((RouteKoor[RoutePunkt].x < RouteKoor[RoutePunkt + 1].x) && - (RouteKoor[RoutePunkt].y <= RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 2; - else if ((RouteKoor[RoutePunkt].x >= RouteKoor[RoutePunkt + 1].x) && - (RouteKoor[RoutePunkt].y < RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 3; - } - - Dx = RouteKoor[RoutePunkt + 1].x - RouteKoor[RoutePunkt].x; - Dy = RouteKoor[RoutePunkt + 1].y - RouteKoor[RoutePunkt].y; - GuyPosScreenStart.x = RouteKoor[RoutePunkt].x; - GuyPosScreenStart.y = RouteKoor[RoutePunkt].y; - Step = 0; - - if (abs(Dx)>abs(Dy)) - { - if (Dx>0) Schrittx = 1; else Schrittx = -1; - if (Dx == 0) Schritty = 0; else Schritty = (float)Dy / ((float)(Dx*Schrittx)); - Steps = abs(Dx); - - } - else - { - if (Dy>0) Schritty = 1; else Schritty = -1; - if (Dy == 0) Schrittx = 0; else Schrittx = (float)Dx / ((float)(Dy*Schritty)); - Steps = abs(Dy); - } - - } - - if (Bild % Scape[Guy.Pos.x][Guy.Pos.y].LaufZeit == 0) - { - Step++; - short i; - if (BootsFahrt) i = 4; else i = 2; - if (Step%i == 0) - { - Bmp[Guy.Zustand].Phase++; - if (Bmp[Guy.Zustand].Phase >= Bmp[Guy.Zustand].Anzahl) Bmp[Guy.Zustand].Phase = 0; - } - Guy.PosScreen.x = GuyPosScreenStart.x + ROUND(Step*Schrittx); - Guy.PosScreen.y = GuyPosScreenStart.y + ROUND(Step*Schritty); - if ((Spielzustand == SZINTRO) || (Spielzustand == SZGERETTET)) //Beim Intro fährt die Kamera mit - { - Camera.x = Guy.PosScreen.x - rcGesamt.right / 2; - Camera.y = Guy.PosScreen.y - rcGesamt.bottom / 2; - } - } -} - -void Entdecken() -{ - bool Aenderung = false; - short i, j; - - for (i = -1; i <= 1; i++) - for (j = -1; j <= 1; j++) - { - if (!Scape[Guy.Pos.x + i][Guy.Pos.y + j].Entdeckt) - { - Scape[Guy.Pos.x + i][Guy.Pos.y + j].Entdeckt = true; - Aenderung = true; - } - } - - if (Aenderung) Generate(); -} - -void CalcKoor() -{ - short x, y; - // Bildschirmkoordinaten berechnen und speichern - for (y = 0; yRelease(); - lpDDSPrimary = NULL; - } - if (lpDDPal != NULL) - { - lpDDPal->Release(); - lpDDPal = NULL; - } - lpDD->Release(); - lpDD = NULL; - } - - } /* finiObjects */ - - void InitDDraw() - { - - DDSCAPS2 ddscaps; - HRESULT ddrval; - LPDIRECTDRAW pDD; - - /* - * create the main DirectDraw object - */ - ddrval = DirectDrawCreate(NULL, &pDD, NULL); - if (ddrval != DD_OK) - goto error; - ddrval = pDD->QueryInterface(IID_IDirectDraw4, (LPVOID *)& lpDD); - if (ddrval != DD_OK) - goto error; - // Get exclusive mode - ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); - if (ddrval != DD_OK) - goto error; - - // Set the video mode to 800x600x16 - ddrval = lpDD->SetDisplayMode(MAXX, MAXY, 32, 0, 0); - if (ddrval != DD_OK) - { - switch (ddrval) - { - case DDERR_GENERIC: - case DDERR_INVALIDMODE: - case DDERR_INVALIDOBJECT: - case DDERR_INVALIDPARAMS: - case DDERR_LOCKEDSURFACES: - case DDERR_NOEXCLUSIVEMODE: - case DDERR_SURFACEBUSY: - case DDERR_UNSUPPORTED: - case DDERR_UNSUPPORTEDMODE: {MessageBeep(MB_OK); break; } - case DDERR_WASSTILLDRAWING: - ; - } - - goto error; - } - - ZeroMemory(&ddsd2, sizeof(ddsd2)); - ddsd2.dwSize = sizeof(ddsd2); - - // Create the primary surface with 1 back buffer - ZeroMemory(&ddsd, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | - DDSCAPS_FLIP | - DDSCAPS_COMPLEX; - ddsd.dwBackBufferCount = 1; //Anzahl ?? - ddrval = lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL); - if (ddrval != DD_OK) - goto error; - - //für gamma-ablenden - lpDDSPrimary->QueryInterface(IID_IDirectDrawGammaControl, (void **)&lpDDGammaControl); - lpDDGammaControl->GetGammaRamp(0, &DDGammaOld); - lpDDGammaControl->GetGammaRamp(0, &DDGammaRamp); - - ddscaps.dwCaps = DDSCAPS_BACKBUFFER; - ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack); - - if (ddrval != DD_OK) - goto error; - - - ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; - //In diese Surface sollen die Bausteine geladen werden - lpDD->CreateSurface(&ddsd, &lpDDSMisc, NULL); - lpDDSMisc = DDLoadBitmap(lpDD, Misc, 0, 0); - DDSetColorKey(lpDDSMisc, RGB(255, 0, 255)); - //In diese Surface sollen das Panel geladen werden - lpDD->CreateSurface(&ddsd, &lpDDSPanel, NULL); - lpDDSPanel = DDLoadBitmap(lpDD, Panel, 0, 0); - DDSetColorKey(lpDDSPanel, RGB(255, 0, 255)); - //In diese Surface sollen die Animation der Figur gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSGuyAni, NULL); - lpDDSGuyAni = DDLoadBitmap(lpDD, GuyAni, 0, 0); - DDSetColorKey(lpDDSGuyAni, RGB(255, 0, 255)); - //In diese Surface sollen die Landschaftsanimationen gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSAnimation, NULL); - lpDDSAnimation = DDLoadBitmap(lpDD, Animation, 0, 0); - DDSetColorKey(lpDDSAnimation, RGB(255, 0, 255)); - //In diese Surface soll die Schrift1 gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSSchrift1, NULL); - lpDDSSchrift1 = DDLoadBitmap(lpDD, Schrift1, 0, 0); - DDSetColorKey(lpDDSSchrift1, RGB(255, 0, 255)); - //In diese Surface soll die Schrift2 gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSSchrift2, NULL); - lpDDSSchrift2 = DDLoadBitmap(lpDD, Schrift2, 0, 0); - DDSetColorKey(lpDDSSchrift2, RGB(255, 0, 255)); - //In diese Surface soll das Papier gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSPapier, NULL); - lpDDSPapier = DDLoadBitmap(lpDD, Papier, 0, 0); - DDSetColorKey(lpDDSPapier, RGB(255, 0, 255)); - //In diese Surface solln die Bäume gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSBaum, NULL); - lpDDSBaum = DDLoadBitmap(lpDD, Baum, 0, 0); - DDSetColorKey(lpDDSBaum, RGB(255, 0, 255)); - //In diese Surface solln die Cursor gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSCursor, NULL); - lpDDSCursor = DDLoadBitmap(lpDD, Cursorbmp, 0, 0); - DDSetColorKey(lpDDSCursor, RGB(255, 0, 255)); - //In diese Surface solln die Buttons gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSButtons, NULL); - lpDDSButtons = DDLoadBitmap(lpDD, Buttons, 0, 0); - DDSetColorKey(lpDDSButtons, RGB(255, 0, 255)); - //In diese Surface solln das TextFeld gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSTextFeld, NULL); - lpDDSTextFeld = DDLoadBitmap(lpDD, TextFeld, 0, 0); - DDSetColorKey(lpDDSTextFeld, RGB(255, 0, 255)); - //In diese Surface solln das Inventar gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSInventar, NULL); - lpDDSInventar = DDLoadBitmap(lpDD, Inventarbmp, 0, 0); - DDSetColorKey(lpDDSInventar, RGB(255, 0, 255)); - //In diese Surface solln die Bauwerke gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSBau, NULL); - lpDDSBau = DDLoadBitmap(lpDD, Bau, 0, 0); - DDSetColorKey(lpDDSBau, RGB(255, 0, 255)); - //In diese Surface solln die Credits gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSCredits, NULL); - lpDDSCredits = DDLoadBitmap(lpDD, Credits, 0, 0); - DDSetColorKey(lpDDSCredits, RGB(0, 0, 0)); //Ausnahmsweise schwarz - //In diese Surface solln das Logo gespeichert werden - lpDD->CreateSurface(&ddsd, &lpDDSLogo, NULL); - lpDDSLogo = DDLoadBitmap(lpDD, Logo, 0, 0); - - - ZeroMemory(&ddsd, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); // Tell DirectDraw which members are valid. - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; - //In diese Surface soll die MiniMap gespeichert werden - ddsd.dwWidth = 2 * MAXXKACH; - ddsd.dwHeight = 2 * MAXYKACH; - lpDD->CreateSurface(&ddsd, &lpDDSKarte, NULL); - //In diese Surface soll die Landschaft gespeichert werden - ddsd.dwWidth = MAXSCAPEX; - ddsd.dwHeight = MAXSCAPEY; - lpDD->CreateSurface(&ddsd, &lpDDSScape, NULL); - //In diese Surface soll die Schrift gespeichert werden - ddsd.dwWidth = MAXX; - ddsd.dwHeight = MAXY; - lpDD->CreateSurface(&ddsd, &lpDDSSchrift, NULL); - DDSetColorKey(lpDDSSchrift, RGB(255, 0, 255)); - //In diese Surface soll die Schatzkarte gespeichert werden - ddsd.dwWidth = SKARTEX; - ddsd.dwHeight = SKARTEY; - lpDD->CreateSurface(&ddsd, &lpDDSSchatzkarte, NULL); - - - ddbltfx.dwSize = sizeof(ddbltfx); - ddpf.dwSize = sizeof(ddpf); - lpDDSSchrift->GetPixelFormat(&ddpf); - - error:;/* - finiObjects(); - MessageBox( hwnd, "DirectDraw Init FAILED", TITLE, MB_OK ); - DestroyWindow( hwnd );*/ - } - - void InitDInput() - { - DirectInputCreate(Direct::g_hInst, DIRECTINPUT_VERSION, &g_pDI, NULL); //DirectInput - g_pDI->CreateDevice(GUID_SysMouse, &g_pMouse, NULL); //Mousepointer - g_pMouse->SetDataFormat(&c_dfDIMouse); //MausDateninformation einstellen - g_pMouse->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); //Exklusive Maus - - g_pDI->CreateDevice(GUID_SysKeyboard, &g_pKey, NULL); //Keyboard einrichten - g_pKey->SetDataFormat(&c_dfDIKeyboard); //Datenformat auf KeyBoard umschalten - g_pKey->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); //KeyBoard geht nicht exklusive - } - - void InitDSound() - { - HRESULT hr; - WAVEFORMATEX Waveformat; //Zwischenspeicher des Bufferformats - - Soundzustand = 1; //Sound anschalten - - hr = DirectSoundCreate8(NULL, &lpds, NULL); //DirectSound-Objekt machen - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - hr = IDirectSound_SetCooperativeLevel(lpds, hwnd, DSSCL_PRIORITY); //Prioritäten setzen - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - - //Primary Buffer - ZeroMemory(&dsbdesc, sizeof(DSBUFFERDESC)); - dsbdesc.dwSize = sizeof(DSBUFFERDESC); - dsbdesc.dwFlags = DSBCAPS_PRIMARYBUFFER; - hr = lpds->CreateSoundBuffer(&dsbdesc, &lpdsbPrimary, NULL); - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - - memset(&Waveformat, 0, sizeof(WAVEFORMATEX)); - Waveformat.wFormatTag = WAVE_FORMAT_PCM; - Waveformat.nChannels = 1; //stereo oder mono (1oder2) - Waveformat.nSamplesPerSec = 44100; - Waveformat.wBitsPerSample = 16; - Waveformat.nBlockAlign = Waveformat.wBitsPerSample / 8 * Waveformat.nChannels; - Waveformat.nAvgBytesPerSec = Waveformat.nSamplesPerSec * Waveformat.nBlockAlign; - hr = lpdsbPrimary->SetFormat(&Waveformat); - if (hr != DD_OK) - { - Soundzustand = -1; - return; - } - - } - - void SetAcquire() - { - if (!MouseInit) return; - if (bActive) - { - g_pMouse->Acquire(); - if (g_pKey)g_pKey->Acquire(); - - } - else - { - g_pMouse->Unacquire(); - if (g_pKey)g_pKey->Unacquire(); - - } - } -} - -namespace Sound -{ - void LoadSound(short Sound) - { - HMMIO DateiHandle; // Handle der geöffneten Datei - MMCKINFO parent, // DateiInfos - child; // DateiInfos - WAVEFORMATEX wfmtx; // wave format structure - - UCHAR *snd_buffer, // SoundZwischenspeicher - *audio_ptr_1 = NULL, // Pointer1 - *audio_ptr_2 = NULL; // Pointer2 - - DWORD audio_length_1 = 0, // Länge des 1.Buffer - audio_length_2 = 0; // Länge des 2.Buffer - - if (Soundzustand == -1) return; //Wenn keine Soundkarte vorhanden raus... - - // Dateiinfo initialisieren - parent.ckid = (FOURCC)0; - parent.cksize = 0; - parent.fccType = (FOURCC)0; - parent.dwDataOffset = 0; - parent.dwFlags = 0; - child = parent; - - // Datei öffnen - DateiHandle = mmioOpen(Wav[Sound].Dateiname, NULL, MMIO_READ | MMIO_ALLOCBUF); - - // Dateiinfos auslesen - parent.fccType = mmioFOURCC('W', 'A', 'V', 'E'); - mmioDescend(DateiHandle, &parent, NULL, MMIO_FINDRIFF); - child.ckid = mmioFOURCC('f', 'm', 't', ' '); - mmioDescend(DateiHandle, &child, &parent, 0); - mmioRead(DateiHandle, (char *)&wfmtx, sizeof(wfmtx)); - mmioAscend(DateiHandle, &child, 0); - child.ckid = mmioFOURCC('d', 'a', 't', 'a'); - mmioDescend(DateiHandle, &child, &parent, MMIO_FINDCHUNK); - - //Speicher für die Zwischenspeicherung besorgen - snd_buffer = (UCHAR *)malloc(child.cksize); - - //Die Wav-Daten rüberkopieren - mmioRead(DateiHandle, (char *)snd_buffer, child.cksize); - - // Die Datei schließen - mmioClose(DateiHandle, 0); - - // Den Buffer machen - Direct::dsbdesc.dwSize = sizeof(DSBUFFERDESC); - Direct::dsbdesc.dwFlags = DSBCAPS_STATIC | DSBCAPS_CTRLVOLUME; //Wenn das mixen nicht funktioniert,dass hier reaktivieren - Direct::dsbdesc.dwBufferBytes = child.cksize; - Direct::dsbdesc.lpwfxFormat = &wfmtx; - Direct::lpds->CreateSoundBuffer(&Direct::dsbdesc, &Direct::lpdsbWav[Sound], NULL); - - // Buffer locken und Daten reinkopieren und unlocken - Direct::lpdsbWav[Sound]->Lock(0, child.cksize, - (void **)&audio_ptr_1, - &audio_length_1, - (void **)&audio_ptr_2, - &audio_length_2, - DSBLOCK_FROMWRITECURSOR); - - memcpy(audio_ptr_1, snd_buffer, audio_length_1); - memcpy(audio_ptr_2, (snd_buffer + audio_length_1), audio_length_2); - Direct::lpdsbWav[Sound]->Unlock(audio_ptr_1, audio_length_1, audio_ptr_2, audio_length_2); - - // Den ZwischenSpeicherfreigeben - free(snd_buffer); - - //Die Standardlautstärke festlegen - Direct::lpdsbWav[Sound]->SetVolume((long)(-10000 + 100 * Wav[Sound].Volume)); - } - - void PlaySound(short Sound, short Volume) - { - short z; - - if ((Sound == 0) || (Soundzustand <= 0)) return; - - z = -10000 + 100 * Wav[Sound].Volume; - Direct::lpdsbWav[Sound]->SetVolume((long)(-10000 + (10000 + z)*Volume / 100)); - if (Wav[Sound].Loop) Direct::lpdsbWav[Sound]->Play(NULL, NULL, DSBPLAY_LOOPING); - else Direct::lpdsbWav[Sound]->Play(NULL, NULL, NULL); - } - - void StopSound(short Sound) - { - if ((Sound == 0) || (Soundzustand <= 0)) return; - Direct::lpdsbWav[Sound]->Stop(); - } -} - -namespace Game -{ - void SaveGame() - { - short i; - - ofstream ofs("save.dat", ios::binary); - if (!ofs) return; - - ofs.write((char*)Scape, sizeof(Scape)); - ofs.write((char*)&Guy, sizeof(Guy)); - ofs.write((char*)&BootsFahrt, sizeof(BootsFahrt)); - ofs.write((char*)&Camera, sizeof(Camera)); - ofs.write((char*)&Chance, sizeof(Chance)); - ofs.write((char*)&Gitter, sizeof(Gitter)); - ofs.write((char*)&HauptMenue, sizeof(HauptMenue)); - ofs.write((char*)&LAnimation, sizeof(LAnimation)); - ofs.write((char*)&Minuten, sizeof(Minuten)); - ofs.write((char*)&ScapeGrenze, sizeof(ScapeGrenze)); - ofs.write((char*)&SchatzPos, sizeof(SchatzPos)); - ofs.write((char*)&Spielzustand, sizeof(Spielzustand)); - ofs.write((char*)&Stunden, sizeof(Stunden)); - ofs.write((char*)&Tag, sizeof(Tag)); - ofs.write((char*)TextBereich, sizeof(TextBereich)); - ofs.write((char*)&SchatzGef, sizeof(SchatzGef)); - - for (i = 0; iBlt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 255); - Direct::lpDDSSchrift->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - - //Landschaft erzeugen - - DrawString("Erschaffe Landschaft...", 5, 5, 2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); - Compute(200, 600); - - DrawString("Ueberflute Land...", 5, 35, 2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); - Meer(); - - DrawString("Lege Fluss fest...", 5, 65, 2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); - Fluss(); - CalcKoor(); - - DrawString("Pflanze Baeume...", 5, 95, 2); - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::lpDDSPrimary->Blt(&rcRectdes, Direct::lpDDSSchrift, &rcRectdes, DDBLT_KEYSRC | DDBLT_WAIT, NULL); - Baeume(30); - - Piratenwrack(); - - //Guy Position - Guy.Pos.x = 1; - Guy.Pos.y = MAXYKACH / 2; - Guy.PosScreen.x = - (Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][0].x + - Scape[Guy.Pos.x][Guy.Pos.y].xScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][2].x) / 2; - Guy.PosScreen.y = - (Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][1].y + - Scape[Guy.Pos.x][Guy.Pos.y].yScreen + EckKoor[Scape[Guy.Pos.x][Guy.Pos.y].Typ][3].y) / 2; - - Camera.x = Guy.PosScreen.x - rcGesamt.right / 2; - Camera.y = Guy.PosScreen.y - rcGesamt.bottom / 2; - - Chance = 0; - - BootsFahrt = false; - if (!BootsFahrt) ChangeBootsFahrt(); - - Tag = 1; Stunden = 0; Minuten = 0; - - Spielzustand = SZINTRO; - Guy.Aktiv = false; - Guy.Zustand = GUYSCHIFF; - Guy.AkNummer = 0; - Guy.Aktion = AKINTRO; - } - - //SchriftSurface löschen - rcRectdes.left = 0; - rcRectdes.top = 0; - rcRectdes.right = MAXX; - rcRectdes.bottom = MAXY; - Direct::ddbltfx.dwFillColor = RGB2DWORD(255, 0, 255); - Direct::lpDDSSchrift->Blt(&rcRectdes, NULL, NULL, DDBLT_COLORFILL, &Direct::ddbltfx); - - BOOL Anitmp = LAnimation; - bool Entdeckttmp[MAXXKACH][MAXYKACH]; - - LAnimation = false; - //Schatzvergraben und Schatzkarte malen - for (y = 0; y= 12) && (Minuten != 0) && (Guy.Aktion != AKTAGENDE)) //Hier ist der Tag zuende - { - if (Guy.Aktion == AKAUSSCHAU) Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; - Guy.Aktiv = false; - Guy.AkNummer = 0; - Guy.Aktion = AKTAGENDE; - } - - CheckSpzButton(); //Die Spezialknöpfe umschalten - if (MouseAktiv) CheckMouse(); //Den MouseZustand abchecken - if (CheckKey() == 0) return(0); //Das Keyboard abfragen - LimitScroll(); //Das Scrollen an die Grenzen der Landschaft anpassen - Animationen(); //Die Animationsphasen weiterschalten - if (!Guy.Aktiv) Event(Guy.Aktion); //Die Aktionen starten - Zeige();//Das Bild zeichnen - if (Spielbeenden) return(0); - - } - else if (Spielzustand == SZABSPANN) - { - if (CheckKey() == 0) return(0); - AbspannCalc(); - ZeigeAbspann(); - } - } - return(1); - } - - long FAR PASCAL WindowProc(HWND hWnd, UINT message, - WPARAM wParam, LPARAM lParam) - { - static BYTE phase = 0; - - switch (message) - { - case WM_ACTIVATEAPP: - bActive = wParam; - Direct::SetAcquire(); - break; - - case WM_ACTIVATE: // sent when window changes active state - bActive = wParam; - Direct::SetAcquire(); - break; - - case WM_CREATE: - break; - case WM_TIMER: - if (Refresh() == 0) PostMessage(hwnd, WM_DESTROY, 0, 0); - break; - case WM_DESTROY: - Direct::finiObjects(); - PostQuitMessage(0); - break; - } - - return DefWindowProc(hWnd, message, wParam, lParam); - - } /* WindowProc */ - - /* - * doInit - do work required for every instance of the application: - * create the window, initialize data - */ - static BOOL doInit(HINSTANCE hInstance, int nCmdShow) - { - - WNDCLASS wc; - - /* - * set up and register window class - */ - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = WindowProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = NULL; - wc.lpszMenuName = NAME; - wc.lpszClassName = NAME; - RegisterClass(&wc); - - /* - * create a window - */ - hwnd = CreateWindowEx( - WS_EX_TOPMOST, - NAME, - TITLE, - WS_POPUP, - 0, - 0, - GetSystemMetrics(SM_CXSCREEN), - GetSystemMetrics(SM_CYSCREEN), - NULL, - NULL, - hInstance, - NULL); - - if (!hwnd) - { - return FALSE; - } - - Direct::InitDInput(); - Direct::MouseInit = true; - - ShowWindow(hwnd, nCmdShow); - UpdateWindow(hwnd); - - Direct::InitDDraw(); - Direct::InitDSound(); - - SetTimer(hwnd, 0, 1000, NULL); //Provisorisch - srand((unsigned)time(NULL)); //Random initialisieren - return TRUE; - - } /* doInit */ -} - -/* -* WinMain - initialization, message loop -*/ -int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPSTR lpCmdLine, int nCmdShow) -{ - MSG msg; - - lpCmdLine = lpCmdLine; - hPrevInstance = hPrevInstance; - Direct::g_hInst = hInstance; - if (!Application::doInit(hInstance, nCmdShow)) - { - return FALSE; - } - - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return msg.wParam; - -} /* WinMain */ diff --git a/Landscape.vcxproj b/Landscape.vcxproj index 8a1ac89..0762a5a 100644 --- a/Landscape.vcxproj +++ b/Landscape.vcxproj @@ -1,168 +1,192 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - - - {B47831E3-7517-6403-F657-B2601A03C3F1} - - - - Application - false - v120 - - - Application - false - v120 - - - - - - - - - - - - - - - .\Debug\ - .\Debug\ - true - - - .\Release\ - .\Release\ - false - - - - MultiThreadedDebug - Default - false - Disabled - true - Level3 - false - true - EditAndContinue - _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - .\Debug\ - true - .\Debug\Landscape.pch - .\Debug\ - .\Debug\ - - - true - _DEBUG;%(PreprocessorDefinitions) - .\Debug\Landscape.tlb - true - NUL - Win32 - - - 0x0407 - _DEBUG;%(PreprocessorDefinitions) - - - true - .\Debug\Landscape.bsc - - - true - true - Windows - .\Debug\Landscape.exe - dsound.lib;winmm.lib;dxguid.lib;ddraw.lib;dinput.lib;xinput.lib;dinput8.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86;C:\Users\Lukas\Downloads\S; - false - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - .\Release\ - true - .\Release\Landscape.pch - .\Release\ - .\Release\ - - - true - NDEBUG;%(PreprocessorDefinitions) - .\Release\Landscape.tlb - true - NUL - Win32 - - - 0x0407 - NDEBUG;%(PreprocessorDefinitions) - - - true - .\Release\Landscape.bsc - - - true - Windows - Release/Schiffbruch.exe - odbc32.lib;odbccp32.lib;dxguid.lib;ddraw.lib;dinput.lib;dsound.lib;winmm.lib;%(AdditionalDependencies) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + + + + {B47831E3-7517-6403-F657-B2601A03C3F1} + + + + Application + false + v120 + + + Application + false + v120 + + + + + + + + + + + + + + + .\Debug\ + .\Debug\ + true + + + .\Release\ + .\Release\ + false + + + + MultiThreadedDebug + Default + false + Disabled + true + Level3 + false + true + EditAndContinue + _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + .\Debug\ + true + .\Debug\Landscape.pch + .\Debug\ + .\Debug\ + + + true + _DEBUG;%(PreprocessorDefinitions) + .\Debug\Landscape.tlb + true + NUL + Win32 + + + 0x0407 + _DEBUG;%(PreprocessorDefinitions) + + + true + .\Debug\Landscape.bsc + + + true + true + Windows + .\Debug\Landscape.exe + dsound.lib;winmm.lib;dxguid.lib;ddraw.lib;dinput.lib;xinput.lib;dinput8.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86;C:\Users\Lukas\Downloads\S; + false + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + .\Release\ + true + .\Release\Landscape.pch + .\Release\ + .\Release\ + + + true + NDEBUG;%(PreprocessorDefinitions) + .\Release\Landscape.tlb + true + NUL + Win32 + + + 0x0407 + NDEBUG;%(PreprocessorDefinitions) + + + true + .\Release\Landscape.bsc + + + true + Windows + Release/Schiffbruch.exe + odbc32.lib;odbccp32.lib;dxguid.lib;ddraw.lib;dinput.lib;dsound.lib;winmm.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Landscape.vcxproj.filters b/Landscape.vcxproj.filters new file mode 100644 index 0000000..db7b1b0 --- /dev/null +++ b/Landscape.vcxproj.filters @@ -0,0 +1,163 @@ + + + + + Source + + + Source + + + Source + + + Source + + + Source + + + Source + + + Source + + + Source + + + Source + + + Source + + + Source + + + Source + + + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + Header + + + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + Resource + + + + + {ead7ad50-8ce5-406b-abcc-64bdf6bffae1} + + + {adb6c318-c4a6-44f1-8b39-11c04d586e18} + + + {7d813b62-df82-445b-96c3-7b28451702d4} + + + + + Resource + + + \ No newline at end of file diff --git a/Math.cpp b/Math.cpp new file mode 100644 index 0000000..051c955 --- /dev/null +++ b/Math.cpp @@ -0,0 +1,1245 @@ +#include "Math.hpp" + +#include "Action.hpp" +#include "Direct.hpp" +#include "Game.hpp" +#include "Sound.hpp" +#include "Renderer.hpp" +#include "Routing.hpp" +#include "World.hpp" + +#include +#include + +namespace Math +{ + void MouseInSpielflaeche(short Button, short Push, short xDiff, short yDiff) + { + ZWEID Erg; // Die angeklickte Kachel + char Text[1024], TextTmp[1024]; // Text für Infoleiste + + // Info anzeigen + Erg = Renderer::GetKachel((MousePosition.x + Camera.x), (MousePosition.y + Camera.y)); + if (Scape[Erg.x][Erg.y].Entdeckt) + { + LoadString(g_hInst, 45 + Scape[Erg.x][Erg.y].Art, Text, 1024); + if ((Scape[Erg.x][Erg.y].Objekt != -1) && (Scape[Erg.x][Erg.y].Objekt != MEERWELLEN)) + { + LoadString(g_hInst, MIT, TextTmp, 1024); + std::strcat(Text, " "); + std::strcat(Text, TextTmp); + std::strcat(Text, " "); + + if ((Scape[Erg.x][Erg.y].Objekt >= BAUM1) && (Scape[Erg.x][Erg.y].Objekt <= BAUM4)) + LoadString(g_hInst, BAUMTEXT, TextTmp, 1024); + else if ((Scape[Erg.x][Erg.y].Objekt >= FLUSS1) && (Scape[Erg.x][Erg.y].Objekt <= SCHLEUSE6)) + LoadString(g_hInst, FLUSSTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == BUSCH) + LoadString(g_hInst, BUSCHTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == ZELT) + LoadString(g_hInst, ZELTTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == FELD) + LoadString(g_hInst, FELDTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == BOOT) + LoadString(g_hInst, BOOTTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == ROHR) + LoadString(g_hInst, ROHRTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == SOS) + LoadString(g_hInst, SOSTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == HAUS1) + LoadString(g_hInst, HAUS1TEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == HAUS2) + LoadString(g_hInst, HAUS2TEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == HAUS3) + LoadString(g_hInst, HAUS3TEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == BAUMGROSS) + LoadString(g_hInst, BAUMGROSSTEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == FEUERSTELLE) + LoadString(g_hInst, FEUERSTELLETEXT, TextTmp, 1024); + else if (Scape[Erg.x][Erg.y].Objekt == FEUER) + LoadString(g_hInst, FEUERTEXT, TextTmp, 1024); + else if ((Scape[Erg.x][Erg.y].Objekt == WRACK) || (Scape[Erg.x][Erg.y].Objekt == WRACK2)) + LoadString(g_hInst, WRACKTEXT, TextTmp, 1024); + std::strcat(Text, TextTmp); + + if ((Scape[Erg.x][Erg.y].Objekt >= FELD) && + (Scape[Erg.x][Erg.y].Objekt <= FEUERSTELLE)) + { + // Baufortschrittanzeigen + std::strcat(Text, " "); + std::strcat(Text, "("); + std::sprintf(TextTmp, "%d", (Scape[Erg.x][Erg.y].AkNummer * 100) / Bmp[Scape[Erg.x][Erg.y].Objekt].AkAnzahl); + std::strcat(Text, TextTmp); + std::strcat(Text, "%"); + std::strcat(Text, ")"); + // benötigte Rohstoffe anzeigen + World::MakeRohString(Erg.x, Erg.y, -1); + std::strcat(Text, RohString); + } + + } + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(Text, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + } + + // rechte Maustastescrollen + if ((Button == 1) && (Push == 0)) + { + Camera.x += xDiff; + Camera.y += yDiff; + CursorTyp = CURICHTUNG; + } + + // Wenn Maustaste gedrückt wird + if ((Button == 0) && (Push == 1)) + { + if ((Erg.x != -1) && (Erg.y != -1) && + (Scape[Erg.x][Erg.y].Entdeckt) && (!Guy.Aktiv) && + ((Erg.x != Guy.Pos.x) || (Erg.y != Guy.Pos.y)) && + (Erg.x > 0) && (Erg.x < MAXXKACH - 1) && + (Erg.y > 0) && (Erg.y < MAXYKACH - 1)) + { + // Klicksound abspielen + Sound::PlaySound(WAVKLICK2, 100); + if ((Erg.x == RouteZiel.x) && (Erg.y == RouteZiel.y)) + { + Routing::MarkRoute(false); + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktiv = true; + RoutePunkt = -1; + Steps = 0; + Step = 0; + } + else + { + Routing::MarkRoute(false); + RouteStart.x = Guy.Pos.x; + RouteStart.y = Guy.Pos.y; + RouteZiel.x = Erg.x; + RouteZiel.y = Erg.y; + if (Routing::FindTheWay()) Routing::MarkRoute(true); + else // Wenn keine Route gefunden + { + RouteStart.x = -1; + RouteStart.y = -1; + RouteZiel.x = -1; + RouteZiel.y = -1; + MessageBeep(MB_OK); + } + } + } + else Sound::PlaySound(WAVKLICK, 100); + } + } + + void MouseInPanel(short Button, short Push) + { + short mx, my, i; // Mauskoordinaten in Minimap + + // wenn die Maus in der Minimap ist -> + if ((InRect(MousePosition.x, MousePosition.y, rcKarte)) && (Button == 0) && (Push != -1)) + { + mx = MousePosition.x - (short)rcKarte.left; + my = MousePosition.y - (short)rcKarte.top; + Camera.x = ((KXPIXEL / 4)*(mx - my) + MAXXKACH * KXPIXEL / 2) + - (rcSpielflaeche.right - rcSpielflaeche.left) / 2; + Camera.y = ((KXPIXEL / 7)*(my + mx)) + - (rcSpielflaeche.bottom - rcSpielflaeche.top) / 2; + } + else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTGITTER].rcDes)) + { + if (Gitter) Renderer::DrawText(GITTERAUS, TXTTEXTFELD, 2); + else Renderer::DrawText(GITTERAN, TXTTEXTFELD, 2); + + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Gitter = !Gitter; + World::Generate(); + } + } + else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANIMATION].rcDes)) + { + if (LAnimation) Renderer::DrawText(ANIMATIONAUS, TXTTEXTFELD, 2); + else Renderer::DrawText(ANIMATIONAN, TXTTEXTFELD, 2); + + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + LAnimation = !LAnimation; + World::Generate(); + } + } + else if (InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSOUND].rcDes)) + { + if (Soundzustand == 1) Renderer::DrawText(SOUNDAUS, TXTTEXTFELD, 2); + else if (Soundzustand == 0) Renderer::DrawText(SOUNDAN, TXTTEXTFELD, 2); + else Renderer::DrawText(KEINSOUND, TXTTEXTFELD, 2); + + if ((Button == 0) && (Push == 1)) + { + if (Soundzustand == 1) + { + for (i = 1; i= FLUSS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6)) || + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ROHR) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase == 1))) + Guy.Aktion = Action::DRINK; + else PapierText = Renderer::DrawText(KEINESSENTRINKEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHLAFEN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLAFEN].Phase != -1)) + { + Renderer::DrawText(BEGINNSCHLAFEN, TXTTEXTFELD, 2); + Bmp[BUTTSCHLAFEN].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if (Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) + { + Guy.AkNummer = 0; + Guy.Aktion = Action::SLEEP; + } + else PapierText = Renderer::DrawText(NICHTAUFWASSERSCHLAFEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFAELLEN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTFAELLEN].Phase != -1)) + { + Renderer::DrawText(BEGINNFAELLEN, TXTTEXTFELD, 2); + Bmp[BUTTFAELLEN].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Guy.AkNummer = 0; + if (Guy.Inventar[ROHSTAMM] <= 10) + { + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) + { + Guy.Aktion = Action::LOG; + } + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) + PapierText = Renderer::DrawText(BAUMZUGROSS, TXTPAPIER, 1); + else PapierText = Renderer::DrawText(KEINBAUM, TXTPAPIER, 1); + } + else PapierText = Renderer::DrawText(ROHSTAMMZUVIEL, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANGELN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTANGELN].Phase != -1)) + { + Renderer::DrawText(BEGINNANGELN, TXTTEXTFELD, 2); + Bmp[BUTTANGELN].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Guy.AkNummer = 0; + if (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FLUSS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= SCHLEUSE6)) || + (BootsFahrt)) Guy.Aktion = Action::FISH; + else PapierText = Renderer::DrawText(KEINWASSER, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTANZUENDEN].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTANZUENDEN].Phase != -1)) + { + Renderer::DrawText(BEGINNANZUENDEN, TXTTEXTFELD, 2); + Bmp[BUTTANZUENDEN].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Guy.AkNummer = 0; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FEUERSTELLE) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) + Guy.Aktion = Action::LIGHT; + else PapierText = Renderer::DrawText(KEINEFEUERST, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTAUSSCHAU].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTAUSSCHAU].Phase != -1)) + { + Renderer::DrawText(BEGINNAUSSCHAU, TXTTEXTFELD, 2); + Bmp[BUTTAUSSCHAU].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Guy.AkNummer = 0; + if (Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) + { + Guy.AkNummer = 0; + Guy.Aktion = Action::LOOKOUT; + } + else PapierText = Renderer::DrawText(WELLENZUHOCH, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHATZ].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZ].Phase != -1)) + { + Renderer::DrawText(BEGINNSCHATZ, TXTTEXTFELD, 2); + Bmp[BUTTSCHATZ].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Guy.AkNummer = 0; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Art != 1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1)) + { + Guy.AkNummer = 0; + Guy.Aktion = Action::TREASURE; + } + else PapierText = Renderer::DrawText(GRABENBEDINGUNGEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHLEUDER].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHLEUDER].Phase != -1)) + { + Renderer::DrawText(BEGINNSCHLEUDER, TXTTEXTFELD, 2); + Bmp[BUTTSCHLEUDER].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Guy.AkNummer = 0; + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) + { + Guy.AkNummer = 0; + Guy.Aktion = Action::SLINGSHOT; + } + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || + ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= HAUS1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= HAUS3))) + PapierText = Renderer::DrawText(BAUMZUGROSS, TXTPAPIER, 1); + else PapierText = Renderer::DrawText(KEINVOGEL, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSCHATZKARTE].rcDes)) && + (HauptMenue == MEAKTION) && (Bmp[BUTTSCHATZKARTE].Phase != -1)) + { + Renderer::DrawText(BEGINNSCHATZKARTE, TXTTEXTFELD, 2); + Bmp[BUTTSCHATZKARTE].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + Renderer::DrawSchatzkarte(); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFELD].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTFELD].Phase != -1)) + { + LoadString(g_hInst, BEGINNFELD, StdString, 1024); + World::MakeRohString(-1, -1, FELD); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTFELD].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && + (Scape[Guy.Pos.x][Guy.Pos.y].Art == 4)) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::FIELD; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FELD)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::FIELD; + } + else PapierText = Renderer::DrawText(FELDBEDINGUNGEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTZELT].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTZELT].Phase != -1)) + { + LoadString(g_hInst, BEGINNZELT, StdString, 1024); + World::MakeRohString(-1, -1, ZELT); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTZELT].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0) && + (Scape[Guy.Pos.x][Guy.Pos.y].Art != -1)) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::TENT; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ZELT)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::TENT; + } + else PapierText = Renderer::DrawText(ZELTBEDINGUNGEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTBOOT].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTBOOT].Phase != -1)) + { + LoadString(g_hInst, BEGINNBOOT, StdString, 1024); + World::MakeRohString(-1, -1, BOOT); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTBOOT].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Art == 2) && + ((Scape[Guy.Pos.x - 1][Guy.Pos.y].Art == 1) || + (Scape[Guy.Pos.x][Guy.Pos.y - 1].Art == 1) || + (Scape[Guy.Pos.x + 1][Guy.Pos.y].Art == 1) || + (Scape[Guy.Pos.x][Guy.Pos.y + 1].Art == 1))) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::BOAT; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BOOT)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::BOAT; + } + else PapierText = Renderer::DrawText(BOOTBEDINGUNGEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTROHR].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTROHR].Phase != -1)) + { + LoadString(g_hInst, BEGINNROHR, StdString, 1024); + World::MakeRohString(-1, -1, ROHR); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTROHR].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::PIPE; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == ROHR)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::PIPE; + } + else PapierText = Renderer::DrawText(ROHRBEDINGUNGEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTSOS].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTSOS].Phase != -1)) + { + LoadString(g_hInst, BEGINNSOS, StdString, 1024); + World::MakeRohString(-1, -1, SOS); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTSOS].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::SOS; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == SOS)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::SOS; + } + else PapierText = Renderer::DrawText(SOSBEDINGUNGEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS1].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS1].Phase != -1)) + { + LoadString(g_hInst, BEGINNHAUS1, StdString, 1024); + World::MakeRohString(-1, -1, HAUS1); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTHAUS1].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) + PapierText = Renderer::DrawText(BAUMZUKLEIN, TXTPAPIER, 1); + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::HOUSE1; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::HOUSE1; + } + else PapierText = Renderer::DrawText(GEGENDNICHT, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS2].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS2].Phase != -1)) + { + LoadString(g_hInst, BEGINNHAUS2, StdString, 1024); + World::MakeRohString(-1, -1, HAUS2); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTHAUS2].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) + PapierText = Renderer::DrawText(BAUMZUKLEIN, TXTPAPIER, 1); + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) + PapierText = Renderer::DrawText(NICHTOHNELEITER, TXTPAPIER, 1); + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::HOUSE2; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::HOUSE2; + } + else PapierText = Renderer::DrawText(GEGENDNICHT, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTHAUS3].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTHAUS3].Phase != -1)) + { + LoadString(g_hInst, BEGINNHAUS3, StdString, 1024); + World::MakeRohString(-1, -1, HAUS3); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTHAUS3].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= BAUM1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= BAUM4)) + PapierText = Renderer::DrawText(BAUMZUKLEIN, TXTPAPIER, 1); + else if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BAUMGROSS) || + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS1)) + PapierText = Renderer::DrawText(NICHTOHNEPLATTFORM, TXTPAPIER, 1); + else if (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS2) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::HOUSE3; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == HAUS3)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::HOUSE3; + } + else PapierText = Renderer::DrawText(GEGENDNICHT, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTFEUERST].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTFEUERST].Phase != -1)) + { + LoadString(g_hInst, BEGINNFEUERSTELLE, StdString, 1024); + World::MakeRohString(-1, -1, FEUERSTELLE); + std::strcat(StdString, RohString); + TextBereich[TXTTEXTFELD].Aktiv = true; + Renderer::DrawString(StdString, (short)TextBereich[TXTTEXTFELD].rcText.left, + (short)TextBereich[TXTTEXTFELD].rcText.top, 2); + + Bmp[BUTTFEUERST].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Typ == 0)) + { + Scape[Guy.Pos.x][Guy.Pos.y].AkNummer = 0; + Bmp[BUTTSTOP].Phase = 0; + Guy.Aktion = Action::FIREPLACE; + } + else if ((Bmp[BUTTWEITER].Phase != -1) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt == FEUERSTELLE)) + { + Bmp[BUTTSTOP].Phase = 0; + Guy.PosAlt = Guy.PosScreen; + Routing::ShortRoute(Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.x, + Scape[Guy.Pos.x][Guy.Pos.y].GPosAlt.y); + Guy.Aktion = Action::FIREPLACE; + } + else PapierText = Renderer::DrawText(FEUERSTELLENBEDINGUNGEN, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[BUTTDESTROY].rcDes)) && + (HauptMenue == MEBAUEN) && (Bmp[BUTTDESTROY].Phase != -1)) + { + Renderer::DrawText(BEGINNDESTROY, TXTTEXTFELD, 2); + Bmp[BUTTDESTROY].Animation = true; + if ((Button == 0) && (Push == 1)) + { + Sound::PlaySound(WAVKLICK2, 100); + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FELD) && + (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= FEUERSTELLE)) + { + Guy.AkNummer = 0; + Guy.Aktion = Action::DESTROY; + } + else PapierText = Renderer::DrawText(KEINBAUWERK, TXTPAPIER, 1); + } + } + else if ((InRect(MousePosition.x, MousePosition.y, Bmp[INVPAPIER].rcDes)) && (HauptMenue == MEINVENTAR)) + { + for (i = ROHAST; i <= ROHSCHLEUDER; i++) + { + if (InRect(MousePosition.x, MousePosition.y, Bmp[i].rcDes) && (Guy.Inventar[i]>0)) + { + if ((Button == 0) && (Push == 1)) + { + if (TwoClicks == -1) + { + CursorTyp = i; + TwoClicks = i; + } + else World::CheckBenutze(i); + } + switch (i) + { + case ROHAST: Renderer::DrawText(AST, TXTTEXTFELD, 2); break; + case ROHSTEIN: Renderer::DrawText(STEIN, TXTTEXTFELD, 2); break; + case ROHAXT: Renderer::DrawText(AXT, TXTTEXTFELD, 2); break; + case ROHBLATT: Renderer::DrawText(BLATT, TXTTEXTFELD, 2); break; + case ROHSTAMM: Renderer::DrawText(STAMM, TXTTEXTFELD, 2); break; + case ROHEGGE: Renderer::DrawText(EGGE, TXTTEXTFELD, 2); break; + case ROHLIANE: Renderer::DrawText(LIANE, TXTTEXTFELD, 2); break; + case ROHANGEL: Renderer::DrawText(ANGEL, TXTTEXTFELD, 2); break; + case ROHHAMMER: Renderer::DrawText(HAMMER, TXTTEXTFELD, 2); break; + case ROHFERNROHR: Renderer::DrawText(FERNROHR, TXTTEXTFELD, 2); break; + case ROHSTREICHHOLZ: Renderer::DrawText(STREICHHOLZ, TXTTEXTFELD, 2); break; + case ROHSCHAUFEL: Renderer::DrawText(SCHAUFEL, TXTTEXTFELD, 2); break; + case ROHKARTE: Renderer::DrawText(KARTE, TXTTEXTFELD, 2); break; + case ROHSCHLEUDER: Renderer::DrawText(SCHLEUDER, TXTTEXTFELD, 2); break; + } + + break; + } + } + } + else if (InRect(MousePosition.x, MousePosition.y, TextBereich[TXTTAGESZEIT].rcText)) + Renderer::DrawText(SOSPAET, TXTTEXTFELD, 2); + else if (InRect(MousePosition.x, MousePosition.y, TextBereich[TXTCHANCE].rcText)) + Renderer::DrawText(CHANCETEXT, TXTTEXTFELD, 2); + else // TwoClicks löschen + { + if ((Button == 0) && (Push == 1)) Sound::PlaySound(WAVKLICK, 100); + TwoClicks = -1; + } + } + + bool InDreieck(short X, short Y, short X0, short Y0, short X1, short Y1, short X3, short Y3) + { + float x, y, x0, y0, x1, y1, x3, y3, a, b, c, d; + + x = (float)X; y = (float)Y; x0 = (float)X0; y0 = (float)Y0; x1 = (float)X1; y1 = (float)Y1; x3 = (float)X3; y3 = (float)Y3; + + c = (x - x1) / (x0 - x1); + if (c<0) return false; + d = ((y - y3)*(x0 - x1) - (x - x1)*(y0 - y3)) / ((y1 - y3)*(x0 - x1)); + if (d<0) return false; + b = ((y - y0)*(x1 - x0) - (x - x0)*(y1 - y0)) / ((x1 - x0)*(y3 - y1)); + if (b<0) return false; + a = (x - x0) / (x1 - x0) - b; + if (a<0) return false; + return true; + } + + bool InRect(short x, short y, RECT rcRect) + { + if ((x <= rcRect.right) && (x >= rcRect.left) && + (y <= rcRect.bottom) && (y >= rcRect.top)) return true; + return false; + } + + void CalcGuyKoor() + { + short Dx, Dy; // Differenz zwischen Ziel und Start + + if (Step >= Steps) + { + RoutePunkt++; + + if ((RoutePunkt >= (RouteLaenge>1 ? 2 * (RouteLaenge - 1) : 1) || + ((Guy.Aktion == Action::CANCEL) && (RouteLaenge>1)))) + { + if (RouteLaenge>1) Bmp[BUTTSTOP].Phase = -1; + Bmp[Guy.Zustand].Phase = 0; + Guy.Aktiv = false; + RouteZiel.x = -1; + RouteZiel.y = -1; + return; + } + Guy.Pos.x = Route[(RoutePunkt + 1) / 2].x; + Guy.Pos.y = Route[(RoutePunkt + 1) / 2].y; + World::Entdecken(); + + if (BootsFahrt) + World::AddTime(0, Scape[Route[(RoutePunkt + 1) / 2].x][Route[(RoutePunkt + 1) / 2].y].LaufZeit * 3); + else World::AddTime(0, Scape[Route[(RoutePunkt + 1) / 2].x][Route[(RoutePunkt + 1) / 2].y].LaufZeit * 5); + World::AddResource(NAHRUNG, -1); + World::AddResource(WASSER, -1); + + if ((Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) Guy.Zustand -= 2; // nichts machen + else if (BootsFahrt) Guy.Zustand = GUYBOOTLINKS; + else Guy.Zustand = GUYLINKS; + + if (RouteLaenge > 1) // Bei normaler Routenabarbeitung die Richung Kachelmäßig rausfinden + { + if (Route[RoutePunkt / 2].x > Route[RoutePunkt / 2 + 1].x) Guy.Zustand += 0; + else if (Route[RoutePunkt / 2].x < Route[RoutePunkt / 2 + 1].x) Guy.Zustand += 2; + else if (Route[RoutePunkt / 2].y < Route[RoutePunkt / 2 + 1].y) Guy.Zustand += 3; + else if (Route[RoutePunkt / 2].y > Route[RoutePunkt / 2 + 1].y) Guy.Zustand += 1; + } + else + { + if ((RouteKoor[RoutePunkt].x > RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y >= RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 0; + else if ((RouteKoor[RoutePunkt].x <= RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y > RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 1; + else if ((RouteKoor[RoutePunkt].x < RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y <= RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 2; + else if ((RouteKoor[RoutePunkt].x >= RouteKoor[RoutePunkt + 1].x) && + (RouteKoor[RoutePunkt].y < RouteKoor[RoutePunkt + 1].y)) Guy.Zustand += 3; + } + + Dx = RouteKoor[RoutePunkt + 1].x - RouteKoor[RoutePunkt].x; + Dy = RouteKoor[RoutePunkt + 1].y - RouteKoor[RoutePunkt].y; + GuyPosScreenStart.x = RouteKoor[RoutePunkt].x; + GuyPosScreenStart.y = RouteKoor[RoutePunkt].y; + Step = 0; + + if (abs(Dx)>abs(Dy)) + { + if (Dx>0) Schrittx = 1; else Schrittx = -1; + if (Dx == 0) Schritty = 0; else Schritty = (float)Dy / ((float)(Dx*Schrittx)); + Steps = abs(Dx); + + } + else + { + if (Dy>0) Schritty = 1; else Schritty = -1; + if (Dy == 0) Schrittx = 0; else Schrittx = (float)Dx / ((float)(Dy*Schritty)); + Steps = abs(Dy); + } + + } + + if (Bild % Scape[Guy.Pos.x][Guy.Pos.y].LaufZeit == 0) + { + Step++; + short i; + if (BootsFahrt) i = 4; else i = 2; + if (Step%i == 0) + { + Bmp[Guy.Zustand].Phase++; + if (Bmp[Guy.Zustand].Phase >= Bmp[Guy.Zustand].Anzahl) Bmp[Guy.Zustand].Phase = 0; + } + Guy.PosScreen.x = GuyPosScreenStart.x + ROUND(Step*Schrittx); + Guy.PosScreen.y = GuyPosScreenStart.y + ROUND(Step*Schritty); + if ((Spielzustand == SZINTRO) || (Spielzustand == SZGERETTET)) // Beim Intro fährt die Kamera mit + { + Camera.x = Guy.PosScreen.x - rcGesamt.right / 2; + Camera.y = Guy.PosScreen.y - rcGesamt.bottom / 2; + } + } + } + + void CalcKoor() + { + short x, y; + // Bildschirmkoordinaten berechnen und speichern + for (y = 0; yabs(Dy)) + { + if (Dx>0) Sx = -1; else Sx = 1; + if (Dx == 0) Sy = 0; else Sy = (float)Dy / ((float)(Dx*Sx)); + Steps = abs(Dx); + } + else + { + if (Dy>0) Sy = -1; else Sy = 1; + if (Dy == 0) Sx = 0; else Sx = (float)Dx / ((float)(Dy*Sy)); + Steps = abs(Dy); + } + + for (i = 0; i rcBereich.right) + { + rcRectsrc.right = rcRectsrc.right + rcBereich.right - rcRectdes.right; + rcRectdes.right = rcBereich.right; + } + if (rcRectdes.bottom> rcBereich.bottom) + { + rcRectsrc.bottom = rcRectsrc.bottom + rcBereich.bottom - rcRectdes.bottom; + rcRectdes.bottom = rcBereich.bottom; + } + } + + void ButtAniAus() + { + short i; + + for (i = BUTTGITTER; i <= BUTTDESTROY; i++) + { + Bmp[i].Animation = false; + } + } + + void AbspannCalc() + { + short i, k; + + if (AbspannZustand == 0) + { + for (k = 1; k<10; k++) + { + if (AbspannListe[AbspannNr][k].Bild == -1) break; + if (!AbspannListe[AbspannNr][k].Aktiv) continue; + i = 150 / LastBild; + Bmp[AbspannListe[AbspannNr][k].Bild].rcDes.top -= i; + + if (Bmp[AbspannListe[AbspannNr][k].Bild].rcDes.top= Bmp[AbspannNr].Anzahl) + { + Bmp[AbspannNr].Phase = 0; + AbspannNr++; + if (AbspannNr > GUYSCHLEUDER) AbspannNr = GUYLINKS; + } + } + } + } + + void Animationen() + { + short x, y, i, j, k, loop; // Zwischenspeicher + + + for (y = 0; y= BAUM1DOWN) && (j <= BAUM4DOWN) && // Die Baumfällenanimation nur ein mal abspielen + (Scape[x][y].Phase == Bmp[j].Anzahl - 1)); + else Scape[x][y].Phase++; + if (Scape[x][y].Phase >= Bmp[j].Anzahl) Scape[x][y].Phase = 0; + } + + } + + for (j = BUTTGITTER; j <= BUTTDESTROY; j++) + { + if (!Bmp[j].Animation) continue; + i = LastBild / Bmp[j].Geschwindigkeit; + if (i<1) i = 1; + if (Bild%i == 0) + { + Bmp[j].Phase++; + if (Bmp[j].Phase >= Bmp[j].Anzahl) Bmp[j].Phase = 0; + } + } + + // Spielfigur + + // laufen + if (((Guy.Zustand >= GUYLINKS) && (Guy.Zustand <= GUYUNTEN)) || + ((Guy.Zustand >= GUYBOOTLINKS) && (Guy.Zustand <= GUYBOOTUNTEN)) || + (Guy.Zustand == GUYSCHIFF) || (Guy.Zustand == GUYSCHWIMMEN)) + { + i = LastBild / Bmp[Guy.Zustand].Geschwindigkeit; + if (i<1) i = 1; + if (LastBild - Bmp[Guy.Zustand].Geschwindigkeit < 0) loop = 2; else loop = 1; + if (BootsFahrt) loop = loop * 2; + for (k = 0; k= GUYSUCHEN) && (Guy.Zustand <= GUYSCHLEUDER) && + (Bmp[Guy.Zustand].Phase != Bmp[Guy.Zustand].Anzahl)) + { + i = LastBild / Bmp[Guy.Zustand].Geschwindigkeit; + if (i<1) i = 1; + if (Bild%i == 0) + { + Bmp[Guy.Zustand].Phase++; + if (Bmp[Guy.Zustand].Phase >= Bmp[Guy.Zustand].Anzahl) + { + Bmp[Guy.Zustand].Phase = 0; + if (PapierText == -1) Guy.Aktiv = false; + } + } + } + } + +} // namespace Math diff --git a/Math.hpp b/Math.hpp new file mode 100644 index 0000000..1faa30b --- /dev/null +++ b/Math.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include "headers.hpp" +#include "types.hpp" +#include "extern.hpp" + +namespace Math +{ + void AbspannCalc(); // Kalkuliert die Koordinaten für den Abspann + void CalcGuyKoor(); // Berechnet die neuen Koordinaten der Spielfigur + void CalcKoor(); // Bildschirmkoordinaten der Kacheln berechnnen; + void MouseInSpielflaeche(short Button, short Push, short xDiff, short yDiff); // Falls die Maus in der Spielfäche ist + void MouseInPanel(short Button, short Push); // Falls die Maus im Panel ist + bool InDreieck(short X, short Y, short X0, short Y0, short X1, short Y1, short X3, short Y3); + bool InRect(short x, short y, RECT rcRect); // Ist ein Punkt in einem Rechteck + void CalcRect(RECT rcBereich); // Beschneidet das BlitRechteck so, daß es nur innerhalb des Bereiches gemalt wird + bool LineIntersect(ZWEID LineStartPos, ZWEID Pos, bool store); // Für Pathfinding (Ist eine Gerade unterbrochen?) + void Animationen(); // Startet die einzelnen Animationen + void ButtAniAus(); // Schaltet alle Knopfanimationien aus (für MouseInPanel) +} // namespace Math diff --git a/Renderer.cpp b/Renderer.cpp new file mode 100644 index 0000000..9110a79 --- /dev/null +++ b/Renderer.cpp @@ -0,0 +1,1153 @@ +#include "Renderer.hpp" + +#include "Action.hpp" +#include "Direct.hpp" +#include "Game.hpp" +#include "Math.hpp" +#include "Sound.hpp" +#include "Routing.hpp" +#include "World.hpp" + +#include +#include +#include + +namespace Renderer +{ + void Fade(short RP, short GP, short BP) + { + short blackloop; + + for (blackloop = 0; blackloop<256; blackloop++) + { + DDGammaRamp.red[blackloop] = DDGammaOld.red[blackloop] * RP / 100; + DDGammaRamp.green[blackloop] = DDGammaOld.green[blackloop] * GP / 100; + DDGammaRamp.blue[blackloop] = DDGammaOld.blue[blackloop] * BP / 100; + } + lpDDGammaControl->SetGammaRamp(0, &DDGammaRamp); + } + + void LimitScroll() + { + if (Camera.x < ScapeGrenze.left) + Camera.x = (short)ScapeGrenze.left; + if (Camera.x + rcSpielflaeche.right > ScapeGrenze.right) + Camera.x = (short)ScapeGrenze.right - (short)rcSpielflaeche.right; + if (Camera.y < ScapeGrenze.top) + Camera.y = (short)ScapeGrenze.top; + if (Camera.y + rcSpielflaeche.bottom > ScapeGrenze.bottom) + Camera.y = (short)ScapeGrenze.bottom - (short)rcSpielflaeche.bottom; + } + + ZWEID GetKachel(short PosX, short PosY) + { + short x, y; + ZWEID Erg; + + for (y = 0; y Scape[x][y].xScreen) && (PosX < Scape[x][y].xScreen + KXPIXEL) && + (PosY > Scape[x][y].yScreen) && (PosY < Scape[x][y].yScreen + KYPIXEL)) + { + + if ((Math::InDreieck(PosX, PosY, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][0].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][0].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][1].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][1].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][3].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][3].y)) || + (Math::InDreieck(PosX, PosY, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][2].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][2].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][1].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][1].y, + Scape[x][y].xScreen + EckKoor[Scape[x][y].Typ][3].x, + Scape[x][y].yScreen + EckKoor[Scape[x][y].Typ][3].y))) + { + Erg.x = x; + Erg.y = y; + return Erg; + } + } + } + Erg.x = -1; + Erg.y = -1; + return Erg; + } + + inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b) + { + DWORD Erg = 0; + + if (ddpf.dwRBitMask == 63488) + { + Erg = (DWORD)((r & 0xF8) >> 3); + Erg = Erg << 6; + Erg = Erg | (DWORD)((g & 0xFC) >> 2); + Erg = Erg << 5; + Erg = Erg | (DWORD)((b & 0xF8) >> 3); + } + else if (ddpf.dwRBitMask == 31744) + { + Erg = (DWORD)((r & 0xF8) >> 3); + Erg = Erg << 5; + Erg = Erg | (DWORD)((g & 0xF8) >> 3); + Erg = Erg << 5; + Erg = Erg | (DWORD)((b & 0xF8) >> 3); + } + else + { + Erg = 0; + MessageBeep(MB_OK); + } + return Erg; + } + + inline void DWORD2RGB(DWORD color) + { + if (ddpf.dwRBitMask == 63488) + { + rgbStruct.r = (byte)((color & 0xF800) >> 8); + rgbStruct.g = (byte)((color & 0x07E0) >> 3); + rgbStruct.b = (byte)((color & 0x001F) << 3); + } + else if (ddpf.dwRBitMask == 31744) + { + rgbStruct.r = (byte)((color & 0x7C00) >> 7); + rgbStruct.g = (byte)((color & 0x03E0) >> 2); + rgbStruct.b = (byte)((color & 0x001F) << 3); + } + } + + void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon, LPDIRECTDRAWSURFACE4 lpDDSNach, bool Transp) + { + HRESULT hr; + short z; + z = 0; + + while (1) + { + z++; + hr = lpDDSNach->GetBltStatus(/*DDGBS_ISBLTDONE |*/ DDGBS_CANBLT); + + if (hr == DD_OK) break; + else Sleep(1); + + if (z == 1000) + { + MessageBeep(MB_OK); + break; + } + } + + while (1) + { + z++; + if (Transp) hr = lpDDSNach->Blt(&rcRectdes, lpDDSVon, &rcRectsrc, DDBLT_KEYSRC | DDBLT_WAIT, nullptr); + else hr = lpDDSNach->Blt(&rcRectdes, lpDDSVon, &rcRectsrc, DDBLT_WAIT, nullptr); + if (hr != DDERR_WASSTILLDRAWING) break; + if (z == 1000) + { + MessageBeep(MB_OK); + break; + } + } + } + + void PutPixel(short x, short y, DWORD color, LPDDSURFACEDESC2 ddsd) + { + WORD *pixels = (WORD *)ddsd->lpSurface; + // DWORD pitch = ddsd->dwWidth+2; + DWORD pitch = ddsd->lPitch >> 1; + pixels[y*pitch + x] = (WORD)color; + } + + void GetPixel(short x, short y, LPDDSURFACEDESC2 ddsd) + { + DWORD color; + + WORD *pixels = (WORD *)ddsd->lpSurface; + // DWORD pitch = ddsd->dwWidth; + DWORD pitch = ddsd->lPitch >> 1; + color = pixels[y*pitch + x]; + + DWORD2RGB(color); + } + + void ZeichneBilder(short x, short y, short i, RECT Ziel, bool Reverse, short Frucht) + { + short Phase; + + if (Frucht == -1) Phase = Bmp[i].Phase; else Phase = Frucht; + rcRectsrc = Bmp[i].rcSrc; + if (!Reverse) + { + rcRectsrc.top += Phase*(Bmp[i].Hoehe); + } + else + { + rcRectsrc.top = Bmp[i].rcSrc.top + (Bmp[i].Anzahl - 1)*Bmp[i].Hoehe - Phase*Bmp[i].Hoehe; + } + rcRectsrc.bottom = rcRectsrc.top + (Bmp[i].Hoehe); + rcRectdes.left = x; + rcRectdes.top = y; + rcRectdes.right = x + (Bmp[i].Breite); + rcRectdes.bottom = y + (Bmp[i].Hoehe); + Math::CalcRect(Ziel); + Blitten(Bmp[i].Surface, lpDDSBack, true); + } + + void ZeichneObjekte() + { + short x, y; + bool Guyzeichnen; + + for (y = 0; y Camera.x + rcSpielflaeche.left - KXPIXEL) && + (Scape[x][y].xScreen < Camera.x + rcSpielflaeche.right + KXPIXEL) && + (Scape[x][y].yScreen > Camera.y + rcSpielflaeche.top - KYPIXEL) && + (Scape[x][y].yScreen < Camera.y + rcSpielflaeche.bottom + KYPIXEL) && + (Scape[x][y].Entdeckt) && + ((Scape[x][y].Markiert) || (Scape[x][y].Objekt != -1) || (Guyzeichnen)))) continue; + + if (Scape[x][y].Markiert) // Die Rahmen um die markierten Kacheln malen + { + rcRectsrc.left = KXPIXEL * Scape[x][y].Typ; + rcRectsrc.right = KXPIXEL * Scape[x][y].Typ + KXPIXEL; + rcRectsrc.top = 2 * KYPIXEL; + rcRectsrc.bottom = 3 * KYPIXEL; + rcRectdes.left = Scape[x][y].xScreen - Camera.x; + rcRectdes.right = rcRectdes.left + KXPIXEL; + rcRectdes.top = Scape[x][y].yScreen - Camera.y; + rcRectdes.bottom = rcRectdes.top + KYPIXEL; + Math::CalcRect(rcSpielflaeche); + Blitten(lpDDSMisc, lpDDSBack, true); + } + // Landschaftsanimationen malen (und Feld) + if ((Scape[x][y].Objekt != -1) && (LAnimation) && + ((Scape[x][y].Objekt <= SCHLEUSE6)) + || (Scape[x][y].Objekt == FELD) // Der Guy ist immer vor diesen Objekten + || (Scape[x][y].Objekt == ROHR) + || (Scape[x][y].Objekt == SOS)) + { + // Sound abspielen + if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && + ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) + { + if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 100); + else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 90); + } + + ZeichneBilder(Scape[x][y].xScreen + Scape[x][y].ObPos.x - Camera.x, + Scape[x][y].yScreen + Scape[x][y].ObPos.y - Camera.y, + Scape[x][y].Objekt, rcSpielflaeche, Scape[x][y].Reverse, + (short)Scape[x][y].Phase); + } + else + { + + if (((Scape[x][y].Objekt >= BAUM1) && (Scape[x][y].Objekt <= BAUM4DOWN)) || + (Scape[x][y].Objekt == BAUMGROSS) || (Scape[x][y].Objekt == FEUER) || + (Scape[x][y].Objekt == WRACK) || (Scape[x][y].Objekt == WRACK2) || + (Scape[x][y].Objekt >= ZELT)) // Bäume und Früchte (und alle anderen Objekte) malen + { + // Sound abspielen + if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && + ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) + { + if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 100); + else if (Bmp[Scape[x][y].Objekt].Sound != Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Sound) + Sound::PlaySound(Bmp[Scape[x][y].Objekt].Sound, 90); + } + if (Guyzeichnen) + { + if ((Guy.PosScreen.y) < (Scape[x][y].yScreen + Scape[x][y].ObPos.y + + Bmp[Scape[x][y].Objekt].Hoehe)) + { + ZeichneGuy(); + Guyzeichnen = false; + } + } + + ZeichneBilder(Scape[x][y].xScreen + Scape[x][y].ObPos.x - Camera.x, + Scape[x][y].yScreen + Scape[x][y].ObPos.y - Camera.y, + Scape[x][y].Objekt, rcSpielflaeche, false, + (short)Scape[x][y].Phase); + } + } + if (Guyzeichnen) ZeichneGuy(); + } + } + + void ZeichneGuy() + { + if (BootsFahrt) + { + if (Guy.Zustand == GUYSCHIFF) + { + ZeichneBilder(Guy.PosScreen.x - 30 - Camera.x, + Guy.PosScreen.y - 28 - Camera.y, + Guy.Zustand, rcSpielflaeche, false, -1); + } + else + { + ZeichneBilder(Guy.PosScreen.x - (Bmp[Guy.Zustand].Breite) / 2 - Camera.x, + Guy.PosScreen.y - (Bmp[Guy.Zustand].Hoehe) / 2 - Camera.y, + Guy.Zustand, rcSpielflaeche, false, -1); + } + } + else ZeichneBilder(Guy.PosScreen.x - (Bmp[Guy.Zustand].Breite) / 2 - Camera.x, + Guy.PosScreen.y - (Bmp[Guy.Zustand].Hoehe) - Camera.y, + Guy.Zustand, rcSpielflaeche, false, -1); + // Sound abspielen + if (Guy.Aktiv) Sound::PlaySound(Bmp[Guy.Zustand].Sound, 100); + } + + void ZeichnePapier() + { + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 464; + rcRectsrc.bottom = 77; + rcRectdes.left = TextBereich[TXTPAPIER].rcText.left - 60; + rcRectdes.top = TextBereich[TXTPAPIER].rcText.top - 30; + rcRectdes.right = rcRectdes.left + 464; + rcRectdes.bottom = rcRectdes.top + 77; + Blitten(lpDDSPapier, lpDDSBack, true); + rcRectdes.left = rcRectdes.left + 34; + rcRectdes.top = rcRectdes.top + 77; + rcRectdes.right = rcRectdes.right; + rcRectdes.bottom = TextBereich[TXTPAPIER].rcText.top + PapierText; + ddbltfx.dwFillColor = RGB2DWORD(236, 215, 179); + lpDDSBack->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + rcRectsrc.left = 0; + rcRectsrc.top = 77; + rcRectsrc.right = 464; + rcRectsrc.bottom = 154; + rcRectdes.left = TextBereich[TXTPAPIER].rcText.left - 60; + rcRectdes.top = rcRectdes.bottom - 47; + rcRectdes.right = rcRectdes.left + 464; + rcRectdes.bottom = rcRectdes.top + 77; + Blitten(lpDDSPapier, lpDDSBack, true); + } + + void ZeichnePanel() + { + short diffx, diffy, TagesZeit, i, j, Ringtmp; // für die Sonnenanzeige + + // Karte + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 2 * MAXXKACH; + rcRectsrc.bottom = 2 * MAXYKACH; + rcRectdes.left = rcKarte.left; + rcRectdes.top = rcKarte.top; + rcRectdes.right = rcKarte.right; + rcRectdes.bottom = rcKarte.bottom; + Blitten(lpDDSKarte, lpDDSBack, false); + + // Spielfigur + rcRectdes.left = rcKarte.left + 2 * Guy.Pos.x; + rcRectdes.top = rcKarte.top + 2 * Guy.Pos.y; + rcRectdes.right = rcRectdes.left + 2; + rcRectdes.bottom = rcRectdes.top + 2; + ddbltfx.dwFillColor = RGB2DWORD(255, 0, 0); + lpDDSBack->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + + // Position einmalen + rcRectsrc.left = 205; + rcRectsrc.top = 0; + rcRectsrc.right = 205 + 65; + rcRectsrc.bottom = 0 + 65; + rcRectdes.left = rcKarte.left + (Camera.x + 2 * Camera.y) / (KXPIXEL / 2) - MAXXKACH - 2; + rcRectdes.top = rcKarte.top + (2 * Camera.y - Camera.x) / (KXPIXEL / 2) + MAXYKACH - 21 - 2; + rcRectdes.right = rcRectdes.left + 65; + rcRectdes.bottom = rcRectdes.top + 65; + Math::CalcRect(rcKarte); + Blitten(lpDDSPanel, lpDDSBack, true); + + // Panel malen + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 205; + rcRectsrc.bottom = 600; + rcRectdes.left = rcPanel.left; + rcRectdes.top = rcPanel.top; + rcRectdes.right = rcPanel.right; + rcRectdes.bottom = rcPanel.bottom; + Blitten(lpDDSPanel, lpDDSBack, true); + + // Gitternetzknopf + if (Gitter) Bmp[BUTTGITTER].Phase = 1; else Bmp[BUTTGITTER].Phase = 0; + ZeichneBilder((short)Bmp[BUTTGITTER].rcDes.left, + (short)Bmp[BUTTGITTER].rcDes.top, + BUTTGITTER, rcPanel, false, -1); + + // SOUNDknopf + if ((Soundzustand == 0) || (Soundzustand == -1)) Bmp[BUTTSOUND].Phase = 1; else Bmp[BUTTSOUND].Phase = 0; + ZeichneBilder((short)Bmp[BUTTSOUND].rcDes.left, + (short)Bmp[BUTTSOUND].rcDes.top, + BUTTSOUND, rcPanel, false, -1); + + // ANIMATIONknopf + if (!LAnimation) Bmp[BUTTANIMATION].Phase = 1; else Bmp[BUTTANIMATION].Phase = 0; + ZeichneBilder((short)Bmp[BUTTANIMATION].rcDes.left, + (short)Bmp[BUTTANIMATION].rcDes.top, + BUTTANIMATION, rcPanel, false, -1); + + // BEENDENknopf + ZeichneBilder((short)Bmp[BUTTBEENDEN].rcDes.left, + (short)Bmp[BUTTBEENDEN].rcDes.top, + BUTTBEENDEN, rcPanel, false, -1); + + // NEUknopf + ZeichneBilder((short)Bmp[BUTTNEU].rcDes.left, + (short)Bmp[BUTTNEU].rcDes.top, + BUTTNEU, rcPanel, false, -1); + + // TAGNEUknopf + ZeichneBilder((short)Bmp[BUTTTAGNEU].rcDes.left, + (short)Bmp[BUTTTAGNEU].rcDes.top, + BUTTTAGNEU, rcPanel, false, -1); + + // Aktionsknopf + if (HauptMenue == MEAKTION) Bmp[BUTTAKTION].Phase = Bmp[BUTTAKTION].Anzahl; + else if (Bmp[BUTTAKTION].Phase == Bmp[BUTTAKTION].Anzahl) Bmp[BUTTAKTION].Phase = 0; + ZeichneBilder((short)Bmp[BUTTAKTION].rcDes.left, + (short)Bmp[BUTTAKTION].rcDes.top, + BUTTAKTION, rcPanel, false, -1); + + // BauKnopf + if (HauptMenue == MEBAUEN) Bmp[BUTTBAUEN].Phase = Bmp[BUTTBAUEN].Anzahl; + else if (Bmp[BUTTBAUEN].Phase == Bmp[BUTTBAUEN].Anzahl) Bmp[BUTTBAUEN].Phase = 0; + ZeichneBilder((short)Bmp[BUTTBAUEN].rcDes.left, + (short)Bmp[BUTTBAUEN].rcDes.top, + BUTTBAUEN, rcPanel, false, -1); + + // Inventarknopf + if (HauptMenue == MEINVENTAR) Bmp[BUTTINVENTAR].Phase = Bmp[BUTTINVENTAR].Anzahl; + else if (Bmp[BUTTINVENTAR].Phase == Bmp[BUTTINVENTAR].Anzahl) Bmp[BUTTINVENTAR].Phase = 0; + ZeichneBilder((short)Bmp[BUTTINVENTAR].rcDes.left, + (short)Bmp[BUTTINVENTAR].rcDes.top, + BUTTINVENTAR, rcPanel, false, -1); + + // WEITERknopf + if (Bmp[BUTTWEITER].Phase != -1) ZeichneBilder((short)Bmp[BUTTWEITER].rcDes.left, + (short)Bmp[BUTTWEITER].rcDes.top, + BUTTWEITER, rcPanel, false, -1); + + // STOPknopf + if (Bmp[BUTTSTOP].Phase != -1) ZeichneBilder((short)Bmp[BUTTSTOP].rcDes.left, + (short)Bmp[BUTTSTOP].rcDes.top, + BUTTSTOP, rcPanel, false, -1); + + // ABLEGENknopf + if (Bmp[BUTTABLEGEN].Phase != -1) ZeichneBilder((short)Bmp[BUTTABLEGEN].rcDes.left, + (short)Bmp[BUTTABLEGEN].rcDes.top, + BUTTABLEGEN, rcPanel, false, -1); + + // Welches Menü zeichnen? + switch (HauptMenue) + { + case MEAKTION: + for (i = BUTTSUCHEN; i <= BUTTSCHLEUDER; i++) + { + if (Bmp[i].Phase == -1) + { + ZeichneBilder((short)Bmp[i].rcDes.left, + (short)Bmp[i].rcDes.top, + BUTTFRAGEZ, rcPanel, false, -1); + continue; + } + ZeichneBilder((short)Bmp[i].rcDes.left, + (short)Bmp[i].rcDes.top, + i, rcPanel, false, -1); + } + break; + case MEBAUEN: + for (i = BUTTZELT; i <= BUTTDESTROY; i++) + { + if (Bmp[i].Phase == -1) + { + ZeichneBilder((short)Bmp[i].rcDes.left, + (short)Bmp[i].rcDes.top, + BUTTFRAGEZ, rcPanel, false, -1); + continue; + } + ZeichneBilder((short)Bmp[i].rcDes.left, + (short)Bmp[i].rcDes.top, + i, rcPanel, false, -1); + } + break; + case MEINVENTAR: + ZeichneBilder((short)Bmp[INVPAPIER].rcDes.left, + (short)Bmp[INVPAPIER].rcDes.top, + INVPAPIER, rcPanel, false, -1); + for (i = ROHAST; i <= ROHSCHLEUDER; i++) + { + if (Guy.Inventar[i] <= 0) continue; + ZeichneBilder((short)Bmp[i].rcDes.left, + (short)Bmp[i].rcDes.top, + i, rcPanel, false, -1); + Bmp[ROEMISCH1].rcDes.top = Bmp[i].rcDes.top; + Bmp[ROEMISCH2].rcDes.top = Bmp[i].rcDes.top; + for (j = 1; j <= Guy.Inventar[i]; j++) + { + if (j<5) + { + ZeichneBilder((short)Bmp[i].rcDes.left + 20 + j * 4, + (short)Bmp[ROEMISCH1].rcDes.top, + ROEMISCH1, rcPanel, false, -1); + } + else if (j == 5) ZeichneBilder((short)Bmp[i].rcDes.left + 23, + (short)Bmp[ROEMISCH2].rcDes.top, + ROEMISCH2, rcPanel, false, -1); + else if ((j>5) && (j<10)) + { + ZeichneBilder((short)Bmp[i].rcDes.left + 20 + j * 4, + (short)Bmp[ROEMISCH1].rcDes.top, + ROEMISCH1, rcPanel, false, -1); + } + else if (j == 10) + ZeichneBilder((short)Bmp[i].rcDes.left + 43, + (short)Bmp[ROEMISCH2].rcDes.top, + ROEMISCH2, rcPanel, false, -1); + } + } + break; + + } + + // Säule1 + i = Bmp[SAEULE1].Hoehe - (short)Guy.Resource[WASSER] * Bmp[SAEULE1].Hoehe / 100; + rcRectsrc = Bmp[SAEULE1].rcSrc; + rcRectsrc.top += i; + rcRectdes = Bmp[SAEULE1].rcDes; + rcRectdes.top += i; + Blitten(Bmp[SAEULE1].Surface, lpDDSBack, true); + + // Säule2 + i = Bmp[SAEULE2].Hoehe - (short)Guy.Resource[NAHRUNG] * Bmp[SAEULE2].Hoehe / 100; + rcRectsrc = Bmp[SAEULE2].rcSrc; + rcRectsrc.top += i; + rcRectdes = Bmp[SAEULE2].rcDes; + rcRectdes.top += i; + Blitten(Bmp[SAEULE2].Surface, lpDDSBack, true); + + // Säule3 + i = Bmp[SAEULE3].Hoehe - (short)Guy.Resource[GESUNDHEIT] * Bmp[SAEULE3].Hoehe / 100; + rcRectsrc = Bmp[SAEULE3].rcSrc; + rcRectsrc.top += i; + rcRectdes = Bmp[SAEULE3].rcDes; + rcRectdes.top += i; + Blitten(Bmp[SAEULE3].Surface, lpDDSBack, true); + + // Sonnenanzeige + diffx = ((short)Bmp[SONNE].rcDes.right - (short)Bmp[SONNE].rcDes.left - Bmp[SONNE].Breite) / 2; + diffy = (short)Bmp[SONNE].rcDes.bottom - (short)Bmp[SONNE].rcDes.top - Bmp[SONNE].Hoehe / 2; + TagesZeit = (Stunden * 10 + Minuten * 10 / 60); + + ZeichneBilder((short)(Bmp[SONNE].rcDes.left + diffx * cos(pi - pi*TagesZeit / 120) + diffx), + (short)(Bmp[SONNE].rcDes.top + (-diffy * sin(pi - pi*TagesZeit / 120) + diffy)), + SONNE, Bmp[SONNE].rcDes, false, -1); + + // Rettungsring + if (Chance < 100) Ringtmp = (short)(100 * sin(pi / 200 * Chance)); + else Ringtmp = 100; + if (Ringtmp > 100) Ringtmp = 100; + ZeichneBilder((short)(Bmp[RING].rcDes.left), + (short)(Bmp[RING].rcDes.top + Ringtmp), + RING, rcPanel, false, -1); + + // Die ChanceZahl ausgeben + Textloeschen(TXTCHANCE); + TextBereich[TXTCHANCE].Aktiv = true; + TextBereich[TXTCHANCE].rcText.top = Bmp[RING].rcDes.top + Ringtmp + Bmp[RING].Hoehe; + TextBereich[TXTCHANCE].rcText.bottom = TextBereich[TXTCHANCE].rcText.top + S2YPIXEL; + std::sprintf(StdString, "%.1f", Chance); + DrawString(StdString, (short)(TextBereich[TXTCHANCE].rcText.left), + (short)(TextBereich[TXTCHANCE].rcText.top), 2); + + // TextFeld malen + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = 605; + rcRectsrc.bottom = 20; + rcRectdes = rcTextFeld1; + Blitten(lpDDSTextFeld, lpDDSBack, false); + } + + void DrawString(char *string, short x, short y, short Art) + { + short length, index, cindex, Breite, Hoehe; + + if (Art == 1) + { + Breite = S1XPIXEL; + Hoehe = S1YPIXEL; + } + if (Art == 2) + { + Breite = S2XPIXEL; + Hoehe = S2YPIXEL; + } + + // Länge der Schrift ermitteln + length = strlen(string); + + // Alle Zeichen durchgehen + for (index = 0; index= ' ') && (string[index] <= '/')) + { + rcRectsrc.left = cindex*Breite; + rcRectsrc.top = 0; + } + if ((string[index] >= '0') && (string[index] <= '?')) + { + rcRectsrc.left = (cindex - 16)*Breite; + rcRectsrc.top = Hoehe; + } + if ((string[index] >= '@') && (string[index] <= 'O')) + { + rcRectsrc.left = (cindex - 16 * 2)*Breite; + rcRectsrc.top = 2 * Hoehe; + } + if ((string[index] >= 'P') && (string[index] <= '_')) + { + rcRectsrc.left = (cindex - 16 * 3)*Breite; + rcRectsrc.top = 3 * Hoehe; + } + if ((string[index]>'_') && (string[index] <= 'o')) + { + rcRectsrc.left = (cindex - 16 * 4)*Breite; + rcRectsrc.top = 4 * Hoehe; + } + if ((string[index] >= 'p') && (string[index] <= '~')) + { + rcRectsrc.left = (cindex - 16 * 5)*Breite; + rcRectsrc.top = 5 * Hoehe; + } + + rcRectsrc.right = rcRectsrc.left + Breite; + rcRectsrc.bottom = rcRectsrc.top + Hoehe; + rcRectdes.left = x; + rcRectdes.top = y; + rcRectdes.right = x + Breite; + rcRectdes.bottom = y + Hoehe; + // Zeichen zeichnen + if (Art == 1) + { + Blitten(lpDDSSchrift1, lpDDSSchrift, true); + // x Position weiterschieben + x += S1ABSTAND; + } + if (Art == 2) + { + Blitten(lpDDSSchrift2, lpDDSSchrift, true); + // x Position weiterschieben + x += S2ABSTAND; + } + } + } + + short DrawText(int TEXT, short Bereich, short Art) + { + short BBreite, BHoehe, Posx, Posy; + short Pos; char *Posnext, *Posnext2; + char Text[1024]; + int blank = ' '; + int slash = '/'; + int strend = 0x0; + char scratch; // Zur Variablenausgabe + char StdString2[10]; // Zur Variablenausgabe + short Anzahl; // Zur Variablenausgabe + short Erg; + + Textloeschen(Bereich); + TextBereich[Bereich].Aktiv = true; + + if (Art == 1) + { + BBreite = S1ABSTAND; + BHoehe = S1YPIXEL; + } + if (Art == 2) + { + BBreite = S2ABSTAND; + BHoehe = S2YPIXEL; + } + LoadString(g_hInst, TEXT, Text, 1024); + Posx = (short)TextBereich[Bereich].rcText.left; + Posy = (short)TextBereich[Bereich].rcText.top; + Pos = 0; + Posnext = Text; + + while (1) + { + strcpy(StdString, ""); + Pos = Posnext - Text; + Posnext = strchr(Text + Pos + 1, blank); + Posnext2 = strchr(Text + Pos + 1, slash); + if ((Posnext != nullptr) && (Posnext2 != nullptr) && (Posnext2 <= Posnext)) + { + scratch = *(Posnext2 + 1); + switch (scratch) + { + case 'a': + Anzahl = std::sprintf(StdString2, " %d", Tag); + DrawString(StdString2, Posx, Posy, Art); + Posx += BBreite*(Anzahl); + break; + case 'b': + Anzahl = std::sprintf(StdString2, " %d", (short)Guy.Resource[GESUNDHEIT]); + DrawString(StdString2, Posx, Posy, Art); + Posx += BBreite*(Anzahl); + break; + case 'c': + Anzahl = std::sprintf(StdString2, " %.2f", Chance); + DrawString(StdString2, Posx, Posy, Art); + Posx += BBreite*(Anzahl); + break; + case 'd': + Frage = 0; + rcRectsrc = Bmp[JA].rcSrc; + rcRectdes.left = (short)TextBereich[Bereich].rcText.left + 50; + rcRectdes.top = Posy + 50; + rcRectdes.right = rcRectdes.left + Bmp[JA].Breite; + rcRectdes.bottom = rcRectdes.top + Bmp[JA].Hoehe; + Bmp[JA].rcDes = rcRectdes; + Blitten(Bmp[JA].Surface, lpDDSSchrift, false); + + rcRectsrc = Bmp[NEIN].rcSrc; + rcRectdes.left = (short)TextBereich[Bereich].rcText.left + 220; + rcRectdes.top = Posy + 50; + rcRectdes.right = rcRectdes.left + Bmp[NEIN].Breite; + rcRectdes.bottom = rcRectdes.top + Bmp[NEIN].Hoehe; + Bmp[NEIN].rcDes = rcRectdes; + Blitten(Bmp[NEIN].Surface, lpDDSSchrift, false); + Posy += 115; + break; + case 'z': + Posx = (short)TextBereich[Bereich].rcText.left - BBreite; + Posy += BHoehe + 3; + break; + } + Pos = Pos + 3; + Posnext = Posnext2 + 2; + } + if (Posnext == nullptr) Posnext = strchr(Text + Pos + 1, strend); + strncpy(StdString, Text + Pos, (Posnext - Text) - Pos); + if (Posx + BBreite*((Posnext - Text) - Pos) > TextBereich[Bereich].rcText.right) + { + Posx = (short)TextBereich[Bereich].rcText.left - BBreite; + Posy += BHoehe + 3; + } + StdString[(Posnext - Text) - Pos] = (char)0; + DrawString(StdString, Posx, Posy, Art); + if (Posnext[0] == (char)0) break; + Posx += BBreite*((Posnext - Text) - Pos); + } + Erg = (short)(Posy + BHoehe - TextBereich[Bereich].rcText.top); + if (Erg < 100) Erg = 100; + return Erg; + } + + void Textloeschen(short Bereich) + { + TextBereich[Bereich].Aktiv = false; + ddbltfx.dwFillColor = RGB2DWORD(255, 0, 255); + lpDDSSchrift->Blt(&TextBereich[Bereich].rcText, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + } + + void DrawSchatzkarte() + { + Textloeschen(TXTPAPIER); + TextBereich[TXTPAPIER].Aktiv = true; + PapierText = SKARTEY; + + rcRectsrc.left = 0; + rcRectsrc.right = SKARTEX; + rcRectsrc.top = 0; + rcRectsrc.bottom = SKARTEY; + rcRectdes.left = TextBereich[TXTPAPIER].rcText.left; + rcRectdes.top = TextBereich[TXTPAPIER].rcText.top; + rcRectdes.right = rcRectdes.left + SKARTEX; + rcRectdes.bottom = rcRectdes.top + SKARTEY; + + Blitten(lpDDSSchatzkarte, lpDDSSchrift, false); + } + + void Zeige() + { + HRESULT ddrval; + short i; + char Stringsave1[128], Stringsave2[128]; // Für die Zeitausgabe + + rcRectsrc.left = Camera.x + rcSpielflaeche.left; + rcRectsrc.top = Camera.y + rcSpielflaeche.top; + rcRectsrc.right = Camera.x + rcSpielflaeche.right; + rcRectsrc.bottom = Camera.y + rcSpielflaeche.bottom; + rcRectdes.left = rcSpielflaeche.left; + rcRectdes.top = rcSpielflaeche.top; + rcRectdes.right = rcSpielflaeche.right; + rcRectdes.bottom = rcSpielflaeche.bottom; + + Renderer::Blitten(lpDDSScape, lpDDSBack, false); // Landschaft zeichnen + + Renderer::ZeichneObjekte(); + + Renderer::ZeichnePanel(); + + // Die TagesZeit ausgeben + Renderer::Textloeschen(TXTTAGESZEIT); + TextBereich[TXTTAGESZEIT].Aktiv = true; + std::sprintf(Stringsave1, "%d", Stunden + 6); + std::sprintf(Stringsave2, "%d", Minuten); + strcpy(StdString, ""); + if (Stunden + 6 < 10) std::strcat(StdString, "0"); + std::strcat(StdString, Stringsave1); + std::strcat(StdString, ":"); + if (Minuten < 10) std::strcat(StdString, "0"); + std::strcat(StdString, Stringsave2); + Renderer::DrawString(StdString, (short)(TextBereich[TXTTAGESZEIT].rcText.left), + (short)(TextBereich[TXTTAGESZEIT].rcText.top), 2); + + if (PapierText != -1) Renderer::ZeichnePapier(); + + // Die Textsurface blitten + for (i = 0; iBlt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + + if (PapierText != -1) + { + Renderer::ZeichnePapier(); + rcRectsrc = TextBereich[TXTPAPIER].rcText; + rcRectdes = TextBereich[TXTPAPIER].rcText; + Renderer::Blitten(lpDDSSchrift, lpDDSBack, true); + } + Renderer::Fade(100, 100, 100); + } + + // Cursor + if (CursorTyp == CUPFEIL) Renderer::ZeichneBilder(MousePosition.x, MousePosition.y, + CursorTyp, rcGesamt, false, -1); + else Renderer::ZeichneBilder(MousePosition.x - Bmp[CursorTyp].Breite / 2, + MousePosition.y - Bmp[CursorTyp].Hoehe / 2, + CursorTyp, rcGesamt, false, -1); + // Flippen + while (1) + { + ddrval = lpDDSPrimary->Flip(nullptr, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } + + + if (Nacht) Renderer::Fade(100, 100, 100); // Das muß hier stehen, damit man die Textnachricht in der Nacht lesen kann + + } + + void ZeigeIntro() + { + HRESULT ddrval; + short i, z; + + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + ddbltfx.dwFillColor = Renderer::RGB2DWORD(0, 0, 0); + z = 0; + while (1) + { + z++; + ddrval = lpDDSBack->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx); + if (ddrval != DDERR_WASSTILLDRAWING) break; + if (z == 1000) + { + MessageBeep(MB_OK); + break; + } + } + + rcRectsrc.left = Camera.x + rcSpielflaeche.left; + rcRectsrc.top = Camera.y + rcSpielflaeche.top; + rcRectsrc.right = Camera.x + rcSpielflaeche.right; + rcRectsrc.bottom = Camera.y + rcSpielflaeche.bottom; + rcRectdes.left = rcSpielflaeche.left; + rcRectdes.top = rcSpielflaeche.top; + rcRectdes.right = rcSpielflaeche.right; + rcRectdes.bottom = rcSpielflaeche.bottom; + + Renderer::Blitten(lpDDSScape, lpDDSBack, false); // Landschaft zeichnen + + Renderer::ZeichneObjekte(); + + if (PapierText != -1) Renderer::ZeichnePapier(); + + // Die Textsurface blitten + for (i = 0; iFlip(nullptr, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } + + } + + void ZeigeAbspann() + { + HRESULT ddrval; + short z; + + Sound::PlaySound(WAVABSPANN, 100); + + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + ddbltfx.dwFillColor = Renderer::RGB2DWORD(0, 0, 0); + z = 0; + while (1) + { + z++; + ddrval = lpDDSBack->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx); + if (ddrval != DDERR_WASSTILLDRAWING) break; + if (z == 1000) + { + MessageBeep(MB_OK); + break; + } + } + if (AbspannZustand == 0) + { + Renderer::ZeichneBilder((short)MAXX / 2 - Bmp[AbspannListe[AbspannNr][0].Bild].Breite / 2, 100, + AbspannListe[AbspannNr][0].Bild, rcGesamt, false, -1); + for (z = 1; z<10; z++) + { + if (AbspannListe[AbspannNr][z].Aktiv) + AbspannBlt(AbspannListe[AbspannNr][z].Bild, + (short)(100 * std::sin(pi / MAXY*(Bmp[AbspannListe[AbspannNr][z].Bild].rcDes.top + + Bmp[AbspannListe[AbspannNr][z].Aktiv].Hoehe / 2)))); + } + } + else if (AbspannZustand == 1) + { + rcRectsrc = Bmp[AbspannNr].rcSrc; + rcRectsrc.top += Bmp[AbspannNr].Phase*Bmp[AbspannNr].Hoehe; + rcRectsrc.bottom = rcRectsrc.top + Bmp[AbspannNr].Hoehe; + + rcRectdes.left = 2; + rcRectdes.top = 2; + rcRectdes.right = Bmp[AbspannNr].Breite + 2; + rcRectdes.bottom = Bmp[AbspannNr].Hoehe + 2; + + Renderer::Blitten(Bmp[AbspannNr].Surface, lpDDSBack, true); + + rcRectsrc.left = 0; + rcRectsrc.top = 0; + rcRectsrc.right = Bmp[AbspannNr].Breite + 4; + rcRectsrc.bottom = Bmp[AbspannNr].Hoehe + 4; + + rcRectdes.left = (short)MAXX / 2 - rcRectsrc.right * 10 / 2; + rcRectdes.top = (short)MAXY / 2 - rcRectsrc.bottom * 10 / 2; + rcRectdes.right = rcRectdes.left + rcRectsrc.right * 10; + rcRectdes.bottom = rcRectdes.top + rcRectsrc.bottom * 10; + + Renderer::Blitten(lpDDSBack, lpDDSBack, false); + + rcRectsrc.left = 100; + rcRectsrc.top = 2; + rcRectsrc.right = 100 + Bmp[AbspannNr].Breite + 2; + rcRectsrc.bottom = Bmp[AbspannNr].Hoehe + 2; + + rcRectdes.left = 2; + rcRectdes.top = 2; + rcRectdes.right = Bmp[AbspannNr].Breite + 2; + rcRectdes.bottom = Bmp[AbspannNr].Hoehe + 2; + + Renderer::Blitten(lpDDSBack, lpDDSBack, false); + } + // Flippen + while (1) + { + ddrval = lpDDSPrimary->Flip(nullptr, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } + } + + void ZeigeLogo() + { + HRESULT ddrval; + short z; + + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXX; + rcRectdes.bottom = MAXY; + ddbltfx.dwFillColor = Renderer::RGB2DWORD(0, 0, 0); + z = 0; + while (1) + { + z++; + ddrval = lpDDSBack->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx); + if (ddrval != DDERR_WASSTILLDRAWING) break; + if (z == 1000) + { + MessageBeep(MB_OK); + break; + } + } + + rcRectsrc.left = 0; + rcRectsrc.right = 500; + rcRectsrc.top = 0; + rcRectsrc.bottom = 500; + rcRectdes.left = MAXX / 2 - 250; + rcRectdes.right = MAXX / 2 + 250; + rcRectdes.top = MAXY / 2 - 250; + rcRectdes.bottom = MAXY / 2 + 250; + + + Renderer::Blitten(lpDDSLogo, lpDDSBack, false); + + Sound::PlaySound(WAVLOGO, 100); + + // Flippen + while (1) + { + ddrval = lpDDSPrimary->Flip(nullptr, 0); + if (ddrval == DD_OK) + { + break; + } + if (ddrval == DDERR_SURFACELOST) + { + ddrval = lpDDSPrimary->Restore(); + if (ddrval != DD_OK) + { + break; + } + } + if (ddrval != DDERR_WASSTILLDRAWING) + { + break; + } + } + } + + void AbspannBlt(short Bild, short Prozent) + { + short x, y; + RGBSTRUCT rgbalt; + + Bmp[Bild].Surface->Lock(nullptr, &ddsd, DDLOCK_WAIT, nullptr); + lpDDSBack->Lock(nullptr, &ddsd2, DDLOCK_WAIT, nullptr); + + for (x = 0; x= MAXX) || (x + Bmp[Bild].rcDes.left <= 0) || + (y + Bmp[Bild].rcDes.top >= MAXY) || (y + Bmp[Bild].rcDes.top <= 0)) continue; + Renderer::GetPixel((short)(x + Bmp[Bild].rcDes.left), + (short)(y + Bmp[Bild].rcDes.top), &ddsd2); + rgbalt = rgbStruct; + Renderer::GetPixel((short)(x + Bmp[Bild].rcSrc.left), + (short)(y + Bmp[Bild].rcSrc.top), &ddsd); + if ((rgbStruct.r == 0) && (rgbStruct.g == 0) && (rgbStruct.b == 0)) continue; + Renderer::PutPixel((short)(x + Bmp[Bild].rcDes.left), + (short)(y + Bmp[Bild].rcDes.top), + Renderer::RGB2DWORD(rgbalt.r + (rgbStruct.r - rgbalt.r)*Prozent / 100, + rgbalt.g + (rgbStruct.g - rgbalt.g)*Prozent / 100, + rgbalt.b + (rgbStruct.b - rgbalt.b)*Prozent / 100), + &ddsd2); + } + + Bmp[Bild].Surface->Unlock(nullptr); + lpDDSBack->Unlock(nullptr); + + } + +} // namespace Renderer diff --git a/Renderer.hpp b/Renderer.hpp new file mode 100644 index 0000000..ce0c296 --- /dev/null +++ b/Renderer.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "headers.hpp" +#include "types.hpp" +#include "extern.hpp" + +namespace Renderer +{ + inline DWORD RGB2DWORD(BYTE r, BYTE g, BYTE b); // Rechnet 24Bit RGB in 16 Bit um (Für ddbltfx.dwFillColor) + void ZeichneObjekte(); // Alles Landschaftsdetails zeichnen, die nicht im Speicher sind + void ZeichneGuy(); // Zeichnet die Spielfigur + void ZeichnePanel(); // Zeichnet die Karte + void ZeichneBilder(short x, short y, short i, RECT Ziel, bool Reverse, short Frucht); // Zeichnet die Bmp-Bilder + void ZeichnePapier(); // Zeichnet das Papier für den Text + void Textloeschen(short Bereich); // Löscht einen Breich in der Textsurface + void DrawString(char *string, short x, short y, short Art); // Schreibt einen String an eine gewünschte Stelle + short DrawText(int TEXT, short Bereich, short Art); // Schreibt einen Text in ein Rechteck + void DrawSchatzkarte(); // Schatzkarte malen + void LimitScroll(); // Verhindert das Scrollen aus dem Bild + void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon, LPDIRECTDRAWSURFACE4 lpDDSNach, bool Transp); + void PutPixel(short x, short y, DWORD color, LPDDSURFACEDESC2 ddsd); // Schreibt Pixel in eine Surface (davor lock()) + void GetPixel(short x, short y, LPDDSURFACEDESC2 ddsd); // Das Ergebnis wird in rgbStruct gespeichert + void Fade(short RP, short GP, short BP); // Bild abdunkeln mittels Gamma-Werten (in Prozent pro Farbwert) + ZWEID GetKachel(short x, short y); // Welche Kachel ist unter den angegebenen Koordinaten + void Zeige(); // Landschaft anzeigen + void ZeigeIntro(); // Für das Intro zuständig + void ZeigeAbspann(); // Für den Abspann + void ZeigeLogo(); // Zeigt das Logo + void AbspannBlt(short Bild, short Prozent); // Zeichnet die Bilder im Abspann +} // namespace Renderer diff --git a/Routing.cpp b/Routing.cpp new file mode 100644 index 0000000..1b6c9fe --- /dev/null +++ b/Routing.cpp @@ -0,0 +1,295 @@ +#include "Routing.hpp" + +#include "Math.hpp" + +namespace Routing +{ + void MarkRoute(bool Mark) + { + short i; + + for (i = 0; i < RouteLaenge; i++) + { + Scape[Route[i].x][Route[i].y].Markiert = Mark; + } + } + + short RotateRight(short Dir) // Richtungskoordinate rechtsrum umrechnen + { + switch (Dir) + { + case 2: { NewPos.x++; NewPos.y++; Dir = 4; break; } + case 4: { NewPos.x--; NewPos.y++; Dir = 8; break; } + case 8: { NewPos.x--; NewPos.y--; Dir = 1; break; } + case 1: { NewPos.x++; NewPos.y--; Dir = 2; break; } + }; + return Dir; + } + + bool FindTheWay() + { + ZWEID Pos; + short Dir; + + ZWEID Plist[MAXXKACH*MAXYKACH]; // Besuchte Punkte merken + short Llist[MAXXKACH*MAXYKACH]; // Länge vom Punkt zum Ziel + short PCnt; + bool GoalReached; + short Shortest; + short DiffX, DiffY; + short StepCnt; + + ZWEID ShPos; + int ShStep; + ZWEID BestLine; + ZWEID LineStartPos; + short AI, BI, CI; + ZWEID ShortKoor; + short ShortEntf; + + + + for (AI = 0; AI 0)) + { + // den mit der kürzesten Entfernung zum Ziel finden (der in der Liste ist) + Shortest = 0; + for (CI = 0; CI <= PCnt - 1; CI++) + { + if (Llist[CI] Llist[Shortest]) || (ShortEntf == -1)) + { + ShortEntf = Llist[Shortest]; + ShortKoor = Plist[Shortest]; + } + + // Den Nächsten aus der Liste löschen + Plist[Shortest] = Plist[PCnt - 1]; + Llist[Shortest] = Llist[PCnt - 1]; + PCnt--; + NewPos = Pos; + Dir = 2; NewPos.y--; // Oben nachschauen anfangen + for (BI = 0; BI <= 3; BI++) // In jede Richtung schauen + { + // ist das Feld noch nicht besucht und frei? + if ((LenMap[NewPos.x][NewPos.y] == 65535) && + (Scape[NewPos.x][NewPos.y].Begehbar)) + { + // Wieviele Schritte braucht man um zu diesem Feld zu kommen + StepCnt = LenMap[Pos.x][Pos.y] + 1; + LenMap[NewPos.x][NewPos.y] = StepCnt; + Plist[PCnt] = NewPos; + // Die Entfernung in die Liste aufnehmen + DiffX = (NewPos.x - RouteZiel.x); + DiffY = (NewPos.y - RouteZiel.y); + Llist[PCnt] = (DiffX*DiffX) + (DiffY*DiffY); + PCnt++; + } + // Ziel erreicht? + if ((NewPos.x == RouteZiel.x) && (NewPos.y == RouteZiel.y)) + { + GoalReached = true; + BI = 3; + } + Dir = RotateRight(Dir); + } + } + if ((PCnt == 0) || (!Scape[RouteZiel.x][RouteZiel.y].Begehbar)) + { + RouteZiel.x = ShortKoor.x; + RouteZiel.y = ShortKoor.y; + + if (FindTheWay()) return true; + else return false; + } + else if (GoalReached) // Punkt rückwärts durchgehen und Abkürzungen finden + { + Pos = RouteZiel; + LineStartPos = Pos; + while ((Pos.x != RouteStart.x) || (Pos.y != RouteStart.y)) + { + NewPos = Pos; + ShStep = 65535; + Dir = 2; NewPos.y--; // Zuerst nach oben probieren + for (AI = 0; AI <= 3; AI++) + { + if (LenMap[NewPos.x][NewPos.y]CreateSoundBuffer(&dsbdesc, &lpdsbWav[Sound], nullptr); + + // Buffer locken und Daten reinkopieren und unlocken + lpdsbWav[Sound]->Lock(0, child.cksize, + (void **)&audio_ptr_1, + &audio_length_1, + (void **)&audio_ptr_2, + &audio_length_2, + DSBLOCK_FROMWRITECURSOR); + + memcpy(audio_ptr_1, snd_buffer, audio_length_1); + memcpy(audio_ptr_2, (snd_buffer + audio_length_1), audio_length_2); + lpdsbWav[Sound]->Unlock(audio_ptr_1, audio_length_1, audio_ptr_2, audio_length_2); + + // Den ZwischenSpeicherfreigeben + free(snd_buffer); + + // Die Standardlautstärke festlegen + lpdsbWav[Sound]->SetVolume((long)(-10000 + 100 * Wav[Sound].Volume)); + } + + void PlaySound(short Sound, short Volume) + { + short z; + + if ((Sound == 0) || (Soundzustand <= 0)) return; + + z = -10000 + 100 * Wav[Sound].Volume; + lpdsbWav[Sound]->SetVolume((long)(-10000 + (10000 + z)*Volume / 100)); + if (Wav[Sound].Loop) lpdsbWav[Sound]->Play(NULL, NULL, DSBPLAY_LOOPING); + else lpdsbWav[Sound]->Play(NULL, NULL, NULL); + } + + void StopSound(short Sound) + { + if ((Sound == 0) || (Soundzustand <= 0)) return; + lpdsbWav[Sound]->Stop(); + } + +} // namespace Sound \ No newline at end of file diff --git a/Sound.hpp b/Sound.hpp new file mode 100644 index 0000000..58e558b --- /dev/null +++ b/Sound.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "headers.hpp" +#include "extern.hpp" + +namespace Sound +{ + void LoadSound(short Sound); // Lädt einen Sound in den Speicher + void PlaySound(short Sound, short Volume); // Spiel eine Wavedatei mit Prozentualer Lautstärke + void StopSound(short Sound); // Stoppt ein Sound +} // namespace Sound diff --git a/World.cpp b/World.cpp new file mode 100644 index 0000000..40cb3ca --- /dev/null +++ b/World.cpp @@ -0,0 +1,1526 @@ +#include "World.hpp" + +#include "Action.hpp" +#include "Direct.hpp" +#include "Renderer.hpp" +#include "Sound.hpp" + +#include +#include + +namespace World +{ + void MakeRohString(short x, short y, short Objekt) + { + char TmpString[1024]; + bool keinRohstoff; + short i; + + RohString[0] = char(0); + keinRohstoff = true; + if (Objekt == -1) + { + for (i = 0; i"); + for (i = 0; i= 60) + { + Minuten -= 60; + Stunden++; + } + for (y = 0; y= 1) + { + Scape[x][y].Objekt = -1; + Scape[x][y].Timer = 0; + Scape[x][y].ObPos.x = 0; + Scape[x][y].ObPos.y = 0; + Scape[x][y].Phase = -1; + Chance -= 2 + 2 * Scape[x][y].Hoehe; + } + } + if ((Scape[x][y].Phase == -1) || + ((Scape[x][y].Objekt != FELD) && + (Scape[x][y].Objekt != BUSCH))) continue; // Wenn kein Fruchtobjekt weiter + if (Scape[x][y].Phase >= Bmp[Scape[x][y].Objekt].Anzahl) continue; + if (Scape[x][y].Objekt == FELD) Scape[x][y].Phase += float((60 * h + m)*0.005); + else if (Scape[x][y].Objekt == BUSCH) Scape[x][y].Phase += float((60 * h + m)*0.0005); // pro Minute Reifungsprozess fortführen + if (Scape[x][y].Phase > Bmp[Scape[x][y].Objekt].Anzahl - 1) + Scape[x][y].Phase = (float)Bmp[Scape[x][y].Objekt].Anzahl - 1; + } + AddResource(GESUNDHEIT, (60 * h + m)*(Guy.Resource[WASSER] - 50 + Guy.Resource[NAHRUNG] - 50) / 1000); + + if ((Spielzustand == SZSPIEL) && (!BootsFahrt)) + { + for (i = 0; i <= (60 * h + m); i++) + { + if (Chance == 0) break; + if (rand() % ((int)(1 / (Chance / 72000))) == 1) + { + Guy.Aktiv = false; + Guy.AkNummer = 0; + Guy.Aktion = Action::RESCUED; + break; + } + } + } + } + + void AddResource(short Art, float Anzahl) // Fügt wassser usw hinzu + { + Guy.Resource[Art] += Anzahl; + if (Guy.Resource[Art] > 100) Guy.Resource[Art] = 100; + if (Guy.Resource[Art] < 0) Guy.Resource[Art] = 0; + // Wann tod + if ((Guy.Resource[GESUNDHEIT] <= 0) && (Guy.Aktion != Action::DEATH) && + (Guy.Aktion != Action::DAY_END) && (Spielzustand == SZSPIEL)) + { + Guy.Aktiv = false; + Guy.AkNummer = 0; + Guy.Aktion = Action::DEATH; + } + } + + void Generate() + { + + short x, y; + short i; + + // Die Kartehintergrundfarbe + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = 2 * MAXXKACH; + rcRectdes.bottom = 2 * MAXYKACH; + ddbltfx.dwFillColor = Renderer::RGB2DWORD(247, 222, 191); + lpDDSKarte->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + + // Die Landschaftshintergrundfarbe + rcRectdes.left = 0; + rcRectdes.top = 0; + rcRectdes.right = MAXSCAPEX; + rcRectdes.bottom = MAXSCAPEY; + ddbltfx.dwFillColor = Renderer::RGB2DWORD(0, 0, 0); + lpDDSScape->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + + for (y = 0; y= MEERWELLEN) && (Scape[x][y].Objekt <= SCHLEUSE6)) + { + rcRectsrc.left = Bmp[Scape[x][y].Objekt].rcSrc.left; + rcRectsrc.right = Bmp[Scape[x][y].Objekt].rcSrc.right; + if (Scape[x][y].Objekt == MEERWELLEN) + { + i = rand() % 6; + rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top + i*Bmp[Scape[x][y].Objekt].Hoehe; + rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom + i*Bmp[Scape[x][y].Objekt].Hoehe; + } + else + { + rcRectsrc.top = Bmp[Scape[x][y].Objekt].rcSrc.top; + rcRectsrc.bottom = Bmp[Scape[x][y].Objekt].rcSrc.bottom; + } + rcRectdes.left = Scape[x][y].xScreen + Bmp[Scape[x][y].Objekt].rcDes.left; + rcRectdes.right = Scape[x][y].xScreen + Bmp[Scape[x][y].Objekt].rcDes.right; + rcRectdes.top = Scape[x][y].yScreen + Bmp[Scape[x][y].Objekt].rcDes.top; + rcRectdes.bottom = Scape[x][y].yScreen + Bmp[Scape[x][y].Objekt].rcDes.bottom; + // Landschaftsobjekt zeichnen + Renderer::Blitten(lpDDSAnimation, lpDDSScape, true); + } + } + + // MiniMap zeichnen + rcRectdes.left = 2 * x; + rcRectdes.top = 2 * y; + rcRectdes.right = rcRectdes.left + 2; + rcRectdes.bottom = rcRectdes.top + 2; + + if ((Scape[x][y].Art == 1) && (Scape[x][y].Typ == 0)) // Meer + ddbltfx.dwFillColor = Renderer::RGB2DWORD(228, 207, 182); + else + { + if ((Scape[x][y].Typ == 0) && + ((Scape[x][y].Art == 2) || + (Scape[x][y].Art == 3))) // Strand + ddbltfx.dwFillColor = Renderer::RGB2DWORD(112, 103, 93); + else + // Land + ddbltfx.dwFillColor = Renderer::RGB2DWORD(139 + Scape[x][y].Hoehe * 20, 128 + Scape[x][y].Hoehe * 20, 115 + Scape[x][y].Hoehe * 20); + } + lpDDSKarte->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); + } + + } + + void CheckSpzButton() + { + if ((Scape[Guy.Pos.x][Guy.Pos.y].Objekt >= FELD) && (Scape[Guy.Pos.x][Guy.Pos.y].Objekt <= FEUERSTELLE) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase >= Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl) && + (Bmp[BUTTSTOP].Phase == -1)) + { + if (Bmp[BUTTWEITER].Phase == -1) Bmp[BUTTWEITER].Phase = 0; + } + else Bmp[BUTTWEITER].Phase = -1; + + if ((Bmp[BUTTSTOP].Phase == -1) && (((Scape[Guy.Pos.x][Guy.Pos.y].Objekt == BOOT) && + (Scape[Guy.Pos.x][Guy.Pos.y].Phase < Bmp[Scape[Guy.Pos.x][Guy.Pos.y].Objekt].Anzahl)) || + ((BootsFahrt) && + (((Scape[Guy.Pos.x - 1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x - 1][Guy.Pos.y].Objekt == -1)) || + ((Scape[Guy.Pos.x][Guy.Pos.y - 1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y - 1].Objekt == -1)) || + ((Scape[Guy.Pos.x + 1][Guy.Pos.y].Art != 1) && (Scape[Guy.Pos.x + 1][Guy.Pos.y].Objekt == -1)) || + ((Scape[Guy.Pos.x][Guy.Pos.y + 1].Art != 1) && (Scape[Guy.Pos.x][Guy.Pos.y + 1].Objekt == -1)))))) + { + if (Bmp[BUTTABLEGEN].Phase == -1) Bmp[BUTTABLEGEN].Phase = 0; + } + else Bmp[BUTTABLEGEN].Phase = -1; + } + + bool CheckRohstoff() + { + short i; + short Benoetigt; // Anzahl der Gesamtbenötigten Rohstoffe + float GebrauchtTmp; // Soviel Rohstoffe werden für diesen Schritt benötigt + short Gebraucht; // Soviel Rohstoffe werden für diesen Schritt benötigt + bool Check; // Wenn kein Rohstoff mehr vorhanden nur noch einmal die While-Schleife + + Benoetigt = 0; + for (i = 0; i 0) && + (Guy.Inventar[i] > 0)) + { + Guy.Inventar[i]--; + Scape[Guy.Pos.x][Guy.Pos.y].Rohstoff[i]--; + Gebraucht--; + if (Gebraucht == 0) return true; + Check = true; + } + } + if (Check == false) break; + } + PapierText = Renderer::DrawText(ROHSTOFFNICHT, TXTPAPIER, 1); + Guy.AkNummer = 0; + Guy.Aktion = Action::CANCEL; + Bmp[BUTTSTOP].Phase = -1; + return false; + } + + void Compute(short MinGroesse, short MaxGroesse) // Groesse der Insel in Anzahl der Landkacheln + { + short x, y; + short Mittex, Mittey; + short l, i, j, m; // l: Spiralring von Innen aus gezählt + short Anzahl; // Anzahl der Landstücke + bool gefunden; + bool CheckRand; // Reicht die Insel bis zum Rand? + + Mittex = MAXXKACH / 2 - 1; + Mittey = MAXYKACH / 2 - 1; + + for (m = 0; m<1000; m++) // 100mal wiederholen, oder bis eine geeignete Insel gefunden ist + { + for (y = 0; y= Mittex) break; + y = Mittey - l - 1; + // Als erstes den oberen Bereich von links nach rechts durchgehen + for (x = Mittex - l; x <= Mittex + l; x++) + { + gefunden = false; + i = 0; + while (!gefunden) // Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 1))) + { + Scape[x][y].Typ = rand() % 13; + } + } + + if ((x == Mittex - l) || ((x != Mittex - l) + && ((Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] != 0)))) + { + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe + 1; + gefunden = true; + } + } + // Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][2][3] == 2) && (Vierecke[Scape[x + 1][y + 1].Typ][1][4] == 2)) || + ((Vierecke[Scape[x][y].Typ][2][1] == 2) && (Vierecke[Scape[x + 1][y + 1].Typ][1][2] == 2))) + { + gefunden = false; + } + // Nebeninseln vermeiden + if (((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) && + ((Scape[x][y + 1].Typ == 0) && (Scape[x][y + 1].Hoehe == 0))) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + + } + } + + // Teil rechts-oben + x = Mittex + l + 1; + y = Mittey - l - 1; + gefunden = false; + i = 0; + while (!gefunden) // Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 5))) + { + Scape[x][y].Typ = rand() % 13; + } + } + + if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x - 1][y].Hoehe + 1; + gefunden = true; + } + // Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][1] == 2))) + { + gefunden = false; + } + // Nebeninseln vermeiden + if ((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + + // Den rechten Bereich von oben nach unten durchgehen + x = Mittex + l + 1; + for (y = Mittey - l; y <= Mittey + l; y++) + { + gefunden = false; + i = 0; + while (!gefunden) // Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 4))) + { + Scape[x][y].Typ = rand() % 13; + } + } + + if ((Vierecke[Scape[x - 1][y].Typ][2][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] != 0)) + { + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; + gefunden = true; + } + } + // Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][3][2] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][3][4] == 2) && (Vierecke[Scape[x - 1][y + 1].Typ][2][1] == 2))) + { + gefunden = false; + } + // Nebeninseln vermeiden + if (((Scape[x - 1][y].Typ == 0) && (Scape[x - 1][y].Hoehe == 0)) && + ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0))) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + } + + // Teil rechts-unten + x = Mittex + l + 1; + y = Mittey + l + 1; + gefunden = false; + i = 0; + while (!gefunden) // Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 8))) + { + Scape[x][y].Typ = rand() % 13; + } + } + + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; + gefunden = true; + } + // Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][2] == 2)) || + ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][4] == 2))) + { + gefunden = false; + } + // Nebeninsel vermeiden + if ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0)) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + + // Den unteren Bereich von rechts nach links durchgehen + y = Mittey + l + 1; + for (x = Mittex + l; x >= Mittex - l; x--) + { + gefunden = false; + i = 0; + while (!gefunden) // Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 3))) + { + Scape[x][y].Typ = rand() % 13; + } + } + + if ((Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] != 0)) + { + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x][y - 1].Typ][3][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x][y - 1].Hoehe + 1; + gefunden = true; + } + } + // Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][0][1] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][2] == 2)) || + ((Vierecke[Scape[x][y].Typ][0][3] == 2) && (Vierecke[Scape[x - 1][y - 1].Typ][3][4] == 2))) + { + gefunden = false; + } + // Nebeninseln vermeiden + if (((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) && + ((Scape[x][y - 1].Typ == 0) && (Scape[x][y - 1].Hoehe == 0))) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + } + + //Teil links-unten + x = Mittex - l - 1; + y = Mittey + l + 1; + gefunden = false; + i = 0; + while (!gefunden) // Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 7))) + { + Scape[x][y].Typ = rand() % 13; + } + } + + if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x + 1][y].Hoehe + 1; + gefunden = true; + } + // Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][1] == 2))) + { + gefunden = false; + } + // Nebeninsel vermeiden + if ((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + + // Den linken Bereich von unten nach oben durchgehen + x = Mittex - l - 1; + for (y = Mittey + l; y >= Mittey - l - 1; y--) + { + gefunden = false; + i = 0; + while (!gefunden) // Passendes Teil finden und Hoehe festlegen + { + i += 1; + if (i == 1000) { gefunden = true; } + Scape[x][y].Typ = rand() % 13; + for (j = 0; j<10; j++) + { + if (!((Scape[x][y].Typ == 0) || (Scape[x][y].Typ == 2))) + { + Scape[x][y].Typ = rand() % 13; + } + } + + if ((Vierecke[Scape[x + 1][y].Typ][0][Scape[x][y].Typ] != 0) + && (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] != 0)) + { + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 1) + { + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe - 1; + if (Scape[x][y].Hoehe < 0) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + gefunden = true; + } + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 2) + { + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe; + gefunden = true; + } + if (Vierecke[Scape[x][y + 1].Typ][1][Scape[x][y].Typ] == 3) + { + Scape[x][y].Hoehe = Scape[x][y + 1].Hoehe + 1; + gefunden = true; + } + } + // Verzwickte Fälle ausfiltern + if (((Vierecke[Scape[x][y].Typ][1][2] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][3] == 2)) || + ((Vierecke[Scape[x][y].Typ][1][4] == 2) && (Vierecke[Scape[x + 1][y - 1].Typ][0][1] == 2))) + { + gefunden = false; + } + // Nebeninseln vermeiden + if (((Scape[x + 1][y].Typ == 0) && (Scape[x + 1][y].Hoehe == 0)) && + ((Scape[x][y + 1].Typ == 0) && (Scape[x][y + 1].Hoehe == 0))) + { + Scape[x][y].Typ = 0; + Scape[x][y].Hoehe = 0; + } + } + } + } + Anzahl = 0; + CheckRand = true; + for (y = 0; y 0) Anzahl++; + + if (Scape[x][y].Typ == 0) Scape[x][y].LaufZeit = 1; + else Scape[x][y].LaufZeit = 2; + + if ((Scape[x][y].Typ != 0) && + ((x <= 2) || (x >= MAXXKACH - 2) || (y <= 2) || (y >= MAXYKACH - 2))) + CheckRand = false; + } + if ((Anzahl > MinGroesse) && (Anzahl < MaxGroesse) && (CheckRand)) break; + } + } + + void Meer() // Das Meer und den Strand bestimmen + { + short x, y; + short Anzahl; // Anzahl von angrenzenden Landstücken + + for (y = 0; y= 1) && (Anzahl < 6)) + { + Scape[x][y].Art = 2; + Scape[x][y].Objekt = -1; + Scape[x][y].Reverse = false; + Scape[x][y].Begehbar = true; + Scape[x][y].Phase = -1; + continue; + } + if (Anzahl >= 6) + { + Scape[x][y].Art = 3; + Scape[x][y].Objekt = -1; + Scape[x][y].Reverse = false; + Scape[x][y].Begehbar = false; + Scape[x][y].Phase = -1; + continue; + } + Scape[x][y].Art = 1; // sonst Meer + Scape[x][y].Objekt = MEERWELLEN; + Scape[x][y].ObPos.x = (short)Bmp[MEERWELLEN].rcDes.left; + Scape[x][y].ObPos.y = (short)Bmp[MEERWELLEN].rcDes.top; + Scape[x][y].Phase = (float)(Bmp[Scape[x][y].Objekt].Anzahl - + rand() % (Bmp[Scape[x][y].Objekt].Anzahl) - 1); + if (rand() % 2 == 0) Scape[x][y].Reverse = true; + Scape[x][y].Begehbar = false; + } + } + } + + void ChangeBootsFahrt() + { + short x, y; + + BootsFahrt = !BootsFahrt; + // Begehbarkeit umdrehen + for (y = 0; y= SCHLEUSE1) && (Scape[x][y].Objekt <= SCHLEUSE6)) + { + Scape[x][y].Objekt -= 14; + Scape[x][y].ObPos.x = (short)Bmp[Scape[x][y].Objekt].rcDes.left; + Scape[x][y].ObPos.y = (short)Bmp[Scape[x][y].Objekt].rcDes.top; + } + } + // StartRohr finden + for (y = 0; y= FLUSS1) && (Scape[x][y].Objekt <= SCHLEUSE6)) + { + if (Scape[x][y].Art == 0) Scape[x][y].Art = 4; + if (Scape[x - 1][y].Art == 0) Scape[x - 1][y].Art = 4; + if (Scape[x - 1][y - 1].Art == 0) Scape[x - 1][y - 1].Art = 4; + if (Scape[x][y - 1].Art == 0) Scape[x][y - 1].Art = 4; + if (Scape[x + 1][y - 1].Art == 0) Scape[x + 1][y - 1].Art = 4; + if (Scape[x + 1][y].Art == 0) Scape[x + 1][y].Art = 4; + if (Scape[x + 1][y + 1].Art == 0) Scape[x + 1][y + 1].Art = 4; + if (Scape[x][y + 1].Art == 0) Scape[x][y + 1].Art = 4; + if (Scape[x - 1][y + 1].Art == 0) Scape[x - 1][y + 1].Art = 4; + } + if ((Scape[x][y].Objekt != ROHR) || (Scape[x][y].Phase >= Bmp[ROHR].Anzahl)) + continue; + if ((Scape[x - 1][y].Objekt >= FLUSS5) && (Scape[x - 1][y].Objekt <= FLUSS10)) + { + Scape[x - 1][y].Objekt += 14; + Scape[x - 1][y].ObPos.x = (short)Bmp[Scape[x - 1][y].Objekt].rcDes.left; + Scape[x - 1][y].ObPos.y = (short)Bmp[Scape[x - 1][y].Objekt].rcDes.top; + CheckRohr(x, y); + } + else if ((Scape[x - 1][y].Objekt >= SCHLEUSE1) && (Scape[x - 1][y].Objekt <= SCHLEUSE6)) + { + CheckRohr(x, y); + } + if ((Scape[x][y - 1].Objekt >= FLUSS5) && (Scape[x][y - 1].Objekt <= FLUSS10)) + { + Scape[x][y - 1].Objekt += 14; + Scape[x][y - 1].ObPos.x = (short)Bmp[Scape[x][y - 1].Objekt].rcDes.left; + Scape[x][y - 1].ObPos.y = (short)Bmp[Scape[x][y - 1].Objekt].rcDes.top; + CheckRohr(x, y); + } + else if ((Scape[x][y - 1].Objekt >= SCHLEUSE1) && (Scape[x][y - 1].Objekt <= SCHLEUSE6)) + { + CheckRohr(x, y); + } + if ((Scape[x + 1][y].Objekt >= FLUSS5) && (Scape[x + 1][y].Objekt <= FLUSS10)) + { + Scape[x + 1][y].Objekt += 14; + Scape[x + 1][y].ObPos.x = (short)Bmp[Scape[x + 1][y].Objekt].rcDes.left; + Scape[x + 1][y].ObPos.y = (short)Bmp[Scape[x + 1][y].Objekt].rcDes.top; + CheckRohr(x, y); + } + else if ((Scape[x + 1][y].Objekt >= SCHLEUSE1) && (Scape[x + 1][y].Objekt <= SCHLEUSE6)) + { + CheckRohr(x, y); + } + if ((Scape[x][y + 1].Objekt >= FLUSS5) && (Scape[x][y + 1].Objekt <= FLUSS10)) + { + Scape[x][y + 1].Objekt += 14; + Scape[x][y + 1].ObPos.x = (short)Bmp[Scape[x][y + 1].Objekt].rcDes.left; + Scape[x][y + 1].ObPos.y = (short)Bmp[Scape[x][y + 1].Objekt].rcDes.top; + CheckRohr(x, y); + } + else if ((Scape[x][y + 1].Objekt >= SCHLEUSE1) && (Scape[x][y + 1].Objekt <= SCHLEUSE6)) + { + CheckRohr(x, y); + } + + } + // Felder auf trockenen Wiesen löschen + for (y = 0; yLaengetmp) + { + // neue Variante speichern + if (gefunden) Laengetmp = i; else Laengetmp = i - 1; + for (j = 0; j <= Laengetmp; j++) + { + Flusstmp[j].x = Flusslauf[m][j].x; + Flusstmp[j].y = Flusslauf[m][j].y; + } + } + } + for (i = 0; ix1) + { + Scape[x1][y1].Objekt = QUELLE1; + continue; + } + if (x2y1) + { + Scape[x1][y1].Objekt = QUELLE2; + continue; + } + if (y2 y2)) Scape[x1][y1].Objekt = FLUSS9; + } + } + if ((x0 == x1) && (y0 < y1)) + { + if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG4; // Mündung + else + { + if ((x1 < x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS8; + if ((x1 == x2) && (y1 < y2)) Scape[x1][y1].Objekt = FLUSS6; + if ((x1 > x2) && (y1 == y2)) + { + Scape[x1][y1].Objekt = FLUSS9; + Scape[x1][y1].Reverse = true; + } + } + } + if ((x0 > x1) && (y0 == y1)) + { + if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG1; // Mündung + else + { + if ((x1 > x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS5; + if ((x1 == x2) && (y1 < y2)) Scape[x1][y1].Objekt = FLUSS10; + if ((x1 == x2) && (y1 > y2)) Scape[x1][y1].Objekt = FLUSS8; + Scape[x1][y1].Reverse = true; + } + } + if ((x0 == x1) && (y0 > y1)) + { + if (Scape[x1][y1].Art == 2) Scape[x1][y1].Objekt = MUENDUNG2; // Mündung + else + { + if ((x1 == x2) && (y1 > y2)) Scape[x1][y1].Objekt = FLUSS6; + if ((x1 > x2) && (y1 == y2)) Scape[x1][y1].Objekt = FLUSS7; + Scape[x1][y1].Reverse = true; + if ((x1 < x2) && (y1 == y2)) + { + Scape[x1][y1].Objekt = FLUSS10; + Scape[x1][y1].Reverse = false; + } + } + } + } + } + // Für das letzte Flussstück + Scape[x1][y1].ObPos.x = (short)Bmp[Scape[x1][y1].Objekt].rcDes.left; + Scape[x1][y1].ObPos.y = (short)Bmp[Scape[x1][y1].Objekt].rcDes.top; + } + } + } + + void Baeume(short Prozent) + { + short x, y; // Diese Kachel wird angeschaut + ZWEID Erg; + ZWEID Pos; // Da steht der Baum + short r; // random speicherung + bool einGrosserBaum = false; // gibt es bereits einen großen Baum + + for (y = 0; y= 0; i--) + { + if (Scape[i][y].Art != 1) + { + x = i + 1; + break; + } + } + break; + case 2: + x = MAXXKACH / 2; + for (i = MAXYKACH - 1; i >= 0; i--) + { + if (Scape[x][i].Art != 1) + { + y = i + 1; + break; + } + } + break; + } + Scape[x][y].Objekt = WRACK2; + Scape[x][y].ObPos.x = (short)Bmp[WRACK2].rcDes.left; + Scape[x][y].ObPos.y = (short)Bmp[WRACK2].rcDes.top; + } + + void Schatz() + { + short x, y, i, j; // Diese Kachel wird angeschaut + RGBSTRUCT rgbleft, rgbtop, rgbright, rgbbottom; + + while (1) + { + x = rand() % (MAXXKACH - 1); + y = rand() % (MAXYKACH - 1); + // nur auf flachen Kacheln ohne Objekt + if ((Scape[x][y].Objekt == -1) && (Scape[x][y].Typ == 0) + && (Scape[x][y].Art != 3)) + { + if (SchatzPos.x == -1) + { + SchatzPos.x = x; + SchatzPos.y = y; + } + + lpDDSScape->Lock(nullptr, &ddsd, DDLOCK_WAIT, nullptr); + lpDDSSchatzkarte->Lock(nullptr, &ddsd2, DDLOCK_WAIT, nullptr); + + for (i = 0; iUnlock(nullptr); + lpDDSSchatzkarte->Unlock(nullptr); + + rcRectsrc = Bmp[KREUZ].rcSrc; + rcRectdes.left = SKARTEX / 2 - Bmp[KREUZ].Breite / 2; + rcRectdes.right = rcRectdes.left + Bmp[KREUZ].Breite; + rcRectdes.top = SKARTEY / 2 - Bmp[KREUZ].Hoehe / 2; + rcRectdes.bottom = rcRectdes.top + Bmp[KREUZ].Hoehe; + Renderer::Blitten(Bmp[KREUZ].Surface, lpDDSSchatzkarte, true); + + + lpDDSSchatzkarte->Lock(nullptr, &ddsd2, DDLOCK_WAIT, nullptr); + + // Weichzeichnen + for (i = 0; i0) && (i0) && (jUnlock(nullptr); + break; + } + } + } + + void CheckBenutze(short Objekt) + { + if (((Objekt == ROHSTEIN) && (TwoClicks == ROHAST)) || + ((Objekt == ROHAST) && (TwoClicks == ROHSTEIN))) + { + if (Guy.Inventar[ROHAXT]<1) + { + Guy.Inventar[ROHSTEIN]--; + Guy.Inventar[ROHAST]--; + Guy.Inventar[ROHAXT] = 1; + Bmp[BUTTFAELLEN].Phase = 0; + Bmp[BUTTBOOT].Phase = 0; + Bmp[BUTTROHR].Phase = 0; + PapierText = Renderer::DrawText(BAUEAXT, TXTPAPIER, 1); + Sound::PlaySound(WAVERFINDUNG, 100); + } + else if (Guy.Inventar[ROHEGGE]<1) + { + Guy.Inventar[ROHSTEIN]--; + Guy.Inventar[ROHAST]--; + Guy.Inventar[ROHEGGE] = 1; + Bmp[BUTTFELD].Phase = 0; + PapierText = Renderer::DrawText(BAUEEGGE, TXTPAPIER, 1); + Sound::PlaySound(WAVERFINDUNG, 100); + } + else + { + PapierText = Renderer::DrawText(STEINPLUSASTNICHTS, TXTPAPIER, 1); + } + } + else if (((Objekt == ROHLIANE) && (TwoClicks == ROHAST)) || + ((Objekt == ROHAST) && (TwoClicks == ROHLIANE))) + { + if (Guy.Inventar[ROHANGEL]<1) + { + Guy.Inventar[ROHLIANE]--; + Guy.Inventar[ROHAST]--; + Guy.Inventar[ROHANGEL] = 1; + Bmp[BUTTANGELN].Phase = 0; + PapierText = Renderer::DrawText(BAUEANGEL, TXTPAPIER, 1); + Sound::PlaySound(WAVERFINDUNG, 100); + } + else + { + PapierText = Renderer::DrawText(ASTPLUSLIANENICHTS, TXTPAPIER, 1); + } + } + else if (((Objekt == ROHLIANE) && (TwoClicks == ROHSTEIN)) || + ((Objekt == ROHSTEIN) && (TwoClicks == ROHLIANE))) + { + if (Guy.Inventar[ROHSCHLEUDER]<1) + { + Guy.Inventar[ROHLIANE]--; + Guy.Inventar[ROHSTEIN]--; + Guy.Inventar[ROHSCHLEUDER] = 1; + Bmp[BUTTSCHLEUDER].Phase = 0; + PapierText = Renderer::DrawText(BAUESCHLEUDER, TXTPAPIER, 1); + Sound::PlaySound(WAVERFINDUNG, 100); + } + else + { + PapierText = Renderer::DrawText(STEINPLUSLIANENICHTS, TXTPAPIER, 1); + } + } + else + { + PapierText = Renderer::DrawText(NICHTBASTELN, TXTPAPIER, 1); + } + TwoClicks = -1; + } + + void Entdecken() + { + bool Aenderung = false; + short i, j; + + for (i = -1; i <= 1; i++) + for (j = -1; j <= 1; j++) + { + if (!Scape[Guy.Pos.x + i][Guy.Pos.y + j].Entdeckt) + { + Scape[Guy.Pos.x + i][Guy.Pos.y + j].Entdeckt = true; + Aenderung = true; + } + } + + if (Aenderung) Generate(); + } + +} // namespace World diff --git a/World.hpp b/World.hpp new file mode 100644 index 0000000..39ede1b --- /dev/null +++ b/World.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "headers.hpp" +#include "extern.hpp" + +namespace World +{ + void AddTime(short h, short m); // Addiert Stunden und Minuten zur TagesZeit + void AddResource(short Art, float Anzahl); // Fügt wassser usw hinzu + void Generate(); // Kacheln in den Speicher zeichnen + void Compute(short MinGroesse, short MaxGroesse); // Zufallslandschaft erzeugen + void Meer(); // Mit Meer aufüllen + void Fluss(); // Erstellt einen Fluß + bool CheckFluss(short x, short y); // Für FLuss() + void Baeume(short Prozent); // Verteilt die Bäume auf Insel + void Entdecken(); // Deckt die Kacheln neben der Spielfigur auf + void CheckBenutze(short Objekt); // Prüft ob die richtigen Rohstoffe benutzt wurden (im Inventar) + bool CheckRohstoff(); // Prüft die Rohstoffe die zum Bau benötigt werden + void MakeRohString(short x, short y, short Objekt); // Schreibt in den Rohstring die benötigten Rohstoffe + void CheckSpzButton(); // Wechselt die Knöpfe (Stop,Weiter,Ablegen usw.) + void ChangeBootsFahrt(); // Ändert die notwendigen Sachen für eine Bootsfahrt (und zurück); + void FillRohr(); // Ãœberprüft die Röhren, ob sie an Wassernetz angeschlossen sind + void CheckRohr(short x, short y); // Rekursive Procedure für FillRohr(); + void Schatz(); // Schatz vergraben und Schatzkarte malen + void Piratenwrack(); // Setzt das Piratenwrack +} // namespace World diff --git a/constants.hpp b/constants.hpp new file mode 100644 index 0000000..3cf4077 --- /dev/null +++ b/constants.hpp @@ -0,0 +1,275 @@ +#pragma once + +const unsigned int KXPIXEL = 54; // Breite der Kacheln +const unsigned int KYPIXEL = 44; // Hoehe der Kacheln +const unsigned int S1XPIXEL = 20; // Breite der Schrift1 +const unsigned int S1YPIXEL = 20; // Höhe der Schrift1 +const unsigned int S1ABSTAND = 13; // Abstand zum nächsten Buchstaben +const unsigned int S2XPIXEL = 10; // Breite der Schrift2 +const unsigned int S2YPIXEL = 15; // Höhe der Schrift2 +const unsigned int S2ABSTAND = 10; // Abstand zum nächsten Buchstaben +const unsigned int MAXXKACH = 60; // Anzahl der Kacheln +const unsigned int MAXYKACH = 60; +const unsigned int MAXSCAPEX = 3360; // Größe der Scapesurface +const unsigned int MAXSCAPEY = 1700; +const unsigned int MAXX = 800; // Bildschirmauflösung +const unsigned int MAXY = 600; +const unsigned int GIPFEL = 3; // Hoehe des Gipfels +const unsigned int MAXFLUSS = 1000; // Maximale Flusslänge +const unsigned int FLUSSANZAHL = 1; // Wieviele Flüsse? Mehr als 1 funktioniert seltsamerweise nicht mehr.. +const unsigned int SKARTEX = 370; // Schatzkartenbreite +const unsigned int SKARTEY = 370; // Schatzkartenhöhe + +const unsigned int MEERWELLEN = 0; +const unsigned int FLUSS1 = MEERWELLEN + 1; +const unsigned int FLUSS2 = MEERWELLEN + 2; +const unsigned int FLUSS3 = MEERWELLEN + 3; +const unsigned int FLUSS4 = MEERWELLEN + 4; +const unsigned int FLUSS5 = MEERWELLEN + 5; +const unsigned int FLUSS6 = MEERWELLEN + 6; +const unsigned int FLUSS7 = MEERWELLEN + 7; +const unsigned int FLUSS8 = MEERWELLEN + 8; +const unsigned int FLUSS9 = MEERWELLEN + 9; +const unsigned int FLUSS10 = MEERWELLEN + 10; +const unsigned int MUENDUNG1 = MEERWELLEN + 11; +const unsigned int MUENDUNG2 = MEERWELLEN + 12; +const unsigned int MUENDUNG3 = MEERWELLEN + 13; +const unsigned int MUENDUNG4 = MEERWELLEN + 14; +const unsigned int QUELLE1 = MEERWELLEN + 15; +const unsigned int QUELLE2 = MEERWELLEN + 16; // Wenn hier was eingefügt wird, auch die FillRohr ändern!! +const unsigned int QUELLE3 = MEERWELLEN + 17; +const unsigned int QUELLE4 = MEERWELLEN + 18; +const unsigned int SCHLEUSE1 = MEERWELLEN + 19; +const unsigned int SCHLEUSE2 = MEERWELLEN + 20; +const unsigned int SCHLEUSE3 = MEERWELLEN + 21; +const unsigned int SCHLEUSE4 = MEERWELLEN + 22; +const unsigned int SCHLEUSE5 = MEERWELLEN + 23; +const unsigned int SCHLEUSE6 = MEERWELLEN + 24; +const unsigned int BAUM1 = 25; +const unsigned int BAUM2 = BAUM1 + 1; +const unsigned int BAUM3 = BAUM1 + 2; +const unsigned int BAUM4 = BAUM1 + 3; +const unsigned int BUSCH = BAUM1 + 4; +const unsigned int BAUM1DOWN = BAUM1 + 5; +const unsigned int BAUM2DOWN = BAUM1 + 6; +const unsigned int BAUM3DOWN = BAUM1 + 7; +const unsigned int BAUM4DOWN = BAUM1 + 8; +const unsigned int BAUMGROSS = BAUM1 + 9; +const unsigned int FEUER = BAUM1 + 10; +const unsigned int WRACK = BAUM1 + 11; +const unsigned int WRACK2 = BAUM1 + 12; +const unsigned int FELD = 38; +const unsigned int ZELT = FELD + 1; +const unsigned int BOOT = FELD + 2; +const unsigned int ROHR = FELD + 3; +const unsigned int SOS = FELD + 4; +const unsigned int HAUS1 = FELD + 5; +const unsigned int HAUS2 = FELD + 6; +const unsigned int HAUS3 = FELD + 7; +const unsigned int FEUERSTELLE = FELD + 8; +const unsigned int CUPFEIL = 47; +const unsigned int CURICHTUNG = CUPFEIL + 1; +const unsigned int CUUHR = CUPFEIL + 2; +const unsigned int GUYLINKS = 50; +const unsigned int GUYOBEN = GUYLINKS + 1; +const unsigned int GUYRECHTS = GUYLINKS + 2; +const unsigned int GUYUNTEN = GUYLINKS + 3; +const unsigned int GUYSUCHEN = GUYLINKS + 4; +const unsigned int GUYESSEN = GUYLINKS + 5; +const unsigned int GUYTRINKEN = GUYLINKS + 6; +const unsigned int GUYFAELLEN = GUYLINKS + 7; +const unsigned int GUYWARTEN = GUYLINKS + 8; +const unsigned int GUYFELD = GUYLINKS + 9; +const unsigned int GUYBINDENOBEN = GUYLINKS + 10; +const unsigned int GUYBINDENUNTEN = GUYLINKS + 11; +const unsigned int GUYSCHLAFEN = GUYLINKS + 12; +const unsigned int GUYSCHLAFZELT = GUYLINKS + 13; +const unsigned int GUYGEHINZELT = GUYLINKS + 14; +const unsigned int GUYHINLEGEN = GUYLINKS + 15; +const unsigned int GUYAUFSTEHEN = GUYLINKS + 16; +const unsigned int GUYANGELN1LINKS = GUYLINKS + 17; +const unsigned int GUYANGELN1OBEN = GUYLINKS + 18; +const unsigned int GUYANGELN1RECHTS = GUYLINKS + 19; +const unsigned int GUYANGELN1UNTEN = GUYLINKS + 20; +const unsigned int GUYANGELN2LINKS = GUYLINKS + 21; +const unsigned int GUYANGELN2OBEN = GUYLINKS + 22; +const unsigned int GUYANGELN2RECHTS = GUYLINKS + 23; +const unsigned int GUYANGELN2UNTEN = GUYLINKS + 24; +const unsigned int GUYANGELN3LINKS = GUYLINKS + 25; +const unsigned int GUYANGELN3OBEN = GUYLINKS + 26; +const unsigned int GUYANGELN3RECHTS = GUYLINKS + 27; +const unsigned int GUYANGELN3UNTEN = GUYLINKS + 28; +const unsigned int GUYSCHLAGEN = GUYLINKS + 29; +const unsigned int GUYBOOTLINKS = GUYLINKS + 30; +const unsigned int GUYBOOTOBEN = GUYLINKS + 31; +const unsigned int GUYBOOTRECHTS = GUYLINKS + 32; +const unsigned int GUYBOOTUNTEN = GUYLINKS + 33; +const unsigned int GUYBOOTANGELN1 = GUYLINKS + 34; +const unsigned int GUYBOOTANGELN2 = GUYLINKS + 35; +const unsigned int GUYBOOTANGELN3 = GUYLINKS + 36; +const unsigned int GUYTAUCHEN1 = GUYLINKS + 37; +const unsigned int GUYTAUCHEN2 = GUYLINKS + 38; +const unsigned int GUYTAUCHEN3 = GUYLINKS + 39; +const unsigned int GUYHAMMER = GUYLINKS + 40; +const unsigned int GUYKLETTERN1 = GUYLINKS + 41; +const unsigned int GUYKLETTERN2 = GUYLINKS + 42; +const unsigned int GUYHAMMER2 = GUYLINKS + 43; +const unsigned int GUYGEHINHAUS = GUYLINKS + 44; +const unsigned int GUYSCHLAFHAUS = GUYLINKS + 45; +const unsigned int GUYGEHAUSHAUS = GUYLINKS + 46; +const unsigned int GUYANZUENDEN = GUYLINKS + 47; +const unsigned int GUYAUSSCHAU = GUYLINKS + 48; +const unsigned int GUYSCHAUFELN = GUYLINKS + 49; +const unsigned int GUYSCHIFF = GUYLINKS + 50; +const unsigned int GUYSCHIFFDOWN = GUYLINKS + 51; +const unsigned int GUYSCHWIMMEN = GUYLINKS + 52; +const unsigned int GUYTOD = GUYLINKS + 53; +const unsigned int GUYBOOTTOD = GUYLINKS + 54; +const unsigned int GUYBOOTWARTEN = GUYLINKS + 55; +const unsigned int GUYSCHLEUDER = GUYLINKS + 56; +const unsigned int BUTTGITTER = 107; +const unsigned int BUTTANIMATION = BUTTGITTER + 1; +const unsigned int BUTTBEENDEN = BUTTGITTER + 2; +const unsigned int BUTTNEU = BUTTGITTER + 3; +const unsigned int BUTTTAGNEU = BUTTGITTER + 4; +const unsigned int BUTTSOUND = BUTTGITTER + 5; +const unsigned int BUTTAKTION = BUTTGITTER + 6; +const unsigned int BUTTBAUEN = BUTTGITTER + 7; +const unsigned int BUTTINVENTAR = BUTTGITTER + 8; +const unsigned int BUTTWEITER = BUTTGITTER + 9; +const unsigned int BUTTSTOP = BUTTGITTER + 10; +const unsigned int BUTTABLEGEN = BUTTGITTER + 11; +const unsigned int BUTTSUCHEN = 119; +const unsigned int BUTTESSEN = BUTTSUCHEN + 1; +const unsigned int BUTTSCHLAFEN = BUTTSUCHEN + 2; +const unsigned int BUTTFAELLEN = BUTTSUCHEN + 3; +const unsigned int BUTTANGELN = BUTTSUCHEN + 4; +const unsigned int BUTTANZUENDEN = BUTTSUCHEN + 5; +const unsigned int BUTTAUSSCHAU = BUTTSUCHEN + 6; +const unsigned int BUTTSCHATZKARTE = BUTTSUCHEN + 7; +const unsigned int BUTTSCHATZ = BUTTSUCHEN + 8; +const unsigned int BUTTSCHLEUDER = BUTTSUCHEN + 9; +const unsigned int BUTTZELT = 129; +const unsigned int BUTTFELD = BUTTZELT + 1; +const unsigned int BUTTBOOT = BUTTZELT + 2; +const unsigned int BUTTROHR = BUTTZELT + 3; +const unsigned int BUTTSOS = BUTTZELT + 4; +const unsigned int BUTTHAUS1 = BUTTZELT + 5; +const unsigned int BUTTHAUS2 = BUTTZELT + 6; +const unsigned int BUTTHAUS3 = BUTTZELT + 7; +const unsigned int BUTTFEUERST = BUTTZELT + 8; +const unsigned int BUTTFRAGEZ = BUTTZELT + 9; +const unsigned int BUTTDESTROY = BUTTZELT + 10; +const unsigned int SAEULE1 = 140; +const unsigned int SAEULE2 = SAEULE1 + 1; +const unsigned int SAEULE3 = SAEULE1 + 2; +const unsigned int ROHAST = 143; +const unsigned int ROHSTAMM = ROHAST + 1; +const unsigned int ROHSTEIN = ROHAST + 2; +const unsigned int ROHAXT = ROHAST + 3; +const unsigned int ROHBLATT = ROHAST + 4; +const unsigned int ROHEGGE = ROHAST + 5; +const unsigned int ROHLIANE = ROHAST + 6; +const unsigned int ROHANGEL = ROHAST + 7; +const unsigned int ROHHAMMER = ROHAST + 8; +const unsigned int ROHFERNROHR = ROHAST + 9; +const unsigned int ROHSTREICHHOLZ = ROHAST + 10; +const unsigned int ROHSCHAUFEL = ROHAST + 11; +const unsigned int ROHKARTE = ROHAST + 12; +const unsigned int ROHSCHLEUDER = ROHAST + 13; +const unsigned int ROEMISCH1 = 157; +const unsigned int ROEMISCH2 = ROEMISCH1 + 1; +const unsigned int INVPAPIER = 159; +const unsigned int RING = INVPAPIER + 1; +const unsigned int KREUZ = INVPAPIER + 2; +const unsigned int JA = INVPAPIER + 3; +const unsigned int NEIN = INVPAPIER + 4; +const unsigned int SONNE = INVPAPIER + 5; +const unsigned int PROGRAMMIERUNG = 165; +const unsigned int DIRKPLATE = PROGRAMMIERUNG + 1; +const unsigned int MATTHIAS = PROGRAMMIERUNG + 2; +const unsigned int TOBIAS = PROGRAMMIERUNG + 3; +const unsigned int SIGRID = PROGRAMMIERUNG + 4; +const unsigned int SOUNDS = PROGRAMMIERUNG + 5; +const unsigned int PATHFINDING = PROGRAMMIERUNG + 6; +const unsigned int JOHN = PROGRAMMIERUNG + 7; +const unsigned int HEIKO = PROGRAMMIERUNG + 8; +const unsigned int GISELA = PROGRAMMIERUNG + 9; +const unsigned int WEITEREHILFE = PROGRAMMIERUNG + 10; +const unsigned int TESTSPIELER = PROGRAMMIERUNG + 11; +const unsigned int SCHWARZ = PROGRAMMIERUNG + 12; +const unsigned int MUSIK = PROGRAMMIERUNG + 13; +const unsigned int DPSOFTWARE = PROGRAMMIERUNG + 14; +const unsigned int BILDANZ = DPSOFTWARE + 1; // Wieviele Bilder + +// Sounds +const unsigned int WAVNICHTS = 0; +const unsigned int WAVSTURM = 1; +const unsigned int WAVSCHWIMMEN = WAVSTURM + 1; +const unsigned int WAVPLATSCH = WAVSTURM + 2; +const unsigned int WAVFAELLEN = WAVSTURM + 3; +const unsigned int WAVSCHLAGEN = WAVSTURM + 4; +const unsigned int WAVSCHLEUDER = WAVSTURM + 5; +const unsigned int WAVSCHAUFELN = WAVSTURM + 6; +const unsigned int WAVHAMMER = WAVSTURM + 7; +const unsigned int WAVCRASH = WAVSTURM + 8; +const unsigned int WAVSCHNARCHEN = WAVSTURM + 9; +const unsigned int WAVTRINKEN = WAVSTURM + 10; +const unsigned int WAVKNISTERN = WAVSTURM + 11; +const unsigned int WAVANGEL = WAVSTURM + 12; +const unsigned int WAVWALD = 14; +const unsigned int WAVFEUER = WAVWALD + 1; +const unsigned int WAVBRANDUNG = WAVWALD + 2; +const unsigned int WAVBAUMFAELLT = WAVWALD + 3; +const unsigned int WAVFLUSS = WAVWALD + 4; +const unsigned int WAVKLICK = 19; +const unsigned int WAVKLICK2 = WAVKLICK + 1; +const unsigned int WAVLOGO = WAVKLICK + 2; +const unsigned int WAVABSPANN = WAVKLICK + 3; +const unsigned int WAVWOLF = WAVKLICK + 4; +const unsigned int WAVERFINDUNG = WAVKLICK + 5; +const unsigned int WAVANZ = WAVERFINDUNG + 1; // Anzahl der Sounds + +// Menüs +const unsigned int MEKEINS = 0; +const unsigned int MEAKTION = 1; +const unsigned int MEBAUEN = 2; +const unsigned int MEINVENTAR = 3; + +// Textfelder +const unsigned int TXTTEXTFELD = 0; +const unsigned int TXTFPS = 1; +const unsigned int TXTTAGESZEIT = 2; +const unsigned int TXTCHANCE = 3; +const unsigned int TXTPAPIER = 4; // Muß!!! als letztes stehen +const unsigned int TEXTANZ = 5; // Wieviele Textbreiche + +// Resourcen +const unsigned int WASSER = 0; +const unsigned int NAHRUNG = 1; +const unsigned int GESUNDHEIT = 2; + +// Spielzustände +const unsigned int SZNICHTS = 0; +const unsigned int SZINTRO = 1; +const unsigned int SZSPIEL = 2; +const unsigned int SZABSPANN = 3; +const unsigned int SZGERETTET = 4; +const unsigned int SZLOGO = 5; + +// Bilder +static const char Misc[] = "MISC"; +static const char Panel[] = "PANEL"; +static const char GuyAni[] = "GUYANI"; +static const char Animation[] = "ANIMATION"; +static const char Schrift1[] = "SCHRIFT1"; +static const char Schrift2[] = "SCHRIFT2"; +static const char TextFeld[] = "TEXTFELD"; +static const char Papier[] = "PAPIER"; +static const char Baum[] = "BAUM"; +static const char Cursorbmp[] = "CURSORBMP"; +static const char Buttons[] = "BUTTONS"; +static const char Inventarbmp[] = "INVENTARBMP"; +static const char Bau[] = "BAU"; +static const char Credits[] = "CREDITS"; +static const char Logo[] = "LOGO"; diff --git a/ddutil.cpp b/ddutil.cpp index 7f7390b..79be93b 100644 --- a/ddutil.cpp +++ b/ddutil.cpp @@ -37,13 +37,13 @@ DDLoadBitmap(IDirectDraw4 * pdd, LPCSTR szBitmap, int dx, int dy) // // Try to load the bitmap as a resource, if that fails, try it as a file // - hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, dx, + hbm = (HBITMAP) LoadImage(GetModuleHandle(nullptr), szBitmap, IMAGE_BITMAP, dx, dy, LR_CREATEDIBSECTION); - if (hbm == NULL) - hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, dx, dy, + if (hbm == nullptr) + hbm = (HBITMAP) LoadImage(nullptr, szBitmap, IMAGE_BITMAP, dx, dy, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - if (hbm == NULL) - return NULL; + if (hbm == nullptr) + return nullptr; // // Get size of the bitmap // @@ -57,8 +57,8 @@ DDLoadBitmap(IDirectDraw4 * pdd, LPCSTR szBitmap, int dx, int dy) ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd.dwWidth = bm.bmWidth; ddsd.dwHeight = bm.bmHeight; - if (pdd->CreateSurface(&ddsd, &pdds, NULL) != DD_OK) - return NULL; + if (pdd->CreateSurface(&ddsd, &pdds, nullptr) != DD_OK) + return nullptr; DDCopyBitmap(pdds, hbm, 0, 0, 0, 0); DeleteObject(hbm); return pdds; @@ -81,12 +81,12 @@ DDReLoadBitmap(IDirectDrawSurface4 * pdds, LPCSTR szBitmap) // // Try to load the bitmap as a resource, if that fails, try it as a file // - hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, 0, + hbm = (HBITMAP) LoadImage(GetModuleHandle(nullptr), szBitmap, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); - if (hbm == NULL) - hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, 0, 0, + if (hbm == nullptr) + hbm = (HBITMAP) LoadImage(nullptr, szBitmap, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - if (hbm == NULL) + if (hbm == nullptr) { OutputDebugString("handle is null\n"); return E_FAIL; @@ -117,7 +117,7 @@ DDCopyBitmap(IDirectDrawSurface4 * pdds, HBITMAP hbm, int x, int y, DDSURFACEDESC2 ddsd; HRESULT hr; - if (hbm == NULL || pdds == NULL) + if (hbm == nullptr || pdds == nullptr) return E_FAIL; // // Make sure this surface is restored. @@ -126,7 +126,7 @@ DDCopyBitmap(IDirectDrawSurface4 * pdds, HBITMAP hbm, int x, int y, // // Select bitmap into a memoryDC so we can use it. // - hdcImage = CreateCompatibleDC(NULL); + hdcImage = CreateCompatibleDC(nullptr); if (!hdcImage) OutputDebugString("createcompatible dc failed\n"); SelectObject(hdcImage, hbm); @@ -159,7 +159,7 @@ DDCopyBitmap(IDirectDrawSurface4 * pdds, HBITMAP hbm, int x, int y, //----------------------------------------------------------------------------- // Name: DDLoadPalette() // Desc: Create a DirectDraw palette object from a bitmap resource -// if the resource does not exist or NULL is passed create a +// if the resource does not exist or nullptr is passed create a // default 332 palette. //----------------------------------------------------------------------------- extern "C" IDirectDrawPalette * @@ -187,13 +187,13 @@ DDLoadPalette(IDirectDraw4 * pdd, LPCSTR szBitmap) // // Get a pointer to the bitmap resource. // - if (szBitmap && (h = FindResource(NULL, szBitmap, RT_BITMAP))) + if (szBitmap && (h = FindResource(nullptr, szBitmap, RT_BITMAP))) { - lpbi = (LPBITMAPINFOHEADER) LockResource(LoadResource(NULL, h)); + lpbi = (LPBITMAPINFOHEADER) LockResource(LoadResource(nullptr, h)); if (!lpbi) OutputDebugString("lock resource failed\n"); prgb = (RGBQUAD *) ((BYTE *) lpbi + lpbi->biSize); - if (lpbi == NULL || lpbi->biSize < sizeof(BITMAPINFOHEADER)) + if (lpbi == nullptr || lpbi->biSize < sizeof(BITMAPINFOHEADER)) n = 0; else if (lpbi->biBitCount > 8) n = 0; @@ -242,7 +242,7 @@ DDLoadPalette(IDirectDraw4 * pdd, LPCSTR szBitmap) ape[i].peBlue = r; } } - pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal, NULL); + pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal, nullptr); return ddpal; } @@ -277,14 +277,14 @@ DDColorMatch(IDirectDrawSurface4 * pdds, COLORREF rgb) // Now lock the surface so we can read back the converted color // ddsd.dwSize = sizeof(ddsd); - while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING) + while ((hres = pdds->Lock(nullptr, &ddsd, 0, nullptr)) == DDERR_WASSTILLDRAWING) ; if (hres == DD_OK) { dw = *(DWORD *) ddsd.lpSurface; // Get DWORD if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32) dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1; // Mask it to bpp - pdds->Unlock(NULL); + pdds->Unlock(nullptr); } // // Now put the color that was there back. diff --git a/extern.hpp b/extern.hpp new file mode 100644 index 0000000..e93337e --- /dev/null +++ b/extern.hpp @@ -0,0 +1,118 @@ +#pragma once + +#include "headers.hpp" +#include "types.hpp" + +extern BOOL bActive; // is application active? +extern BOOL Spielzustand; // in welchem Zustand ist das Spiel? +extern BOOL MouseAktiv; // Mouse angestellt? +extern BOOL LAnimation; // Ist die Landschaftanimation angeschaltet? +extern HWND hwnd; +extern BOOL Gitter; // Gitternetz an/aus +extern RECT ScapeGrenze; // Diese Koordinaten zeigen die Größe der Landschaft an +extern SHORT Flusslaenge[FLUSSANZAHL]; +extern SHORT CursorTyp; // Welcher Cursortyp? +extern BOOL Button0down; // linke Maustaste gedrückt gehalten +extern BOOL Button1down; // rechte Maustaste gedrückt gehalten +extern SHORT RouteLaenge; // Länge +extern SHORT RoutePunkt; // Aktueller Index in RouteKoor +extern FLOAT Schrittx, Schritty; // Zum Figur laufen lassen +extern LONG Zeit; // Start der Sekunde +extern SHORT Bild, LastBild; // Anzahl der Bilder in der Sekunde +extern RECT rcRectdes, rcRectsrc; // Ständig benötigte Variable zum Blitten +extern SHORT Tag, Stunden, Minuten; // Wieviel Uhr (0-12h) +extern CHAR StdString[1024]; // Standard string +extern CHAR RohString[1024]; // Darin wird gespeichert, wieviel Rohstoffe noch benötigt werden +extern SHORT PapierText; // Wieviel Papier? (in Pixel) -1 = Kein Text +extern SHORT HauptMenue; // Welches Menü? +extern SHORT TwoClicks; // Für Aktionen mit zwei Mausklicks +extern FLOAT Chance; // Wie groß ist die Chance am Tag gerettet zu werden +extern BOOL BootsFahrt; // Gerade mit dem Boot unterwegs? +extern BOOL Nacht; // Wird die Tageszusammenfassung angezeigt? +extern SHORT Soundzustand; // -1 = keine Soundkarte;0=kein Sound;1=Sound an +extern BOOL Spielbeenden; // Wenn true wird das Spiel sofort beendet +extern SHORT Frage; // -1=KeineFrage;0=Frage wird gestellt;1=Ja;2=Nein +extern DOUBLE pi; // pi, was sonst +extern SHORT AbspannNr; // Zähler für Abspann +extern SHORT AbspannZustand; // Wo im Abspann +extern BOOL SchatzGef; // wurde der Schatz gefunden + +extern short Step, Steps; +extern int LenMap[MAXXKACH][MAXYKACH]; + +// Should be const +extern RECT rcGesamt; +extern RECT rcSpielflaeche; +extern RECT rcPanel; +extern RECT rcKarte; +extern RECT rcTextFeld1; +extern ZWEID EckKoor[13][4]; +extern short Vierecke[13][4][13]; + +extern TEXTBEREICH TextBereich[TEXTANZ]; + +extern ZWEID Camera, // aktueller Kartenausschnitt +MousePosition, // " Mauskoordinaten +RouteZiel, RouteStart, // Koordinaten des Starts und des Endes der Route +Route[MAXXKACH*MAXYKACH], // Liste der Routenpunkte +RouteKoor[2 * MAXXKACH*MAXYKACH], // Liste der Routenkoordinaten +SaveRoute[MAXXKACH*MAXYKACH], // Zum zwischenspeichern der Route +NewPos, // Nur innerhalb des Pathfindings benutzt +GuyPosScreenStart, // Absolute StartPosition bei einem Schritt (Für CalcGuyKoor) +SchatzPos; // Hier ist der Schatz vergraben + +extern RGBSTRUCT rgbStruct; // Hier werden die Farben eines Pixels zwischengespeichert +extern GUY Guy; +extern BMP Bmp[BILDANZ]; +extern WAV Wav[WAVANZ]; +extern ABSPANN AbspannListe[10][10]; // Namenabfolge im Abspann +extern SCAPE Scape[MAXXKACH][MAXYKACH]; +extern FLUSSLAUF Flusslauf[FLUSSANZAHL][MAXFLUSS]; + + +// DirectDraw +extern LPDIRECTDRAW4 lpDD; // DirectDraw object +extern LPDIRECTDRAWSURFACE4 lpDDSPrimary; // DirectDraw primary surface +extern LPDIRECTDRAWSURFACE4 lpDDSBack; // DirectDraw back surface +extern LPDIRECTDRAWSURFACE4 lpDDSMisc; // DirectDraw Bilder surface +extern LPDIRECTDRAWSURFACE4 lpDDSPanel; // DirectDraw Panel surface +extern LPDIRECTDRAWSURFACE4 lpDDSGuyAni; // DirectDraw GuyAni surface +extern LPDIRECTDRAWSURFACE4 lpDDSAnimation; // DirectDraw Animation surface +extern LPDIRECTDRAWSURFACE4 lpDDSKarte; // DirectDraw MiniMap surface +extern LPDIRECTDRAWSURFACE4 lpDDSSchrift; // DirectDraw Schrift surface +extern LPDIRECTDRAWSURFACE4 lpDDSSchrift1; // DirectDraw Schrift1 surface +extern LPDIRECTDRAWSURFACE4 lpDDSSchrift2; // DirectDraw Schrift2 surface +extern LPDIRECTDRAWSURFACE4 lpDDSTextFeld; // DirectDraw TextFeld surface +extern LPDIRECTDRAWSURFACE4 lpDDSPapier; // DirectDraw Paier surface +extern LPDIRECTDRAWSURFACE4 lpDDSBaum; // DirectDraw Bäume surface +extern LPDIRECTDRAWSURFACE4 lpDDSBau; // DirectDraw Bauwerke surface +extern LPDIRECTDRAWSURFACE4 lpDDSCredits; // DirectDraw Credits surface +extern LPDIRECTDRAWSURFACE4 lpDDSLogo; // DirectDraw Logo surface +extern LPDIRECTDRAWSURFACE4 lpDDSCursor; // DirectDraw Cursor surface +extern LPDIRECTDRAWSURFACE4 lpDDSButtons; // DirectDraw Buttons surface +extern LPDIRECTDRAWSURFACE4 lpDDSInventar; // DirectDraw Inventar surface +extern LPDIRECTDRAWSURFACE4 lpDDSScape; // DirectDraw Landschaft surface +extern LPDIRECTDRAWSURFACE4 lpDDSSchatzkarte; // SchatzkartenSurface +extern LPDIRECTDRAWPALETTE lpDDPal; // DirectDraw palette +extern DDBLTFX ddbltfx; // DirectDraw Effekte +extern DDPIXELFORMAT ddpf; +extern DDSURFACEDESC2 ddsd, ddsd2; // Zwischenspeicher der SurfaceEigenschaften + +extern LPDIRECTDRAWGAMMACONTROL lpDDGammaControl; // Die drei sind für das Gammaablenden +extern DDGAMMARAMP DDGammaRamp; +extern DDGAMMARAMP DDGammaOld; + +// Directinput +extern IDirectInput* g_pDI; +extern IDirectInputDevice* g_pMouse; +extern IDirectInputDevice* g_pKey; +extern HANDLE g_hMouseEvent; +extern HINSTANCE g_hInst; +extern BOOL MouseInit; + +// DirectSound +extern LPDIRECTSOUND8 lpds; // DirectSoundObjekt +extern DSBUFFERDESC dsbdesc; +extern LPDIRECTSOUNDBUFFER lpdsb; +extern LPDIRECTSOUNDBUFFER lpdsbPrimary; +extern LPDIRECTSOUNDBUFFER lpdsbWav[WAVANZ]; // Wavedateispeicher diff --git a/globals.cpp b/globals.cpp new file mode 100644 index 0000000..eca9acc --- /dev/null +++ b/globals.cpp @@ -0,0 +1,206 @@ +#pragma once + +#include "types.hpp" +#include "constants.hpp" +#include "extern.hpp" + +BOOL bActive = false; // is application active? +BOOL Spielzustand = SZNICHTS; // in welchem Zustand ist das Spiel? +BOOL MouseAktiv = false; // Mouse angestellt? +BOOL LAnimation = true; // Ist die Landschaftanimation angeschaltet? +HWND hwnd; +BOOL Gitter; // Gitternetz an/aus +RECT ScapeGrenze; // Diese Koordinaten zeigen die Größe der Landschaft an +SHORT Flusslaenge[FLUSSANZAHL]; +SHORT CursorTyp; // Welcher Cursortyp? +BOOL Button0down; // linke Maustaste gedrückt gehalten +BOOL Button1down; // rechte Maustaste gedrückt gehalten +SHORT RouteLaenge; // Länge +SHORT RoutePunkt; // Aktueller Index in RouteKoor +FLOAT Schrittx, Schritty; // Zum Figur laufen lassen +LONG Zeit; // Start der Sekunde +SHORT Bild, LastBild; // Anzahl der Bilder in der Sekunde +RECT rcRectdes, rcRectsrc; // Ständig benötigte Variable zum Blitten +SHORT Tag, Stunden, Minuten; // Wieviel Uhr (0-12h) +CHAR StdString[1024]; // Standard string +CHAR RohString[1024]; // Darin wird gespeichert, wieviel Rohstoffe noch benötigt werden +SHORT PapierText; // Wieviel Papier? (in Pixel) -1 = Kein Text +SHORT HauptMenue; // Welches Menü? +SHORT TwoClicks; // Für Aktionen mit zwei Mausklicks +FLOAT Chance; // Wie groß ist die Chance am Tag gerettet zu werden +BOOL BootsFahrt; // Gerade mit dem Boot unterwegs? +BOOL Nacht; // Wird die Tageszusammenfassung angezeigt? +SHORT Soundzustand; // -1 = keine Soundkarte;0=kein Sound;1=Sound an +BOOL Spielbeenden = false; // Wenn true wird das Spiel sofort beendet +SHORT Frage; // -1=KeineFrage;0=Frage wird gestellt;1=Ja;2=Nein +DOUBLE pi = 3.1415926535; // pi, was sonst +SHORT AbspannNr = 0; // Zähler für Abspann +SHORT AbspannZustand = 0; // Wo im Abspann +BOOL SchatzGef = false; // wurde der Schatz gefunden + +// Pathfinding +short Step, Steps; +int LenMap[MAXXKACH][MAXYKACH]; + +//Bereiche +// links, oben, rechts, unten +RECT rcGesamt = { 0, 0, MAXX, MAXY }; +RECT rcSpielflaeche = { 0, 0, MAXX - 195, MAXY - 20 }; +RECT rcPanel = { MAXX - 205, 0, MAXX, MAXY }; +RECT rcKarte = { MAXX - 158, 23, rcKarte.left + MAXXKACH * 2, rcKarte.top + MAXYKACH * 2 }; +RECT rcTextFeld1 = { 0, MAXY - 20, MAXX - 195, MAXY }; + +//Die Eckkoordinaten der Kacheln (Achtung: mit überlappendem Rand) +ZWEID EckKoor[13][4] = +{// 0 1 2 3 Ecke + { { -1, 29 }, { 26, 15 }, { 54, 30 }, { 27, 44 } },//0 + { { -1, 13 }, { 26, 15 }, { 54, 30 }, { 27, 28 } },//1 + { { -1, 29 }, { 26, 15 }, { 54, 14 }, { 27, 28 } },//2 + { { -1, 29 }, { 26, -1 }, { 54, 14 }, { 27, 44 } },//3 + { { -1, 13 }, { 26, -1 }, { 54, 30 }, { 27, 44 } },//4 + { { -1, 13 }, { 26, 15 }, { 54, 30 }, { 27, 44 } },//5 + { { -1, 29 }, { 26, 15 }, { 54, 30 }, { 27, 28 } },//6 Kacheltyp + { { -1, 29 }, { 26, 15 }, { 54, 14 }, { 27, 44 } },//7 + { { -1, 29 }, { 26, -1 }, { 54, 30 }, { 27, 44 } },//8 + { { -1, 13 }, { 26, -1 }, { 54, 14 }, { 27, 44 } },//9 + { { -1, 13 }, { 26, -1 }, { 54, 30 }, { 27, 28 } },//10 + { { -1, 13 }, { 26, 15 }, { 54, 14 }, { 27, 28 } },//11 + { { -1, 29 }, { 26, -1 }, { 54, 14 }, { 27, 28 } },//12 + +}; + +short Vierecke[13][4][13] = //0=Passt nicht 1=1runter 2=gleiche Hoehe 3=1hoch +{// 0 1 2 3 4 5 6 7 8 9 10 11 12 + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } },//0 + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } },//1 + /*0*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } },//2 Kante + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } //3 + }, + { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, + /*1*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, + { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } + }, + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, + /*2*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } + }, + { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, + /*3*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } + }, + { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + /*4*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } + },// 0 1 2 3 4 5 6 7 8 9 10 11 12 + { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, + /*5*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } + }, + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, + { { 2 }, { 1 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 } }, + /*6*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } + }, + { { { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 1 }, { 1 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, + /*7*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } + }, + { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + /*8*/{ { 2 }, { 0 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 1 }, { 1 }, { 0 }, { 0 } }, + { { 2 }, { 2 }, { 0 }, { 1 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 1 }, { 0 }, { 0 }, { 1 } } + }, + { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, + { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, + /*9*/{ { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 } } + },// 0 1 2 3 4 5 6 7 8 9 10 11 12 + { { { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 3 }, { 0 }, { 0 }, { 2 }, { 2 } }, + { { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + /*10*/{ { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } }, + { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } + }, + { { { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 } }, + /*11*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, + { { 3 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 2 } } + }, + { { { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 } }, + { { 3 }, { 2 }, { 0 }, { 3 }, { 0 }, { 0 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 } }, + /*12*/{ { 3 }, { 0 }, { 3 }, { 0 }, { 2 }, { 0 }, { 3 }, { 3 }, { 0 }, { 2 }, { 2 }, { 0 }, { 0 } }, + { { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 }, { 0 }, { 0 }, { 2 }, { 0 } } + }, + +}; + +TEXTBEREICH TextBereich[TEXTANZ]; + +ZWEID Camera, // aktueller Kartenausschnitt +MousePosition, // " Mauskoordinaten +RouteZiel, RouteStart, // Koordinaten des Starts und des Endes der Route +Route[MAXXKACH*MAXYKACH], // Liste der Routenpunkte +RouteKoor[2 * MAXXKACH*MAXYKACH], // Liste der Routenkoordinaten +SaveRoute[MAXXKACH*MAXYKACH], // Zum zwischenspeichern der Route +NewPos, // Nur innerhalb des Pathfindings benutzt +GuyPosScreenStart, // Absolute StartPosition bei einem Schritt (Für CalcGuyKoor) +SchatzPos; // Hier ist der Schatz vergraben +RGBSTRUCT rgbStruct; // Hier werden die Farben eines Pixels zwischengespeichert +GUY Guy; +BMP Bmp[BILDANZ]; +WAV Wav[WAVANZ]; +ABSPANN AbspannListe[10][10]; // Namenabfolge im Abspann +SCAPE Scape[MAXXKACH][MAXYKACH]; +FLUSSLAUF Flusslauf[FLUSSANZAHL][MAXFLUSS]; + +// DirectDraw +LPDIRECTDRAW4 lpDD = NULL; // DirectDraw object +LPDIRECTDRAWSURFACE4 lpDDSPrimary = NULL; // DirectDraw primary surface +LPDIRECTDRAWSURFACE4 lpDDSBack = NULL; // DirectDraw back surface +LPDIRECTDRAWSURFACE4 lpDDSMisc = NULL; // DirectDraw Bilder surface +LPDIRECTDRAWSURFACE4 lpDDSPanel = NULL; // DirectDraw Panel surface +LPDIRECTDRAWSURFACE4 lpDDSGuyAni = NULL; // DirectDraw GuyAni surface +LPDIRECTDRAWSURFACE4 lpDDSAnimation = NULL; // DirectDraw Animation surface +LPDIRECTDRAWSURFACE4 lpDDSKarte = NULL; // DirectDraw MiniMap surface +LPDIRECTDRAWSURFACE4 lpDDSSchrift = NULL; // DirectDraw Schrift surface +LPDIRECTDRAWSURFACE4 lpDDSSchrift1 = NULL; // DirectDraw Schrift1 surface +LPDIRECTDRAWSURFACE4 lpDDSSchrift2 = NULL; // DirectDraw Schrift2 surface +LPDIRECTDRAWSURFACE4 lpDDSTextFeld = NULL; // DirectDraw TextFeld surface +LPDIRECTDRAWSURFACE4 lpDDSPapier = NULL; // DirectDraw Paier surface +LPDIRECTDRAWSURFACE4 lpDDSBaum = NULL; // DirectDraw Bäume surface +LPDIRECTDRAWSURFACE4 lpDDSBau = NULL; // DirectDraw Bauwerke surface +LPDIRECTDRAWSURFACE4 lpDDSCredits = NULL; // DirectDraw Credits surface +LPDIRECTDRAWSURFACE4 lpDDSLogo = NULL; // DirectDraw Logo surface +LPDIRECTDRAWSURFACE4 lpDDSCursor = NULL; // DirectDraw Cursor surface +LPDIRECTDRAWSURFACE4 lpDDSButtons = NULL; // DirectDraw Buttons surface +LPDIRECTDRAWSURFACE4 lpDDSInventar = NULL; // DirectDraw Inventar surface +LPDIRECTDRAWSURFACE4 lpDDSScape = NULL; // DirectDraw Landschaft surface +LPDIRECTDRAWSURFACE4 lpDDSSchatzkarte = NULL; // SchatzkartenSurface +LPDIRECTDRAWPALETTE lpDDPal = NULL; // DirectDraw palette +DDBLTFX ddbltfx; // DirectDraw Effekte +DDPIXELFORMAT ddpf; +DDSURFACEDESC2 ddsd, ddsd2; // Zwischenspeicher der SurfaceEigenschaften + +LPDIRECTDRAWGAMMACONTROL lpDDGammaControl = NULL; // Die drei sind für das Gammaablenden +DDGAMMARAMP DDGammaRamp; +DDGAMMARAMP DDGammaOld; + +// Directinput +IDirectInput* g_pDI = NULL; +IDirectInputDevice* g_pMouse = NULL; +IDirectInputDevice* g_pKey = NULL; +HANDLE g_hMouseEvent = NULL; +HINSTANCE g_hInst = NULL; +BOOL MouseInit = false; + +// DirectSound +LPDIRECTSOUND8 lpds; // DirectSoundObjekt +DSBUFFERDESC dsbdesc; +LPDIRECTSOUNDBUFFER lpdsb; +LPDIRECTSOUNDBUFFER lpdsbPrimary; +LPDIRECTSOUNDBUFFER lpdsbWav[WAVANZ]; // Wavedateispeicher diff --git a/headers.hpp b/headers.hpp new file mode 100644 index 0000000..e06e87c --- /dev/null +++ b/headers.hpp @@ -0,0 +1,22 @@ +#pragma once + +#define ROUND(s) ((short) ((short)(s-0.5) == (short) s ? s+1:s)) //Zahlen runden Macro +#define INITGUID +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#define DIRECTINPUT_VERSION 0x0700 +//#define DIRECTSOUND_VERSION 0x0700 +#define DIRECTDRAW_VERSION 0x0500 + +#include +#include +#include +#include +#include +#include + +#include "ddutil.h" +#include "resource.h" + +#include "constants.hpp" diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..8ba5945 --- /dev/null +++ b/main.cpp @@ -0,0 +1,8 @@ +#include "Application.hpp" + +int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + Application app{"Landscape", hInstance, hPrevInstance, lpCmdLine, nCmdShow}; + + return app.run(); +} diff --git a/types.hpp b/types.hpp new file mode 100644 index 0000000..1bff7b7 --- /dev/null +++ b/types.hpp @@ -0,0 +1,89 @@ +#pragma once + +#include "headers.hpp" + +struct TEXTBEREICH +{ + bool Aktiv; // Steht Text in diesem Bereich? + RECT rcText; // Die Position des Ausgabe +}; + +struct ZWEID +{ + short x; + short y; +}; + +struct RGBSTRUCT +{ + BYTE r, g, b; +}; + +struct GUY +{ + bool Aktiv; // Ist er aktiv? + short Aktion; // Welche Aktion (Suchen, fischen ...) (Ãœbergeordnet über Zustand) + ZWEID Pos; // KachelPosition der Spielfigur + ZWEID PosAlt; // Die ursprünglich Position in der Kachel (für die Aktionsprozeduren) + ZWEID PosScreen; // Absolute Position der Spielfigur + short Zustand; // Was macht er gerade? (Animation)(linkslaufen,rechtslaufen...,angeln..) + short AkNummer; // Bei welcher Aktion (für die Aktionsprozeduren) + float Resource[3]; // Wieviel Wasservorrat usw + short Inventar[BILDANZ]; // Welche Rohstoffe usw. besitzt man +}; + +struct BMP +{ + LPDIRECTDRAWSURFACE4 Surface; // in welcher Surface gespeichert? + bool Animation; // Läuft die Animations? + short Anzahl; // Anzahl der Animationsphasen + short Phase; // die aktuelle Phase + RECT rcSrc; // Quelle des 1. Bildes + RECT rcDes; // Falls es immer an die gleiche Stelle gezeichnet wird. (Buttons) + short Breite; // Die Breite des Bildes + short Hoehe; // Die Hoehe des Bildes + short Geschwindigkeit; // Wieviel Bilder/sec + short Sound; // Welcher Sound gehört dazu + //zum bauen + short Rohstoff[BILDANZ]; // Anzahl des i.Rohstoffs, den man zum Bau benötigt + short AkAnzahl; // Anzahl der Aktionsfaellen, die zum Bau benötigt werden + bool First; // Ist es das erstemal gebaut, dann Hilfetext +}; + +struct WAV +{ + char *Dateiname; // Dateiname der Wavdatei + bool Loop; // Nur einmal abspielen und ständig + short Volume; // Die Standardlautstärke in Prozent +}; + +struct ABSPANN +{ + bool Aktiv; // Bewegt sich gerade + short Bild; // welches Bild +}; + +struct SCAPE +{ + short Typ; // Flach, Hang usw. + short Art; // Sand, Moor ... + short Hoehe; // Die Hoehe der Kachel + bool Markiert; // Ist diese Kachel markiert? + short xScreen, yScreen; // Die Koordinaten in der Scape-Surface + bool Begehbar; // notwendig für Pathfinding + bool Entdeckt; // Ist dieses Feld schon aufgedeckt? + short LaufZeit; // LaufZeit auf dieser Kachel (1 am schnellsten...) + short Objekt; // Welches Objekt steht drauf (z.Bsp. Flüsse) + bool Reverse; // Wird die Objektanimation umgekehrt abgespielt (für flüsse) + ZWEID ObPos; // Die Koordinaten des Objekts (relativ zu xScreen und yScreen) + float Phase; // Welche Animationsphase oder Bildversion + short AkNummer; // Welche Aktionsnummer (um Baustellen vortzusetzen) + ZWEID GPosAlt; // Damit der Guy an der richtigen Stelle (x,y) weiterbaut + short Rohstoff[BILDANZ]; //Anzahl des i.Rohstoffs, den man noch zum bauen braucht + float Timer; //Bis jetzt nur fürs Feuer nötig +}; + +struct FLUSSLAUF +{ + short x, y; +}; From cf90155e00474341c0f07ab7e4a2a9673961bbe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Tue, 13 Jan 2015 21:37:43 +0100 Subject: [PATCH 3/6] The process_events function is now being called. --- Application.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Application.cpp b/Application.cpp index d9a21d4..c5503b0 100644 --- a/Application.cpp +++ b/Application.cpp @@ -124,10 +124,10 @@ bool Application::create_window() 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), - nullptr, - nullptr, + NULL, + NULL, m_hInstance, - nullptr); + this); return m_hWnd != nullptr; } From a7a70d6e8e49afb6917c1a98fd0f769764a086f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Wed, 14 Jan 2015 01:46:51 +0100 Subject: [PATCH 4/6] Adjusted some graphic parts to finally get the game running. --- Application.cpp | 15 ++++--- Direct.cpp | 17 +++++--- Game.cpp | 10 +++-- Landscape.vcxproj | 5 ++- README.md | 106 +++++++++++++++++++++++----------------------- Renderer.cpp | 20 ++++++++- Sound.cpp | 5 +-- World.cpp | 3 +- 8 files changed, 102 insertions(+), 79 deletions(-) diff --git a/Application.cpp b/Application.cpp index c5503b0..3afe6eb 100644 --- a/Application.cpp +++ b/Application.cpp @@ -4,6 +4,7 @@ #include "Direct.hpp" #include "Game.hpp" #include "Math.hpp" +#include "Sound.hpp" #include "Renderer.hpp" #include "Routing.hpp" #include "World.hpp" @@ -164,17 +165,17 @@ short Application::Refresh() if (LastBild == 0) LastBild = 50; // BilderproSec ausgeben - /*Textloeschen(TXTFPS); + /* + Renderer::Textloeschen(TXTFPS); TextBereich[TXTFPS].Aktiv = true; std::sprintf(StdString, "%d", LastBild); - DrawString(StdString,(short)TextBereich[TXTFPS].rcText.left,(short)TextBereich[TXTFPS].rcText.top,1); + Renderer::DrawString(StdString,(short)TextBereich[TXTFPS].rcText.left,(short)TextBereich[TXTFPS].rcText.top,1); */ } if (Spielzustand == SZLOGO) { - if (Direct::CheckKey() == 2) break; // Das Keyboard abfragen - Renderer::ZeigeLogo(); //Bild auffrischen - + if (Direct::CheckKey() == 2) break; // Das Keyboard abfragen + Renderer::ZeigeLogo(); // Bild auffrischen } else if ((Spielzustand == SZINTRO) || (Spielzustand == SZGERETTET)) { @@ -183,10 +184,12 @@ short Application::Refresh() Math::Animationen(); // Animationen weiterschalten if (!Guy.Aktiv) Event(Guy.Aktion); // Aktionen starten if (Guy.Pos.x == RouteStart.x) Renderer::ZeigeIntro(); // Bild auffrischen (if-Abfrage nötig (seltsamerweise)) - } else if (Spielzustand == SZSPIEL) { + // Hide system cursor + SetCursor(NULL); + if ((Stunden >= 12) && (Minuten != 0) && (Guy.Aktion != Action::DAY_END)) // Hier ist der Tag zuende { if (Guy.Aktion == Action::LOOKOUT) Chance -= 1 + Scape[Guy.Pos.x][Guy.Pos.y].Hoehe; diff --git a/Direct.cpp b/Direct.cpp index c6aa60a..43fcbe2 100644 --- a/Direct.cpp +++ b/Direct.cpp @@ -9,6 +9,8 @@ #include "Sound.hpp" #include "World.hpp" +#include + namespace Direct { void InitDDraw() @@ -171,12 +173,15 @@ namespace Direct ddpf.dwSize = sizeof(ddpf); lpDDSSchrift->GetPixelFormat(&ddpf); - error:; - /* - finiObjects(); - MessageBox( hwnd, "DirectDraw Init FAILED", TITLE, MB_OK ); - DestroyWindow( hwnd ); - */ + error: + if (ddrval != DD_OK) + { + std::stringstream ss; + ss << "DirectDraw Init FAILED: " << ddrval; + finiObjects(); + MessageBox(hwnd, ss.str().c_str(), "Landscape", MB_OK); + DestroyWindow(hwnd); + } } void InitDInput() diff --git a/Game.cpp b/Game.cpp index d87f473..4057e96 100644 --- a/Game.cpp +++ b/Game.cpp @@ -50,7 +50,7 @@ namespace Game std::ifstream ifs("save.dat", std::ios::binary); // | ios::nocreate); if (!ifs) return(false); - + ifs.read((char*)Scape, sizeof(Scape)); ifs.read((char*)&Guy, sizeof(Guy)); ifs.read((char*)&BootsFahrt, sizeof(BootsFahrt)); @@ -67,7 +67,7 @@ namespace Game ifs.read((char*)&Tag, sizeof(Tag)); ifs.read((char*)TextBereich, sizeof(TextBereich)); ifs.read((char*)&SchatzGef, sizeof(SchatzGef)); - + for (i = 0; iMaxSpeed true Level3 - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) .\Release\ true .\Release\Landscape.pch @@ -128,7 +128,8 @@ true Windows Release/Schiffbruch.exe - odbc32.lib;odbccp32.lib;dxguid.lib;ddraw.lib;dinput.lib;dsound.lib;winmm.lib;%(AdditionalDependencies) + dsound.lib;winmm.lib;dxguid.lib;ddraw.lib;dinput.lib;xinput.lib;dinput8.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + false diff --git a/README.md b/README.md index ac6ac7d..32b4dab 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,53 @@ -Shipwreck -========= - -![Shipwreck](http://i.imgur.com/Urexwg6.png) - -This is modern port of the rather old German game *Schiffbruch* written by [Dirk Plate](http://www.dplate.de/) back in 1999. I've played it a lot and liked it very much. Unfortunately it doesn't run nicely on newer computers, thus I'm creating this port. Getting a working game however is not the only goal, instead I'm quite interested in turning the one file with over 10k lines into a modern C++ code base. - -Author ------- - -* Dirk Plate - Author of the original game -* Lukas Dürrenberger - Author of this port - -Downloads ---------- - -* [Original Game](http://www.heikoplate.de/dP-Software/zips/schiffbruch.exe) -* [Original SDK](http://www.heikoplate.de/dP-Software/zips/schiffbruchsdk.zip) - -Links ------ - -* [Original Website](http://www.dplate.de/) -* [Development Blog](http://dev.my-gate.net/) -* [Simple and Fast Multimedia Library](http://www.sfml-dev.org/) - - ------------------------------- - - -Original Remarks -================ - -*Shipwreck* is a mix of building, strategy and adventure and gets played with a two-dimensional view. The game deals with the consequences of a ship wreckage. You're stranded on a desert island and have to survive. In order to do so you need to explore the island, find food, build a shelter and try to get attention, so you get found. - -Controls --------- - -*Shipwrek* get played entirely with the mouse. In the main window you see the island on which you're stranded. A click onto a landscape tile, creates a route to that point marked in red. Another click lets the character walk there. By holding the right mouse button it's possible to scroll. - -On the right side is a control panel: If you hover over a button with the mouse, you get to see what the button does on the status bar on the bottom. The three heads of liquid in the middle need to be watched at all time, because if food and water drop below 50%, the player's health will start to decrease. Once it reaches 0%, you'll die. Objects in the inventory may be combined by drag & drop. Way down on the bottom you get to see the daytime. Since it's an island on the equator, it will get dark at 6 pm and bright at 6 am. At night you'll always be sleeping. - -Ever morning and every time you exit, the game will be automatically saved to the disk, as long as the player's health is above 10% and it's possible to write to the application directory. The saved game will be loaded immediately up on starting the game the next time and it's possible to continue to play. - -Special Thanks To ------------------ - -- Matthias Buchetics, who constantly had to test an half finished application. -- Tobias Tappel, who made the same thing, but less regularly. -- Sigrid Plate, who made the same thing as well, but even less regularly. -- John Lonningdal, who doesn't know, that I've 'stolen' his path finding algorithm. -- Heiko Plate, who made the music and can calculate in the binary system. -- Gisela Plate, who got to solve math problems. +Schiffbruch +=========== + +![Schiffbruch](http://i.imgur.com/Urexwg6.png) + +This is a modern port of the rather old German game *Schiffbruch* written by [Dirk Plate](http://www.dplate.de/) back in 1999. When I was younger, I've played it a lot and liked it very much. Unfortunately it doesn't run nicely on newer computers, thus I'm creating this port. Getting a working game however is not the only goal, instead I'm quite interested in turning the one file with over 10k lines into a modern C++ code base. + +Author +------ + +* Dirk Plate (@dplate) - Author of the original game +* Lukas Dürrenberger (@eXpl0it3r) - Author of this port + +Downloads +--------- + +* [Port SDK](http://github.com/eXpl0it3r/Schiffbruch/archive/master.zip) +* [Original Game](http://www.heikoplate.de/dP-Software/zips/schiffbruch.exe) +* [Original SDK](http://www.heikoplate.de/dP-Software/zips/schiffbruchsdk.zip) + +Links +----- + +* [Original Website](http://www.dplate.de/) +* [My Development Blog](http://dev.my-gate.net/) + + +------------------------------ + + +Original Remarks +================ + +*Schiffbruch* is a mix of building, strategy and adventure and gets played with a two-dimensional view. The game deals with the consequences of a ship wreckage. You're stranded on a desert island and have to survive. In order to do so you need to explore the island, find food, build a shelter and try to get attention, so you get found. + +Controls +-------- + +*Schiffbruch* is played entirely with the mouse. In the main window you see the island on which you're stranded. A click onto a landscape tile, creates a route to that point marked in red. Another click lets the character walk there. By holding the right mouse button it's possible to scroll. + +On the right side is a control panel: If you hover over a button with the mouse, you get to see what the button does on the status bar on the bottom. The three heads of liquid in the middle need to be watched at all time, because if food and water drop below 50%, the player's health will start to decrease. Once it reaches 0%, you'll die. Objects in the inventory may be combined by drag & drop. Way down on the bottom you get to see the daytime. Since it's an island on the equator, it will get dark at 6 pm and bright at 6 am. At night you'll always be sleeping. + +Every morning and every time you exit, the game will automatically be saved to the disk, as long as the player's health is above 10% and it's possible to write to the application directory. The saved game will be loaded direct when starting the game the next time and thus it's possible to continue playing. + +Special Thanks To +----------------- + +- Matthias Buchetics, who constantly had to test an half finished application. +- Tobias Tappel, who made the same thing, but less regularly. +- Sigrid Plate, who made the same thing as well, but even less regularly. +- John Lonningdal, who doesn't know, that I've 'stolen' his path finding algorithm. +- Heiko Plate, who made the music and can calculate in the binary system. +- Gisela Plate, who got to solve math problems. diff --git a/Renderer.cpp b/Renderer.cpp index 9110a79..4b88512 100644 --- a/Renderer.cpp +++ b/Renderer.cpp @@ -98,6 +98,14 @@ namespace Renderer Erg = Erg << 5; Erg = Erg | (DWORD)((b & 0xF8) >> 3); } + else if (ddpf.dwRBitMask = 16711680) + { + Erg = (DWORD)(r & 0xFF); + Erg = Erg << 8; + Erg = Erg | (DWORD)(g & 0xFF); + Erg = Erg << 8; + Erg = Erg | (DWORD)(b & 0xFF); + } else { Erg = 0; @@ -120,6 +128,12 @@ namespace Renderer rgbStruct.g = (byte)((color & 0x03E0) >> 2); rgbStruct.b = (byte)((color & 0x001F) << 3); } + else if (ddpf.dwRBitMask == 16711680) + { + rgbStruct.r = (byte)((color & 0xFF0000) >> 8); + rgbStruct.g = (byte)((color & 0x00FF00) >> 8); + rgbStruct.b = (byte)((color & 0x0000FF)); + } } void Blitten(LPDIRECTDRAWSURFACE4 lpDDSVon, LPDIRECTDRAWSURFACE4 lpDDSNach, bool Transp) @@ -240,7 +254,8 @@ namespace Renderer || (Scape[x][y].Objekt == SOS)) { // Sound abspielen - if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && + if (Scape[x][y].Objekt != -1 && + ((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) { if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) @@ -263,7 +278,8 @@ namespace Renderer (Scape[x][y].Objekt >= ZELT)) // Bäume und Früchte (und alle anderen Objekte) malen { // Sound abspielen - if (((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && + if (Scape[x][y].Objekt != -1 && + ((Guy.Pos.x - 1 <= x) && (x <= Guy.Pos.x + 1)) && ((Guy.Pos.y - 1 <= y) && (y <= Guy.Pos.y + 1))) { if ((x == Guy.Pos.x) && (y == Guy.Pos.y)) diff --git a/Sound.cpp b/Sound.cpp index 2c365b5..2e6067d 100644 --- a/Sound.cpp +++ b/Sound.cpp @@ -1,7 +1,5 @@ #include "Sound.hpp" - - #include "Direct.hpp" namespace Sound @@ -82,8 +80,7 @@ namespace Sound { short z; - if ((Sound == 0) || (Soundzustand <= 0)) return; - + if ((Sound == 0) || (Soundzustand <= 0) || lpdsbWav[Sound] == nullptr) return; z = -10000 + 100 * Wav[Sound].Volume; lpdsbWav[Sound]->SetVolume((long)(-10000 + (10000 + z)*Volume / 100)); if (Wav[Sound].Loop) lpdsbWav[Sound]->Play(NULL, NULL, DSBPLAY_LOOPING); diff --git a/World.cpp b/World.cpp index 40cb3ca..99776bc 100644 --- a/World.cpp +++ b/World.cpp @@ -127,7 +127,6 @@ namespace World void Generate() { - short x, y; short i; @@ -254,7 +253,6 @@ namespace World } lpDDSKarte->Blt(&rcRectdes, nullptr, nullptr, DDBLT_COLORFILL, &ddbltfx); } - } void CheckSpzButton() @@ -1370,6 +1368,7 @@ namespace World { x = rand() % (MAXXKACH - 1); y = rand() % (MAXYKACH - 1); + // nur auf flachen Kacheln ohne Objekt if ((Scape[x][y].Objekt == -1) && (Scape[x][y].Typ == 0) && (Scape[x][y].Art != 3)) From e850e9e576367a1974a9266f77c5699ba7409638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Wed, 14 Jan 2015 02:17:04 +0100 Subject: [PATCH 5/6] Restructured the directory layout and removed unnecessary Visual Studio files. --- Landscape.001 | 194 ------ Landscape.dsp | 186 ----- Landscape.dsw | 29 - Landscape.opt | Bin 48640 -> 0 bytes Landscape.plg | 38 -- Landscape.sln | 20 - Animation.BMP => bin/images/Animation.BMP | Bin Bau.bmp => bin/images/Bau.bmp | Bin Baum.bmp => bin/images/Baum.bmp | Bin Buttons.bmp => bin/images/Buttons.bmp | Bin Credits.bmp => bin/images/Credits.bmp | Bin Cursor.BMP => bin/images/Cursor.BMP | Bin GuyAni.bmp => bin/images/GuyAni.bmp | Bin Inventar.bmp => bin/images/Inventar.bmp | Bin Landscape.ico => bin/images/Landscape.ico | Bin Logo.bmp => bin/images/Logo.bmp | Bin Misc.BMP => bin/images/Misc.BMP | Bin Panel.bmp => bin/images/Panel.bmp | Bin Papier.bmp => bin/images/Papier.bmp | Bin Schrift1.BMP => bin/images/Schrift1.BMP | Bin Schrift2.bmp => bin/images/Schrift2.bmp | Bin Textfeld.bmp => bin/images/Textfeld.bmp | Bin {sounds => bin/sounds}/abspann.wav | Bin {sounds => bin/sounds}/angel.wav | Bin {sounds => bin/sounds}/baumfaellt.wav | Bin {sounds => bin/sounds}/brandung.wav | Bin {sounds => bin/sounds}/crash.wav | Bin {sounds => bin/sounds}/erfindung.wav | Bin {sounds => bin/sounds}/faellen.wav | Bin {sounds => bin/sounds}/feuer.wav | Bin {sounds => bin/sounds}/fluss.wav | Bin {sounds => bin/sounds}/hammer.wav | Bin {sounds => bin/sounds}/klick.wav | Bin {sounds => bin/sounds}/klick2.wav | Bin {sounds => bin/sounds}/knistern.wav | Bin {sounds => bin/sounds}/logo.wav | Bin {sounds => bin/sounds}/platsch.wav | Bin {sounds => bin/sounds}/schaufeln.wav | Bin {sounds => bin/sounds}/schlagen.wav | Bin {sounds => bin/sounds}/schleuder.wav | Bin {sounds => bin/sounds}/schnarchen.wav | Bin {sounds => bin/sounds}/schwimmen.wav | Bin {sounds => bin/sounds}/sturm.wav | Bin {sounds => bin/sounds}/trinken.wav | Bin {sounds => bin/sounds}/wald.wav | Bin {sounds => bin/sounds}/wolf.wav | Bin Landscape.vcxproj => build/Landscape.vcxproj | 115 ++-- .../Landscape.vcxproj.filters | 151 ++-- Action.cpp => src/Action.cpp | 0 Action.hpp => src/Action.hpp | 0 Application.cpp => src/Application.cpp | 0 Application.hpp => src/Application.hpp | 0 Direct.cpp => src/Direct.cpp | 0 Direct.hpp => src/Direct.hpp | 0 Game.cpp => src/Game.cpp | 0 Game.hpp => src/Game.hpp | 0 Landscape.rc => src/Landscape.rc | 646 +++++++++--------- Math.cpp => src/Math.cpp | 0 Math.hpp => src/Math.hpp | 0 Renderer.cpp => src/Renderer.cpp | 0 Renderer.hpp => src/Renderer.hpp | 0 Routing.cpp => src/Routing.cpp | 0 Routing.hpp => src/Routing.hpp | 0 Sound.cpp => src/Sound.cpp | 0 Sound.hpp => src/Sound.hpp | 0 World.cpp => src/World.cpp | 0 World.hpp => src/World.hpp | 0 constants.hpp => src/constants.hpp | 0 ddutil.cpp => src/ddutil.cpp | 0 ddutil.h => src/ddutil.h | 0 extern.hpp => src/extern.hpp | 0 globals.cpp => src/globals.cpp | 0 headers.hpp => src/headers.hpp | 0 main.cpp => src/main.cpp | 0 resource.h => src/resource.h | 0 types.hpp => src/types.hpp | 0 76 files changed, 452 insertions(+), 927 deletions(-) delete mode 100644 Landscape.001 delete mode 100644 Landscape.dsp delete mode 100644 Landscape.dsw delete mode 100644 Landscape.opt delete mode 100644 Landscape.plg delete mode 100644 Landscape.sln rename Animation.BMP => bin/images/Animation.BMP (100%) rename Bau.bmp => bin/images/Bau.bmp (100%) rename Baum.bmp => bin/images/Baum.bmp (100%) rename Buttons.bmp => bin/images/Buttons.bmp (100%) rename Credits.bmp => bin/images/Credits.bmp (100%) rename Cursor.BMP => bin/images/Cursor.BMP (100%) rename GuyAni.bmp => bin/images/GuyAni.bmp (100%) rename Inventar.bmp => bin/images/Inventar.bmp (100%) rename Landscape.ico => bin/images/Landscape.ico (100%) rename Logo.bmp => bin/images/Logo.bmp (100%) rename Misc.BMP => bin/images/Misc.BMP (100%) rename Panel.bmp => bin/images/Panel.bmp (100%) rename Papier.bmp => bin/images/Papier.bmp (100%) rename Schrift1.BMP => bin/images/Schrift1.BMP (100%) rename Schrift2.bmp => bin/images/Schrift2.bmp (100%) rename Textfeld.bmp => bin/images/Textfeld.bmp (100%) rename {sounds => bin/sounds}/abspann.wav (100%) rename {sounds => bin/sounds}/angel.wav (100%) rename {sounds => bin/sounds}/baumfaellt.wav (100%) rename {sounds => bin/sounds}/brandung.wav (100%) rename {sounds => bin/sounds}/crash.wav (100%) rename {sounds => bin/sounds}/erfindung.wav (100%) rename {sounds => bin/sounds}/faellen.wav (100%) rename {sounds => bin/sounds}/feuer.wav (100%) rename {sounds => bin/sounds}/fluss.wav (100%) rename {sounds => bin/sounds}/hammer.wav (100%) rename {sounds => bin/sounds}/klick.wav (100%) rename {sounds => bin/sounds}/klick2.wav (100%) rename {sounds => bin/sounds}/knistern.wav (100%) rename {sounds => bin/sounds}/logo.wav (100%) rename {sounds => bin/sounds}/platsch.wav (100%) rename {sounds => bin/sounds}/schaufeln.wav (100%) rename {sounds => bin/sounds}/schlagen.wav (100%) rename {sounds => bin/sounds}/schleuder.wav (100%) rename {sounds => bin/sounds}/schnarchen.wav (100%) rename {sounds => bin/sounds}/schwimmen.wav (100%) rename {sounds => bin/sounds}/sturm.wav (100%) rename {sounds => bin/sounds}/trinken.wav (100%) rename {sounds => bin/sounds}/wald.wav (100%) rename {sounds => bin/sounds}/wolf.wav (100%) rename Landscape.vcxproj => build/Landscape.vcxproj (74%) rename Landscape.vcxproj.filters => build/Landscape.vcxproj.filters (50%) rename Action.cpp => src/Action.cpp (100%) rename Action.hpp => src/Action.hpp (100%) rename Application.cpp => src/Application.cpp (100%) rename Application.hpp => src/Application.hpp (100%) rename Direct.cpp => src/Direct.cpp (100%) rename Direct.hpp => src/Direct.hpp (100%) rename Game.cpp => src/Game.cpp (100%) rename Game.hpp => src/Game.hpp (100%) rename Landscape.rc => src/Landscape.rc (91%) rename Math.cpp => src/Math.cpp (100%) rename Math.hpp => src/Math.hpp (100%) rename Renderer.cpp => src/Renderer.cpp (100%) rename Renderer.hpp => src/Renderer.hpp (100%) rename Routing.cpp => src/Routing.cpp (100%) rename Routing.hpp => src/Routing.hpp (100%) rename Sound.cpp => src/Sound.cpp (100%) rename Sound.hpp => src/Sound.hpp (100%) rename World.cpp => src/World.cpp (100%) rename World.hpp => src/World.hpp (100%) rename constants.hpp => src/constants.hpp (100%) rename ddutil.cpp => src/ddutil.cpp (100%) rename ddutil.h => src/ddutil.h (100%) rename extern.hpp => src/extern.hpp (100%) rename globals.cpp => src/globals.cpp (100%) rename headers.hpp => src/headers.hpp (100%) rename main.cpp => src/main.cpp (100%) rename resource.h => src/resource.h (100%) rename types.hpp => src/types.hpp (100%) diff --git a/Landscape.001 b/Landscape.001 deleted file mode 100644 index 5698bf8..0000000 --- a/Landscape.001 +++ /dev/null @@ -1,194 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Landscape" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 5.00 -# ** NICHT BEARBEITEN ** - -# TARGTYPE "Win32 (x86) Application" 0x0101 - -CFG=Landscape - Win32 Debug -!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit\ - NMAKE -!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den\ - Befehl -!MESSAGE -!MESSAGE NMAKE /f "Landscape.mak". -!MESSAGE -!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben -!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: -!MESSAGE -!MESSAGE NMAKE /f "Landscape.mak" CFG="Landscape - Win32 Debug" -!MESSAGE -!MESSAGE Für die Konfiguration stehen zur Auswahl: -!MESSAGE -!MESSAGE "Landscape - Win32 Release" (basierend auf "Win32 (x86) Application") -!MESSAGE "Landscape - Win32 Debug" (basierend auf "Win32 (x86) Application") -!MESSAGE - -# Begin Project -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Landscape - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fr /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib dxguid.lib ddraw.lib dinput.lib dsound.lib winmm.lib /nologo /subsystem:windows /machine:I386 /out:"Release/Schiffbruch.exe" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "Landscape - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c -# SUBTRACT CPP /WX -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dxguid.lib ddraw.lib dinput.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "Landscape - Win32 Release" -# Name "Landscape - Win32 Debug" -# Begin Source File - -SOURCE=.\Animation.BMP -# End Source File -# Begin Source File - -SOURCE=.\Bau.BMP -# End Source File -# Begin Source File - -SOURCE=.\Baum.bmp -# End Source File -# Begin Source File - -SOURCE=.\Buttons.bmp -# End Source File -# Begin Source File - -SOURCE=.\credits.bmp -# End Source File -# Begin Source File - -SOURCE=.\Cursor.BMP -# End Source File -# Begin Source File - -SOURCE=.\ddutil.cpp -# End Source File -# Begin Source File - -SOURCE=.\ddutil.h -# End Source File -# Begin Source File - -SOURCE=.\GuyAni.BMP -# End Source File -# Begin Source File - -SOURCE=.\icon1.ico -# End Source File -# Begin Source File - -SOURCE=.\Inventar.bmp -# End Source File -# Begin Source File - -SOURCE=.\Landscape.cpp -# End Source File -# Begin Source File - -SOURCE=.\Landscape.ico -# End Source File -# Begin Source File - -SOURCE=.\Landscape.rc - -!IF "$(CFG)" == "Landscape - Win32 Release" - -!ELSEIF "$(CFG)" == "Landscape - Win32 Debug" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\Logo.bmp -# End Source File -# Begin Source File - -SOURCE=.\Misc.BMP -# End Source File -# Begin Source File - -SOURCE=.\Panel.BMP -# End Source File -# Begin Source File - -SOURCE=.\Papier.BMP -# End Source File -# Begin Source File - -SOURCE=.\Schrift.BMP -# End Source File -# Begin Source File - -SOURCE=.\Schrift1.BMP -# End Source File -# Begin Source File - -SOURCE=.\Schrift2.bmp -# End Source File -# Begin Source File - -SOURCE=.\Sonne.BMP -# End Source File -# Begin Source File - -SOURCE=.\Textfeld.bmp -# End Source File -# End Target -# End Project diff --git a/Landscape.dsp b/Landscape.dsp deleted file mode 100644 index e4f631c..0000000 --- a/Landscape.dsp +++ /dev/null @@ -1,186 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Landscape" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** NICHT BEARBEITEN ** - -# TARGTYPE "Win32 (x86) Application" 0x0101 - -CFG=Landscape - Win32 Debug -!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE -!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl -!MESSAGE -!MESSAGE NMAKE /f "Landscape.mak". -!MESSAGE -!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben -!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: -!MESSAGE -!MESSAGE NMAKE /f "Landscape.mak" CFG="Landscape - Win32 Debug" -!MESSAGE -!MESSAGE Für die Konfiguration stehen zur Auswahl: -!MESSAGE -!MESSAGE "Landscape - Win32 Release" (basierend auf "Win32 (x86) Application") -!MESSAGE "Landscape - Win32 Debug" (basierend auf "Win32 (x86) Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Landscape - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fr /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib dxguid.lib ddraw.lib dinput.lib dsound.lib winmm.lib /nologo /subsystem:windows /machine:I386 /out:"Release/Schiffbruch.exe" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "Landscape - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c -# SUBTRACT CPP /WX -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dxguid.lib ddraw.lib dinput.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "Landscape - Win32 Release" -# Name "Landscape - Win32 Debug" -# Begin Source File - -SOURCE=.\Animation.BMP -# End Source File -# Begin Source File - -SOURCE=.\Bau.BMP -# End Source File -# Begin Source File - -SOURCE=.\Baum.bmp -# End Source File -# Begin Source File - -SOURCE=.\Buttons.bmp -# End Source File -# Begin Source File - -SOURCE=.\credits.bmp -# End Source File -# Begin Source File - -SOURCE=.\Cursor.BMP -# End Source File -# Begin Source File - -SOURCE=.\ddutil.cpp -# End Source File -# Begin Source File - -SOURCE=.\ddutil.h -# End Source File -# Begin Source File - -SOURCE=.\GuyAni.BMP -# End Source File -# Begin Source File - -SOURCE=.\icon1.ico -# End Source File -# Begin Source File - -SOURCE=.\Inventar.bmp -# End Source File -# Begin Source File - -SOURCE=.\Landscape.cpp -# End Source File -# Begin Source File - -SOURCE=.\Landscape.ico -# End Source File -# Begin Source File - -SOURCE=.\Landscape.rc -# End Source File -# Begin Source File - -SOURCE=.\Logo.bmp -# End Source File -# Begin Source File - -SOURCE=.\Misc.BMP -# End Source File -# Begin Source File - -SOURCE=.\Panel.BMP -# End Source File -# Begin Source File - -SOURCE=.\Papier.BMP -# End Source File -# Begin Source File - -SOURCE=.\Schrift.BMP -# End Source File -# Begin Source File - -SOURCE=.\Schrift1.BMP -# End Source File -# Begin Source File - -SOURCE=.\Schrift2.bmp -# End Source File -# Begin Source File - -SOURCE=.\Sonne.BMP -# End Source File -# Begin Source File - -SOURCE=.\Textfeld.bmp -# End Source File -# End Target -# End Project diff --git a/Landscape.dsw b/Landscape.dsw deleted file mode 100644 index f5c185c..0000000 --- a/Landscape.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! - -############################################################################### - -Project: "Landscape"=".\Landscape.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/Landscape.opt b/Landscape.opt deleted file mode 100644 index 9b97efee4d19b1753668dbb704597da456c14afd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48640 zcmeHQYit}>6+Y|7X6>fMZcOVIQ-&q9PTlyCgv5m4Iq@eYL*o92EbwoXRl{{F1aJ+{hYk^0AM}bcOb-*Wq$AC`(9B(J2ANUNg8u%>mIPe5e53B*61UT+fkZXZP zpb2OOT7Y%HdSC;<@iszk0$PF31Dk;_09$}B0&M`tYlqwlYy&!gPM{0e4m<-G-;@L3^GZ_ zP{PH#htOhFT}l=>t!m<>-yXdDOApsyMeRfGNjgj^N>G4;q@yJJP>ukgt4IZ;MkPiY z<+jV^C=k^SGRnz~6>b}HkJC})uR|-|RZ)qD?;Y+J7n}b|&c@2Wi$WAZUD*n^;vPW$ ze7|zu>=u*8LmbJ<--GMNWv_?^Vxd$pkkFslzIh;&Ser=3hmwKeVSS)mg=DnGP%6P^ zP1A?*DSFa7MYU(9X%2dW_afCpFH1~O6AIP}y$X7xx0IS8>wqF_;@5ktsRz0j zy@&@r&UsjKc6!xDeKKxs%0JGXX* zPC{~6)y9jI{=>8pmY77EJpJj9UsjK8ME_cE3aK>7kX> zd>VCs1?eCjw_}daj>nxH(7P@Fe#m}HKLi=F^eAM)(nleWTly);F-w0P@~owE+UFel z6^vk94lcvo>1htOohr9|pn!6{orvM)c6{do`qzw0Tz)^5n|`i86Wd*zys?THXB&*+ z$c}g_g=>gIIQ1p9XSo2 zQ_Lbw-yKSi(_}YaJ-J@ow{dui4jApUsvP|v;BQ z_-c#*YP{?jHScpicK~{2M^X=@Be5{_;bDxpS~QY|9*i2pdHYG|dv_n$({-X{;5F#U zMjrY0?jDEUGO!=k9_XEf-k2Uv__fNeOVFcHSRWUI3u<4CKw2*|<`pZ+n1`TT=e~u0 z^~@Aq`t}rU?e03^r8OR&hj9PSVvW-&hZzxXC?z?`KH z7;Sxv+9B(K<}Gg-=W74hSI?m6o zzyJHyqq+UA4|bacoUZ4ut8DMJGc#)HOyTuyTko3Pcq-0!MrC&-@%6>qjSG5m?t)?G z{uAarOwGB(c_r^extCh*p|7j zm~#35arJ2K`D*UvCOQ7x8~OS2@yEena6eZ}8Th>0ad#@OyfOWyOdac?b3XHxQ{A(< zVGG6Q_FM*Lh3&=Hne$+mz;WfgbiwX7YLCs34~?0hCAL5^|HK>-JL~Zm&m3>t@z1|H zLv2?4BUb$NW^{wIV%1CU*zsF0=l4tBwc(#ZgyN~zQ^a~KA-V*QBL?j(-Lm>Rd#Yp;s2JdoeKXa{GafD!v8t@UpGCE zOA-Fh%~bjSOR{1L|L1D5tN`Kvg#Y6?qws%Ow}p7b0?W<u5tVoVw#R{*BUdZ{e{&)o<@q0S#7K+c| zpXMLy1?-(zwz!j?$J+XUk!K2PzynwdzL>S&oJ<{7nwmMAzkF;V*T4~S@?Yp2xA4ka z$p3SW{5vR$`lj&r9IURx;u_v?FUtN!*WY+O+^T;mR^(RL52`D6M+2#p9xLC{wYRse z+CHvj9WNZ}c2;Gto=U|>l0lWcnT+{clgTPKT7jSyomin2QR&rhO%CdjbZSsf>XBer z^V@0qH)}0gPcr_ZemGsPuW^(xD*>}8i%#a2qMIjW+ga9s%ldEb5{lvRRDb05EF|l{ zO$*8TZ`D#vDg3YSzuXdTrLW=h=9}YjTD-Pf)_-T#A+oL53I8knuh|j`|K^S3^8Tl* z!SZZn#T5S6)nr)#!vETj|FZr&t7V8sEFczGP8K+H-Fy~!#3swMwOU^!wtk(~t4Dby z^!;{-x$C2kIt(f;n07zMJ%slKyk5>v46Oar(AeG&+qu~Jcj|*9LvHcCzM6gew)NsU z=057!A4m@A>7Cd|%RS>lnQ)kuU};Fl&XzUQ(Wxi&SV)frk9EXj=|Ci=C#@*uzM9Tm zeT#@#F$nXeQ=!JN2m9qZQrsSi>RE}INt(al!eswP+5eH- z|AhbJ79sqf?ElDZK=yykerG}Uf1JN>aN934dvq!6yKB6Ym96l9h3&6G@7i^c{U1s8 ze^jkZq*y>KaIafH@qhFGXP@Ur!v6{XC*OZr=suS9-%H1JeteE-GlA@YCS{^u$DU%sv8J0kp_y#L2@ z5!wH7zPm$?i3OIA1=RPSZ{9TCr0a;LwnszzqVd7ZqF^?L@nvXv|Ic{mP~QKO??2~t z5W@d09j~H{FZ`cr2`8_lY~v<{|696tD*T`9|0wH!W&N*PU+g@d$7#v>U#EGp^gLTx zp~C-VnaR~7{GafD!vDG69ugoHST+{u#GZqLG(to8(F4q2oo!DhE zi2R3@-A9t{M;Be9{DZ11{k@A_=-231xbUw8^@ujaN^le?|wmi6De`egk#(dwkR zhgJpJ&kpF_mVZBFzoj373|V>So76=Wtqlo*F&bubl9I!v6{XC;Xr44+_aVPD}VdS99gr%8Duc cpR38T0)+n){*UJ@vi>{kwh)h4VA)yVzdT6MI{*Lx diff --git a/Landscape.plg b/Landscape.plg deleted file mode 100644 index 02ad93d..0000000 --- a/Landscape.plg +++ /dev/null @@ -1,38 +0,0 @@ - - -
-

Erstellungsprotokoll

-

---------------------Konfiguration: Landscape - Win32 Release-------------------- -

-

Befehlszeilen

-Creating command line "rc.exe /l 0x407 /fo"Release/Landscape.res" /d "NDEBUG" "F:\dp-programme\Landscape\Landscape.rc"" -Erstellen der temporären Datei "F:\DOKUME~1\Roger.DP\LOKALE~1\Temp\RSP30.tmp" mit Inhalten -[ -/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fr"Release/" /Fp"Release/Landscape.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c -"F:\dp-programme\Landscape\ddutil.cpp" -"F:\dp-programme\Landscape\Landscape.cpp" -] -Creating command line "cl.exe @F:\DOKUME~1\Roger.DP\LOKALE~1\Temp\RSP30.tmp" -Erstellen der temporären Datei "F:\DOKUME~1\Roger.DP\LOKALE~1\Temp\RSP31.tmp" mit Inhalten -[ -kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib dxguid.lib ddraw.lib dinput.lib dsound.lib winmm.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/Schiffbruch.pdb" /machine:I386 /out:"Release/Schiffbruch.exe" -".\Release\ddutil.obj" -".\Release\Landscape.obj" -".\Release\Landscape.res" -] -Erstellen der Befehlzeile "link.exe @F:\DOKUME~1\Roger.DP\LOKALE~1\Temp\RSP31.tmp" -

Ausgabefenster

-Ressourcen werden kompiliert... -Kompilierung läuft... -ddutil.cpp -Landscape.cpp -Linker-Vorgang läuft... - - - -

Ergebnisse

-Schiffbruch.exe - 0 Fehler, 0 Warnung(en) -
- - diff --git a/Landscape.sln b/Landscape.sln deleted file mode 100644 index 62e675c..0000000 --- a/Landscape.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Landscape", "Landscape.vcxproj", "{B47831E3-7517-6403-F657-B2601A03C3F1}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B47831E3-7517-6403-F657-B2601A03C3F1}.Debug|Win32.ActiveCfg = Debug|Win32 - {B47831E3-7517-6403-F657-B2601A03C3F1}.Debug|Win32.Build.0 = Debug|Win32 - {B47831E3-7517-6403-F657-B2601A03C3F1}.Release|Win32.ActiveCfg = Release|Win32 - {B47831E3-7517-6403-F657-B2601A03C3F1}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Animation.BMP b/bin/images/Animation.BMP similarity index 100% rename from Animation.BMP rename to bin/images/Animation.BMP diff --git a/Bau.bmp b/bin/images/Bau.bmp similarity index 100% rename from Bau.bmp rename to bin/images/Bau.bmp diff --git a/Baum.bmp b/bin/images/Baum.bmp similarity index 100% rename from Baum.bmp rename to bin/images/Baum.bmp diff --git a/Buttons.bmp b/bin/images/Buttons.bmp similarity index 100% rename from Buttons.bmp rename to bin/images/Buttons.bmp diff --git a/Credits.bmp b/bin/images/Credits.bmp similarity index 100% rename from Credits.bmp rename to bin/images/Credits.bmp diff --git a/Cursor.BMP b/bin/images/Cursor.BMP similarity index 100% rename from Cursor.BMP rename to bin/images/Cursor.BMP diff --git a/GuyAni.bmp b/bin/images/GuyAni.bmp similarity index 100% rename from GuyAni.bmp rename to bin/images/GuyAni.bmp diff --git a/Inventar.bmp b/bin/images/Inventar.bmp similarity index 100% rename from Inventar.bmp rename to bin/images/Inventar.bmp diff --git a/Landscape.ico b/bin/images/Landscape.ico similarity index 100% rename from Landscape.ico rename to bin/images/Landscape.ico diff --git a/Logo.bmp b/bin/images/Logo.bmp similarity index 100% rename from Logo.bmp rename to bin/images/Logo.bmp diff --git a/Misc.BMP b/bin/images/Misc.BMP similarity index 100% rename from Misc.BMP rename to bin/images/Misc.BMP diff --git a/Panel.bmp b/bin/images/Panel.bmp similarity index 100% rename from Panel.bmp rename to bin/images/Panel.bmp diff --git a/Papier.bmp b/bin/images/Papier.bmp similarity index 100% rename from Papier.bmp rename to bin/images/Papier.bmp diff --git a/Schrift1.BMP b/bin/images/Schrift1.BMP similarity index 100% rename from Schrift1.BMP rename to bin/images/Schrift1.BMP diff --git a/Schrift2.bmp b/bin/images/Schrift2.bmp similarity index 100% rename from Schrift2.bmp rename to bin/images/Schrift2.bmp diff --git a/Textfeld.bmp b/bin/images/Textfeld.bmp similarity index 100% rename from Textfeld.bmp rename to bin/images/Textfeld.bmp diff --git a/sounds/abspann.wav b/bin/sounds/abspann.wav similarity index 100% rename from sounds/abspann.wav rename to bin/sounds/abspann.wav diff --git a/sounds/angel.wav b/bin/sounds/angel.wav similarity index 100% rename from sounds/angel.wav rename to bin/sounds/angel.wav diff --git a/sounds/baumfaellt.wav b/bin/sounds/baumfaellt.wav similarity index 100% rename from sounds/baumfaellt.wav rename to bin/sounds/baumfaellt.wav diff --git a/sounds/brandung.wav b/bin/sounds/brandung.wav similarity index 100% rename from sounds/brandung.wav rename to bin/sounds/brandung.wav diff --git a/sounds/crash.wav b/bin/sounds/crash.wav similarity index 100% rename from sounds/crash.wav rename to bin/sounds/crash.wav diff --git a/sounds/erfindung.wav b/bin/sounds/erfindung.wav similarity index 100% rename from sounds/erfindung.wav rename to bin/sounds/erfindung.wav diff --git a/sounds/faellen.wav b/bin/sounds/faellen.wav similarity index 100% rename from sounds/faellen.wav rename to bin/sounds/faellen.wav diff --git a/sounds/feuer.wav b/bin/sounds/feuer.wav similarity index 100% rename from sounds/feuer.wav rename to bin/sounds/feuer.wav diff --git a/sounds/fluss.wav b/bin/sounds/fluss.wav similarity index 100% rename from sounds/fluss.wav rename to bin/sounds/fluss.wav diff --git a/sounds/hammer.wav b/bin/sounds/hammer.wav similarity index 100% rename from sounds/hammer.wav rename to bin/sounds/hammer.wav diff --git a/sounds/klick.wav b/bin/sounds/klick.wav similarity index 100% rename from sounds/klick.wav rename to bin/sounds/klick.wav diff --git a/sounds/klick2.wav b/bin/sounds/klick2.wav similarity index 100% rename from sounds/klick2.wav rename to bin/sounds/klick2.wav diff --git a/sounds/knistern.wav b/bin/sounds/knistern.wav similarity index 100% rename from sounds/knistern.wav rename to bin/sounds/knistern.wav diff --git a/sounds/logo.wav b/bin/sounds/logo.wav similarity index 100% rename from sounds/logo.wav rename to bin/sounds/logo.wav diff --git a/sounds/platsch.wav b/bin/sounds/platsch.wav similarity index 100% rename from sounds/platsch.wav rename to bin/sounds/platsch.wav diff --git a/sounds/schaufeln.wav b/bin/sounds/schaufeln.wav similarity index 100% rename from sounds/schaufeln.wav rename to bin/sounds/schaufeln.wav diff --git a/sounds/schlagen.wav b/bin/sounds/schlagen.wav similarity index 100% rename from sounds/schlagen.wav rename to bin/sounds/schlagen.wav diff --git a/sounds/schleuder.wav b/bin/sounds/schleuder.wav similarity index 100% rename from sounds/schleuder.wav rename to bin/sounds/schleuder.wav diff --git a/sounds/schnarchen.wav b/bin/sounds/schnarchen.wav similarity index 100% rename from sounds/schnarchen.wav rename to bin/sounds/schnarchen.wav diff --git a/sounds/schwimmen.wav b/bin/sounds/schwimmen.wav similarity index 100% rename from sounds/schwimmen.wav rename to bin/sounds/schwimmen.wav diff --git a/sounds/sturm.wav b/bin/sounds/sturm.wav similarity index 100% rename from sounds/sturm.wav rename to bin/sounds/sturm.wav diff --git a/sounds/trinken.wav b/bin/sounds/trinken.wav similarity index 100% rename from sounds/trinken.wav rename to bin/sounds/trinken.wav diff --git a/sounds/wald.wav b/bin/sounds/wald.wav similarity index 100% rename from sounds/wald.wav rename to bin/sounds/wald.wav diff --git a/sounds/wolf.wav b/bin/sounds/wolf.wav similarity index 100% rename from sounds/wolf.wav rename to bin/sounds/wolf.wav diff --git a/Landscape.vcxproj b/build/Landscape.vcxproj similarity index 74% rename from Landscape.vcxproj rename to build/Landscape.vcxproj index 3d49195..99b5af8 100644 --- a/Landscape.vcxproj +++ b/build/Landscape.vcxproj @@ -10,6 +10,58 @@ Win32
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -42,11 +94,13 @@ .\Debug\ .\Debug\ true + Schiffbruch .\Release\ .\Release\ false + Schiffbruch @@ -86,7 +140,8 @@ true true Windows - .\Debug\Landscape.exe + + dsound.lib;winmm.lib;dxguid.lib;ddraw.lib;dinput.lib;xinput.lib;dinput8.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86;C:\Users\Lukas\Downloads\S; false @@ -127,66 +182,12 @@ true Windows - Release/Schiffbruch.exe + + dsound.lib;winmm.lib;dxguid.lib;ddraw.lib;dinput.lib;xinput.lib;dinput8.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Landscape.vcxproj.filters b/build/Landscape.vcxproj.filters similarity index 50% rename from Landscape.vcxproj.filters rename to build/Landscape.vcxproj.filters index db7b1b0..6438137 100644 --- a/Landscape.vcxproj.filters +++ b/build/Landscape.vcxproj.filters @@ -1,162 +1,153 @@  - + + {ead7ad50-8ce5-406b-abcc-64bdf6bffae1} + + + {adb6c318-c4a6-44f1-8b39-11c04d586e18} + + + {7d813b62-df82-445b-96c3-7b28451702d4} + + + + Source - + Source - + Source - + Source - + Source - + Source - + Source - + Source - + Source - + Source - + Source - + Source - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - + Header - - Resource - - - Resource - - + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - + + Resource - - - Resource - - - - - {ead7ad50-8ce5-406b-abcc-64bdf6bffae1} - - - {adb6c318-c4a6-44f1-8b39-11c04d586e18} - - - {7d813b62-df82-445b-96c3-7b28451702d4} - + - + Resource diff --git a/Action.cpp b/src/Action.cpp similarity index 100% rename from Action.cpp rename to src/Action.cpp diff --git a/Action.hpp b/src/Action.hpp similarity index 100% rename from Action.hpp rename to src/Action.hpp diff --git a/Application.cpp b/src/Application.cpp similarity index 100% rename from Application.cpp rename to src/Application.cpp diff --git a/Application.hpp b/src/Application.hpp similarity index 100% rename from Application.hpp rename to src/Application.hpp diff --git a/Direct.cpp b/src/Direct.cpp similarity index 100% rename from Direct.cpp rename to src/Direct.cpp diff --git a/Direct.hpp b/src/Direct.hpp similarity index 100% rename from Direct.hpp rename to src/Direct.hpp diff --git a/Game.cpp b/src/Game.cpp similarity index 100% rename from Game.cpp rename to src/Game.cpp diff --git a/Game.hpp b/src/Game.hpp similarity index 100% rename from Game.hpp rename to src/Game.hpp diff --git a/Landscape.rc b/src/Landscape.rc similarity index 91% rename from Landscape.rc rename to src/Landscape.rc index b75c392..4d294ea 100644 --- a/Landscape.rc +++ b/src/Landscape.rc @@ -1,323 +1,323 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -//#include "afxres.h" -#include - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Deutsch (Deutschland) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) -#ifdef _WIN32 -LANGUAGE LANG_GERMAN, SUBLANG_GERMAN -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -MISC BITMAP DISCARDABLE "Misc.BMP" -PANEL BITMAP DISCARDABLE "Panel.BMP" -GUYANI BITMAP DISCARDABLE "GuyAni.BMP" -ANIMATION BITMAP DISCARDABLE "Animation.BMP" -BAUM BITMAP DISCARDABLE "Baum.bmp" -CURSORBMP BITMAP DISCARDABLE "Cursor.BMP" -BUTTONS BITMAP DISCARDABLE "Buttons.bmp" -SCHRIFT2 BITMAP DISCARDABLE "Schrift2.bmp" -SCHRIFT1 BITMAP DISCARDABLE "Schrift1.BMP" -TEXTFELD BITMAP DISCARDABLE "Textfeld.bmp" -PAPIER BITMAP DISCARDABLE "Papier.BMP" -INVENTARBMP BITMAP DISCARDABLE "Inventar.bmp" -BAU BITMAP DISCARDABLE "Bau.BMP" -CREDITS BITMAP DISCARDABLE "credits.bmp" -LOGO BITMAP DISCARDABLE "Logo.bmp" - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,3,0,0 - PRODUCTVERSION 1,3,0,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040704b0" - BEGIN - VALUE "Comments", "\0" - VALUE "CompanyName", "dP-Software\0" - VALUE "FileDescription", "Schiffbruch\0" - VALUE "FileVersion", "1, 3, 0, 0\0" - VALUE "InternalName", "Landscape\0" - VALUE "LegalCopyright", "Copyright © 2002 Dirk Plate\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", "Schiffbruch.exe\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Schiffbruch\0" - VALUE "ProductVersion", "1.3\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x407, 1200 - END -END - -#endif // !_MAC - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_MAIN_ICON ICON DISCARDABLE "Landscape.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE DISCARDABLE -BEGIN - TESTTEXT1 "Dies ist ein Test. /a Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. /z /z Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test." - GITTERAN "Gitternetz anschalten" - GITTERAUS "Gitternetz ausschalten" - KEINEFUNKTION "Diese Funktion ist leider noch nicht integriert. Warten Sie bitte eine spaetere Version von Landscape ab. Dann wird Ihnen der gesamte Funktionsumfang zur Verfuegung stehen." - MEAKTIONAUF "Oeffnet das Aktionsmenue" - MEAKTIONZU "Schliesst das Aktionsmenue" - BEGINNSUCHEN "Durchsuche die Umgebung" - BEGINNFAELLEN "Baum faellen" - SOSPAET "Schon so spaet?" - BEGINNESSEN "Essen und trinken" - MEINVENTARAUF "Oeffnet das Inventar" - MEINVENTARZU "Schliesst das Inventar" - FREI "." - AST "Ast" - STEIN "Stein" -END - -STRINGTABLE DISCARDABLE -BEGIN - ROHASTGEFUNDEN "Nach ewigem Suchen in der prallen Sonne habe ich einen Ast gefunden. Genau das, was mir noch gefehlt hat. Die Suche hat sich gelohnt." - ROHASTZUVIEL "Nachdem ich mich muehsam durch die Gegend gewuehlt habe, finde ich einen wunderschoenen Ast. Allerdings schleppe ich schon so viele Aeste mit mir herum, dass ich ihn wieder wegwerfe." - ROHSTEINGEFUNDEN "In der tropischen Hitze habe ich mir in den letzen Minuten die naehere Umgebung genauer angeschaut. Besonders aufgefallen sind mir diese wunderschoenen Steine. Diese drei kann ich gut gebrauchen und packe sie ein." - ROHSTEINZUVIEL "Jaa, ich habe etwas gefunden!! Einen Stein!! Mir reichen allerdings die, die ich schon in der Tasche habe, und werfe ihn deshalb bis ins Meer (Hoffentlich habe ich nicht das mich rettende Schiff getroffen!)." - NICHTSGEFUNDEN "Selbst nachdem ich die Gegend sehr genau unter die Lupe genommen habe, habe ich absolut nichts gefunden. " - AXT "Axt" - KEINESSENTRINKEN "Hier gibt es weder etwas zu essen noch zu trinken." - BAUEAXT "Mit viel Geschick habe ich einen Stein mit einem Ast verbunden und eine Axt erhalten. Damit bin ich nun in der Lage, Holz zu bearbeiten, zum Beispiel Baeume faellen. /z Ich glaube, ich koennte mir noch etwas aus einem Ast und einem Stein bauen." - STEINPLUSASTNICHTS "Leider gibt es nichts mehr, was ich mit einem Stein und einem Stock bauen kann." - NICHTBASTELN "Aus diesen beiden Sachen kann ich mir nichts Sinnvolles bauen. Vielleicht sollte ich zwei andere Dinge probieren?" - ROHBLATTGEFUNDEN "Mmh, das ist aber ein grosses Blatt. Das kann ich sicher noch gebrauchen, ich werde es vorsichtshalber mitnehmen. Wer weiss, ob ich noch einmal so etwas Besonderes finde." - ROHBLATTZUVIEL "Schon wieder so ein seltenes Blatt. Sie scheinen doch relativ haeufig zu sein, deshalb werde ich es nicht mitnehmen." - BLATT "Blatt" - ROHSTAMMZUVIEL "Noch mehr Baumstaemme brauche ich im Moment nicht. " - MEBAUENAUF "Oeffnet das Baumenue" - MEBAUENZU "Schliesst das Baumenue" -END - -STRINGTABLE DISCARDABLE -BEGIN - BEGINNFELD "Feld anlegen" - GEGENDNICHT "Diese Gegend ist leider nicht geeignet." - BAUEEGGE "Nachdem ich einen laenglichen Stein an einen Ast gebunden habe, sieht das ganze wie eine Egge aus. Damit sollte es mir moeglich sein, ein Feld anzulegen, so dass ich nicht mehr nur auf diese laestigen Buesche angewiesen bin." - EGGE "Egge" - TAGENDE1 "Tag /a ist nun zu Ende. Leider habe ich es nicht mehr bis zu einer angenehmen Schlafstelle geschafft, deshalb muss ich heute nacht unter freien Himmel schlafen. Die wilden Tiere lassen mir keine Ruhe, deshalb sinkt meine Gesundheit auf /b %. Meine Chance gerettet zu werden betraegt /c %." - GERETTET "Endlich ein Schiff!! Dank meiner intensiven Bemuehungen wurde ich entdeckt und nun ankert das Schiff vor der Insel. Soll ich diese trostlose Insel verlassen? /d " - BEGINNZELT "Zelt bauen" - ROHSTOFFNICHT "Ich habe leider nicht genug Rohstoffe, um den Bau fortzusetzen." - KEINBAUM "Hier steht leider kein Baum." - WEITER "Vorgang fortsetzen" - STOP "Vorgang unterbrechen" - TAGENDE2 "Tag /a ist nun zu Ende. Zum Glueck bin ich rechtzeitig zu meinem Zelt gekommen, so lassen mich wenigstens die Fledermaeuse in Ruhe. Allerdings beissen mich wilde Tiere in meine Fuesse, deshalb sinkt meine Gesundheit auf /b %. Meine Chance gerettet zu werden betraegt /c %." - BEGINNSCHLAFEN "1 Stunde schlafen" - WIESETEXT "Wiese" - MEERTEXT "Meer" - STRANDTEXT "Strand" -END - -STRINGTABLE DISCARDABLE -BEGIN - TREIBSANDTEXT "Treibsand" - FEUCHTEWIESETEXT "feuchte Wiese" - BAUMTEXT "Baum" - FELDTEXT "Feld" - ZELTTEXT "Zelt" - BUSCHTEXT "Busch" - MIT "mit" - LIANE "Liane " - ROHLIANEGEFUNDEN "Mit sehr viel Muehe habe ich es geschafft, eine Liane vom Baum abzureissen. Mit Lianen kann man sehr viel anstellen, deshalb werde ich sie die naechste Zeit mit mir herumschleppen." - ROHLIANEZUVIEL "So nützlich sind Lianen dann doch wieder nicht, dass ich so viele davon mit mir herumtragen muss." - ANGEL "Angel" - BAUEANGEL "Dieser duenne, biegsame Ast und diese Liane lassen sich vorzueglich zu einer Angel verbinden. Endlich muss ich nicht mehr vegetarisch leben und kann mir ein paar fette Forellen fischen." - BEGINNANGELN "Angeln" - KEINWASSER "Wo soll ich denn hier angeln?" - BOOTTEXT "Einbaum" - BEGINNBOOT "Einbaum bauen" -END - -STRINGTABLE DISCARDABLE -BEGIN - STAMM "Baumstamm" - BEGINNABLEGEN "An- und Ablegen" - TAGENDE3 "Tag /a ist nun zu Ende. Es ist stockdunkel, ich treibe ab und werde wohl sterben. Das wird mir eine Lehre sein. " - FLUSSTEXT "Fluss" - BEGINNROHR "Bewaesserungsanlage bauen" - ROHRTEXT "Bewaesserungsrohr" - BEGINNDESTROY "Bauwerk abreissen" - KEINBAUWERK "Hier ist leider kein Bauwerk, das ich abreissen kann." - BEGINNSOS "S.O.S. schreiben" - SOSTEXT "S.O.S." - BAUMZUGROSS "Der ist mir eine Nummer zu gross." - BEGINNHAUS1 "Leiter fuer Baumhaus bauen" - HAUS1TEXT "Baum und Leiter" - HAMMER "Hammer" - BEGINNHAUS2 "Plattform fuer Baumhaus bauen" - HAUS2TEXT "Baum und Plattform" -END - -STRINGTABLE DISCARDABLE -BEGIN - HAUS3TEXT "Baum und Baumhaus" - BEGINNHAUS3 "Baumhaus bauen" - TAGENDE4 "Tag /a ist nun zu Ende. Bin ich froh, dass ich mir dieses schoene Baumhaus gebaut habe. So lassen mich die wilden Tiere in Frieden. Ich schlafe ausgezeichnet und meine Gesundheit steigt auf /b %. Meine Chance gerettet zu werden betraegt /c %." - BAUMZUKLEIN "Dieser Baum ist eine Nummer zu klein." - NICHTOHNELEITER "Ohne Leiter kann ich keine Plattform bauen." - NICHTOHNEPLATTFORM "Das Baumhaus kann ich nur auf einer Plattform bauen." - CHANCETEXT "Meine Chance heute gerettet zu werden" - BAUMGROSSTEXT "grossem Baum" - FEUERSTELLETEXT "Feuerstelle" - BEGINNFEUERSTELLE "Holz fuer Feuerstelle aufstapeln" - FEUERTEXT "Signalfeuer" - BEGINNANZUENDEN "Feuerstelle anzuenden" - KEINEFEUERST "Ich kann nur Feuerstellen anzuenden" - BEGINNAUSSCHAU "Nach Rettung Ausschau halten" - FERNROHR "Fernrohr" - BEGINNSCHATZKARTE "Schatzkarte anschauen" -END - -STRINGTABLE DISCARDABLE -BEGIN - SCHAUFEL "Schaufel" - STREICHHOLZ "Streichhoelzer" - BEGINNSCHATZ "Nach Schatz graben" - SCHATZGEFUNDEN "Hurra!! Ich habe einen alten Piratenschatz gefunden. Mit Hoffnung auf einen grossartigen Schatz oeffnete ich die alte modrige Kiste und entdeckte ... nur eine Streichholzschachtel. Was solls, ich kann mir hier eh nichts kaufen." - KEINSCHATZ "Obwohl ich die ganze Gegend hier umgegraben habe, habe ich keinen Schatz gefunden. Vielleicht sollte ich mir erst eine Schatzkarte anschauen." - WRACKTEXT "Schiffswrack" - FERNROHRGEFUNDEN "Ich habe das gesamte Wrack abgesucht.Als ich in die Kapitaenskajute getaucht bin, habe ich mein altes Fernrohr gefunden. Damit kann ich nach Schiffen Ausschau halten und meine Chance, gerettet zu werden, steigt. /z Auf dem Weg nach draussen entdeckte ich noch den Hammer und einige Naegel vom Schiffszimmermann. Damit kann ich mir eine stabilere Behausung bauen." - INTROTEXT "Jetzt habe ich den Schlamassel: Gestrandet auf einer einsamen Insel mitten im Pazifik. Ich sollte mich schnellstens nach Suesswasser und Nahrung umsehen. Vielleicht kann ich mir auch ein paar Werkzeuge bauen." - NICHTSGEFUNDEN2 "Ich habe den ganzen Grund abgesucht, aber nichts von Interesse gefunden." - KARTE "Schatzkarte" - KARTEGEFUNDEN "Ich tauchte durch das uralte Piratenschiff, allerdings ohne etwas zu finden, bis ich ploetzlich das Skelett des Kapitains fand. In der Hand hielt er noch eine erstaunlich gut erhaltene Schatzkarte. Nachdem ich sie an mich genommen hatte, nahm ich mir noch eine Schaufel mit. Jetzt kann ich mir die Zeit mit einer Schatzsuche vertreiben. " - ANIMATIONAUS "Wasseranimationen ausschalten" - ANIMATIONAN "Wasseranimationen anschalten" - ASTPLUSLIANENICHTS "Mehr kann ich mir auch mit einer Liane und einem Ast nicht bauen." - SCHLEUDER "Steinschleuder" - STEINPLUSLIANENICHTS "Mir faellt nichts mehr ein, was ich mir aus einer Liane und einem Stein bauen könnte." -END - -STRINGTABLE DISCARDABLE -BEGIN - BAUESCHLEUDER "Ich knotete eine Schlaufe in die Liane und jetzt kann man sie als Steinschleuder missbrauchen. Einfach noch den Stein in die Schlaufe gelegt und ich kann auf Jagd gehen. Da es am Tag auf dieser Insel nur Voegel zu geben scheint, sollte ich mich darauf beschraenken, diese Tiere von den Baeumen zu schiessen." - KEINVOGEL "Hier sind keine Voegel." - BEGINNSCHLEUDER "Auf Vogeljagd gehen" - NICHTAUFWASSERSCHLAFEN "In diesem kleinen Boot ist es zum Schlafen zu gefaehrlich." - WELLENZUHOCH "Die Wellen sind zu hoch, um etwas zu sehen." - GRABENBEDINGUNGEN "Ich kann nur auf flachen und freien Gegenden nach einem Schatz graben." - FELDBEDINGUNGEN "Felder kann ich nur auf flachen, feuchten und freien Wiesen anlegen." - ZELTBEDINGUNGEN "Zelte kann ich nur auf einer flachen und freien Gegend bauen." - BOOTBEDINGUNGEN "Boote kann ich nur auf einem freien Strandabschnitt bauen." - ROHRBEDINGUNGEN "Rohre kann ich nur auf flachen und freien Gegenden bauen." - SOSBEDINGUNGEN "SOS kann ich nur auf flachen und freien Gegenden schreiben." - FEUERSTELLENBEDINGUNGEN "Feuerstellen kann ich nur in flachen und freien Landschaften anlegen." - BOOTHILFE "Ich habe nun mein erstes Boot gebaut. (Zum An- und Ablegen auf den 'Anker-Knopf' klicken.) Anlegen kann ich nur, wenn auf dem Strand nichts im Weg ist. Auch sollte ich immer die Zeit im Auge haben, da ich eine Nacht auf hoher See nicht ueberleben wuerde." - FELDHILFE "Mein erstes Feld ist fertig. Das Getreide wird von ganz allein wachsen und, wenn es schoen gelb ist, kann ich es essen. " - FEUERSTELLEHILFE "Jetzt habe ich einen grossen Haufen Holz aufgebaut. Womit kann ihn anzuenden? Das Feuer wuerde eine Weile brennen und meine Chance erhoehen, gerettet zu werden. Je hoeher die Feuerstelle liegt, desto besser." - HAUS3HILFE "Meine Baumhaus ist endlich fertig. Dort kann ich jederzeit ein Schlaefchen machen und mich erholen. Wenn ich dort uebernachten will, sollte ich puenktlich um 18.00 Uhr, wenn es dunkel wird, in unmittelbarer Naehe sein." -END - -STRINGTABLE DISCARDABLE -BEGIN - ROHRHILFE "Jetzt besitze ich eine eigene Bewaesserungsanlage. Sie wird sich mit Wasser fuellen, wenn ich sie in der Naehe eines Flusses gebaut habe. Damit werden die anliegenden Wiesen befeuchtet, so dass ich auch dort Felder anlegen kann. Diese gehen natuerlich auch wieder ein, wenn ich das Rohr abreisse." - SOSHILFE "So, jetzt muessten mich vorbeifliegende Flugzeuge bemerken und Hilfe schicken. Auf dem Strand ist das SOS besonders gut zu lesen." - ZELTHILFE "Endlich habe ich ein Dach ueber dem Kopf. Dort kann ich jederzeit ein Nickerchen machen. Wenn ich es auch in der Nacht benutzen will, muss ich mich, wenn es dunkel wird (18.00 Uhr), in der Naehe befinden." - SPIELVERLASSEN "Willst du das Spiel wirklich verlassen? /z (Der Spielstand wird automatisch gespeichert) /d " - BEENDEN "Spiel beenden" - NEUBEGINNEN "Willst du das Spiel neu starten? /d " - NEU "Spiel neu starten" - TAGNEU "Willst du den Tag noch einmal neu beginnen? /d " - TOD "Ich fuehle mich ploetzlich ganz seltsam. Ich spuere, dass ich sterbe..." - TAGENDE5 "Tag /a ist nun zu Ende. Ich fuehle mich nicht besonders gut und werde die Nacht wohl nicht ueberleben. " - TAGNEU2 "Tag neu starten" - SOUNDAN "Sound anstellen" - SOUNDAUS "Sound austellen" - KEINSOUND "Leider kein Sound" -END - -#endif // Deutsch (Deutschland) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +//#include "afxres.h" +#include + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Deutsch (Deutschland) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) +#ifdef _WIN32 +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +MISC BITMAP DISCARDABLE "../bin/images/Misc.BMP" +PANEL BITMAP DISCARDABLE "../bin/images/Panel.BMP" +GUYANI BITMAP DISCARDABLE "../bin/images/GuyAni.BMP" +ANIMATION BITMAP DISCARDABLE "../bin/images/Animation.BMP" +BAUM BITMAP DISCARDABLE "../bin/images/Baum.bmp" +CURSORBMP BITMAP DISCARDABLE "../bin/images/Cursor.BMP" +BUTTONS BITMAP DISCARDABLE "../bin/images/Buttons.bmp" +SCHRIFT2 BITMAP DISCARDABLE "../bin/images/Schrift2.bmp" +SCHRIFT1 BITMAP DISCARDABLE "../bin/images/Schrift1.BMP" +TEXTFELD BITMAP DISCARDABLE "../bin/images/Textfeld.bmp" +PAPIER BITMAP DISCARDABLE "../bin/images/Papier.BMP" +INVENTARBMP BITMAP DISCARDABLE "../bin/images/Inventar.bmp" +BAU BITMAP DISCARDABLE "../bin/images/Bau.BMP" +CREDITS BITMAP DISCARDABLE "../bin/images/credits.bmp" +LOGO BITMAP DISCARDABLE "../bin/images/Logo.bmp" + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,3,0,0 + PRODUCTVERSION 1,3,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040704b0" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "dP-Software\0" + VALUE "FileDescription", "Schiffbruch\0" + VALUE "FileVersion", "1, 3, 0, 0\0" + VALUE "InternalName", "Landscape\0" + VALUE "LegalCopyright", "Copyright © 2002 Dirk Plate\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "Schiffbruch.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "Schiffbruch\0" + VALUE "ProductVersion", "1.3\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x407, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_MAIN_ICON ICON DISCARDABLE "../bin/images/Landscape.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + TESTTEXT1 "Dies ist ein Test. /a Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. /z /z Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test. Dies ist ein Test." + GITTERAN "Gitternetz anschalten" + GITTERAUS "Gitternetz ausschalten" + KEINEFUNKTION "Diese Funktion ist leider noch nicht integriert. Warten Sie bitte eine spaetere Version von Landscape ab. Dann wird Ihnen der gesamte Funktionsumfang zur Verfuegung stehen." + MEAKTIONAUF "Oeffnet das Aktionsmenue" + MEAKTIONZU "Schliesst das Aktionsmenue" + BEGINNSUCHEN "Durchsuche die Umgebung" + BEGINNFAELLEN "Baum faellen" + SOSPAET "Schon so spaet?" + BEGINNESSEN "Essen und trinken" + MEINVENTARAUF "Oeffnet das Inventar" + MEINVENTARZU "Schliesst das Inventar" + FREI "." + AST "Ast" + STEIN "Stein" +END + +STRINGTABLE DISCARDABLE +BEGIN + ROHASTGEFUNDEN "Nach ewigem Suchen in der prallen Sonne habe ich einen Ast gefunden. Genau das, was mir noch gefehlt hat. Die Suche hat sich gelohnt." + ROHASTZUVIEL "Nachdem ich mich muehsam durch die Gegend gewuehlt habe, finde ich einen wunderschoenen Ast. Allerdings schleppe ich schon so viele Aeste mit mir herum, dass ich ihn wieder wegwerfe." + ROHSTEINGEFUNDEN "In der tropischen Hitze habe ich mir in den letzen Minuten die naehere Umgebung genauer angeschaut. Besonders aufgefallen sind mir diese wunderschoenen Steine. Diese drei kann ich gut gebrauchen und packe sie ein." + ROHSTEINZUVIEL "Jaa, ich habe etwas gefunden!! Einen Stein!! Mir reichen allerdings die, die ich schon in der Tasche habe, und werfe ihn deshalb bis ins Meer (Hoffentlich habe ich nicht das mich rettende Schiff getroffen!)." + NICHTSGEFUNDEN "Selbst nachdem ich die Gegend sehr genau unter die Lupe genommen habe, habe ich absolut nichts gefunden. " + AXT "Axt" + KEINESSENTRINKEN "Hier gibt es weder etwas zu essen noch zu trinken." + BAUEAXT "Mit viel Geschick habe ich einen Stein mit einem Ast verbunden und eine Axt erhalten. Damit bin ich nun in der Lage, Holz zu bearbeiten, zum Beispiel Baeume faellen. /z Ich glaube, ich koennte mir noch etwas aus einem Ast und einem Stein bauen." + STEINPLUSASTNICHTS "Leider gibt es nichts mehr, was ich mit einem Stein und einem Stock bauen kann." + NICHTBASTELN "Aus diesen beiden Sachen kann ich mir nichts Sinnvolles bauen. Vielleicht sollte ich zwei andere Dinge probieren?" + ROHBLATTGEFUNDEN "Mmh, das ist aber ein grosses Blatt. Das kann ich sicher noch gebrauchen, ich werde es vorsichtshalber mitnehmen. Wer weiss, ob ich noch einmal so etwas Besonderes finde." + ROHBLATTZUVIEL "Schon wieder so ein seltenes Blatt. Sie scheinen doch relativ haeufig zu sein, deshalb werde ich es nicht mitnehmen." + BLATT "Blatt" + ROHSTAMMZUVIEL "Noch mehr Baumstaemme brauche ich im Moment nicht. " + MEBAUENAUF "Oeffnet das Baumenue" + MEBAUENZU "Schliesst das Baumenue" +END + +STRINGTABLE DISCARDABLE +BEGIN + BEGINNFELD "Feld anlegen" + GEGENDNICHT "Diese Gegend ist leider nicht geeignet." + BAUEEGGE "Nachdem ich einen laenglichen Stein an einen Ast gebunden habe, sieht das ganze wie eine Egge aus. Damit sollte es mir moeglich sein, ein Feld anzulegen, so dass ich nicht mehr nur auf diese laestigen Buesche angewiesen bin." + EGGE "Egge" + TAGENDE1 "Tag /a ist nun zu Ende. Leider habe ich es nicht mehr bis zu einer angenehmen Schlafstelle geschafft, deshalb muss ich heute nacht unter freien Himmel schlafen. Die wilden Tiere lassen mir keine Ruhe, deshalb sinkt meine Gesundheit auf /b %. Meine Chance gerettet zu werden betraegt /c %." + GERETTET "Endlich ein Schiff!! Dank meiner intensiven Bemuehungen wurde ich entdeckt und nun ankert das Schiff vor der Insel. Soll ich diese trostlose Insel verlassen? /d " + BEGINNZELT "Zelt bauen" + ROHSTOFFNICHT "Ich habe leider nicht genug Rohstoffe, um den Bau fortzusetzen." + KEINBAUM "Hier steht leider kein Baum." + WEITER "Vorgang fortsetzen" + STOP "Vorgang unterbrechen" + TAGENDE2 "Tag /a ist nun zu Ende. Zum Glueck bin ich rechtzeitig zu meinem Zelt gekommen, so lassen mich wenigstens die Fledermaeuse in Ruhe. Allerdings beissen mich wilde Tiere in meine Fuesse, deshalb sinkt meine Gesundheit auf /b %. Meine Chance gerettet zu werden betraegt /c %." + BEGINNSCHLAFEN "1 Stunde schlafen" + WIESETEXT "Wiese" + MEERTEXT "Meer" + STRANDTEXT "Strand" +END + +STRINGTABLE DISCARDABLE +BEGIN + TREIBSANDTEXT "Treibsand" + FEUCHTEWIESETEXT "feuchte Wiese" + BAUMTEXT "Baum" + FELDTEXT "Feld" + ZELTTEXT "Zelt" + BUSCHTEXT "Busch" + MIT "mit" + LIANE "Liane " + ROHLIANEGEFUNDEN "Mit sehr viel Muehe habe ich es geschafft, eine Liane vom Baum abzureissen. Mit Lianen kann man sehr viel anstellen, deshalb werde ich sie die naechste Zeit mit mir herumschleppen." + ROHLIANEZUVIEL "So nützlich sind Lianen dann doch wieder nicht, dass ich so viele davon mit mir herumtragen muss." + ANGEL "Angel" + BAUEANGEL "Dieser duenne, biegsame Ast und diese Liane lassen sich vorzueglich zu einer Angel verbinden. Endlich muss ich nicht mehr vegetarisch leben und kann mir ein paar fette Forellen fischen." + BEGINNANGELN "Angeln" + KEINWASSER "Wo soll ich denn hier angeln?" + BOOTTEXT "Einbaum" + BEGINNBOOT "Einbaum bauen" +END + +STRINGTABLE DISCARDABLE +BEGIN + STAMM "Baumstamm" + BEGINNABLEGEN "An- und Ablegen" + TAGENDE3 "Tag /a ist nun zu Ende. Es ist stockdunkel, ich treibe ab und werde wohl sterben. Das wird mir eine Lehre sein. " + FLUSSTEXT "Fluss" + BEGINNROHR "Bewaesserungsanlage bauen" + ROHRTEXT "Bewaesserungsrohr" + BEGINNDESTROY "Bauwerk abreissen" + KEINBAUWERK "Hier ist leider kein Bauwerk, das ich abreissen kann." + BEGINNSOS "S.O.S. schreiben" + SOSTEXT "S.O.S." + BAUMZUGROSS "Der ist mir eine Nummer zu gross." + BEGINNHAUS1 "Leiter fuer Baumhaus bauen" + HAUS1TEXT "Baum und Leiter" + HAMMER "Hammer" + BEGINNHAUS2 "Plattform fuer Baumhaus bauen" + HAUS2TEXT "Baum und Plattform" +END + +STRINGTABLE DISCARDABLE +BEGIN + HAUS3TEXT "Baum und Baumhaus" + BEGINNHAUS3 "Baumhaus bauen" + TAGENDE4 "Tag /a ist nun zu Ende. Bin ich froh, dass ich mir dieses schoene Baumhaus gebaut habe. So lassen mich die wilden Tiere in Frieden. Ich schlafe ausgezeichnet und meine Gesundheit steigt auf /b %. Meine Chance gerettet zu werden betraegt /c %." + BAUMZUKLEIN "Dieser Baum ist eine Nummer zu klein." + NICHTOHNELEITER "Ohne Leiter kann ich keine Plattform bauen." + NICHTOHNEPLATTFORM "Das Baumhaus kann ich nur auf einer Plattform bauen." + CHANCETEXT "Meine Chance heute gerettet zu werden" + BAUMGROSSTEXT "grossem Baum" + FEUERSTELLETEXT "Feuerstelle" + BEGINNFEUERSTELLE "Holz fuer Feuerstelle aufstapeln" + FEUERTEXT "Signalfeuer" + BEGINNANZUENDEN "Feuerstelle anzuenden" + KEINEFEUERST "Ich kann nur Feuerstellen anzuenden" + BEGINNAUSSCHAU "Nach Rettung Ausschau halten" + FERNROHR "Fernrohr" + BEGINNSCHATZKARTE "Schatzkarte anschauen" +END + +STRINGTABLE DISCARDABLE +BEGIN + SCHAUFEL "Schaufel" + STREICHHOLZ "Streichhoelzer" + BEGINNSCHATZ "Nach Schatz graben" + SCHATZGEFUNDEN "Hurra!! Ich habe einen alten Piratenschatz gefunden. Mit Hoffnung auf einen grossartigen Schatz oeffnete ich die alte modrige Kiste und entdeckte ... nur eine Streichholzschachtel. Was solls, ich kann mir hier eh nichts kaufen." + KEINSCHATZ "Obwohl ich die ganze Gegend hier umgegraben habe, habe ich keinen Schatz gefunden. Vielleicht sollte ich mir erst eine Schatzkarte anschauen." + WRACKTEXT "Schiffswrack" + FERNROHRGEFUNDEN "Ich habe das gesamte Wrack abgesucht.Als ich in die Kapitaenskajute getaucht bin, habe ich mein altes Fernrohr gefunden. Damit kann ich nach Schiffen Ausschau halten und meine Chance, gerettet zu werden, steigt. /z Auf dem Weg nach draussen entdeckte ich noch den Hammer und einige Naegel vom Schiffszimmermann. Damit kann ich mir eine stabilere Behausung bauen." + INTROTEXT "Jetzt habe ich den Schlamassel: Gestrandet auf einer einsamen Insel mitten im Pazifik. Ich sollte mich schnellstens nach Suesswasser und Nahrung umsehen. Vielleicht kann ich mir auch ein paar Werkzeuge bauen." + NICHTSGEFUNDEN2 "Ich habe den ganzen Grund abgesucht, aber nichts von Interesse gefunden." + KARTE "Schatzkarte" + KARTEGEFUNDEN "Ich tauchte durch das uralte Piratenschiff, allerdings ohne etwas zu finden, bis ich ploetzlich das Skelett des Kapitains fand. In der Hand hielt er noch eine erstaunlich gut erhaltene Schatzkarte. Nachdem ich sie an mich genommen hatte, nahm ich mir noch eine Schaufel mit. Jetzt kann ich mir die Zeit mit einer Schatzsuche vertreiben. " + ANIMATIONAUS "Wasseranimationen ausschalten" + ANIMATIONAN "Wasseranimationen anschalten" + ASTPLUSLIANENICHTS "Mehr kann ich mir auch mit einer Liane und einem Ast nicht bauen." + SCHLEUDER "Steinschleuder" + STEINPLUSLIANENICHTS "Mir faellt nichts mehr ein, was ich mir aus einer Liane und einem Stein bauen könnte." +END + +STRINGTABLE DISCARDABLE +BEGIN + BAUESCHLEUDER "Ich knotete eine Schlaufe in die Liane und jetzt kann man sie als Steinschleuder missbrauchen. Einfach noch den Stein in die Schlaufe gelegt und ich kann auf Jagd gehen. Da es am Tag auf dieser Insel nur Voegel zu geben scheint, sollte ich mich darauf beschraenken, diese Tiere von den Baeumen zu schiessen." + KEINVOGEL "Hier sind keine Voegel." + BEGINNSCHLEUDER "Auf Vogeljagd gehen" + NICHTAUFWASSERSCHLAFEN "In diesem kleinen Boot ist es zum Schlafen zu gefaehrlich." + WELLENZUHOCH "Die Wellen sind zu hoch, um etwas zu sehen." + GRABENBEDINGUNGEN "Ich kann nur auf flachen und freien Gegenden nach einem Schatz graben." + FELDBEDINGUNGEN "Felder kann ich nur auf flachen, feuchten und freien Wiesen anlegen." + ZELTBEDINGUNGEN "Zelte kann ich nur auf einer flachen und freien Gegend bauen." + BOOTBEDINGUNGEN "Boote kann ich nur auf einem freien Strandabschnitt bauen." + ROHRBEDINGUNGEN "Rohre kann ich nur auf flachen und freien Gegenden bauen." + SOSBEDINGUNGEN "SOS kann ich nur auf flachen und freien Gegenden schreiben." + FEUERSTELLENBEDINGUNGEN "Feuerstellen kann ich nur in flachen und freien Landschaften anlegen." + BOOTHILFE "Ich habe nun mein erstes Boot gebaut. (Zum An- und Ablegen auf den 'Anker-Knopf' klicken.) Anlegen kann ich nur, wenn auf dem Strand nichts im Weg ist. Auch sollte ich immer die Zeit im Auge haben, da ich eine Nacht auf hoher See nicht ueberleben wuerde." + FELDHILFE "Mein erstes Feld ist fertig. Das Getreide wird von ganz allein wachsen und, wenn es schoen gelb ist, kann ich es essen. " + FEUERSTELLEHILFE "Jetzt habe ich einen grossen Haufen Holz aufgebaut. Womit kann ihn anzuenden? Das Feuer wuerde eine Weile brennen und meine Chance erhoehen, gerettet zu werden. Je hoeher die Feuerstelle liegt, desto besser." + HAUS3HILFE "Meine Baumhaus ist endlich fertig. Dort kann ich jederzeit ein Schlaefchen machen und mich erholen. Wenn ich dort uebernachten will, sollte ich puenktlich um 18.00 Uhr, wenn es dunkel wird, in unmittelbarer Naehe sein." +END + +STRINGTABLE DISCARDABLE +BEGIN + ROHRHILFE "Jetzt besitze ich eine eigene Bewaesserungsanlage. Sie wird sich mit Wasser fuellen, wenn ich sie in der Naehe eines Flusses gebaut habe. Damit werden die anliegenden Wiesen befeuchtet, so dass ich auch dort Felder anlegen kann. Diese gehen natuerlich auch wieder ein, wenn ich das Rohr abreisse." + SOSHILFE "So, jetzt muessten mich vorbeifliegende Flugzeuge bemerken und Hilfe schicken. Auf dem Strand ist das SOS besonders gut zu lesen." + ZELTHILFE "Endlich habe ich ein Dach ueber dem Kopf. Dort kann ich jederzeit ein Nickerchen machen. Wenn ich es auch in der Nacht benutzen will, muss ich mich, wenn es dunkel wird (18.00 Uhr), in der Naehe befinden." + SPIELVERLASSEN "Willst du das Spiel wirklich verlassen? /z (Der Spielstand wird automatisch gespeichert) /d " + BEENDEN "Spiel beenden" + NEUBEGINNEN "Willst du das Spiel neu starten? /d " + NEU "Spiel neu starten" + TAGNEU "Willst du den Tag noch einmal neu beginnen? /d " + TOD "Ich fuehle mich ploetzlich ganz seltsam. Ich spuere, dass ich sterbe..." + TAGENDE5 "Tag /a ist nun zu Ende. Ich fuehle mich nicht besonders gut und werde die Nacht wohl nicht ueberleben. " + TAGNEU2 "Tag neu starten" + SOUNDAN "Sound anstellen" + SOUNDAUS "Sound austellen" + KEINSOUND "Leider kein Sound" +END + +#endif // Deutsch (Deutschland) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Math.cpp b/src/Math.cpp similarity index 100% rename from Math.cpp rename to src/Math.cpp diff --git a/Math.hpp b/src/Math.hpp similarity index 100% rename from Math.hpp rename to src/Math.hpp diff --git a/Renderer.cpp b/src/Renderer.cpp similarity index 100% rename from Renderer.cpp rename to src/Renderer.cpp diff --git a/Renderer.hpp b/src/Renderer.hpp similarity index 100% rename from Renderer.hpp rename to src/Renderer.hpp diff --git a/Routing.cpp b/src/Routing.cpp similarity index 100% rename from Routing.cpp rename to src/Routing.cpp diff --git a/Routing.hpp b/src/Routing.hpp similarity index 100% rename from Routing.hpp rename to src/Routing.hpp diff --git a/Sound.cpp b/src/Sound.cpp similarity index 100% rename from Sound.cpp rename to src/Sound.cpp diff --git a/Sound.hpp b/src/Sound.hpp similarity index 100% rename from Sound.hpp rename to src/Sound.hpp diff --git a/World.cpp b/src/World.cpp similarity index 100% rename from World.cpp rename to src/World.cpp diff --git a/World.hpp b/src/World.hpp similarity index 100% rename from World.hpp rename to src/World.hpp diff --git a/constants.hpp b/src/constants.hpp similarity index 100% rename from constants.hpp rename to src/constants.hpp diff --git a/ddutil.cpp b/src/ddutil.cpp similarity index 100% rename from ddutil.cpp rename to src/ddutil.cpp diff --git a/ddutil.h b/src/ddutil.h similarity index 100% rename from ddutil.h rename to src/ddutil.h diff --git a/extern.hpp b/src/extern.hpp similarity index 100% rename from extern.hpp rename to src/extern.hpp diff --git a/globals.cpp b/src/globals.cpp similarity index 100% rename from globals.cpp rename to src/globals.cpp diff --git a/headers.hpp b/src/headers.hpp similarity index 100% rename from headers.hpp rename to src/headers.hpp diff --git a/main.cpp b/src/main.cpp similarity index 100% rename from main.cpp rename to src/main.cpp diff --git a/resource.h b/src/resource.h similarity index 100% rename from resource.h rename to src/resource.h diff --git a/types.hpp b/src/types.hpp similarity index 100% rename from types.hpp rename to src/types.hpp From 31c1c4e2080d510552d87aab4236cf41bdbd79f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Wed, 14 Jan 2015 03:04:08 +0100 Subject: [PATCH 6/6] Fixed some project settings and updated the README.md. --- README.md | 1 + build/Landscape.vcxproj | 8 +++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 32b4dab..806557c 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Author Downloads --------- +* [Port Game](http://github.com/eXpl0it3r/Schiffbruch/releases/latest) * [Port SDK](http://github.com/eXpl0it3r/Schiffbruch/archive/master.zip) * [Original Game](http://www.heikoplate.de/dP-Software/zips/schiffbruch.exe) * [Original SDK](http://www.heikoplate.de/dP-Software/zips/schiffbruchsdk.zip) diff --git a/build/Landscape.vcxproj b/build/Landscape.vcxproj index 99b5af8..d35d005 100644 --- a/build/Landscape.vcxproj +++ b/build/Landscape.vcxproj @@ -140,10 +140,9 @@ true true Windows - - + .\Debug\Schiffbruch.exe dsound.lib;winmm.lib;dxguid.lib;ddraw.lib;dinput.lib;xinput.lib;dinput8.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86;C:\Users\Lukas\Downloads\S; + C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86 false @@ -182,8 +181,7 @@ true Windows - - + .\Release\Schiffbruch.exe dsound.lib;winmm.lib;dxguid.lib;ddraw.lib;dinput.lib;xinput.lib;dinput8.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) false